SQuAD文本理解挑戰賽十大模型解讀

摘要: 引言 教機器學會閱讀是近期自然語言處理領域的研究熱點之一,也是人工智能在處理和理解人類語言進程中的一個長期目標。得益於深度學習技術和大規模標註數據集的發展,用端到端的神經網絡來解決閱讀理解任務取得了長足的進步。

引言

教機器學會閱讀是近期自然語言處理領域的研究熱點之一,也是人工智能在處理和理解人類語言進程中的一個長期目標。得益於深度學習技術和大規模標註數據集的發展,用端到端的神經網絡來解決閱讀理解任務取得了長足的進步。

本文是一篇機器閱讀理解的綜述文章,主要聚焦於介紹公佈在 SQuAD(Stanford Question Answering Dataset)榜單上的各類模型,並進行系統地對比和總結。

SQuAD 簡介

SQuAD 是由 Rajpurkar 等人 [1] 提出的一個最新的閱讀理解數據集。該數據集包含 10 萬個(問題,原文,答案)三元組,原文來自於 536 篇維基百科文章,而問題和答案的構建主要是通過衆包的方式,讓標註人員提出最多 5 個基於文章內容的問題並提供正確答案,且答案出現在原文中。

SQuAD 和之前的完形填空類閱讀理解數據集如 CNN/DM [2],CBT [3] 等最大的區別在於:SQuAD 中的答案不在是單個實體或單詞,而可能是一段短語,這使得其答案更難預測。

SQuAD 包含公開的訓練集和開發集,以及一個隱藏的測試集,其採用了與 ImageNet 類似的封閉評測的方式,研究人員需提交算法到一個開放平臺,並由 SQuAD 官方人員進行測試並公佈結果。

9273d5e75907ecafa939d4d4c9bf57dbb7c3fc93

圖1:一個(問題,原文,答案)三元組

模型

自從 SQuAD 數據集公佈以來,大量具有代表性的模型紛紛涌現,極大地促進了機器閱讀理解領域的發展,下面就 SQuAD 榜單上代表性的模型進行介紹。

總的來說,由於 SQuAD 的答案限定於來自原文,模型只需要判斷原文中哪些詞是答案即可,因此是一種抽取式的 QA 任務而不是生成式任務。

幾乎所有做 SQuAD 的模型都可以概括爲同一種框架:Embed 層,Encode 層,Interaction 層和 Answer 層。

Embed 層負責將原文和問題中的 tokens 映射爲向量表示;Encode 層主要使用 RNN 來對原文和問題進行編碼,這樣編碼後每個 token 的向量表示就蘊含了上下文的語義信息;Interaction 層是大多數研究工作聚焦的重點,該層主要負責捕捉問題和原文之間的交互關係,並輸出編碼了問題語義信息的原文表示,即 query-aware 的原文表示;最後 Answer 層則基於 query-aware 的原文表示來預測答案範圍。

c686daa648415f6ed35ec2dab7ea97e6a0b1ada6

圖2:一個高層的神經 QA 系統基本框架,來自[8]

Match-LST

Match-LSTM [4] 的 Answer 層包含了兩種預測答案的模式,分別爲 Sequence Model 和 Boundary Model。

Sequence Model 將答案看做是一個整數組成的序列,每個整數表示選中的 token 在原文中的位置,因此模型按順序產生一系列條件概率,每個條件概率表示基於上輪預測的 token 產生的下個 token 的位置概率,最後答案總概率等於所有條件概率的乘積。

Boundary Model 簡化了整個預測答案的過程,只預測答案開始和答案結束位置,相比於 Sequence Model 極大地縮小了搜索答案的空間。

最後的實驗也顯示簡化的 Boundary Model 相比於複雜的 Sequence Model 效果更好,因此 Boundary Model 也成爲後來的模型用來預測答案範圍的標配。

