中文機器閱讀理解

Chinese Marchine Reading Comprehension

適用針對文章提出問題並從中抽取出答案 (用文章中一段原文來回答問題)

本文由 Ian Wang 撰寫初稿後再進行編修,可能會持續更新

那些自然語言處理 (Natural Language Processing, NLP) 踩的坑

中文文本糾錯中文文本分類中文文本相似度中文實體識別
Meeting & Minutes Master | TW Deep Master
Call for Partner or POC (Proof of Concept) Contact: TonTon ( at ) TWMAN.ORG
#naturallanguageprocessing_deeplearning101

投入約120天,早期想上線需要不少計算資源 (沒有昂貴的GPU想上線簡直是難如登天,好險時代在進步,現在CPU就能搞定)。記得我2018從老闆口中第一次聽到新項目是機器閱讀理解時,一頭霧水不知道是在幹麼,Google後突然發現這還真是它X的超級難的東西,而當時落地場景是要解決機器人在博物館或者展場的Q&A,不想再預先建一堆關鍵字與正規表示式來幫相似度和分類做前處理。

但機器閱讀理解坑真的不小,首先當然是數據,公開數據有SQuAD 1.0和2.0,但這是英文,你想用在中文 ? 你可以自己試試啦,再來有了個中文的CMRC,但用得是對岸用語跟簡體中文,而且數據格式不太一樣;後來台達電放出了DRCD還有科技部辦的科技大擂台,依然有格式不同的問題,數據量真的不太夠,所以想要落地你真的得要自己標註。

為了解決像是多文章還有問非文章內問題,還有公開數據要嘛英文不然就是簡體中文或對岸用語,然後本地化用語的數據實在不足的狀況,小夥伴們真的很給力,我們也用機器翻譯SQuAD 1.0和2.0還有自己手工爬維基百科跟開發了數據標註系統自己標註 ! 不得不說小夥伴們真的是投入超多精神在機器閱讀理解,更在Deep Learning 101做了分享。

機器閱讀理解 (Machine Reading Comprehension,MRC)

2020「科技大擂台 與AI對話」(Fun Cup)網頁上的範例題目及答案

(https://fgc.stpi.narl.org.tw/activity/2020_Talk2AI_X_FunCup)。

範例題目:受氣候影響,今年龍眼蜂蜜產量銳減,由高雄市農業局舉辦的國產龍眼蜂蜜評鑑,參加數量只有往年的一半,評鑑結果出爐有20名蜂農獲獎,而參賽蜂蜜各項檢驗全數通過,雖然產量少但品質不受影響。

問題:哪個縣市的龍眼蜂蜜品質有口皆碑 ?

選項:1.台中市、2.南投縣、3.屏東縣、4.高雄市

答案:4

繁體中文數據集:https://github.com/DRCKnowledgeTeam/DRCD

簡體中文數據集:https://github.com/ymcui/cmrc2019

英文數據集:https://rajpurkar.github.io/SQuAD-explorer/

什麼是機器閱讀理解?跟自然語言處理有什麼關係? 機器閱讀理解 (機器之心) 一文讀懂機器閱讀理解 (朱晨光) 機器閱讀理解與問答聊天機器人

機器閱讀理解綜述(一) 機器閱讀理解綜述(二) 機器閱讀理解綜述(三) 機器閱讀理解探索與實踐

PPT @ HD @ No. 41 @ Deep Learning 101 Marchine Reading Comprehsesion 2020/05/29

  • 使電腦具備像人類一樣理解文章的能力;自動處理分析文字資料並從中抽取語義知識

  • 輸入為文章和問題文字,輸出為最終的回答;無論哪種閱讀理解模型,其訓練過程都依賴於人工標註的資料,大量文章–問題–答案的三元組

  • 使對文章和問題進行文字編碼(詞向量/ word vector):將文字分成若干單詞,然後用一串數字(即一個向量)表示一個單詞。

  • 傳統的搜尋引擎只能返回與使用者查詢相關的檔,而閱讀理解模型可以在檔中精確定位問題的答案,從而提高使用者體驗。

https://github.com/huggingface/transformers

The Stanford Question Answering Dataset (SQuAD) 中文 GLUE

機器閱讀理解現有模型匯整

BiDAF在embedding部分也同時引入word-embedding與char-embedding兩種embedding方法,讓模型的輸入包含更多資訊。而其最大的特點,為在Interaction層中引入了雙向attention機制,計算Query2Context和Context2Query兩種query-aware表示,再利用雙向LSTM對兩種query-aware進行整合,可更加有效的得出文章與問題之間的關係。最後預測答案的方式,則與Match-LSTM同樣使用boundary model的方法。

RuminatingReader算是加強版的BiDAF模型。他將BiDAF的架構中Interaction的輸出經過Highway Network的處理,將資訊加入至原文與原問題中。之後把帶有資訊的文章與問題再次輸入Interaction層計算,得出新的query-aware表示,其餘部分則與BiDAF基本上相同。藉由二次的重複計算attention,將原本已計算出的文章與問題相互關係做再一次地確認與強化,能在文章中更加準確地預測答案位置。

Match-LSTM架構較為簡單,用單層的LSTM對embedding過的文字做雙向編碼,再引入attention機制,計算出每個詞的query-aware表示,最後導入Answer層計算答案。計算答案的方式分為sequence model或boundary model兩種方式,但在最後實驗證明了簡化的boundary model比sequence model有著更好的效果,所以之後也預設以boundary model作為預測答案的方式。

在QANet的架構中,便捨棄了傳統RNN的編碼方式,而使用self-attention的機制。為此建立了一名為encoder block的子區塊,內含多個卷積層、self-attention與FeedForward layer。在文章與問題經過embedding後便利用encoder block對其進行編碼,之後引用與BiDAF相同的Context-Query attention計算文章與問題之間的相互關係。最後在接上多個encoder block,便進入output layer計算答案位置。QANet的結果證實,以self-attention取代RNN,並增加層數的方式能得出更好的結果。

在Transformer之中存在一個問題,就是在計算attention時,能擷取的上下文長度為固定的,導致超過長度之外的資訊可能就無法獲得。所以提出Transformer-XL架構,特色為將計算的hidden state緩存起來,在之後計算新片段時,能夠將hidden state重複使用,擴展獲取的前文資訊。但與此同時又產生新的問題,在hidden state的位置資訊原本是採用絕對位置,但引入上述機制後會導致性能損失。對此,Transformer-XL的解決方法為使用相對位置編碼,相對於絕對位置更加直觀,且能解決上述性能耗損的問題。

同樣建立在seq2seq的基礎上,但在過程中捨棄RNN,使用多層的attention替代。整個架構可分成encoder與decoder,兩者皆由多個block組成。encoder的block包含一個Multi-Head Attention和一個Feed Forward Network,而decoder的block則是由兩個Multi-Head Attention和一個Feed Forward Network組成。其中每個Multi-Head Attention和Feed Forward Network都採取類似 ResNet 的方法,後面加上一層 Add & Norm。由於Transformer捨棄了舊有的RNN與attention組合,改為全attention的構成,因此缺少了位置資訊。也就是說(a, b, c, d)與(d, c, b, a)這兩種組合在Transformer中視沒有區別的。所以在input時,Transformer會多出一個名為positional embedding的輸入,保留各個文字的位置資訊。

中文機器閱讀理解標註工具 (開發者:Alice Hong, Nat Lee)