HanLP《自然語言處理入門》筆記--6.條件隨機場與序列標註

筆記轉載於GitHub項目https://github.com/NLP-LOVE/Introduction-NLP

6. 條件隨機場與序列標註

本章介紹一種新的序列標註模型條件隨機場。這種模型與感知機同屬結構化學習大家族,但性能比感知機還要強大。爲了釐清該模型的來龍去脈,我們先對機器學習模型做番柿理。然後結合代碼介紹條件隨機場理論,探究它與結構化感知機的異同。

6.1 機器學習的模型譜系

機器學習的模型譜系圖如下圖所示:

根據建模的究竟是聯合概率分佈 P(x,y) 還是條件概率分佈 P(y|x)。派生出生成式模型與判別式模型。

  1. 生成式模型

    生成式模型:模擬數據的生成過程,兩類隨機變量存在因果先後關係,先有因素 y,後有結果 x,這種因果關係由聯合分佈模擬:

    P(x,y)=P(y)P(xy)P(x,y)=P(y)P(x|y)

    通過聯合分佈 P(x,y),生成式模型其實間接建模了 P(x):

    P(x)=yYP(x,y)P(x)=\sum_{y\in{Y}}P(x,y)

    這裏有兩個缺陷:

    • P(x) 很難準確估計,因爲特徵之間並非相互獨立,而是存在錯綜複雜的依賴關係。
    • P(x) 在分類中也沒有直接作用。

    爲了克服這兩個問題,判別式模型出現。

  2. 判別式模型

    判別式模型直接跳過了 P(x),直接對條件概率 P(y|x) 建模。不管 x 內部存在多複雜的關係,也不影響判別式模型對 y 的判斷,於是就能夠放心大膽的利用各種各樣豐富的、有關聯的特徵。 所以我們會看到感知機分詞的準確率高於隱馬爾可夫模型。

    P(yx)=exp(score(x,y))x,yexp(score(x,y))P(y|x)=\frac{exp(score(x,y))}{\sum_{x,y}exp(score(x,y))}

    其中,exp 爲指數函數。隨機變量關係錯綜複雜,爲了分析這些關係,使用概率圖模型。

  3. 有向概率圖模型

    概率圖模型( Probabilistic Graphical Model, PGM)是用來表示與推斷多維隨機變量聯合分佈 p(x,y) 的強大框架,被廣泛用於計算機視覺、知識表達、貝葉斯統計與自然語言處理。它利用節點 V 來表示隨機變量,用邊 E 連接有關聯的隨機變量,將多維隨機變量分佈表示爲圖 G=(V,E)。這樣就帶來了一個好處,那就是整個圖可以分解爲子圖再進行分析.子圖中的隨機變量更少,建模更加簡單。具體如何分解,據此派生出有向圖模型和無向圖模型。

    有向圖模型按事件的先後因果順序將節點連接爲有向圖。如果事件 A 導致事件 B,則用箭頭連接兩個事件 A–>B。

    有向圖模型都將概率有向圖分解爲一系列條件概率之積,有向圖模型經常用生成式模型來實現。定義 π(v) 表示節點 v 的所有前驅節點,則分佈爲:
    p(x,y)=v=Vp(vπ(v)) p(\boldsymbol{x}, \boldsymbol{y})=\prod_{v=V} p(v | \boldsymbol{\pi}(v))

  4. 無向概率圖模型

    相反,無向圖模型則不探究每個事件的因果關係,也就是說不涉及條件概率分解。無向圖模型的邊沒有方向,僅僅代表兩個事件有關聯。

    無向圖模型將概率分解爲所有最大團上的某種函數之積。

    在圖論中,最大團指的是滿足所有節點相互連接的最大子圖。因爲最大團需要考慮所有變量,爲此,無向圖模型定義了一些虛擬的因子節點,每個因子節點只連接部分節點,組成更小的最大團。

    藍色虛線表示最大團,黑色方塊表因子節點,圓圈則表示變量節點,無向圖模型將多維隨機變量的聯合分佈分解爲一系列最大團中的因子之積:
    p(x,y)=1ZaΨa(xa,ya) p(x, y)=\frac{1}{Z} \prod_{a} \Psi_{a}\left(x_{a}, y_{a}\right)
    其中,a 是因子節點,Ψa 則是一個因子節點對應的函數,參數 Xa,Ya 是與因子節點相連的所有變量節點。爲了將式子約束爲概率分佈,定義常數 Z 爲如下歸一化因子:
    Z=x,yaΨa(xa,ya) Z=\sum_{x, y} \prod_{a} \Psi_{a}\left(x_{a}, y_{a}\right)
    在機器學習中,常用指數家族的因子函數:
    Ψa(xa,ya)=exp{kwakfak(xa,ya)} \Psi_{a}\left(x_{a}, y_{a}\right)=\exp \left\{\sum_{k} w_{a k} f_{a k}\left(x_{a}, y_{a}\right)\right\}
    其中,k 爲特徵的編號,Fak 是特徵函數,Wak 爲相應的特徵權重。

    判別式模型經常用無向圖來表示,只需要在歸一化時,對每種 x 都求一個歸一化因子:
    Z(x)=yaΨa(xa,ya) Z(\boldsymbol{x})=\sum_{y} \prod_{a} \Psi_{a}\left(\boldsymbol{x}_{a}, \boldsymbol{y}_{a}\right)
    然後 P(x,y) 就轉化爲判別式模型所需的條件概率分佈:
    p(yx)=1Z(x)aΨa(xa,ya) p(\boldsymbol{y} | \boldsymbol{x})=\frac{1}{Z(\boldsymbol{x})} \prod_{a} \boldsymbol{\Psi}_{a}\left(\boldsymbol{x}_{a}, \boldsymbol{y}_{a}\right)
    到這裏,最後一個公式就是條件隨機場的一般形式。