在模型實現上,Match-LSTM 的主要步驟如下:

  • Embed 層使用詞向量表示原文和問題;
  • Encode 層使用單向 LSTM 編碼原文和問題 embedding;
  • Interaction 層對原文中每個詞,計算其關於問題的注意力分佈,並使用該注意力分佈彙總問題表示,將原文該詞表示和對應問題表示輸入另一個 LSTM 編碼,得到該詞的 query-aware 表示;
  • 在反方向重複步驟 2,獲得雙向 query-aware 表示;
  • Answer 層基於雙向 query-aware 表示使用 Sequence Model 或 Boundary Model 預測答案範圍。

BiDAF

70b23c4c582625e760025515999510ffcc7630b2

相比於之前工作,BiDAF(Bi-Directional Attention Flow)[5] 最大的改進在於 Interaction 層中引入了雙向注意力機制,即首先計算一個原文和問題的 Alignment matrix,然後基於該矩陣計算 Query2Context 和 Context2Query 兩種注意力,並基於注意力計算 query-aware 的原文表示,接着使用雙向 LSTM 進行語義信息的聚合。

另外,其 Embed 層中混合了詞級 embedding 和字符級 embedding,詞級 embedding 使用預訓練的詞向量進行初始化,而字符級 embedding 使用 CNN 進一步編碼,兩種 embedding 共同經過 2 層 Highway Network 作爲 Encode 層輸入。

最後,BiDAF 同樣使用 Boundary Model 來預測答案開始和結束位置。

Dynamic Coattention Networks

51440ba3fc8bcb160e69bf4b8f7b5342d65c108f

DCN [6] 最大的特點在於 Answer 層,其 Answer 層使用了一種多輪迭代 pointing 機制,每輪迭代都會產生對答案開始和結束位置的預測,並基於這兩個預測使用 LSTM 和 Highway Maxout Network 來更新下一輪的答案範圍預測。

而在 Interaction 層,DCN 使用和 BiDAF 類似的雙向注意力機制計算 query-aware 的原文表示。

Multi-Perspective Matching

7d9eac0d5d93eb4ef2ba162e7e33303bad257b0a

Multi-Perspective Matching [7] 在 Encode 層同樣使用 char,word 兩個 embedding,只不過 char embedding 使用 LSTM 進行編碼。

在 Encode 層之前,該模型使用一個過濾操作,作用是過濾掉那些和問題相關度低的原文詞。該模型最大的特點在 Interaction 層,該層針對每個原文詞使用一種 multi-perspective 的匹配函數計算其和問題的匹配向量,並使用 BiLSTM 來進一步聚合這些匹配向量。

匹配的形式包括每個原文詞和整個問題的表示匹配,每個原文詞和每個問題詞匹配後進行最大池化,和每個原文詞和每個問題詞匹配後進行平均池化。

最後在 Answer 層,基於匹配向量聚合表示使用兩個前饋網絡來預測答案開始和結束位置。

FastQAExt

9c8ee56e523eab0394a987eaf142eed87cccf27e

FastQAExt [8] 使用了一種輕量級的架構,其 Embed 層除了 word 和 char 兩種 embedding 作爲輸入以外,還額外使用了兩個特徵:

1. binary 特徵表示原文詞是否出現在問題中;

2. weighted 特徵表示原文詞對於問題中所有詞的相似度。並且這兩個特徵同樣用在了問題詞上。

在 Interaction 層,FastQAExt 使用了兩種輕量級的信息 fusion 策略:

1. Intra-Fusion,即每個原文詞和其他原文詞計算相似度,並彙總得到原文總表示,接着將該原文詞和對應原文總表示輸入 Highway Networks 進行聚合,聚合後原文詞表示進一步和上下文詞表示進行類似的聚合;

2. Inter-Fusion,即對每個原文詞計算和問題詞的相似度,並彙總得到問題總表示,接着將將該原文詞和對應問題總表示輸入 Highway Networks 進行聚合,得到 query-aware 原文表示。

此外,在 Answer 層,FastQAExt 首先計算了一個問題的總表示,接着將 query-aware 原文表示和問題總表示共同輸入兩個前饋網絡產生答案開始和結束位置概率。在確定答案範圍時,FastQAExt 使用了 Beam-search。

jNet

9e1451e9809fc2057039135212cd31a3282caefe

jNet [9] 的 baseline 模型和 BiDAF 類似,其在 Interaction 層除了對每個原文詞計算一個對應的問題表示以外,還將 Alignment Matrix 按原文所在維度進行池化(最大池化和平均池化),池化後的值表示原文各詞的重要程度,因此基於該值對原文表示進行過濾,剔除不重要的原文詞。

在 Answer 層,jNet 不僅先預測答案開始位置再預測答案結束位置,還反向地先預測答案結束位置再預測答案開始位置。最後對兩方向概率求平均後作爲總概率輸出。

jNet 的最大創新在於對問題的理解和適應。爲了在編碼問題表示時考慮句法信息,jNet 使用 TreeLSTM 對問題進行編碼,並將編碼後表示作爲 Interaction 層的輸入。

爲了對不同問題進行適應,jNet 首先使用了問題類型的 embedding,將該 embeeding 作爲 Interaction 層輸入。

另外,jNet 定義了 K 個 cluster 的中心向量,每個 cluster model 了一個特定的問題類型比如"when","where"等,接下來的適應算法分爲兩步:adapting 和 updating。

Adapting 指根據問題總表示和 K 個 cluster 的相似度來更新出一個新的問題表示,並輸入 Interaction 層;Updating 層旨在修改 K 個 cluster 的中心以令每個 cluster 可以 model 不同類型的問題。

Ruminating Reader

56d88d3cf32f442e9b6212f7a8af505551d59e5e

Ruminating Reader [10] 是 BiDAF 的改進和擴展,它將之前的單 Interaction 層擴展爲了雙 Interaction 層。

第一個 Interaction 層和 BiDAF 的 Interaction 層相同,輸出 query-aware 的原文表示。query-aware 原文表示經過一個雙向 LSTM 編碼,其輸出的最後一位隱層狀態作爲 query-aware 原文表示的總結。

接着,該總結向量依次與各原文詞表示和各問題詞表示經過一個 Highway Network 處理,以將總結向量的信息重新融入原文和問題表示當中。

最後,基於更新後的原文和問題表示,使用第二個 Interaction 層來捕捉它們之間的交互,並生成新的 query-aware 的原文表示。Ruminating Reader 的 Embed 層,Encode 層和 Answer 層和 BiDAF 相同。

ReasoNet

bb4cf91013fdd133cd692ac98935974f40d64ab0

和之前介紹的 Embed-Encode-Interaction-Answer 框架不同,ReasoNet [11] 使用了 Memory Networks 的框架[12]

在使用 BiRNN 編碼問題和原文後,問題的最後一位隱層狀態初始化爲一箇中間狀態 s,而原文和問題表示作爲 Memory。

接下來是一個多輪迭代的過程,在每一輪迭代中,中間狀態 s 首先經過一個邏輯迴歸函數來輸出一個 binary random variable t,t 爲真,那麼 ReasoNet 停止,並且用當前中間狀態 s 輸出到 Answer 模塊產生對答案的預測。

否則,中間狀態 s 會和 Memory(原文和問題)中每一位表示計算注意力,並基於注意力求原文和問題的加權表示 x,x 和 s 共同作爲一個 RNN 的輸入,產生新的中間狀態 s 並進入下一輪迭代。

由於出現了 binary random variable,ReasoNet 使用了強化學習的方法進行訓練。

R-NET

b6b6ba81afb42fbded233fe104faa2e10a6780bf

R-NET [13] 同樣使用了雙 Interaction 層架構,其第一 Interaction 層負責捕捉原文和問題之間的交互信息,而第二 Interaction 層負責捕捉原文內部各詞之間的交互信息。

具體來說,在第一 Interaction 層,r-net 首先使用了類似於 Match-LSTM 的方法,即對原文中每個詞,計算其關於問題的注意力分佈,並使用該注意力分佈彙總問題表示,將原文該詞表示和對應問題表示輸入 RNN 編碼,得到該詞的 query-aware 表示。

不同的是,在原文詞表示和對應問題表示輸入 RNN 之前,r-net 使用了一個額外的門來過濾不重要的信息。

接着,在第二 Interaction 層,r-net 使用了同樣的策略來將 query-aware 表示進一步和自身進行匹配,將回答答案所需的證據和問題信息進行語義上的融合,得到最終的原文表示。

在其他方面,r-net 的 Embed 層同樣使用了 word 和 char 兩種 embedding 以豐富輸入特徵。

在 Answer 層,r-net 首先使用一個 attention-pooling 的問題向量作爲一個 RNN 的初始狀態,該 RNN 的狀態和最終的原文表示共同輸入一個 pointer networks 以產生答案開始概率。

接着基於開始概率和原文表示產生另一個 attention-pooling 向量,該向量和 RNN 狀態共同經過一次 RNN 更新後得到 RNN 的新狀態,並基於新狀態來預測答案結束概率。Mnemonic Reader

bed1985b883187f0448934c855e00124f7ba4978

相比於之前的工作,我們的 Mnemonic Reader [14] 同樣使用了類似於 r-net 和 Ruminating Reader 的兩層 Interaction 層設計。

其中第一個 Interaction 層負責捕捉原文和問題之間的交互信息,第二 Interaction 層負責捕捉原文內部的長時依賴信息。

不同於 r-net 的是,r-net 使用了單向注意力+門機制來編碼這些交互信息,而 Mnemonic Reader 使用了雙向注意力機制來編碼交互信息,因此能夠捕捉更加細粒度的語義信息。

在 Answer 層,我們使用對問題敏感的表示方法,具體來說,問題表示分爲兩種:顯式的問題類型 embedding 和隱式的問題向量表示。

進一步地,我們使用了 Memory Network [12] 的框架來預測答案範圍,將問題表示作爲一個可更新的記憶向量,在每次預測答案概率後將候選答案信息更新至記憶向量中。

該過程可以持續多輪,因此可以根據之前預測信息來不斷修正當前預測,直到產生正確的答案範圍。

性能對比

下圖是 SQuAD 榜單排名,其中 EM 表示預測答案和真實答案完全匹配,而 F1 用來評測模型的整體性能。

值得一提的是,人類在 SQuAD 數據集上的性能分別爲 82.3 和 91.2,微軟亞洲研究院的 R-NET 模型和阿里巴巴的 SLQA 模型在 EM 值上分別以 82.650 和82.440 率先超過人類。

f30c31ba6e382cbcadc87f5d1a171ddaeca378d3

△ 圖3:SQuAD leaderboard上的各模型性能對比(2018年1月13日)

總結

總結以上工作,有以下幾點思考:

1) 大規模語料集的構建是推進機器閱讀理解發展的重要前提。從 15 年提出的 CNN/DM 完形填空數據集,到近期的 SQuAD 數據集,再到之後的若干新數據集,每一個新數據集都提出了當前方法無法有效解決的新問題,從而促使研究人員不斷探索新的模型,促進了該領域的發展。

2) 針對抽取式閱讀理解任務,可以看到有如下幾個技術創新點:

  • 建立在單向或雙向注意力機制上的 Interaction 層對於模型理解原文和問題至關重要,而[10][13][14]中更復雜的雙 Interaction 層設計無疑要優於之前的單 Interaction 層設計,原因是在問題-原文交互層之上的原文自交互層使得更多的語義信息能在原文中流動,因此在某種程度上部分解決了長文本中存在的長時依賴問題。
  • 多輪推理機制如[6][11][14]對於回答複雜問題具備一定幫助,尤其是針對 SQuAD 中的答案不是一個單詞而可能是一個短語的情況,多輪推理機制可以不斷縮小預測範圍,最終確定正確答案位置。
  • 對問題敏感的問題表示方法[9][14]能夠更好地 model 各類型問題,並根據問題類型聚焦於原文中的特定單詞,比如 when 類問題更加聚焦於原文中的時間信息,而 where 類問題更關注空間信息。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章