1. 程式人生 > >NLP --- 條件隨機場CRF(預測演算法詳解)

NLP --- 條件隨機場CRF(預測演算法詳解)

前幾節我們大概的介紹了學習演算法,即GIS和IIS的演算法,這兩個演算法在最大熵模型中講的比較詳細,想要深入理解這兩個演算法,需要你理解動態規劃演算法。這裡的條件隨機場實際上是根據最大熵模型的思想過來的,因為通過前面我們可以看出CRF演算法的目標公式就是按照最大熵演算法構造而來的,不同的是特徵函式的選取不同,但是都是大同小異,因此這裡大家需要對最大熵模型深入理解,而條件隨機場是根據隱馬爾可夫過來的,在他的基礎上加上概率圖模型和團的思想簡單來講就是把可觀測符號的獨立性假設去掉了,同時引入判斷當前的轉態和前一個狀態有關,這是符合語言特性的,因此,他們的關係大家應該搞清楚,只有這樣我們在遇到實際問題時才能辨別出問題是適合哪個演算法模型,或者問題出在哪裡,所有這一部分很重要,本節將詳細講解CRF是如何預測的。

條件隨機場的預測演算法

我們先把條件隨機場的目標公式拿過來,首先是定義式,然後是簡化向量式和矩陣式,具體定義請參考前文或者李航的書:

定義式:

簡化向量式: 

矩陣式:

上面都是條件隨機場的目標函式,定義式有兩個引數,分別是對轉移狀態和位置的特徵的權值引數,簡化向量式是為了方便計算把兩個引數合二為一了,原理還是一樣的,矩陣式是為了適合程式設計進行的調整,其中我們通過最大熵模型的求解演算法IIS進行求解w的權值,最後檢查一下建立模型的有效性,計算一下期望比對一下觀察是否相符,這些都是前面的講到的知識,本節將接著介紹條件隨機場的使用即如何預測的。

我們都知道隱馬爾可夫的三個基本問題,其中第二個問題是通過可觀測的訊號進行反推HMM的狀態轉移概率,在語音識別中,我們知道語音的拼音了,讓我們求對應的漢字,這其實是標註問題,即我知道了一個形式,使用另外一種形式以最大概率的進行標記他,因為我們的條件隨機場就是根據HMM的缺點改進的,因此他也是解決標註問題, 即我們在輸入語音向量x的前提下,以最大的概率使用漢字進行標註他就是上面的簡化向量式,這就是語音識別了,即我知道了拼音序列,反推他對應的漢字的序列。那麼也就是說以後只要我們遇到標註性的問題都可以通過CRF進行求解了。下面我們就來看看他說如何標註的。

上式就是我們的目標函數了,也是我們上面的解釋的數學化描述,就是在這個y^*

是指求的引數y使的y在x 的條件下概率最大,然後把上面的簡化向量式帶進去即可得到上式的第二行,然後把歸一化的去掉,求其非歸一化的概率,因為我們計算出概率的目的是為了比較,因此是不是概率我們不關心,我們關心的是大小,因此可以去掉,同時計算量就會下降,這樣就得到了上面的目標式。因此這裡就是最優化問題了:

那麼上面的都代表什麼意思呢?

這裡就是不詳細解釋了,把其都寫成向量形式, 這些在前面都講解了,不懂的請好好看看前面 的基礎,那麼我們為了使用維特比演算法, 這裡還需要把最優化目標表達式改一下,如下:

其中:

其實是一樣的,這裡大家別迷惑了,我們繼續:

 現在我們需要求解這個概率,這個概率可以求解嗎?當然可以求解了,但是這個使用遍歷的方法不可行,因為什麼呢?因為你只要給P(y|x),我通過慢慢算是可以的,但是現在加每個位置的標註有四種可能即S,B,M,E四種可能的標註,那麼如歸輸入的語音有100個地方需要標註,則需要計算4^{100}計算量,這個計算量很大了,可以說不肯能遍歷所有的可能,因此這裡需要使用維特比演算法,這個演算法我們在HMM中求解第二個問題時使用過,因此這裡也是可以使用的,本來不想仔細說這個演算法的,但是感覺用到的很多,因此這裡系統的講解一下維特比的演算法思想,以後遇到類似的情況我們也可以使用這個演算法解決問題,好廢話不多說,下面開始:

維特比演算法

