[转] 如何轻松愉快地理解条件随机场(CRF)?
原文鏈接:https://www.jianshu.com/p/55755fc649b1
?
?
如何輕松愉快地理解條件隨機(jī)場(chǎng)(CRF)?
理解條件隨機(jī)場(chǎng)最好的辦法就是用一個(gè)現(xiàn)實(shí)的例子來(lái)說(shuō)明它。但是目前中文的條件隨機(jī)場(chǎng)文章鮮有這樣干的,可能寫(xiě)文章的人都是大牛,不屑于舉例子吧。于是乎,我翻譯了這篇文章。希望對(duì)其他伙伴有所幫助。
原文在這里[http://blog.echen.me/2012/01/03/introduction-to-conditional-random-fields/]
想直接看英文的朋友可以直接點(diǎn)進(jìn)去了。我在翻譯時(shí)并沒(méi)有拘泥于原文,許多地方都加入了自己的理解,用學(xué)術(shù)點(diǎn)的話說(shuō)就是意譯。(畫(huà)外音:裝什么裝,快點(diǎn)開(kāi)始吧。)好的,下面開(kāi)始翻譯!
假設(shè)你有許多小明同學(xué)一天內(nèi)不同時(shí)段的照片,從小明提褲子起床到脫褲子睡覺(jué)各個(gè)時(shí)間段都有(小明是照片控!)?,F(xiàn)在的任務(wù)是對(duì)這些照片進(jìn)行分類。比如有的照片是吃飯,那就給它打上吃飯的標(biāo)簽;有的照片是跑步時(shí)拍的,那就打上跑步的標(biāo)簽;有的照片是開(kāi)會(huì)時(shí)拍的,那就打上開(kāi)會(huì)的標(biāo)簽。問(wèn)題來(lái)了,你準(zhǔn)備怎么干?
一個(gè)簡(jiǎn)單直觀的辦法就是,不管這些照片之間的時(shí)間順序,想辦法訓(xùn)練出一個(gè)多元分類器。就是用一些打好標(biāo)簽的照片作為訓(xùn)練數(shù)據(jù),訓(xùn)練出一個(gè)模型,直接根據(jù)照片的特征來(lái)分類。例如,如果照片是早上6:00拍的,且畫(huà)面是黑暗的,那就給它打上睡覺(jué)的標(biāo)簽;如果照片上有車(chē),那就給它打上開(kāi)車(chē)的標(biāo)簽。
這樣可行嗎?
乍一看可以!但實(shí)際上,由于我們忽略了這些照片之間的時(shí)間順序這一重要信息,我們的分類器會(huì)有缺陷的。舉個(gè)例子,假如有一張小明閉著嘴的照片,怎么分類?顯然難以直接判斷,需要參考閉嘴之前的照片,如果之前的照片顯示小明在吃飯,那這個(gè)閉嘴的照片很可能是小明在咀嚼食物準(zhǔn)備下咽,可以給它打上吃飯的標(biāo)簽;如果之前的照片顯示小明在唱歌,那這個(gè)閉嘴的照片很可能是小明唱歌瞬間的抓拍,可以給它打上唱歌的標(biāo)簽。
所以,為了讓我們的分類器能夠有更好的表現(xiàn),在為一張照片分類時(shí),我們必須將與它相鄰的照片的標(biāo)簽信息考慮進(jìn)來(lái)。這——就是條件隨機(jī)場(chǎng)(CRF)大顯身手的地方!
從例子說(shuō)起——詞性標(biāo)注問(wèn)題
啥是詞性標(biāo)注問(wèn)題?
非常簡(jiǎn)單的,就是給一個(gè)句子中的每個(gè)單詞注明詞性。比如這句話:“Bob drank coffee at Starbucks”,注明每個(gè)單詞的詞性后是這樣的:“Bob (名詞) drank(動(dòng)詞) coffee(名詞) at(介詞) Starbucks(名詞)”。
下面,就用條件隨機(jī)場(chǎng)來(lái)解決這個(gè)問(wèn)題。
以上面的話為例,有5個(gè)單詞,我們將:(名詞,動(dòng)詞,名詞,介詞,名詞)作為一個(gè)標(biāo)注序列,稱為l,可選的標(biāo)注序列有很多種,比如l還可以是這樣:(名詞,動(dòng)詞,動(dòng)詞,介詞,名詞),我們要在這么多的可選標(biāo)注序列中,挑選出一個(gè)最靠譜的作為我們對(duì)這句話的標(biāo)注。
怎么判斷一個(gè)標(biāo)注序列靠譜不靠譜呢?
就我們上面展示的兩個(gè)標(biāo)注序列來(lái)說(shuō),第二個(gè)顯然不如第一個(gè)靠譜,因?yàn)樗训诙?、第三個(gè)單詞都標(biāo)注成了動(dòng)詞,動(dòng)詞后面接動(dòng)詞,這在一個(gè)句子中通常是說(shuō)不通的。
假如我們給每一個(gè)標(biāo)注序列打分,打分越高代表這個(gè)標(biāo)注序列越靠譜,我們至少可以說(shuō),凡是標(biāo)注中出現(xiàn)了動(dòng)詞后面還是動(dòng)詞的標(biāo)注序列,要給它負(fù)分!!
上面所說(shuō)的動(dòng)詞后面還是動(dòng)詞就是一個(gè)特征函數(shù),我們可以定義一個(gè)特征函數(shù)集合,用這個(gè)特征函數(shù)集合來(lái)為一個(gè)標(biāo)注序列打分,并據(jù)此選出最靠譜的標(biāo)注序列。也就是說(shuō),每一個(gè)特征函數(shù)都可以用來(lái)為一個(gè)標(biāo)注序列評(píng)分,把集合中所有特征函數(shù)對(duì)同一個(gè)標(biāo)注序列的評(píng)分綜合起來(lái),就是這個(gè)標(biāo)注序列最終的評(píng)分值。
定義CRF中的特征函數(shù)
現(xiàn)在,我們正式地定義一下什么是CRF中的特征函數(shù),所謂特征函數(shù),就是這樣的函數(shù),它接受四個(gè)參數(shù):
- 句子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è)特征。
Note:這里,我們的特征函數(shù)僅僅依靠當(dāng)前單詞的標(biāo)簽和它前面的單詞的標(biāo)簽對(duì)標(biāo)注序列進(jìn)行評(píng)判,這樣建立的CRF也叫作線性鏈CRF,這是CRF中的一種簡(jiǎn)單情況。為簡(jiǎn)單起見(jiàn),本文中我們僅考慮線性鏈CRF。
從特征函數(shù)到概率
定義好一組特征函數(shù)后,我們要給每個(gè)特征函數(shù)f_j賦予一個(gè)權(quán)重λ_j?,F(xiàn)在,只要有一個(gè)句子s,有一個(gè)標(biāo)注序列l(wèi),我們就可以利用前面定義的特征函數(shù)集來(lái)對(duì)l評(píng)分。
pic1.PNG上式中有兩個(gè)求和,外面的求和用來(lái)求每一個(gè)特征函數(shù)f_j評(píng)分值的和,里面的求和用來(lái)求句子中每個(gè)位置的單詞的的特征值的和。
對(duì)這個(gè)分?jǐn)?shù)進(jìn)行指數(shù)化和標(biāo)準(zhǔn)化,我們就可以得到標(biāo)注序列l(wèi)的概率值p(l|s),如下所示:
pic2.PNG幾個(gè)特征函數(shù)的例子
前面我們已經(jīng)舉過(guò)特征函數(shù)的例子,下面我們?cè)倏磶讉€(gè)具體的例子,幫助增強(qiáng)大家的感性認(rèn)識(shí)。
pic3.PNG當(dāng)l_i是“副詞”并且第i個(gè)單詞以“l(fā)y”結(jié)尾時(shí),我們就讓f1 = 1,其他情況f1為0。不難想到,f1特征函數(shù)的權(quán)重λ1應(yīng)當(dāng)是正的。而且λ1越大,表示我們?cè)絻A向于采用那些把以“l(fā)y”結(jié)尾的單詞標(biāo)注為“副詞”的標(biāo)注序列
pic4.PNG如果i=1,l_i=動(dòng)詞,并且句子s是以“?”結(jié)尾時(shí),f2=1,其他情況f2=0。同樣,λ2應(yīng)當(dāng)是正的,并且λ2越大,表示我們?cè)絻A向于采用那些把問(wèn)句的第一個(gè)單詞標(biāo)注為“動(dòng)詞”的標(biāo)注序列。
pic5.PNG當(dāng)l_i-1是介詞,l_i是名詞時(shí),f3 = 1,其他情況f3=0。λ3也應(yīng)當(dāng)是正的,并且λ3越大,說(shuō)明我們?cè)秸J(rèn)為介詞后面應(yīng)當(dāng)跟一個(gè)名詞。
pic6.PNG如果l_i和l_i-1都是介詞,那么f4等于1,其他情況f4=0。這里,我們應(yīng)當(dāng)可以想到λ4是負(fù)的,并且λ4的絕對(duì)值越大,表示我們?cè)讲徽J(rèn)可介詞后面還是介詞的標(biāo)注序列。
好了,一個(gè)條件隨機(jī)場(chǎng)就這樣建立起來(lái)了,讓我們總結(jié)一下:
為了建一個(gè)條件隨機(jī)場(chǎng),我們首先要定義一個(gè)特征函數(shù)集,每個(gè)特征函數(shù)都以整個(gè)句子s,當(dāng)前位置i,位置i和i-1的標(biāo)簽為輸入。然后為每一個(gè)特征函數(shù)賦予一個(gè)權(quán)重,然后針對(duì)每一個(gè)標(biāo)注序列l(wèi),對(duì)所有的特征函數(shù)加權(quán)求和,必要的話,可以把求和的值轉(zhuǎn)化為一個(gè)概率值。
CRF與邏輯回歸的比較
觀察公式:
是不是有點(diǎn)邏輯回歸的味道?
事實(shí)上,條件隨機(jī)場(chǎng)是邏輯回歸的序列化版本。邏輯回歸是用于分類的對(duì)數(shù)線性模型,條件隨機(jī)場(chǎng)是用于序列化標(biāo)注的對(duì)數(shù)線性模型。
CRF與HMM的比較
對(duì)于詞性標(biāo)注問(wèn)題,HMM模型也可以解決。HMM的思路是用生成辦法,就是說(shuō),在已知要標(biāo)注的句子s的情況下,去判斷生成標(biāo)注序列l(wèi)的概率,如下所示:
pic7.PNG這里:
p(l_i|l_i-1)是轉(zhuǎn)移概率,比如,l_i-1是介詞,l_i是名詞,此時(shí)的p表示介詞后面的詞是名詞的概率。
p(w_i|l_i)表示發(fā)射概率(emission probability),比如l_i是名詞,w_i是單詞“ball”,此時(shí)的p表示在是名詞的狀態(tài)下,是單詞“ball”的概率。
那么,HMM和CRF怎么比較呢?
答案是:CRF比HMM要強(qiáng)大的多,它可以解決所有HMM能夠解決的問(wèn)題,并且還可以解決許多HMM解決不了的問(wèn)題。事實(shí)上,我們可以對(duì)上面的HMM模型取對(duì)數(shù),就變成下面這樣:
我們把這個(gè)式子與CRF的式子進(jìn)行比較:
pic1.PNG
不難發(fā)現(xiàn),如果我們把第一個(gè)HMM式子中的log形式的概率看做是第二個(gè)CRF式子中的特征函數(shù)的權(quán)重的話,我們會(huì)發(fā)現(xiàn),CRF和HMM具有相同的形式。
換句話說(shuō),我們可以構(gòu)造一個(gè)CRF,使它與HMM的對(duì)數(shù)形式相同。怎么構(gòu)造呢?
對(duì)于HMM中的每一個(gè)轉(zhuǎn)移概率p(l_i=y|l_i-1=x),我們可以定義這樣的一個(gè)特征函數(shù):
pic9.PNG該特征函數(shù)僅當(dāng)l_i = y,l_i-1=x時(shí)才等于1。這個(gè)特征函數(shù)的權(quán)重如下:
pic10.PNG同樣的,對(duì)于HMM中的每一個(gè)發(fā)射概率,我們也都可以定義相應(yīng)的特征函數(shù),并讓該特征函數(shù)的權(quán)重等于HMM中的log形式的發(fā)射概率。
用這些形式的特征函數(shù)和相應(yīng)的權(quán)重計(jì)算出來(lái)的p(l|s)和對(duì)數(shù)形式的HMM模型幾乎是一樣的!
用一句話來(lái)說(shuō)明HMM和CRF的關(guān)系就是這樣:
每一個(gè)HMM模型都等價(jià)于某個(gè)CRF
每一個(gè)HMM模型都等價(jià)于某個(gè)CRF
每一個(gè)HMM模型都等價(jià)于某個(gè)CRF
但是,CRF要比HMM更加強(qiáng)大,原因主要有兩點(diǎn):
- CRF可以定義數(shù)量更多,種類更豐富的特征函數(shù)。HMM模型具有天然具有局部性,就是說(shuō),在HMM模型中,當(dāng)前的單詞只依賴于當(dāng)前的標(biāo)簽,當(dāng)前的標(biāo)簽只依賴于前一個(gè)標(biāo)簽。這樣的局部性限制了HMM只能定義相應(yīng)類型的特征函數(shù),我們?cè)谏厦嬉部吹搅恕5荂RF卻可以著眼于整個(gè)句子s定義更具有全局性的特征函數(shù),如這個(gè)特征函數(shù):
如果i=1,l_i=動(dòng)詞,并且句子s是以“?”結(jié)尾時(shí),f2=1,其他情況f2=0。
- CRF可以使用任意的權(quán)重?將對(duì)數(shù)HMM模型看做CRF時(shí),特征函數(shù)的權(quán)重由于是log形式的概率,所以都是小于等于0的,而且概率還要滿足相應(yīng)的限制,如
pic11.PNG
但在CRF中,每個(gè)特征函數(shù)的權(quán)重可以是任意值,沒(méi)有這些限制。
轉(zhuǎn)載于:https://www.cnblogs.com/Arborday/p/9099909.html
總結(jié)
以上是生活随笔為你收集整理的[转] 如何轻松愉快地理解条件随机场(CRF)?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 批量找注入 python3+sqlmap
- 下一篇: 防抖debounce和节流throttl