1. 學習內容復盤
概述
序列標注指給定輸入序列,給序列中每個Token進行標注標簽的過程。序列標注問題通常用于從文本中進行信息抽取,包括分詞(Word Segmentation)、詞性標注(Position Tagging)、命名實體識別(Named Entity Recognition, NER)等。以命名實體識別為例:
輸入序列 | 清 | 華 | 大 | 學 | 座 | 落 | 于 | 首 | 都 | 北 | 京 |
輸出標注 | B | I | I | I | O | O | O | O | O | B | I |
如上表所示,清華大學
?和?北京
是地名,需要將其識別,我們對每個輸入的單詞預測其標簽,最后根據標簽來識別實體。
這里使用了一種常見的命名實體識別的標注方法——“BIOE”標注,將一個實體(Entity)的開頭標注為B,其他部分標注為I,非實體標注為O。
條件隨機場(Conditional Random Field, CRF)
從上文的舉例可以看到,對序列進行標注,實際上是對序列中每個Token進行標簽預測,可以直接視作簡單的多分類問題。但是序列標注不僅僅需要對單個Token進行分類預測,同時相鄰Token直接有關聯關系。以清華大學
一詞為例:
輸入序列 | 清 | 華 | 大 | 學 | |
輸出標注 | B | I | I | I | √ |
輸出標注 | O | I | I | I | × |
如上表所示,正確的實體中包含的4個Token有依賴關系,I前必須是B或I,而錯誤輸出結果將清
字標注為O,違背了這一依賴。將命名實體識別視為多分類問題,則每個詞的預測概率都是獨立的,易產生類似的問題,因此需要引入一種能夠學習到此種關聯關系的算法來保證預測結果的正確性。而條件隨機場是適合此類場景的一種概率圖模型。下面對條件隨機場的定義和參數化形式進行簡析。
考慮到序列標注問題的線性序列特點,本節所述的條件隨機場特指線性鏈條件隨機場(Linear Chain CRF)
設x={x0,...,xn}𝑥為輸入序列,y={y0,...,yn},y∈Y為輸出的標注序列,其中n為序列的最大長度,Y表示x對應的所有可能的輸出序列集合。則輸出序列y的概率為:
設xi,?yi為序列的第i個Token和對應的標簽,則Score需要能夠在計算xi和yi的映射的同時,捕獲相鄰標簽yi?1和yi之間的關系,因此我們定義兩個概率函數:
- 發射概率函數ψEMIT:表示xi→yi的概率。
- 轉移概率函數ψTRANS:表示yi?1→yi的概率。
則可以得到Score的計算公式:
設標簽集合為T,構造大小為|T|x|T|的矩陣P,用于存儲標簽間的轉移概率;由編碼層(可以為Dense、LSTM等)輸出的隱狀態h可以直接視作發射概率,此時Score的計算公式可以轉化為:
完整的CRF完整推導可參考Log-Linear Models, MEMMs, and CRFs
接下來我們根據上述公式,使用MindSpore來實現CRF的參數化形式。首先實現CRF層的前向訓練部分,將CRF和損失函數做合并,選擇分類問題常用的負對數似然函數(Negative Log Likelihood, NLL),則有:
【】
由公式(1)可得,
根據公式(5),我們稱被減數為Normalizer,減數為Score,分別實現后相減得到最終Loss。
Score計算
首先根據公式(3)計算正確標簽序列所對應的得分,這里需要注意,除了轉移概率矩陣P外,還需要維護兩個大小為|T|的向量,分別作為序列開始和結束時的轉移概率。同時我們引入了一個掩碼矩陣mask,將多個序列打包為一個Batch時填充的值忽略,使得Score計算僅包含有效的Token。
Normalizer計算
根據公式(5),Normalizer是x對應的所有可能的輸出序列的Score的對數指數和(Log-Sum-Exp)。此時如果按窮舉法進行計算,則需要將每個可能的輸出序列Score都計算一遍,共有|T|n個結果。這里我們采用動態規劃算法,通過復用計算結果來提高效率。
假設需要計算從第0至第i個Token所有可能的輸出序列得分Scorei,則可以先計算出從第0至第i?1個Token所有可能的輸出序列得分Scorei?1。因此,Normalizer可以改寫為以下形式:
其中hi為第i個Token的發射概率,P是轉移矩陣。由于發射概率矩陣h和轉移概率矩陣P獨立于y的序列路徑計算,可以將其提出,可得:
Viterbi算法
在完成前向訓練部分后,需要實現解碼部分。這里我們選擇適合求解序列最優路徑的Viterbi算法。與計算Normalizer類似,使用動態規劃求解所有可能的預測序列得分。不同的是在解碼時同時需要將第i個Token對應的score取值最大的標簽保存,供后續使用Viterbi算法求解最優預測序列使用。
取得最大概率得分Score,以及每個Token對應的標簽歷史History后,根據Viterbi算法可以得到公式:
從第0個至第i個Token對應概率最大的序列,只需要考慮從第0個至第i?1個Token對應概率最大的序列,以及從第i𝑖個至第i?1個概率最大的標簽即可。因此我們逆序求解每一個概率最大的標簽,構成最佳的預測序列。
由于靜態圖語法限制,我們將Viterbi算法求解最佳預測序列的部分作為后處理函數,不納入后續CRF層的實現。
CRF層
完成上述前向訓練和解碼部分的代碼后,將其組裝完整的CRF層。考慮到輸入序列可能存在Padding的情況,CRF的輸入需要考慮輸入序列的真實長度,因此除發射矩陣和標簽外,加入seq_length參數傳入序列Padding前的長度,并實現生成mask矩陣的sequence_mask方法。
BiLSTM+CRF模型
在實現CRF后,我們設計一個雙向LSTM+CRF的模型來進行命名實體識別任務的訓練。模型結構如下:
nn.Embedding -> nn.LSTM -> nn.Dense -> CRF
其中LSTM提取序列特征,經過Dense層變換獲得發射概率矩陣,最后送入CRF層。
2.平臺實驗結果