原文鏈接:Bidirectional Attention Flow for Machine Comprehension

作者:Minjoon Seo,Aniruddha Kembhavi,Ali Farhadi,Hannaneh Hajishirzi

Bidirectional Attention Flow for Machine Comprehension

摘要

機器理解( MC )是基於給定的文本段落,來回答一個query。完成這個需要對上下文和query之間的複雜交互關係進行建模。最近,注意力機制已經成功地擴展到MC。通常,這些方法使用attention集中在小部分內容上,並用固定大小的向量對其進行總結,在時間上耦合注意力,和/或形成單向注意力。在本文中,我們介紹了雙向注意力流( BIDAF )網路,這是一個多階段的分層過程,它以不同的粒度級別表示上下文,並使用雙向注意力流機制來獲得query-aware上下文表示,而無需提前總結。我們的實驗評估表明,我們的模型在斯坦福問答數據集(sQuAD)和CNN/DailyMail完形填空測試中達到了最先進的結果。

1導言

在過去的幾年裡,機器理解( MC )和問答( QA )的任務發展迅速。經過端到端訓練的系統現在在文本和圖像領域的各種任務上取得了很好的結果。進步的一個關鍵因素是attention機制的使用,這使得系統能夠集中在上下文段落(對於MC )或圖像(對於視覺QA )中與回答問題最相關的目標區域。以前工作中的attention機制通常具有以下一個或多個特徵。首先,計算出的注意力權重通常用於從上下文中提取最相關的信息,通過將上下文匯總成固定大小的向量來回答問題。其次,在文本而言,它們通常是時間動態的,即當前時間步的注意力權重是前一時間步的參與向量的函數。第三,它們通常是單向的,即用query來關註上下文。

在本文中,我們介紹了雙向注意力流( BIDAF )網路,這是一種分層的多階段體系結構,用於在不同粒度級別對上下文段落的表示進行建模(圖1 )。BIDAF包括character-level, word-level, and contextual embeddings,並使用雙向注意力流來獲得query-aware上下文表示。我們的注意力機制有以下改進。首先,我們的attention層不用於將上下文段落總結成固定大小的向量。取而代之的是,為每個時間步計算attention值,並且允許每個時間步的向量以及來自先前層的向量流至後續建模層。這減少了早期總結造成的信息損失。第二,我們使用無記憶的注意力機制。也就是說,當我們像(Bahdanau等人,2015)那樣通過時間迭代計算attention時,每個時間步的attention僅是當前時間步的query和上下文段落的函數,並不直接依賴於前一時間步的attention。我們認為這種簡會化導致注意力層和建模層之間的分工。它迫使attention層專註於學習query和上下文之間的關係,並使建模層專註於學習query-aware文本表示之間的關係(attention層的輸出)。它同樣允許每個時間步的attention可以不被以前時間步的錯誤的attention所影響。我們的實驗展示我們的無記憶attention比動態attention更有優勢。第三,我們在兩個方向上使用attention機制,query-to-context and context-to-query,它們之間會彼此補充信息。

在提交時,我們的BIDAF模型在競爭激烈的斯坦福問答數據集(sQuAD)測試集排行榜上的表現優於以前的所有方法。通過只修改輸出層,BIDAF在CNN/DailyMail完形填空測試中獲得了最先進的結果。我們還在sQuAD上對我們的模型進行了深入的消融研究,對模型中的中間特徵空間進行了可視化,並分析了與傳統的機器理解語言模型相比的性能。

2 MODEL

我們的模型是一個多層多步驟的過程,包含6層:

(1) .字元嵌入層 使用字元級CNNs將每個單詞映射到向量空間。

(2) .單詞嵌入層 使用預先訓練的單詞模型將每個單詞映射到向量空間。

(3) .上下文嵌入層 利用來自周圍單詞的上下文線索來改進單詞的嵌入。前三層應用於query和context。

(4) .注意力流層 將query和上下文向量拼接起來,並為上下文中的每個單詞生成一組查query-aware特徵向量。

(5) .建模層 使用遞歸神經網路來掃描上下文。

(6) .輸出層 為query提供答案。

1 .字元嵌入層 字元嵌入層負責將每個單詞映射到高維向量空間。讓{ x1,...xT }和{q1,...qJ }分別表示輸入context paragrap和query中的單詞。我們使用卷積神經網路( CNN )獲得每個單詞的字元級嵌入。字元被嵌入到向量中,向量可以被認為是CNN的1D輸入,其大小是CNN的輸入信道大小。CNN的輸出在整個寬度上被max-pooled,以獲得每個單詞的固定大小向量。

