日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

自训练 + 预训练 = 更好的自然语言理解模型

發布時間:2024/10/8 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自训练 + 预训练 = 更好的自然语言理解模型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

論文標題:

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


自訓練與預訓練

預訓練(Pre-training)從廣義上來講,是指先在較大規模的數據上對模型訓練一波,然后再在具體的下游任務數據中微調。大多數情況下,預訓練的含義都比較狹窄:在大規模無標注語料上,用自監督的方式訓練模型。這里的自監督方法一般指的是語言模型。

除了預訓練之外,我們還經常在圖像領域看到它的一個兄弟,自訓練(Self-training)。自訓練是說有一個Teacher模型和一個Student模型,首先在標注數據上訓練,然后用它對大規模無標注數據進行標注,把得到的結果當做偽標注數據去訓練。

顯然,預訓練和自訓練都用到了大規模無標注的數據,只是二者的處理過程不同。而且,其中非常重要的一點是,預訓練始終對針對一個模型進行操作,而自訓練卻用到了兩個模型,前者是直接從無標注數據中學習,而后者是間接地從數據中學習。它們的區別可以用下圖表示:

那么,一個自然的問題是:這兩個方法可以結合起來達到更好的效果嗎?本文給出了答案:當然可以!

首先預訓練一個模型,然后把這個模型在標注數據上訓練后當做,再用它去標注另外一批無標注數據,把得到的偽標注數據用來訓練,最后在推理測試的時候使用即可。

從這個過程中可以發現,預訓練是為了更好地自訓練,自訓練是為了更好地訓練,二者結合,缺一不可。

總之,本文有如下的貢獻:

  • 結合自訓練與預訓練,比單純的預訓練取得了大幅度的效果提升;

  • 為了使偽標注數據更加契合下游的具體任務,提出了SentAugment,一種特定領域的數據抽取方法,減少通用語料造成的噪聲干擾;

  • 在知識蒸餾和小樣本學習任務上也取得了突出的結果,證明自訓練+預訓練的優越性。

自訓練處理流程

本文所提出的方法可以用下面的圖表示,大體分為四步:

  • 將一個預訓練模型(本文使用RoBERTa_Large)在標注數據上訓練,作為教師模型;

  • 使用從海量通用語料中提取相關領域的數據;

  • 用對提取的數據作標注;

  • 用偽標注語料訓練學生模型。

其中的1,3,4步都是確定的,所以我們重點關注如何使用從海量通用語料庫中抽取出領域相關的語料。

句子編碼

通用語料庫來自Common-Crawl,直接把文檔切分為句子,然后以句子為基本單位進行數據提取。

本文使用句子編碼方法,用一個編碼向量去表示每一個句子。這個句子編碼器在多個復述(Paraphrase)數據集上訓練,并且還使用了BERT的掩碼語言模型在多語言語料上訓練,之后就可以用于編碼每個句子,得到各自對應的特征向量。在后文中,我們默認使用Transformer編碼器。

任務編碼

句子編碼只能表示通用語料庫中每個句子的含義,還不能區分哪些句子是符合領域要求的,這就需要用一個特殊的任務編碼,作為查詢條件去表示我們想要的句子是怎樣的,也就是說,只需要計算句子編碼和任務編碼的余弦值,就知道這個句子是不是符合要求。為此,考慮三種任務編碼:

  • All-Average: 將訓練所用的所有句子編碼平均起來作為任務編碼;

  • Label-Average: 將訓練所用的每個類別的所有句子編碼平均起來作為各個類別的任務編碼;

  • Per-Sentence:將訓練所用的每個句子都作為一個單獨的任務編碼。


相關領域數據提取

在獲取任務編碼后,就可以把它(們)作為詢問,根據余弦值大小,從通用語料庫中抽取相關的句子,這可以減少通用語料對下游特定任務的噪聲干擾。對于每個類別,只抽取Top-K個句子,并且對提取的句子,還要滿足能取得較高的置信度。

提取了相關領域的數據后,用對其中每一個句子預測它的標簽是什么:,得到其軟標簽或者one-hot硬標簽,這取決于訓練的方法是什么。但無論如何,到此為止我們都得到了一個偽標注數據庫。

