从易到难,针对复杂问题的无监督式问题分解方法
論文標題:
Unsupervised Question Decomposition for Question Answering
論文作者:
Ethan Perez (FAIR,NYU), Patrick Lewis (FAIR,UCL), Wen-tau Yih (FAIR), Kyunghyun Cho (FAIR,NYU), Douwe Kiela (FAIR)
論文鏈接:
https://arxiv.org/abs/2002.09758
代碼鏈接:
https://github.com/facebookresearch/UnsupervisedDecomposition
問答(QA)任務常常包含了很多難以直接回答的復雜問題,而這些問題一般需要搜尋多段文本才能找出答案。
本文提出一種無監督的問題分解方法:把復雜問題分解成若干簡單問題,然后把這些簡單問題的答案作為上下文提供給復雜問題,從而幫助模型回答復雜問題。
使用這種策略,我們能夠在多跳問答數據集HotPotQA上實現顯著效果,尤其對于領域外的問題十分奏效。
問答中的復雜問題
針對問答系統的研究已經有了多年歷史,在近些年,各類數據集的出現對問答系統的要求越來越高。
如數據集HotPotQA就要求系統能夠在多段不連續的文本中尋找線索,并且按照邏輯順序把這些線索組織起來形成答案。
這種需要多次答案“跳躍”的問答形式就稱為“多跳問答”(Multi-Hop QA),或者簡單地稱為復雜問題。
模型直接回答這些問題往往不現實,但一個簡單的想法是,可以把這個復雜問題分解成若干模型能夠回答的簡單的子問題,然后再把這些子問題及其答案作為上下文提供給模型,再去回答復雜問題,這樣就可以大大降低直接回答復雜問題的難度。
比如下圖是一個例子,要回答復雜問題,我們先從中拆分出兩個簡單問題(或“單跳問答”),回答之后再回答復雜問題本身,就容易得多。
那么,現在的問題是,怎么得到簡單的子問題。本文采用了一種無監督的問題分解方式:(1)首先以抽取的方式構建一個“偽分解”數據集,(2)利用構建的“偽分解”數據集和原來的復雜問題數據集訓練一個序列到序列模型,(3)使用序列到序列模型生成子問題。以上問題分解步驟完全是無監督的,因而避免了大量的人工標注。
最后,本文在HotPotQA上測試了該方法的效果,并取得了顯著效果。總的來說,本文貢獻如下:
提出一種完全無監督的問題分解方法,可以有效地把復雜問題分解為若干簡單的子問題;
在HotPotQA的實驗上表明,這種方法已經非常接近強監督的方法;
本方法尤其能夠在各種類型的復雜問題都取得很好的結果,表明此方法的通用性較強。
無監督問題分解
問答任務是,給定問題和若干段文本,模型要去找到答案,即最大化概率。
而問題分解就是,找到和相關的個子問題,并得到它們的答案,模型現在要基于以上所有信息去最大化答案的概率。
所謂問題分解,指的就是復雜問題到子問題集的一個映射:,其中是從簡單問題數據集中得到的一個問題。我們首先需要構造這樣的映射對,然后學習這個映射,最后應用它。
Step1: 偽分解構造
假設我們現在有兩個數據集:復雜問題數據集(本文使用HotPotQA中的所有問題作為)和簡單問題數據集(使用SQuAD2的所有問題作為初始的)。
為了進一步擴大這兩個數據集的大小,我們從Common Crawl中挖掘更多的問題補充和,最終得到約2.4M句復雜問題,10.1M句簡單問題。
另一方面,因為我們沒有標注好的對,所以我們想要先構造出這樣的問題對,然后在此之上學習映射。這種構造我們稱為“偽分解”構造。
具體來說,我們對每個復雜問題,從中選取個簡單問題作為偽分解,這些選取的簡單問題需要盡量滿足兩個標準:和相似,相互不同。這兩個標注可以統一為下述公式:
下面給出兩種抽取子問題的策略(本文設):
相似度抽取:使用余弦值改寫上述公式為(其中為單位句向量,用fastText得到);
隨機抽取:隨機中中抽取個簡單問題作為。
在抽取了若干子問題后,由于其中包含了很多噪聲,所以我們還把其中沒在中出現的實體都隨機替換為中同類型的一個實體(如果存在)。如此一來,我們就得到了很多偽分解對。
Step2: 問題分解映射學習
在上述得到偽分解對之后,我們就要去學習分解映射,我們有以下學習策略:
不學習(No Learning),直接使用抽取得到的作為復雜問題的子問題;
序列到序列(Seq2Seq),把所有的拼接起來作為目標文本,學習一個的序列到序列模型;
無監督序列到序列(USeq2Seq),不直接從中學習,而是用各種無監督學習手段去學習。
對Seq2Seq和USeq2Seq,我們首先在上用MLM的方法預訓練一個XLM去初始化,然后用上述偽分解對訓練。
對Seq2Seq,直接用對訓練;對USeq2Seq,用去噪和反譯的方法訓練。對去噪,把中字符隨機掩碼、交換、丟棄,得到,然后訓練。對反譯,分別用生成一個和用生成,然后去優化。
Step3: 如何使用
在學習了映射之后,我們就可以針對每個復雜問題,得到它的分解后的子問題,然后用一個簡單的QA模型找到每個子問題的答案,再把這些問題和對應的答案拼接起來,和原來的復雜問題、給定的上下文一道,送入最后的QA模型,得到復雜問題的答案即可。
具體地,我們使用RoBERTa(Large)和BERT(Base)作為簡單問答模型,并且也使用了模型集成。類似地,對回答復雜問題我們也用同樣的模型。
實驗
我們在數據集HotPotQA上實驗,測評指標有F1和EM,其他實驗設置詳見原文。
下表是實驗結果,第一列是分解學習方法,第二列是分解構造方法。可以看到,和基線模型比較,在原始版本(Orig)上得到3F1的提升,在多跳(MultiHop)和領域外(OOD)版本上,得到10F1的提升,并且還能實現強監督模型DecompRC的效果。
在測試集上,本方法能接近當前最佳的強監督(額外的監督信號,知道哪些句子能回答問題)模型SAE和HGN。在后面的實驗中,我們使用Useq2seq+fastText的方法。
下面我們想要知道提供怎樣的上下文信息可以使模型更好。我們有幾種選擇:(1)簡單的答案段(span);(2)答案所在的一整句話(sentence);(3)隨機實體。
下表是實驗結果,可以看到,相比提供子問題,子答案的選擇更為關鍵。其中,提供一整句話而非僅僅是答案本身可以大幅提高效果,這說明,充足的額外的上下文對模型至關重要。
接下來我們探究子問題和子答案對最終結果的影響。如下圖所示,左圖是使用beam search生成的子問題的置信度對最終結果的影響,右圖是子答案置信度對最終結果的影響。可以看到,置信度越大的子問題或子答案能最大化提升最終的結果。
最后來看看具體分解的子問題及其得到的答案的例子,如下表所示。可以看到,盡管有些子問題語法不通,但這并不妨礙簡單模型找到相關答案,并為復雜模型提供有效的信息。
小結
本文提出了一種無監督式的“問題分解-分解學習-分解應用”的將復雜問題分解為簡單問題從而提供豐富上下文信息的問答范式,在HotPotQA上能夠接近當前最佳的強監督模型,并通過一系列分析實驗驗證了此方法的有效性。
這種方法的本質是為模型提供更多的上下文信息,非常類似我們推出的一系列工作——將各種任務歸納到閱讀理解框架下。
實際上這種想法也是很直觀的:人類也無法只從一句話中推出很多信息,總是需要各種各樣的背景信息作為支撐。從這個觀點看,未來拓展模型能夠處理的文本長度也許會是一種趨勢。
????
現在,在「知乎」也能找到我們了
進入知乎首頁搜索「PaperWeekly」
點擊「關注」訂閱我們的專欄吧
關于PaperWeekly
PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號后臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。
總結
以上是生活随笔為你收集整理的从易到难,针对复杂问题的无监督式问题分解方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何正确使用电动烤蔬菜机?
- 下一篇: 零刻 GTi12 UItra 迷你主机