【NLP】哈工大|NLP數(shù)據(jù)增強(qiáng)方法?我有15種
十一假期過(guò)的太快了,不知道你們緩過(guò)來(lái)沒(méi)有,沒(méi)有的話今天我們就來(lái)一起讀一篇綜述緩緩,彌補(bǔ)假期沒(méi)學(xué)習(xí)的遺憾。

這篇40多頁(yè)的綜述出自哈工大車萬(wàn)翔老師的團(tuán)隊(duì),一共總結(jié)了15種NLP可以用到的數(shù)據(jù)增強(qiáng)方法、優(yōu)缺點(diǎn),還有一些使用技巧,十分良心。下面就速讀一下,如果要使用的話還是建議參考原文以及其他文獻(xiàn)的應(yīng)用細(xì)節(jié)。
論文:Data Augmentation Approaches in?Natural?Language?Processing:?A?Survey
地址:https://arxiv.org/abs/2110.01852
數(shù)據(jù)增強(qiáng)方法
數(shù)據(jù)增強(qiáng)(Data Augmentation,簡(jiǎn)稱DA),是指根據(jù)現(xiàn)有數(shù)據(jù),合成新數(shù)據(jù)的一類方法。畢竟數(shù)據(jù)才是真正的效果天花板,有了更多數(shù)據(jù)后可以提升效果、增強(qiáng)模型泛化能力、提高魯棒性等。然而由于NLP任務(wù)天生的難度,類似CV的裁剪方法可能會(huì)改變語(yǔ)義,既要保證數(shù)據(jù)質(zhì)量又要保證多樣性,使得大家在做數(shù)據(jù)增強(qiáng)時(shí)十分謹(jǐn)慎。
作者根據(jù)生成樣本的多樣性程度,將DA方法分為了以下三種:
Paraphrasing:對(duì)句子中的詞、短語(yǔ)、句子結(jié)構(gòu)做一些更改,保留原始的語(yǔ)義 Noising:在保證label不變的同時(shí),增加一些離散或連續(xù)的噪聲,對(duì)語(yǔ)義的影響不大 Sampling:旨在根據(jù)目前的數(shù)據(jù)分布選取新的樣本,會(huì)生成更多樣的數(shù)據(jù)

Paraphrasing

這類方法根據(jù)替換的成分不同,又可以分為詞、短語(yǔ)、句子級(jí)別。作者共總結(jié)了6種方法:
Thesaurus:利用詞典、知識(shí)圖譜等外部數(shù)據(jù),隨機(jī)將非停用詞替換成同義詞或上位詞,如果增加多樣性的話還可以替換成相同詞性的其他詞 Semantic Embeddings:利用語(yǔ)義向量,將詞或短語(yǔ)替換成相近的(不一定是同義詞)。由于每個(gè)詞都有語(yǔ)義表示,可替換的范圍更大。而上一種方法只能替換圖譜里的 MLMs:利用BERT等模型,隨機(jī)mask掉一些成分后生成新的 Rules:利用一些規(guī)則,例如縮寫(xiě)、動(dòng)詞變位、否定等,對(duì)句子一些成分進(jìn)行改寫(xiě),比如把 is not 變成 isn't Machine Translation:分為兩種,Back-translation指把句子翻譯成其他語(yǔ)言再翻譯回來(lái),Unidirectional Translation指在跨語(yǔ)言任務(wù)中,把句子翻譯成其他語(yǔ)言 Model Generation:利用Seq2Seq模型生成語(yǔ)義一致的句子
作者還貼心地整理了上述方法的優(yōu)缺點(diǎn)。其中「歧義」主要是指有些多義詞在不同場(chǎng)景下意思不一樣,比如「我每天吃一個(gè)蘋(píng)果」,替換成「我每天吃一個(gè)iphone」就不合適了。

P.S. 作者寫(xiě)的Strong application我沒(méi)有太懂,個(gè)人覺(jué)得可以理解為應(yīng)用效果好,如果有不同解讀可以留言哈。
Noising
人在讀文本時(shí)對(duì)噪聲是免疫的,比如單詞亂序、錯(cuò)別字等?;谶@個(gè)思想,可以給數(shù)據(jù)增加些噪聲來(lái)提升模型魯棒性。

作者給出了以上5種增加噪聲的方法:
Swapping:除了交換詞之外,在分類任務(wù)中也可以交換instance或者sentence Deletion:可以根據(jù)tf-idf等詞的重要程度進(jìn)行刪除 Insertion:可以把同義詞隨機(jī)插入句子中 Substitution:把一些詞隨機(jī)替換成其他詞(非同義),模擬misspelling的場(chǎng)景。為了避免改變label,可以使用label-independent的詞,或者利用訓(xùn)練數(shù)據(jù)中的其他句子 Mixup:這個(gè)方法最近兩年比較火,把句子表示和標(biāo)簽分別以一定權(quán)重融合,引入連續(xù)噪聲,可以生成不同label之間的數(shù)據(jù),但可解釋性較差
總的來(lái)說(shuō),引入噪聲的DA方法使用簡(jiǎn)單,但會(huì)對(duì)句子結(jié)構(gòu)和語(yǔ)義造成影響,多樣性有限,主要還是提升魯棒性。
這里我私下多加幾個(gè)沒(méi)提到的,也是我們?cè)谧?a style="color: rgb(30, 107, 184);font-weight: bold;border-bottom: 1px solid rgb(30, 107, 184);" data-linktype="2">ConSERT時(shí)用到的方法:
對(duì)抗樣本 Dropout:也是SimCSE用到的,還有R-drop,都是通過(guò)dropout來(lái)加入連續(xù)噪聲 Feature Cut-off:比如BERT的向量都是768維,可以隨機(jī)把一些維度置為0,這個(gè)效果也不錯(cuò)
Sampling

