天天看點

一文詳解BERT模型實作NER命名實體抽取-王文廣

作者:小劉話AI
一文詳解BERT模型實作NER命名實體抽取-王文廣

在自然語言處理和知識圖譜中,實體抽取、NER是一個基本任務,也是産業化應用NLP 和知識圖譜的關鍵技術之一。BERT是一個大規模預訓練模型,它通過精心設計的掩碼語言模型(Masked Language Model,MLM)來模拟人類對語言的認知,并對數十億個詞所組成的語料進行預訓練而形成強大的基礎語義,形成了效果卓絕的模型。通過 BERT來進行實體抽取、NER的方法是目前在NLP和知識圖譜的産業化應用中最常用的方法,是效果與成本權衡下的最佳選擇。本文詳細講解使用BERT來進行實體抽取,看完本文就會用目前工業界最佳的模型了。

什麼是實體抽取?

實體是一個常見的名詞,《知識圖譜:認知智能理論與實戰》一書将其定義為:

實體(Entity):是指一種獨立的、擁有清晰特征的、能夠差別于其他事物的事物。在資訊抽取、自然語言處理和知識圖譜等領域,用來描述這些事物的資訊即實體。實體可以是抽象的或者具體的。

在實體抽取中,實體也成為命名實體(Named Entity),是指在實體之上會将其分門别類,用實體類型來框定不同的實體。圖1是一些常見的“實體”的例子,比如“城市”類型的實體“上海”,“ 公司”類型的實體“達觀資料”等。

一文詳解BERT模型實作NER命名實體抽取-王文廣

圖1 實體示例

實體抽取(Entity Extraction,EE)的目标就是識别一段文本中所包含的實體,在其他語境中,也被稱之為“實體識别(Entity Recognition,ER)”、“命名實體識别(Named Entity Recognition,NER)”,這些不同的名詞在大多數情況下所指代的意思是一樣的。

舉例來說,有一段文本:

達觀資料與同濟大學聯合共建的“知識圖譜與語義計算聯合實驗室”正式揭牌成立

識别出其中的藍色部分,并标記為“機構”類型的實體,就是實體抽取。實體抽取的過程通常可以分為是兩個階段:

  1. 識别出所有表示實體的詞彙
  2. 将這些詞彙分類到不同實體類型中

在傳統的命名實體識别任務中,通常有人物、機構、地點等。而在知識圖譜中,實體類型可以有數十種,甚至數百種。對于知識圖譜來說,将各種文本中的實體抽取出來是最基本的任務,有許多方法都緻力于解決這個問題。

一文詳解BERT模型實作NER命名實體抽取-王文廣

圖2 實體抽取案例

衆所周知,實體抽取的複雜程度十分之高,這不僅僅有上圖中的這樣複雜的文檔的原因,語言本身的了解也存在重重困難,有些場景下即使是人類也會出現不解之處。比如語言中隐含着專業的背景知識,隐形或顯性的上下文語境,同樣的文本表達着完全不同的概念,而相同的概念又有多變的語言表達方法等等。這些綜合的原因使得了解語言成為了人工智能皇冠上的明珠,而從文本中抽取實體則不可避免地要了解語言,實體抽取的效果則依賴于對語言了解的程度。

一文詳解BERT模型實作NER命名實體抽取-王文廣

圖3 語言了解困難重重

曆史上,用來進行實體抽取的方法包括基于規則的方法、機器學習方法、深度學習方法和弱監督學習方法等幾大類,每類方法中都有很多種不同的算法,具體的算法内容可以參考《知識圖譜:認知智能理論與實戰》第三章《實體抽取》(P78~136)。

BERT介紹

BERT 是英文“Bidirectional Encoder Representations from Transformers”的縮寫,是Google開發的一種基于Transformer的深度學習技術,用于人工智能領域的文本預訓練。BERT 由Jacob Devlin和他在 Google 的同僚于 2018 年建立,并在論文《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》中釋出。在2019 年,谷歌宣布已開始在其搜尋引擎中使用 BERT,到 2020 年底,它幾乎在搜尋查詢中都使用了 BERT。在2020 年的一篇論文《"A Primer in BERTology: What We Know About How BERT Works"》中提到“In a little over a year, BERT has become a ubiquitous baseline in NLP experiments and inspired numerous studies analyzing the model and proposing various improvements. The stream of papers seems to be accelerating rather than slowing down, and we hope that this survey helps the community to focus on the biggest unresolved questions.”自從 BERT 出來以後,也引導了至今炙手可熱的“大模型”浪潮。其本質就是“預訓練”+“微調”:

一文詳解BERT模型實作NER命名實體抽取-王文廣

圖4 BERT模型,來自參考文獻[2]

對于普羅大衆來說,人工智能的标志性事件當屬AlphaGo,号稱人類最難的智力遊戲敗于機器,可是街頭巷尾的談資。

