基於BiLstm-Crf的文本實體抽取(附pytorch代碼)

實體抽取

實體抽取主要任務就是給定一段文本,從中抽取出實體類單詞,實體類單詞如人名、地名、組織名、時間等名詞性單詞,在具體的代碼實現中,我們都是事先定義抽取哪幾類實體單詞,這個根據具體的訓練數據集而定,比如人民日報數據集中,定義了人名、地點名、組織名三類實體,在模型訓練完成之後,我們的任務就是對輸入的句子進行三類實體單詞的抽取,並識別出單詞具體屬於那一類實體。在這裏插入圖片描述
通過上面的介紹,我們會發現這個任務就是一個分類任務,對於中文,在代碼實現上,我們是對每個字進行分類。

只有一個詞才屬於一個實體類別,一個字怎麼分類呢。首先我們要對文本中每個字進行標註,標註法有BIO、BMEO等標註法。BIO標註法中,B代表每個實體類單詞的開始字,I代表此實體的其它字部分,O代表非實體字部分,這樣每個字就可以進行分類了。

示例如下:

我  O
愛  O
北  B
京  I
天  I
安  I
門  I
。  O

但這樣無法區分每個單詞具體屬於哪個實體,所以通常我們標註時會更加具體一點,如下:

我  O
愛  O
北  B-LOC
京  I-LOC
天  I-LOC
安  I-LOC
門  I-LOC
。  O

這樣就表明這個詞屬於地點類實體。

實現思路

既然是分類問題,並且是文本數據,我們可能首先會採用RNN網絡後接softmax層來進行分類,模型結構如下圖所示:
在這裏插入圖片描述
:若文本數據輸入不熟悉,可參考句子文本數據如何作爲深度學習模型的輸入

此種方法能得到一定準確率,但未考慮一個問題,當某一個字被分爲某一類時一定概率上會基於前一個字被分爲哪一類,比如類別B-PER後被分爲I-LOC類的概率明顯很小。

而CRF(條件隨機場)就會具備這個功能。在代碼實現上,會有一個轉移(transition)矩陣,如下圖所示:
在這裏插入圖片描述
START爲句子開始標籤,END爲句子結束標籤。

令此矩陣爲trantrantran[i][j]tran[i][j]代表第i個標籤之後爲第j個標籤的概率。此轉移矩陣值作爲模型參數,首先會被隨機初始化,然後進行訓練優化。

有了轉移矩陣後,最終標註方法爲:首先通過排列組合的方式獲取每種標註序列的得分,取最大標註序列得分爲最終結果,若句子長度爲m,共有n種標註類型,此種做法就要計算nmn^{m}種標註序列得分。在具體實現時,是採用動態規劃算法——維特比算法進行計算的。 轉移矩陣發揮的作用就是,對每組標註序列得分,除每個標註自身得分外,提供標籤轉移過程中的轉移加分。BiLstm-Crf模型結構如下圖:
在這裏插入圖片描述
參考代碼: https://github.com/buppt/ChineseNER

參考文獻

Bidirectional LSTM-CRF Models for Sequence Tagging-2015
https://www.cnblogs.com/ltolstar/p/11975937.html
https://zhuanlan.zhihu.com/p/97676647

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章