Sampling是指從數(shù)據(jù)分布中采樣出新的樣本,不同于較通用的paraphrasing,采樣更依賴任務(wù),需要在保證數(shù)據(jù)可靠性的同時(shí)增加更多多樣性,比前兩個(gè)數(shù)據(jù)增強(qiáng)方法更難。作者整理了4種方法:
Rules:用規(guī)則定義新的樣本和label,比如把句子中的主謂進(jìn)行變換 Seq2Seq Models:根據(jù)輸入和label生成新的句子,比如在NLI任務(wù)中,有研究者先為每個(gè)label(entailment,contradiction,neutral)訓(xùn)一個(gè)生成模型,再給定新的句子,生成對(duì)應(yīng)label的。對(duì)比之下,paraphrasing主要是根據(jù)當(dāng)前訓(xùn)練樣本進(jìn)行復(fù)述 Language Models:給定label,利用語(yǔ)言模型生成樣本,有點(diǎn)像前陣子看的谷歌UDG。有些研究會(huì)加個(gè)判別模型過(guò)濾 Self-training:先有監(jiān)督訓(xùn)練一個(gè)模型,再給無(wú)監(jiān)督數(shù)據(jù)打一些標(biāo)簽,有點(diǎn)蒸餾的感覺(jué)
作者依舊貼心地給出了4中方法的優(yōu)點(diǎn)和局限:

使用技巧
方法選擇
作者給出了這些方法在6個(gè)維度的對(duì)比,大家可以更好地體會(huì)他們的區(qū)別和適用場(chǎng)景。其中Level表示DA方法會(huì)增強(qiáng)的部分:t=text, e=embedding, l=label,Granularity表示增強(qiáng)的粒度:w=word, p=phrase, s=sentence。

Method Stacking
實(shí)際應(yīng)用時(shí)可以應(yīng)用多種方法、或者一種方法的不同粒度。
作者推薦了兩款工具:
Easy?DA:?https://github.com/jasonwei20/eda_nlp
Unsupervised DA:https://github.com/google-research/uda
同時(shí)我搜索了一下github又發(fā)現(xiàn)了兩個(gè)寶藏:
英文:https://github.com/makcedward/nlpaug
中文:https://github.com/zhanlaoban/eda_nlp_for_Chinese
Optimization
第一,在使用增強(qiáng)的數(shù)據(jù)時(shí),如果數(shù)據(jù)質(zhì)量不高,可以先讓模型在增強(qiáng)后的數(shù)據(jù)上pre-train,之后再用有標(biāo)注數(shù)據(jù)訓(xùn)練。如果要一起訓(xùn)練,在增強(qiáng)數(shù)據(jù)量過(guò)大的情況下,可以對(duì)原始訓(xùn)練數(shù)據(jù)過(guò)采樣
第二,在進(jìn)行數(shù)據(jù)增強(qiáng)時(shí)注意這些超參數(shù)的調(diào)整:

第三,其實(shí)增強(qiáng)很多簡(jiǎn)單數(shù)據(jù)的提升有限,可以注重困難樣本的生成。比如有研究加入對(duì)抗訓(xùn)練、強(qiáng)化學(xué)習(xí)、在loss上下文章等。如果用生成方法做數(shù)據(jù)增強(qiáng),也可以在生成模型上做功夫,提升數(shù)據(jù)多樣性。
第四,如果生成錯(cuò)數(shù)據(jù)可能引入更多噪聲,可以增加其他模型對(duì)準(zhǔn)確性進(jìn)行過(guò)濾。
最后,作者列舉了其他研究的數(shù)據(jù)增強(qiáng)應(yīng)用場(chǎng)景,大家在落地時(shí)可以借鑒:

總結(jié)
數(shù)據(jù)增強(qiáng)算是很接地氣的研究了,少樣本、領(lǐng)域遷移是每個(gè)NLPer都會(huì)遇到的問(wèn)題,而在數(shù)據(jù)上做文章可能比其他模型改動(dòng)的方法更為有效。同時(shí)從這篇綜述也可以看到,數(shù)據(jù)增強(qiáng)其實(shí)可以做得很fancy,還不影響線上速度,比如我之前就用T5和ELECTRA做過(guò)數(shù)據(jù)增強(qiáng),都有一些效果,可謂低調(diào)而不失奢華,典雅而不失大氣,深度拿捏得穩(wěn)穩(wěn)的。
那今天就這樣,祝大家早日從假期綜合癥緩過(guò)來(lái),高歌猛進(jìn)沖刺完2021。
往期精彩回顧 本站qq群554839127,加入微信群請(qǐng)掃碼:
