自训练 + 预训练 = 更好的自然语言理解模型
論文標(biāo)題:
Self-training Improves Pre-training for Natural Language Understanding
論文作者:
Jingfei Du, Edouard Grave, Beliz Gunel, Vishrav Chaudhary, Onur Celebi, Michael Auli, Ves Stoyanov, Alexis Conneau
論文鏈接:
https://arxiv.org/abs/2010.02194
代碼鏈接:
https://github.com/facebookresearch/SentAugment
自訓(xùn)練與預(yù)訓(xùn)練
預(yù)訓(xùn)練(Pre-training)從廣義上來(lái)講,是指先在較大規(guī)模的數(shù)據(jù)上對(duì)模型訓(xùn)練一波,然后再在具體的下游任務(wù)數(shù)據(jù)中微調(diào)。大多數(shù)情況下,預(yù)訓(xùn)練的含義都比較狹窄:在大規(guī)模無(wú)標(biāo)注語(yǔ)料上,用自監(jiān)督的方式訓(xùn)練模型。這里的自監(jiān)督方法一般指的是語(yǔ)言模型。
除了預(yù)訓(xùn)練之外,我們還經(jīng)常在圖像領(lǐng)域看到它的一個(gè)兄弟,自訓(xùn)練(Self-training)。自訓(xùn)練是說有一個(gè)Teacher模型和一個(gè)Student模型,首先在標(biāo)注數(shù)據(jù)上訓(xùn)練,然后用它對(duì)大規(guī)模無(wú)標(biāo)注數(shù)據(jù)進(jìn)行標(biāo)注,把得到的結(jié)果當(dāng)做偽標(biāo)注數(shù)據(jù)去訓(xùn)練。
顯然,預(yù)訓(xùn)練和自訓(xùn)練都用到了大規(guī)模無(wú)標(biāo)注的數(shù)據(jù),只是二者的處理過程不同。而且,其中非常重要的一點(diǎn)是,預(yù)訓(xùn)練始終對(duì)針對(duì)一個(gè)模型進(jìn)行操作,而自訓(xùn)練卻用到了兩個(gè)模型,前者是直接從無(wú)標(biāo)注數(shù)據(jù)中學(xué)習(xí),而后者是間接地從數(shù)據(jù)中學(xué)習(xí)。它們的區(qū)別可以用下圖表示:
那么,一個(gè)自然的問題是:這兩個(gè)方法可以結(jié)合起來(lái)達(dá)到更好的效果嗎?本文給出了答案:當(dāng)然可以!
首先預(yù)訓(xùn)練一個(gè)模型,然后把這個(gè)模型在標(biāo)注數(shù)據(jù)上訓(xùn)練后當(dāng)做,再用它去標(biāo)注另外一批無(wú)標(biāo)注數(shù)據(jù),把得到的偽標(biāo)注數(shù)據(jù)用來(lái)訓(xùn)練,最后在推理測(cè)試的時(shí)候使用即可。
從這個(gè)過程中可以發(fā)現(xiàn),預(yù)訓(xùn)練是為了更好地自訓(xùn)練,自訓(xùn)練是為了更好地訓(xùn)練,二者結(jié)合,缺一不可。
總之,本文有如下的貢獻(xiàn):
結(jié)合自訓(xùn)練與預(yù)訓(xùn)練,比單純的預(yù)訓(xùn)練取得了大幅度的效果提升;
為了使偽標(biāo)注數(shù)據(jù)更加契合下游的具體任務(wù),提出了SentAugment,一種特定領(lǐng)域的數(shù)據(jù)抽取方法,減少通用語(yǔ)料造成的噪聲干擾;
在知識(shí)蒸餾和小樣本學(xué)習(xí)任務(wù)上也取得了突出的結(jié)果,證明自訓(xùn)練+預(yù)訓(xùn)練的優(yōu)越性。
自訓(xùn)練處理流程
本文所提出的方法可以用下面的圖表示,大體分為四步:
將一個(gè)預(yù)訓(xùn)練模型(本文使用RoBERTa_Large)在標(biāo)注數(shù)據(jù)上訓(xùn)練,作為教師模型;
使用從海量通用語(yǔ)料中提取相關(guān)領(lǐng)域的數(shù)據(jù);
用對(duì)提取的數(shù)據(jù)作標(biāo)注;
用偽標(biāo)注語(yǔ)料訓(xùn)練學(xué)生模型。
其中的1,3,4步都是確定的,所以我們重點(diǎn)關(guān)注如何使用從海量通用語(yǔ)料庫(kù)中抽取出領(lǐng)域相關(guān)的語(yǔ)料。
句子編碼
通用語(yǔ)料庫(kù)來(lái)自Common-Crawl,直接把文檔切分為句子,然后以句子為基本單位進(jìn)行數(shù)據(jù)提取。
本文使用句子編碼方法,用一個(gè)編碼向量去表示每一個(gè)句子。這個(gè)句子編碼器在多個(gè)復(fù)述(Paraphrase)數(shù)據(jù)集上訓(xùn)練,并且還使用了BERT的掩碼語(yǔ)言模型在多語(yǔ)言語(yǔ)料上訓(xùn)練,之后就可以用于編碼每個(gè)句子,得到各自對(duì)應(yīng)的特征向量。在后文中,我們默認(rèn)使用Transformer編碼器。
任務(wù)編碼
句子編碼只能表示通用語(yǔ)料庫(kù)中每個(gè)句子的含義,還不能區(qū)分哪些句子是符合領(lǐng)域要求的,這就需要用一個(gè)特殊的任務(wù)編碼,作為查詢條件去表示我們想要的句子是怎樣的,也就是說,只需要計(jì)算句子編碼和任務(wù)編碼的余弦值,就知道這個(gè)句子是不是符合要求。為此,考慮三種任務(wù)編碼:
All-Average: 將訓(xùn)練所用的所有句子編碼平均起來(lái)作為任務(wù)編碼;
Label-Average: 將訓(xùn)練所用的每個(gè)類別的所有句子編碼平均起來(lái)作為各個(gè)類別的任務(wù)編碼;
Per-Sentence:將訓(xùn)練所用的每個(gè)句子都作為一個(gè)單獨(dú)的任務(wù)編碼。
相關(guān)領(lǐng)域數(shù)據(jù)提取
在獲取任務(wù)編碼后,就可以把它(們)作為詢問,根據(jù)余弦值大小,從通用語(yǔ)料庫(kù)中抽取相關(guān)的句子,這可以減少通用語(yǔ)料對(duì)下游特定任務(wù)的噪聲干擾。對(duì)于每個(gè)類別,只抽取Top-K個(gè)句子,并且對(duì)提取的句子,還要滿足能取得較高的置信度。
提取了相關(guān)領(lǐng)域的數(shù)據(jù)后,用對(duì)其中每一個(gè)句子預(yù)測(cè)它的標(biāo)簽是什么:,得到其軟標(biāo)簽或者one-hot硬標(biāo)簽,這取決于訓(xùn)練的方法是什么。但無(wú)論如何,到此為止我們都得到了一個(gè)偽標(biāo)注數(shù)據(jù)庫(kù)。
用偽標(biāo)注語(yǔ)料訓(xùn)練
在得到偽標(biāo)注語(yǔ)料后,就可以用它去訓(xùn)練了。為此,我們考慮三種訓(xùn)練方法:
自訓(xùn)練(Self-Training):將另一個(gè)預(yù)訓(xùn)練的RoBERTa_Large作為,使用one-hot硬標(biāo)簽在上訓(xùn)練;
知識(shí)蒸餾(Knowledge-Distillation):將一個(gè)預(yù)訓(xùn)練的RoBERTa_Small作為,使用軟標(biāo)簽在上訓(xùn)練;
少樣本學(xué)習(xí)(Few-Shot):訓(xùn)練所使用的標(biāo)注數(shù)據(jù)是少樣本,偽標(biāo)注語(yǔ)料的大小是標(biāo)注數(shù)據(jù)的2~3個(gè)數(shù)量級(jí),是RoBERTa_Large,使用one-hot硬標(biāo)簽在上訓(xùn)練。
實(shí)驗(yàn)
根據(jù)上述訓(xùn)練的不同方法,我們依次來(lái)探究在不同訓(xùn)練設(shè)置下,自訓(xùn)練是否能進(jìn)一步提高預(yù)訓(xùn)練的效果。數(shù)據(jù)集包括SST-2,SST-3,CR,IMP,TREC,CoNLL2002,除了最后一個(gè)是命名實(shí)體識(shí)別任務(wù)之外,其他都是分類任務(wù)。
自訓(xùn)練
下圖是在自訓(xùn)練設(shè)置下的實(shí)驗(yàn)結(jié)果,ICP是In-domain Continued Pretraining,即直接在上預(yù)訓(xùn)練而不使用預(yù)測(cè)得到的標(biāo)簽,ST是Self-Training自訓(xùn)練。
可以看到,盡管都是在相關(guān)領(lǐng)域的數(shù)據(jù)上訓(xùn)練,ICP由于沒有使用的預(yù)測(cè)標(biāo)簽,反而使得效果下降(-1.2),而ST則能進(jìn)一步提升預(yù)訓(xùn)練模型的效果(+1.2)。
這說明沒有偽標(biāo)注數(shù)據(jù),單純的預(yù)訓(xùn)練不能很好地實(shí)現(xiàn)領(lǐng)域知識(shí)遷移,還要借助標(biāo)注數(shù)據(jù)。
少樣本學(xué)習(xí)與知識(shí)蒸餾
下圖是少樣本學(xué)習(xí)的實(shí)驗(yàn)結(jié)果。可以看到,領(lǐng)域內(nèi)自訓(xùn)練可以大幅提升少樣本場(chǎng)景下的效果。
下圖是知識(shí)蒸餾的實(shí)驗(yàn)結(jié)果。GT表示用真值(Ground-Truth)數(shù)據(jù),RD是用隨機(jī)(Random)數(shù)據(jù),SA(SentAugment)是用本文的方法得到的數(shù)據(jù)。
在和訓(xùn)練集一樣大的情況下,GT和SA都顯著超過了RD,但如果再額外增加100K句子,SA甚至能逼近有監(jiān)督學(xué)習(xí)RoBERTa_Large的結(jié)果,并且參數(shù)量是它的十分之一。
這說明,對(duì)知識(shí)蒸餾來(lái)說,自訓(xùn)練帶來(lái)的數(shù)據(jù)增廣也是很重要的。
句子編碼的影響
前面我們提到我們默認(rèn)使用的是Transformer去編碼句子,那么不同的編碼器會(huì)有怎樣的影響呢?下圖是不同編碼器在STS數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果。
總的來(lái)說,單純使用BERT得到的句子編碼效果最差,而使用Trigram甚至能得到很好的結(jié)果,這說明了復(fù)述與多語(yǔ)言掩碼語(yǔ)言模型任務(wù)對(duì)于訓(xùn)練句子編碼是很有幫助的。
一個(gè)例子
最后我們來(lái)看看從中抽取的句子是怎樣的,如下圖所示。如果是用Per-Sentence,那么抽取的句子就基本上是詢問的轉(zhuǎn)述;如果是用Label-Average,抽取的句子就符合該類別。
基于句子編碼與任務(wù)編碼的抽取方法有能力得到滿足條件的句子。
小結(jié)
本文研究了預(yù)訓(xùn)練模型上的自訓(xùn)練帶來(lái)的效果增益。使用自訓(xùn)練學(xué)習(xí)框架,模型能夠從海量通用語(yǔ)料中抽取出相關(guān)領(lǐng)域的句子,然后使用教師模型預(yù)測(cè)標(biāo)簽得到偽標(biāo)注數(shù)據(jù),最后再去訓(xùn)練學(xué)生模型。無(wú)論是自訓(xùn)練本身,還是知識(shí)蒸餾、少樣本學(xué)習(xí),預(yù)訓(xùn)練+自訓(xùn)練都能取得顯著的效果提升。
值得注意的是,本文的核心其實(shí)是如何從海量通用語(yǔ)料中提取滿足條件的語(yǔ)料,也即提出的SentAugment方法。在過去一年內(nèi),開放領(lǐng)域問答(Open-Domain Question Answering)大量使用了這種方法取提取問題的相關(guān)段落,并取得了成功。
這些工作表明:基于句子編碼的語(yǔ)料提取、標(biāo)注,是數(shù)據(jù)增廣的有效手段,可以進(jìn)一步用在自然語(yǔ)言生成任務(wù),如機(jī)器翻譯、摘要生成等任務(wù)上,這也是我們之前經(jīng)常強(qiáng)調(diào)的一個(gè)重要方向。
????
現(xiàn)在,在「知乎」也能找到我們了
進(jìn)入知乎首頁(yè)搜索「PaperWeekly」
點(diǎn)擊「關(guān)注」訂閱我們的專欄吧
關(guān)于PaperWeekly
PaperWeekly 是一個(gè)推薦、解讀、討論、報(bào)道人工智能前沿論文成果的學(xué)術(shù)平臺(tái)。如果你研究或從事 AI 領(lǐng)域,歡迎在公眾號(hào)后臺(tái)點(diǎn)擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。
總結(jié)
以上是生活随笔為你收集整理的自训练 + 预训练 = 更好的自然语言理解模型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 史上最全!近千篇机器学习自然语言处理论文
- 下一篇: 丝锥6g和7h有什么区别?13