標籤:

如何輕鬆愉快地理解條件隨機場(CRF)?

作者: milter

原文鏈接:jianshu.com/p/55755fc64

查看更多的專業文章、課程信息、產品信息,請移步至「人工智慧LeadAI」公眾號,或移步至全新打造的官網:www.leadai.org.

正文共3672個字,14張圖,預計閱讀時間10分鐘。

理解條件隨機場最好的辦法就是用一個現實的例子來說明它。但是目前中文的條件隨機場文章鮮有這樣乾的,可能寫文章的人都是大牛,不屑於舉例子吧。於是乎,我翻譯了這篇文章。希望對其他夥伴有所幫助。

原文在這裡[blog.echen.me/2012/01/0]

想直接看英文的朋友可以直接點進去了。我在翻譯時並沒有拘泥於原文,許多地方都加入了自己的理解,用學術點的話說就是意譯。(畫外音:裝什麼裝,快點開始吧。)好的,下面開始翻譯!

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

一個簡單直觀的辦法就是,不管這些照片之間的時間順序,想辦法訓練出一個多元分類器。就是用一些打好標籤的照片作為訓練數據,訓練出一個模型,直接根據照片的特徵來分類。例如,如果照片是早上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評分。

pic1.PNG

上式中有兩個求和,外面的求和用來求每一個特徵函數f_j評分值的和,裡面的求和用來求句子中每個位置的單詞的的特徵值的和。

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

pic2.PNG

幾個特徵函數的例子

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

pic3.PNG

當l_i是「副詞」並且第i個單詞以「ly」結尾時,我們就讓f1 = 1,其他情況f1為0。不難想到,f1特徵函數的權重λ1應當是正的。而且λ1越大,表示我們越傾向於採用那些把以「ly」結尾的單詞標註為「副詞」的標註序列

pic4.PNG

如果i=1,l_i=動詞,並且句子s是以「?」結尾時,f2=1,其他情況f2=0。同樣,λ2應當是正的,並且λ2越大,表示我們越傾向於採用那些把問句的第一個單詞標註為「動詞」的標註序列。

pic5.PNG

當l_i-1是介詞,l_i是名詞時,f3 = 1,其他情況f3=0。λ3也應當是正的,並且λ3越大,說明我們越認為介詞後面應當跟一個名詞。

pic6.PNG

如果l_i和l_i-1都是介詞,那麼f4等於1,其他情況f4=0。這裡,我們應當可以想到λ4是負的,並且λ4的絕對值越大,表示我們越不認可介詞後面還是介詞的標註序列。

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

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

CRF與邏輯回歸的比較

觀察公式:

是不是有點邏輯回歸的味道?

事實上,條件隨機場是邏輯回歸的序列化版本。邏輯回歸是用於分類的對數線性模型,條件隨機場是用於序列化標註的對數線性模型。

CRF與HMM的比較

對於詞性標註問題,HMM模型也可以解決。HMM的思路是用生成辦法,就是說,在已知要標註的句子s的情況下,去判斷生成標註序列l的概率,如下所示:

pic7.PNG

這裡:

p(l_i|l_i-1)是轉移概率,比如,l_i-1是介詞,l_i是名詞,此時的p表示介詞後面的詞是名詞的概率。

p(w_i|l_i)表示發射概率(emission probability),比如l_i是名詞,w_i是單詞「ball」,此時的p表示在是名詞的狀態下,是單詞「ball」的概率。

那麼,HMM和CRF怎麼比較呢?

答案是:CRF比HMM要強大的多,它可以解決所有HMM能夠解決的問題,並且還可以解決許多HMM解決不了的問題。事實上,我們可以對上面的HMM模型取對數,就變成下面這樣:

pic8.PNG

我們把這個式子與CRF的式子進行比較:

pic1.PNG

不難發現,如果我們把第一個HMM式子中的log形式的概率看做是第二個CRF式子中的特徵函數的權重的話,我們會發現,CRF和HMM具有相同的形式。

換句話說,我們可以構造一個CRF,使它與HMM的對數形式相同。怎麼構造呢?

對於HMM中的每一個轉移概率p(l_i=y|l_i-1=x),我們可以定義這樣的一個特徵函數:

pic9.PNG

該特徵函數僅當l_i = y,l_i-1=x時才等於1。這個特徵函數的權重如下:

pic10.PNG

同樣的,對於HMM中的每一個發射概率,我們也都可以定義相應的特徵函數,並讓該特徵函數的權重等於HMM中的log形式的發射概率。

用這些形式的特徵函數和相應的權重計算出來的p(l|s)和對數形式的HMM模型幾乎是一樣的!

用一句話來說明HMM和CRF的關係就是這樣:

每一個HMM模型都等價於某個CRF

每一個HMM模型都等價於某個CRF

每一個HMM模型都等價於某個CRF

但是,CRF要比HMM更加強大,原因主要有兩點:

1、CRF可以定義數量更多,種類更豐富的特徵函數。HMM模型具有天然具有局部性,就是說,在HMM模型中,當前的單詞只依賴於當前的標籤,當前的標籤只依賴於前一個標籤。這樣的局部性限制了HMM只能定義相應類型的特徵函數,我們在上面也看到了。但是CRF卻可以著眼於整個句子s定義更具有全局性的特徵函數,如這個特徵函數:

pic4.PNG

如果i=1,l_i=動詞,並且句子s是以「?」結尾時,f2=1,其他情況f2=0。

2、CRF可以使用任意的權重 將對數HMM模型看做CRF時,特徵函數的權重由於是log形式的概率,所以都是小於等於0的,而且概率還要滿足相應的限制,如

pic11.PNG

但在CRF中,每個特徵函數的權重可以是任意值,沒有這些限制。

推薦閱讀:

TAG:條件 | 隨機 |