以前咱們介紹過BERT+CRF來進行命名實體識別,並對其中的BERT和CRF的概念和做用作了相關的介紹,然對於CRF中的最優的標籤序列的計算原理,咱們只提到了維特比算法,並無作進一步的解釋,本文將對維特比算法作一個通俗的講解,以便你們更好的理解CRF爲何可以獲得最優的標籤序列。git
經過閱讀本文你將能回答以下問題:github
首先,讓咱們簡單回顧一下BERT和CRF在命名實體識別中各自的做用:
命名實體識別中,BERT負責學習輸入句子中每一個字和符號到對應的實體標籤的規律,而CRF負責學習相鄰實體標籤之間的轉移規則。詳情能夠參考這篇文章CRF在命名實體識別中是如何起做用的?。該文章中咱們對CRF作了簡單易懂的介紹,其中提到CRF的損失函數計算要用到最優路徑,由於CRF的損失函數是求最優路徑的機率佔全部路徑機率和的比例,而咱們的目標是最大化這個比例。那麼這裏就涉及到計算最優路徑的問題。這裏的路徑在命名實體識別的例子中,就是最終輸出的與句子中的字或符號一 一對應的標籤序列。不一樣標籤序列的順序組成了不一樣的路徑。而CRF就是要找出最正確的那條標籤序列路徑,也就是說這條標籤路徑的機率將是全部路徑中最大的,那麼咱們能夠窮舉出全部可能的標籤路徑,計算出每條路徑的機率和,而後比較出最大的那條,可是這樣作的代價太大了,因此crf選擇了一種稱爲維特比的算法來求解此類問題。算法
維特比算法(英語:Viterbi algorithm)是一種動態規劃算法。它用於尋找最有可能產生觀測事件序列的維特比路徑。函數
看看下面這個命名實體識別的例子:
學習
上圖共有5層(觀測序列的長度),每層3個節點(狀態的個數),咱們的目標就是找到從第一層到第五層的最優路徑。
首先,咱們分別計算紅、黃、藍三個節點的輸入連線的機率,以紅色節點舉例,咱們先假設紅色節點在最優路徑上,那麼輸入到該節點的三條連線中,機率最大的那條必定在最優路徑上,同理,咱們再分別假設黃色和藍色節點在最優路徑上,咱們也能各找到一條几率最大的連線,這樣就獲得了下面的圖:
而後,咱們接着剛纔的思路繼續找後面一層的三條最優的連線:
假設找到的最優連線以下:
而後,接着在後面的層應用這個方法:
此時,看上面最後一張圖,咱們有了3條候選最優路徑,分別是棕色、綠色和紫色,用標籤來表達以下:
那麼哪條纔是最優路徑呢?
就是看哪條路徑的機率和最大,那條路徑就是最優路徑。
可是在實際實現的時候,通常會在計算各層的最優候選連線的時候,就記錄下前繼連線的機率和,並記錄下對應的狀態節點索引(這裏將已經計算出的結果記錄下來供後續使用的方式,就是維特比算法被稱爲動態規劃算法的緣由),這樣到最後一層的時候,最後一層各候選連線中機率最大的,就是在最優路徑上的那條連線了,而後從這條連線回溯,找出完整的路徑就是最優路徑了。3d
一直在說機率最大的路徑,那麼這個機率具體指什麼呢?
還記得上一篇文章介紹條件隨機場(CRF)的時候提到,條件隨機場實際上是給定了觀測序列的馬爾可夫隨機場,在一階馬爾可夫模型中,定義瞭如下三個概念:blog
CRF中給定了觀測序列作爲先驗條件,對應到上面的例子就是:
其中的機率數值一樣是隨便假設的,爲了方便舉例。索引
下圖中紅色節點的機率(能夠當作是一個虛擬的開始節點到該節點的連線的機率)的計算方式以下:
初始狀態爲B-P的機率Π(B-P) * 該節點的觀測機率P(小|B-P)
下圖中紅色節點的三條連線機率的計算方式以下:
上一層對應節點的機率 * 上層對應節點到該節點的轉移機率 * 該節點的觀測機率P(明|B-P)
其它層之間的節點連線的機率同理計算可得,而後經過上面介紹的維特比算法過程就能夠計算出最優路徑了。token
ok,本篇就這麼多內容啦~,感謝閱讀O(∩_∩)O。
事件