看了李航老師的《統(tǒng)計學習方法》中的條件隨機場笋婿,完全是一頭霧水;國外有一個很著名的條件隨機場的教程顿颅,是英文的缸濒,原文在這里[http://blog.echen.me/2012/01/03/introduction-to-conditional-random-fields/],英文版太長,又不想看庇配,不過幸好在簡書上找到一個比較容易理解的入門小教程斩跌,原文在這里:http://www.reibang.com/p/55755fc649b1
假設你有許多小明同學一天內(nèi)不同時段的照片,從小明提褲子起床到脫褲子睡覺各個時間段都有(小明是照片控@袒拧)∫唬現(xiàn)在的任務是對這些照片進行分類。比如有的照片是吃飯啸澡,那就給它打上吃飯的標簽袖订;有的照片是跑步時拍的,那就打上跑步的標簽嗅虏;有的照片是開會時拍的洛姑,那就打上開會的標簽。問題來了旋恼,你準備怎么干吏口?
一個簡單直觀的辦法就是,不管這些照片之間的時間順序冰更,想辦法訓練出一個多元分類器产徊。就是用一些打好標簽的照片作為訓練數(shù)據(jù),訓練出一個模型蜀细,直接根據(jù)照片的特征來分類舟铜。例如,如果照片是早上6:00拍的奠衔,且畫面是黑暗的谆刨,那就給它打上睡覺的標簽;如果照片上有車,那就給它打上開車的標簽归斤。
這樣可行嗎痊夭?
乍一看可以!但實際上脏里,由于我們忽略了這些照片之間的時間順序這一重要信息她我,我們的分類器會有缺陷的。舉個例子迫横,假如有一張小明閉著嘴的照片番舆,怎么分類?顯然難以直接判斷矾踱,需要參考閉嘴之前的照片恨狈,如果之前的照片顯示小明在吃飯,那這個閉嘴的照片很可能是小明在咀嚼食物準備下咽呛讲,可以給它打上吃飯的標簽禾怠;如果之前的照片顯示小明在唱歌返奉,那這個閉嘴的照片很可能是小明唱歌瞬間的抓拍,可以給它打上唱歌的標簽吗氏。
所以衡瓶,為了讓我們的分類器能夠有更好的表現(xiàn),在為一張照片分類時牲证,我們必須將與它相鄰的照片的標簽信息考慮進來。這——就是條件隨機場(CRF)大顯身手的地方关面!
CRF與詞性標注
啥是詞性標注問題坦袍?
非常簡單的,就是給一個句子中的每個單詞注明詞性等太。比如這句話:“Bob drank coffee at Starbucks”捂齐,注明每個單詞的詞性后是這樣的:“Bob (名詞) drank(動詞) coffee(名詞) at(介詞) Starbucks(名詞)”。
下面缩抡,就用條件隨機場來解決這個問題奠宜。
以上面的話為例,有5個單詞瞻想,我們將:(名詞压真,動詞,名詞蘑险,介詞滴肿,名詞)作為一個標注序列,稱為l佃迄,可選的標注序列有很多種泼差,比如l還可以是這樣:(名詞,動詞呵俏,動詞堆缘,介詞,名詞)普碎,我們要在這么多的可選標注序列中吼肥,挑選出一個最靠譜的作為我們對這句話的標注。
怎么判斷一個標注序列靠譜不靠譜呢随常?
就我們上面展示的兩個標注序列來說潜沦,第二個顯然不如第一個靠譜,因為它把第二绪氛、第三個單詞都標注成了動詞唆鸡,動詞后面接動詞,這在一個句子中通常是說不通的枣察。
假如我們給每一個標注序列打分争占,打分越高代表這個標注序列越靠譜燃逻,我們至少可以說,凡是標注中出現(xiàn)了動詞后面還是動詞的標注序列臂痕,要給它負分2蟆!
上面所說的動詞后面還是動詞就是一個特征函數(shù)握童,我們可以定義一個特征函數(shù)集合姆怪,用這個特征函數(shù)集合來為一個標注序列打分,并據(jù)此選出最靠譜的標注序列澡绩。也就是說稽揭,每一個特征函數(shù)都可以用來為一個標注序列評分,把集合中所有特征函數(shù)對同一個標注序列的評分綜合起來肥卡,就是這個標注序列最終的評分值溪掀。
CRF中的特征函數(shù)
現(xiàn)在,我們正式地定義一下什么是CRF中的特征函數(shù)步鉴,所謂特征函數(shù)揪胃,就是這樣的函數(shù),它接受四個參數(shù):
句子s(就是我們要標注詞性的句子)
i氛琢,用來表示句子s中第i個單詞
l_i喊递,表示要評分的標注序列給第i個單詞標注的詞性
l_i-1,表示要評分的標注序列給第i-1個單詞標注的詞性
它的輸出值是0或者1,0表示要評分的標注序列不符合這個特征艺沼,1表示要評分的標注序列符合這個特征册舞。
定義好一組特征函數(shù)后,我們要給每個特征函數(shù)f_j賦予一個權(quán)重λ_j≌习悖現(xiàn)在调鲸,只要有一個句子s,有一個標注序列l(wèi)挽荡,我們就可以利用前面定義的特征函數(shù)集來對l評分藐石。
上式中有兩個求和,外面的求和用來求每一個特征函數(shù)f_j評分值的和定拟,里面的求和用來求句子中每個位置的單詞的的特征值的和于微。
對這個分數(shù)進行指數(shù)化和標準化,我們就可以得到標注序列l(wèi)的概率值p(l|s)青自,如下所示:
幾個特征函數(shù)的例子
下面我們再看幾個具體的例子株依,幫助增強大家的感性認識。
當l_i是“副詞”并且第i個單詞以“l(fā)y”結(jié)尾時延窜,我們就讓f1 = 1恋腕,其他情況f1為0。不難想到逆瑞,f1特征函數(shù)的權(quán)重λ1應當是正的荠藤。而且λ1越大伙单,表示我們越傾向于采用那些把以“l(fā)y”結(jié)尾的單詞標注為“副詞”的標注序列
如果i=1,l_i=動詞哈肖,并且句子s是以“吻育?”結(jié)尾時,f2=1淤井,其他情況f2=0布疼。同樣,λ2應當是正的币狠,并且λ2越大缎除,表示我們越傾向于采用那些把問句的第一個單詞標注為“動詞”的標注序列。
當l_i-1是介詞总寻,l_i是名詞時,f3 = 1梢为,其他情況f3=0渐行。λ3也應當是正的,并且λ3越大铸董,說明我們越認為介詞后面應當跟一個名詞祟印。
如果l_i和l_i-1都是介詞,那么f4等于1粟害,其他情況f4=0蕴忆。這里,我們應當可以想到λ4是負的悲幅,并且λ4的絕對值越大套鹅,表示我們越不認可介詞后面還是介詞的標注序列。
好了汰具,一個條件隨機場就這樣建立起來了卓鹿,讓我們總結(jié)一下:
為了建一個條件隨機場,我們首先要定義一個特征函數(shù)集留荔,每個特征函數(shù)都以整個句子s吟孙,當前位置i,位置i和i-1的標簽為輸入聚蝶。然后為每一個特征函數(shù)賦予一個權(quán)重杰妓,然后針對每一個標注序列l(wèi),對所有的特征函數(shù)加權(quán)求和碘勉,必要的話巷挥,可以把求和的值轉(zhuǎn)化為一個概率值。