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