1. 程式人生 > >QANET: COMBINING LOCAL CONVOLUTION WITH GLOBAL SELF-ATTENTION FOR READING COMPREHENSION 論文閱讀筆記

QANET: COMBINING LOCAL CONVOLUTION WITH GLOBAL SELF-ATTENTION FOR READING COMPREHENSION 論文閱讀筆記

原文連結:https://openreview.net/pdf?id=B14TlG-RW


Abstract


  目前的端到端機器閱讀和問答模型主要基於包含注意力的迴圈神經網路,拋開優點。這些模型的主要缺點:在訓練和推理方面效率較低。 因此我們提出了一種名為QANet的問答架構,這個網路不需要使用遞迴網路,它的編碼器完全由卷積和self-attention組成,卷積網路處理區域性資訊,self-attention處理全域性範圍內的資訊。在SQuAD資料集中,我們模型的訓練速度提高了3至13倍,推理速度提高了4至9倍,同時達到了與迴圈模型相媲美精確度。加速增益(speed-up gain)使我們能夠用更多的資料來訓練模型。因此,我們將我們的模型,與由神經機器翻譯模型的反向翻譯生成的資料結合起來。在SQuAD資料集上,我們使用增強資料訓練的單一模型在測試集中F1值達到 84.6,這顯著優於過去公佈的F1最佳值81.8。

Introduction


  人們對機器閱讀理解和自動回答問題的工作越來越感興趣,在過去幾年中最成功的模型通常採用了兩項關鍵要技術:

(1)使用迴圈網路模型處理序列化資料(2)在長期互動的過程中引入注意力機制。Seo等人於2016年提出的的雙向注意力流(Bidirectional Attention Flow,BiDAF)模型將這兩項要素成功地結合在了一起,該模型在SQuAD資料集上取得了顯著的效果。這些模型的一個缺點是,它們的迴圈特性使得它們在訓練和推理方面的效率通常較低,特別是對於長文字而言。昂貴的訓練不僅會導致實驗的週期延長,限制研究人員進行快速迭代,還會使模型難以被用於更大的資料集中。與此同時,緩慢的推理速度阻礙了機器理解系統在實時應用中的部署。 
  在本文中,為了使機器理解更高效,我們提出去掉這些模型的迴圈性質,僅將卷積和自注意力作為編碼器的構成模組,分別對問題和文章進行編碼。然後,我們通過標準注意力(Xiong et al., 2016; Seo et al., 2016; Bahdanauet al., 2015)來學習文章和問題之間的互動。在最終對每個作為答案範圍的開始或結束位置的概率進行解碼之前,用我們的無迴圈編碼器再次對結果表徵進行編碼。我們將該架構稱為QANet。 如圖1所示:


  模型設計的主要思想:卷積捕獲文字的區域性結構,而自注意力則學習每對單詞之間的全域性互動。此外在隨後的建模過程中使用問題-文章attention機制來來對文章中每個位置構建query-aware context vector。我們的前饋網路架構極大地提高了模型的效率。在SQuAD資料集的實驗中,我們模型的訓練速度提高了3至13倍,推理速度提高了4至9倍。作一個簡單的比較,我們的模型可以在3個小時的訓練中達到與BiDAF模型(Seo等人於2016年提出)相同的精確度(F1值為77.0),在此之前,這一過程需花費15個小時的時間。加速增益還允許我們使用更多的迭代來訓練模型,以獲得比競爭模型更好的結果。例如,如果我們允許我們的模型進行18個小時的訓練,它在開發集(dev set)上的F1值達到了82.7,這比Seo等人於 2016年提出的模型,表現得要好很多,並且與已釋出過的最佳結果相媲美。

       在SQuAD資料集上,使用資料進行訓練後的QANe模型在測試集上的F1值為84.6,明顯優於Hu et al. (2017).發表的81.8的最好成績。我們還進行ablation test,以證明我們的模型的每個元件的有效性。綜上所述,本文的貢獻如下:

  • 我們提出了一種高效的閱讀理解模式,它完全建立在卷積和self-attention基礎上。據我們所知,我們是第一個這樣做的。這種組合保持了較好的準確性,同時與RNN的對應演算法相比,在每次訓練迭代中,可以實現高達13倍的訓練加速和9倍的訓練迭代。訓練速度使我們的模型最有希望擴充套件到更大的資料集。
  • 為了提高模型在SQuAD資料集上的成績,我們提出了一種新的資料增強技術,通過轉述來豐富訓練資料。它使模型達到比最先進的技術更高的精度。

