【详解】BiLSTM+CRF模型
目錄
- 1 BiLSTM-CRF模型用途
- 2 BiLSTM-CRF模型介紹
- 2.1 數據標簽及模型架構
- 2.1.1 數據標簽
- 2.1.2 模型架構
- 2.2 BiLSTM模型
- 2.2.1 BiLSTM模型介紹及聯系
- 2.2.2 代碼實現細節
- 2.3 CRF模型
- 2.3.1 CRF模型定義及聯系
- 2.3.2 CRF作用
- 2.3.3 CRF層的損失函數
- 2.4 BiLSTM-CRF模型代碼實現
- 2.4.1 BiLSTM+CRF模型的實現
- 2.4.2 模型訓練的流程
1 BiLSTM-CRF模型用途
-
命名實體識別(Named Entity Recognition,NER)
-
定義
- 從一段自然語言文本中找出相關實體,并標注出其位置以及類型。
- 是信息提取, 問答系統, 句法分析, 機器翻譯等應用領域的重要基礎工具。
- 在自然語言處理技術走向實用化的過程中占有重要地位. 包含行業, 領域專有名詞, 如人名, 地名, 公司名, 機構名, 日期, 時間, 疾病名, 癥狀名, 手術名稱, 軟件名稱等。
-
命名實體識別問題實際上是序列標注問題
序列標注問題指的是模型的輸入是一個序列, 包括文字, 時間等, 輸出也是一個序列. 針對輸入序列的每一個單元, 輸出一個特定的標簽.
以中文分詞任務進行舉例, 例如輸入序列是一串文字: “我是中國人”, 輸出序列是一串標簽: “OOBII”, 其中"BIO"組成了一種中文分詞的標簽體系: B表示這個字是詞的開始, I表示詞的中間到結尾, O表示其他類型詞. 因此我們可以根據輸出序列"OOBII"進行解碼, 得到分詞結果"我\是\中國人"。
- 序列標注問題涵蓋了自然語言處理中的很多任務, 包括語音識別, 中文分詞, 機器翻譯, 命名實體識別等, 而常見的序列標注模型包括HMM, CRF, RNN, LSTM, GRU等模型。
- 其中在命名實體識別技術上, 目前主流的技術是通過BiLSTM+CRF模型進行序列標注。
-
2 BiLSTM-CRF模型介紹
2.1 數據標簽及模型架構
2.1.1 數據標簽
B-Person (人名的開始部分)I- Person (人名的中間部分)B-Organization (組織機構的開始部分)I-Organization (組織機構的中間部分)O (非實體信息)2.1.2 模型架構
x 是包含了5個單詞的一句話(W0,W1,W2,W3,W4)。還有,在句子x中[W0,W1]是人名,[W3]是組織機構名稱,其他都是“O”。
- 句中的每個單詞是一條包含詞嵌入和字嵌入的詞向量,詞嵌入通常是事先訓練好的,字嵌入則是隨機初始化的。所有的嵌入都會隨著訓練的迭代過程被調整。
- BiLSTM-CRF的輸入是詞嵌入向量,輸出是每個單詞對應的預測標簽。
- BiLSTM層的輸入表示該單詞對應各個類別的分數。如W0,BiLSTM節點的輸出是1.5 (B-Person), 0.9 (I-Person), 0.1 (B-Organization), 0.08 (I-Organization) and 0.05 (O)。這些分數將會是CRF層的輸入。
- 所有的經BiLSTM層輸出的分數將作為CRF層的輸入,類別序列中分數最高的類別就是我們預測的最終結果。
2.2 BiLSTM模型
2.2.1 BiLSTM模型介紹及聯系
- 所謂的BiLSTM,就是(Bidirectional LSTM)雙向LSTM. 單向的LSTM模型只能捕捉到從前向后傳遞的信息, 而雙向的網絡可以同時捕捉正向信息和反向信息, 使得對文本信息的利用更全面, 效果也更好.
- 在BiLSTM網絡最終的輸出層后面增加了一個線性層, 用來將BiLSTM產生的隱藏層輸出結果投射到具有某種表達標簽特征意義的區間, 具體如下圖所示:
2.2.2 代碼實現細節
- BiLSTM網絡結構
- 設置隱藏層維度的時候, 需要將hidden_size // 2
- 總共有3層需要構建, 分別是詞嵌入層, 雙向LSTM層, 全連接線性層
- 在代碼層面, 雙向LSTM就是將nn.LSTM()中的參數bidirectional設置為True
- BiLSTM網絡的代碼實現
- 構建類BiLSTM的初始化函數
- 添加文本向量化的輔助函數, 注意padding填充為相同長度的Tensor
- 要注意forward函數中不同張量的形狀約定
2.3 CRF模型
2.3.1 CRF模型定義及聯系
-
CRF(全稱Conditional Random Fields), 條件隨機場. 是給定輸入序列的條件下, 求解輸出序列的條件概率分布模型.
-
即使沒有CRF層,我們照樣可以訓練一個基于BiLSTM的命名實體識別模型(因為BiLSTM模型的結果是單詞對應各類別的分數,我們可以選擇分數最高的類別作為預測結果。)
例如W0,“B-Person”的分數最高(1.5),那么我們可以選定“B-Person”作為預測結果。同樣的,W1是“I-Person”, W2是“O”,W3是 “B-Organization” ,W4是 “O”。
-
但實際情況可能出現下列預測結果
2.3.2 CRF作用
CRF層可以加入一些約束來保證最終預測結果是有效的(CRF層可以學習到句子的約束條件)。這些約束可以在訓練數據時被CRF層自動學習得到。
可能的約束條件有:
- 句子的開頭應該是“B-”或“O”,而不是“I-”。
- “B-label1 I-label2 I-label3…”,在該模式中,類別1,2,3應該是同一種實體類別。比如,“B-Person I-Person” 是正確的,而“B-Person I-Organization”則是錯誤的。
- “O I-label”是錯誤的,命名實體的開頭應該是“B-”而不是“I-”。
有了這些有用的約束,錯誤的預測序列將會大大減少。
2.3.3 CRF層的損失函數
1 Emission Score(發射分數/狀態分數)
發射概率, 是指已知當前標簽的情況下, 對應所出現字符的概率. 通俗理解就是當前標簽比較可能出現的文字有哪些, 及其對應出現的概率.
Xi,yj代表狀態分數,i是單詞的位置索引,yj是類別的索引。根據上表,
-
表示單詞W1被預測為B?Organization的分數是0.1。
2 Transition Score (轉移分數)
我們用t(yi,yj)來表示轉移分數。例如,t(B?Person,I?Person)=0.9表示從類別B?Person→I?Person的分數是0.9。因此,我們有一個所有類別間的轉移分數矩陣。
為了使轉移分數矩陣更具魯棒性,我們加上START 和 END兩類標簽。START代表一個句子的開始(不是句子的第一個單詞),END代表一個句子的結束。
下表是加上START和END標簽的轉移分數矩陣。
如上表格所示,轉移矩陣已經學習到一些有用的約束條件:
- 句子的第一個單詞應該是“B-” 或 “O”,而不是“I”。(從“START”->“I-Person 或 I-Organization”的轉移分數很低)
- “B-label1 I-label2 I-label3…”,在該模式中,類別1,2,3應該是同一種實體類別。比如,“B-Person I-Person” 是正確的,而“B-Person I-Organization”則是錯誤的。(“B-Organization” -> “I-Person”的分數很低)
- “O I-label”是錯誤的,命名實體的開頭應該是“B-”而不是“I-”。
要怎樣得到這個轉移矩陣呢?
實際上,轉移矩陣是BiLSTM-CRF模型的一個參數。在訓練模型之前,你可以隨機初始化轉移矩陣的分數。這些分數將隨著訓練的迭代過程被更新,換句話說,CRF層可以自己學到這些約束條件。
3 CRF損失函數
CRF損失函數由兩部分組成,真實路徑的分數 和 所有路徑的總分數。真實路徑的分數應該是所有路徑中分數最高的。
例如,我們的數據集中有如下幾種類別:
一個包含5個單詞的句子,可能的類別序列如下:
- \1. START B-Person B-Person B-Person B-Person B-Person END
- \2. START B-Person I-Person B-Person B-Person B-Person END
- ……
- 10. START B-Person I-Person O B-Organization O END
- N. O O O O O O O
每種可能的路徑的分數為Pi,共有N條路徑,則路徑的總分是
,e是常數e。
如果第十條路徑是真實路徑,也就是說第十條是正確預測結果,那么第十條路徑的分數應該是所有可能路徑里得分最高的。
根據如下損失函數,在訓練過程中,BiLSTM-CRF模型的參數值將隨著訓練過程的迭代不斷更新,使得真實路徑所占的比值越來越大。
2.4 BiLSTM-CRF模型代碼實現
2.4.1 BiLSTM+CRF模型的實現
- 第一步: 導入工具包并完成輔助函數
- 第二步: 文本信息張量化
- 第三步: 創建類的初始化函數
- 第四步: 創建獲取發射矩陣張量的函數
- 第五步: 計算前向傳播分值的函數
- 第六步: 計算句子真實分值的函數
- 第七步: 維特比算法的實現
- 第八步: 完善BiLSTM_CRF類的全部功能
2.4.2 模型訓練的流程
- 第一步: 熟悉字符到數字編碼的碼表
- 第二步: 熟悉訓練數據集的樣式和含義解釋
- 第三步: 完成字符到id的映射函數
- 第四步: 獲取訓練數據和驗證數據的函數
- 第五步: 完成準確率和召回率的評估代碼
- 第六步: 繪制損失曲線和評估曲線圖
- 第七步: 完成訓練模型的完整代碼
- 第八步: 訓練集和驗證集損失曲線和指標數據曲線的分析
總結
以上是生活随笔為你收集整理的【详解】BiLSTM+CRF模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 记一次现网k8s中pod连接数据库异常的
- 下一篇: Kettle工具简单使用(spoon)