維特比演算法思想是基於動態規劃的,這裡我會稍微深入的講解一下動態規劃思想,儘量讓大家能看明白,首先我們使用標註問題進行講解,現在這裡和大家說一下什麼是分詞,這裡使用一個例子進行講解:

上式就是對一個句子進行分詞了,這裡的S(single,單個的意思) 、B是(begin,開始)、M(more ,更多)、E(end結束),這裡我們是怎麼標號的呢,上面是人為正確劃分的,這裡我們把單個的詞使用S來代表,兩個字以上的組合詞分別使用B、M、E來表示,這樣,就把漢字通過符號來表示了。那麼我們通過符號就可以把分詞問題轉化為標註問題了。我們在舉一個例子:

我們假設已經標號了,那麼我們通過符號就可以表示已經分好的詞了,上面雖然分的不對,但是功能已經實現了,所以只要知道這些符號的組合基本上就可以分詞了,我們知道分詞後就會知道一句話每個字都是一個劃分標誌,又因為每個字都有四個劃分選項即S\B\M\E,下面我們結合圖進行講解:

 假設這裡有一句話是“我喜歡北京天安門“,現在我們需要對此進行標註,這裡我們以每個字為間隔為例進行標註,總共有四種標註即SBME,因此這裡只有一條線是正確的,如上圖的紅線走勢就是正確的,現在我們來看看他的計算量,如果使用遍歷的方法,有多少種可能呢?答案是4^8=65536種路徑,這才一句話8個字每個字才有4種可能結果的劃分,我看到就有將近7萬左右的可能,計算量可想而知很大,如果一句話有100個字,每個字的劃分是100種,這樣的情況根本無法計算,因此不能使人遍歷的方法即窮舉法,那使用什麼方法呢?這個方法不僅要計算量小,還要求得最大的概率路徑即對應上圖正確的標註,這個怎麼做呢?大家這樣想,最大概率是指全域性最優解,那麼這裡就可以使用動態規劃的思想,這個思想就可以完美的滿足上面的兩個條件即計算量小,還能找到全域性最優解即最大概率,這個思想其實不難,動態規劃的思想是分析時是從全域性即結果出發,然後往剛開始進行推理,然後計算出每往前推一步的結果然後保留,已知到剛開始的位置,寫程式碼時就從開始出開始,然後進行根據之前的計算好的概率進行選擇最優的路徑,這裡我們把分析省了,直接進行選擇,看下圖分析:

 首先我們是知道字與字之間的標註概率的,例如喜歡,從“喜”到“歡”的概率很大,說明他們是一個詞這是知道的,也就說說明我們知道上圖的每一步的概率,類紅線s到B的概率是知道的,這些概率都是知道的,怎麼來的呢?根據語料庫計算出來的,現在的問題是我們如何知道最正確的標註路徑呢?我麼你可以這樣做,我們可以把兩個兩個看為一個單元,如上圖的紅色虛線框,此時我麼你可以計算這個紅色框的對應標註的最大概率,然後把紅色框看為一個整體和後面的在進行求解,如上圖的紫色部分,同時也記錄標註的最大概率(此時的概率是前面紅色框的概率與到達三角形的概率的乘積),然後在把其看為一個整體,然後在加入另外一列就這樣我們每一次都會得到概率最大的,然後在和後面的概率累乘,這是簡化版的動態規劃思想。如下圖:

 下面我們就通過公式進行描述,下面我們在通過公式講解,大家應該明白了,下面開始:

首先求出位置1的各個標記,如下圖這裡的j就是可選的四個標記即SBME了,這就相當於我們的紅色虛線了的概率了,這個大家應該能理解吧。

 一般地,由遞推公式,求出到位置i的各個標記l=1,2,..,m的非規範化概率最大值,同時記錄非規範化概率最大值的路徑,

這裡他直接是第i個了,根據上面的理解大家應該可以看懂吧,看不懂的請留言吧。

上式是記錄路徑的。

直到\large i=n時終止.這時求得非規範化概率的最大值為  

及最優路徑的終點

由此最優路徑終點返回,


求得最優路徑
直接截圖了,這裡大家需要深入理解呀

 好了,本節結束了,大家好好思考維特比演算法,這裡的演算法和動態規劃有點不同,這裡的更簡單點,等我開演算法專欄在詳細講解動態規劃,那時大家在看一定會深入理解的,好了,本節結束,下一節簡單介紹自然語言處理的一些細節方面的內容,如分詞、標註等等內容,下一節將開始分詞。