python 命名实体识别_使用Python和Keras的有关命名实体识别(NER)的完整教程
假設(shè)您是報(bào)紙行業(yè)的編輯,每天都會(huì)收到數(shù)千個(gè)故事。您將如何找到與體育,政治等特定領(lǐng)域相關(guān)的故事?您會(huì)講完所有這些故事嗎?無(wú)權(quán)利?一個(gè)可以幫助您劃分為不同類別的系統(tǒng)怎么樣?該系統(tǒng)還可以執(zhí)行復(fù)雜的任務(wù),例如按城市劃分故事,識(shí)別故事中涉及的人員姓名,組織等。在這篇文章中,我將向您介紹一個(gè)名為命名實(shí)體識(shí)別(NER)的東西。NER的任務(wù)是在文本中查找單詞的類型。
簡(jiǎn)介:
在自然語(yǔ)言處理(NLP)中,實(shí)體識(shí)別是常見問(wèn)題之一。該實(shí)體稱為感興趣的文本部分。在NLP中,NER是一種從大型語(yǔ)料庫(kù)中提取相關(guān)信息并將這些實(shí)體分類為預(yù)定義類別(如位置,組織,名稱等)的方法。這是一個(gè)簡(jiǎn)單的示例,可以解決與特定于領(lǐng)域的問(wèn)題相關(guān)的復(fù)雜實(shí)體識(shí)別。
2.先決條件:
這篇文章假定您熟悉:機(jī)器學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)的基本概念
在Python和Keras中運(yùn)行的LSTM網(wǎng)絡(luò)
條件隨機(jī)場(chǎng)(CRF)
3.了解數(shù)據(jù):
我已經(jīng)使用了kaggle的數(shù)據(jù)集。該數(shù)據(jù)集是從GMB(格羅寧根意思銀行)語(yǔ)料庫(kù)中提取的,該語(yǔ)料庫(kù)經(jīng)過(guò)標(biāo)記,注釋和構(gòu)建,專門用于訓(xùn)練分類器以預(yù)測(cè)命名的實(shí)體(例如名稱,位置等)。
所有實(shí)體均使用BIO方案進(jìn)行標(biāo)記,其中每個(gè)實(shí)體標(biāo)簽以B或I字母開頭。B-表示實(shí)體的開始和I-內(nèi)部。不需要的單詞用0 –標(biāo)簽標(biāo)記。
下表顯示了有關(guān)單詞標(biāo)簽的詳細(xì)信息。
讀取CSV文件并顯示前10行。
如您所見,句子#表示句子編號(hào),每個(gè)句子包含使用標(biāo)簽欄中的BIO方案標(biāo)記的單詞。
這個(gè)特定的數(shù)據(jù)集包含47959個(gè)句子和35178個(gè)唯一單詞。對(duì)于預(yù)處理步驟,您可以參考我的Github存儲(chǔ)庫(kù)。
讓我們顯示第一個(gè)句子。
4.使用條件隨機(jī)字段(CRF)的NER:
CRF用于預(yù)測(cè)使用上下文信息添加信息的序列,模型將使用這些信息進(jìn)行正確的預(yù)測(cè)。
以下是CRF的公式,其中y是輸出變量,X是輸入序列。
輸出序列被建模為特征函數(shù)的歸一化乘積。
4.1 CRF的功能準(zhǔn)備:
以下是NER在nltk中使用的默認(rèn)功能。還可以修改它以進(jìn)行自定義,并可以提高模型的準(zhǔn)確性。
加入我們的每周時(shí)事通訊以接收:最新文章和訪談
一個(gè)我事件:更新,免費(fèi)通行證和優(yōu)惠碼
加入AI Time Journal計(jì)劃的機(jī)會(huì)
4.2用scikit-learn訓(xùn)練模型:
現(xiàn)在,我們可以使用sklearn-crfsuite提供的條件隨機(jī)字段實(shí)現(xiàn)來(lái)訓(xùn)練模型。初始化模型實(shí)例,并使用fit方法擬合訓(xùn)練數(shù)據(jù)。
4.3評(píng)估模型性能:
我們將使用精度,召回率和f1得分指標(biāo)來(lái)評(píng)估模型的性能,因?yàn)閷?duì)于該數(shù)據(jù)集而言,精度不是一個(gè)好的指標(biāo),因?yàn)槊總€(gè)類中的數(shù)據(jù)點(diǎn)數(shù)量均不相等。
結(jié)果看起來(lái)不錯(cuò)。
5.帶有雙向LSTM – CRF的NER:
在本節(jié)中,我們將雙向LSTM模型與CRF模型結(jié)合在一起。這種方法稱為Bi LSTM-CRF模型,這是命名實(shí)體識(shí)別的最新方法。LSTM(長(zhǎng)期短期記憶)是一種特殊類型的遞歸神經(jīng)網(wǎng)絡(luò),用于處理數(shù)據(jù)序列。
5.1定義模型參數(shù):
如果您知道這些參數(shù)的含義,那么您可以進(jìn)行嘗試并獲得良好的結(jié)果。
5.2模型架構(gòu):
現(xiàn)在我們可以定義遞歸神經(jīng)網(wǎng)絡(luò)架構(gòu),并為L(zhǎng)STM網(wǎng)絡(luò)提供訓(xùn)練數(shù)據(jù)。
我已經(jīng)使用了keras callback()函數(shù)。
5.3可視化模型性能:
在這里,我們將繪制訓(xùn)練和驗(yàn)證集的損失與歷時(shí)之間的圖。
分類報(bào)告。
您可以從上一節(jié)中看到該模型優(yōu)于性能。
6.評(píng)估:
讓我們嘗試從測(cè)試數(shù)據(jù)語(yǔ)句中識(shí)別出模型在訓(xùn)練過(guò)程中看不到的實(shí)體,以了解模型的性能如何。
每次執(zhí)行時(shí),以下代碼都會(huì)從測(cè)試數(shù)據(jù)中隨機(jī)選擇句子,并為其預(yù)測(cè)標(biāo)簽。
現(xiàn)在,我們可以輕松地將模型的預(yù)測(cè)與實(shí)際預(yù)測(cè)進(jìn)行比較。
要點(diǎn):
我們必須了解這里訓(xùn)練的模型只能識(shí)別位置,人等常見實(shí)體。可以建立一個(gè)復(fù)雜的模型來(lái)預(yù)測(cè)化學(xué)實(shí)體,藥物等,但是要完成這樣的任務(wù),制備和標(biāo)記該數(shù)據(jù)集將具有挑戰(zhàn)性。
7.結(jié)論和未來(lái)工作:
這是解決此問(wèn)題的首選方法,可以通過(guò)以下方法進(jìn)行修改以改進(jìn)解決方案:更改模型超參數(shù),例如時(shí)期數(shù),嵌入尺寸,批處理大小,退出率,激活等。
使用更大的數(shù)據(jù)集。在這里,我們僅使用了47959個(gè)句子,這些句子很少為實(shí)體識(shí)別問(wèn)題建立良好的模型。
使用預(yù)訓(xùn)練的詞嵌入。
對(duì)LSTM使用字符級(jí)嵌入。
BERT模型的微調(diào)。
通過(guò)添加在測(cè)試時(shí)出現(xiàn)的未知標(biāo)記來(lái)改進(jìn)詞匯表,方法是替換我們訓(xùn)練模型時(shí)使用的所有不常見詞。為簡(jiǎn)便起見,我們還沒(méi)有這樣做。
總結(jié)
以上是生活随笔為你收集整理的python 命名实体识别_使用Python和Keras的有关命名实体识别(NER)的完整教程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java 注入 循环_spring依赖
- 下一篇: python搜索文件内容_python实