Viterbi(维特比)算法在CRF(条件随机场)中是如何起作用的?
之前我們介紹過BERT+CRF來進(jìn)行命名實(shí)體識(shí)別,并對(duì)其中的BERT和CRF的概念和作用做了相關(guān)的介紹,然對(duì)于CRF中的最優(yōu)的標(biāo)簽序列的計(jì)算原理,我們只提到了維特比算法,并沒有做進(jìn)一步的解釋,本文將對(duì)維特比算法做一個(gè)通俗的講解,以便大家更好的理解CRF為什么能夠得到最優(yōu)的標(biāo)簽序列。
通過閱讀本文你將能回答如下問題:
什么是維特比算法?
為什么說維特比算法是一種動(dòng)態(tài)規(guī)劃算法?
維特比算法具體怎么實(shí)現(xiàn)?
首先,讓我們簡單回顧一下BERT和CRF在命名實(shí)體識(shí)別中各自的作用:
命名實(shí)體識(shí)別中,BERT負(fù)責(zé)學(xué)習(xí)輸入句子中每個(gè)字和符號(hào)到對(duì)應(yīng)的實(shí)體標(biāo)簽的規(guī)律,而CRF負(fù)責(zé)學(xué)習(xí)相鄰實(shí)體標(biāo)簽之間的轉(zhuǎn)移規(guī)則。詳情可以參考這篇文章CRF在命名實(shí)體識(shí)別中是如何起作用的?。該文章中我們對(duì)CRF做了簡單易懂的介紹,其中提到CRF的損失函數(shù)計(jì)算要用到最優(yōu)路徑,因?yàn)镃RF的損失函數(shù)是求最優(yōu)路徑的概率占所有路徑概率和的比例,而我們的目標(biāo)是最大化這個(gè)比例。那么這里就涉及到計(jì)算最優(yōu)路徑的問題。這里的路徑在命名實(shí)體識(shí)別的例子中,就是最終輸出的與句子中的字或符號(hào)一 一對(duì)應(yīng)的標(biāo)簽序列。不同標(biāo)簽序列的順序組成了不同的路徑。而CRF就是要找出最正確的那條標(biāo)簽序列路徑,也就是說這條標(biāo)簽路徑的概率將是所有路徑中最大的,那么我們可以窮舉出所有可能的標(biāo)簽路徑,計(jì)算出每條路徑的概率和,然后比較出最大的那條,但是這樣做的代價(jià)太大了,所以crf選擇了一種稱為維特比的算法來求解此類問題。
維特比算法(英語:Viterbi algorithm)是一種動(dòng)態(tài)規(guī)劃算法。它用于尋找最有可能產(chǎn)生觀測事件序列的維特比路徑。
看看下面這個(gè)命名實(shí)體識(shí)別的例子:
上圖共有5層(觀測序列的長度),每層3個(gè)節(jié)點(diǎn)(狀態(tài)的個(gè)數(shù)),我們的目標(biāo)就是找到從第一層到第五層的最優(yōu)路徑。
首先,我們分別計(jì)算紅、黃、藍(lán)三個(gè)節(jié)點(diǎn)的輸入連線的概率,以紅色節(jié)點(diǎn)舉例,我們先假設(shè)紅色節(jié)點(diǎn)在最優(yōu)路徑上,那么輸入到該節(jié)點(diǎn)的三條連線中,概率最大的那條一定在最優(yōu)路徑上,同理,我們?cè)俜謩e假設(shè)黃色和藍(lán)色節(jié)點(diǎn)在最優(yōu)路徑上,我們也能各找到一條概率最大的連線,這樣就得到了下面的圖:
然后,我們接著剛才的思路繼續(xù)找后面一層的三條最優(yōu)的連線:
假設(shè)找到的最優(yōu)連線如下:
然后,接著在后面的層應(yīng)用這個(gè)方法:
此時(shí),看上面最后一張圖,我們有了3條候選最優(yōu)路徑,分別是棕色、綠色和紫色,用標(biāo)簽來表達(dá)如下:
那么哪條才是最優(yōu)路徑呢?
就是看哪條路徑的概率和最大,那條路徑就是最優(yōu)路徑。
但是在實(shí)際實(shí)現(xiàn)的時(shí)候,一般會(huì)在計(jì)算各層的最優(yōu)候選連線的時(shí)候,就記錄下前繼連線的概率和,并記錄下對(duì)應(yīng)的狀態(tài)節(jié)點(diǎn)索引(這里將已經(jīng)計(jì)算出的結(jié)果記錄下來供后續(xù)使用的方式,就是維特比算法被稱為動(dòng)態(tài)規(guī)劃算法的原因),這樣到最后一層的時(shí)候,最后一層各候選連線中概率最大的,就是在最優(yōu)路徑上的那條連線了,然后從這條連線回溯,找出完整的路徑就是最優(yōu)路徑了。
一直在說概率最大的路徑,那么這個(gè)概率具體指什么呢?
還記得上一篇文章介紹條件隨機(jī)場(CRF)的時(shí)候提到,條件隨機(jī)場其實(shí)是給定了觀測序列的馬爾可夫隨機(jī)場,在一階馬爾可夫模型中,定義了以下三個(gè)概念:
狀態(tài)集合Q,對(duì)應(yīng)到上面的例子就是:
{B-P, I-P, O}
初始狀態(tài)概率向量Π,對(duì)應(yīng)到上面的例子就是:
{B-P:0.3, I-P:0.2, O:0.5}
這里的概率數(shù)值是隨便假設(shè)的,僅為了方便舉例說明。
狀態(tài)轉(zhuǎn)移概率矩陣A:
CRF中給定了觀測序列做為先驗(yàn)條件,對(duì)應(yīng)到上面的例子就是:
其中的概率數(shù)值同樣是隨便假設(shè)的,為了方便舉例。
下圖中紅色節(jié)點(diǎn)的概率(可以看成是一個(gè)虛擬的開始節(jié)點(diǎn)到該節(jié)點(diǎn)的連線的概率)的計(jì)算方式如下:
初始狀態(tài)為B-P的概率Π(B-P) * 該節(jié)點(diǎn)的觀測概率P(小|B-P)
下圖中紅色節(jié)點(diǎn)的三條連線概率的計(jì)算方式如下:
上一層對(duì)應(yīng)節(jié)點(diǎn)的概率 * 上層對(duì)應(yīng)節(jié)點(diǎn)到該節(jié)點(diǎn)的轉(zhuǎn)移概率 * 該節(jié)點(diǎn)的觀測概率P(明|B-P)
其它層之間的節(jié)點(diǎn)連線的概率同理計(jì)算可得,然后通過上面介紹的維特比算法過程就可以計(jì)算出最優(yōu)路徑了。
ok,本篇就這么多內(nèi)容啦~,感謝閱讀O(∩_∩)O。
總結(jié)
以上是生活随笔為你收集整理的Viterbi(维特比)算法在CRF(条件随机场)中是如何起作用的?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: React native 禁止手势触摸
- 下一篇: 返回Json和XML两种格式