基於機器閱讀理解(MRC)的信息抽取方法

導讀:本次分享的主題為基於機器學習閱讀理解(MRC)的信息抽取方法。由香儂科技發表在 ACL2019,論文提出用閱讀理解的方法對信息抽取這個傳統問題進行建模,取得了比較好的效果。

Part1 自然語言處理(NLP)

1. 自然語言處理(NLP)是什麼?

自然語言處理是研究能實現人與計算機之間,用自然語言進行有效通信的各種理論和方法。(通俗講就是計算機要理解人說的話,計算機生成的話,人也能夠理解)

基於機器閱讀理解(MRC)的信息抽取方法

2. 為什麼自然語言處理很難?

自然語言處理的難點在於歧義性。如下面的例子:

  • 同樣的表達方式,有不同的含義:“喜歡一個人”:like someone 或者 like to be alone。
  • 雖然表達方式不同,但表達的含義相同:“我剛差點摔著”、“我剛差點沒摔著”“蘋果多少錢一斤”、“蘋果一斤多少錢”、“一斤蘋果多少錢”

3. 常見的 NLP 任務

基於機器閱讀理解(MRC)的信息抽取方法

常見的 NLP 任務可以分為簡單、中等、困難,分別包含的具體任務如下:

  • 簡單任務:分詞、詞性標註、垃圾郵件分類、句法依存分析
  • 中等任務:詞義消歧、情感分類、命名實體識別、信息檢索
  • 困難任務:關係 & 事件抽取、翻譯、自動摘要、問答、對話

今天主要介紹命名實體識別、關係 & 事件抽取這兩類信息抽取任務。

4. 深度學習與 NLP 結合的範式:

範式 1:

第一種深度學習與 NLP 的結合的範式(Bert 出現之前),一般包含以下幾步:

基於機器閱讀理解(MRC)的信息抽取方法

-> Embed:該階段把離散 id 變成稠密向量,可能對以下幾個維度特徵進行 embedding,包括 word(單詞)、char(字符)、pos tag(詞性)、position(位 置)。

基於機器閱讀理解(MRC)的信息抽取方法

-> Encode:該階段使得稠密向量獲得上下文信息, 一般方案包括 CNN/RNN/Transformer。

基於機器閱讀理解(MRC)的信息抽取方法

-> Attend:該階段可以使更遠的信息可以互相注意,一般分為加性 (sum)、乘性 (product) 的注意力機制。

基於機器閱讀理解(MRC)的信息抽取方法

-> Predict:NLP 任務一般是預測離散的變量,Classification 分類、Seq Labeling 序列標註、翻譯 / 摘要可以 model 成 seq2seq 的任務。

範式 2:

最近有些 Pre-train 的模型出現,打破的了之前的方案,把 embed 到 Attend,基本上都用的類似的方法,通過 Pre-train 得到一個帶著上下文信息的向量。算法包括 elmo、gpt、bert、gpt2、xlnet、ernie、roberta 等,在大數據量上進行預訓練。

基於機器閱讀理解(MRC)的信息抽取方法

第二種深度學習與 NLP 的結合的範式,一般包含以下幾步:

-> Pre-train:剛開始是用大規模的語料進行預訓練。

-> Fine_tune:針對特定任務進行微調。

-> Predict:進行 Predict。

Part3 信息抽取

1. 信息抽取簡介

基於機器閱讀理解(MRC)的信息抽取方法

信息抽取是將非結構化的文本信息轉換為結構化的信息,如上圖所示,左邊為非結構化文本,通過信息抽取得到右邊結構化的信息。

基於機器閱讀理解(MRC)的信息抽取方法

信息抽取可以分為三類:

  • 命名實體識別(NER):從文本中抽取人物、機構、文件名等實體。
  • 關係抽取(RE):得到實體後,抽取實體間的關係,一般抽取得到一個(實體,實體,關係)的三元組。
  • 事件抽取:抽取多個實體和事件關係,一般得到一個 trigger 和多個 arguments 的多元組。

今天主要介紹命名實體識別和關係抽取。

2. 實體關係抽取

基於機器閱讀理解(MRC)的信息抽取方法

大量的信息抽取任務是實體和關係的抽取,舉個例子,喬布斯是蘋果公司的 CEO。其中 " 喬布斯 " 和 " 蘋果公司 " 是實體,分別是人名、公司名;兩個實體之間是僱傭關係。

3. 實體關係抽取的傳統做法

基於機器閱讀理解(MRC)的信息抽取方法

實體關係抽取的傳統做法:

  • Pipeline 的方法:先進行命名實體識別,再進行關係識別。
  • joint 方法:通過共享參數的模型,把實體識別和關係識別聯繫到一起。

命名實體識別(NER):

基於機器閱讀理解(MRC)的信息抽取方法

NER 也可以分為 4 步:

-> Embed:把 Michael Jeffrey Jordan was born in Brooklyn,變成一個稠密向量。

-> Encode:在 NER 中主要是 RNN 相關的;

-> Attend:把注意力集中在“一個人在布魯克林出生”

-> Predict:主要用 CRF 做序列標註。

