1. 程式人生 > >Viterbi(維特比)演算法在CRF(條件隨機場)中是如何起作用的?

Viterbi(維特比)演算法在CRF(條件隨機場)中是如何起作用的?

之前我們介紹過BERT+CRF來進行命名實體識別,並對其中的BERT和CRF的概念和作用做了相關的介紹,然對於CRF中的最優的標籤序列的計算原理,我們只提到了維特比演算法,並沒有做進一步的解釋,本文將對維特比演算法做一個通俗的講解,以便大家更好的理解CRF為什麼能夠得到最優的標籤序列。

通過閱讀本文你將能回答如下問題:

  • 什麼是維特比演算法?
  • 為什麼說維特比演算法是一種動態規劃演算法?
  • 維特比演算法具體怎麼實現?

首先,讓我們簡單回顧一下BERT和CRF在命名實體識別中各自的作用:
命名實體識別中,BERT負責學習輸入句子中每個字和符號到對應的實體標籤的規律,而CRF負責學習相鄰實體標籤之間的轉移規則。詳情可以參考這篇文章CRF在命名實體識別中是如何起作用的?。該文章中我們對CRF做了簡單易懂的介紹,其中提到CRF的損失函式計算要用到最優路徑,因為CRF的損失函式是求最優路徑的概率佔所有路徑概率和的比例,而我們的目標是最大化這個比例。那麼這裡就涉及到計算最優路徑的問題。這裡的路徑在命名實體識別的例子中,就是最終輸出的與句子中的字或符號一 一對應的標籤序列。不同標籤序列的順序組成了不同的路徑。而CRF就是要找出最正確的那條標籤序列路徑,也就是說這條標籤路徑的概率將是所有路徑中最大的,那麼我們可以窮舉出所有可能的標籤路徑,計算出每條路徑的概率和,然後比較出最大的那條,但是這樣做的代價太大了,所以crf選擇了一種稱為維特比的演算法來求解此類問題。

維特比演算法(英語:Viterbi algorithm)是一種動態規劃演算法。它用於尋找最有可能產生觀測事件序列的維特比路徑。

看看下面這個命名實體識別的例子:

上圖共有5層(觀測序列的長度),每層3個節點(狀態的個數),我們的目標就是找到從第一層到第五層的最優路徑。
首先,我們分別計算紅、黃、藍三個節點的輸入連線的概率,以紅色節點舉例,我們先假設紅色節點在最優路徑上,那麼輸入到該節點的三條連線中,概率最大的那條一定在最優路徑上,同理,我們再分別假設黃色和藍色節點在最優路徑上,我們也能各找到一條概率最大的連線,這樣就得到了下面的圖:

然後,我們接著剛才的思路繼續找後面一層的三條最優的連線:


假設找到的最優連線如下:

然後,接著在後面的層應用這個方法:

此時,看上面最後一張圖,我們有了3條候選最優路徑,分別是棕色、綠色和紫色,用標籤來表達如下:

那麼哪條才是最優路徑呢?
就是看哪條路徑的概率和最大,那條路徑就是最優路徑。
但是在實際實現的時候,一般會在計算各層的最優候選連線的時候,就記錄下前繼連線的概率和,並記錄下對應的狀態節點索引(這裡將已經計算出的結果記錄下來供後續使用的方式,就是維特比演算法被稱為動態規劃演算法的原因),這樣到最後一層的時候,最後一層各候選連線中概率最大的,就是在最優路徑上的那條連線了,然後從這條連線回溯,找出完整的路徑就是最優路徑了。

一直在說概率最大的路徑,那麼這個概率具體指什麼呢?
還記得上一篇文章介紹條件隨機場(CRF)的時候提到,條件隨機場其實是給定了觀測序列的馬爾可夫隨機場,在一階馬爾可夫模型中,定義了以下三個概念:

  • 狀態集合Q,對應到上面的例子就是:
    {B-P, I-P, O}
  • 初始狀態概率向量Π,對應到上面的例子就是:
    {B-P:0.3, I-P:0.2, O:0.5}
    這裡的概率數值是隨便假設的,僅為了方便舉例說明。
  • 狀態轉移概率矩陣A:

CRF中給定了觀測序列做為先驗條件,對應到上面的例子就是:

其中的概率數值同樣是隨便假設的,為了方便舉例。