用偽標注語料訓練

在得到偽標注語料后,就可以用它去訓練了。為此,我們考慮三種訓練方法:

  • 自訓練(Self-Training):將另一個預訓練的RoBERTa_Large作為,使用one-hot硬標簽在上訓練;

  • 知識蒸餾(Knowledge-Distillation):將一個預訓練的RoBERTa_Small作為,使用軟標簽在上訓練;

  • 少樣本學習(Few-Shot):訓練所使用的標注數據是少樣本,偽標注語料的大小是標注數據的2~3個數量級,是RoBERTa_Large,使用one-hot硬標簽在上訓練。


實驗

根據上述訓練的不同方法,我們依次來探究在不同訓練設置下,自訓練是否能進一步提高預訓練的效果。數據集包括SST-2,SST-3,CR,IMP,TREC,CoNLL2002,除了最后一個是命名實體識別任務之外,其他都是分類任務。

自訓練

下圖是在自訓練設置下的實驗結果,ICP是In-domain Continued Pretraining,即直接在上預訓練而不使用預測得到的標簽,ST是Self-Training自訓練。

可以看到,盡管都是在相關領域的數據上訓練,ICP由于沒有使用的預測標簽,反而使得效果下降(-1.2),而ST則能進一步提升預訓練模型的效果(+1.2)。

這說明沒有偽標注數據,單純的預訓練不能很好地實現領域知識遷移,還要借助標注數據。

少樣本學習與知識蒸餾

下圖是少樣本學習的實驗結果??梢钥吹?#xff0c;領域內自訓練可以大幅提升少樣本場景下的效果。

下圖是知識蒸餾的實驗結果。GT表示用真值(Ground-Truth)數據,RD是用隨機(Random)數據,SA(SentAugment)是用本文的方法得到的數據。

在和訓練集一樣大的情況下,GT和SA都顯著超過了RD,但如果再額外增加100K句子,SA甚至能逼近有監督學習RoBERTa_Large的結果,并且參數量是它的十分之一。

這說明,對知識蒸餾來說,自訓練帶來的數據增廣也是很重要的。

句子編碼的影響

前面我們提到我們默認使用的是Transformer去編碼句子,那么不同的編碼器會有怎樣的影響呢?下圖是不同編碼器在STS數據集上的實驗結果。

總的來說,單純使用BERT得到的句子編碼效果最差,而使用Trigram甚至能得到很好的結果,這說明了復述與多語言掩碼語言模型任務對于訓練句子編碼是很有幫助的。

一個例子

最后我們來看看從中抽取的句子是怎樣的,如下圖所示。如果是用Per-Sentence,那么抽取的句子就基本上是詢問的轉述;如果是用Label-Average,抽取的句子就符合該類別。

基于句子編碼與任務編碼的抽取方法有能力得到滿足條件的句子。

小結

本文研究了預訓練模型上的自訓練帶來的效果增益。使用自訓練學習框架,模型能夠從海量通用語料中抽取出相關領域的句子,然后使用教師模型預測標簽得到偽標注數據,最后再去訓練學生模型。無論是自訓練本身,還是知識蒸餾、少樣本學習,預訓練+自訓練都能取得顯著的效果提升。

值得注意的是,本文的核心其實是如何從海量通用語料中提取滿足條件的語料,也即提出的SentAugment方法。在過去一年內,開放領域問答(Open-Domain Question Answering)大量使用了這種方法取提取問題的相關段落,并取得了成功。

這些工作表明:基于句子編碼的語料提取、標注,是數據增廣的有效手段,可以進一步用在自然語言生成任務,如機器翻譯、摘要生成等任務上,這也是我們之前經常強調的一個重要方向。

????

現在,在「知乎」也能找到我們了

進入知乎首頁搜索「PaperWeekly」

點擊「關注」訂閱我們的專欄吧

關于PaperWeekly

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

總結

以上是生活随笔為你收集整理的自训练 + 预训练 = 更好的自然语言理解模型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。