論文筆記 - Semi-Supervised QA with Generative Domain-Adaptive Nets
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。具體見之前的兩篇博文:
NLP 筆記 - Question Answering SystemQA system - Question Generation
因為沒有標註,所以兩個系統其實是相互補充相互促進的。如果產生的 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 分別得到 和 ,context-query attention 層用 gated attention(, 做 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 是。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,看到了曾經思考過的問題有人做出了實踐還是萬分開心的~
博客: www.shuang0420.com
公眾號: xu_a_heng
推薦閱讀:
TAG:自然語言處理 | 深度學習DeepLearning | bot聊天機器人 |