下圖中紅色節點的概率(可以看成是一個虛擬的開始節點到該節點的連線的概率)的計算方式如下:
初始狀態為B-P的概率Π(B-P) * 該節點的觀測概率P(小|B-P)

下圖中紅色節點的三條連線概率的計算方式如下:
上一層對應節點的概率 * 上層對應節點到該節點的轉移概率 * 該節點的觀測概率P(明|B-P)

其它層之間的節點連線的概率同理計算可得,然後通過上面介紹的維特比演算法過程就可以計算出最優路徑了。

ok,本篇就這麼多內容啦~,感謝閱讀O(∩_∩)O。

相關推薦

Viterbi()演算法CRF(條件隨機)是如何作用的?

之前我們介紹過BERT+CRF來進行命名實體識別,並對其中的BERT和CRF的概念和作用做了相關的介紹,然對於CRF中的最優的標籤序列的計算原理,我們只提到了維特比演算法,並沒有做進一步的解釋,本文將對維特比演算法做一個通俗的講解,以便大家更好的理解CRF為什麼能夠得到最優的標籤序列。 通過閱讀本文你將能

自然語言處理 HMM 演算法Viterbi Algorithm) 例項轉載

給大家推薦一個講解HMM比較詳細入門的內容: wiki上一個比較好的HMM例子 這是另外一個例子,結合分詞舉例的HMM: 這是詳細講解維位元演算法的系列文章,維特比演算法(Viterbi Algorithm)  HMM學習最佳範例六:維特比演算法 來自52nlp

動態規劃之隱含馬爾可夫模型(HMM)和演算法(Viterbi Algorithm)

動態規劃之(HMM)和(Viterbi Algorithm) 1. 實際問題 HMM-韋小寶的骰子 • 兩種骰子,開始以2/5的概率出千。 – 正常A:以1/6的概率出現每個點 – 不正常B: 5,6出現概率為3/10,其它為1/10 • 出千的

中文 NLP(3) -- 四大概率演算法模型之 隱馬爾科夫模型 HMM 和 演算法 Viterbi

之前說過,基於NLP處理的演算法思想目前主要有兩大流派:統計論流派和深度學習流派。而在統計論中,常用的 4 大概率模型分別是 樸素貝葉斯模型,隱馬爾科夫模型,最大熵模型和條件隨機場模型。 對於樸素貝葉斯模型,前面已經多次打過交道,原理也相對簡單。這裡解析第二大模型 -- 隱

隱馬爾科夫模型(前向後向演算法、鮑姆-韋爾奇演算法演算法)

 概率圖模型是一類用圖來表達變數相關關係的概率模型。它以圖為表示工具,最常見的是用一個結點表示一個或一組隨機變數,結點之間的變表是變數間的概率相關關係。根據邊的性質不同,可以將概率圖模型分為兩類:一類是使用有向無環圖表示變數間的依賴關係,稱為有向圖模型或貝葉斯網;另一類是使用無向圖表示變數間的相關關係,稱為無

HMM演算法

維特比演算法 利用動態規劃求解概率最大的路徑,一條路徑一個狀態序列。 動態規劃求解最優路徑專責:如果最優路徑在某時刻t 通過節點i,那麼這條路徑從節點 i 到終點的部分路徑,在節點 i 到終點的路徑中,必須是最優的。 通過這種原理就可以從t=1時刻開始,不斷向後遞推到下

hmm前後向演算法 隱馬爾科夫模型HMM(三)鮑姆-韋爾奇演算法求解HMM引數 隱馬爾科夫模型HMM(四)演算法解碼隱藏狀態序列 隱馬爾科夫模型HMM(一)HMM模型

跟醫生就醫推導過程是一樣的 隱馬爾科夫模型HMM(一)HMM模型     隱馬爾科夫模型HMM(二)前向後向演算法評估觀察序列概率     隱馬爾科夫模型HMM(三)鮑姆-韋爾奇演算法求解HMM引數     隱馬爾科夫模型HMM(四)維特比演算法解碼隱藏狀態序列     在隱馬爾科夫模型HMM(一)

演算法—打字輸入預測

這裡首先說下隱馬爾可夫模型的相關知識。 1. 隱馬爾可夫模型(HMM) 在說隱馬爾可夫模型前還有一個概念叫做“馬爾科夫鏈”,既是在給定當前知識或資訊的情況下,觀察物件過去的歷史狀態對於預測將來是無關的。也可以說在觀察一個系統變化的時候,他的下一個狀態如何

