天天看點

條件随機場——時間序列(句子單詞序列也算),其特征函數必須要考慮前一刻的資料

摘自:https://www.zhihu.com/question/35866596/answer/139485548

用一個活生生的例子來說明條件随機場的,十分的通俗易懂!原文在這裡

假設你有許多小明同學一天内不同時段的照片,從小明提褲子起床到脫褲子睡覺各個時間段都有(小明是照片控!)。現在的任務是對這些照片進行分類。比如有的照片是吃飯,那就給它打上吃飯的标簽;有的照片是跑步時拍的,那就打上跑步的标簽;有的照片是開會時拍的,那就打上開會的标簽。問題來了,你準備怎麼幹?

一個簡單直覺的辦法就是,不管這些照片之間的時間順序,想辦法訓練出一個多元分類器。就是用一些打好标簽的照片作為訓練資料,訓練出一個模型,直接根據照片的特征來分類。例如,如果照片是早上6:00拍的,且畫面是黑暗的,那就給它打上睡覺的标簽;如果照片上有車,那就給它打上開車的标簽。

這樣可行嗎?

乍一看可以!但實際上,由于我們忽略了這些照片之間的時間順序這一重要資訊,我們的分類器會有缺陷的。舉個例子,假如有一張小明閉着嘴的照片,怎麼分類?顯然難以直接判斷,需要參考閉嘴之前的照片,如果之前的照片顯示小明在吃飯,那這個閉嘴的照片很可能是小明在咀嚼食物準備下咽,可以給它打上吃飯的标簽;如果之前的照片顯示小明在唱歌,那這個閉嘴的照片很可能是小明唱歌瞬間的抓拍,可以給它打上唱歌的标簽。

是以,為了讓我們的分類器能夠有更好的表現,在為一張照片分類時,我們必須将與它相鄰的照片的标簽資訊考慮進來。這——就是條件随機場(CRF)大顯身手的地方!

#從例子說起——詞性标注問題

-----

啥是詞性标注問題?

非常簡單的,就是給一個句子中的每個單詞注明詞性。比如這句話:“Bob drank coffee at Starbucks”,注明每個單詞的詞性後是這樣的:“Bob (名詞) drank(動詞) coffee(名詞) at(介詞) Starbucks(名詞)”。

下面,就用條件随機場來解決這個問題。

以上面的話為例,有5個單詞,我們将:**(名詞,動詞,名詞,介詞,名詞)**作為一個标注序列,稱為l,可選的标注序列有很多種,比如l還可以是這樣:**(名詞,動詞,動詞,介詞,名詞)**,我們要在這麼多的可選标注序列中,挑選出一個**最靠譜**的作為我們對這句話的标注。

怎麼判斷一個标注序列靠譜不靠譜呢?

就我們上面展示的兩個标注序列來說,第二個顯然不如第一個靠譜,因為它把第二、第三個單詞都标注成了動詞,動詞後面接動詞,這在一個句子中通常是說不通的。

假如我們給每一個标注序列打分,打分越高代表這個标注序列越靠譜,我們至少可以說,凡是标注中出現了**動詞後面還是動詞**的标注序列,要給它**減分!!**

上面所說的**動詞後面還是動詞**就是一個特征函數,我們可以定義一個特征函數集合,用這個特征函數集合來為一個标注序列打分,并據此選出最靠譜的标注序列。也就是說,每一個特征函數都可以用來為一個标注序列評分,把集合中所有特征函數對同一個标注序列的評分綜合起來,就是這個标注序列最終的評分值。

#定義CRF中的特征函數

現在,我們正式地定義一下什麼是CRF中的特征函數,所謂特征函數,就是這樣的函數,它接受四個參數:

- 句子s(就是我們要标注詞性的句子)

- i,用來表示句子s中第i個單詞

- l_i,表示要評分的标注序列給第i個單詞标注的詞性

- l_i-1,表示要評分的标注序列給第i-1個單詞标注的詞性

它的輸出值是0或者1,0表示要評分的标注序列不符合這個特征,1表示要評分的标注序列符合這個特征。

**Note:**這裡,我們的特征函數僅僅依靠目前單詞的标簽和它前面的單詞的标簽對标注序列進行評判,這樣建立的CRF也叫作線性鍊CRF,這是CRF中的一種簡單情況。為簡單起見,本文中我們僅考慮線性鍊CRF。

#從特征函數到機率

定義好一組特征函數後,我們要給每個特征函數f_j賦予一個權重λ_j。現在,隻要有一個句子s,有一個标注序列l,我們就可以利用前面定義的特征函數集來對l評分。

條件随機場——時間序列(句子單詞序列也算),其特征函數必須要考慮前一刻的資料

上式中有兩個相加,外面的相加用來相加每一個特征函數f_j,裡面的相加用來相加句子中每個位置的單詞的的特征值。

對這個分數進行**指數化和标準化**,我們就可以得到标注序列l的機率值**p(l|s)**,如下所示:

條件随機場——時間序列(句子單詞序列也算),其特征函數必須要考慮前一刻的資料

#幾個特征函數的例子

前面我們已經舉過特征函數的例子,下面我們再看幾個具體的例子,幫助增強大家的感性認識。

條件随機場——時間序列(句子單詞序列也算),其特征函數必須要考慮前一刻的資料

當l_i是“副詞”并且第i個單詞以“ly”結尾時,我們就讓f1 = 1,其他情況f1為0。不難想到,f1特征函數的權重λ1應當是正的。而且λ1越大,表示我們越傾向于采用那些把以“ly”結尾的單詞标注為“副詞”的标注序列

條件随機場——時間序列(句子單詞序列也算),其特征函數必須要考慮前一刻的資料

如果i=1,l_i=動詞,并且句子s是以“?”結尾時,f2=1,其他情況f2=0。同樣,λ2應當是正的,并且λ2越大,表示我們越傾向于采用那些把問句的第一個單詞标注為“動詞”的标注序列。

。。。

好了,一個條件随機場就這樣建立起來了,讓我們總結一下:

為了建一個條件随機場,我們首先要定義一個特征函數集,每個特征函數都以整個句子s,目前位置i,位置i和i-1的标簽為輸入。然後為每一個特征函數賦予一個權重,然後針對每一個标注序列l,對所有的特征函數權重求和,必要的話,可以把求和的值轉化為一個機率值。

本文轉自張昺華-sky部落格園部落格,原文連結:http://www.cnblogs.com/bonelee/p/7063724.html,如需轉載請自行聯系原作者