【機器閱讀理解】Fast and Accurate Reading Comprehension by Combining Self-Attention and Convolution

來源:ICLR 2018 論文鏈接

方向:機器閱讀理解

解決問題:通過結合自注意力機制和卷積來快速和準確地閱讀理解

創新點

以往端到端機器閱讀和問答(Q&A)模型主要基於遞歸神經網路(RNN),這些模型往往對訓練和推理都很慢,本文改變了以往機器閱讀理解均使用RNN進行建模的習慣,使用卷積神經網路結合自注意力機制組成編碼器,完成機器閱讀理解任務。其中,卷積神經網路可建模局部結構信息,而自注意力機制可建模全文互動(Interaction)關係,這兩點就足以完成機器閱讀理解任務。

貢獻

(1)提出了一個高效的閱讀理解模型,它完全建立在卷積和自注意力的基礎之上。與RNN相比,在SQuAD數據集上,模型訓練速度提高3倍到13倍,推理速度提高4倍到9倍,同時獲得與遞歸模型同樣的精度,加速增益使我們的模型成為擴展到更大數據集的最有前途的候選者。

(2)為了改善在SQuAD上的結果,本文提出了一種新的數據增強技術,通過「解釋」來豐富訓練數據通過將原始句子從英語翻譯成另一種語言,然後翻譯成英語來解釋這些例子,這不僅增加了訓練實例的數量,而且還使句子多樣化。在SQuAD數據集上,使用增強數據訓練的模型在測試集上達到了84.6的F1分數。

模型設計

卷積捕獲文本的局部結構,而自我注意力學習每個單詞對之間的全局相互作用。額外的上下文查詢attention為上下文段落中每個位置構建query-aware上下文向量,用於後續建模層次。我們架構的前饋特性顯著加速了模型。

模型

1、問題制定

閱讀理解任務定義如下:

C= left{ c_{1},c_{2},...,c_{n} 
ight} :包含n個詞的上下文段落

Q= left{ q_{1},q_{2},...,q_{m} 
ight} :包含m個詞的查詢語句

S= left{ c_{i},c_{i+1},...,c_{i+j} 
ight} :原始段落C的輸出

x :原始單詞和它的嵌入矢量, xin C,Q

2、組成

一般閱讀理解的標準構建模型由五個層次組成:嵌入層,嵌入編碼器層,上下文查詢注意力層,模型編碼器層和輸出層。本文的方法和其他方法之間的主要差異如下:對於嵌入和建模編碼器,只使用卷積和自注意力機制,而不是RNN。

(1)輸入嵌入層

通過連接詞嵌入和字元嵌入來獲得每個單詞w的嵌入。詞嵌入在訓練期間是固定的,並且用訓練期間固定的 p_{1}=300 維預先訓練的GloVe單詞向量初始化。所有OOV詞被映射為一個<UNK>標記,其嵌入用隨機初始化訓練。

字元嵌入獲得如下:每個字元被表示為維度 p_{2}=200 的可訓練向量,這意味著每個單詞可以被視為該單詞每個字元的嵌入向量的連接。每個單詞的長度要麼被截斷或填充為16。取這個矩陣的每一行的最大值來獲得每個單詞的固定大小的向量表示。

最後,來自該層的給定單詞x的輸出是連接left[ x_{w};x_{c} 
ight]in R^{p_{1}+p_{2}} ,其中 x_{w}x_{c} 分別是詞嵌入和字元嵌入的卷積輸出。為了簡單起見,也使用x來表示這層的輸出。

(2)嵌入編碼器層