HMM學習筆記(三):動態規劃與演算法

學習隱馬爾可夫模型(HMM),主要就是學習三個問題:概率計算問題,學習問題和預測問題。在前面講了概率計算問題:前後向演算法推導,Baum-Welch演算法。最後在這裡講最後的一個問題,預測問題。 預測問題:給定HMM引數

隱馬爾可夫模型(五)——隱馬爾可夫模型的解碼問題(演算法

#include <stdio.h> #include <stdlib.h> #include <string.h> int main() {         float trans_p[3][3] = {{0.5,0.2,0.3},{0.3,0.5,0.2},{0

隱馬爾科夫模型(HMMs)之五:演算法及前向後向演算法

維特比演算法(Viterbi Algorithm) 找到可能性最大的隱藏序列 通常我們都有一個特定的HMM,然後根據一個可觀察序列去找到最可能生成這個可觀察序列的隱藏序列。 1.窮舉搜尋 我們可以在下圖中看到每個狀態和觀察的關係。 通過計算所有可能的隱藏序列的概率,

演算法——尋找最可能的隱藏狀態序列

原文標題為:維特比演算法:本質上是一個動態規劃演算法 尋找最可能的隱藏狀態序列(Finding most probable sequence of hidden states)   對於一個特殊的隱馬爾科夫模型(HMM)及一個相應的觀察序列,我們常常希望能找到

詳解隱馬爾可夫模型(HMM)演算法

筆記轉載於GitHub專案:https://github.com/NLP-LOVE/Introduction-NLP 4. 隱馬爾可夫模型與序列標註 第3章的n元語法模型從詞語接續的流暢度出發,為全切分詞網中的二元接續打分,進而利用維特比演算法求解似然概率最大的路徑。這種詞語級別的模型無法應對 OOV(Out

HMM-演算法理解與實現(python)

[HMM-前向後向演算法理解與實現(python)](https://www.cnblogs.com/gongyanzh/p/12880387.html) [HMM-維特比演算法理解與實現(python)]() --- ### 解碼問題 - 給定觀測序列 $O=O_1O_2...O_T$,模型 $\lamb

Java實現:拋開jieba等工具,寫HMM+演算法進行詞性標註

一、前言:詞性標註 二、經典維特比演算法(Viterbi) 三、演算法實現 四、完整程式碼 五、效果演示: 六、總結 一、前言:詞性標註   詞性標註(Part-Of-Speech tagging, POS tagging),是語料庫語言學中將語料庫中單詞的詞性按其含義和上下文內容進行標記的文字資料處理技術

CRF條件隨機總結

fields 學習筆記 call 馬爾科夫隨機場 detail strong 概率計算 觀測 play 根據《統計學習方法》一書中的描述,條件隨機場(conditional random field, CRF)是給定一組輸入隨機變量條件下另一組輸出隨機變量的條件概

CRF++ 條件隨機訓練,Anaconda的centos環境搭建

一、安裝Anaconda環境(最好到官網下載最新版本) 1、檢視系統的型別:file /sbin/init (檢視系統是32位的,還是64位的,本人是32位的) 2、下載安裝包,並上傳,比如:Anaconda3-5.2.0-Linux-x86.sh 3、安裝命令:bas

【NLP】基於CRF條件隨機的命名實體識別原理詳解

1. 命名實體用來做什麼? 在自然語言處理應用領域中,命名實體識別是資訊檢索、知識圖譜、機器翻譯、情感分析、問答系統等多項自然語言處理應用的基礎任務,例如,我們需要利用命名實體識別技術自動識別使用者的查詢,然後將查詢中的實體連結到知識圖譜對應的結點上其識別的準確率將會直接影

CRF條件隨機簡介

 CRF(Conditional Random Field) 條件隨機場是近幾年自然語言處理領域常用的演算法之一,常用於句法分析、命名實體識別、詞性標註等。在我看來,CRF就像一個反向的隱馬爾可夫模型(HMM),兩者都是用了馬爾科夫鏈作為隱含變數的概率轉移模型,只不過HMM

CRF++/CRF/條件隨機的特徵函式模板

由於最近想實現CRF,學完了理論後就開始怎麼想怎麼實現,想參照CRF++的開源實現,但首先要解決的怎麼理解特徵模板,所以寫了此文,主要參考了2篇文章,在此感謝。 CRF++要求的訓練資料格