筆記轉載於GitHub項目:https://github.com/NLP-LOVE/Introduction-NLPgit
本章介紹一種新的序列標註模型條件隨機場。這種模型與感知機同屬結構化學習你們族,但性能比感知機還要強大。爲了釐清該模型的前因後果,咱們先對機器學習模型作番柿理。而後結合代碼介紹條件隨機場理論,探究它與結構化感知機的異同。github
機器學習的模型譜系圖以下圖所示:算法
根據建模的到底是聯合機率分佈 P(x,y) 仍是條件機率分佈 P(y|x)。派生出生成式模型與判別式模型。api
生成式模型框架
生成式模型:模擬數據的生成過程,兩類隨機變量存在因果前後關係,先有因素 y,後有結果 x,這種因果關係由聯合分佈模擬:dom
\[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(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) \]
到這裏,最後一個公式就是條件隨機場的通常形式。
條件隨機場( 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,分攤懲罰總量。
談到條件隨機場工具包,最著名的就是 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
詳細代碼請見: 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%, 是傳統方法中最準確的分詞模型。
HanLP何晗--《天然語言處理入門》筆記:
https://github.com/NLP-LOVE/Introduction-NLP
項目持續更新中......
目錄
章節 |
---|
第 1 章:新手上路 |
第 2 章:詞典分詞 |
第 3 章:二元語法與中文分詞 |
第 4 章:隱馬爾可夫模型與序列標註 |
第 5 章:感知機分類與序列標註 |
第 6 章:條件隨機場與序列標註 |
第 7 章:詞性標註 |
第 8 章:命名實體識別 |
第 9 章:信息抽取 |
第 10 章:文本聚類 |
第 11 章:文本分類 |
第 12 章:依存句法分析 |
第 13 章:深度學習與天然語言處理 |