基於Bert-NER構建特定領域中文信息抽取框架

2021-02-13 Python編程自學教程

知識圖譜(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了。

相關焦點

  • 基於Bert-NER構建特定領域的中文信息抽取框架(上)
    AI 前線導讀: 知識圖譜(Knowledge Graph)主要由實體、關係和屬性構成,而 信息抽取(Information Extraction) 作為構建知識圖譜最重要的一個環節,目的就是從文本當中抽取出三元組信息,包括「實體 - 關係 - 實體」以及「實體 - 屬性 - 實體」兩類。
  • albert-chinese-ner使用預訓練語言模型ALBERT做中文NER
    下載albert中文模型,這裡使用的是base將模型文件夾重命名為albert_base_zh,放入項目中運行python albert_ner.py --task_name ner --do_train true --do_eval true --data_dir data --vocab_file .
  • NLP - 基於 BERT 的中文命名實體識別(NER)
    作者:艾力亞爾(微博 @艾力亞爾),暴風大腦研究院研發工程師,現負責電視端的語音助手相關工作。
  • BERT-BiLSTM-CRF基於BERT預訓練的中文命名實體識別TensorFlow實現
    軟體包現在支持的功能命名實體識別的訓練命名實體識別的服務C/S繼承優秀開源軟體:bert_as_service(hanxiao)的BERT所有服務基於bert命名行訓練命名實體識別模型:安裝完bert-base後,會生成兩個基於命名行的工具,其中bert-base-ner-train支持命名實體識別模型的訓練,你只需要指定訓練數據的目錄,BERT
  • Keras-BERT-NER albert、roberta、bert、wwm四個模型如何去做命名實體識別任務
    GitHub項目地址:https://github.com/liushaoweihua/keras-bert-ner中文命名實體識別任務下的Keras解決方案,下遊模型支持BiLSTM-CRF/BiGRU-CRF/IDCNN-CRF/single-CRF,預訓練語言模型採用BERT系列(谷歌的預訓練語言模型:支持BERT
  • 運用多源分詞信息助力中文NER 邱震宇
    然而這種方式並沒有充分利用好詞彙級別的信息,因此最近一段時間有很多工作都嘗試將詞彙信息融入到字符級的中文NER建模中,例如Lattice-LSTM以及ACL2020上提出的Simple lexicon方法,這些方法的總結均可以在JayLou的文章中看到,連結如下:JayLou婁傑:中文NER的正確打開方式: 詞彙增強方法總結 (從Lattice LSTM到FLAT)那麼問題來了,為何那麼多研究致力於使用各種方法將詞彙信息通過不同媒介與字符編碼信息進行整合呢
  • Keras入門(七)使用Flask+Keras-bert構建模型預測服務
    在文章NLP(三十四)使用keras-bert實現序列標註任務中,我們介紹了如何使用keras-bert模塊,利用BERT中文預訓練模型來實現序列標註任務的模型訓練、模型評估和模型預測。其中,模型預測是通過加載生成的h5文件來實現的。  本文將會介紹如何使用Flask構建模型預測的HTTP服務。
  • BERT詳解:開創性自然語言處理框架的全面指南
    然後幾天後,新一代前沿框架的出現,導致現有模型已經落後了。這不是一個假設。這就是自然語言處理領域工作者所面對的現實(和挑戰)!過去兩年取得的突破令人驚嘆,接連出現出現各種新框架,可能比目前掌握的框架還要好。谷歌BERT就是這樣一個自然語言處理框架。這可能是近幾年最有影響力的一次革新。可以毫不誇張地說,BERT已經對自然語言處理進行了顯著的變革。
  • 基於BERT 的中文數據集下的命名實體識別(NER)
    訓練首先下載BERT基於中文預訓練的模型(BERT官方github頁面可下載),存放到BERT_BASE_DIR文件夾下,之後將數據放到NER_DIR文件夾下。即可開始訓練。sh run.sh之後會寫一篇Attention is all you need 和 bert論文的詳解,會結合代碼來解釋一下細節,比如Add & Norm是如何實現的,為什麼要Add & Norm。
  • BERT在知識抽取中的應用
    然而,隨著網際網路的爆炸發展,人類的知識也隨之飛速的增長,因而對關係抽取(Relation Extraction, RE)提出了更高的要求:需要一個有效的RE系統,能夠利用更多的數據、有效的獲取更多的關係、高效的處理更多複雜的文本;具有較好的擴展性,能夠遷移到更多的領域。
  • 流水的NLP鐵打的NER:命名實體識別實踐與探索
    心有多大,特徵就有多多多任務:很多時候做 NER 的目的並不僅是為了 NER,而是服務於一個更大的目標,比如信息抽取、問答系統等等的,如果把整個大任務做一個端到端的模型,就需要做成一個多任務模型,把 NER 作為其中一個子任務;另外,如果單純為了 NER,本身也可以做成多任務,比如實體類型多的時候,單獨用一個任務來識別實體,另一個用來判斷實體類型時令大雜燴:把當下比較流行的深度學習話題或方法跟
  • 基於NLP的產業鏈構建及應用
    產業鏈的背景與驅動力本質上產業鏈系統構建的驅動力,就是金融證券領域的價值發現和風險識別。隨著網際網路+和政務數據開放的發展領域,金融證券領域的數據全面豐富,行業應用也從小數據人工線下慢慢發往數位化發展。建設路徑與大部分的知識圖譜的構建路徑基本都是一致的,主要分為四個步驟,包括搜集資料數據、研究並建立框架、自動構建,最後,如果是工業化的話,肯定還需要對產業鏈的數據做人工審核。
  • 用Rasa NLU構建自己的中文NLU系統
    更加重要的是,這樣的開源工具可以本地部署,自己針對實際需求訓練和調整模型,據說對一些特定領域的需求效果要比那些通用的在線NLU服務還要好很多。我們在這裡就簡單介紹使用Rasa NLU構建一個本地部署的特定領域的中文NLU系統。Rasa NLU本身是只支持英文和德文的。中文因為其特殊性需要加入特定的tokenizer作為整個流水線的一部分。
  • BERT的忒修斯船
    ner-crf: 公司數據可以看到,相比直接那前幾層微調,bert-of-theseus的效果確實更好實驗代碼:classification_ifytek_bert_of_theseus[6]sequence_labeling_ner_bert_of_theseus[7]一起交流想和你一起學習進步!
  • 如何在 fast.ai 用 BERT 做中文文本分類?
    它很早就有專門的中文處理工具和預訓練模型。關鍵是,如何在 fast.ai 中,用它替換掉 Spacy 來使用。Keita 的文章,一舉解決了上述兩個問題。便捷的 fast.ai 框架就這樣和強大的 BERT 模型嫁接了起來。變化受 Keita 的影響,其他作者也嘗試了不同的任務和數據集,並且把自己的代碼和工作流程也做了發布。
  • 【NLP】Pytorch中文語言模型bert預訓練代碼
    主要有三個常見的中文bert語言模型bert-base-chineseroberta-wwm-externie1 bert-base-chinese(https://huggingface.co/bert-base-chinese)
  • 史上最強 NLP 預訓練模型 BERT 終於開源了!
    Transformer 的大規模預訓練語言模型,該預訓練模型能高效抽取文本信息並應用於各種 NLP 任務,該研究憑藉預訓練模型刷新了 11 項 NLP 任務的當前最優性能記錄。原版 Transformer 的解碼器與編碼器結構基本一致,只不過在根據前面譯文預測當前譯文時會用到編碼器輸出的原語信息。在 BERT 論文中,研究者表示他們只需要使用編碼器抽取文本信息,因此相對於原版架構只需要使用編碼器模塊。在模型架構上,BERT 使用了非常深的網絡,原版 Transformer 只堆疊了 6 個編碼器解碼器模塊,即上圖的 N=6。
  • 谷歌終於開源BERT代碼:3 億參數量,機器之心全面解讀
    最近谷歌發布了基於雙向 Transformer 的大規模預訓練語言模型,該預訓練模型能高效抽取文本信息並應用於各種 NLP 任務,該研究憑藉預訓練模型刷新了