【NLP】NLP提效,除了选择合适的模型,就是数据增强了
如何用有限的數據做出最佳的效果?除了一個優秀的模型以外,最有效的方法就是做數據增強了。自然語言處理(NLP)不同于圖像,可以做裁剪,反轉,縮放等操作來增強,而是有文本特別的處理方式。這篇論文《CODA: CONTRAST-ENHANCED AND DIVERSITYPROMOTING DATA AUGMENTATION FOR NATURAL LANGUAGE UNDERSTANDING》提出的CoDA方案號稱能在Roberta-large上平均提升2.2%的效果,那我們就來看看這篇到底提出了哪些方法吧。
數據增強
這篇論文主要探討如何在文本分類做數據增強,當然這些數據增強的方法一樣可以用在其他NLP任務中。
一句話概括數據增強,就是把原有訓練集合:
通過某種變換,轉變成新的訓練集合:
我們用這兩個集合的數據,去學習參數:
參考以往論文給出的數據增強的方法,可以概括為下圖:
back-translate(回譯)很容易理解,如上圖,英語翻譯成德語又翻譯回英語,作為訓練樣本。
Adversarial Training(對抗訓練):對抗訓練方法被用于文本數據提升模型的魯棒性。對抗訓練不需要任何額外的領域知識,只需要模型本身產出樣本,這些樣本都是模型最容易預測錯的樣本。下面是兩個最常用的對抗訓練的loss。
其實就是要找到模型認為相似的樣本加入到模型中訓練,但是在實際使用時,我們很難獲得準確的對抗樣本,因此可以用模型梯度構建相似的對抗樣本,如下公式所示:
提升多樣性
上述數據增強方法思路其實都很一致,找到已有樣本的相似樣本,訓練目標也較為一致。這時候思考一個問題,不同的數據增強方法是等同的,還是互補的呢?是否可以混合所有數據增強方法提升模型泛化能力呢?CV上已經證明是有效的,應用到文本就難多了,對文本輕微的可能會帶來語意上的巨大差異。
本文提出了多種混合數據增強的方法,如下圖所示:
?這3種其實沒啥好說的,字面意思。(a)就是在一個mini-batch中,采用一個隨機的數據增強方法把x變為x',(c)就是把x用一系列的數據增強方法變成x'。(b)是混合插值,是對兩個樣本的embedding ei和ej做操作,其中a是符合beta分布。
值得注意的是sequential stacking的方式,牽涉到各個增強方法的順序,并不是所有順序都是合理的,比如我們不可能在生成對抗訓練樣本后,去做回譯,正確的融合方式如下:
這種融合方式,可以簡單的用下面的公式表示:
先用xi做回譯得到xi',然后找到模型最難分辨的對抗樣本,最后計算原樣本和對抗樣本的loss。我們可以看到loss有3項,第一項就是正常的交叉熵,第二項是對抗loss,第三項是一致性的loss,即樣本和對抗樣本理應相似度較高,這里RCS定義如下:
對抗正則化
我們看上述loss的3項,反應了我們對抗樣本xi要和xi'預估結果要一致,然而卻沒反應xi'要和xj不一致。為了充分利用數據增強后的數據,論文又提出了對抗學習目標??紤]到xi'是由xi生成的,因此模型應該學到每個數據增強樣本的“爸爸”是誰。如下圖所示:
memory是用來存儲歷史embeding的,作為大量的負樣本。為了避免encoder更新過快(會導致embeding不一致),因此提出momentum key encoder,該 encoder不是通過梯度更新參數的,而是通過下式:
當有一個樣本xi,增強樣本xi',我們會得到3個embedding:
新的對抗學習目標如下式:
其中t是溫度,M就是memory bank,該式表達的意思也很簡單,就是樣本xi和增強樣本xi'和momentum key encoder產出的ki的相似度,要高于memory bank的負樣本。和之前的loss一整合,就成了我們最終的學習目標:
實驗
多種增強方式混搭的效果比較好,采用回譯+對抗訓練stack方式取得了最佳效果。關于調參的細節可以看原文。我們著重看下采用數據增強帶來的模型提效增益,從下圖可以看到,用CoDA的效果,還是很顯著的:
參考文獻
CODA: CONTRAST-ENHANCED AND DIVERSITYPROMOTING DATA AUGMENTATION FOR NATURAL LANGUAGE UNDERSTANDING
https://openreview.net/pdf?id=Ozk9MrX1hvA
總結
以上是生活随笔為你收集整理的【NLP】NLP提效,除了选择合适的模型,就是数据增强了的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度技术win11旗舰稳定版v2021.
- 下一篇: iPhone 11 送一台!不爱可折现!