中文機器閱讀理解

Chinese Marchine Reading Comprehension

適用針對文章提出問題並從中抽取出對應的答案

POC (Proof of Concept): TonTon ( at ) TWMAN.ORG

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

機器閱讀理解 (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/

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

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)