crf進行詞性標記詳解


關於crf內容我看到了幾篇寫的不錯的博客,具體鏈接如下,在此記錄一下,僅做學習

CRF系列(一)——一個簡單的例子

條件隨機場CRF(一)從隨機場到線性鏈條件隨機場

條件隨機場CRF(二) 前向后向算法評估標記序列概率

條件隨機場CRF(三) 模型學習與維特比算法解碼

CRF可以應用於對一串序列進行自動標注的問題。例如對文字序列進行詞性標,即要自動判斷句子中每個單詞的詞性。在這樣的問題中,每一個詞的標注結果,不僅依賴於該詞語本身,還會依賴於其他詞語的標注結果。CRF可以考慮到這樣的依賴關系。

本文會以一個詞性標注的應用為例,介紹CRF所解決的問題以及CRF模型的建立,學習與預測過程。

任務描述

詞性標注(part-of-speech tagging),其目標就是對一個句子即一串單詞的序列進行打標簽(tagging),標注每個詞的詞性(ADJECTIVE, NOUN, PREPOSITION, VERB, ADVERB, ARTICLE)。我們假設在詞性標准任務中,每個單詞的詞性不僅依賴其本身,而且也會依賴其前一個單詞(這里做了簡化,實際上每個單詞的標注結果依賴更多東西)。

下面,我將針對對這個問題,建立一個簡單的線性鏈條件隨機場(linear-chain CRF)。並介紹這個CRF是如何表示上述的依賴關系,以及如何利用這個CRF來求解這個問題。

實際上,和其他的統計機器學習模型一樣,我們有三個任務要完成:

1)指定模型參數(建立模型)

2)估計這些參數(學習)

3)利用這些參數進行預測(預測)

第一個任務——建立模型

特征函數

為了評價序列中每個單詞屬於各個tag的可能性,我們要根據單詞的位置定義一系列特征函數(feature function),在線性鏈CRF模型中,特征函數表示如下:

[公式]

其中 [公式] 表示序列, [公式] 表示該詞在序列中的位置, [公式] 表示對該單詞標注的詞性。

每個特征函數表示的是當位置為 [公式] 時,當前位置單詞標注為 [公式] 且它前一個單詞標注為 [公式] 時的"可能性",不過這個"可能性"並不是一個概率,它通常為0或1。

例如,可以定義如下特征函數:

[公式]

[公式]

[公式]

[公式]

...

可以看到每一個特征函數的值只與當前位置和前一個位置有關,因此,可以說它有能力表示出我們之前所說的依賴關系。

模型

有了特征函數,我們就可以開始建立模型了。

所謂的建模,其實就是要表示出當給定句子,也就是單詞序列 [公式] 時,整個句子標注為 [公式] 的概率,即條件概率:

[公式]

也就是當 [公式] 給定的情況下, [公式] 的聯合概率

[公式]

權重

每個特征函數對整體的影響應該是不同的,因此,需要為每個函數加上權重 [公式] ,權重越大,則該特征函數對標注結果的影響越大。那么每個特征函數的權重應該取多少呢?實際上這些權重 [公式] 就是我們所說的參數了,而這些參數如何取值就是我們的第二個任務——參數學習,這個會在下一節講。

非歸一化概率

每個特征函數表示的是每個位置的可能性,那么整個句子被標注為 [公式] 的可能性當然就是各個位置的可能性的乘積。

[公式]

不過為了方便計算,我們使用指數形式來表示特征: [公式] 。這樣,乘法就變成了加法:

[公式]

參數模型

此時,我們的模型已經呼之欲出了,

現在所表示的"可能性"還不是一個概率,應該要做歸一化處理,使它的值在0到1之間,因此引入歸一化項 [公式]

[公式]

這樣,我們所需要的條件概率就得到了:

[公式]

其中 [公式][公式] 都是向量, [公式]

小結

這就是我們的線性鏈CRF參數模型,它有能力表示這樣的依賴關系:每個位置的標注結果不僅依賴於該位置的單詞本身,同時還依賴前一個位置的標注結果。

同時我們還指定了模型的參數為每個特征函數的權重 [公式]

第二個任務——學習

目標

學習的目標其實就是找到一組參數 [公式] ,在訓練數據序列 [公式] 和標注 [公式] 上,使條件概率 [公式] 最大化,即找到​ [公式] ,使:

[公式]

學習的方法有很多,例如梯度下降,最大似然估計等,這里就不多說了。

這樣學習的任務看似就完成了,不過等等!問題好像並不是這么簡單。

計算問題

我們再看看 [公式]

[公式]

看到最左邊的求和: [公式] ,這里其實寫得簡單了, [公式] 是一個向量,所以其完整形式應該是:

[公式]

即在每個位置上都有 [公式] 種可能的標注結果,那么長度為 [公式] 的句子,就有 [公式] 種情況,即使每個單詞只分兩種詞性,長度為15個單詞的序列,其計算量都有 [公式] ,因此想要直接計算 [公式] 是很難的

前向-后向算法

我們所研究的對象,通常都是很長的序列,根據上面所說,對於這種高維數據,想要直接計算 [公式] 是很難的,因此,在線性鏈CRF中,為了得到 [公式] 需要前向-后向算法

對於前向-后向算法,在這里先不做過多說明,在之后的文章中會詳細介紹。

小結

這樣,我們第二個任務也搞定了。

參數的學習就是根據訓練數據找到能使條件概率最大化的參數;

但是由於數據維度高,計算量很大,因此會使用前向-后向算法來計算線性鏈條件隨機場的歸一化項 [公式]

第三個任務——預測

現在我們已經有了模型,並且在已知的數據集上得到了該模型最優的參數,接下來就是根據這個模型及參數對未知的數據進行推測了。具體到我們的詞性標注問題,就是給定一個已知句子 [公式] ,但是其標注未知,通過模型推測每個單詞可能性最大的詞性,即找到最優的一組 [公式] ,使:

[公式]

計算問題

這回我們謹慎一點,先看看計算有沒有問題。

把公式展開:

[公式]

[公式] 概率最大的一個 [公式] ,而對於每一個 [公式][公式] 都是一樣的,因此原問題變成:" alt="我們只是要找到能使 [公式] 概率最大的一個 [公式] ,而對於每一個 [公式][公式] 都是一樣的,因此原問題變成:

[公式]

太好了, [公式] 不用計算了。

不過為了找到最優的 [公式] ,總不可能真的把每一個 [公式] 都試一遍吧,這樣計算量仍然很大。

那么維特比算法就是為了解決上述問題的,它利用了動態規划的思想,不過具體算法我們也先暫時不說,會在后面的文章里詳細說明。

小結

這樣,我們知道了如何利用建立好的模型以及學習好的參數,對詞性未知的句子進行標注了。同時,為了得到這個最優的標注,需要使用維特比算法

總結

至此,我們通過一個詞性標注的例子,了解了:

  1. CRF適用於這樣的情況:對於多個位置的標注,每一個位置的標注結果,不僅與其本身有關,而且依賴於其他位置的標注結果。
  2. CRF與其他統計機器學習模型一樣,可以分為三個部分,分別是:
    1. 模型的建立
    2. 參數的學習
    3. 推測
  3. 對於模型的建立,我們使用了特征函數,它保證了模型擁有表示我們所需的依賴關系的能力。
  4. 對於模型參數的學習以及結果的預測,發現高維數據帶來很大的計算量,因此需要一些算法來簡化計算。

但是,還有一些問題需要探索:

  1. CRF是一種概率圖模型,那么什么是概率圖模型?從概率圖的角度我們怎么看條件隨機場?其他的概率圖模型又能解決什么樣的問題?
  2. 我們在這里說的都是線性鏈條件隨機場(Linear Chain CRF),那么其他形式的CRF是怎樣的,它們能解決什么問題?
  3. 在線性鏈CRF中,為了解決計算問題,在學習和預測中所用到的前向-后向算法以及維特比算法分別是什么?
  4. 我們現在看到的是CRF在NLP方面的應用,那么在圖像處理中,如何利用CRF提高預測效果?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM