NLP中一些簡單的數據增強技術

  • 2019 年 10 月 11 日
  • 筆記

數據增強技術已經是圖像領域的標配,通過對圖像的翻轉、旋轉、鏡像、高斯白噪聲等技巧實現數據增強。然而,在NLP領域,情況有所不同:改變某個詞彙可能會改變整個句子的含義,那麼在NLP領域,如何使用數據增強技術呢?

ICLR 2019 workshop 論文《EDA: Easy Data Augmentation Techniques for Boosting Performance on Text Classification Tasks》介紹了幾種NLP數據增強技術,並推出了[EDA github代碼](jasonwei20/eda_nlp)。EDA github repo提出了四種簡單的操作來進行數據增強,以防止過擬合,並提高模型的泛化能力。下面進行簡單的介紹:

1. 同義詞替換(SR: Synonyms Replace):不考慮stopwords,在句子中隨機抽取n個詞,然後從同義詞詞典中隨機抽取同義詞,並進行替換。

2. 隨機插入(RI: Randomly Insert):不考慮stopwords,隨機抽取一個詞,然後在該詞的同義詞集合中隨機選擇一個,插入原句子中的隨機位置。該過程可以重複n次。

3. 隨機交換(RS: Randomly Swap):句子中,隨機選擇兩個詞,位置交換。該過程可以重複n次。

4. 隨機刪除(RD: Randomly Delete):句子中的每個詞,以概率p隨機刪除。

上述四種數據增強技術效果如何呢?(這裡以文本分類實驗為例)

在英文的數據上出奇的好!經過上述四種操作,數據增強後的句子可能不易理解,但作者們發現模型變得更加魯棒了,尤其是在一些小數據集上。實驗結果如下:

我們可以發現,僅僅使用50%的訓練數據,使用EDA就能夠達到原始模型使用100%訓練數據的效果。

可能有人會問:使用EDA技術後,改變後的數據和原數據的特徵空間分佈與其標籤是否一致?

作者同樣做了一個實驗,在產品評論數據集上,使用RNN結合EDA數據增強進行訓練,將最後一層的輸出作為文本特徵,使用tSNE進行可視化,得到如下結果:

可以發現,數據增強後的數據分佈與原始數據的分佈非常吻合。這也意味着EDA對於句子的修改,並沒有改變數據分佈以及標籤的分佈。

上述四種數據增強技術,每一個都很有用嗎?

實驗結果如下:

對於四種技術,數據集很小時,每一種技術都能夠有2-3%的提升,當數據集很大時,每一種技術也能夠有1%的提升。根據作者的經驗來看,不要改變超過1/4的詞彙的前提下,模型的魯棒性都能得到很大的提升。

既然EDA很有用,大家可能有一個問題:我們要產生多少個句子來進行數據增強呢?

答案是取決於訓練數據的大小。當訓練數據很小時,模型更容易過擬合,這時建議多生成一些數據增強的樣本。當訓練數據很大時,大量增加數據增強樣本可能沒有幫助,因為模型本身可能已經能夠泛化。實驗結果如下:

其中,橫軸是一個句子平均產生的增強樣本數目,縱軸是模型增益。我們可以看到,當一個句子平均產生4-8個新句子時,模型提升就能達到很好的效果。訓練數據越少,提升效果效果越明顯。過多的數據增強數據實際上對模型的提升有限。EDA中的四種簡單的NLP數據增強技術能夠有效提升文本分類的模型表現。