歡迎光臨
每天分享高質量文章

近期有哪些值得讀的QA論文?| 專題論文解讀

作者丨徐阿衡

學校丨卡耐基梅隆大學碩士

研究方向丨QA系統

知乎專欄丨徐阿衡-自然語言處理

FastQA

■ 論文 | Making Neural QA as Simple as Possible but not Simpler

■ 連結 | https://www.paperweekly.site/papers/835

■ 作者 | Dirk Weissenborn / Georg Wiese / Laura Seiffe

閱讀理解系列的框架很多大同小異,但這篇 paper 真心覺得精彩,雖然並不是最新最 state-of-art。

現在大多數的閱讀理解系統都是 top-down 的形式構建的,也就是說一開始就提出了一個很複雜的結構(一般經典的就是 emedding-, encoding-, interaction-, answer-layer),然後透過 ablation study,不斷的減少一些模組配置來驗證想法,大多數的創新點都在 interaction 層。


這篇 paper 提供了抽取式 QA 基於神經網路的兩個 baseline,BoW- 和 RNN-based nerual QA (FastQA) ,創新的以 bottom-up 的方式分析了框架複雜性以及主流 interaction layer 的作用。 


一個基本認識,構建好的 QA 系統必不可少的兩個要素是: 


1. 在處理 context 時對 question words 的意識;


2. 有一個超越簡單的 bag-of-words modeling 的函式,像是 RNN。


另外,作者還發現了很多看似複雜的問題其實透過簡單的 context/type matching heruistic 就可以解出來了,過程是選擇滿足條件的 answer spans: 


1. 與 question 對應的 answer type 匹配比如說問 when 就回答 time;


2. 與重要的 question words 位置上臨近如下圖的 St. Kazimierz Church。



FastQA 的表現對額外的複雜度,尤其是 interaction 的複雜互動,提出了質疑。


A BoW Neural QA System 


比照傳統思路來構建。


1. Embedding 


詞向量和字向量的拼接,字向量用 CNN 進行訓練,


2. Type matching 


抽取 question words 得到 lexical answer type (LAT)。抽哪些? 


  • who, when, why, how, how many, etc. 

  • what, which 後面的第一個名詞短語,如 what year did… 


將 LAT 的第一個和最後一個單詞的 embedding,以及 LAT 所有單詞的平均的 embedding 拼接起來,再透過全連線層和 tanh 做一個非線性變換得到 ẑ 。


用同樣方法對每個 potential answer span (s, e) 做編碼。所有 span,最長為 10 個單詞,同樣把 span 裡第一個和最後一個單詞的 embedding 和所有單詞的 embedding 進行拼接,又因為 potential answer span 周圍的單詞會對 answer span type 提供線索(比如上文提到的 St. Kazimierz Church),所以額外的拼接了 span 往左、往右 5 個單詞的平均 embedding,這樣一共就是 5 個 embedding,接 FC 層和 tanh 非線性變換,得到 x̂s,e。


最後,拼接 LAT 和 span 的表示,[ẑ;x̂s,e;ẑ☉x̂s,e],用一個前饋網路計算每個 span (s,e) 和 LAT 的分數 gtype (s,e)。


3. Context Matching 


引入兩個 word-in-question 特徵,對 context 中的每個單詞 x_j:


  • binary

    ,如果 x_j 出現在了 question 中,就為 1,否則為 0。

  • weighted

    計算 qi 和 xj 的詞向量相似性。


Softmax 保證了 infrequent occurrences of words are weighted more heavily. 


對每個 answer span(s,e),計算往左、往右 5/10/20 token-windows 內的平均分數,也就是計算 2(kind of features) 3(windows) 2(left/right)=12個分數的加權和得到 context-matching score,各分數的權重由訓練得到。


4. Answer span scoring 


最後每個 span(s,e) 的分數就是 type matching score 和 context matching score 的和。


最小化 softmax-cross-entropy loss 進行訓練。


FastQA 


上面的方法中語意特徵完全被縮減成了 answer-type 和 word-in-question features,另外 answer span 也受到了長度限制,對語意的捕捉很弱。 


