隱馬爾可夫模型進行序列標註

三元隱馬爾可夫模型

三元隱馬爾可夫模型依賴二階馬爾科夫假設,包含所有詞的有限集VV,以及所有標籤有限集K\Kappa,以及如下兩個參數:q(su,v)q(s|u,v),其中sK{STOP},u,vK{}s\in \Kappa \cup \{STOP\}, u,v \in \Kappa \cup \{*\}STOPSTOP表示結束標籤,*表示開始標籤,其值表示標籤ss跟在標籤(u,v)(u,v)後的概率。e(xs)e(x|s),其中xV,sKx\in V, s\in \Kappa,其值表示標籤ss對應詞xx的概率。定義SS表示詞序列和對應的標籤序列的集合<x1,x2,..,xn,y1,...,yn><x_1,x_2,..,x_n,y_1,...,y_n>,其中n0n\ge 0,對於任意i=1...n,xiV,yiKi=1...n, x_i\in V, y_i \in \Kappa,並且y1,y0{},yn+1=STOPy_{-1}, y_0 \in \{*\},y_{n+1}=STOP,則任意<x1,..,xn,y1,..,yn>S<x_1,..,x_n,y_1,..,y_n>\in S的概率可以按如下求得:
由概率鏈式法則:(1)p(x1,..,xn,y1,..,yn)=p(y1,..,yn)×p(x1,..,xny1,..,yn)p(x_1,..,x_n,y_1,..,y_n)=p(y_1,..,y_n)\times p(x_1,..,x_n|y_1,..,y_n) \tag{1}由獨立假設:(2)p(y1,..,yn)=i=1n+1p(yiyi2,yi1)p(y_1,..,y_n)=\prod_{i=1}^{n+1}p(y_i|y_{i-2},y_{i-1}) \tag{2}由鏈式法則以及獨立性假設可得:(3)p(x1,..,xny1,..,yn)=i=1np(xix1,..,xi1,y1,..,yn+1)=i=1np(xiyi)p(x_1,..,x_n|y_1,..,y_n)=\prod_{i=1}^np(x_i|x_1,..,x_{i-1},y_1,..,y_{n+1})=\prod_{i=1}^np(x_i|y_i) \tag{3}
故:(4)p(x1,..xn,y1,..,yn)=i=1n+1q(yiyi2,yi1)i=1ne(xiyi)p(x_1,..x_n,y_1,..,y_n)=\prod_{i=1}^{n+1}q(y_i|y_{i-2},y_{i-1})\prod_{i=1}^ne(x_i|y_i) \tag{4}
對於訓練集中標籤序列(s,u,v)(s,u,v),我們是可以計算出來的:
q(su,v)=c(u,v,s)c(u,v)q(s|u,v)=\frac{c(u,v,s)}{c(u,v)}e(xs)=c(sx)c(s)e(x|s)=\frac{c(s\to x)}{c(s)}但是如果訓練集中xx從未出現,那麼e(xs)e(x|s)可能會出現概率爲0的情況,那麼聯合概率都爲0,可以使用pseudo-words來替換生僻詞,例如fourDigitNum可以用來替換所有的四位數字。

維特比算法

爲了尋找最可能的標籤序列,即計算:
(5)y=argmaxy1,..,yn+1 p(x1,..,xn,y1,..,yn+1)y^*=\underset{y_1,..,y_{n+1}}{\operatorname{argmax}}\ p(x_1,..,x_n,y_1,..,y_{n+1}) \tag{5}使用暴力搜索是困難的,因爲對於長度爲nn的句子,總共有Kn|\Kappa|^n個標籤序列。

假如我們只考慮一句話的前k個詞,定義:(6)r(y1,y0,...,yk)=i=1kq(yiyi2,yi1)i=1ke(xiyi)r(y_{-1},y_0,...,y_k)=\prod_{i=1}^kq(y_i|y_{i-2},y_{i-1})\prod_{i=1}^ke(x_i|y_i) \tag{6} (4)(4)式可以寫成:(7)p(x1,..,xn,y1,..,yn+1)=r(,,y1,..,yn)×q(yn+1yn1,yn)=r(,,y1,..,yn)×q(STOPyn1,yn)\begin{array}{l} \quad p(x_1,..,x_n,y_1,..,y_{n+1}) \\ = r(*,*,y_1,..,y_n)\times q(y_{n+1}|y_{n-1},y_n) \\ = r(*,*,y_1,..,y_n)\times q(STOP|y_{n-1},y_n)\\ \end{array} \tag{7}對於任意k{1,..,n}k\in \{-1,..,n\}定義Kk\Kappa_k表示序列中第k個位置可能的標籤集合,則:Kk=K,k{1..n}\Kappa_k=\Kappa, k \in \{1..n\}特別地,K1=K0={}\Kappa_{-1}=\Kappa_0=\{*\}
對於任意的k{1,..,n}k\in\{1,..,n\}以及任意uKk1,vKku\in\Kappa_{k-1},v\in\Kappa_k,定義S(k,u,v)S(k,u,v)爲序列y1,y0,y1,..,yky_{-1},y_0,y_1,..,y_k的集合,此外這個集合滿足yk1=u,yk=vy_{k-1}=u,y_k=v,即爲以u,vu,v結尾的長度爲kk的序列。定義:
(8)π(k,u,v)=max<y1,y0,..,yk>S(k,u,v)r(y1,y0,y1,...,yk)\pi(k,u,v)=\max_{<y_{-1},y_0,..,y_k>\in S(k,u,v)}r(y_{-1},y_0,y_1,...,y_k) \tag{8}π(k,u,v)\pi(k,u,v)爲任意長度爲k以(u,v)(u,v)結尾的序列的最大概率。特別地,π(0,,)=1\pi(0,*,*)=1

實際上,π(k,u,v)\pi(k,u,v)是可以遞歸定義的:(9)π(k,u,v)=maxwKk2(π(k1,w,u)×q(vw,u)×e(xkv))\pi(k,u,v)=\max_{w\in \Kappa_{k-2}}(\pi(k-1,w,u)\times q(v|w,u)\times e(x_k|v)) \tag{9},因此由(7)(7)可得:(10)maxy1,..,yn+1p(x1,..,xn,y1,..,yn+1)=maxuKn1,vKn(π(n,u,v)×q(STOPu,v))\max_{y_1,..,y_{n+1}}p(x_1,..,x_n,y_1,..,y_{n+1})=\max_{u \in \Kappa_{n-1},v\in \Kappa_n}(\pi(n,u,v)\times q(STOP|u,v)) \tag{10}式子(10)(10)即我們最大化的目標函數。但是,我們需要的是最大的標籤序列,即式子(5)(5),所以我們需要在算法遞推的時候每次保存“反向指針”bp(k,u,v)bp(k,u,v),其記錄了使得長度爲kk(u,v)(u,v)結尾的序列分數最高的先前的ww。在算法結束,我們需要從後向前尋找保存的序列,具體算法流程如下,時間複雜度爲O(nK3)O(n|\Kappa|^3)
Viterbi

來源

Hidden Markov models and tagging (sequence labeling) problems

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章