1. 程式人生 > >NLP --- 最大熵模型的解法(GIS演算法、IIS演算法)

NLP --- 最大熵模型的解法(GIS演算法、IIS演算法)

上一節中我們詳細的介紹了什麼是最大熵模型,也推匯出了最大熵模型的目標公式,但是沒給出如何求解的問題,本節將詳細講解GIS演算法求解最大熵模型的過程,這裡先把上一節的推匯出的公式拿過來:

上面第一個式子是說我們要尋找的P要滿足k個約束條件,下式說是在滿足的約束的情況下,找到是熵值最大的那個P。下面給出P^*的形式:

上式是指數族表示式,只有一個未知數即\alpha,其中\pi是歸一化因子,一旦約束條件確定,那麼歸一化因子就確定了,為什麼要有歸一化因子呢?因為總概率和為1這個條件必須得滿足的。所以現在我們需要求出(2)的未知數即\alpha,怎麼求呢?需要通過GIS演算法,下面就詳細的介紹GIS演算法。

GIS演算法(Generalized Iterative Scaling)

本節還是參考那篇文章即《A Simple Introduction to Maximum Entropy Models for Natural Language Processing》,大家可以對照看一下,下面正式開始本節的內容:

首先我們先使所有特徵函式的和等於C,如下:

那可能就有人懷疑了,這個C怎麼確定才能滿足呢?這裡給出一種可能:

既然取得是最大的,那麼就有可能不滿足上式,怎麼辦呢?這裡引入一個矯正函式,和上面的形式一樣,怎麼確定這個矯正函式呢?如下所示:

上式挺暴力的,如果不滿足,我把剩下的直接付給一個函式,然後在加上去就滿足了,確實滿足了。其實這樣做對後面的計算沒什麼影響,我們繼續往下看;

這裡我們需要先假設至少存在一個特徵函式為1,目的是總概率必須為1,如下:

下面我們就看看如何求解\alpha

                                                                

其中:

 

如①式第一次迭代\large \alpha _j^0=1說明剛開所有的特徵的概率相等,此時的熵是最大的,這個可以為1 ,那麼上面的第②式子就是迭代了,其實第二個式子很簡單,大家不要把他們理解的太難了,我們一起來看看他是如何迭代的, 其中\hat{Ef_j}是原始的特徵期望或者說是約束條件的和,而E^{(n)}f_j是第n次迭代得到的期望,那麼他們的比值說明了什麼呢,如果第n次迭代的結果偏大即 \large \alpha _j^n偏大,則比值會小於1,那麼\large \alpha _j^n乘上小於1的數就會使得第n+1的值減小即\large \alpha _j^{n+1}\large \alpha _j^n小,這樣就會不斷的向著最優解靠近了,和EM的思想差不多,這裡大家需要好好理解。

GIS的大概思路就是這樣的,但是這個演算法雖然可以求解我們的最大熵模型,但是計算量太大了,以至於使用受限,計算量主要體現在哪裡呢?計算量主要在自然語言處理的特徵很多的,有時一個文字中的特徵有上百萬個,而每個特徵都要參與上面的計算,而且還要不停的多次迭代,這就導致了計算量很大的原因,因此這個演算法的使用受到了限制,那如何改進呢?後來
Vincent J. Della Pietra  提出了改進型的迭代演算法即IIS演算法(Improved Iterative Scaling),他是如何改進計算量的呢?我們下面看看:

 IIS演算法(Improved Iterative Scaling)

其實IIS和GIS很類似,不同之處在於GIS演算法有一個矯正項,目的是使的所有特徵特徵等於一個常數C,但是並沒有那麼容易滿足,因此IIS的和他不同之處就是我可以不用非要滿足這個所有特徵等於一個常數,如果等於C就按照GIS進行求解,如果不滿足就按照牛頓法進行求解即可。下面直接給出原始論文的IIS演算法過程,當然看李航的書也是一樣的,只是寫的方式有點不一樣,論文裡是使用\large \alpha _j^n表示指數族,而李航的未知數直接放在以e為底的指數上了,大家需要注意區別,同時IIS演算法出自這篇論文

《A Maximum Entropy Approach to Natural Language Processing》Vincent J. Della Pietra ,下面給出這篇論文的演算法過程:

 

這裡建議先看看李航先生的書即《統計學習方法》的第六章的最大熵模型,如果大家對上一節的原理搞明白了,那麼看他的書還是很容易理解的,只是使用的表示式不一樣吧了,雖然都是指數族函式,但是他那本書使用的是以自然對數的指數族函式,原理和我們上一節是一樣的,只是求解最大熵模型的思路不一樣,我們上面使用的是GIS演算法進行求解,李航先生的書是根據拉格朗日乘子進行求解的,其實他的主要思路是我們上一節不是有兩個約束條件嗎,如果大家理解支援向量機的話,理解他的解決思路就很簡單了,這裡不懂的建議還是系統的把支援向量機學習一下吧,我在機器學習模組中對此進行了詳細的講解,這裡大家可以去看看。他把含有約束條件的求解最大熵模型通過拉格朗日乘子法,把約束條件和目標式子合二為一,通過對偶問題進行求解,最後就得到一個最大的概率含引數的模型,通過樣本就可以求出引數,最後就可以確定了引數的值,這就是李航的解法。後面李航的書繼續介紹了最優化演算法,即IIS演算法,講解的很詳細,這裡就不細講了,也不做搬運工了,大家可以找到這本書好好研究,當然需要你有很好的數學基礎,如果你對SVM的理解很深入,我覺的看他的書是一種享受,他寫的很簡明扼要,裡面會有大量的數學公式,看起來也很順利,這裡簡單的把IIS演算法的過程講解一下,細節部分,建議看李航的書。