BiRNN 在識別 NER 上面非常有優勢,context matching 也可以透過給 BiRNN 喂 wiq-features 得到,answer-type 會間接由網路學習得到。 


模型相對簡單,就三層 embedding-, encoding-, answer layer

1. Embedding:和 BoW baseline 相同;


2. Encoding:為了讓 question 和 context embedding 可以互動,先對映到 n 維向量,再過一個 highway layer。

然後加上 wiq features。

再一起過一個 BiRNN,輸出再做個 projection。

初始化 project matrix B 為 [In;In],In 是 n 維的 identity matrix,H 是 forawrd 和 backward LSTM 的輸出的加和。 


question 和 context 的引數共享,question 對應的兩個 wiq 特徵設為 1。projection matrix B 不共享。


3. Answer layer 


context x H=[h1,…,hLX] 


question Q Z=[Z1,…ZLQ] 


對 Z 做一個變換,同樣是 context-independent:


answer 的開始位置的機率 ps 由 2 個前饋網路加一個 ReLU 啟用得到。

結束位置:


最小化 p(s,e) 的交叉熵來訓練。在預測的時候,可以用 beam-search。


FastQA Extended 


相當於主流模型的 interaction layer。對當前的 context state,考慮和剩下的 context(intra)或者和 question(inter)做註意力計算,將其餘 context/question 的資訊融入當前 context。


  • Intra-fustion: between passages of the context 

  • Inter-fusion: between question and context

實驗結果


一些小結論: 


1. 簡單的特徵能大幅度提升 performance,原因是讓 encoder 有了真實 question 的部分知識後,encoder 就可以有選擇性的追蹤問題相關的資訊併進一步將具體的物體抽象為對應的型別,如果在問題中提到了人名,那麼 context encoder 就會記住 “question-person” 而不是具體名字;


2. Beam-search 可以微弱提升結果,因為最可能的開始位置不一定是最好的 answer span;


3. 額外的 character embedding 對結果有顯著提升;


4. 進一步的 fusion 對結果也有幫助,但並沒有那麼顯著。


討論:Do we need additional interaction? 


對比試驗,FastQA 與 FastQAExt 和 DCN 相比,快兩倍,而且少 2-4 倍的視訊記憶體。分析了結果發現 FastQAExt 泛化能力更強些,但並沒有 systematic advantage,並不會對某類問題(主要分析了推理)有一致性的提升。


Qualitative Analysis 


對 FastQA 的錯誤結果進行了一些分析,大部分的錯誤來自: 


1. 缺乏對句法結構的理解;


2. 不同詞位相似語意的詞的細粒度語意之間的區分。


其他很多的錯誤也是來自人工標註偏好。 


舉了一些典型的錯誤例子,像例 1是缺乏對某些答案型別的細化理解。例 2 缺乏指代消解和背景關係縮略語的認識,例 3 模型有時難以捕捉基本的句法結構,尤其是對於重要的分隔符如標點符號和連詞被忽略的巢狀句子。

現有 top-down 模型用到實際業務當中通常需要為了 fit 進視訊記憶體或者是滿足一定的響應時間而進行模型的各種簡化,FastQA 在視訊記憶體佔用和響應速度上有著絕對優勢,感覺還是非常有意義的。

GDAN

■ 論文 | Semi-Supervised QA with Generative Domain-Adaptive Nets

■ 連結 | https://www.paperweekly.site/papers/576

■ 作者 | Zhilin Yang / Junjie Hu / Ruslan Salakhutdinov / William W. Cohen


GDAN,Question Generation 和 Question Answering 相結合,利用少量的有標註的 QA 對 + 大量的無標註的 QA 對來訓練 QA 模型。


Introduction 


看到這篇論文,看到來自 CMU,就忍不住推測作者估計是 LTI 的,估計還上過 411/611/711,畢竟 idea 和 final project 太像了。 


回顧下 CMU 11411/611/711 的 final project,專案是閱讀理解,分為 Asking System 和 Answering System 兩個子系統。17年初的時候,Alan 鼓勵用課上學到的東西 & 隱晦的不鼓勵用 DL,anyway 那時候也並沒有看到用 DL 做 QG 的 paper,網上唯幾和 QG 相關的 paper 都是 CMU 的,估計和這門課相輔相成。 


