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

前言

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

目錄

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

條件隨機場(conditional random field CRF)

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

核心點

在上一篇博文中,咱們簡單介紹了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):macos

  • 成對馬爾可夫性:設\(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)\]

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

線性鏈條件隨機場

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

\(Z(x)\)做爲規範化因子,是對\(y\)的全部可能取值求和。咱們能夠用下圖來理解:
dom

對於線性鏈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. 《統計學習方法》 李航
相關文章
相關標籤/搜索