編碼器層是以下基本構建塊的堆棧:[卷積層×#+自注意層+前饋層],如模型圖右上所示。使用深度可分卷積而不是傳統卷積,內核大小為7,過濾器數量為d = 128,塊內的conv層數為4。

對於自注意力層,採用了multi-head注意機制,對於輸入中的每個位置(查詢),基於由點積衡量的查詢和密鑰的相似度計算輸入中所有位置或密鑰的加權和。所有層次的頭數都是8。這些基本操作(conv / self-attention / ffn)中的每個都放置在一個殘差塊內,如模型圖右下方所示。

對於輸入x和給定操作f,輸出為 f(layernorm(x))+ x ,這意味著從每個塊的輸入到輸出存在完整的同一性路徑。編碼器塊的總數是1。該層的輸入是每個單詞的向量,維數p1 + p2 = 500,通過一維卷積立即映射到d = 128。該層的輸出也是維數d = 128。

(3)上下文查詢注意力層

這個模塊幾乎是每個閱讀理解模型的標準。本文使用C和Q來表示編碼的上下文和查詢。上下文-查詢的注意力構造如下:首先計算每對上下文和查詢詞之間的相似度,得到相似度矩陣 Sin R^{n	imes m} 。然後,通過應用softmax函數來標準化S的每一行,得到一個矩陣 ar{S} ,其中上下文-查詢注意力被計算為 A=ar{S}cdot Q^{T} in R^{n	imes d} 。這裡使用的相似函數是三線函數:

f(q,c)=W_{0}[q,c,q odot c]

其中⊙是數組元素依次相乘, W_{0} 是可訓練變數。

大多數高性能模型還使用某些形式的查詢-上下文的注意力。DCN注意力比僅僅應用上下文-查詢注意力要更好,所以本文採用這種策略。更具體地說,本文用softmax函數計算S的列歸一化矩陣S,查詢-上下文的注意力是:

(4)模型編碼器層

本層在每個位置的輸入是[c, a, c⊙a, c⊙b],其中a和b分別是注意力矩陣A和B的行。層參數與嵌入編碼器層一樣,除了在一個塊內卷積層數為2並且塊的總數為7。在模型編碼器的3個重複之間共享權重。

(5)輸出層

這一層是特定於任務的。 SQuAD中的每個示例都在包含答案的上下文中標有span。開始和結束位置的概率被建模為:

其中W1和W2是兩個可訓練變數,M0,M1,M2分別是三個模型編碼器的輸出,從下到上。跨度的得分是其開始位置和結束位置概率的乘積。最後,目標函數被定義為在所有訓練樣本上平均的真實開始和結束指數索引的預測分布的負對數概率和:

其中 y_{i}^{1}y_{i}^{2} 分別是實例i的地面真實開始和結束位置,θ包含所有可訓練變數。

3、推理

在推斷時,選擇預測跨度(s,e),使得 p_{s}^{1}p_{s}^{2} 最大並且s≤e。標準的動態規劃可以用線性時間獲得結果。

通過反向翻譯增加數據

由於模型速度很快,可以用更多的數據來訓練它。因此,將模型與簡單的數據增強技術相結合,以豐富訓練數據。使用兩種翻譯模式,一種是從英語翻譯成法語(或任何其他語言)的翻譯模式,另一種翻譯模式是從法文翻譯成英文,以獲得文本的解釋。這種方法有助於自動增加大量任何基於語言的任務(包括我們感興趣的閱讀理解任務)的訓練數據量。隨著更多數據的使用,可以更好地規範我們的模型。圖2說明了增強過程,法語是關鍵語言。

解釋過程如下:假定法語是關鍵語言。首先,將輸入序列送入English-to-French模型的beam解碼器以獲得k個法語翻譯。然後將每個法語翻譯通過反向翻譯模型的beam解碼器以獲得輸入序列的總共 k^{2} 個解釋。

處理SQUAD文檔和答案

現在討論針對SQuAD數據集的具體過程,這對獲得最佳性能至關重要。SQuAD的每個訓練例子都是(d,q,a)三元組,其中文檔d是一個多句子段落,其答案為a。在解釋時,保持問題q不變(以避免意外地改變其含義)並生成(d,q,a)的新三元組,以便新文檔d具有新答案a。這個過程分兩步進行:

(i)文檔釋義:把d解釋為d

(b)答案提取:從d中提取與a緊密匹配的a。

對於文檔釋義步驟,首先將段落拆分成句子並獨立解釋它們。k = 5,所以每個句子有25個釋義選項。通過用隨機選擇的釋義簡單地替換d中的每個句子來形成新的文檔d。這種簡單的方法的一個顯而易見的問題是原始答案a可能不再存在於d中。

答案抽取解決了上述問題。假設原始句子s包含原始答案a,s是其解釋。通過簡單的啟發式識別定義新解釋的答案如下。計算s中的每個單詞和a的開始/結束單詞之間字元級2-gram得分,以在s中找到可能答案的開始和結束位置。在所有候選釋義答案中,關於a的具有最高字元2-gram分數的答案被選為新答案。

實驗觀察到提出的數據增強可以在精度方面帶來改進。 這種技術也適用於其他監督自然語言處理任務,特別是當訓練數據不足時。

結論

在本文中,提出了一個快速準確的機器閱讀理解的端到端模型。 核心創新是徹底消除基礎模型中的RNN。 得到的模型完全前饋,由可分離的卷積,注意力,線性層和層規範化組成,這適合於並行計算。 由此產生的模型既快速又準確:它超過了SQuAD數據集上最好的公布結果,而比訓練/推理迭代的競爭循環模型快13/9倍。 此外,通過利用數據增強來獲得顯著收益,這種增加包括將語境和段落對翻譯成另一種語言和從另一種語言翻譯出來,作為解釋問題和背景的一種方式。


推薦閱讀:

torchtext入門教程,輕鬆玩轉文本數據處理
吳恩達 DeepLearning.ai 課程提煉筆記(5-2)序列模型 --- NLP和詞嵌入
Learning to Skim Text 閱讀筆記
為何讀不懂你的那個TA
show and tell 代碼閱讀筆記

TAG:自然語言處理 |