2 .單詞嵌入層 單詞嵌入層還將每個單詞映射到高維向量空間。我們使用預訓練的單詞向量,glove,以獲得每個單詞的固定單詞嵌入。字元級和詞嵌入的向量經過拼接後會被送到一個兩層的Highway Network (Srivastava et al., 2015)。輸出是兩個d維向量的序列,或者直接說兩個矩陣 X∈R^{d*T} for the context和 Q∈R^{d*J} for the query。

3 .上下文嵌入層。我們使用一個長期短期記憶網路( LSTM )來模擬單詞之間的時序交互。我們在兩個方向放置一個LSTM,並連接兩個LSTM的輸出。因此,我們從context向量X獲得 H∈R^{d*T} ,從query詞向量Q獲得 U∈R^{d*J} 。請注意,H和U的每個列向量都是2d維度的,因為前向和後向LSTMs的輸出拼接在一起,而每個列向量都有d維輸出。

值得注意的是,模型的前三層是不同粒度級別的query和context的特徵計算,類似於計算機視覺領域中卷積神經網路的多階段特徵計算。

4. Attention Flow Layer

Attention流層負責鏈接與融合query和context的信息。和以前流行的attention機制不一樣,我們的模型不會把query和context變成一個單一的特徵向量。我們的模型在每個時間步,其attention向量都會和之前層的嵌入向量,一起進入modeling層。這可以減少因為early summarization引起的信息損失。

這一層的輸入是context H和query U。這一層的輸出是context的query-aware向量表示,以及之前得到的context表達。

這一層中,我們從兩個方向計算attention,從context到query和從query到context。這兩個attention都會從一個共享的相似度矩陣得到 S∈R^{T*J} ,這個矩陣將從H與U計算得到。Stj的含義是context中的第t個向量和query的第j個向量的相似度。相似度矩陣的計算方法是: S_{tj}=α(H_{:t},U_{:j})∈R ,其中α是一個可訓練的函數,可以在兩個輸入向量中編碼出相似度。 H_{:t} 是H的第t列, U_{:j} 是U的第j列。我們使 α(h,u)=w^T_{(s)}[h;u;hcirc u]

,其中 w(s)∈R^{6d} 是一個可訓練的權重向量,o是點乘,;是行之間的向量拼接,默認的乘法是矩陣相乘。之後我們便可以利用S來獲得兩個方向的attention和關注向量。

Context-to-query Attention: Context-to-query (C2Q) attention表明哪個query辭彙對每一個context更為相關, Sigma a_{tj}=1 for all t。Attention權重 a_t=softmax(S_{t:})∈R^J

,並且接下來每一個參與的query 向量都要聚合 U_{:t}=Sigma _ja_{tj}U_{:j} 。因此,U是一個2d*T的矩陣,包含所有的query信息。

Query-to-context Attention: Query-to-context (Q2C) attention表示對query中某個詞來說哪一個context詞有最接近的相似度,這個詞對回答問題至關重要。我們獲得在context辭彙上的attention權重,通過計算 b=softmax(max_{col}(S))∈R^T

,其中的最大值函數是通過列計算的。之後,關注度文本向量是 h=Sigma _tb_tH_{:t}∈R^{2d}

。這個向量表示在context上對query最重要的詞的加權和。h在列方向上疊加T次,因此變成 H∈R^{2d*T}

最後,文本嵌入和attention向量會在G域上結合,其中每一列都可以被視為每一個context詞的query-aware表示,G的計算方法如下:

其中G:t是第t列向量,對於第t個詞,β是一個可以把三個輸入向量融合的訓練權重。dG是β函數的輸出維度。雖然β可以通過神經網路訓練,類似於多層感知機,但其實一個簡單的拼接也可以在我們的實驗中獲得極佳的結果:

5. Modeling Layer: 這一層的輸入是G,可以編碼query-aware的表示。輸出可以捕獲基於query的context單詞之間的交互關係。這與文本嵌入層不一樣,後者捕獲關係的時候是獨立於query的。我們使用一個兩層的雙向lstm,每個方向的輸出是d維,由此我們可以獲得一個矩陣 M∈R^{2d*T} ,這個矩陣將用來預測答案。M的每一列向量都包含這個單詞考慮所有context和query的上下文信息。

