條件隨機場CRF(三) 模型學習與維特比演算法解碼
在CRF系列的前兩篇,我們總結了CRF的模型基礎與第一個問題的求解方法,本文我們關注於linear-CRF的第二個問題與第三個問題的求解。第二個問題是模型引數學習的問題,第三個問題是維特比演算法解碼的問題。
1. linear-CRF模型引數學習思路
在linear-CRF模型引數學習問題中,我們給定訓練資料集$X$和對應的標記序列$Y$,$K$個特徵函式$f_k(x,y)$,需要學習linear-CRF的模型引數$w_k$和條件概率$P_w(y|x)$,其中條件概率$P_w(y|x)$和模型引數$w_k$滿足一下關係:$$P_w(y|x) = P(y|x) = \frac{1}{Z_w(x)}exp\sum\limits_{k=1}^Kw_kf_k(x,y) = \frac{exp\sum\limits_{k=1}^Kw_kf_k(x,y)}{\sum\limits_{y}exp\sum\limits_{k=1}^Kw_kf_k(x,y)}$$
所以我們的目標就是求出所有的模型引數$w_k$,這樣條件概率$P_w(y|x)$可以從上式計算出來。
求解這個問題有很多思路,比如梯度下降法,牛頓法,擬牛頓法。同時,這個模型中$P_w(y|x)$的表示式和最大熵模型原理小結中的模型一樣,也可以使用最大熵模型中使用的改進的迭代尺度法(improved iterative scaling, IIS)來求解。
下面我們只簡要介紹用梯度下降法的求解思路。
2. linear-CRF模型引數學習之梯度下降法求解
在使用梯度下降法求解模型引數之前,我們需要定義我們的優化函式,一般極大化條件分佈$P_w(y|x)$的對數似然函式如下:$$L(w)= log\prod_{x,y}P_w(y|x)^{\overline{P}(x,y)} = \sum\limits_{x,y}\overline{P}(x,y)logP_w(y|x)$$
其中$\overline{P}(x,y)$為經驗分佈,可以從先驗知識和訓練集樣本中得到,這點和最大熵模型類似。為了使用梯度下降法,我們現在極小化$f(w) = -L(P_w)$如下:$$\begin{align}f(w) & = -\sum\limits_{x,y}\overline{P}(x,y)logP_w(y|x) \\ &= \sum\limits_{x,y}\overline{P}(x,y)logZ_w(x) - \sum\limits_{x,y}\overline{P}(x,y)\sum\limits_{k=1}^Kw_kf_k(x,y) \\& = \sum\limits_{x}\overline{P}(x)logZ_w(x) - \sum\limits_{x,y}\overline{P}(x,y)\sum\limits_{k=1}^Kw_kf_k(x,y) \\& = \sum\limits_{x}\overline{P}(x)log\sum\limits_{y}exp\sum\limits_{k=1}^Kw_kf_k(x,y) - \sum\limits_{x,y}\overline{P}(x,y)\sum\limits_{k=1}^Kw_kf_k(x,y) \end{align}$$
對$w$求導可以得到:$$\frac{\partial f(w)}{\partial w} = \sum\limits_{x,y}\overline{P}(x)P_w(y|x)f(x,y) - \sum\limits_{x,y}\overline{P}(x,y)f(x,y)$$
有了$w$的導數表達書,就可以用梯度下降法來迭代求解最優的$w$了。注意在迭代過程中,每次更新$w$後,需要同步更新$P_w(x,y)$,以用於下一次迭代的梯度計算。
梯度下降法的過程這裡就不累述了,如果不熟悉梯度下降演算法過程建議閱讀之前寫的梯度下降(Gradient Descent)小結。以上就是linear-CRF模型引數學習之梯度下降法求解思路總結。
3. linear-CRF模型維特比演算法解碼思路
現在我們來看linear-CRF的第三個問題:解碼。在這個問題中,給定條件隨機場的條件概率$P(y|x)$和一個觀測序列$x$,要求出滿足$P(y|x)$最大的序列$y$。
這個解碼演算法最常用的還是和HMM解碼類似的維特比演算法。到目前為止,我已經在三個地方講到了維特比演算法,第一個是文字挖掘的分詞原理中用於中文分詞,第二個是隱馬爾科夫模型HMM(四)維特比演算法解碼隱藏狀態序列中用於HMM解碼。第三個就是這一篇了。
維特比演算法本身是一個動態規劃演算法,利用了兩個區域性狀態和對應的遞推公式,從區域性遞推到整體,進而得解。對於具體不同的問題,僅僅是這兩個區域性狀態的定義和對應的遞推公式不同而已。由於在之前已詳述維特比演算法,這裡就是做一個簡略的流程描述。
對於我們linear-CRF中的維特比演算法,我們的第一個區域性狀態定義為$\delta_i(l)$,表示在位置$i$標記$l$各個可能取值(1,2...m)對應的非規範化概率的最大值。之所以用非規範化概率是,規範化因子$Z(x)$不影響最大值的比較。根據$\delta_i(l)$的定義,我們遞推在位置$i+1$標記$l$的表示式為:$$\delta_{i+1}(l) = \max_{1 \leq j \leq m}\{\delta_i(j) + \sum\limits_{k=1}^Kw_kf_k(y_{i} =j,y_{i+1} = l,x,i)\}\;, l=1,2,...m$$
和HMM的維特比演算法類似,我們需要用另一個區域性狀態$\Psi_{i+1}(l)$來記錄使$\delta_{i+1}(l)$達到最大的位置$i$的標記取值,這個值用來最終回溯最優解,$\Psi_{i+1}(l)$的遞推表示式為:$$\Psi_{i+1}(l) = arg\;\max_{1 \leq j \leq m}\{\delta_i(j) + \sum\limits_{k=1}^Kw_kf_k(y_{i} =j,y_{i+1} = l,x,i)\}\; ,l=1,2,...m$$
4. linear-CRF模型維特比演算法流程
現在我們總結下 linear-CRF模型維特比演算法流程:
輸入:模型的$K$個特徵函式,和對應的K個權重。觀測序列$x=(x_1,x_2,...x_n)$,可能的標記個數$m$
輸出:最優標記序列$y^* =(y_1^*,y_2^*,...y_n^*)$
1) 初始化:$$\delta_{1}(l) = \sum\limits_{k=1}^Kw_kf_k(y_{0} =start,y_{1} = l,x,i)\}\;, l=1,2,...m $$$$\Psi_{1}(l) = start\;, l=1,2,...m $$
2) 對於$i=1,2...n-1$,進行遞推:$$\delta_{i+1}(l) = \max_{1 \leq j \leq m}\{\delta_i(j) + \sum\limits_{k=1}^Kw_kf_k(y_{i} =j,y_{i+1} = l,x,i)\}\;, l=1,2,...m$$$$\Psi_{i+1}(l) = arg\;\max_{1 \leq j \leq m}\{\delta_i(j) + \sum\limits_{k=1}^Kw_kf_k(y_{i} =j,y_{i+1} = l,x,i)\}\; ,l=1,2,...m$$
3) 終止:$$y_n^* = arg\;\max_{1 \leq j \leq m}\delta_n(j)$$
4)回溯:$$y_i^* = \Psi_{i+1}(y_{i+1}^*)\;, i=n-1,n-2,...1$$
最終得到最優標記序列$y^* =(y_1^*,y_2^*,...y_n^*)$
5. linear-CRF模型維特比演算法例項
下面用一個具體的例子來描述 linear-CRF模型維特比演算法,例子的模型和CRF系列第一篇中一樣,都來源於《統計學習方法》。
假設輸入的都是三個詞的句子,即$X=(X_1,X_2,X_3)$,輸出的詞性標記為$Y=(Y_1,Y_2,Y_3)$,其中$Y \in \{1(名詞),2(動詞)\}$
這裡只標記出取值為1的特徵函式如下:$$t_1 =t_1(y_{i-1} = 1, y_i =2,x,i), i =2,3,\;\;\lambda_1=1 $$
$$t_2 =t_2(y_1=1,y_2=1,x,2)\;\;\lambda_2=0.6$$
$$t_3 =t_3(y_2=2,y_3=1,x,3)\;\;\lambda_3=1$$
$$t_4 =t_4(y_1=2,y_2=1,x,2)\;\;\lambda_4=1$$
$$t_5 =t_5(y_2=2,y_3=2,x,3)\;\;\lambda_5=0.2$$
$$s_1 =s_1(y_1=1,x,1)\;\;\mu_1 =1$$
$$s_2 =s_2( y_i =2,x,i), i =1,2,\;\;\mu_2=0.5$$
$$s_3 =s_3( y_i =1,x,i), i =2,3,\;\;\mu_3=0.8$$
$$s_4 =s_4(y_3=2,x,3)\;\;\mu_4 =0.5$$
求標記(1,2,2)的最可能的標記序列。
首先初始化:$$\delta_1(1) = \mu_1s_1 = 1\;\;\;\delta_1(2) = \mu_2s_2 = 0.5\;\;\;\Psi_{1}(1) =\Psi_{1}(2) = start $$
接下來開始遞推,先看位置2的:
$$\delta_2(1) = max\{\delta_1(1) + t_2\lambda_2+\mu_3s_3, \delta_1(2) + t_4\lambda_4+\mu_3s_3 \} = max\{1+0.6+0.8,0.5+1+0.8\} =2.4\;\;\;\Psi_{2}(1) =1$$
$$\delta_2(2) = max\{\delta_1(1) + t_1\lambda_1+\mu_2s_2, \delta_1(2) + \mu_2s_2\} = max\{1+1+0.5,0.5+0.5\} =2.5\;\;\;\Psi_{2}(2) =1$$
再看位置3的:
$$\delta_3(1) = max\{\delta_2(1) +\mu_3s_3, \delta_2(2) + t_3\lambda_3+\mu_3s_3\} = max\{2.4+0.8,2.5+1+0.8\} =4.3$$$$\Psi_{3}(1) =2$$
$$\delta_3(2) = max\{\delta_2(1) +t_1\lambda_1 + \mu_4s_4, \delta_2(2) + t_5\lambda_5+\mu_4s_4\} = max\{2.4+1+0.5,2.5+0.2+0.5\} =3.9$$$$\Psi_{3}(2) =1$$
最終得到$y_3^* =\arg\;max\{\delta_3(1), \delta_3(2)\}$,遞推回去,得到:$$y_2^* = \Psi_3(1) =2\;\;y_1^* = \Psi_2(2) =1 $$
即最終的結果為$(1,2,1)$,即標記為(名詞,動詞,名詞)。
6.linear-CRF vs HMM
linear-CRF模型和HMM模型有很多相似之處,尤其是其三個典型問題非常類似,除了模型引數學習的問題求解方法不同以外,概率估計問題和解碼問題使用的演算法思想基本也是相同的。同時,兩者都可以用於序列模型,因此都廣泛用於自然語言處理的各個方面。
現在來看看兩者的不同點。最大的不同點是linear-CRF模型是判別模型,而HMM是生成模型,即linear-CRF模型要優化求解的是條件概率$P(y|x)$,則HMM要求解的是聯合分佈$P(x,y)$。第二,linear-CRF是利用最大熵模型的思路去建立條件概率模型,對於觀測序列並沒有做馬爾科夫假設。而HMM是在對觀測序列做了馬爾科夫假設的前提下建立聯合分佈的模型。
最後想說的是,只有linear-CRF模型和HMM模型才是可以比較討論的。但是linear-CRF是CRF的一個特例,CRF本身是一個可以適用於很複雜條件概率的模型,因此理論上CRF的使用範圍要比HMM廣泛的多。
以上就是CRF系列的所有內容。
(歡迎轉載,轉載請註明出處。歡迎溝通交流: liujianping-ok@163.com)