611 的 asking system 和 answering system 都沒有標註,只是純粹的 wiki 文字,asking system 基於 document 產生 question 以及 answer,answering system 根據 question 和 document 產生 answer。


因為沒有標註,所以兩個系統其實是相互補充相互促進的。如果產生的 question 太簡單,和原文太過相近,那麼 answering system 的泛化能力有可能就很差,而如果 question 太難,answering system 也就學很難學習很難訓練。 


評價產生的 question 的好壞的標準除了流暢、符合語法等基於 question 本身的特點外,我們還希望好的問題能找到答案,這些邏輯在這篇論文中都有所體現。 


回到 paper,主要思想其實就是用少量的有標註的 QA 對 + 大量的無標註的 QA 對來訓練 QA 模型。主要做法是,給部分 unlabelled text,用 tagger 抽一些答案,訓練 generative model 來生成對應的問題,然後補充訓練集,再訓練 QA model。實際是用改進的 GAN 方法來構建一個半監督問答模型。


Model Architecture 


Generative Model – seq2seq with attention and copy 


對 P(q|p,a) 進行建模。輸入是 unlabelled text p 和從中抽取的答案 a,輸出是 q,或者說 (q, p, a)。答案 a 的抽取依賴 POS tagger + constituency parser + NER tagger。生成模型這裡用的是 seq2seq model (Sutskever et al., 2014) + copy mechanism (Gu et al., 2016; Gulcehre et al., 2016)。 


Encoder 用一個 GRU 把 paragraph 編碼成 sequence of hidden states H。註意論文在 paragraph token 的詞向量上加了額外的一維特徵來表示這個詞是否在答案中出現,如果出現就為 1,否則為 0。 


Decoder 用另一個 GRU + Attention 對 H 進行解碼,在每一個時刻,生成/複製單詞的機率是:


具體細節不多說了,相關可以看 Copy or Generate。 


生成模型 G 產生的 (q, p, a) 作為判別模型的輸入。


Discriminative Model – gated-attention reader 


對 P(a|p,q) 進行建模。輸入是人為標註資料 L 以及模型產生的資料 U,由於 L 和 U 來自不同分佈,所以引入了 domain tag 來區分兩類資料,“true”來表示人為標記資料 L,“gen”標簽來表示模型生成資料 U(Johnson et al., 2016; Chu et al., 2017)。在測試時,只加入 d_true。 


論文這裡用了 GA (gated-attention) Reader 作為基本結構,也是 CMU 出的模型,當然事實上別的模型也可以。


模型很簡單,embedding 層用詞向量,encoder 層用雙向 GRU 分別得到 Hq 和,context-query attention 層用 gated attention (, Hq 做 element-wise 乘法)做下一層網路的輸入,重覆進入 encoder 和 attention 層進行編碼和乘法(共 k 層),最後將 p, q 做內積(inner product)得到一個最終向量輸入 output 層,output 層用兩個 softmax 分別預測答案在段落中的起始和結束位置。


Loss function 


整體的標的函式:


Training Algorithm 


主要要解決下麵兩個問題:


Issue 1: discrepancy between datasets


如上,判別模型很容易在 U 上 overfit,所以才用了 domain tag 做區分。 


Issue 2: jointly train G and D


如上,如果用 auto-encoder,容易讓 question 和 answer 的表達非常接近,question 甚至可能完全 copy answer,所以這裡用了判別模型。


Intuitively, the goal of G is to generate “useful” questions where the usefulness is measured by the probability that the generated questions can be answered correctly by D


Algorithm

分兩個階段: 


第一階段:固定 G,利用 d_true 和 d_gen,用 SGD 來更新 D。在 L 上計算 MLE 來完成 G 的初始化,對 D 進行隨機初始化。 


第二階段:固定 D,利用 d_true,用 RL 和 SGD 更新 G。由於 G 的輸出是不可導的,所以用到了 reinforce algorithm。action space 是長度為 T’ 的所有可能的 questions,reward 是 J (UG,dtrue,D)。


Summary