6. Output Layer.: 輸出層專門為任務設置。BiADF的模塊特性允許我們保留其他層不變地情況下輕鬆地得到任務的結果。第5節中,我們將為完形填空任務對這層進行輕微的改動。

QA任務需要模型去找到段落的子集去回答query。這一步是通過預測這個子集的開始索引和結束索引來實現。我們獲得開始索引的概率分佈如下:

其中 w_{(p^1)}∈R^{10d} 是一個可訓練權重向量。為了得到結束索引,我們將M再通過一個雙向LSTM,獲得 M^2∈R^{2d*T} ,然後我們通過M2來獲得結束索引的概率分佈,方法類似:

Training: 我們定義訓練損失為實際的開始結束索引在預測的概率分佈中概率值的負log函數,我們將所有訓練樣本的loss平均:

其中θ是模型中所有的可訓練權重。N是數據集個數, y^1_i和y^2_i 是第i個數據的實際的開始和結束索引。 p_k 表示向量p的第k個值。(其實就是真實分佈和預測分佈的交叉熵)。

3 RELATED WORK

Machine comprehension: 可用的大數據集是MC模型發展的一個重要貢獻。早期數據集,如McTest,難以訓練端到端的模型。大量完形填空測試數據集(赫爾曼等人的CNN/DailyMail , 2015年)和(Hill等人的Childrens Book Test ,2016年) ,使得深度神經架構能夠應用於這項任務。最近,(Rajpurkar等人, 2016年)發布了斯坦福問答數據集,包含超過100,000個問題。我們在SQuAD和CNN/DailyMail數據集上評估我們理解系統的性能。

以前在端到端機器理解方面的工作主要有三組。第一組 (Bahdanau et al. (2015)) 使用動態注意力機制,其中,給定query和context以及先前的注意力,注意力權重被動態更新。Hermann et al. (2015) 認為動態注意力模型比使用單一的固定query向量來關注CNN和DailyMail數據集上的上下文詞更好。 Chen et al. (2016) 表明,簡單地使用雙線性項來計算同一模型中的注意力權重大大提高了準確性。Wang & Jiang ( 2016年)將注意力的方向顛倒過來(隨著上下文RNN的進展,關注query的詞)。與這些模型相反,BIDAF使用無記憶注意力機制。

第二組計算注意力權重一次,然後將注意力權重送到輸出層用於最終預測 (e.g., Kadlec et al. (2016)).。attention-over-attention model (Cui et al., 2016) 使用query和上下文單詞之間的2D相似性矩陣(類似於等式1 )來計算query到上下文注意力的加權平均值。與這些模型相反,BIDAF沒有總結注意力層中的兩種模態,而是讓注意力向量流入建模層。

第三組(被認為是記憶網路的變體) (Weston et al., 2015)) 通過多層重複計算query和上下文之間的關注向量,通常稱為多步(Sordoni et al., 2016; Dhingra et al., 2016). Shen et al. (2016) 將記憶網路與強化學習相結合,以便動態控制步數。我們也可以擴展BIDAF模型,加入多步。

4 QUESTION ANSWERING EXPERIMENTS

在這一小節,我們使用最近發布的SQuAD數據集,這模型在幾個月內引起了廣泛關注。SQuAD是大量維基百科文章的機器理解數據集,有超過10萬個問題。每個問題的答案都是文章中的一個範圍。如果該模型的答案與人類的答案相匹配,則該模型會得到認可。兩個指標被用來評估模型:精確匹配( EM )和一個較軟的指標F1分數,F1分數衡量在字元級的精準率和召回率的加權平均。數據集由90k / 10k組成訓練集和驗證集,以及一個大的隱藏的測試集。它是最大的MC數據集之一,有人工編寫的問題,是我們模型的一個很好的測試平臺。

Model Details

模型模型架構如圖1,問題的分詞器是(PTB Tokenizer)。我們使用100個1D的filter給CNN的字元嵌入,每個的寬度為5.隱藏層為100。模型一共2.6 million參數。使用ADaDeita優化器,minibatch size 為60,初始學習率為0.5,12個epoch。Dropout為0.2。訓練時滑動平均指數延遲率為0.999.測試時,滑動平均數代替原來的權重。在一個Titan X gpu上我們訓練了20小時。我們同時訓練了一個12個模型的集成模型。測試時,對於每一個問題,我們從12個模型中,選擇最高置信度的結果。

Results

表1a總結了我們的模型結果和其他模型的準確率。BIDAF (集成)的EM得分為73.3,F1得分為81.1,優於以前的所有方法。

