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

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(x|y)\]

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

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

    這裡有兩個缺陷:

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

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

  2. 判別式模型

    判別式模型直接跳過了 P(x),直接對條件概率 P(y|x) 建模。不管 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(\boldsymbol{x}, \boldsymbol{y})=\prod_{v=V} p(v | \boldsymbol{\pi}(v)) \]

  4. 無向概率圖模型

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

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

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

    藍色虛線表示最大團,黑色方塊表因子節點,圓圈則表示變數節點,無向圖模型將多維隨機變數的聯合分佈分解為一系列最大團中的因子之積:
    \[ p(x, y)=\frac{1}{Z} \prod_{a} \Psi_{a}\left(x_{a}, y_{a}\right) \]
    其中,a 是因子節點,Ψa 則是一個因子節點對應的函式,引數 Xa,Ya 是與因子節點相連的所有變數節點。為了將式子約束為概率分佈,定義常數 Z 為如下歸一化因子:
    \[ Z=\sum_{x, y} \prod_{a} \Psi_{a}\left(x_{a}, y_{a}\right) \]
    在機器學習中,常用指數家族的因子函式:
    \[ \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(\boldsymbol{x})=\sum_{y} \prod_{a} \Psi_{a}\left(\boldsymbol{x}_{a}, \boldsymbol{y}_{a}\right) \]
    然後 P(x,y) 就轉化為判別式模型所需的條件概率分佈:
    \[ 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 個特徵,當然還可以是任意數量的特徵,體現了特徵的豐富性,黑色方塊是因子節點,可以理解為一個特徵函式 \(f_k(y_{t-1},y_t,x_t)\)。其中僅僅利用了 Xt 和 Yt 的特徵稱作狀態特徵,利用了 Yt-1 的特徵則稱作轉移特徵,與感知機的特徵函式相同。

    線性鏈條件隨機場的定義如下:
    \[ 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(\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\} \]
    上式定義在所有可能的標註序列上。如果將所有特徵函式與權重分別寫作向量形式,則線性鏈條件隨機場的定義可簡化為:
    \[ \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} \]
    對比結構化感知機的打分函式:
    \[ \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(y | x)=\frac{1}{c} \exp \{\operatorname{score}(x, y)\} \]
    於是,條件隨機場就和結構化感知機有以下聯絡:

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

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

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

  2. 對比結構化感知機

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

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

    不同點

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

    • 條件隨機場更新引數更加合理,條件隨機場更新引數如下:
      \[ w \leftarrow w+\phi\left(x^{(i)}, y^{(i)}\right)-E_{w}\left[\phi\left(x^{(i)}, y\right)\right] \]
      對比感知機的更新引數表示式:
      \[ 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 章:深度學習與自然語言處理