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