Ablations

表1b顯示了我們模型的性能及其在SQuAD上的剝離研究。字元級和單詞級嵌入都有助於模型的性能。我們推測單詞級嵌入更好地表示每個單詞的整體語義,而字元級嵌入可以更好地處理oov的單詞或者稀少的單詞。為了評估雙向注意力,我們去除了C2Q和Q2Cattention。為了消除C2Q注意力,我們用問題的上下文嵌入層( LSTM )的輸出向量的平均值來代替關注的問題向量U。C2Q注意力被證明是至關重要的,兩個指標都下降了10點以上。為了消除Q2C注意力,注意力層G的輸出不包括具有所關注Q2C向量H的項。為了評估注意力流,我們研究了一個動態注意力模型,其中注意力在模型層的LSTM中動態計算。這與我們的方法形成對比,在我們的方法中,注意力是在流向建模層之前預先計算的。儘管是一種更簡單的注意力機制,我們提出的靜態注意力比動態計算的注意力強3點以上。我們推測,分離注意力層會導致在前4層中計算出更豐富的特徵集,然後被建模層合併。我們還展示了BIDAF在附錄B中對α和β函數的幾種不同定義下的性能。

可視化

現在,我們對在SQuAD上的模型進行定性分析。首先,我們將單詞和上下文嵌入層之後的特徵空間可視化。這兩層負責對齊query和上下文詞之間的嵌入,上下文詞是後續關注層的輸入。為了可視化嵌入,我們在dev數據中選擇幾個頻繁的query詞,並查看與query詞具有最高餘弦相似性的context詞(表2 )。在單詞嵌入層,諸如「when」、「where」和「who」等query單詞與context中的可能答案不太一致,但是這在上下文嵌入層(即經過rnn後)中發生了巨大的變化,上下文嵌入層可以從周圍的單詞中訪問上下文,並且僅比關注層低1層。When開始匹配year,where匹配location,who匹配name。

在圖2中,我們還使用t - SNE可視化了這兩個特徵空間。t - SNE在很大一部分驗證數據上執行,但是我們只繪製與一年中的月份相對應的數據點。單詞空間中出現了一個有趣的模式,因為五月在英語中有多種含義,所以五月與其餘月份是分開的。上下文嵌入層使用上下文線索和周圍單詞,並且能夠區分單詞May的用法。最後,我們在圖3中可視化了dev數據中一些question-context元組的注意力矩陣。在第一個例子中,Where匹配位置,在第二個例子中,many匹配數量和數字元號。此外,問題中的實體通常關註上下文中的相同實體,從而為模型提供了定位可能答案的特徵。

Discussions

我們用傳統的基於語言特徵的baseline來分析我們模型的性能。圖2b顯示了模型正確回答的驗證集問題的Venn圖。對於baseline可以正確回答的問題,我們的模型能夠回答86 %以上。剩餘的14%都沒有一個清晰的模式。這表明,神經架構能夠利用語言特徵捕捉到大部分信息。我們也按問題中的第一個詞來細分這個比較(圖2c )。我們的模型在每一個類別上都比傳統baseline表現得更好。

Error Analysis

我們隨機選擇50個不正確的問題(基於EM ),並將其分為6類。50 %的錯誤是由於答案的邊界不精確,28 %涉及句法複雜性和歧義,14 %是釋義問題,4 %需要外部知識,2 %需要多個句子來回答,2 %是由於標記化過程中的錯誤。有關錯誤模式的示例,請參見附錄A。(譯者:附錄我就先不翻了哈)

6 結論

在本文中,我們引入BIDAF,這是一個多階段的分層過程,它以不同的粒度級別表示上下文,並使用雙向注意力流機制來實現query-aware的上下文表示,而無需提前總結。實驗評估表明,我們的模型在斯坦福問答數據集和CNN/DailyMail完形填空測試中達到了state-of-the-art的結果。消融分析顯示了我們模型中每個組成部分的重要性。可視化和discussion表明,我們的模型正在學習MC的合適表示,並且能夠通過關注給定段落中的正確位置來回答覆雜的問題。未來的工作包括擴展我們的方法,將注意力層和多步推理結合起來。

Bidirectional Attention Flow for Machine Comprehension(完)

有任何疑問或者糾錯,作者隨時在線哦

關注專欄

隨經典論文看機器閱讀理解發展史?

zhuanlan.zhihu.com圖標
推薦閱讀:

相關文章