之前介紹的MMEM存在着label bias問題,因此Lafferty et al. [1] 提出了CRF (Conditional Random Field). BTW:比較有意思的是,這篇文章的二作與三作同時也是MEMM的作者。
1. 前言
本節將遵從tutorial [2] 的論文結構,從概率模型(Probabilistic Models)與圖表示(Graphical Representation)兩個方面引出CRF。
概率模型
Naïve Bayes(NB)是分類問題中的生成模型(generative model),以聯合概率\(P(x,y)=P(x|y)P(y)\)建模,運用貝葉斯定理求解后驗概率\(P(y|x)\)。NB假定輸入\(x\)的特征向量\((x^{(1)},x^{(2)},\cdots,x^{(j)},\cdots, x^{(n)})\)條件獨立(conditional independence),即
\begin{equation}
P(x|y) P(y) = P(y) \prod _{j} P(x^{(j)}|y)
\label{eq:nb}
\end{equation}
HMM是用於對序列數據\(X\)做標注\(Y\)的生成模型,用馬爾可夫鏈(Markov chain)對聯合概率\(P(X,Y)\)建模:
\begin{equation}
P(X,Y) = \prod_t P(y_t|y_{t-1}) P(x_t|y_t)
\label{eq:hmm}
\end{equation}
然后,通過Viterbi算法求解\(P(Y|X)\)的最大值。LR (Logistic Regression)模型是分類問題中的判別模型(discriminative model),直接用logistic函數建模條件概率\(P(y|x)\)。實際上,logistic函數是softmax的特殊形式(證明參看ufldl教程),並且LR等價於最大熵模型(這里給出了一個簡要的證明),完全可以寫成最大熵的形式:
\begin{equation}
P_w(y|x) = \frac{exp \left( \sum_i w_i f_i(x,y) \right)}{Z_w(x)}
\label{eq:me}
\end{equation}
其中,\(Z_w(x)\)為歸一化因子,\(w\)為模型的參數,\(f_i(x,y)\)為特征函數(feature function)——描述\((x,y)\)的某一事實。
CRF便是為了解決標注問題的判別模型,於是就有了下面這幅張圖(出自 [3]):
圖表示
概率模型可以用圖表示變量的相關(依賴)關系,所以概率模型常被稱為概率圖模型(probabilistic graphical model, PGM)。PGM對應的圖有兩種表示形式:independency graph, factor graph. independency graph直接描述了變量的條件獨立,而factor graph則是通過因子分解( factorization)的方式暗含變量的條件獨立。比如,NB與HMM所對應的兩種圖表示如下(圖出自[2]):
可以看出,NB與HMM所對應的independency graph為有向圖,圖\((V, E)\)所表示的聯合概率\(P(\overrightarrow{v})\)計算如下:
其中,\(v_k\)為圖\((V, E)\)中一個頂點,其parent節點為\(v_k^p\)。根據上述公式,則上圖中NB模型的聯合概率:
有別於NB模型,最大熵則是從全局的角度來建模的,“保留盡可能多的不確定性,在沒有更多的信息時,不擅自做假設”;特征函數則可看作是人為賦給模型的信息,表示特征\(x\)與\(y\)的某種相關性。有向圖無法表示這種相關性,則采用無向圖表示最大熵模型:
最大熵模型與馬爾可夫隨機場(Markov Random Field, MRF)所對應factor graph都滿足這樣的因子分解:
\begin{equation}
P(\overrightarrow{v}) = \frac{\prod_C \Psi_C(\overrightarrow{v_C})}{Z}
\label{eq:mrf}
\end{equation}
其中,\(C\)為圖的團(即連通子圖),\(\Psi_C\)為勢函數( potential function)。在最大熵模型中,勢函數便為\(exp(w_i f_i(x,y))\)的形式了。
2. CRF
前面提到過,CRF(更准確地說是Linear-chain CRF)是最大熵模型的sequence擴展、HMM的conditional求解。CRF假設標注序列\(Y\)在給定觀察序列\(X\)的條件下,\(Y\)構成的圖為一個MRF,即可表示成圖:
根據式子\eqref{eq:mrf},則可推導出條件概率:
同最大熵模型一樣,因子\(\Psi_j(\overrightarrow{x}, \overrightarrow{y})\)亦可以寫成特征函數的exp形式:
特征函數之所以定義成\(f_i(y_{j-1}, y_j, \overrightarrow{x})\)而非$ f_i(y_j, \overrightarrow{x})$,是因為Linear-chain CRF對隨機場做了Markov假設。那么,CRF建模的式子可改寫為
MMEM也是用最大熵模型建模\(P(Y|X)\), 不同於CRF的是其采用有向圖模型,只考慮\(x_j\)對\(y_j\)的影響,而沒有把\(x\)作為整體來考慮,導致的是本地歸一化:
而CRF做的則是全局的歸一化,避免了label bias的問題。
3. 開源實現
Genius是一個基於CRF的開源中文分詞工具,采用了Wapiti做訓練與序列標注。
import genius
text = "深夜的穆赫蘭道發生一樁車禍,女子麗塔在車禍中失憶了"
seg_list = genius.seg_text(text)
print('/'.join([w.text for w in seg_list]))
# 深夜/的/穆赫蘭道/發生/一/樁/車禍/,/女子/麗塔/在/車禍/中/失憶/了 [CRF]
# 深夜/的/穆赫/蘭/道/發生/一/樁/車禍/,/女子/麗塔/在/車禍/中/失憶/了 [2-HMM]
# 深夜/的/穆赫蘭道/發生/一樁/車禍/,/女子麗塔/在/車禍/中/失憶/了 [HMM]
可以看出,CRF在處理未登錄詞比HMM的效果是要好的。當然,你可以用CRF++自己擼一個中文分詞器。正好,52nlp的有一篇教程教你如何擼,用的是bakeoff2005 的訓練語料 msr_training.utf8
。
Footnote: CRF原論文 [1] 與李航老師的《統計學習方法》關於CRF的推導引出,顯得比較突兀。相反,tutorial [2] 將NB、HMM、maxent (LR)與CRF串聯在一起,從Probabilistic Models、Graphical Representation的角度論述,非常容易理解——CRF是如何在考慮\(Y\)的相關性時對條件概率\(P(Y|X)\)建模的;為一篇不得不讀的經典的CRF tutorial。
4. 參考資料
[1] Lafferty, John, Andrew McCallum, and Fernando Pereira. "Conditional random fields: Probabilistic models for segmenting and labeling sequence data." Proceedings of the eighteenth international conference on machine learning, ICML. Vol. 1. 2001.
[2] Klinger, Roman, and Katrin Tomanek. Classical probabilistic models and conditional random fields. TU, Algorithm Engineering, 2007.
[3] Sutton, Charles, and Andrew McCallum. "An Introduction to Conditional Random Fields." Machine Learning 4.4 (2011): 267-373.
[4] shinchen2, 統計模型之間的比較. (為轉載鏈接)
[5] KevinXU, 如何理解馬爾可夫隨機場里因子的表達?