廣告行業中那些趣事系列13:NLP中超實用的樣本增強技術

摘要:本文主要解決在樣本數量較少、樣本不均衡或者需要提高模型的魯棒性的場景下通過樣本增強技術提升模型的泛化能力的問題。主要講了近幾年常用的樣本增強技術,其中包括回譯技術、詞彙替換技術、隨機噪聲引入技術和生成式的方法等等。通過這些技術我們可以輕鬆的實現增加訓練樣本的目的。希望對樣本增強技術感興趣的小夥伴有所幫助。

 

本文按照如下思維導圖進行講解:

 

01爲什麼要使用樣本增強技術

1.1 樣本增強技術介紹

深度學習模型效果的好壞和數據的數量和質量強相關。但實際情況是我們大部分時間並沒有那麼多那麼好的數據,這也是深度學習天生的短板:數據不夠多、不夠好。在這種情況下,樣本增強技術能在一定程度幫助我們緩解這個問題。

 

樣本增強技術主要是在不實質性增加樣本的情況下讓有限的樣本產生更大的價值。說句通俗易懂的話就是雖然我只有500條數據,但是能達到別人1000條數據的價值。這就是樣本增強技術的作用。

 

1.2 圖像領域VS自然語言處理領域中的樣本增強技術

先看一張圖像領域中樣本增強技術的效果圖。假如我們現在只有一張小可愛的圖片,通過樣本增強技術,我們可以“旋轉、搖擺、跳躍”,經過種種騷操作咱們可以得到下面64張小可愛的圖片,這樣咱們的樣本量就擴展了64倍。這就是樣本增強技術在圖像領域中的傑出表現。同時附上一個github地址(https://github.com/aleju/imgaug),大家有興趣可以去裏面折騰。

圖1 圖像領域中樣本增強技術效果圖

 

樣本增強技術在圖像領域中有不錯的效果,很多人自然想到將其應用到自然語言處理NLP中。通過下面一張圖咱們看看圖像領域和自然語言處理領域中樣本增強技術的不同之處:


圖2 圖像領域和自然語言處理領域樣本增強技術對比

 

圖中上部分是將一隻貓咪的圖片經過鏡面對稱操作得到的還是一隻貓咪。但是應用到自然語言處理領域中,咱們將一段話打亂之後發現語義信息變了,就相當於把一隻貓變成了一隻狗,那肯定不行。所以通過這張圖片可以看出NLP領域中的樣本增強技術好像要比圖像領域困難的多。

 

1.3 樣本增強技術常見的應用場景

上面介紹了樣本增強技術,現在簡單列舉下我們可以在哪些自然語言處理任務應用場景下使用樣本增強技術:

 

1.3.1 樣本數量較少

樣本增強技術最重要的一個目的就是解決樣本數量較少的問題。在機器學習領域尤其是深度學習樣本數量較少很容易導致模型欠擬合,也就是“巧婦難爲無米之炊”的尷尬境地。管你模型再牛逼,沒有數據那你模型的天花板就已經在那裏了。這種場景下就可以使用樣本增強技術快速增加訓練樣本。

 

1.3.2 樣本不均衡

大部分機器學習場景中都會出現樣本不均衡的問題,比如推薦場景下用戶點擊和非點擊樣本量差距非常大,醫療疾病識別場景下正負樣本的數量也差別非常大,畢竟得病的肯定比不得病的要少得多。在這種情況下,模型一般對於小樣本類別是處於欠擬合的狀態,線上預測時也不會給太高的概率。要解決這個問題,可以通過樣本增強技術來增加正樣本數量,降低正負樣本不平衡的比例,最終提升模型的泛化能力。

 

1.3.3 提高模型的魯棒性

樣本增強技術在自然語言處理任務中可以分成兩類:第一類是通過回譯或者文本複述的方法變換文本的表達,這類方法可以保持文本的語義信息不發生變化。拿回譯技術來說,將一段中文通過谷歌翻譯先譯成英文,然後再翻譯回中文,你會發現藉助牛逼的谷歌翻譯系統我們翻譯回的中文和原句語義是一致的,僅僅在文本表達上有些許差異,就這樣一個簡單的操作實現了樣本翻倍;另一類就是通過局部調整文本實現樣本增強,比如同義詞替換等等操作。這兩類方法的實質都是使模型更加關注文本的語義信息,降低局部噪聲的影響,最終提升模型的魯棒性

 

從上述三種場景來看,不管是小樣本還是大樣本,樣本增強技術都能夠提升模型的泛化能力,所以是NLPer必備的知識點。

 

1.4 應用到我們的業務場景

我在團隊中主要負責使用NLP技術來理解item數據源(比如用戶搜索query或者瀏覽資訊news等文本數據源),其實就是做文本分類。我們有四級廣告類目體系,總共有上百個標籤,也就是說可能需要識別上百個類別。但是尷尬的是隻有一個標註人員,因爲還要標註其他數據源,所以真正用於標註query和news的可能也就半個人力。總結下來就是需要識別的類目很多,但是可以使用的標註人力很少,所以可以用於訓練的樣本數量就比較少。這樣就和咱們應用樣本增強技術的場景完美契合。我們希望通過樣本增強技術可以使用少量的標註樣本也能獲得識別能力不錯的文本分類模型。

 

02 常用的樣本增強技術

 

2.1 回譯技術

回譯技術就是使用先進的翻譯系統(比如谷歌翻譯)將語言A的文本先翻譯成語言B,然後再翻譯回語言A從而實現樣本增強的目的。通過下面一個簡單的例子瞭解回譯技術:


圖3 回譯技術舉例

 

上圖中咱們使用谷歌翻譯系統先把中文語言的原始文本翻譯成英文,然後再翻譯回中文,這樣就得到了一條新的文本數據增強樣本1。如果把英文的文本再翻譯成日文,再將日文翻譯回中文就得到了增強文本2。對比原始文本和增強文本1、2,語義信息完全一致。通過這個例子可以看出回譯技術實用性很強。但是我們也必須清醒的認識到回譯技術效果如此好得益於谷歌翻譯模型的強大。使用回譯技術還有一個好處是通過中間多種語言的轉換,我們可以實現樣本數據N倍的增加。

 

從應用層面來看,回譯技術應該是方便有效的樣本增強技術,借“谷歌強大的翻譯模型”之手輕鬆實現樣本增強的目的。迴歸到機器學習技術本源來看,回譯技術有效的根本原因是遷移學習,我們通過回譯技術把翻譯模型學到的語義、語法、句法等知識轉移到了新生成的樣本上,爲當前自然語言處理任務引入了新的信息和知識來源。

 

回譯技術的效果也是經過考驗的。2018年CMU和Google brain團隊將回譯技術應用於問答模型,最終實驗證明回譯技術能有效提升模型的效果:


圖4 回譯技術有效提升問答模型效果實驗圖

 

同時工業實操上很有借鑑價值的是不同增強倍數和採樣比例下回譯技術對於模型提升的大小如下圖所示:

圖5 不同增強倍數和採樣比例對模型的提升效果圖

 

從圖中兩個紅框部分可以看出回譯技術帶來的性能提升和加入self-attention組件帶來的提升相當。回譯技術從數據層面提升模型的性能,而火爆NLP領域的自注意力機制組件則通過算法層面提升模型的性能。將兩種方法結合同時優化數據和算法,模型的性能會有進一步提升。通過這個實驗從側面證明挖掘數據多維度信息和優化模型架構都非常重要。

 

2.2 詞彙替換技術

這一類技術主要是將文本進行局部替換。

 

2.2.1 基於同義詞典的替換

基於同義詞典的方式主要是從文本中隨機將某個詞替換成同義詞。這種方法的重點是構建一個同義詞庫,比如英語中WordNet數據庫就是一個人工維護的同義詞數據庫。下圖是通過WordNet實現英語同義詞轉換:


圖6 基於同義詞典的樣本增強示例

 

2.2.2 基於Word Embedding的替換

基於Word Embedding的替換技術其實和同義詞典的方法是一致的,只不過後者維護的是詞典,而前者將文本通過embedding的方式映射到向量空間,通過向量的距離來識別相似度,從而決定是否是“同義詞”。在當前萬物皆可embedding的時代這種基於Word Embedding的替換技術顯然要比同義詞典好用的多。通過下圖說明使用Word2Vec、FastText等embedding技術進行樣本增強:


圖7 Word2Vec方法的樣本增強示例

 

上圖中左邊部分是通過Word2Vec技術將word映射到二維向量空間中,距離相近的點語義也相似。通過相似的點替換當前詞從而實現基於WordEmbedding替換的樣本增強。

 

2.2.3 基於Masked LM的替換

基於Masked LM的替換技術相當於是上面基於Word Embedding技術的升級版本。因爲Word2Vec技術無法解決詞歧義性的問題,所以通過Masked LM來根據上下文預測掩碼的詞,Masked LM模型最典型的代表就是NLP領域中具有里程碑意義的BERT模型。BERT模型的一個創新點就是通過Masked LM來根據上下文預測被Masked的詞。通過下圖說明Masked LM如何增強樣本:


圖8 Masked LM方法的樣本增強示例

 

上圖中左邊是通過BERT模型對文本中被Mask的詞進行預測。右邊就是使用模型去預測生成新的樣本。這種方法因爲考慮了上下文信息,所以生成的文本更符合語法規範。

 

2.2.4 基於TF-IDF的替換

基於TF-IDF的替換主要是將文本中不影響語義信息的詞進行替換,一般是非常常見但是又沒啥作用的詞(比如停用詞)。下圖展示了將TF-IDF值小的詞進行替換:


圖9 TF-IDF方法的樣本增強示例

 

2.3 正則表達式的替換技術

基於正則表達式的替換技術主要是使用正則表達式來進行簡單的匹配轉換。下圖展示了一個將動詞從縮寫轉換爲非縮寫的例子來實現樣本增強的例子:


圖10 動詞縮寫轉換方法的樣本增強示例

 

上圖中將she is轉換成縮寫she’s實現樣本增強。但是有時候反向轉換可能存在問題,比如she is和she has的縮寫都是she‘s,但是轉換後可能影響語義信息,所以這種反向轉換是被禁止的。

 

2.4 隨機噪聲引入技術

這類方法主要是向文本中加入噪聲從而生成新的樣本,最終提升模型的魯棒性。

 

2.4.1 引入隨機拼寫錯誤

將文本中的某些詞隨機進行錯誤拼寫,如下圖所示:


圖11 隨機拼寫錯誤引入噪聲的樣本增強示例

 

2.4.2 隨機打亂語句順序

將文本中的語句順序打亂從而生成新的樣本:


圖12 隨機打亂語句順序引入噪聲的樣本增強示例

 

2.4.3 隨機插入非停用詞的同義詞

這種方法是隨機從句子中選擇非停用詞,然後將該詞的同義詞添加到語句中,具體如下圖所示:


圖13 隨機插入非停用詞的同義詞引入噪聲的樣本增強示例

 

2.5 交叉增強技術

2019年TASS論文中提出了一種源自遺傳學中染色體交叉操作的交叉增強技術。聽起來特別高大上,通過下圖看看具體怎麼進行交叉增強的:


圖14 交叉增強技術的樣本增強示例

 

上圖中有兩條積極情感的推特數據,將每條數據分成兩段。用數據1中的上半段和數據2中的下半段組成一條新的數據。這種做法假設即使語法和語義不再健全,但是仍然會保留原有的情緒類別。實驗證明這種方法雖然對準確性沒啥影響,但是F1-score有提升。只想說這都是什麼神仙做法,語義和語法信息都變了,感覺這種方法可能適合個別場景。

 

2.6 操縱語法樹技術

操縱語法樹技術的思想是通過解析並生成原始語句的依賴樹,然後使用規則對原來的語句進行復述從而生成新數據。下面就是一個典型的主動語態和被動語態轉換的例子:

圖15 主動語態轉換成被動語態的樣本增強示例

 

上圖中我們把I love NLP轉化成NLPis loved by me。這種方法雖然看起來傻傻的,但是細想還是非常不錯的一個idea。

 

2.7 生成式的方法

生成式的方法主要目標是生成額外訓練數據的同時保留原始類別的標籤。

這類方法的大致流程如下所示:

首先,在訓練數據中加入類別標籤信息,如下圖所示:


圖16 數據中加入類別標籤信息

 

這種方法非常類似香儂科技提出的基於類別描述的文本分類模型,感覺思路就是從這裏來的。

 

然後,使用這個修改之後的數據去微調訓練一個預訓練語言模型,這裏可以是BERT/GPT2等。現在好像出來了GPT3,後面會出一篇從GPT、GPT2到GPT3的文章,歡迎小夥伴們關注。如果是GPT2的話,那麼目標就是去做生成式任務;如果是BERT模型的話,那麼目標就是去預測被Mask的詞。

 


圖17 使用GPT2去做生成式任務

 

最後,得到經過微調的預訓練模型後就可以使用類目標籤和幾個初始的詞來幫助模型生成新的數據。下圖中就是使用標籤信息和前三個詞來生成新的數據實現樣本增強。


圖18 通過生成式的方法生成新的數據

 

03 實戰樣本增強技術

3.1 常用的樣本增強工具

上面講了那麼多的樣本增強技術,具體有哪些好用的第三方庫來幫助我們使用這些技術呢?這裏可以使用nlpaugtextattack等。說了那麼多樣本增強技術,整體來看我更傾向於用回譯技術和生成式的方法。先借谷歌翻譯系統的東風快速增加一批樣本用於提升模型的識別能力,然後可以嘗試用現在比較火的生成式的方法進一步實現樣本增強。

 

3.2 關於樣本增強技術的一些思考

結合我們實際業務來說,通過樣本增強技術可以增加一些樣本數據,從而幫助我們在當前的語料空間中學習的更好,但是並不能解決語料空間擴展的問題。舉個簡單的例子,我們現在需要識別理財標籤的文本數據。理財標籤可能包括基金、股票、保險等等。理財語料空間如下圖所示:


圖19 理財語料空間圖

 

如果現有的標註數據只有股票和基金相關的語料,通過樣本增強技術我們可以豐富這兩塊的語料空間,從而幫助模型在這兩塊的語料空間獲得更好的文本分類效果。但是如果碰到了保險或者其他之前沒有標註過的語料,那麼模型的識別效果會變弱。這種情況下我們的解決方案是構造一個線上真實分佈query的測試集。當模型訓練完成後,我們會使用預先從訓練語料中切分出來的測試集來驗證模型的效果。這裏得到的測試集效果是用於評估模型在已知語料空間中的識別能力。實際項目中我們還會去線上真實分佈query測試集驗證模型。這塊得到的模型效果一般會比較差,因爲線上真實分佈query測試集可以大致理解成理財的全部語料空間。我們模型的最終目的是在線上真實分佈query測試集上表現良好,而不僅僅是在預先劃分出來的測試集上表現良好。這裏我們可以通過分析線上分佈query測試集上預測錯誤的數據幫助我們擴展語料空間。這是我在實際項目中的一些思考,如果有理解不對的地方也請小夥伴們指出。

 

總結

本文先介紹了下爲什麼要使用樣本增強技術。在樣本數量較少、樣本不均衡或者需要提高模型的魯棒性的場景下,我們可以使用樣本增強技術很好的提升模型的泛化能力;然後講了近幾年常用的樣本增強技術,其中包括回譯技術、詞彙替換技術、隨機噪聲引入技術和生成式的方法等等。通過這些技術我們可以輕鬆的實現增加訓練樣本的目的;最後講了一些常用的樣本增強的工具包,比如nlpaug和textattack等。同時分享了下實際項目中對樣本增強技術的一些思考。樣本增強技術可以增加當前語料空間下的訓練樣本,但是無法解決語料空間擴展的問題。這裏可以通過線上真實分佈query數據來擴展語料空間。希望對樣本增強技術感興趣的小夥伴有所幫助。

 

參考資料

https://amitness.com/2020/05/data-augmentation-for-nlp/

 

最新最全的文章請關注我的微信公衆號:數據拾光者。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章