Pytorch 實作系列 — BiLSTM-CRF

mz bai
10 min readAug 14, 2021

--

BiLSTM-CRF 由 Huang et al. (2015, 百度) 在 Bidirectional LSTM-CRF Models for Sequence Tagging 提出,用於命名實體識別(NER)任務中。相較 BiLSTM,增加 CRF 層使得網路得以學習tag與tag間的條件機率。

概念圖

對BiLSTM不熟的可先參考

網路

BiLSTM-CRF 顧名思義是BiLSTM和CRF兩方法的結合,利用 Linear CRF 調整BiLSTM序列輸出的結果,得以學習輸出token前後的關聯。Linear CRF在這裡是指1D的CRF。

BiLSTM CRF concept

CRF和HMM、MEMM皆屬於bayesian method的家族,都處理序列對應關係,且長相類似。

HMM (Hidden Markov Model): 有向圖。從隱狀態產生觀測值

CRF (Conditional Random Field): 無向圖。從觀測序列推論隱狀態,一般用node potential和pairwise potential描述。除了輸入輸出方向不同於前者,CRF放寬了每個時間步的狀態與觀測值一對一的假設,而是會參考整個輸入序列。

MEMM (Maximum Entropy Markov Model): 與CRF相同但只用指數機率

從這邊也明白,BiLSTM的最後一層分類器輸出即如同CRF的node potential/emit probability,因為雙向性質的關係,每個時間步的輸出狀態都會參考整個輸入序列,在pairwise potential方面,則用1st order Markov property描述狀態間的移轉。

HMM, MEMM, CRF

訓練

CRF透過最大化後驗機率(maximum a posteriori, MAP)的方式提高正確路徑在所有路徑的後驗機率,做為最佳化的條件。

likelihood估計可分解為目標token y和輸入token x的條件機率,而該機率又正比於兩序列的joint probability

也可視為最小化估計token路徑的 log likelihood 與真實token路徑的 log likelihood 差(Likelihood Ratio)。

參數更新的likelihood ratio

實務上使用forward probability (alpha)計算路徑likelihood,如同下圖,首先將prior (pi) 跟 emit probability (beta) 相乘,接下來一步一步轉移到下一個狀態,每次到下一時間步都先加總過去的posterior,取得當下狀態的marginal probability,並乘上當下emit,完成該時間下的事件描述。最後加總得到路徑likelihood。

過程是一種動態規劃(dynamic programming, DP)算法,每次都保留過去與現在的狀態,並不斷前行。

相較全部要探索 Label^T 個路徑,現在只需Label² * T的運算量。

用softmax計算正確路徑占全部路徑的機率後取log,形成negative log likelihood。也就是所謂的 gold score跟normalization constant (partition function)。

計算全部路徑得到normalization constant的過程稱為belief propagation。

這邊常常看到 logsumexp 這個詞彙被提及

是因為 softmax 取 log 會變成 x — logsumexp(x)

但exp容易overflow,故延伸出 (x-max) — logsumexp(x-max)

這個以最大值max移位後再計算的數值trick

預測

用Viterbi最佳路徑作為推論的解碼方法,它是一個前向-後向演算法,前向計算路徑分數,後向取回最佳label。

做法其實與前述段落相同,也是先計算forward probability,但這次不計算marginal probability,而是取出當下最有可能從狀態i轉移到的狀態j及其機率,以此類推得最終得出最佳路徑,再利用最佳路徑反向取回整條路徑的組成。

任務

命名實體識別(Named Entity Recognition, NER)任務與之前介紹的詞性標註(POS Tagging)結構相同,都將輸入序列轉換成等長的輸出序列,不同之處在於前者用於找出文本中的重要字詞、擷取資訊,例如人名、地點,後者用於語言學的語句結構。

資料集

Annotated Corpus for Named Entity Recognition,Kaggle上的NER標記資料集。下表是該資料集含有的標記對象,採用BIO標記方法。

常見的NER標記系統包括BIO, BIOES。

B (begin of tag): 標記的開始

I (inside of tag): 標記內

E (end of tag): 標記的結束

O (outside): 標記外,不屬於任何個體

S (singleton): 單詞

例如,B-PER是人名的開始,B-LOC是地名的開始,I-LOC是地名的延續

Obama  was the president of   the  United  States  .
B-PER O O O O O B-LOC I-LOC O

更多可以參考以下文章

共47959條句子,17個目標token。從標記的數量可以看出來,如同大多數NER資料集,會有大量標記屬於O,只有少量標記是特定實體。因此在學習上,容易忽略掉重要的目標。

count of each tag in the dataset

評估

  1. 訓練集與測試集比例為4比1,未使用stratified sampling,可能導致其中一邊的token不完整。

2. 另外也因為CRF屬於bayesian method,使得在prior的初始化上需要極其小心的調校。

進行推論的過程中發現一種使用方法。雖然直接使用CRF訓練及推論可能會提升或減少準確度,但改用CRF loss作為校正方法與Cross entropy jointly trained,可以增進BiLSTM的表現,且不需要CRF層跟viterbi decode。

下圖是用Cross entropy及CRF loss一同訓練後,只使用BiLSTM預測的結果。準確度從53.6%上升到51.8%。

confusion matrix inferred by BiLSTM(CONLL2000)

CRF 的轉移矩陣,很明顯會從其他標記被吸入(absorb) O標記,而無法學習到其他標記間的轉移,不過有微弱的訊號顯示同一標記的begin和inside轉移有被學習到。部分原因是因為字詞級別(word level)標記詞彙通常很短,不會延續很長一段。但在段落標記(paragraph)或字元級別(character level)的標記就能有明顯的關聯,例如POS任務。

transition matrix of CRF

儘管在較為稀疏的NER提升較少,但在POS上倒是提升挺多。以下是與另一篇BiLSTM文章相比,準確度從56%提升到66%。

confusion matrix inferred by BiLSTM(CONLL2000)

代碼連接

參考

--

--

mz bai
mz bai

Written by mz bai

Present data engineer, former data analyst, Kaggle player, loves data modeling.