6.2 條件隨機場

條件隨機場( Conditional Random Field, CRF)是一種給定輸入隨機變量 x,求解條件概率 p(y| x) 的概率無向圖模型。用於序列標註時,特例化爲線性鏈( linear chain )條件隨機場。此時,輸人輸出隨機變量爲等長的兩個序列。

  1. 線性鏈條件隨機場

    線性鏈條件隨機場如下圖所示:

    每個 Xt 上方有 3 個灰色節點,代表 Xt 的 3 個特徵,當然還可以是任意數量的特徵,體現了特徵的豐富性,黑色方塊是因子節點,可以理解爲一個特徵函數 fk(yt1,yt,xt)f_k(y_{t-1},y_t,x_t)。其中僅僅利用了 Xt 和 Yt 的特徵稱作狀態特徵,利用了 Yt-1 的特徵則稱作轉移特徵,與感知機的特徵函數相同。

    線性鏈條件隨機場的定義如下:
    p(yx)=1Z(x)t=1Texp{k=1Kwkfk(yt1,yt,xt)} p(\boldsymbol{y} | \boldsymbol{x})=\frac{1}{Z(\boldsymbol{x})} \prod_{t=1}^{T} \exp \left\{\sum_{k=1}^{K} \boldsymbol{w}_{k} f_{k}\left(y_{t-1}, y_{t}, \boldsymbol{x}_{t}\right)\right\}
    其中,Z(x)爲歸一化函數:
    Z(x)=yt=1Texp{k=1Kwkfk(yt1,yt,xt)} Z(\boldsymbol{x})=\sum_{y} \prod_{t=1}^{T} \exp \left\{\sum_{k=1}^{K} w_{k} f_{k}\left(y_{t-1}, y_{t}, \boldsymbol{x}_{t}\right)\right\}
    上式定義在所有可能的標註序列上。如果將所有特徵函數與權重分別寫作向量形式,則線性鏈條件隨機場的定義可簡化爲:
    p(yx)=1Z(x)t=1Texp{wϕ(yt1,yt,xt)}=1Z(x)exp{t=1Twϕ(yt1,yt,xt)} \begin{aligned} p(\boldsymbol{y} | \boldsymbol{x}) &=\frac{1}{Z(\boldsymbol{x})} \prod_{t=1}^{T} \exp \left\{\boldsymbol{w} \cdot \phi\left(y_{t-1}, y_{t}, \boldsymbol{x}_{t}\right)\right\} \\ &=\frac{1}{Z(\boldsymbol{x})} \exp \left\{\sum_{t=1}^{T} \boldsymbol{w} \cdot \phi\left(y_{t-1}, y_{t}, \boldsymbol{x}_{t}\right)\right\} \end{aligned}
    對比結構化感知機的打分函數:
    score(x,y)=t=1Twϕ(yt1,yt,xt) \operatorname{score}(x, y)=\sum_{t=1}^{T} w \cdot \phi\left(y_{t-1}, y_{t}, x_{t}\right)
    可以發現結構化感知機打分函數與條件隨機場的指數部分完全相同,由於給定實例 x,Z(x) 就是一個常數 c,所以有:
    p(yx)=1cexp{score(x,y)} p(y | x)=\frac{1}{c} \exp \{\operatorname{score}(x, y)\}
    於是,條件隨機場就和結構化感知機有以下聯繫:

    • 條件隨機場和結構化感知機的特徵函數完全一致。
    • 結構化感知機預測打分越高,條件隨機場給予該預測的概率也越大。

    這種相似性使得我們能夠複用結構化感知機的預測算法,也就是維特比算法。

    條件隨機場的訓練過程詳見《自然語言處理入門》第6章。

  2. 對比結構化感知機

    結構化感知機和條件隨機場的相同點:

    • 特徵函數相同
    • 權重向量相同
    • 打分函數相同
    • 預測算法相同
    • 同屬結構化學習

    不同點

    • 感知機更新參數時,只使用一個訓練實例,沒有考慮整個數據集,難免顧此失彼;而條件隨機場對數似然函數及其梯度則使用了整個數據集。

    • 條件隨機場更新參數更加合理,條件隨機場更新參數如下:
      ww+ϕ(x(i),y(i))Ew[ϕ(x(i),y)] w \leftarrow w+\phi\left(x^{(i)}, y^{(i)}\right)-E_{w}\left[\phi\left(x^{(i)}, y\right)\right]
      對比感知機的更新參數表達式:
      ww+ϕ(x(i),y(i))ϕ(x(i),y^) w \leftarrow w+\phi\left(x^{(i)}, y^{(i)}\right)-\phi\left(x^{(i)}, \hat{y}\right)
      兩者的差距一目瞭然,感知機獎勵正確答案對應的特徵函數 ϕ,但僅懲罰錯誤最厲害的那個 y,而條件隨機場同時懲罰所有答案 y,分攤懲罰總量。