在自然語言處理領域,BERT在當時的自然語言處理領域可謂掀起軒然大波,總結起來有:

  1. 在機器閱讀了解頂級水準測試SQuAD1.1中表現出驚人成績,首次兩個衡量名額上全面超越人類,并且還在11種不同NLP測試中創出最佳成績。

    關于 SQuAD資料集和評測參考https://rajpurkar.github.io/SQuAD-explorer/,目前是2.0版本。

  2. 谷歌團隊成員Thang Luong表示,BERT模型開啟了NLP的新時代
  3. 證明了通過大規模語料集預訓練的技術,能夠大幅度提升各類文本閱讀了解的效果,也是以,“大模型”自此興起
  4. Masked LM(見下圖)通過學習masked的詞,不僅讓模型學會了上下文資訊,還學會了文法syntax、語義semantics、語用pragmatics等,并能夠很好地學會部分領域知識
  5. 預訓練模型越大,效果越好;對應的,成本也會越高。相比于單任務模型來說,無監督的預訓練模型成本要大1000倍以上
  6. 學術界傳統上認為,在一些很難處理的文字閱讀了解任務上,計算機有望能夠全面超越人類
一文詳解BERT模型實作NER命名實體抽取-王文廣

圖5 掩碼語言模型

掩碼語言模型的提出則來自于Google 的更早些的一篇論文《Attention Is All You Need》(下載下傳位址:https://arxiv.org/pdf/1706.03762.pdf) 所提到的 Transformers 模型(見下圖)。但 BERT 與 Transformers 略有差別,使用的是其編碼器部分,這點從BERT 的論文标題也可以看出來。事實上,目前炙手可熱的大模型中(如 GPT-3等),幾乎都依賴于 Transformers 的模型結構,特别是其中的自注意力機制。《知識圖譜:認知智能理論與實戰》一書 P123~130的“BERT 模型詳解”一節則對結合代碼實作該BERT 的模型結構進行詳細的解析,通俗易懂,非常适合閱讀來深入了解BERT 模型。上述兩篇論文則提供了更多的實驗對比素材,深入閱讀有助于了解BERT 為何會在當時引起轟動,以至于在NLP領域引領風騷數年。

一文詳解BERT模型實作NER命名實體抽取-王文廣

圖6 Transformer模型結構

此外值得一提的是,Google最初 釋出的 BERT 模型有兩種配置:

  1. BERT BASE:12 個編碼器,帶有 12 個雙向自注意力頭;
  2. BERT LARGE:24 個編碼器,帶有 16 個雙向自注意力頭。

這兩種配置結構類似,Large版本要比Base版本“更大”,效果自然更好,同時使用時資源要求也更高。本文以Base版本示例,以使得在一張顯示卡上即可完成。換成 Large 版本不用改變任何代碼,但因為網絡更大,可能需要更進階的顯示卡或多卡來支援模型的訓練。

語料準備

本文采用“MSRA實體抽取資料集”,并使用BIO标記方法來标記,資料集在GitHub 上有很多,也可以GitHub官網下載下傳。

(https://github.com/wgwang/kgbook/tree/main/datasets/NER-MSRA)

MSRA資料集中,實體類型有三種:

  1. LOC:地點類型
  2. ORG:機構類型
  3. PER:人物類型

一個例子為:

1 O

、 O

中 B-ORG

國 I-ORG

作 I-ORG

協 I-ORG

和 O

現 B-LOC

代 I-LOC

文 I-LOC

學 I-LOC

館 I-LOC

負 O

責 O

人 O

在 O

巴 B-PER

金 I-PER

家 O

中 O

介 O

紹 O

文 B-LOC

學 I-LOC

館 I-LOC

新 O

館 O

設 O

計 O

模 O

型 O

。O

從上述例子可以看出:1.“中國作協”是組織機構(ORG)類型:

  • B-ORG标簽:因為它是一個機構實體的開始
  • I-ORG标簽:因為它是一個機構實體的延續

2. “現代文學館”和“文學館”是地點(LOC) 類型:

  • B-LOC标簽:因為它是地點實體的開始
  • I-LOC标簽:因為它是地點實體的延續

3.“巴金”是任務(PER) 類型:

  • B-PER标簽:因為它是人物實體的開始
  • I-PER 标簽:因為它是人物實體的延續

4.其他詞被配置設定O标簽:因為它們不是任何實體

使用 BERT 來進行實體抽取的話,需要将語料進行處理,轉化成清單的形式(train_data和test_data,對應于原始的train.txt 和test.txt),清單的每一個元素是一個鍵值對元組,鍵為文本清單,值為标簽清單。如下圖所示:

一文詳解BERT模型實作NER命名實體抽取-王文廣

圖7 資料樣例

用BERT進行實體抽取

這裡使用最流行的 PyTorch 架構來實作。首先是引入相關的庫。

一文詳解BERT模型實作NER命名實體抽取-王文廣

這裡選擇的是Google釋出的模型bert-base-chinese(https://huggingface.co/models 提供了大量的模型供使用,包括各種專業的預訓練模型,比如面向金融領域 FinBERT,面向醫藥領域的 MedBERT等等):

BERT_NAME = 'bert-base-chinese'

轉化為torch能夠使用的資料集

一文詳解BERT模型實作NER命名實體抽取-王文廣

再用如下代碼将torch 的 dataset轉化為按微批提取的 dataloader:

一文詳解BERT模型實作NER命名實體抽取-王文廣

到此,資料準備完成,後面就可以使用資料集來訓練模型和測試模型效果了。

構模組化型

在本文中,我們将使用來自HuggingFace的預訓練 BERT 基礎模型。既然我們要在token級别對文本進行分類,那麼我們需要使用BertForTokenClassificationclass。

BertForTokenClassificationclass是一個包裝 BERT 模型并在 BERT 模型之上添加線性層的模型,将充當token級分類器。基于BertForTokenClassificationclass來建立基于 BERT 的實體抽取模型非常簡單,見下面代碼:

一文詳解BERT模型實作NER命名實體抽取-王文廣

通過如下代碼即可執行個體化一個用BERT進行實體抽取的模型:

model = BertModel(len(label2id)+1)

訓練

我們的BERT模型的訓練循環是标準的PyTorch訓練循環。在訓練模型中,需要使用 GPU,否則會非常耗時。GPU建議使用nvidia的顯示卡提供,1080ti及其更高版本皆可。

model = model.cuda()

由于BERT已經使用了大規模語料訓練并得到了通用的語義表示,通常使用的話,僅需要重新微調最上面一層即可。為此,需要當機其他不需要訓練的層的參數。下面代碼實作了這個邏輯:

一文詳解BERT模型實作NER命名實體抽取-王文廣

接下來就是常見的深度學習訓練方法了,這裡使用AdamW優化器,其他優化器也可以根據需要進行選擇,具體的參考PyTorch的官方文檔。

lr = 0.00005

optimizer = torch.optim.AdamW(optimizer_grouped_parameters, lr=lr)

下面是具體的訓練代碼:

一文詳解BERT模型實作NER命名實體抽取-王文廣

在測試資料上評估模型

現在我們已經訓練了用于抽取實體的BERT模型。在前面資料集準備中還有測試集,這裡可以使用測試集來看效果:

一文詳解BERT模型實作NER命名實體抽取-王文廣

另外,上述的效果評估是比較簡單的,實際應用中還可以使用更為精細的評估方法,比如按所抽取的實體來評估的方法。更多的用于評估實體抽取的方法可參考《實體抽取:如何評估算法的效果?》 一文。

(https://mp.weixin.qq.com/s/STS8N1PBML_2BvkO5NfiXg)

結論

本文介紹了全面介紹了如何使用BERT進行實體抽取,并給出了代碼執行個體。通過本文,讀者可以很友善地“依瓢畫葫蘆”實作一個基于BERT模型的實體抽取程式,進而學會工業界中最好用的實體抽取模型,并将其應用到學習或工作當中。

具體來說,本文内容包括:

  1. 介紹了什麼是實體抽取
  2. 介紹了什麼是 BERT
  3. 用代碼執行個體介紹了如何使用 BERT 進行實體抽取的完整過程,這包括四個内容:
  • 準備資料
  • 構模組化型
  • 訓練模型
  • 測試模型效果

參考文獻

  1. Ashish Vaswani etc., Attention Is All You Need, arxiv: 1706.03762, 2017
  2. Jacob Devlin etc., BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding, arxiv:1810.04805, 2018
  3. Anna Rogers etc., A Primer in BERTology: What We Know About How BERT Works, arxiv:2002.12327 2020
  4. 王文廣, 知識圖譜:認知智能理論與實戰, 電子工業出版社, 2022

作者簡介

王文廣,達觀資料副總裁,進階工程師,《知識圖譜:認知智能理論與實戰》作者,曾獲得上海市計算機學會科技進步獎二等獎和上海市浦東新區科技進步獎二等獎,專注于自然語言處理、知識圖譜、圖像與語音分析、認知智能、大資料和圖分析等方向的技術研究和産品開發。現在是上海市人工智能标準化技術委員會委員,上海科委評審專家,中國計算機學會(CCF)進階會員,中文資訊學會(CIPS)語言與知識計算專委會委員,中國人工智能學會(CAAI)深度學習專委會委員。申請有數十項人工智能領域的國家發明專利,在國内外知名期刊會議上發表有十多篇學術論文。曾帶隊獲得國内國際頂尖算法競賽ACM KDD CUP、EMI Hackathon、“中國法研杯”法律智能競賽、CCKS知識圖譜評測的冠亞季軍成績。在達觀資料緻力于将自然語言處理、知識圖譜、計算機視覺和大資料技術産品化,以OCR、文檔智能處理、知識圖譜、RPA等産品服務于金融、智能制造、貿易、半導體、汽車工業、航空航天、新能源、雙碳等領域。

繼續閱讀