也可以用 BERT,把 Embed 到 Attend 之間都用過 BERT 來初始化,然後進行 fine_tune,然後在最上層加一個 Predict 的神經網絡。

關係抽取(RE):

基於機器閱讀理解(MRC)的信息抽取方法

RE 一般被 model 成 Classification 任務,同樣分為以下 4 步:

-> Embed:還是將字或者詞變成一個稠密的向量,這裡還會多一個 position,一般認為待變成稠密向量的詞與實體之間的位置是一個相對位置,如下圖中 hired 和第一個人它的位置可能是 -1,然後逗號和它的位置是 1,這樣的一種 Embedding。

基於機器閱讀理解(MRC)的信息抽取方法

-> Encode:對於關係識別來說,即包含 CNN 相關的,也包含 RNN 相關的,把上下文的信息考慮進來。如上圖是一個 PCNN,通過兩個實體把句子分為三部分,每部分分別做 CNN 的 max pooling(由於這三部分的用處不同,直接做 max pooling 可能會有一些信息的損失),再經過 Softmax classifier 進行分類。

基於機器閱讀理解(MRC)的信息抽取方法

上圖為 BI-LSTM,同樣用了 RNN base 的網絡結構,可以學習到更長距離的依賴。

-> Attend:Attention 可以 Attend 到兩個實體是由於哪個詞分辨出是顧傭的關係,比如“CEO”就可以認為“蘋果公司”和“喬布斯”之間是僱傭關係,有比較大的一個權重。

-> Predict:對定長的向量進行 Predict 分類。

剛剛說的都是 Pipeline 的方法,Joint 方法也是類似的,主要是把兩部分的一些模型的參數在底層被共享起來。

4. 傳統方法的問題

基於機器閱讀理解(MRC)的信息抽取方法

Pipeline 和 Joint 兩種方案都存在一些問題:

① 很難處理層級關係:建模困難。如右側第 1 張圖所示,“喬布斯在 1977 年至 1983 年擔任了蘋果公司的 CEO,在 1986 年至 1996 年擔任皮克斯動畫工作室的 CEO”。這裡存在 7 個實體,相互間都有關係,非常複雜。

② 準確率問題:

  • 兩個實體離得比較遠,尤其當一個實體與另外一個實體發生關係時,其實是它的縮寫與另外一個實體比較近,而本體與另外一個實體比較遠的時候,這樣兩個實體之間的關係往往很難預測得到。
  • 一個實體包含多個關係對,比如這裡的“蘋果公司”,既和“CEO”產生關係,又和“喬布斯”產生關係, 包含多個關係,是關係的分類比較複雜。
  • 實體跨越的 span 有重疊。如右側第 2 張圖所示,“比爾蓋茨和喬布斯分別擔任微軟和蘋果公司的 CEO”,“比爾蓋茨”是和“微軟”產生關係,“喬布斯”是和“蘋果公司”產生關係對於剛剛說的 PCNN 或者 RNN 來說都會產生混亂的情況,導致識別準確率下降。

Part4 機器閱讀理解(MPC)

1. 機器閱讀理解簡介

基於機器閱讀理解(MRC)的信息抽取方法

機器閱讀理解是給定上下文 c,和問題 q,得到答案 a,a 是原文中的一個或多個 span<question> -> <answer>。/<answer>/<question>

如圖所示,通過提問“鄭強什麼時候就職于越秀會計事務所?”,我們可以發現,是在 1998 年到 2000 年時就職于越秀會計事務所。這樣就得到鄭強、越秀會計事務所、時間等多個實體間關係。

2. MRC 做法

基於機器閱讀理解(MRC)的信息抽取方法

MRC 的做法也是分為 4 步:

範式 1,傳統的方案:

基於機器閱讀理解(MRC)的信息抽取方法

先 Embed,把字和詞變成稠密向量,通過 Contextual 進行 Encode,這裡通過的是 LSTM 或者 GRU 之類的方案,通過上下文一起考慮進來,然後進行 Attend,question 和文章互相注意,最後是 Predict,進行分類和序列標註。

範式 2:

基於機器閱讀理解(MRC)的信息抽取方法

Bert 出現之後,可以通過 Bert 方案,把前 3 步換成 Bert,最後預測一個 start 和一個 end,或者通過序列標註的方案來做。

如上圖,Bert 時,會在 Question 的 Tok 前加一個 CLS,後面加一個 SEP,然後把 Paragraph 的 Tok 放在後面。然後預測 Paragraph 中哪位置的 Tok 是 start,哪個位置的 Tok 是 end,來預測閱讀理解問題。

3. 使用 MRC 做實體關係抽取

基於機器閱讀理解(MRC)的信息抽取方法

在 ACL2019 的論文中,我們提出了使用一種 MRC 的新的範式來做實體和關係抽取。

三元組:(頭實體,關係,尾實體)例如(喬布斯,受僱於,蘋果公司)

對於“喬布斯是蘋果公司的 CEO”可以提兩個問題:

① 首先提的是頭問題,Q:人名是什麼?A:喬布斯

② 基於上一步的答案提出第二個問題,Q:喬布斯受僱於哪家公司?A:蘋果