已知最大熵模型為:

其中:

  上式L(w)就是通過拉格朗日乘子法最後確定的模型,通過極大釋然估計求得w就求出了最大熵模型的引數了。

詳細的推倒過程請檢視李航的書,這裡不再贅述了。請大家一定要好好看看那一章,一定要深入理解他們,這裡我就偷懶了,不再敘述了。下面簡單的介紹一下把最大熵模型和隱馬爾可夫結合在一起的應用。

MEMM(maximum-entropy Markov model,MEMM)

最大熵馬爾可夫模型(maximum-entropy Markov model,MEMM)又稱條件馬爾可夫模型(conditionalMarkovmodel,CMM),由Andrew McCallum,DayneFreitag和FernandoPereira二人於2000年提出[McCallum,2000〕。它結合了隱馬爾可夫模型和最大熵模型的共同特點,被廣泛應用於處理序列標註問題。文獻[McCallumal.,2000]認為,在HMM模型中存在兩個問題:.在很多序列標註任務中,尤其當不能列舉觀察輸出時,需要用大量的特徵來刻畫觀察序列。如在文字中識別一個未見的公司名字時,除了傳統的單詞識別方法以外,還需要用到很多特徵資訊,如大寫字母、結尾詞、詞性、格式、在文字中的位置等。也就是說,我們需要用特徵對觀察輸出進行引數化。(2)在很多自然語言處理任務中,需要解決的問題是在已知觀察序列的情況下求解狀態序列,HMM採用生成式的聯合概率模型(狀態序列與觀察序列的聯合概率P(S_T,0_T)來求解這種條件概率問題P(S_T,0_T),這種方法不適合處理用很多特徵描述觀察序列的情況。為此,MEMM直接採用條件概率模型P(S_T,0_T),從而使觀察輸出可以用特徵表示,藉助最大熵框架進行特徵選取。

MEMM主要求解HMM的第二個問題,因此這裡我們看看他們二者的區別:

 (a)為傳統HMM的依存關係圖,實線箭頭表示所指的結點依賴於箭頭起始結點,虛線箭頭表示箭頭所指的結點是起始結點條件。圖(b)為MEMM的依存關係圖。在HMM中解碼過程求解的是,而在MEMMM中解碼器

 求解的是。在HMM中,當前時刻的觀察輸出只取決於當前狀態,而在MEMM中,當前時刻的觀察輸出還可能取決於前一時刻的狀態。假設已知觀察序列O_1,O_2,...,O_T研,要求解狀態序列S_1,S_2,...,S_T,並使條件概率P(S_1,S_2,...,S_T|O_1,O_2,..,O_T)最大。在MEMM中,將這一概率因子化為馬爾可夫轉移概率,該轉移概率依賴於當前時刻的觀察和前一時刻的狀態:

對於前一時刻每個可能的狀態取值的概率通過最大熵分類器建模和當前觀察輸出O_t = o,當前狀態取值

其中,Z(o,s')為歸一化因子,f_a(o,s)為特徵函式,\lambda _a為特徵函式的權重,可以利用GIS演算法,從訓練樣本中估計出來。f_a(o,s)可以通過a =\left \langle b,r \right \rangle定義,其中,b是當前觀察的{0,1}二值特徵,r是狀態取值。

HMM中用於引數估計的Baum-Welch演算法修改後可用於MEMM的狀態轉移概率估計。在Viterbi演算法中,如果t時刻到達狀態5時產生觀察序列的前向概率為\large \alpha _t(s),那麼,

在MEMM中,將\large \alpha _t(s)定義為在時刻t的狀態為s,給定到達t時刻為止的觀察序列時的前向概率:


相應的後向概率\beta _t(s)為在給定t時刻之後的觀察序列時,從t時刻、狀態開始的概率:

MEMM是有向圖和無向圖的混合模型,其主體還是有向圖框架。與HMM相比,MEMM的最大優點在於它允許使用任意特徵刻畫觀察序列,這一特性有利於針對特定任務充分利用領域知識設計特徵。MEMM與HMM和條件隨機場(conditional random fields,CRFs)模型相比,MEMM的引數訓練過程非常高效,在HMM和CRF模型的訓練中,需要利用前向後向演算法作為內部迴圈,而在MEMM中估計狀態轉移概率時可以逐個獨立進行。MEMM的缺點在於存在標記偏置問題(labelbiasproblem),其中一個原因是熵低的狀態轉移分佈會忽略它們的觀察輸出,而另一個原因是MEMM像HMM一樣,其引數訓練過程是自左向右依據前面已經標註的標記進行的,一旦在實際測試時前面的標記不能確定時,MEMM往往難以處理。

下一節我們在這個基礎上進行引入條件隨機場。