集合啦,NLP數據增強技術!超全資源匯總
本文經AI新媒體量子位(公眾號ID:QbitAI)授權轉載,轉載請聯系出處。
數據增強技術已經是CV領域的標配,比如對圖像的旋轉、鏡像、高斯白噪聲等等。
但在NLP領域,針對文本的數據增強,卻是不那么多見。
于是,就有一位機器學習T型工程師,在現有的文獻中,匯總一些NLP數據增強技術。

妥妥干貨,在此放送。
文本替代
文本替代主要是針對在不改變句子含義的情況下,替換文本中的單詞,比如,同義詞替換、詞嵌入替換等等。
接著,我們就來好好介紹一下。
同義詞替換
顧名思義,就是在文本中隨機抽取一個單詞,然后再同義詞庫里將其替換為同義詞。
比如,使用WordNet數據庫,將「awesome」替換為「amazing」。

這個技術比較常見,在以往的論文中有很多都使用了這個技術,比如,
Zhang et al.「Character-level Convolutional Networks for Text Classification」
論文鏈接:
https://arxiv.org/abs/1509.01626
Wei et al. 「EDA: Easy Data Augmentation Techniques for Boosting Performance on Text Classification Tasks」
論文鏈接:
https://arxiv.org/abs/1901.11196
要實現這項技術,可通過NLTK對WordNet進行訪問,還可以使用TextBlob API。
此外,還有一個PPDB數據庫,包含著百萬個單詞的詞庫。
詞嵌入替換
這種方法是,采取已經預訓練好的單詞嵌入,如Word2Vec、GloVe、FastText、Sent2Vec等,并將嵌入空間中最近的鄰接詞作為句子中某些單詞的替換。
比如:

這樣,就可以將單詞替換成臨近的3個單詞,獲得文本的3種變體形式。

掩碼語言模型(MLM)
類似于BERT、ROBERTA、ALBERT,Transformer模型已經在大量的文本訓練過,使用掩碼語言模型的前置任務。
在這個任務中,模型必須依照上下文來預測掩碼的單詞。此外,還可以利用這一點,對文本進行擴容。

跟之前的方法相比,生成的文本在語法上會更加連貫。

但是,需要注意的是,決定掩蓋哪一個單詞并非易事,它決定了效果的最終呈現。
基于TF-IDF的單詞替換
這一方法最初是出現在Xie et al.「Unsupervised Data Augmentation for Consistency Training」。
論文鏈接:
https://arxiv.org/abs/1904.12848
基本思路在于TF-IDF得分低的單詞是沒有信息量的的詞,因此可以替換,而不影響句子的原本含義。

通過計算整個文檔中單詞的 TF - IDF得分并取最低得分來選擇替換原始單詞的單詞。
反向翻譯
反向翻譯,就是先將句子翻譯成另一種語言,比如,英語翻譯成法語。
然后再翻譯回原來的語言,也就是將法語翻譯回英語。
檢查兩個句子之間的不同之處,由此將新的句子作為增強文本。

還可以一次使用多種語言進行反向翻譯,產生更多的變體。
比如,除了法語以外,再將其翻譯為漢語和意大利語。

要實現反向翻譯,可以使用TextBlob。另外,還可以使用Google Sheets,說明書已附文末。
文本形式轉換
這一方法主要是利用正則表達式應用的的簡單模式匹配轉換,在Claude Coulombe的論文「Text Data Augmentation Made Simple By Leveraging NLP Cloud APIs」中有詳細介紹。
論文鏈接:
https://arxiv.org/abs/1812.04718
舉個簡單的例子,將原本形式轉換為縮寫,反之亦然。

但是也會出現一些歧義,比如:

在此,選擇允許歧義的收縮,但不允許擴展。

Python的收縮庫已附文末。
隨機噪聲注入
顧名思義,也就是在文本中注入噪聲,來訓練模型對擾動的魯棒性。
比如,拼寫錯誤。

句子改組。

空白噪聲。

隨機插入。

隨機交換。

隨機刪除。

語法樹
這一方法也出現在了Claude Coulombe的論文「Text Data Augmentation Made Simple By Leveraging NLP Cloud APIs」中。
論文鏈接:
https://arxiv.org/abs/1812.04718
其思路是解析并生成原句的從屬樹,利用規則進行轉換,生成新句子。
比如,將句子的主動語氣轉換為被動語氣,反之亦然。

文本混合
這項技術的想法源于一項名為“Mixup”的圖像增強技術。

Guo et al.在此基礎上進行了修改,將其應用到NLP。
「Augmenting Data with Mixup for Sentence Classification: An Empirical Study」
論文鏈接:
https://arxiv.org/abs/1905.08941
主要有兩種方法。
wordMixup
這個方法在于,抽取兩個隨機的句子,將它們進行零填充,使其長度相同。然后,按一定比例組合在一起。
所得到的單詞嵌入通過CNN/LSTM編碼器傳遞到句子嵌入中,隨后計算交叉熵損失。

sentMixup
可以看到這一方法,與上述方法類似,只不過在具體步驟上有所調整。
好了,NLP的數據增強技術就介紹到這里,希望能夠對你有所幫助。
傳送門
博客地址:
https://amitness.com/2020/05/data-augmentation-for-nlp/
WordNet數據集:
https://www.nltk.org/howto/wordnet.html
TextBlob API:https://textblob.readthedocs.io/en/dev/quickstart.html#wordnet-integration
PPDB數據集:http://paraphrase.org/#/download
YF-IDF代碼:
https://github.com/google-research/uda/blob/master/text/augmentation/word_level_augment.py
使用Google Sheets實現反向翻譯:
https://amitness.com/2020/02/back-translation-in-google-sheets/
Python收縮庫:
https://github.com/kootenpv/contractions