基於機器閱讀理解(MRC)的信息抽取方法

上圖為,我們算法的詳細流程圖,首先得到 head Entity 頭實體,對於頭實體提問完之後,可以得到頭實體的答案,把頭實體的答案填入問題模板中,再獲得後面的實體。

基於機器閱讀理解(MRC)的信息抽取方法

目標函數就是 head-entity 的 Loss+tail-entity 的 Loss,然後進行一個加權。

問題模板如上圖所示,對於鄭強或者馬斯克的例子,我們可以問四個問題:

第一個問題是誰在這段話裡被提及了,也就是馬斯克或者鄭強。

第二個問題是鄭強在哪個公司任職,得到很多公司。

第三個問題是鄭強在這個公司的職務是什麼,得到職務。

最後,把上面三步的答案拼在一起得到最後一個問題,E1 在 E2 擔當 E3 的任職時間是什麼,得到 E4。

4. 多輪問答進行實體 - 關係抽取

接下來就是剛剛舉得例子,首先是第一個問題:

文中提到的人物有哪些?

基於機器閱讀理解(MRC)的信息抽取方法

然後是他的公司是什麼?

基於機器閱讀理解(MRC)的信息抽取方法

再分別問在每個公司的工作時間?

基於機器閱讀理解(MRC)的信息抽取方法

擔任什麼職務?

基於機器閱讀理解(MRC)的信息抽取方法

在越秀會計事務所工作的時間?

基於機器閱讀理解(MRC)的信息抽取方法

在其他公司擔任的職務,等等問題。

基於機器閱讀理解(MRC)的信息抽取方法

這樣通過閱讀理解的方案就得到了這樣一張表,也就是完成了從非結構化文本到結構化文本的轉換。

基於機器閱讀理解(MRC)的信息抽取方法

5. 強化學習

基於機器閱讀理解(MRC)的信息抽取方法

這裡在做閱讀理解的時候有一個問題:靠前實體的準確率會影響後續的信息抽取,這樣的問題在翻譯中也會遇到;訓練的時候我們一般會使用前面實體的 ground truth 填入後面實體的模板;在預測的時候,我們會使用實際預測出的答案,這樣就產生了一個訓練和預測的 gap,第三階段錯誤的實體,原因很有可能是第一階段的實體就錯了,這樣的 Loss 並沒有回傳給第一階段的實體。

所以,我們採用了強化學習的方法:

  • 每輪的動作:在所有可能中選取該輪的答案。
  • 策略:預先用 ground truth 訓練多輪 QA 的概率作為強化學習的初始策略,避免策略不穩定的情況。
  • 獎勵:得到的獎勵就是這個公式,得到這個公式之後就可以將 Loss 回傳,這樣後面輪數的 Loss 可以反饋給前面的輪數,使前面的輪數更加準確。

6. 實驗結果

基於機器閱讀理解(MRC)的信息抽取方法

我們發現在 ACE2004 和 2005 數據集上,Multi-turn 的方式相比於傳統的方式分別有 1 個點和 0.6 個點的提升。

Part5 性能優化

剛剛講了使用閱讀理解的方式來做信息抽取,使用的閱讀理解是基於 BERT 模型,由於 BERT 參數非常龐大,會遇到一些性能的問題:

1. 深度學習模型性能問題

基於機器閱讀理解(MRC)的信息抽取方法

在做 web service 時,由於用戶的請求是離散的,且大小不定,不易 batch 運算。

以 MASK LM 任務為例,一個 64 個字的句子做 MASK-LM 任務,封裝為 web service,我們發現 QPS 只有 12。因此,我們開發了 Service Streamer。

2. Service Streamer

基於機器閱讀理解(MRC)的信息抽取方法

Service Streamer 將服務請求排隊組成完整 batch,其好處有:

  • 簡單易用:只需要添加兩三行代碼即可讓模型提速上十倍;
  • 處理速度快:低延遲,專門針對速度做了優化;
  • 可擴展性好:可輕鬆擴展到多 GPU 場景,處理大量請求;
  • 適用性強:它是一箇中間件,適用於所有深度學習框架和 web 框架。
基於機器閱讀理解(MRC)的信息抽取方法

我們做了一個 benchmark,在一個普通的 Web Service 情況下,QPS 是 12,latency 是 8s,使用 ThreaedStreamer 可以增加到 208,繼續使用多進程的 Streamer 可以做到 321,使用 RedisStreamer 會在 350 左右,根據每次測量會有些區別。

在多 GPU 場景下,可以繼續提升性能,且非常容易擴展,當使用 2 張或者 4 張卡的時候,QPS 可以成比例的增加。

Part6 總結

最後小結下此次分享的主要內容:

  • 自然語言處理,重點介紹了 NLP 與深度學習結合的兩個範式。
  • 信息抽取,重點介紹了實體關係抽取的傳統做法及傳統做法的問題,傳統做法很難處理層級關係及準確率問題。
  • 機器閱讀理解,基於機器閱讀理解的信息抽取方法在結果上優於傳統做法。
  • 性能優化,利用 service streamer 中間件可以提升深度學習模型性能。


分享到:


相關文章: