前言
通過前面幾篇系列文章,我們從分詞中最基本的問題開始,並分別利用了1-gram和HMM的方法實現了分詞demo。本篇博文在此基礎上,重點介紹利用CRF來實現分詞的方法,這也是一種基於字的分詞方法,在將句子轉換為序列標注問題之后,不使用HMM的生成模型方式,而是使用條件概率模型進行建模,即判別模型CRF。之后我們對CRF與HMM進行對比,同樣的我們最終也會附上CRF分詞的實現代碼。
目錄
淺談分詞算法(1)分詞中的基本問題
淺談分詞算法(2)基於詞典的分詞方法
淺談分詞算法(3)基於字的分詞方法(HMM)
淺談分詞算法(4)基於字的分詞方法(CRF)
淺談分詞算法(5)基於字的分詞方法(LSTM)
條件隨機場(conditional random field CRF)
為了說清楚CRF在分詞上的應用,我們需要簡單介紹下條件隨機場CRF,我們不去長篇大論的展開論述,只討論幾個核心的點,並重點闡述下線性鏈條件隨機場,也是我們在序列標注問題中經常遇到的,如分詞、詞性標注、韻律標注等等。
核心點
在上一篇博文中,我們簡單介紹了HMM模型,是一個五元組,它的核心圍繞的是一個關於序列\(X\)和\(Y\)的聯合概率分布\(P(X,Y)\),而在條件隨機場的核心圍繞的是條件概率分布模型\(P(Y|X)\),它是一種馬爾可夫隨機場,滿足馬爾科夫性(這里我們就不展開闡述了,具體可參考[3])。我們這里必須搬出一張經典的圖片,大家可能在網上的無數博文中也都看到過,其來源與[4]:
從圖中我們可以看出模型之間的演化過程以及模型之間的區別,對於用在分類問題中的邏輯回歸與CRF其實都同屬於對數線性模型,這里直觀的我們也很好理解,當用CRF模型對\(X\)和\(Y\)序列建模時,我們需要判斷\(x_i\)對應的標簽\(y_i\)時其實可以看做一次邏輯回歸分類問題,只不過這個分類問題考慮了上下文的序列信息,也就是說單純的回歸分類會損失上下文的序列信息如:有一系列連續拍攝的照片,現在想在照片上打上表示照片里的活動內容的標記,當然可以將每張照片單獨做分類,但是會損失信息,例如當有一張照片上是一張嘴,應該分類到“吃飯”還是分類到“唱K”呢?如果這張照片的上一張照片內容是吃飯或者做飯,那么這張照片表示“吃飯”的可能性就大一些,如果上一張照片的內容是跳舞,那這張照片就更有可能在講唱K的事情。
設有聯合概率分布\(P(Y)\),由無向圖\(G=(V,E)\)表示,在圖\(G\)中,結點表示隨機變量,邊表示隨機變量之間的依賴關系,如果聯合概率分布\(P(Y)\)滿足成對、局部或全局馬爾可夫性,就稱此聯合概率分布為馬爾可夫隨機場(Markov random filed)也稱概率無向圖模型(probablistic undirected graphical model):
- 成對馬爾可夫性:設\(u,v\)是無向圖\(G\)中任意兩個沒有邊連接的結點,其他所有結點表示為\(O\),對應的隨機變量分別用\(Y_u,Y_v,Y_O\)表示,成對馬爾可夫性是指給定隨機變量組\(Y_O\)的條件下隨機變量\(Y_u,Y_v\)是條件獨立的,如下:$$P(Y_u,Y_v|Y_O)=P(Y_u|Y_O)P(Y_v|Y_O)$$
- 局部馬爾可夫性:設\(v\in V\)是\(G\)中任意一個節點,\(W\)是與\(v\)有邊連接的所有節點,\(O\)是\(v\),\(W\)以外的其他所有節點。\(v\)表示的隨機變量是\(Y_v\),\(W\)表示的隨機變量是\(Y_w\),\(O\)表示的隨機變量是\(Y_o\)。局部馬爾可夫性是在給定隨機變量組\(Y_w\)的條件下隨機變量\(Y_v\)與隨機變量\(Y_o\)是獨立的。$$P(Y_v,Y_O|Y_W)=P(Y_v|Y_w)P(Y_O|Y_W)$$
- 全局馬爾可夫性:\(A,B\)是\(G\)中被C分開的任意節點集合。全局馬爾科夫性是指給定\(Y_c\)條件下\(Y_A\)和\(Y_B\)是條件獨立的,即$$P(Y_A,Y_B|Y_C)=P(Y_A|Y_C)P(Y_B|Y_C)$$
下面我們具體闡述下一種特殊也常用的線性鏈條件隨機場。
線性鏈條件隨機場
給定一個線性鏈條件隨機場\(P(Y|X)\),當觀測序列為\(x=x_1x_2...\)時,狀態序列為 \(y=y_1y_2...\)的概率可寫為(實際上應該寫為\(P(Y=y|x;θ)\),參數被省略了)
\(Z(x)\)作為規范化因子,是對\(y\)的所有可能取值求和。我們可以用下圖來理解:
對於線性鏈CRF,特征函數是個非常重要的概念(很容易聯想到HMM的轉移概率和發射概率):
- 轉移特征\(t_k(y_{i−1},y_i,x,i)\)是定義在邊上的特征函數(transition),依賴於當前位置\(i\)和前一位置\(i-1\);對應的權值為\(λ_k\)。
- 狀態特征\(s_l(y_i,x,i)\)是定義在節點上的特征函數(state),依賴於當前位置\(i\);對應的權值為\(μ_l\)。
一般來說,特征函數的取值為 1 或 0 ,當滿足規定好的特征條件時取值為 1 ,否則為 0 。
簡化形式
對於轉移特征這一項:
可以看出外面那個求和號是套着里面的求和號的,這種雙重求和就表明了對於同一個特征\(k\),在各個位置\(i\)上都有定義。
基於此,很直覺的想法就是把同一個特征在各個位置\(i\)求和,形成一個全局的特征函數,也就是說讓里面那一層求和號消失。在此之前,為了把加號的兩項合並成一項,首先將各個特征函數\(t\)(設其共有\(K_1\)個)、\(s\)(設共\(K_2\)個)都換成統一的記號\(f\) :
相應的權重同理:
那么就可以記為:
然后就可以把特征在各個位置\(i\)求和,即
其中\(K=K_1+K_2\)。進而可以得到簡化表示形式:
這個形式我們在下一節介紹CRF分詞的時候會使用。
CRF分詞
對於一個句子的分詞問題我們在前面的系列博文中已經闡述,輸入的句子\(S\)相當於序列\(X\),輸出的標簽序列L相當於序列\(Y\),我們要訓練一個模型,使得在給定\(S\)的前提下,找到其最優對應的\(L\)。
訓練該模型的關鍵點就是特征函數\(F\)的選取以及每個特征函數權重\(W\)的確定,而對於每個特征函數而言,其輸入有如下四個要素:
- 句子\(S\)(就是我們要標注詞性的句子)
- \(i\),用來表示句子\(S\)中第\(i\)個單詞
- \(l_i\),表示要評分的標注序列給第i個單詞標注的詞性
- \(l_{i-1}\),表示要評分的標注序列給第\(i-1\)個單詞標注的詞性
它的輸出值是0或者1,0表示要評分的標注序列不符合這個特征,1表示要評分的標注序列符合這個特征。我們發現這里的特征函數在選取當前\(s_i\)的對應標簽\(l_i\)時,只考慮了其前一個標簽\(l_{i-1}\),這就是使用了我們上一節闡述的線性鏈條件隨機場,而公式中的f就是我們這里的特征函數。
Note:在實際的應用時,除了單一的特征選取,我們通常會通過構造復合特征的方式,考慮更多的上下文信息。
CRF VS HMM
在上一篇博文中我們介紹了HMM在分詞中的使用,那么讀者肯定會問既然HMM已經能完成任務,為什么還需要CRF來重新搞一波,原因就是CRF比HMM更強大。
對於序列\(L\)和\(S\),根據之前的介紹我們易知如下公式:
其中\(w_i\)為\(S\)中第\(i\)個詞,\(l_i\)為第\(i\)個詞的標簽,公式中前半部分為狀態轉移概率,后半部分為發射概率。我們用對數形式表示該式:
把這個式子與CRF的簡化形式比較,不難發現,如果我們把第一個HMM式子中的log形式的概率看做是第二個CRF式子中的特征函數的權重的話,我們會發現,CRF和HMM具有相同的形式。所以可以說:每一個HMM模型都等價於某個CRF。
總結下兩者的區別:
- HMM是生成模型以聯合概率建模,CRF是判別模型以條件概率建模
- HMM為了簡化計算做了有限狀態假設和一對一假設(當前的單詞只依賴於當前的標簽,當前的標簽只依賴於前一個標簽),所以在特征選取上會有很多限制;而CRF可以定義數量更多,種類更豐富的特征函數(如定義一個特征函數f,考慮當前詞離句首的距離,來着眼於整個句子)。
- CRF可以使用任意的權重 將對數HMM模型看做CRF時,特征函數的權重由於是log形式的概率,所以都是小於等於0的,而且概率還要滿足相應的限制,但在CRF中,每個特征函數的權重可以是任意值,沒有這些限制。
Note:其實在HMM和CRF之間還有一個MEMM,即最大熵馬爾科夫模型,MEMM模型是對轉移概率和表現概率建立聯合概率,統計時統計的是條件概率,但MEMM容易陷入局部最優,是因為MEMM只在局部做歸一化(標記偏置問題),不過一般用的不多我們就不過多介紹,可參考[5]
代碼實現
下面我們利用wapiti來實現一個簡單的CRF分詞器。相關說明:
- wapiti是一個開源的CRF工具,doc在這里:https://wapiti.limsi.fr/
- 數據源來源於msr整理所得:http://sighan.cs.uchicago.edu/bakeoff2005/
- python
- ubuntu/macos
訓練代碼
https://github.com/xlturing/machine-learning-journey/tree/master/seg_crf
大家可以直接看下源代碼
實驗結果
- Load model
- Label sequences
1000 sequences labeled 3.96%/43.30%
2000 sequences labeled 3.89%/44.00%
3000 sequences labeled 3.87%/44.50%
Nb sequences : 3985
Token error : 3.85%
Sequence error: 44.74% - Per label statistics
B Pr=0.96 Rc=0.98 F1=0.97
E Pr=0.96 Rc=0.98 F1=0.97
S Pr=0.97 Rc=0.95 F1=0.96
M Pr=0.92 Rc=0.87 F1=0.90 - Done
這個訓練集和測試集都相對較小,效果還不錯,讀者在真正上線使用時還需要依賴詞典等諸多與場景對應的分詞特性,本文更加關注原理和理解。
參考文獻
- HMM MEMM CRF 區別 聯系
- 如何輕松愉快地理解條件隨機場(CRF)?
- NLP —— 圖模型(二)條件隨機場(Conditional random field,CRF)
- An Introduction to Conditional Random Fields
- HMM MEMM CRF 區別 聯系
- 《統計學習方法》 李航