BiLSTM-CRF 模型實現中文命名實體識別
三個月之前 NLP 課程結課,我們做的是命名實體識別的實驗。在MSRA的簡體中文NER語料(我是從這裡下載的,非官方出品,可能不是SIGHAN 2006 Bakeoff-3評測所使用的原版語料)上訓練NER模型,識別人名、地名和組織機構名。嘗試了兩種模型:一種是手工定義特徵模板後再用CRF++開源包訓練CRF模型;另一種是最近兩年學術界比較流行的 BiLSTM-CRF 模型。
小白一枚,簡單介紹一下模型和實驗結果,BiLSTM-CRF 模型的資料和程式碼在GitHub上。
命名實體識別(Named Entity Recognition)
命名實體識別(Named Entity Recognition, NER)是 NLP 裡的一項很基礎的任務,就是指從文字中識別出命名性指稱項,為關係抽取等任務做鋪墊。狹義上,是識別出人名、地名和組織機構名這三類命名實體(時間、貨幣名稱等構成規律明顯的實體型別可以用正則等方式識別)。當然,在特定領域中,會相應地定義領域內的各種實體型別。
漢語作為象形文字,相比於英文等拼音文字來說,針對中文的NER任務來說往往要更有挑戰性,下面列舉幾點:
(1) 中文文本里不像英文那樣有空格作為詞語的界限標誌,而且“詞”在中文裡本來就是一個很模糊的概念,中文也不具備英文中的字母大小寫等形態指示
(2) 中文的用字靈活多變,有些詞語在脫離上下文語境的情況下無法判斷是否是命名實體,而且就算是命名實體,當其處在不同的上下文語境下也可能是不同的實體型別
(3) 命名實體存在巢狀現象,如“北京大學第三醫院”這一組織機構名中還巢狀著同樣可以作為組織機構名的“北京大學”,而且這種現象在組織機構名中尤其嚴重
(4) 中文裡廣泛存在簡化表達現象,如“北醫三院”、“國科大”,乃至簡化表達構成的命名實體,如“國科大橋”。
專著 [1] 裡比較詳細地介紹了 NER 的各種方法(由於出版年限較早,未涵蓋神經網路方法),這裡籠統地摘取三類方法:
1. 基於規則的方法:利用手工編寫的規則,將文字與規則進行匹配來識別出命名實體。例如,對於中文來說,“說”、“老師”等詞語可作為人名的下文,“大學”、“醫院”等詞語可作為組織機構名的結尾,還可以利用到詞性、句法資訊。在構建規則的過程中往往需要大量的語言學知識,不同語言的識別規則不盡相同,而且需要謹慎處理規則之間的衝突問題;此外,構建規則的過程費時費力、可移植性不好。
2. 基於特徵模板的方法:
統計機器學習方法將 NER 視作序列標註任務,利用大規模語料來學習出標註模型,從而對句子的各個位置進行標註。常用的應用到 NER 任務中的模型包括生成式模型HMM、判別式模型CRF等。比較流行的方法是
3. 基於神經網路的方法:
近年來,隨著硬體能力的發展以及詞的分散式表示(word embedding)的出現,神經網路成為可以有效處理許多NLP任務的模型。這類方法對於序列標註任務(如CWS、POS、NER)的處理方式是類似的,將token從離散one-hot表示對映到低維空間中成為稠密的embedding,隨後將句子的embedding序列輸入到RNN中,用神經網路自動提取特徵,Softmax來預測每個token的標籤。這種方法使得模型的訓練成為一個端到端的整體過程,而非傳統的pipeline,不依賴特徵工程,是一種資料驅動的方法;但網路變種多、對引數設定依賴大,模型可解釋性差。此外,這種方法的一個缺點是對每個token打標籤的過程中是獨立的分類,不能直接利用上文已經預測的標籤(只能靠隱狀態傳遞上文資訊),進而導致預測出的標籤序列可能是非法的,例如標籤B-PER後面是不可能緊跟著I-LOC的,但Softmax不會利用到這個資訊。
學界提出了 LSTM-CRF 模型做序列標註。文獻[4][5]在LSTM層後接入CRF層來做句子級別的標籤預測,使得標註過程不再是對各個token獨立分類。引入CRF這個idea最早其實可以追溯到文獻[6]中。文獻[5]還提出在英文NER任務中先使用LSTM來為每個單詞由字母構造詞並拼接到詞向量後再輸入到LSTM中,以捕捉單詞的前後綴等字母形態特徵。文獻[8]將這個套路用在了中文NER任務中,用偏旁部首來構造漢字。關於神經網路方法做NER,可以看部落格[9] ,介紹的非常詳細~
基於字的BiLSTM-CRF模型
這段講得比較囉嗦,大概看看就好。
使用基於字的BiLSTM-CRF,主要參考的是文獻[4][5]。使用Bakeoff-3評測中所採用的的BIO標註集,即B-PER、I-PER代表人名首字、人名非首字,B-LOC、I-LOC代表地名首字、地名非首字,B-ORG、I-ORG代表組織機構名首字、組織機構名非首字,O代表該字不屬於命名實體的一部分。如:
這裡當然也可以採用更復雜的BIOSE標註集。
以句子為單位,將一個含有 nn 個字的句子(字的序列)記作
x=(x1,x2,...,xn)x=(x1,x2,...,xn)其中 xixi 表示句子的第 ii 個字在字典中的id,進而可以得到每個字的one-hot向量,維數是字典大小。
模型的第一層是 look-up 層,利用預訓練或隨機初始化的embedding矩陣將句子中的每個字 xixi 由one-hot向量對映為低維稠密的字向量(character embedding)xi∈Rdxi∈Rd ,dd 是embedding的維度。在輸入下一層之前,設定dropout以緩解過擬合。
模型的第二層是雙向LSTM層,自動提取句子特徵。將一個句子的各個字的char embedding序列 (x1,x2,...,xn)(x1,x2,...,xn) 作為雙向LSTM各個時間步的輸入,再將正向LSTM輸出的隱狀態序列 (h1⟶,h2⟶,...,hn⟶)(h1⟶,h2⟶,...,hn⟶) 與反向LSTM的 (h1⟵,h2⟵,...,hn⟵)(h1⟵,h2⟵,...,hn⟵) 在各個位置輸出的隱狀態進行按位置拼接 ht=[ht⟶;ht⟵]∈Rmht=[ht⟶;ht⟵]∈Rm ,得到完整的隱狀態序列
(h1,h2,...,hn)∈Rn×m(h1,h2,...,hn)∈Rn×m在設定dropout後,接入一個線性層,將隱狀態向量從 mm 維對映到 kk 維,kk 是標註集的標籤數,從而得到自動提取的句子特徵,記作矩陣 P=(p1,p2,...,pn)∈Rn×kP=(p1,p2,...,pn)∈Rn×k 。可以把
三個月之前 NLP 課程結課,我們做的是命名實體識別的實驗。在MSRA的簡體中文NER語料(我是從這裡下載的,非官方出品,可能不是SIGHAN 2006 Bakeoff-3評測所使用的原版語料)上訓練NER模型,識別人名、地名和組織機構名。嘗試了兩種模型:一種是手工定義特徵模板後再用CRF++開源包訓練CR
簡介
Stanford NER是命名實體識別(NER,Named Entity Recognizer)的一個Java實現。NER可以標記文字中詞的序列,如人名、公司名、基因名或者蛋白質名等。它自帶精心設計的用於NER的特徵提取器,和用於定義特徵提取器的許多選項
一、 系統配置
Eclipseluna、 JDK 1.8+
二、分詞介紹
data目錄下有兩個gz壓縮檔案,分別是ctb.gz和pku.gz,其中CTB:賓州大學的中國樹庫訓練資料 ,PKU:中國北京大學提供的訓練資料。
三、 NER
使用斯坦福大學
在MSRA的簡體中文NER語料(我是從這裡下載的,非官方出品,可能不是SIGHAN 2006 Bakeoff-3評測所使用的原版語料)上訓練NER模型,識別人名、地名和組織機構名。嘗試了兩種模型:一種是手工定義特徵模板後再用CRF++開源包訓練CRF模型;另一種是
自己也是一個初學者,主要是總結一下最近的學習,大佬見笑。
中文分詞
說到命名實體抽取,先要了解一下基於字標註的中文分詞。
比如一句話
"我愛北京天安門”。
分詞的結果可以是
“我/愛/北京/天安門”。
那什麼是基於字標註呢?
“我/O 愛/O 北/B
條件隨機場(Conditional Random Fields,簡稱 CRF)是給定一組輸入序列條件下另一組輸出序列的條件概率分佈模型,在自然語言處理中得到了廣泛應用。
新建corpus_process類
import re
import sklearn_crfsuite
from
What-什麼是LSTM和BiLSTM?
LSTM:全稱Long Short-Term Memory,是RNN(Recurrent Neural Network)的一種。LSTM由於其設計的特點,非常適合用於對時序資料的建模,如文字資料。
BiLSTM:Bi-directional
在MUC-6中首次使用了命名實體(named entity)這一術語,由於當時關注的焦點是資訊抽取(information extraction)問題,即從報章等非結構化文字中抽取關於公司活動和國防相關活動的結構化資訊,而人名、地名、組織機構名、時間和數字表達(包括時間、日期、貨幣量和百分數等)是結
CRF++官方文件
https://taku910.github.io/crfpp/
windows下下載二進位制檔案下載地址如下:
https://drive.google.com/drive/folders/0B4y35FiV1wh7fngte
接觸命名實體識別這個領域有不少時間了,中文命名實體識別的主要任務是識別出文本中的人名,地名,組織機構名等專有名稱和有意義的時間,日期等數量短語並加以歸類。命名實體識別技術是資訊抽取,資訊檢索,機器翻譯,問答系統等多種自然語言處理技術必不可少的組成部分。對於這個技術,自己
作者及其單位:北京郵電大學,張俊遙,2019年6月,碩士論文
摘要
實驗資料:來源於網路公開的新聞文字資料;用隨機欠取樣和過取樣的方法解決分類不均衡問題;使用BIO格式的標籤識別5類命名實體,標註11種標籤。
學習模型:基於RNN-CRF框架,提出Bi-GRU-Attention模型;基於改進的ELMo可
#第一步:資料處理
#pikle是一個將任意複雜的物件轉成物件的文字或二進位制表示的過程。
#同樣,必須能夠將物件經過序列化後的形式恢復到原有的物件。
#在 Python 中,這種序列化過程稱為 pickle,
#可以將物件 pickle 成字串、磁碟上的檔案或者任何類似於檔案的物件,
#也可以
下面是用python的pycrfsuite庫實現的命名實體識別,是我最初為了感知命名實體識別到底是什麼,調研命名實體識別時跑的案例,記錄在下面,為了以後查閱。
案例說明:
內容:在通用語料庫CoNLL2002上,用crf方法做命名實體識別(地點、組織和人名)。
工具:Anacond
本博文是對上一篇部落格(https://blog.csdn.net/jmh1996/article/details/84779680 BiLSTM+CRF(二)命名實體識別 )的完善。
資料處理功能模組
語料庫資料格式: 訓練集: source_data.txt :文字 每一行為
前言
前一篇部落格裡面,我們已經提到了如何構建一個雙向的LSTM網路,並在原來單層的RNN的基礎上,修改少數幾行程式碼即可實現。 Bi-LSTM其實就是兩個LSTM,只不過反向的LSTM是把輸入的資料先reverse 首尾轉置一下,然後跑一個正常的LSTM,然後再把輸出結果rever
為什麼要用biLSTM?為了使特徵提取自動化。當使用CRF++工具來進行命名實體識別時,需要自定義模板(或者使用預設的模板)。
任務和資料
任務是進行命名實體識別(named entity recognition),例如:
在CoNLL2003任務中,實體是LO
由於需要做中文的命名實體識別,網上搜到foolnltk是一個比較好用的工具,安裝和使用的過程
1、安裝
由於網路問題指定清華的源安裝
pip3 install foolnltk -i https://pypi.tuna.tsinghua.edu.cn/si CRF與NER簡介
CRF,英文全稱為conditional random field, 中文名為條件隨機場,是給定一組輸入隨機變數條件下另一組輸出隨機變數的條件概率分佈模型,其特點是假設輸出隨機變數構成馬爾可夫(Markov)隨機場。
較為簡單的條件隨機場是定義線上性鏈上的條件隨機場,稱為線性鏈條件 裏的 以及 命名 語料庫 images AD 之前 .dll alt 摘要
本文主要講述了關於人民日報標註語料的預處理,利用CRF++工具包對模型進行訓練以及測試
目錄
明確我們的標註任務
語料和工具
數據預處理
1.數據說明
2.數據預處理
模型訓練及測試
1.流程
2
MedicalNamedEntityRecognition
Medical Named Entity Recognition implement using bi-directional lstm and crf model with char embedding.CCKS2018中文電 相關推薦
BiLSTM-CRF 模型實現中文命名實體識別
使用Stanford Word Segmenter and Stanford Named Entity Recognizer (NER)實現中文命名實體識別
使用Stanford NLP工具實現中文命名實體識別
BiLSTM-CRF模型做基於字的中文命名實體識別
零基礎入門--中文命名實體識別(BiLSTM+CRF模型,含程式碼)
基於CRF的中文命名實體識別模型
BiLSTM介紹及中文命名實體識別應用
NLP之中文命名實體識別
CRF++進行自定義命名實體識別
中文命名實體識別之學習筆記一(詞性標註)
【論文筆記】《基於深度學習的中文命名實體識別研究》閱讀筆記
BILSTM+CRF實現命名實體識別NER
基於crf的CoNLL2002資料集命名實體識別模型實現-pycrfsuite
BiLSTM+CRF(三)命名實體識別 實踐與總結
BiLSTM+CRF(二)命名實體識別
命名實體識別(biLSTM+crf)
用foolnltk工具包實現中文分詞和命名實體識別
NLP入門(八)使用CRF++實現命名實體識別(NER)
用CRF做命名實體識別
中文電子病例命名實體識別專案