1. 程式人生 > >CRF條件隨機場簡介

CRF條件隨機場簡介

 CRF(Conditional Random Field) 條件隨機場是近幾年自然語言處理領域常用的演算法之一,常用於句法分析、命名實體識別、詞性標註等。在我看來,CRF就像一個反向的隱馬爾可夫模型(HMM),兩者都是用了馬爾科夫鏈作為隱含變數的概率轉移模型,只不過HMM使用隱含變數生成可觀測狀態,其生成概率有標註集統計得到,是一個生成模型;而CRF反過來通過可觀測狀態判別隱含變數,其概率亦通過標註集統計得來,是一個判別模型。由於兩者模型主幹相同,其能夠應用的領域往往是重疊的,但在命名實體、句法分析等領域CRF更勝一籌。當然你並不必須學習HMM才能讀懂CRF,但通常來說如果做自然語言處理,這兩個模型應該都有了解。

  下文僅針對專門做自然語言處理的同學做一個快速形象的上手簡介,並指出最重要的特徵。這裡假設你已經有基本的自然語言處理概念和馬爾科夫鏈的基本知識。CRF本質上是隱含變數的馬爾科夫鏈+可觀測狀態到隱含變數的條件概率。說隱含變數和可觀測狀態很抽象,我們以詞性標註為例(如果你不知道什麼是詞性標註,請百度一下),在詞性標註中詞性標籤就是隱含變數,具體的詞語就是可觀測狀態,詞性標註的目的是通過可觀測到的一個個單詞推斷出來每個單詞應該被賦予的詞性標籤。下文將用詞性標籤和詞語代替上述兩個名詞。

  先說馬爾科夫鏈,這裡體現了CRF的隨機場特徵(準確的說是馬爾科夫隨機場)。這裡CRF和HMM都假設詞性標籤是滿足馬爾科夫性的,即當前詞性僅和上一個詞性有概率轉移關係而與其它位置的詞性無關,比如形容詞後面跟形容詞的概率是0.5,跟修飾性“的”的概率為0.5,跟動詞的概率為0。因此,通過在一個標註集上進行統計,我們很容易得到一個概率轉移矩陣,即任意詞性A後緊鄰任意詞性B的概率都可以被統計出來。對HMM來說這部分就結束了,對CRF來說,可以在二維條件轉移矩陣基礎上再增加一維詞語特徵,如“當AB相鄰,A是動詞且B單詞長度超過3時,B是名詞的概率是xx"。大家可能注意到了馬爾科夫鏈的視窗為1,即它僅考慮上1個詞,這不見得是最合理的。這其實是一個對特徵稀疏問題的折中,可以想象僅對兩個詞性AB統計P(B|A)能夠得到很多資料的反饋,而如果統計長度為6的視窗,如P(G | ABCDEF)就會遇到資料稀疏的問題,因為很可能序列ABCDEF根本就沒有在資料集中出現過.資料稀疏對

機器學習的影響是巨大的,因此馬爾科夫鏈實際以損失一定全域性資訊的基礎上換來了更飽滿的資料,實驗證明這筆交易在詞性標註時是賺的。

  再說詞性與詞語直接的對映概率,這裡體現了CRF的條件特徵。如果是HMM,這裡會直接統計詞性-->單詞的條件概率矩陣,比如 ”動詞“ 生成 ”發射“ 的概率可能為1.5%,而生成”微軟“ 的概率為0. 然後對於每一種可能的詞性序列結合與條件概率相乘就能得到每一個候選序列的生成概率,然而取概率最高的作為標註結果即可。而CRF正好反過來,CRF通過發掘詞語本身的特徵(如長度,大小寫,匹配特定詞表等,也可以包括詞語本身),把每個詞語轉化成為一個一維特徵向量(vector),然後對於每個特徵計算特徵到詞性的條件概率,這樣每個詞語對候選詞性的條件概率即為所有特徵條件概率的加和。比如我們假設特徵向量只有兩個,且P ( ”詞語長度>3" --> 名詞詞性)的概率為0.9, P("詞語位於句子末尾“ --> 名詞詞性)概率為0.4,且一個詞恰好滿足這兩個特徵,則其為名詞的條件概率為 (0.9 + 0.4) / 2 = 0.65. 這樣,CRF根據這個條件轉移數值再結合詞性的馬爾科夫特性,就可以使用與HMM類似的方法尋找最優的詞性標註序列了。

  為了裝得更學術一點本想再貼一個公式搞了半天沒貼成功還是算了不過在上面的PPT連結中大家可以找到所以就不寫了。總的來說CRF優於HMM的地方在於,它可以引入更多的特徵,包括詞語本身特徵和詞語所在上下文的特徵,而非單詞本身。從某種角度講,它結合了HMM和最大熵方法。本人也剛剛接觸CRF,因此都是從最淺顯的角度來介紹的,如果有什麼說錯的地方歡迎指正啊~ 寫這麼多不容易,有大牛路過的話請輕拍哈~