筆記轉載於GitHub項目:https://github.com/NLP-LOVE/Introduction-NLP
6. 條件隨機場與序列標注
本章介紹一種新的序列標注模型條件隨機場。這種模型與感知機同屬結構化學習大家族,但性能比感知機還要強大。為了厘清該模型的來龍去脈,我們先對機器學習模型做番柿理。然后結合代碼介紹條件隨機場理論,探究它與結構化感知機的異同。
6.1 機器學習的模型譜系
機器學習的模型譜系圖如下圖所示:
根據建模的究竟是聯合概率分布 P(x,y) 還是條件概率分布 P(y|x)。派生出生成式模型與判別式模型。
-
生成式模型
生成式模型:模擬數據的生成過程,兩類隨機變量存在因果先后關系,先有因素 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) 在分類中也沒有直接作用。
為了克服這兩個問題,判別式模型出現。
-
判別式模型
判別式模型直接跳過了 P(x),直接對條件概率 P(y|x) 建模。不管 x 內部存在多復雜的關系,也不影響判別式模型對 y 的判斷,於是就能夠放心大膽的利用各種各樣豐富的、有關聯的特征。 所以我們會看到感知機分詞的准確率高於隱馬爾可夫模型。
\[P(y|x)=\frac{exp(score(x,y))}{\sum_{x,y}exp(score(x,y))} \]其中,exp 為指數函數。隨機變量關系錯綜復雜,為了分析這些關系,使用概率圖模型。
-
有向概率圖模型
概率圖模型( 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)) \] -
無向概率圖模型
相反,無向圖模型則不探究每個事件的因果關系,也就是說不涉及條件概率分解。無向圖模型的邊沒有方向,僅僅代表兩個事件有關聯。
無向圖模型將概率分解為所有最大團上的某種函數之積。
在圖論中,最大團指的是滿足所有節點相互連接的最大子圖。因為最大團需要考慮所有變量,為此,無向圖模型定義了一些虛擬的因子節點,每個因子節點只連接部分節點,組成更小的最大團。
藍色虛線表示最大團,黑色方塊表因子節點,圓圈則表示變量節點,無向圖模型將多維隨機變量的聯合分布分解為一系列最大團中的因子之積:
\[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 )條件隨機場。此時,輸人輸出隨機變量為等長的兩個序列。
-
線性鏈條件隨機場
線性鏈條件隨機場如下圖所示:
每個 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章。
-
對比結構化感知機
結構化感知機和條件隨機場的相同點:
- 特征函數相同
- 權重向量相同
- 打分函數相同
- 預測算法相同
- 同屬結構化學習
不同點
-
感知機更新參數時,只使用一個訓練實例,沒有考慮整個數據集,難免顧此失彼;而條件隨機場對數似然函數及其梯度則使用了整個數據集。
-
條件隨機場更新參數更加合理,條件隨機場更新參數如下:
\[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已經集成了。
-
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 章:深度學習與自然語言處理 |