2
本文作者: skura | 2019-11-07 16:45 |
近日,在由斯坦福大學(xué)發(fā)起的對(duì)話式問答挑戰(zhàn)賽 CoQA (Conversational Question Answering Challenge)中,追一科技AI Lab團(tuán)隊(duì)超越微軟團(tuán)隊(duì)成為榜單第一[1],刷新了之前微軟等團(tuán)隊(duì)創(chuàng)造的CoQA紀(jì)錄。值得注意的是,團(tuán)隊(duì)提交的技術(shù)方案中,單模型的各項(xiàng)指標(biāo)表現(xiàn)首次全面超越人類。
CoQA Leaderboard
一直以來,機(jī)器閱讀理解都是自然語言處理界最受關(guān)注、進(jìn)步最快的技術(shù)方向之一,主要有兩大比賽較受矚目,分別是注重一問一答的SQuAD [2]和多輪對(duì)話問答的CoQA [3]。相比于SQuAD,CoQA更注重模型在對(duì)話過程中回答關(guān)聯(lián)問題的能力,答案形式自由,而且數(shù)據(jù)來自兒童故事、文學(xué)、初高中英語考試、新聞、維基百科、Reddit和科學(xué)等七個(gè)不同的領(lǐng)域,這些改進(jìn)都極大地提高了挑戰(zhàn)賽的難度,對(duì)模型的魯棒性和泛化能力有著更高的要求。團(tuán)隊(duì)針對(duì)CoQA數(shù)據(jù)集的難點(diǎn),通過對(duì)抗訓(xùn)練(Adversarial training)和知識(shí)蒸餾(Knowledge Distillation)等方法,有效地提高了模型的泛化能力,從而依靠單模型刷新了CoQA榜單的記錄,并首次單模型超越人工評(píng)測(cè)指標(biāo)。在這里分別從模型、訓(xùn)練方法、后處理等方面做一個(gè)簡(jiǎn)單的介紹。
模型
Baseline模型:RoBERTa
我們的基線模型以Facebook開源的RoBERTa [4]預(yù)訓(xùn)練模型為基礎(chǔ),之所以選擇RoBERTa,是因?yàn)槠湎噍^于BERT [5]在語言模型預(yù)訓(xùn)練的過程中用了更多領(lǐng)域的語料,更適合CoQA數(shù)據(jù)來自不同領(lǐng)域的特點(diǎn)。
在輸入端,由于CoQA的數(shù)據(jù)集是對(duì)話式的,每個(gè)問題都依賴于歷史對(duì)話,因此在訓(xùn)練過程中,我們將對(duì)話歷史拼接到當(dāng)前問題之前,問題和答案之間用分隔符分開,組成當(dāng)前輪次的Query,然后將其與Context拼接,作為模型的輸入。
在輸出端,CoQA數(shù)據(jù)集的答案有可能是自由文本、Yes、No和Unk。由于頭部的自由文本的答案都能在Context中找到相近的片段,我們采取抽取+Yes/No/Unk分類的輸出層結(jié)構(gòu)。其中,對(duì)于抽取的部分,我們使用Pointer-Network的輸出結(jié)構(gòu)得到答案開始和結(jié)尾位置的logits;對(duì)于分類的部分,則用一個(gè)簡(jiǎn)單的全連接層得到Y(jié)es/No/Unk三分類的logits。
Baseline模型結(jié)構(gòu)
在計(jì)算損失函數(shù)時(shí),我們將預(yù)測(cè)答案開始和結(jié)尾位置的兩個(gè)logits向量分別與Yes/No/Unk三分類的logits拼接,得到兩個(gè)最終的logits向量,此時(shí)這兩個(gè)logits對(duì)應(yīng)的label依然是one-hot的,所以我們可以把這兩個(gè)logits向量過softmax,然后用交叉熵計(jì)算開始和結(jié)尾的損失,取平均,得到基線模型的損失值。
依據(jù)標(biāo)注輔助任務(wù)
在CoQA數(shù)據(jù)集中,每一個(gè)回答(除了unknown)都附帶了一段Context中的原文片段作為邏輯依據(jù)。為了充分利用該信息,我們?cè)贐aseline模型的基礎(chǔ)上,增加了一個(gè)依據(jù)標(biāo)注的任務(wù),同步進(jìn)行多任務(wù)訓(xùn)練。對(duì)于Context的每一個(gè)token,我們會(huì)判斷其是否在邏輯依據(jù)中(標(biāo)成1或者0)。這部分的損失函數(shù)用二元交叉熵計(jì)算,按照一定比例累加到總的loss上。
依據(jù)標(biāo)注任務(wù)
除此之外,我們發(fā)現(xiàn),Yes/No類型答案的邏輯依據(jù)中,常常包含了肯定或否定的語義,可以用來輔助Yes/No/Unk的分類,所以我們?cè)赗oBERTa池化輸出的基礎(chǔ)上又利用注意力機(jī)制融合了邏輯依據(jù)的輸出信息,以提高最后模型的表現(xiàn)。
訓(xùn)練方法
除了模型上的修改,為了提高模型的泛化能力以應(yīng)付CoQA數(shù)據(jù)集來源豐富、問題類型多樣的特點(diǎn),我們還采用了對(duì)抗訓(xùn)練和知識(shí)蒸餾等訓(xùn)練方法。
對(duì)抗訓(xùn)練
對(duì)抗訓(xùn)練 [6]是一種能有效提高模型魯棒性和泛化能力的訓(xùn)練手段,其基本原理是通過在原始輸入上增加對(duì)抗擾動(dòng),得到對(duì)抗樣本,再利用對(duì)抗樣本進(jìn)行訓(xùn)練,從而提高模型的表現(xiàn)。由于CoQA數(shù)據(jù)集對(duì)模型的泛化能力較高,我們?cè)谟?xùn)練時(shí),使用了對(duì)抗訓(xùn)練來提高模型的表現(xiàn)。
由于自然語言文本是離散的,一般會(huì)把對(duì)抗擾動(dòng)添加到嵌入層上。在我們的系統(tǒng)中,為了最大化對(duì)抗樣本的擾動(dòng)能力,我們利用梯度上升的方式生成對(duì)抗樣本。為了避免擾動(dòng)過大,我們將梯度做了歸一化處理。
其中,v為嵌入向量。實(shí)際訓(xùn)練過程中,我們?cè)谟?xùn)練完一個(gè)batch的原始輸入數(shù)據(jù)時(shí),保存當(dāng)前batch對(duì)輸入詞向量的梯度,得到對(duì)抗樣本后,再使用對(duì)抗樣本進(jìn)行對(duì)抗訓(xùn)練。
除了對(duì)抗訓(xùn)練,我們還利用虛擬對(duì)抗訓(xùn)練做半監(jiān)督訓(xùn)練。
知識(shí)蒸餾
與對(duì)抗訓(xùn)練類似,知識(shí)蒸餾也是一種常用的提高模型泛化能力的訓(xùn)練方法。
知識(shí)蒸餾[7] 這個(gè)概念最早由Hinton在2015年提出。一開始,知識(shí)蒸餾通往往應(yīng)用在模型壓縮方面,利用訓(xùn)練好的復(fù)雜模型(teacher model)輸出作為監(jiān)督信號(hào)去訓(xùn)練另一個(gè)簡(jiǎn)單模型(student model),從而將teacher學(xué)習(xí)到的知識(shí)遷移到student。Tommaso [8]在18年提出,如果student和teacher的模型完全相同,蒸餾后則會(huì)對(duì)模型的表現(xiàn)有一定程度上的提升。
在我們的訓(xùn)練過程中,我們先用RoBERTa + 對(duì)抗訓(xùn)練得到teacher model,再用知識(shí)蒸餾的方法得到student模型。訓(xùn)練student時(shí),我們同時(shí)采用真實(shí)label和teacher的輸出來計(jì)算損失。
后處理
在CoQA數(shù)據(jù)集中,有一小部分的問題是多選題,比如問題是“How Jack goes to school? Walk or ride? ”,而Context中的片段是“walked”。即使模型抽取到了“walked”,也并不能得分。因此,針對(duì)這類問題,我們做了一個(gè)簡(jiǎn)單的后處理。通過一定規(guī)則識(shí)別到多選題型的問題,然后抽取出問題中出現(xiàn)的選項(xiàng),找到與我們模型抽取的Context片段語義相似度最高的選項(xiàng),作為我們系統(tǒng)最終的回答。
結(jié)果分析與消融實(shí)驗(yàn)
最終,我們的單模型在CoQA Leaderboard上超越了微軟團(tuán)隊(duì)2.6個(gè)百分點(diǎn),并首次超過了人工評(píng)測(cè)的水平。值得一提的是,與微軟和其他團(tuán)隊(duì)不同,我們?cè)谀P陀?xùn)練的過程,沒有用任何CoQA以外的有監(jiān)督的數(shù)據(jù)集,進(jìn)行多任務(wù)訓(xùn)練或是數(shù)據(jù)增強(qiáng)。
驗(yàn)證集結(jié)果分析
為了驗(yàn)證各個(gè)技巧的作用,我們進(jìn)行了消融實(shí)驗(yàn)。從實(shí)驗(yàn)結(jié)果中可以看出,依據(jù)標(biāo)記和對(duì)抗訓(xùn)練帶來的提升較大,知識(shí)蒸餾和后處理也能帶來一定程度的提升。
驗(yàn)證集消融實(shí)驗(yàn)結(jié)果
最終可以看到,利用對(duì)抗訓(xùn)練、知識(shí)蒸餾等方法,我們的單模型在RoBERTa Baseline的基礎(chǔ)上提升了1.8個(gè)百分點(diǎn)。
總結(jié)
這次的CoQA挑戰(zhàn)賽經(jīng)歷,是我們團(tuán)隊(duì)站在巨人肩膀上的一次眺望。在優(yōu)化模型的過程中,我們發(fā)現(xiàn)由于預(yù)訓(xùn)練模型已經(jīng)相當(dāng)強(qiáng)大,以往一些屢試不爽的優(yōu)化技巧在RoBERTa上卻并不能奏效。這就需要我們?cè)诒荣惖倪^程中,大膽地設(shè)想,仔細(xì)地實(shí)驗(yàn),驗(yàn)證不同方法的有效性和穩(wěn)定性,從而找到真正行之有效的解決方案。希望我們的這次分享也能給其他團(tuán)隊(duì)帶來一些經(jīng)驗(yàn)上的啟發(fā)。
Reference:
[1] CoQA Leaderboard. https://stanfordnlp.github.io/coqa/
[2] SQuAD: 100,000+ Questions for Machine Comprehension of Text. https://arxiv.org/abs/1606.05250
[3] CoQA: A Conversational Question Answering Challenge. https://arxiv.org/abs/1808.07042
[4] RoBERTa: A Robustly Optimized BERT Pretraining Approach. https://arxiv.org/abs/1907.11692
[5] BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. https://arxiv.org/abs/1810.04805
[6] Adversarial Training Methods for Semi-Supervised Text Classification. https://arxiv.org/abs/1605.07725
[7] Distilling the Knowledge in a Neural Network. https://arxiv.org/abs/1503.02531
[8] Born Again Neural Networks. https://arxiv.org/abs/1805.04770
雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)
雷峰網(wǎng)特約稿件,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。