QANet
來自專欄自然語言理解論文筆記1 人贊了文章
ICLR 2018 的一篇機器閱讀理解的文章。
https://arxiv.org/pdf/1804.09541.pdf之前的閱讀理解和問答的模型基本都是基於RNN做的,效果雖然不錯,但訓練和預測速度都比較慢。這篇文章提出了一種新的框架,使用CNN和self-attention來構建模型,訓練速度大大提升,同時,使用翻譯大法進行數據增強,在SQuAD數據集和TriviaQA數據集上都取得了on par with the state-of-the-art的效果。模型結果如下所示,主要包括Input Embedding Layer,Embedding Encoder Layer,Context-Query Attention Layer,Model Encoder Layer和Output Layer,下面分開講。
Input Embedding Layer
輸入層的常規處理,word embedding拼接char embedding,維度分別是300和200,每個word的char embedding通過取max得到。
We take maximum value of each row of this matrix to get a fixed-size vector representation of each word
然後在此基礎上套兩層Highway Network
Embedding Encoder Layer
Embedding Encoder Layer是由若干個Encoder Block堆起來的,這裡用了一個block,每個Encoder Block基本構成如下圖所示,從下往上分別是multi-convolution-layer + self-attention layer + feedforward layer,其中卷積層使用depthwise separable convolutions,相對傳統卷積層內存佔用少、泛化性更好,kernel size=7,num filters=128,一共用了4層。然後self-attention採用了multi-head attention機制,head數量設置為8. 然後是feedforward層。最後,這幾個基本單元外面都套了residual block,輸入和輸出是直通的,保證了沒有信息的丟失,並且每層計算之前都會做layer normalization。
Context-Query Encoder Layer
計算query和context詞與詞兩兩之間相似度,然後用softmax歸一化,對於每個context中的詞,用歸一化後的權重計算query詞的加權和就得到context-to-query attention,這和BiDAF (Seo et al., 2016)裡面的操作是一樣的,然後query-to-context方向的attention參考了DCN (Xiong et al., 2016)。
Model Encoder Layer
這一層也是使用Encoder Block疊起來的,和Embedding Encoder Layer的差別在於,每個block裡面的使用2個卷積層,一共用了7個block,kernel size是5。
Output Layer
輸出層的設計和(Seo et al., 2016)一致,預測context中每個詞是邊界的概率。
Data Augmentation By Backtranslation
因為模型訓練更快了,所以可以考慮用更多的數據來訓練。大概思想就是把現有語料翻譯到另一種語言然後再翻譯回來。本文的具體操作:對每條數據(d, q, a),d-文檔,q-問題,a-答案,把d翻譯得到法語,在翻譯模型的beam search階段保留k個候選,然後每個候選再翻譯回英語,一共得到k^2個結果,在這k^2個結果里隨機選一個作為d,考慮到原來的答案a不一定出現在d中,所以需要在d中找到一個區間作為a,使得a和a盡量接近,這裡使用了highest character 2-gram score作為評估指標。
Result And Discussion
從上表中可以看到,不使用數據增強時,本文的結果就超越了當時所有已發表的結果。另外,作者也提到了使用數據增強的效果,在EM和F1上分別提升了1.5和1.1,但這好像從表裡沒體現出來。還有一點比較尷尬的就是,當時排行榜上出了BiDAF + Self Attension + ELMo的結果,直接把本文的結果給比下去了。。然後後面作者就開始重點分析了加速的效果了。
可以看到,無論是training還是inference階段加速效果都是蠻明顯的。
最後,作者還在TriviaQA數據集上做了實驗,這裡就不貼圖了,模型效果上也是on par with the state-of-the-art on the Verified dev set,但加速也是非常明顯。
總體來講,本文完全拋棄了RNN的做法,使用cnn + self-attention來做,cnn可以處理局部信息交互,self-attention可以處理全局信息交互,所以最終模型效果和state-of-art基本持平。另外,因為拋棄了RNN,所以模型訓練和預測時間大大降低,一方面,訓練效率的提高使得我們可以採用更多的數據,另一方面,預測效率的提高也使得模型在線上實時應用成為可能。
推薦閱讀: