集合啦,NLP數(shù)據(jù)增強(qiáng)技術(shù)!超全資源匯總
本文經(jīng)AI新媒體量子位(公眾號(hào)ID:QbitAI)授權(quán)轉(zhuǎn)載,轉(zhuǎn)載請聯(lián)系出處。
數(shù)據(jù)增強(qiáng)技術(shù)已經(jīng)是CV領(lǐng)域的標(biāo)配,比如對圖像的旋轉(zhuǎn)、鏡像、高斯白噪聲等等。
但在NLP領(lǐng)域,針對文本的數(shù)據(jù)增強(qiáng),卻是不那么多見。
于是,就有一位機(jī)器學(xué)習(xí)T型工程師,在現(xiàn)有的文獻(xiàn)中,匯總一些NLP數(shù)據(jù)增強(qiáng)技術(shù)。

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

這個(gè)技術(shù)比較常見,在以往的論文中有很多都使用了這個(gè)技術(shù),比如,
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
要實(shí)現(xiàn)這項(xiàng)技術(shù),可通過NLTK對WordNet進(jìn)行訪問,還可以使用TextBlob API。
此外,還有一個(gè)PPDB數(shù)據(jù)庫,包含著百萬個(gè)單詞的詞庫。
詞嵌入替換
這種方法是,采取已經(jīng)預(yù)訓(xùn)練好的單詞嵌入,如Word2Vec、GloVe、FastText、Sent2Vec等,并將嵌入空間中最近的鄰接詞作為句子中某些單詞的替換。
比如:

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

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

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

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

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

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

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

但是也會(huì)出現(xiàn)一些歧義,比如:

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

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

句子改組。

空白噪聲。

隨機(jī)插入。

隨機(jī)交換。

隨機(jī)刪除。

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

文本混合
這項(xiàng)技術(shù)的想法源于一項(xiàng)名為“Mixup”的圖像增強(qiáng)技術(shù)。

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

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