知識圖譜(Knowledge Graph)主要由實體、關係和屬性構成,而信息抽取(Information Extraction)作為構建知識圖譜最重要的一個環節,目的就是從文本當中抽取出三元組信息,包括「實體-關係-實體」以及「實體-屬性-實體」兩類。然後將抽取後的多個三元組信息儲存到關係型資料庫(neo4j)中,便可得到一個簡單的知識圖譜。本文通過多個實驗的對比發現,結合Bert-NER和特定的分詞、詞性標註等中文語言處理方式,獲得更高的準確率和更好的效果,能在特定領域的中文信息抽取任務中取得優異的效果。
(Jieba、Pyltp、PkuSeg、THULAC)中文分詞和詞性標註工具性能對比基於Stanford coreNLP的指代消解模型命名實體識別(Name Entity Recognition)是獲取三元組中的實體的關鍵。命名實體指的是文本中具有特定意義或者指代性強的實體,常見的包括人名、地名、組織名、時間、專有名詞等。就目前來說,使用序列標註的方法能夠在NER任務中獲得比較優異的效果,相對來說比較成熟。
序列標註任務,即在給定的文本序列上預測序列中需要作出標註的標籤。處理方式可簡單概括為:先將token從離散one-hot表示映射到低維空間中成為稠密的embedding,隨後將句子的embedding序列輸入到RNN中,使用神經網絡自動提取特徵以及Softmax來預測每個token的標籤。本文對比了基於Bert的命名實體識別框架和普通的序列標註框架在模型訓練、實體預測等方面的效果,並對基於小數據集的訓練效果做出實驗驗證。1.2.1 Word Embedding-BiLSTM-CRF:眾多實驗表明,該結構屬於命名實體識別中最主流的模型,代表的工具有:NeuroNER。它主要由Embedding層(主要有詞向量,字向量以及一些額外特徵)、雙向LSTM層、以及最後的CRF層構成,而本文將分析該模型在中文NER任務中的表現。
3 「詞向量+BiLSTM+CRF」三層模型構造圖註:NER任務需要得到實體詞的輸出,所以使用字向量作為輸入。隨著Bert語言模型在NLP領域橫掃了11項任務的最優結果,將其在中文命名實體識別中Fine-tune必然成為趨勢。它主要是使用bert模型替換了原來網絡的word2vec部分,從而構成Embedding層,同樣使用雙向LSTM層以及最後的CRF層來完成序列預測。詳細的使用方法可參考:基於BERT預訓練的中文NER(https://blog.csdn.net/macanv/article/details/85684284)
1.3 NeuroNER和BertNER的中文NER實驗本文的NER實驗數據是來自於人民網的將近7萬句(250萬字)中文新聞語料。
本文選用BIO標註法,其中」B「表示實體起始位置,」I「表示實體內容位置,」O「表示非實體。將7萬條數據樣本經過清洗後,按字進行分割,使用BIO標註形式標註四類命名實體,包括人名(PERSON)、地名(LOCATION)、組織機構名(ORGANIAZATION)以及時間(TIME),構成中文命名實體識別語料庫。
訓練集、驗證集、測試集以「7:1:2」的比例劃分。其中訓練集達到49600條的樣本數,標註實體共88192個;驗證集為7000條,包含12420個標註實體;測試集為14000條,標註實體共25780個。
展示用例:屠呦呦,女,漢族,中共黨員,藥學家。1930年12月30日生於浙江寧波,1951年考入北京大學,在醫學院藥學系生藥專業學習。1955年,畢業於北京醫學院(今北京大學醫學部)。展示用例抽取結果:[['PERSON', '屠呦呦'], ['TIME', '1930年12月30日'], ['LOCATION', '浙江寧波'], ['TIME', '1951年'], ['ORGANIZATION', '北京大學'], ['ORGANIZATION', '醫學院藥學系'], ['TIME', '1955年'], ['ORGANIZATION', '北京醫學院'], ['ORGANIZATION', '北京大學醫學部']]
註:實驗配置為11G Nvidia RTX2080Ti、Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz、16G內存、2T硬碟a.實驗表明,兩者在相同的迭代次數訓練後,測試集的F1值上BertNER比NeuroNER高出超過4個百分點。即使NeuroNER迭代epoch增加到100,仍然是BertNER的識別效果更優。
b.Bert NER在訓練時長、模型加載速度、預測速度上都佔據了很大的優勢,達到工業級的水平,更適合應用在生產環境當中。
c.綜上所述,Bert-BiLSTM-CRF模型在中文命名實體識別的任務中完成度更高。從5萬句(250萬字)的中文新聞語料中按文本數據的字數(萬字為單位)劃分出10W、30W、50W的小數據集,同樣以「7:1:2」的比例得到對應的訓練集、驗證集、測試集。展示用例:屠呦呦,女,漢族,中共黨員,藥學家。1930年12月30日生於浙江寧波,1951年考入北京大學,在醫學院藥學系生藥專業學習。1955年,畢業於北京醫學院(今北京大學醫學部)。展示用例抽取結果:[['PERSON', '屠呦呦'], ['TIME', '1930年12月30日'], ['LOCATION', '浙江寧波'], ['TIME', '1951年'], ['ORGANIZATION', '北京大學'], ['ORGANIZATION', '醫學院藥學'], ['TIME', '1955年'], ['ORGANIZATION', '北京醫學院'], ['ORGANIZATION', '北京大學醫學部']]在相同實驗配置下,四種數據集經過30個epoch的迭代訓練,將句子數、訓練市場、測試集F1值三個維度的實驗結果進行歸一化處理後,最終得到以下實驗結果圖表:
效能分析:本文將以10W的數據集實驗結果作為基礎,探討在30W、50W和250W三種數據集訓練,每當數據量增長一倍(即每增長10W的數據量),所帶來的訓練時長增長和模型提升比例:
1) BertNER在小數據集甚至極小數據集的情況下,測試集F1值均能達到92以上的水平,證明其也能在常見的文本命名實體識別任務中達到同樣優秀的效果。
2) 實驗結果證明,利用小數據集訓練,可以大大降低人工標註成本的同時,訓練時長也越少,也將極大地提高模型迭代的能力,有利於更多實體類型的NER模型構建。
3) 經過效能分析可以看出,數據量往上增加的同時,訓練時長以相同的比例增加,而F1值提升的幅度在逐漸下降。因此,我們在擴充實體類別的時候,可以參考此效能比例,從而衡量所要投入的資源以及所能達到的模型效果。分詞:
語言通常是需要用詞來描述事物、表達情感、闡述觀點等,可是在詞法結構上中文與英文有較大的區別。其中最大的不同是英文將詞組以空格的形式區分開來,較為容易被自動化抽取出來,而中文的詞組往往需要由兩個以上的字來組成,則需要通過分詞工具來將語句拆分,以便進一步分析內容和意圖。詞性標註:
對分詞後的單詞在用法上進行分類,為句法分析、信息抽取等工作打下基礎。常見的詞性包括名詞、動詞、形容詞、代詞、副詞等。分詞和詞性標註往往是一同完成的。本文選取了主流的四款中文自然語言處理工具包括:
Jieba、Pyltp、PkuSeg、 THULAC 。
對比測試了它們分詞和詞性標註上的效果、速度、功能以及集成程度等。其中速度方面的測試,使用了百度百科上100位科技人物的首句人物介紹,經過預測得到每句文本的平均計算。註:實驗配置為11G Nvidia RTX2080Ti、Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz、16G內存、2T硬碟
註:v(動詞)、e(嘆詞)、b(區別詞)、n(名詞)、ns(地名)、nz(其他專名)、q(量詞)、m(數詞)、x(非語素字)
註:nh(人名)、n(名詞)、ns(地名)、nt(時間名詞)、nz(其他專名)、b(區別詞)、wp(標點符號)
註:nr(人名)、ns(地名)、nz(其他專名)、t(時間詞)、b(區別詞)、j(簡稱)、w(標點符號)
註:g(語素詞根)、ns(地名)、nz(其他專名)、t(時間詞)、a(形容詞)、j(簡稱)、w(標點符號)Jieba分詞 + Bert-NER + Pyltp詞性標註:
註:nh(人名)、n(名詞)、ns(地名)、nt(時間名詞)、nz(其他專名)、b(區別詞)、wp(標點符號)a. 經過NER、分詞、詞性標註的對比測試後發現,Jieba分詞同時具有速度快和支持用戶自定義詞典的兩大優點,Pyltp具有單獨使用詞性標註的靈活性。因此,使用「Jieba分詞 + BertNER作自定義詞典 + Pyltp詞性標註」的組合策略後,可以彌補Jieba分詞在實體識別的缺點,保證較高的準確率和產品速度。b. PkuSeg和THULAC:初始化模型就需要很長時間,導致分詞和詞性標註的模型預測速度慢,同時部分人名的命名實體識別有所缺失。c. Pyltp:分詞效果太過於細化,而且實際上是無法用到用戶自定義詞典的。因為LTP的分詞模塊並非採用詞典匹配的策略,而是外部詞典以特徵方式加入機器學習算法當中,並不能保證所有的詞都是按照詞典裡的方式進行切分。指代消解(Coreference Resolution),即在文本中確定代詞指向哪個名詞短語,解決多個指稱對應同一實體對象的問題。常見用於實現指代消解的工具包:NeuralCoref、Stanford coreNLP、AllenNLP等。大部分工具包都是基於語義結構中的詞和句的規則來實現指代消解,而且都是在英文的語言結構當中實現了不錯的效果,NeuralCoref和AllenNLP不支持中文,而Stanford coreNLP 是具有多種語言模型,其中包括了中文模型,但Stanford coreNLP 的指代消解在中文的表現並不理想。目前而言,基於深度學習的端到端指代消解模型還達不到生產應用的要求。
3.2基於Stanford coreNLP的指代消解模型:3.2.1系統架構:
運用Stanford coreNLP中文模型的詞性標註、實體識別和句法依存功能模塊+規則來構成一個中文指代消解系統。
主語"屠呦呦"被拆分為兩個元素,這也直接導致了主語識別成了呦呦。最後的結果為:
本文選取Pyltp中文工具包中的依存句法分析模塊,結合「Jieba分詞 + BertNER作自定義詞典 + Pyltp詞性標註」的詞性標註和BertNER實體識別模塊,以確定輸入文本段落的主語和實體,從而將文本中出現的代詞指代到對應的實體上。並且還實現了對缺失主語的部分文本進行主語補齊。
3.3.2經過反覆的實驗表明,基於BertNER的中文指代消解框架比基於Stanford coreNLP的指代消解模型在中文上獲得更高的準確率和更好的效果,同時實現了主語補齊的功能,有助於抽取更多的有用三元組信息。以下是基於Bert-NER的中文信息抽取系統的最終實驗結果。目前的規則配置文檔定義了五類關係:出生於,配偶,畢業於,工作在,父(母)子。4.1.1基於80條百度百科人物介紹,使用StanfordCoreNLP提取三元組的效果如下圖所示。五類的關係抽取三元組準確率為0.89,抽取率達到0.69。
4.1.2基於80條百度百科人物介紹,使用本文中文抽取模型,取得較為明顯的改進,五類的關係抽取三元組準確率達到0.99,抽取率達到0.96。
中文命名實體識別:https://github.com/EOA-AILab/NER-Chinese中文分詞與詞性標註:https://github.com/EOA-AILab/Seg_Pos
如果你是新同學,長按下面二維碼 - 識別圖中二維碼 - 關注,就可以每天一起學Python了。