THE MODEL

        在這一節中,我們首先將閱讀理解問題公式化的表示,然後闡述QANet模型:它是一個前饋模型,只包含卷積和自注意力機制,通過驗證得出這是一個有效的組合,也是我們工作的一個貢獻。

PROBLEM FORMULATION

        閱讀理解問題在本文中做出如下的定義,給出一個問題段落使用C表示,其中C包含n個word,問題句子由m個word組成, 通過這些在原文中產生一個範圍S,在後續的文章中,我們使用x既表示word也表示其詞向量。

MODEL OVERVIEW

從總體來看,我們模型的結構與大多數現有模型相似,它們包含五個主要部分:

  • an embedding layer,
  • an embedding encoder layer,
  • a context-query attention layer, a
  • model encoder layer
  • an output layer
     

        嵌入層、嵌入編碼器層、上下文查詢注意層、模型編碼器層和輸出層,如圖1所示。這些是大多數現有閱讀理解模型的標準組成部分。然而,我們的方法與其他方法的主要區別在於:無論是embedding還是encoder,我們都只使用卷積網路和self-attention,拋棄了大多數現有閱讀理解模型使用的rnn機構。因此,我們的模型更快,因為它可以並行處理輸入的單詞。值得一提的是,雖然自self-attention在Vaswani et al. (2017a)中已經得到了廣泛的應用,但是卷積與自我注意的結合是首次提出的,明顯優於單獨的自我注意力機制,在我們的實驗中得到了2.7 F1的增益。卷積的使用也使得我們可以利用普通的對流網路正則化方法,如stochastic depth (layer dropout) Huang et al., 2016),這在我們的實驗中增加了0.2 F1的增益。

Input Embedding Layer.
        embedding部分大同小異,通過將詞w的詞嵌入和字元嵌入連線起來得到w的詞嵌入。embedding在訓練過程中是固定的,使用初始大小為300D的Glove詞向量 作為初始化向量,(Pennington et al., 2014)。對於OOV的詞,都對映到一個隨機初始化的UNK向量。character-level的訓練過程如下:每個字元表示為維度200D的可訓練向量,即每個單詞可以看作是每個字元的嵌入向量的連線。每個單詞的長度要麼被截斷,要麼被填充為16。我們取這個矩陣的每一行的最大值,得到每個單詞的固定大小的向量表示。最後,該層給出的單詞x的輸出是連線[x_w;x_c] ,其中x_w和x_c分別是單詞嵌入和字元嵌入的卷積輸出。在Seo等(2016)之後,我們還在此表示之上採用了two-layer highway network(Srivastava等,2015)。為了簡單起見,我們還使用x表示這一層的輸出。

