1. 程式人生 > >NLP --- 條件隨機場CRF(概率計算問題)

NLP --- 條件隨機場CRF(概率計算問題)

上一節詳解的闡述了條件隨機場的定義和簡單的學習演算法推倒,這裡不懂的前翻看前兩節的部落格,這裡不再贅述,本節將主要求期望的問題,為什麼要求解期望?本節主要參考的內容是一篇論文和李航的書,論文是《Conditional Random Fields: An Introduction》 Hanna M. Wallach  February 24, 2004,這是一篇綜述論文,裡面也介紹了求模型期望問題,下面我們詳解講解對模型求期望的原因,李航書的是11.3節的內容。下面開始:

期望計算

假如我們現在有一個演算法模型,裡面有待求引數,我們通過樣本進行了訓練獲得了引數的值,這時候我們得到了參,這個演算法模型也就確定下來了,現在的問題是我不知道這個模型是不是正確的,我有點懷疑這個模型,怎麼才能知道這個模型是不是正確的呢?例如我們上一節說的IIS演算法,這個演算法一定是是正確的嗎?收斂能得到保證嗎?能否達到我們的與其效果呢?怎麼做呢?

其實很簡單,這裡我們可以把求得的引數代入模型,那麼這個模型就會唯一的確定了下來,通過這個模型我們可以計算出這個模型的期望,然後再通過訓練樣本進行計算樣本的期望,觀察兩個期望是否相等或者很接近,如果相等或者接近就說明這個模型是有效的,反之是無效了,那麼問題來了,為什麼期望值相等或者接近就是有效的呢?針對條件隨機場來說是因為我們在設計模型時有一個條件,大家是否還記得:

                          

約束條件,對,我們當初建立模型的時候就是在滿足約束條件成立的情況下進行建立的,因此我們可以通過期望進行檢驗,如果兩個期望很接近說明沒問題,反之,這個模型可能就錯了,下面我們來詳細的看看,模型期望的計算過程:

前項--後向演算法 

對每個指標i= 0,1,2,...,n+1,定義前項向量\alpha _i(x):

遞推公式為:

又可以表示為:                          

\alpha _i(y_i|x)表示在位置i的標記是y_i並且到位置i的前部分標記序列的非規範化概率,y_i可取的值有m個,所以\alpha _i(y_i|x)就有m維列向量. 

同樣,對每個指標i= 0,1,2,...,n+1,定義後向向量\beta _i(x):

又可以表示:

\beta _i(y_i|x)表示在位置i的標記為y_i並且從\large i+1n的後部分標記序列的非規範化概率、.

由前項和後向向量定義不難得到:

其中“1” 是m維向量。

上面的公式和維特比演算法很類似,這裡需要大家對動態規劃有一個清晰的深入理解,尤其是遞推公式才能想通,這裡大家需要好好理解一下動態規劃。

概率計算

按照前後向向量的定義,很容易計算標記序列在位置i是標記y_i的條件概率和在位置\large i-1i是標記y_{i-1}y_i的條件概率:

其中:

 這裡不解釋了,很簡單,很容易理解,前提是你需要理解什麼是動態規劃。

期望計算

下面我們就來看看如何計算期望:

通過上面的概率可以分別計算出聯合概率密度即P(X,Y)和條件概率密度即P(Y|X),分別計算他們的期望,如下:

特徵函式f_k(\bullet )關於條件分佈的條件分佈P(Y|X)的期望為:

 其中:

假設經驗分佈的聯合概率分佈為\tilde{P}(X),特徵函式f_k(\bullet )的聯合概率概率密度為 P(X,Y)的數學期望:

 這裡大家需要搞懂上面的公式是如何遞推的,其實就是把前兩節的公式拿過來帶進了就可以了,大家找到對應的公式,帶進去即可求解,那麼當我們計算出期望以後我們就可以就可以比較這兩個期望的大小,然後進行對我們的建模是否正確可以給一個正確的評價,這裡大家只需要知道計算期望值的原因是什麼以及大概瞭解如何計算的,我們不需要深入理解,當我們實現演算法時在深入研究即可,但是現在這些演算法都已經實現了,如果我們需要在此基礎上修改演算法,則需要深入研究具體程式碼是如何實現的,這裡大家只需瞭解過程既可,這一節就到這裡,有點少,但是感覺挺重要的,下一節CRF的預測演算法。