QANet 那篇論文中提到了另一篇 Question Generation 的論文: 


Zhou et al. (2017) improved the diversity of the SQuAD data by generating more questions. However, as reported by Wang et al. (2017), their method did not help improve the performance. 


相信 GDAN 在一定程度上一定能緩解 QA 中標註資料稀少的問題,但是能否在資料較為充足,模型較為優勢的情況下提升 performance,估計難說,下次嘗試後再來填這個坑了。Anyway,看到了曾經思考過的問題有人做出了實踐還是萬分開心的。

QANet

■ 論文 | QANet – Combining Local Convolution with Global Self-Attention for Reading Comprehension

■ 連結 | https://www.paperweekly.site/papers/1901

■ 原始碼 | https://github.com/NLPLearn/QANet

CMU 和 Google Brain 新出的文章,SQuAD 目前的併列第一,兩大特點: 


1. 模型方面創新的用 CNN+attention 來完成閱讀理解任務。


在編碼層放棄了 RNN,只採用 CNN 和 self-attention。CNN 捕捉文字的區域性結構資訊( local interactions),self-attention 捕捉全域性關係( global interactions),在沒有犧牲準確率的情況下,加速了訓練(訓練速度提升了 3x-13x,預測速度提升 4x-9x)。


2. 資料增強方面透過神經翻譯模型(把英語翻譯成外語(德語/法語)再翻譯回英語)的方式來擴充訓練語料,增加文字多樣性。


其實目前多數 NLP 的任務都可以用 word vector + RNN + attention 的結構來取得不錯的效果,雖然我挺偏好 CNN 並堅定相信 CNN 在 NLP 中的作用(捕捉區域性相關性&方便並行),但多數情況下也是跟著主流走並沒有完全捨棄過 RNN,這篇論文還是給了我們很多想象空間的。


Model Architecture


先看模型,在 BiDAF 基礎上的一些改進,主要在 embedding encoder 層。還是閱讀理解經典五層結構:


1. Input embedding layer 


和其他模型差不多,word embedding + character embedding,預訓練詞向量,OOV 和字向量可訓練,字向量用 CNN 訓練。


單詞 w 的表示由詞向量和字向量的拼接 [xw;xc]∈Rp1+p2 然後經過兩層 highway network 得到,這個和 BiDAF 相同。


2. Embedding encoder layer 


重點是這一層上的改變,由幾個基本 block 堆疊而成,每個 block 的結構是:


[convolution-layer x # + self-attention-layer + feed-forward-layer] 


摺積用的 separable convolutions 而不是傳統的 convolution,因為更加 memory efficient,泛化能力也更強。核心思想是將一個完整的摺積運算分解為 Depthwise ConvolutionPointwise Convolution 兩步進行,兩幅圖簡單過一下概念。


先做 depthwise conv, 摺積在二維平面進行,filter 數量等於上一次的 depth/channel,相當於對輸入的每個 channel 獨立進行摺積運算,然後就結束了,這裡沒有 ReLU。

然後做 pointwsie conv,和常規摺積相似,摺積核尺寸是 1x1xM,M 為上一層的 depth,相當於將上一步depthwise conv 得到的 map 在深度上進行加權組合,生成新的 feature map。


Self-attention-layer 用的是多頭註意力機制(head=8),常用的也不多說了。 


註意的是這裡每個基本運算(conv/self-attention/ffn)之間是殘差連線,對輸入 x 和操作 f,輸出是 f (layernorm(x))+x,也就是說某一層的輸出能夠直接跨越幾層作為後面某一層的輸入,有效避免了資訊損失 4 個摺積層,1 個 encoding block。


3. Context-query attention layer 


幾乎所有 machine reading comprehension 模型都會有,而這裡依舊用了 context-to-query 以及 query-to-context 兩個方向的 attention,先計算相關性矩陣,再歸一化計算 attention 分數,最後與原始矩陣相乘得到修正的向量矩陣。相似度函式這裡用的:


對行、列分別做歸一化得到 S’ 和 S’’,最後 context-to-query attention 就是 A=S′QT,query-to-context attention 就是 B=S′S″TCT,用了 DCN attention 的策略。

4. Model encoder layer 


和 BiDAF 差不多,不過這裡依舊用 CNN 而不是 RNN。這一層的每個位置的輸入是 [c, a, c⊙a, c⊙b],a, b 是 attention 矩陣 A,B 的行,引數和 embedding encoder layer 相同,除了 cnn 層數不一樣,這裡是每個 block 2 層摺積,一共 7 個 block。


5. Output layer 


再次和 BiDAF 相同:


p1=softmax(W1[M0;M1]),p2=softmax(W2[M0;M2]) 


標的函式:


其中分別是第 i 個樣本的 groundtruth 的開始和結束位置。


Data Augmentation 


CNN 速度快所以有條件用更多的資料來訓練啦,然後進一步增強模型的泛化能力啦。這裡資料增強的基本 idea 就是透過 NMT 把資料從英文翻譯成法文(English-to-French),另一個翻譯模型再把法文翻回英文(French-to-English)。

看圖說話,對段落中每個句子先用 English-to-French 模型的 beam decoder 得到 k 個法語翻譯,然後對每一條翻譯,都再經過一個 reversed translation model 的 beam decoder,這最後就得到了 k^2 個改寫的句子(paraphrases),然後從這 k^2 個句子中隨機選一個。


具體到 SQuAD 任務就是 (d,q,a) -> (d’, q, a’),問題不變,對檔案 d 翻譯改寫,由於改寫後原始答案 a 現在可能已經不在改寫後的段落 d’ 裡了,所以需要從改寫後的段落 d’ 裡抽取新的答案 a’,採用的方法是計算 s’ 裡每個單詞和原始答案裡 start/end words 之間的 character-level 2-gram score,分數最高的單詞就被選擇為新答案 a’ 的 start/end word。

這個方法還可以從 quality 和 diversity 改進,quality 方面用更好的翻譯模型,diversity 方面可以考慮引入問題的改寫,也可以使用其他的資料增廣的方法(Raiman&Miller;, 2017)。


實驗結論是英文語料:法語語料:德語語料是 3:1:1 的比例時效果最好,EM 提升了 1.5,F1 提升了 1.1。

Question Generation

■ 論文 | Machine Comprehension by Text-to-Text Neural Question Generation

■ 連結 | https://www.paperweekly.site/papers/330

■ 作者 | Xingdi Yuan / Tong Wang / Caglar Gulcehre / Alessandro Sordoni / Philip Bachman / Sandeep Subramanian / Saizheng Zhang / Adam Trischler

QG 的應用還是挺廣泛的,像是為 QA 任務產生訓練資料、自動合成 FAQ 檔案、自動輔導系統(automatic tutoring systems)等。 


傳統工作主要是利用句法樹或者知識庫,基於規則來產生問題。如基於語法(Heilman and Smith, 2010; Ali et al., 2010; Kumar et al., 2015),基於語意(Mannem et al., 2010; Lindberg et al., 2013),大多是利用規則操作句法樹來形成問句。還有是基於模板(templates),定好 slot,然後從檔案中找到物體來填充模板(Lindberg et al., 2013; Chali and Golestanirad, 2016)。 


深度學習方面的工作不多,有意思的有下麵幾篇: 


1. Generating factoid questions with recurrent neural networks: The 30m factoid question-answer corpus 

將 KB 三元組轉化為問句 


2. Generating natural questions about an image 

從圖片生成問題 


3. Semi-supervised QA with generative domain-adaptive nets 

用 domain-adaptive networks 的方法做 QA 的資料增強


神經網路做 QG 基本套路還是 encoder-decoder 模型,對 P(q|d) 或者 P(q|d, a) 進行建模。像是 17年 ACL 的 paper Learning to Ask: Neural Question Generation for Reading Comprehension,就是用一個基本的 attention-based seq2seq 模型對 P(q|d) 進行建模,併在 encoder 引入了句子和段落級的編碼。 


這一篇 Microsoft Maluuba 出的 paper 把 answer 作為先驗知識,對 P(q|d, a) 進行建模。同時用監督學習和強化學習結合的方法來訓練 QG,先用最大似然預訓練一波,然後用 policy gradient 方法進行 fine-tune ,最大化能反映問題質量的一些 rewards。 


Encoder-Decoder Model 


基礎架構是 encoder-decoder,加了 attention mechanism (Bahdanau et al. 2015)和 pointer-softmax coping mechanism (Gulcehre et al. 2016)。


Encoder


輸入:


  • document D=(d1,…,dn) 

  • answer A=(a1,…,am)

是詞向量。


在檔案詞向量後面拼了個二維特徵表示檔案單詞是否在答案中出現。然後過 Bi-LSTM 對檔案表示進行編碼得到 annotation vectors是每一時刻前向和後向 hidden state 的拼接。 


接著對 answer 編碼。主要根據 answer 在 document 的位置找到對應的 annotation vector,然後把它和 answer 的詞向量拼接起來也就是,s<=j<=e,s,e 表示 answer 在 document 的起始結束位置,經過第二個 biLSTM 得到,ha 是兩個方向 final hidden state 的拼接。


計算 decoder 的初始狀態


Decoder 


解碼器產生輸出,輸出單詞從 pθ(yt|y


為了在問句中直接產生檔案中的一些短語和物體,在 decoder 的時候採用了 pointer-softmax,也就是兩個輸出層,shortlist softmax 和 location softmax,shortlist softmax 就是傳統的 softmax,產生 predefined output vocabulary,對應 copynet 中的 generate-mode,location softmax 則表示某個詞在輸入端的位置,對應 copynet 中的 copy-mode。 


Decoder:


vt 是從 document 和 answer encoding 計算得到的 context vector,用了 attention 機制,atj 同時可以用作location softmax。


context vector:


shortlist softmax vector ot 用了 deep output layer (Pascanu et al., 2013)。


最後的zt 對兩個 softmax 輸出進行加權和拼接得到。zt 由 MLP 產生,輸入也是 st,vt,yt−1,兩個隱層然後輸出層 sigmoid 啟用得到 zt。


Training 


三個 loss:


1. negative log-likelihood 


用了 teacher forcing,也就是 yt−1 不是從模型輸出得到的,而是來自 source sequence。


2. not to generate answer words in question


â 表示在 answer 中出現但沒有在 groud-truth question 中出現的單詞。


3. Variety


最大化資訊熵來鼓勵輸出多樣性。


Policy Gradient Optimization 


Teacher forcing 會帶來一個問題,訓練階段和測試階段的結果會存在很大差異。在訓練階段,tearcher force 使得模型不能從錯誤中學習,因為最大化 groud-truth likelihood 並不能教模型給沒有 groud-truth 的 example 分配機率。於是就有了 RL 方法。在預訓練一波 maximum likelihood 之後,使用一些和問題質量相關的 rewards,來進行 policy gradient optimzation。


Rewards 


1. Question answering 


好的問題能被回覆,把 model-generated question 喂給預訓練好的 QA 系統(論文用的 MPCM 模型),然後用 QA 系統的 accuracy(比如 F1) 作為 reward。


2. Fluency (PPL) 


是否符合語法,過一個語言模型計算 perplexity。


3. Combination


兩者加權。


Reinforce


“loss”:


π 是要訓練的 policy,是action 的機率分佈,action space 就是 decoder output layer 的詞彙表,可以透過 beam-search 取樣選擇 action,取樣結果透過 decoder teacher-force 還原得到 state,計算 reward 進行梯度更新。


Policy gradient:


Evaluation 


Baseline Seq2Seq 可以產生更符合語法更流暢的英文問題,但是語意可能更加模糊,這篇 paper 提出的系統可以產生更具體的問題,雖然沒那麼流暢。

點選以下標題檢視更多文章: 

 戳我檢視招募詳情

#作 者 招 募#


讓你的文字被很多很多人看到,喜歡我們不如加入我們


關於PaperWeekly


PaperWeekly 是一個推薦、解讀、討論、報道人工智慧前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號後臺點選「交流群」,小助手將把你帶入 PaperWeekly 的交流群裡。

▽ 點選 | 閱讀原文 | 進入作者部落格

贊(0)

分享創造快樂