1. 程式人生 > >淺談分詞演算法(4)基於字的分詞方法(CRF)

淺談分詞演算法(4)基於字的分詞方法(CRF)

目錄

前言

通過前面幾篇系列文章,我們從分詞中最基本的問題開始,並分別利用了1-gram和HMM的方法實現了分詞demo。本篇博文在此基礎上,重點介紹利用CRF來實現分詞的方法,這也是一種基於字的分詞方法,在將句子轉換為序列標註問題之後,不使用HMM的生成模型方式,而是使用條件概率模型進行建模,即判別模型CRF。之後我們對CRF與HMM進行對比,同樣的我們最終也會附上CRF分詞的實現程式碼。

目錄

淺談分詞演算法(1)分詞中的基本問題
淺談分詞演算法(2)基於詞典的分詞方法
淺談分詞演算法(3)基於字的分詞方法(HMM)
淺談分詞演算法(4)基於字的分詞方法(CRF)
淺談分詞演算法(5)基於字的分詞方法(LSTM)

條件隨機場(conditional random field CRF)

為了說清楚CRF在分詞上的應用,我們需要簡單介紹下條件隨機場CRF,我們不去長篇大論的展開論述,只討論幾個核心的點,並重點闡述下線性鏈條件隨機場,也是我們在序列標註問題中經常遇到的,如分詞、詞性標註、韻律標註等等。

核心點

在上一篇博文中,我們簡單介紹了HMM模型,是一個五元組,它的核心圍繞的是一個關於序列\(X\)

\(Y\)的聯合概率分佈\(P(X,Y)\),而在條件隨機場的核心圍繞的是條件概率分佈模型\(P(Y|X)\),它是一種馬爾可夫隨機場,滿足馬爾科夫性(這裡我們就不展開闡述了,具體可參考[3])。我們這裡必須搬出一張經典的圖片,大家可能在網上的無數博文中也都看到過,其來源與[4]:

從圖中我們可以看出模型之間的演化過程以及模型之間的區別,對於用在分類問題中的邏輯迴歸與CRF其實都同屬於對數線性模型,這裡直觀的我們也很好理解,當用CRF模型對\(X\)\(Y\)序列建模時,我們需要判斷\(x_i\)對應的標籤\(y_i\)時其實可以看做一次邏輯迴歸分類問題,只不過這個分類問題考慮了上下文的序列資訊,也就是說單純的迴歸分類會損失上下文的序列資訊如:有一系列連續拍攝的照片,現在想在照片上打上表示照片裡的活動內容的標記,當然可以將每張照片單獨做分類,但是會損失資訊,例如當有一張照片上是一張嘴,應該分類到“吃飯”還是分類到“唱K”呢?如果這張照片的上一張照片內容是吃飯或者做飯,那麼這張照片表示“吃飯”的可能性就大一些,如果上一張照片的內容是跳舞,那這張照片就更有可能在講唱K的事情。

設有聯合概率分佈\(P(Y)\),由無向圖\(G=(V,E)\)表示,在圖\(G\)中,結點表示隨機變數,邊表示隨機變數之間的依賴關係,如果聯合概率分佈\(P(Y)\)滿足成對、區域性或全域性馬爾可夫性,就稱此聯合概率分佈為馬爾可夫隨機場(Markov random filed)也稱概率無向圖模型(probablistic undirected graphical model):

  • 成對馬爾可夫性:設\(u,v\)是無向圖\(G\)中任意兩個沒有邊連線的結點,其他所有結點表示為\(O\),對應的隨機變數分別用\(Y_u,Y_v,Y_O\)表示,成對馬爾可夫性是指給定隨機變數組\(Y_O\)的條件下隨機變數\(Y_u,Y_v\)是條件獨立的,如下:\[P(Y_u,Y_v|Y_O)=P(Y_u|Y_O)P(Y_v|Y_O)\]
  • 區域性馬爾可夫性:設\(v\in V\)\(G\)中任意一個節點,\(W\)是與\(v\)有邊連線的所有節點,\(O\)\(v\)\(W\)以外的其他所有節點。\(v\)表示的隨機變數是\(Y_v\)\(W\)表示的隨機變數是\(Y_w\)\(O\)表示的隨機變數是\(Y_o\)。區域性馬爾可夫性是在給定隨機變數組\(Y_w\)的條件下隨機變數\(Y_v\)與隨機變數\(Y_o\)是獨立的。\[P(Y_v,Y_O|Y_W)=P(Y_v|Y_w)P(Y_O|Y_W)\]
  • 全域性馬爾可夫性:\(A,B\)\(G\)中被C分開的任意節點集合。全域性馬爾科夫性是指給定\(Y_c\)條件下\(Y_A\)\(Y_B\)是條件獨立的,即\[P(Y_A,Y_B|Y_C)=P(Y_A|Y_C)P(Y_B|Y_C)\]

下面我們具體闡述下一種特殊也常用的線性鏈條件隨機場。

線性鏈條件隨機場

給定一個線性鏈條件隨機場\(P(Y|X)\),當觀測序列為\(x=x_1x_2...\)時,狀態序列為 \(y=y_1y_2...\)的概率可寫為(實際上應該寫為\(P(Y=y|x;θ)\),引數被省略了)

\(Z(x)\)作為規範化因子,是對\(y\)的所有可能取值求和。我們可以用下圖來理解:

對於線性鏈CRF,特徵函式是個非常重要的概念(很容易聯想到HMM的轉移概率和發射概率):

  • 轉移特徵\(t_k(y_{i−1},y_i,x,i)\)是定義在邊上的特徵函式(transition),依賴於當前位置\(i\)和前一位置\(i-1\);對應的權值為\(λ_k\)
  • 狀態特徵\(s_l(y_i,x,i)\)是定義在節點上的特徵函式(state),依賴於當前位置\(i\);對應的權值為\(μ_l\)

一般來說,特徵函式的取值為 1 或 0 ,當滿足規定好的特徵條件時取值為 1 ,否則為 0 。

簡化形式

對於轉移特徵這一項:

可以看出外面那個求和號是套著裡面的求和號的,這種雙重求和就表明了對於同一個特徵\(k\),在各個位置\(i\)上都有定義。
基於此,很直覺的想法就是把同一個特徵在各個位置\(i\)求和,形成一個全域性的特徵函式,也就是說讓裡面那一層求和號消失。在此之前,為了把加號的兩項合併成一項,首先將各個特徵函式\(t\)(設其共有\(K_1\)個)、\(s\)(設共\(K_2\)個)都換成統一的記號\(f\)

相應的權重同理:

那麼就可以記為:

然後就可以把特徵在各個位置\(i\)求和,即

其中\(K=K_1+K_2\)。進而可以得到簡化表示形式:

這個形式我們在下一節介紹CRF分詞的時候會使用。

CRF分詞

對於一個句子的分詞問題我們在前面的系列博文中已經闡述,輸入的句子\(S\)相當於序列\(X\),輸出的標籤序列L相當於序列\(Y\),我們要訓練一個模型,使得在給定\(S\)的前提下,找到其最優對應的\(L\)
訓練該模型的關鍵點就是特徵函式\(F\)的選取以及每個特徵函式權重\(W\)的確定,而對於每個特徵函式而言,其輸入有如下四個要素:

  • 句子\(S\)(就是我們要標註詞性的句子)
  • \(i\),用來表示句子\(S\)中第\(i\)個單詞
  • \(l_i\),表示要評分的標註序列給第i個單詞標註的詞性
  • \(l_{i-1}\),表示要評分的標註序列給第\(i-1\)個單詞標註的詞性

它的輸出值是0或者1,0表示要評分的標註序列不符合這個特徵,1表示要評分的標註序列符合這個特徵。我們發現這裡的特徵函式在選取當前\(s_i\)的對應標籤\(l_i\)時,只考慮了其前一個標籤\(l_{i-1}\),這就是使用了我們上一節闡述的線性鏈條件隨機場,而公式中的f就是我們這裡的特徵函式。
Note:在實際的應用時,除了單一的特徵選取,我們通常會通過構造複合特徵的方式,考慮更多的上下文資訊。

CRF VS HMM

在上一篇博文中我們介紹了HMM在分詞中的使用,那麼讀者肯定會問既然HMM已經能完成任務,為什麼還需要CRF來重新搞一波,原因就是CRF比HMM更強大。
對於序列\(L\)\(S\),根據之前的介紹我們易知如下公式:

其中\(w_i\)\(S\)中第\(i\)個詞,\(l_i\)為第\(i\)個詞的標籤,公式中前半部分為狀態轉移概率,後半部分為發射概率。我們用對數形式表示該式:

把這個式子與CRF的簡化形式比較,不難發現,如果我們把第一個HMM式子中的log形式的概率看做是第二個CRF式子中的特徵函式的權重的話,我們會發現,CRF和HMM具有相同的形式。所以可以說:每一個HMM模型都等價於某個CRF。
總結下兩者的區別:

  • HMM是生成模型以聯合概率建模,CRF是判別模型以條件概率建模
  • HMM為了簡化計算做了有限狀態假設和一對一假設(當前的單詞只依賴於當前的標籤,當前的標籤只依賴於前一個標籤),所以在特徵選取上會有很多限制;而CRF可以定義數量更多,種類更豐富的特徵函式(如定義一個特徵函式f,考慮當前詞離句首的距離,來著眼於整個句子)。
  • CRF可以使用任意的權重 將對數HMM模型看做CRF時,特徵函式的權重由於是log形式的概率,所以都是小於等於0的,而且概率還要滿足相應的限制,但在CRF中,每個特徵函式的權重可以是任意值,沒有這些限制。

Note:其實在HMM和CRF之間還有一個MEMM,即最大熵馬爾科夫模型,MEMM模型是對轉移概率和表現概率建立聯合概率,統計時統計的是條件概率,但MEMM容易陷入區域性最優,是因為MEMM只在區域性做歸一化(標記偏置問題),不過一般用的不多我們就不過多介紹,可參考[5]

程式碼實現

下面我們利用wapiti來實現一個簡單的CRF分詞器。相關說明:

訓練程式碼

https://github.com/xlturing/machine-learning-journey/tree/master/seg_crf
大家可以直接看下原始碼

實驗結果

  • 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

這個訓練集和測試集都相對較小,效果還不錯,讀者在真正上線使用時還需要依賴詞典等諸多與場景對應的分詞特性,本文更加關注原理和理解。

參考文獻

  1. HMM MEMM CRF 區別 聯絡
  2. 如何輕鬆愉快地理解條件隨機場(CRF)?
  3. NLP —— 圖模型(二)條件隨機場(Conditional random field,CRF)
  4. An Introduction to Conditional Random Fields
  5. HMM MEMM CRF 區別 聯絡
  6. 《統計學習方法》 李航