6.3 條件隨機場工具包

談到條件隨機場工具包,最著名的就是 CRF++,有各大平臺的安裝方法,HanLP已經集成了。

  1. CRF++ 語料格式

    CRF++ 接受純文本語料,約定爲一種空格或製表符分隔的表格格式。每個序列作爲一個表格,每行爲序列的一個時刻 Xt,Yt,除了最後一列爲輸出變量 y 之外,其它列都是輸入變量 x,如下所示:

    商 s 中 B
    品 p 中 E
    和 h 中 S
    服 f 中 B
    務 w 中 E
    
    A a 英 B
    K k 英 M
    B b 英 M
    4 s 數 M
    8 b 數 E
    

6.4 HanLP中的CRF++ API

詳細代碼請見: evaluate_crf_cws.py

https://github.com/NLP-LOVE/Introduction-NLP/tree/master/code/ch06/evaluate_crf_cws.py

訓練耗時很長。

標準化評測

算法 P R F1 R(oov) R(IV)
最長匹配 89.41 94.64 91.95 2.58 97.14
二元語法 92.38 96.70 94.49 2.58 99.26
一階HHM 78.49 80.38 79.42 41.11 81.44
二階HHM 78.34 80.01 79.16 42.06 81.04
平均感知機 96.69 96.45 96.57 70.34 97.16
結構化感知機 96.67 96.64 96.65 70.52 97.35
條件隨機場 96.86 96.64 96.75 71.54 97.33

條件隨機場的各項指標全面勝過了結構化感知機,綜合 F1 更達到 96.8%, 是傳統方法中最準確的分詞模型。

6.5 GitHub

HanLP何晗–《自然語言處理入門》筆記:

https://github.com/NLP-LOVE/Introduction-NLP

項目持續更新中…

目錄


章節
第 1 章:新手上路
第 2 章:詞典分詞
第 3 章:二元語法與中文分詞
第 4 章:隱馬爾可夫模型與序列標註
第 5 章:感知機分類與序列標註
第 6 章:條件隨機場與序列標註
第 7 章:詞性標註
第 8 章:命名實體識別
第 9 章:信息抽取
第 10 章:文本聚類
第 11 章:文本分類
第 12 章:依存句法分析
第 13 章:深度學習與自然語言處理
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章