Embedding Encoder Layer.
編碼器層以下基本構件組成:[convolution-layer×# + self-attention-layer + feed-forward-layer],如圖1中所示。我們使用深度可分卷積網路(Chollet, 2016) (Kaiser et al.,2017)而不是傳統卷積,因為我們認為它具有更好的記憶效率和更好的通用性。核心大小為7,filters的數量為d = 128,塊中的conv層的數量為4。self-attention-layer,我們採用多頭注意力機制(Vaswani et al .,2017),對於輸入的每個位置被稱為query,通過點乘的方式計算query與keys之間的相似性,然後通過所有位置來計算權重,所有層的頭數是8。這些基本操作(conv/self-attention/ffn)都放在一個塊中,如圖1右下角所示。對於輸入x和給定的操作f,輸出為f(layernorm(x))+x,即每個塊從輸入到輸出有一個完整的標識路徑,其中layernorm表示(Ba et al., 2016)中提出的分層規範化。編碼器塊的總數是1。注意,這一層的輸入是每個單詞的維數p1 + p2 = 500的向量,它通過一維卷積立即對映到d = 128。這一層的輸出也是維度d = 128

Context-Query Attention Layer

這個模組在之前的閱讀理解模型中基本都有使用,如Weissenborn et al.(2017)和Chen et al.(2017)。我們使用C和Q來表示編碼的文章和問題。context-to-query attention通過如下方法獲得,我們計算每一對文章和問題詞之間的相似之處通過相似性矩陣S表示, 然後通過softmax函式進行歸一化,得到S一拔,然後context-to-query attention通過以下公式計算得到,

這裡使用的trilinear function(Seo et al., 2016): 

 式中為元素點乘,W0為可訓練變數。

大多數高效能模型還使用某種形式的問題文章attention,例如BiDaF (Seo et al., 2016)和DCN (Xiong et al., 2016)。從經驗上講,我們發現DCN注意力比簡單地應用context-to-query attention有一丟丟好處,所以我們採用了這種策略。更具體地說,我們用softmax函式計算S的列標準化矩陣S,得到context-to-query attention矩陣

Model Encoder Layer
與Seo等(2016)類似,該層在各個位置的輸入為

其中a和b分別是注意矩陣a和b的一排,層引數與嵌入編碼器層相同,只是在一個塊內卷積層數為2,塊總數為7。我們在模型編碼器的3次重複之間共享權重。


Output layer

這一層是特定於任務的。SQuAD的每個例子都在包含答案的上下文中標記了一個span。我們採用Seo et al.(2016)的策略來預測在回答跨度的開始或結束的上下文中每個位置的概率。更具體地說,開始和結束位置的概率被建模為

其中W1和W2為可訓練變數和M0;M1;M2分別是三個模型編碼器的輸出,從下到上。span的得分是其起始位置和結束位置概率的乘積。最後,目標函式被定義為由真實的開始和結束索引的預測分佈的對數概率的負和,在所有的訓練例子中取平均值: 

y1和y2分別是真是的開始和結束位置。

DATA AUGMENTATION BY BACKTRANSLATION

由於我們的模型是快速的,我們可以用更多的資料來訓練它。因此,我們將模型與一種簡單的資料增強技術相結合,以豐富訓練資料。這個想法是使用兩種trans- 4作為會議論文發表在ICLR 2018翻譯模型,一種從英語到法語(或任何其他語言)的翻譯模型和另一種從法語到英語的翻譯模型,以獲得文字的意譯。這種方法可以幫助自動增加任何基於語言的任務的訓練資料量,包括我們感興趣的閱讀理解任務。有了更多的資料,我們希望能更好地規範我們的模型。圖2以法語為關鍵語言說明了增強過程

在本研究中,我們考慮了基於注意力的神經機器翻譯(NMT)模型Bahdanau等(2015);Luong et al.(2015),其中Wu et al.(2016)翻譯質量優秀,是我們資料擴充管道的核心模型。具體來說,我們使用了Luong et al.(2017)提供的公開可用的codebase3,它複製了谷歌的NMT (GNMT)系統Wu et al.(2016)。我們在公開的WMT資料上為英法(36M對)和英德(4500 m對)訓練了4層GNMT模型。如Luong et al.(2017)所述,所有資料都被標記化並分解為子詞單元。所有的模型都使用相同的超引數,並使用不同的步數進行訓練,英語法語為2M,英語德語為340K。我們的英法系統在newstest2014上實現了36.7 BLEU的法文翻譯和35.9 BLEU的反向翻譯。對於英語德語和newstest2014,我們獲得了27.6 BLEU的翻譯成德語和29.9 BLEU的相反方向。

 我們的釋義過程如下,假設法語是一種關鍵語言。首先,我們將輸入序列輸入到英法模式的波束譯碼器中,得到k個法文翻譯。然後將每一個法文翻譯通過反向翻譯模型的波束譯碼器,得到輸入序列的共k2個釋義。

Relation to existing Works.
與現有工程的關係。雖然反向翻譯的概念以前已經被引入,但它經常被用來改進相同的翻譯任務Sennrich et al.(2016)或內在意譯評價Wieting et al. (2017);馬林森等(2017)。我們的方法是一種新的應用反向翻譯豐富訓練資料的下行任務,在這種情況下,問答(QA)任務。值得注意的是(Dong et al., 2017)採用意譯技術改進QA;但是,他們只是轉述問題,並沒有像我們在本文中所做的那樣專注於資料擴充方面

Handling SQuAD Documents and Answers.

我們現在討論我處理SQuAD 資料集的具體過程,這是最重要的效能提高。記住,SQuAD 的訓練樣本都是(d;q;a)其中d文件是一個多句的段落,答案是a。在改述的時候,我們保持問題q不變(為了避免不小心改變它的意思),生成新的三元組(d0;q0;a0)這樣新文件d0中就有了新的answe a0。該過程分為兩個步驟:

(i)文件釋義-將d釋義為d0,

(b)答案提取-從d0中提取與a匹配度非常接近的a0。

對於文件釋義步驟,我們首先將段落分割成句子,分別進行釋義。我們用k = 5,所以每個句子有25個意譯選項。一個新的文件d0是通過簡單地用隨機選擇的意譯替換d中的每個句子而形成的。一個明顯的問題與這個方法最初的回答在d0可能不再存在。答案提取解決了上述問題。讓我們以包含原答案a的原句為例,以s0為釋義。我們用簡單的啟發式來識別新釋義的答案如下。計算s0中每個單詞與a的開始/結束單詞之間的字元級2克分數,找出s0中可能答案的開始和結束位置。在所有轉述答案中,選擇字元2克分數最高的一個作為新的答案a0。表1顯示了這個過程找到的新答案的示例。

 意譯的質量和多樣性是資料增強方法的關鍵。改進該方法的質量和多樣性仍然是有可能的。使用更好的翻譯模型可以提高翻譯質量。例如,我們發現轉述明顯長於我們的模型的最大訓練序列長度的內容往往在中間被切斷。在波束搜尋解碼過程中,對資料集中出現的問題和答案進行釋義和取樣,可以提高資料集的多樣性。此外,我們還可以將該方法與其他資料增強方法相結合,例如type swap方法(Raiman & Miller, 2017),以獲得更多的釋義多樣性。在我們的實驗中,我們觀察到所提出的資料擴充可以在準確性方面帶來不小的改善。我們認為這種方法也適用於其他受監督的自然語言處理任務,尤其是在訓練資料不足的情況下。

4 EXPERIMENTS

在這一節中,我們進行了實驗來研究我們的模型和資料增強技術的效能。我們將主要在團隊資料集(Rajpurkar et al., 2016)上對我們的模型進行基準測試,這被認為是問答中最具競爭力的資料集之一。我們還對另一個Q&A資料集TriviaQA (Joshi et al., 2017)進行了類似的研究,表明我們模型的有效性和效率是一般的。
 

4.1 EXPERIMENTS ON SQUAD


4.1.1 DATASET AND EXPERIMENTAL SETTINGS


Dataset.
我們考慮用於機器閱讀理解的斯坦福問答資料集(SQuAD) (Rajpurkar et al., 2016)。SQuAD包含107.7K對查詢答案,其中87.5K對用於培訓,10.1K對用於驗證,10.1K對用於測試。段落的長度通常在250左右,而問題是10個標記,雖然有特別長的情況。只有培訓和驗證資料是公開可用的,而測試資料是隱藏的,必須將程式碼提交給Codalab,並與(Rajpurkar et al., 2016)的作者一起檢索最終測試

在我們的實驗中,我們提交了我們最好的單一模型的測試集結果。為了進一步分析,我們只報告驗證集的效能,因為我們不想通過頻繁提交來探測不可見的測試集。根據我們實驗和前期工作的觀察,如s (Seo et al., 2016; Xiong et al., 2016; Wang et al., 2017; Chen et al., 2017),驗證得分與測試得分之間存在較好的相關性。

Data Preprocessing.

我們使用NLTK分詞對資料進行預處理。最大的上下文長度設定為400,超過400的段落將被丟棄。在訓練過程中,我們按長度對例子進行批處理,並動態填充特殊符號< pad >的短句子。最大回答長度設定為30。我們使用訓練好的300D單詞向量(Pennington et al., 2014),將所有詞彙外的單詞替換為<UNK>,這個詞向量在培訓期間進行更新。每個字元嵌入被隨機初始化為一個200維的向量,並在訓練中進行更新。我們生成兩個額外的資料集,其中包含140 k和240 k的例子。

Training details.

我們採用兩種型別的標準正則化。首先,我們使用L2重量衰變在所有可訓練的變數,引數λ= 3×10−7。此外,我們還對word、character embedded和layer之間使用dropout,其中word和character的輟學率分別為0.1和0.05,每兩層之間的dropout率為0.1。我們也採用stochastic depth method (layer dropout) (Huang et al., 2016)在每個嵌入或模型編碼器層

隱藏的大小和卷積過濾器都是128,批量大小是32,訓練步驟是原始資料的150 k,250 k“資料增強×2”,和340 k”資料增強×3”。嵌入和建模編碼器的卷積層數分別為4和2,卷積大小分別為7和5,編碼器的塊號分別為1和7。我們用Adam優化器(Kingma & Ba, 2014)
 β1 = 0:8;β2 = 0:999; e= 10−7。我們使用一個學習速率熱身方案,在前1000步從0.0增加到0.001,然後在剩餘的訓練中保持一個恆定的學習速率。指數移動平均適用於所有衰減率為0.9999的可訓練變數。最後,我們使用Tensorflow (Abadi et al., 2016)在Python中實現了我們的模型,並在NVIDIA p100 GPU上進行了實驗

4.1.2 RESULTS

準確性。F1和precision Match (EM)是衡量模型效能準確性的兩個指標。F1測量預測結果與groundtruth之間的重疊令牌的比例,如果預測結果與groundtruth完全相同,則精確匹配得分為1,反之為0。我們將結果與表2中的其他方法進行了比較。為了進行公平和全面的比較,我們都在最新的論文/預印本中報告了發表的結果,並在排行榜上報告了更新但沒有記錄的結果。我們認為後者是未發表的結果。從表中可以看出,我們的模型的精度(EM/F1)效能與最先進的模型是一致的。特別是我們在原始資料集上訓練的模型在EM和F1得分上都優於文獻中記載的所有結果(見表2第二列),採用適當的取樣方案對增強資料進行訓練後,我們的模型在EM/F1上可以獲得顯著的1.5/1.1的增益。最後,我們在正式測試集上的結果是76.2/84.6,顯著優於記錄最好的結果73.2/81.8。

在RNNs加速。為了測量我們的模型相對於RNN模型的加速,我們還測試了相應的模型體系結構,每個編碼器塊都被替換為一個雙向LSTMs堆疊,就像在大多數現有模型中使用的那樣。具體來說,每一個(嵌入和模型)編碼器塊分別被替換為1層、2層或3層雙向LSTMs,因為這些層號屬於閱讀理解模型的通常範圍(Chen et al., 2017)。所有這些LSTMs都隱藏了128大小。加速比的結果如表3所示。我們可以很容易地看到,我們的模型比所有基於RNN的模型都要快得多,並且在訓練中,我們的速度差在3到13倍之間,在推理中,我們的速度差在4到9倍之間。

在BiDAF模型上的加速。此外,我們還使用相同的硬體(NVIDIA p100 GPU),並將我們的模型與經典的基於SQuAD模型BiDAF model14(Seo et al., 2016)進行了相同效能的訓練時間比較。為了獲得最佳效能,我們通常在原始程式碼中採用預設設定,其中用於訓練和推理的批大小都是60。我們唯一改變的部分是優化器,這裡使用了Adam with learning 0.001,與Adadelta一樣,我們得到了更差的效能。結果如表4所示,我們的模型在訓練和推理速度上分別比BiDAF快4.3和7.0倍。此外,我們只需要1 / 5的訓練時間就可以在dev set上取得BiDAF F1的最好成績(77:0)。

 

CONCLUSION
 

本文提出了一種快速、準確的機器閱讀理解端到端模型QANet。我們的核心創新是完全去除編碼器中的重複網路。得到的模型是完全前饋的,完全由可分卷積、注意、線性層和層歸一化組成,適用於平行計算。結果模型既快又準確:它超過了在班組資料集上釋出的最好結果,同時比訓練/推理迭代的競爭性重複模型快13/9倍。此外,我們發現,我們可以利用由翻譯上下文和段落對構成的資料擴充來解釋問題和上下文,從而獲得顯著的收穫。