NLP数据增强方法总结:EDA、BT、MixMatch、UDA
1. 數據增強的背景和應用場景
隨著AI技術的逐步發展,更好的神經網絡模型對數據規模的要求也逐步提升。而在分類任務中,若不同類別數據量相差很大,模型則會出現過擬合現象,嚴重影響預測的正確性。
從廣義上來講,有監督模型的效果相對半監督或無監督學習都是領先的。但是有監督模型需要獲取大量的標注數據,當數據需求達到十萬、百萬甚至更多時,人工標注數據昂貴的代價已經讓很多人望而卻步。
如何利用有限的標注數據,獲取到更多的訓練數據,減少網絡中的過擬合現象,訓練出泛化能力更強的模型?數據增強無疑是一種強有力的解決方法。
數據增強起初在計算機視覺領域應用較多,主要是運用各種技術生成新的訓練樣本,可以通過對圖像的平移、旋轉、壓縮、調整色彩等方式創造新的數據。雖然,‘新’的樣本在一定程度上改變了外觀,但是樣本的標簽保持不變。且NLP中的數據是離散的,這導致我們無法對輸入數據進行直接簡單地轉換,換掉一個詞就有可能改變整個句子的含義。因此本文將重點介紹文本數據增強的方法和技術,以快速補充文本數據。
2 傳統文本數據增強的技術
現有NLP的Data Augmentation大致有兩條思路,一個是加噪,另一個是回譯,均為有監督方法。加噪即為在原數據的基礎上通過替換詞、刪除詞等方式創造和原數據相類似的新數據。回譯則是將原有數據翻譯為其他語言再翻譯回原語言,由于語言邏輯順序等的不同,回譯的方法也往往能夠得到和原數據差別較大的新數據。
Easy Data Augmentation for Text Classification Tasks (EDA)提出并驗證了幾種加噪的 text augmentation 技巧,分別是同義詞替換(SR: Synonyms Replace)、隨機插入(RI: Randomly Insert)、隨機交換(RS: Randomly Swap)、隨機刪除(RD: Randomly Delete),下面進行簡單的介紹:
2.1 EDA
(1) 同義詞替換(SR: Synonyms Replace):不考慮stopwords,在句子中隨機抽取n個詞,然后從同義詞詞典中隨機抽取同義詞,并進行替換。
Eg: “我非常喜歡這部電影” —> “我非常喜歡這個影片”,句子仍具有相同的含義,很有可能具有相同的標簽。
(2) 隨機插入(RI: Randomly Insert):不考慮stopwords,隨機抽取一個詞,然后在該詞的同義詞集合中隨機選擇一個,插入原句子中的隨機位置。該過程可以重復n次。
Eg : “我非常喜歡這部電影” —> “愛我非常喜歡這部影片”。
(3) 隨機交換(RS: Randomly Swap):句子中,隨機選擇兩個詞,位置交換。該過程可以重復n次。
Eg: “如何評價 2017 知乎看山杯機器學習比賽?”?—> “2017 機器學習?如何比賽知乎評價看山杯”。
(4) 隨機刪除(RD: Randomly Delete):句子中的每個詞,以概率p隨機刪除。
Eg: “如何評價 2017 知乎看山杯機器學習比賽?" —> “如何 2017 看山杯機器學習?”。
?
這四種方法的效果如何呢?在英文的數據上效果很可觀。經過上述四種操作,數據增強后的句子可能不易理解,但作者們發現模型變得更加魯棒了,尤其是在一些小數據集上。效果如下圖:
每一種方法也在作者的結果中展示了還不錯的效果:
上圖是針對不同訓練集大小的五個文本分類任務的EDA操作的平均性能增益。α參數粗略地表示“每次擴充改變的句子中單詞的百分比”,縱軸是模型增益。
我們可以看到,當α = 0.1時,模型提升就能達到很好的效果。訓練數據越少,提升效果效果越明顯。過多的數據增強數據實際上對模型的提升有限,甚至在RD和SR兩種方法上還會嚴重損害效果。
總的來說,傳統的文本數據增強的方法在小批量數據中都有較好的表現效果,但4種方法的缺點也不能被忽視:
-
同義詞替換SR有一個小問題,同義詞具有非常相似的詞向量,而訓練模型時這兩個句子會被當作幾乎相同的句子,但在實際上并沒有對數據集進行有效的擴充。
-
隨機插入RI很直觀的可以看到原本的訓練數據喪失了語義結構和語義順序,而不考慮停用詞的做法使得擴充出來的數據并沒有包含太多有價值的信息,同義詞的加入并沒有側重句子中的關鍵詞,在數據擴充的多樣性上實際會受限較多。
-
隨機交換RS實質上并沒有改變原句的詞素,對新句式、句型、相似詞的泛化能力實質上提升很有限。
-
隨機刪除RD不僅有隨機插入的關鍵詞沒有側重的缺點,也有隨機交換句式句型泛化效果差的問題。隨機的方法固然能夠照顧到每一個詞,但是沒有關鍵詞的側重,若隨機刪除的詞剛好是分類時特征最強的詞,那么不僅語義信息可能被改變,標簽的正確性也會存在問題。
?
2.2 回譯
在這個方法中,我們用機器翻譯把一段中文翻譯成另一種語言,然后再翻譯回中文。
Eg: “周杰倫是一位華語樂壇的實力唱將,他的專輯賣遍了全球。" —>“Jay Chou is a strength singer in the Chinese music scene, his albums are sold all over the world.”—>“周杰倫是中國音樂界的優秀歌手,他的專輯暢銷全世界。”
這個方法已經成功的被用在Kaggle惡意評論分類競賽中。反向翻譯是NLP在機器翻譯中經常使用的一個數據增強的方法,其本質就是快速產生一些翻譯結果達到增加數據的目的。
?
回譯的方法往往能夠增加文本數據的多樣性,相比替換詞來說,有時可以改變句法結構等,并保留語義信息。但是,回譯的方法產生的數據依賴于翻譯的質量,大多數出現的翻譯結果可能并不那么準確。如果使用某些翻譯軟件的接口,也可能遇到賬號限制等情況。
?
3 深度學習數據增強技術
3.1 半監督 Mixmatch
半監督學習方法的提出是為了更好地利用未標注的數據,減輕對于大規模標注數據集的依賴;如今也證明了這是一種強有力的學習范式。
在這篇論文中,作者們把當前不同任務中的做法為半監督學習做了統一,得到了一種新的算法——MixMatch。它的工作方式是通過 MixUp 猜測數據擴增方法產生的無標簽樣本的低熵標簽,并把無標簽數據和有標簽數據混合起來。
作者們通過實驗表明 MixMatch 在多種不同的數據集、多種不同的有標簽數據規模中都能以很大幅度領先此前的所有方法。比如,在 CIFAR 數據集上、只有 250 個標簽的情況下,作者們把錯誤率降低到了之前方法的 1/4,在 STL-10 數據集上也降低到了之前方法的一半。
作者們也展示了 MixMatch 可以在差分隱私的使用目的下,在準確率和隱私保護之間取得好得多的平衡。最后,作者們進行了對照實驗,分析了 MixMatch 方法中的哪些組件最為關鍵。
3.2 無監督數據增強UDA
由EDA結果可知,傳統的數據增廣方法有一定的效果,但主要針對小數據量,對于渴求大量訓練數據的深度學習模型,傳統的方法效果始終有限。而Unsupervised Data Augmentation(UDA)無監督數據擴增方法的提出,為大量數據缺失打開了一扇大門。
?
MixMatch 算法除了使用普通的數據增廣,還有一個秘訣是 Mixup 增廣術。而 UDA 的成功,得益于對特定任務使用特定目標的數據增強算法。
與常規噪聲比如高斯噪聲、dropout 噪聲相比,針對不同任務使用不同數據增強方法能夠產生更有效的數據。這種方法能夠產生有效、真實的噪聲,且噪音多樣化。另外以目標和性能為導向的數據增強策略可以學習如何在原始標記集中找出丟失的或最想要的訓練信號(比如圖像數據以顏色為目標進行數據增強)。
?
下圖展示了UDA訓練時的目標和結構,為了使用標記和未標記的所有數據,對有標簽的數據訓練時加入了cross entropy loss 函數。對未標記數據,與Mixmatch使用 l2 loss 不同,UDA對增廣后未標記的數據預測結果使用KL散度。Targeted data augmentation 特定目標的數據增強則包括了back translation回譯、autoaugment(圖像)、TFIDF word replacement。其中回譯是從英文轉法文再譯回英文,IDF是從DBPedia語料中獲取。
作者在文本的處理方式上選用了回譯和關鍵詞提取兩種方式,回譯的方式可以幫助豐富數據的句式和句型,而tfidf方法優化了EDA的隨機處理詞策略,根據DBPedia先驗知識和實際預料的詞頻確定關鍵詞,再根據確定好的關鍵詞替換同義詞,避免無用數據和錯誤數據的產生。
?
另外,UDA優秀的另一個重要的突破是采用了Training Signal Annealing(TSA)方法在訓練時逐步釋放訓練信號。
?
當收集了少量的標注的數據和大量未標記的數據時,可能會面臨標記數據和未標記數據相差很大的情況。比如標記的數據都和保險相關,但未標記的數據都是熱點新聞。因為需要采用大量的未標記數據進行訓練,所需的模型會偏大,而大模型又會輕松的在有限的有監督數據上過擬合,這時TSA就要逐步的釋放有監督數據的訓練信號了。
作者對每個training step 都設了一個閾值ηt,且小于等于1,當一個標簽例子的正確類別P的概率高于閾值ηt時,模型從損失函數中刪除這個例子,只訓練這個minibatch下其他標記的例子。
如上圖展示了3種TSA的方式,這3種方式適用于不同數據。exp模式更適合于問題相對容易或標注量較少的情況。因為監督信號主要在訓練結束時釋放,且可以防止模型快速過擬合。同理,log模式適合大數據量的情況,訓練過程中不太容易過擬合。
那么UDA效果如何呢?作者的實驗結果顯示,這種無監督方法創造的數據在多個任務上都有很好的表現:①在 IMDb 數據集的分類測試中,UDA 只使用 20 個標簽就得到了比此前最好的方法在 25,000 個有標簽數據上訓練更好的結果;②在標準的半監督學習測試(CIFAR-10,4000 個標簽;以及 SVHN,1000 個標簽)中,UDA 擊敗了此前所有的方法,包括MixMatch,而且把錯誤率降低了至少 30%;③在大規模數據集上,比如在 ImageNet 上,只需要額外增加 130 萬張無標簽圖像,相比此前的方法,UDA 也可以繼續提升首位和前五位命中率。
4 數據增強技術實踐
利用eda和回譯的方法擴增數據我們已經寫入相關項目:
可以通過pip安裝調用
pip install textda from?textda.data_expansion?import?*print(data_expansion('生活里的愜意,無需等到春暖花開'))output:
['生活里面的愜意,無需等到春暖花開',
'生活里的等到春暖花開',
'生活里無需愜意,的等到春暖花開',
'生活里的愜意,無需等到春暖花開',
'生活里的愜意,并不需要等到春暖花開',
'生活無需的愜意,里等到春暖花開',
'生活里的愜意,等到無需春暖花開']
4.1 某翻譯軟件回譯:
原句:生活里的愜意,無需等到春暖花開
中—>英—>中:生活的舒適,無需等到春天開花
中—>日—>中:生活的舒適,無需等到春天的花朵
中—>德—>中:生活的舒適,無需等到春天開花
中—>法—>中:生活的舒適,無需等待春天的花朵
?
4.2 EDA 產生的數據:
4.3 textda對不平衡文本分類的效果提升
此處以情感正中負文本3分類結果為例:
-
最初訓練文本:neg1468,pos 8214, neu 712
-
測試文本:neg1264, pos 1038, neu 708
-
分類模型:fastText文本分類器訓練模型
由下圖的confusion matrix 可知模型整體加權 f1值為 0.749
利用textda的方法將數據擴充至 neg:7458 ,pos:8214 ,neu:3386
當數據趨于平衡,f1值上升到0.783,將近4個百分點
由此可見數據增強方法在處理數據不平衡的分類任務上可以提高模型的性能。
5 數據增強的拓展
5.1 其他數據增強方法
數據增強方法還有很多,且在文本、語音、圖像上的方法都各有不同。
(1)音頻:
-
噪聲增強
-
隨機相同類型抽取拼接
-
時移增強
-
音高變換增強
-
速度調整
-
音量調整
-
混合背景音
-
增加白噪聲
-
移動音頻
-
拉伸音頻信號
(2)圖像:
-
水平翻轉垂直翻轉
-
旋轉
-
縮放 放大縮小
-
裁剪
-
平移
-
高斯噪聲
-
生成對抗網絡 GAN
-
AutoAugment
(3)文本其他數據增強方法:
-
語法樹結構替換
-
篇章截取
-
seq2seq序列生成數據
-
生成對抗網絡 GAN
-
預訓練的語言模型
無論是文本、語音還是圖像,數據增強雖然有不同的方法,但這些方法本質上是相似的:傳統直觀的方法是對不同信號的裁剪、拼接、交換、旋轉、拉伸等方式,采用深度學習模型的方法主要為生成和原數據相類似的數據。
?
5.2 防止過擬合其他方法
在深度學習中,為了避免出現過擬合(Overfitting),通常輸入充足的數據量是最好的解決辦法。當數據無法達到模型的要求或者添加數據后模型由于某類數據過多導致過擬合時,以下方法也可以發揮一些作用:
-
Regularization:數據量比較小會導致模型過擬合, 使得訓練誤差很小而測試誤差特別大。通過在Loss Function 后面加上正則項可以抑制過擬合的產生。缺點是引入了一個需要手動調整的hyper-parameter。
-
Dropout:這也是一種正則化手段,不過跟以上不同的是它通過隨機將部分神經元的輸出置零來實現。
-
Unsupervised Pre-training:用Auto-Encoder或者RBM的卷積形式一層一層地做無監督預訓練, 最后加上分類層做有監督的Fine-Tuning。
-
Transfer Learning(遷移學習):在某些情況下,訓練集的收集可能非常困難或代價高昂。因此,有必要創造出某種高性能學習機(learner),使得它們能夠基于從其他領域易于獲得的數據上進行訓練,并能夠在對另一領域的數據進行預測時表現優異。
6 總結和展望
訓練機器學習或深度學習模型時,良好的數據往往是影響模型的效果最重要的因素之一。而數據不足時數據增強是一個常用的方法。
文本數據增強從對原數據詞的變動到句子的變動到段落的變動都有不同的方法,為了保證能夠真實提高數據的質量,有以下幾個點尤為重要:
(1)增加的數據要保證和原數據一致的語義信息。
新增后的數據和原數據擁有一樣標簽的同時,更需要保證有一樣的語義信息。單獨隨機去掉某個詞的方式很可能會改變整句的含義(比如去掉一個否定詞)。
?
(2)增加的數據需要多樣化。
從替換詞、句式、句型等方面都需要有新的數據以增強模型的泛化能力,單獨交換詞的方式較為局限。
?
(3)增加的數據要避免在有標簽數據上過擬合。
當大量的數據在少量的有標簽數據上過擬合時,模型雖然可能會出現很高的f1值,但真實的預測效果會相差很多。保證多樣化的數據還要保證數據的質量。
?
(4)增加的數據和原數據保持一定的平滑性會更有價值,提高訓練效率。
生成的數據更接近于真實數據可以保證數據的安全性,大噪音產生的數據和原始數據的標簽很可能不同。尤其在某些序列模型中,文本數據的通順程度嚴重影響模型的預測。
?
(5)增加數據的方法需要帶著目標去選擇。
對數據缺失的需求明確才能更快的找到理想的數據,對某些關鍵詞的同義詞需求較多可以偏重替換詞的方式,對句式缺失較多可以偏重回譯或者句式語法結構樹變換的方式。
?
對于小數據的情況,使用文本回譯或EDA中的簡單方法可以達到效果的提升;但想要使用大批量的數據訓練神經網絡模型,EDA或者回譯的方式產生的文本可能并不能滿足需求。
而UDA這種無監督數據增強技術,無論對于小數據量或大數據量數據,都可以找到帶有目標性的方法獲得增強后的平滑的數據,甚至有時效果高于有監督方法訓練的模型。
綜上,數據增強的方法可以作為我們訓練nlp模型時一個快速解決數據不平衡或數據缺失的強有力的工具。
?
更多精彩內容,請各位看官移步微信公眾號「夕小瑤的賣萌屋」 ,會有更加精彩的內容等著大家哦 ヘ|・?・|ノ*~●
?
總結
以上是生活随笔為你收集整理的NLP数据增强方法总结:EDA、BT、MixMatch、UDA的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 知识图谱能否拯救NLP的未来?
- 下一篇: 浅谈点击信号对搜索的影响