浅谈分词算法(4)基于字的分词方法(CRF)
目錄前言目錄條件隨機(jī)場(chǎng)(conditional random field CRF)核心點(diǎn)線(xiàn)性鏈條件隨機(jī)場(chǎng)簡(jiǎn)化形式CRF分詞CRF VS HMM代碼實(shí)現(xiàn)訓(xùn)練代碼實(shí)驗(yàn)結(jié)果參考文獻(xiàn)
前言
通過(guò)前面幾篇系列文章,我們從分詞中最基本的問(wèn)題開(kāi)始,并分別利用了1-gram和HMM的方法實(shí)現(xiàn)了分詞demo。本篇博文在此基礎(chǔ)上,重點(diǎn)介紹利用CRF來(lái)實(shí)現(xiàn)分詞的方法,這也是一種基于字的分詞方法,在將句子轉(zhuǎn)換為序列標(biāo)注問(wèn)題之后,不使用HMM的生成模型方式,而是使用條件概率模型進(jìn)行建模,即判別模型CRF。之后我們對(duì)CRF與HMM進(jìn)行對(duì)比,同樣的我們最終也會(huì)附上CRF分詞的實(shí)現(xiàn)代碼。
目錄
淺談分詞算法(1)分詞中的基本問(wèn)題
淺談分詞算法(2)基于詞典的分詞方法
淺談分詞算法(3)基于字的分詞方法(HMM)
淺談分詞算法(4)基于字的分詞方法(CRF)
淺談分詞算法(5)基于字的分詞方法(LSTM)
條件隨機(jī)場(chǎng)(conditional random field CRF)
為了說(shuō)清楚CRF在分詞上的應(yīng)用,我們需要簡(jiǎn)單介紹下條件隨機(jī)場(chǎng)CRF,我們不去長(zhǎng)篇大論的展開(kāi)論述,只討論幾個(gè)核心的點(diǎn),并重點(diǎn)闡述下線(xiàn)性鏈條件隨機(jī)場(chǎng),也是我們?cè)谛蛄袠?biāo)注問(wèn)題中經(jīng)常遇到的,如分詞、詞性標(biāo)注、韻律標(biāo)注等等。
核心點(diǎn)
在上一篇博文中,我們簡(jiǎn)單介紹了HMM模型,是一個(gè)五元組,它的核心圍繞的是一個(gè)關(guān)于序列(X)和(Y)的聯(lián)合概率分布(P(X,Y)),而在條件隨機(jī)場(chǎng)的核心圍繞的是條件概率分布模型(P(Y|X)),它是一種馬爾可夫隨機(jī)場(chǎng),滿(mǎn)足馬爾科夫性(這里我們就不展開(kāi)闡述了,具體可參考[3])。我們這里必須搬出一張經(jīng)典的圖片,大家可能在網(wǎng)上的無(wú)數(shù)博文中也都看到過(guò),其來(lái)源與[4]:
從圖中我們可以看出模型之間的演化過(guò)程以及模型之間的區(qū)別,對(duì)于用在分類(lèi)問(wèn)題中的邏輯回歸與CRF其實(shí)都同屬于對(duì)數(shù)線(xiàn)性模型,這里直觀(guān)的我們也很好理解,當(dāng)用CRF模型對(duì)(X)和(Y)序列建模時(shí),我們需要判斷(x_i)對(duì)應(yīng)的標(biāo)簽(y_i)時(shí)其實(shí)可以看做一次邏輯回歸分類(lèi)問(wèn)題,只不過(guò)這個(gè)分類(lèi)問(wèn)題考慮了上下文的序列信息,也就是說(shuō)單純的回歸分類(lèi)會(huì)損失上下文的序列信息如:有一系列連續(xù)拍攝的照片,現(xiàn)在想在照片上打上表示照片里的活動(dòng)內(nèi)容的標(biāo)記,當(dāng)然可以將每張照片單獨(dú)做分類(lèi),但是會(huì)損失信息,例如當(dāng)有一張照片上是一張嘴,應(yīng)該分類(lèi)到“吃飯”還是分類(lèi)到“唱K”呢?如果這張照片的上一張照片內(nèi)容是吃飯或者做飯,那么這張照片表示“吃飯”的可能性就大一些,如果上一張照片的內(nèi)容是跳舞,那這張照片就更有可能在講唱K的事情。
設(shè)有聯(lián)合概率分布(P(Y)),由無(wú)向圖(G=(V,E))表示,在圖(G)中,結(jié)點(diǎn)表示隨機(jī)變量,邊表示隨機(jī)變量之間的依賴(lài)關(guān)系,如果聯(lián)合概率分布(P(Y))滿(mǎn)足成對(duì)、局部或全局馬爾可夫性,就稱(chēng)此聯(lián)合概率分布為馬爾可夫隨機(jī)場(chǎng)(Markov random filed)也稱(chēng)概率無(wú)向圖模型(probablistic undirected graphical model):
成對(duì)馬爾可夫性:設(shè)(u,v)是無(wú)向圖(G)中任意兩個(gè)沒(méi)有邊連接的結(jié)點(diǎn),其他所有結(jié)點(diǎn)表示為(O),對(duì)應(yīng)的隨機(jī)變量分別用(Y_u,Y_v,Y_O)表示,成對(duì)馬爾可夫性是指給定隨機(jī)變量組(Y_O)的條件下隨機(jī)變量(Y_u,Y_v)是條件獨(dú)立的,如下:$$P(Y_u,Y_v|Y_O)=P(Y_u|Y_O)P(Y_v|Y_O)$$
局部馬爾可夫性:設(shè)(vin V)是(G)中任意一個(gè)節(jié)點(diǎn),(W)是與(v)有邊連接的所有節(jié)點(diǎn),(O)是(v),(W)以外的其他所有節(jié)點(diǎn)。(v)表示的隨機(jī)變量是(Y_v),(W)表示的隨機(jī)變量是(Y_w),(O)表示的隨機(jī)變量是(Y_o)。局部馬爾可夫性是在給定隨機(jī)變量組(Y_w)的條件下隨機(jī)變量(Y_v)與隨機(jī)變量(Y_o)是獨(dú)立的。$$P(Y_v,Y_O|Y_W)=P(Y_v|Y_w)P(Y_O|Y_W)$$
全局馬爾可夫性:(A,B)是(G)中被C分開(kāi)的任意節(jié)點(diǎn)集合。全局馬爾科夫性是指給定(Y_c)條件下(Y_A)和(Y_B)是條件獨(dú)立的,即$$P(Y_A,Y_B|Y_C)=P(Y_A|Y_C)P(Y_B|Y_C)$$
下面我們具體闡述下一種特殊也常用的線(xiàn)性鏈條件隨機(jī)場(chǎng)。
線(xiàn)性鏈條件隨機(jī)場(chǎng)
給定一個(gè)線(xiàn)性鏈條件隨機(jī)場(chǎng)(P(Y|X)),當(dāng)觀(guān)測(cè)序列為(x=x_1x_2...)時(shí),狀態(tài)序列為 (y=y_1y_2...)的概率可寫(xiě)為(實(shí)際上應(yīng)該寫(xiě)為(P(Y=y|x;θ)),參數(shù)被省略了)
(Z(x))作為規(guī)范化因子,是對(duì)(y)的所有可能取值求和。我們可以用下圖來(lái)理解:
對(duì)于線(xiàn)性鏈CRF,特征函數(shù)是個(gè)非常重要的概念(很容易聯(lián)想到HMM的轉(zhuǎn)移概率和發(fā)射概率):
轉(zhuǎn)移特征(t_k(y_{i?1},y_i,x,i))是定義在邊上的特征函數(shù)(transition),依賴(lài)于當(dāng)前位置(i)和前一位置(i-1);對(duì)應(yīng)的權(quán)值為(λ_k)。
狀態(tài)特征(s_l(y_i,x,i))是定義在節(jié)點(diǎn)上的特征函數(shù)(state),依賴(lài)于當(dāng)前位置(i);對(duì)應(yīng)的權(quán)值為(μ_l)。
一般來(lái)說(shuō),特征函數(shù)的取值為 1 或 0 ,當(dāng)滿(mǎn)足規(guī)定好的特征條件時(shí)取值為 1 ,否則為 0 。
簡(jiǎn)化形式
對(duì)于轉(zhuǎn)移特征這一項(xiàng):
可以看出外面那個(gè)求和號(hào)是套著里面的求和號(hào)的,這種雙重求和就表明了對(duì)于同一個(gè)特征(k),在各個(gè)位置(i)上都有定義。
基于此,很直覺(jué)的想法就是把同一個(gè)特征在各個(gè)位置(i)求和,形成一個(gè)全局的特征函數(shù),也就是說(shuō)讓里面那一層求和號(hào)消失。在此之前,為了把加號(hào)的兩項(xiàng)合并成一項(xiàng),首先將各個(gè)特征函數(shù)(t)(設(shè)其共有(K_1)個(gè))、(s)(設(shè)共(K_2)個(gè))都換成統(tǒng)一的記號(hào)(f) :
相應(yīng)的權(quán)重同理:
那么就可以記為:
然后就可以把特征在各個(gè)位置(i)求和,即
其中(K=K_1+K_2)。進(jìn)而可以得到簡(jiǎn)化表示形式:
這個(gè)形式我們?cè)谙乱还?jié)介紹CRF分詞的時(shí)候會(huì)使用。
CRF分詞
對(duì)于一個(gè)句子的分詞問(wèn)題我們?cè)谇懊娴南盗胁┪闹幸呀?jīng)闡述,輸入的句子(S)相當(dāng)于序列(X),輸出的標(biāo)簽序列L相當(dāng)于序列(Y),我們要訓(xùn)練一個(gè)模型,使得在給定(S)的前提下,找到其最優(yōu)對(duì)應(yīng)的(L)。
訓(xùn)練該模型的關(guān)鍵點(diǎn)就是特征函數(shù)(F)的選取以及每個(gè)特征函數(shù)權(quán)重(W)的確定,而對(duì)于每個(gè)特征函數(shù)而言,其輸入有如下四個(gè)要素:
句子(S)(就是我們要標(biāo)注詞性的句子)
(i),用來(lái)表示句子(S)中第(i)個(gè)單詞
(l_i),表示要評(píng)分的標(biāo)注序列給第i個(gè)單詞標(biāo)注的詞性
(l_{i-1}),表示要評(píng)分的標(biāo)注序列給第(i-1)個(gè)單詞標(biāo)注的詞性
它的輸出值是0或者1,0表示要評(píng)分的標(biāo)注序列不符合這個(gè)特征,1表示要評(píng)分的標(biāo)注序列符合這個(gè)特征。我們發(fā)現(xiàn)這里的特征函數(shù)在選取當(dāng)前(s_i)的對(duì)應(yīng)標(biāo)簽(l_i)時(shí),只考慮了其前一個(gè)標(biāo)簽(l_{i-1}),這就是使用了我們上一節(jié)闡述的線(xiàn)性鏈條件隨機(jī)場(chǎng),而公式中的f就是我們這里的特征函數(shù)。
Note:在實(shí)際的應(yīng)用時(shí),除了單一的特征選取,我們通常會(huì)通過(guò)構(gòu)造復(fù)合特征的方式,考慮更多的上下文信息。
CRF VS HMM
在上一篇博文中我們介紹了HMM在分詞中的使用,那么讀者肯定會(huì)問(wèn)既然HMM已經(jīng)能完成任務(wù),為什么還需要CRF來(lái)重新搞一波,原因就是CRF比HMM更強(qiáng)大。
對(duì)于序列(L)和(S),根據(jù)之前的介紹我們易知如下公式:
其中(w_i)為(S)中第(i)個(gè)詞,(l_i)為第(i)個(gè)詞的標(biāo)簽,公式中前半部分為狀態(tài)轉(zhuǎn)移概率,后半部分為發(fā)射概率。我們用對(duì)數(shù)形式表示該式:
把這個(gè)式子與CRF的簡(jiǎn)化形式比較,不難發(fā)現(xiàn),如果我們把第一個(gè)HMM式子中的log形式的概率看做是第二個(gè)CRF式子中的特征函數(shù)的權(quán)重的話(huà),我們會(huì)發(fā)現(xiàn),CRF和HMM具有相同的形式。所以可以說(shuō):每一個(gè)HMM模型都等價(jià)于某個(gè)CRF。
總結(jié)下兩者的區(qū)別:
HMM是生成模型以聯(lián)合概率建模,CRF是判別模型以條件概率建模
HMM為了簡(jiǎn)化計(jì)算做了有限狀態(tài)假設(shè)和一對(duì)一假設(shè)(當(dāng)前的單詞只依賴(lài)于當(dāng)前的標(biāo)簽,當(dāng)前的標(biāo)簽只依賴(lài)于前一個(gè)標(biāo)簽),所以在特征選取上會(huì)有很多限制;而CRF可以定義數(shù)量更多,種類(lèi)更豐富的特征函數(shù)(如定義一個(gè)特征函數(shù)f,考慮當(dāng)前詞離句首的距離,來(lái)著眼于整個(gè)句子)。
CRF可以使用任意的權(quán)重 將對(duì)數(shù)HMM模型看做CRF時(shí),特征函數(shù)的權(quán)重由于是log形式的概率,所以都是小于等于0的,而且概率還要滿(mǎn)足相應(yīng)的限制,但在CRF中,每個(gè)特征函數(shù)的權(quán)重可以是任意值,沒(méi)有這些限制。
Note:其實(shí)在HMM和CRF之間還有一個(gè)MEMM,即最大熵馬爾科夫模型,MEMM模型是對(duì)轉(zhuǎn)移概率和表現(xiàn)概率建立聯(lián)合概率,統(tǒng)計(jì)時(shí)統(tǒng)計(jì)的是條件概率,但MEMM容易陷入局部最優(yōu),是因?yàn)镸EMM只在局部做歸一化(標(biāo)記偏置問(wèn)題),不過(guò)一般用的不多我們就不過(guò)多介紹,可參考[5]
代碼實(shí)現(xiàn)
下面我們利用wapiti來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的CRF分詞器。相關(guān)說(shuō)明:
wapiti是一個(gè)開(kāi)源的CRF工具,doc在這里:https://wapiti.limsi.fr/
數(shù)據(jù)源來(lái)源于msr整理所得:http://sighan.cs.uchicago.edu/bakeoff2005/
python
ubuntu/macos
訓(xùn)練代碼
https://github.com/xlturing/machine-learning-journey/tree/master/seg_crf
大家可以直接看下源代碼
實(shí)驗(yàn)結(jié)果
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
這個(gè)訓(xùn)練集和測(cè)試集都相對(duì)較小,效果還不錯(cuò),讀者在真正上線(xiàn)使用時(shí)還需要依賴(lài)詞典等諸多與場(chǎng)景對(duì)應(yīng)的分詞特性,本文更加關(guān)注原理和理解。
參考文獻(xiàn)
HMM MEMM CRF 區(qū)別 聯(lián)系
如何輕松愉快地理解條件隨機(jī)場(chǎng)(CRF)?
NLP —— 圖模型(二)條件隨機(jī)場(chǎng)(Conditional random field,CRF)
An Introduction to Conditional Random Fields
HMM MEMM CRF 區(qū)別 聯(lián)系
《統(tǒng)計(jì)學(xué)習(xí)方法》 李航
總結(jié)
以上是生活随笔為你收集整理的浅谈分词算法(4)基于字的分词方法(CRF)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2023款吉利星瑞正式上市 能不能再次“
- 下一篇: 西班牙有多热?最高温度达45.7℃!超3