自訓練 + 預訓練 = 更好的自然語言理解模型

AIBigbull2050發表於2020-11-13

自訓練 + 預訓練 = 更好的自然語言理解模型

來源:香儂科技

編輯 | 陳彩嫻

論文標題:

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

論文連結:

1 自訓練與預訓練

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

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

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

自訓練 + 預訓練 = 更好的自然語言理解模型

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

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

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

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

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

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

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

2 自訓練處理流程

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

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

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

  • 用對提取的資料作標註;

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

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

自訓練 + 預訓練 = 更好的自然語言理解模型

句子編碼

通用語料庫D來自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)。

這說明沒有偽標註資料,單純的預訓練不能很好地實現領域知識遷移,還要藉助標註資料。

自訓練 + 預訓練 = 更好的自然語言理解模型

3 少樣本學習與知識蒸餾

下圖是少樣本學習的實驗結果。可以看到,領域內自訓練可以大幅提升少樣本場景下的效果。

自訓練 + 預訓練 = 更好的自然語言理解模型

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

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

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

自訓練 + 預訓練 = 更好的自然語言理解模型

句子編碼的影響

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

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

自訓練 + 預訓練 = 更好的自然語言理解模型

一個例子

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

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

自訓練 + 預訓練 = 更好的自然語言理解模型

4 小結

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

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

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







來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946223/viewspace-2733976/,如需轉載,請註明出處,否則將追究法律責任。

相關文章