NLP中資料增強的綜述,快速的生成大量的訓練資料

2021-10-06 12:54:58 字數 3477 閱讀 4733

編譯:ronghuaiyang

正文共:4345 字 21 圖

深度學習視覺領域的增強方法可以很大程度上提高模型的表現,並減少資料的依賴,而nlp上做資料增強不像在影象上那麼方便,但還是有一些方法的。

與計算機視覺中使用影象進行資料增強不同,nlp中文字資料增強是非常罕見的。這是因為影象的一些簡單操作,如將影象旋轉或將其轉換為灰度,並不會改變其語義。語義不變變換的存在使增強成為計算機視覺研究中的乙個重要工具。

我很好奇是否有人嘗試開發nlp的增強技術,並研究了現有的文獻。在這篇文章中,我將分享我對當前用於增加文字資料的方法的發現。

這種方法試圖在不改變句子主旨的情況下替換文字中的單詞。

基於詞向量的替換在這種方法中,我們採用預先訓練好的單詞嵌入,如word2vec、glove、fasttext、sent2vec,並使用嵌入空間中最近的相鄰單詞替換句子中的某些單詞。jiao et al.在他們的**「tinybert」中使用了這種技術,以提高他們的語言模型在下游任務上的泛化能力。wang et al.使用它來增加學習主題模型所需的tweet。

例如,你可以用三個最相似的單詞來替換句子中的單詞,並得到文字的三個變體。

使用像gensim這樣的包來訪問預先訓練好的字向量和獲取最近的鄰居是很容易的。例如,這裡我們通過訓練推特上的單詞向量找到了單詞「awesome」的同義詞。

# pip install gensim

import gensim.********** as api

model = api.load('glove-twitter-25')  

model.most_similar('awesome', topn=5)

你會得到5個最相似的單詞和余弦相似度。

因此,我們可以使用mask**來生成文字的變體。與之前的方法相比,生成的文字在語法上更加連貫,因為模型在進行**時考慮了上下文。

使用開源庫這很容易實現,如hugging face的transformers。你可以將你想要替換的token設定為並生成**。

from transformers import pipeline

nlp = pipeline('fill-mask')

nlp('this is cool')

[, ,

, ,]

然而,這種方法的乙個問題是,決定要遮蔽文字的哪一部分並不是一件小事。你必須使用啟發式的方法來決定掩碼,否則生成的文字將不保留原句的含義。

要替換的單詞是從整個文件中tf-idf分數較低的整個詞彙表中選擇的。你可以參考原文中的實現:

在這種方法中,我們利用機器翻譯來解釋文字,同時重新訓練含義。xie et al.使用這種方法來擴充未標註的文字,並在imdb資料集中學習乙個只有20個有標註樣本的半監督模型。該方法優於之前的先進模型,該模型訓練了25,000個有標註的樣本。

反向翻譯過程如下:

![img](a visual survey of data augmentation in nlp.assets/nlp-aug-backtranslation-multi.png)

這項技術也被用在了的kaggle上的「toxic comment classification challenge」的第一名解決方案中。獲勝者將其用於訓練資料增強和測試期間,在測試期間,對英語句子的**概率以及使用三種語言(法語、德語、西班牙語)的反向翻譯進行平均,以得到最終的**。

對於反向翻譯的實現,可以使用textblob。或者,你也可以使用google sheets,並按照此處給出的說明:免費申請谷歌翻譯。

這些是使用正規表示式的簡單的模式匹配的轉換,由claude coulombe在他的**中介紹。

在本文中,他給出了乙個將動詞形式由簡寫轉化為完整形式或者反過來的例子。我們可以通過這個來生成增強型文字。

既然轉換不應該改變句子的意思,我們可以看到,在擴充套件模稜兩可的動詞形式時,這可能會失敗,比如:

為了解決這一問題,本文提出允許模糊收縮,但跳過模糊展開。

你可以在這裡找到英語縮略語的列表:

這些方法的思想是在文字中加入雜訊,使所訓練的模型對擾動具有魯棒性。

這項技術是由luque在他的關於tass 2019情緒分析的**中提出的。這項技術的靈感來自於遺傳學中發生的染色體交叉操作。

該方法將tweets分為兩部分,兩個具有相同極性的隨機推文(即正面/負面)進行交換。這個方法的假設是,即使結果是不符合語法和語義的,新文字仍將保留情感的極性。

這一技術對準確性沒有影響,但有助於**中極少數類的f1分數,如tweets較少的中性類。

這項技術已經在coulombe的**中使用。其思想是解析和生成原始句子的依賴關係樹,使用規則對其進行轉換,並生成改寫後的句子。

例如,乙個不改變句子意思的轉換是句子從主動語態到被動語態的轉換,反之亦然。

要使用上述所有方法,可以使用名為nlpaug的python庫:它提供了乙個簡單且一致的api來應用這些技術。

我從文獻綜述中得出的結論是,這些增強方法中有許多是非常特定於任務的,它們對效能的影響僅針對某些特定用例進行了研究。系統地比較這些方法並分析它們對許多任務的效能的影響將是一項有趣的研究。

—end—

NLP中的資料增強

相關方法合集見 較為簡單的資料增強的方法見 中所使用的方法如下 1.同義詞替換 sr synonyms replace 不考慮stopwords,在句子中隨機抽取n個詞,然後從同義詞詞典中隨機抽取同義詞,並進行替換。同義詞其詞向量可能也更加接近,在使用詞向量的模型中不一定有用 2.隨機插入 ri r...

快速理解NLP中的Attention機制

常規的機器翻譯採用encoder decoder結構,其中兩個模組的目的是 這樣的問題在於,每一次的輸出y iy i yi 所關注的語義內容可能並不是一樣的,比如句子 請結合上圖來理解這些公式 總而言之,整個attention的計算過程如下所示 mti viq t 1m v iq mti v i q...

資料增強 自動駕駛中的資料增強

本文摘取了matt cooper對自動駕駛資料增強的一些看法。文章的核心觀點是,針對特定的模型必須分析確定特定的資料增強器,不能把增強器技術黑箱使用,否在會產生過擬合。問題起源 作者在實習的時候實現乙個資料增強器,以改進物件檢測工作。這其中,一種簡單的技術被稱為裁剪正則化。簡而言之,就是在輸入影象中...