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