NLP數據增強方法總結及實現

目錄

1、數據增強

2、簡單數據增強(Easy Data Augmentation,EDA)

(1)EDA方法

(2)EDA工具使用方法

(3)EDA相關工具

3、回譯

4、基於上下文的數據增強方法

5、數據增強的作用


1、數據增強

數據增強是擴充數據樣本規模的一種有效地方法,數據的規模越大、質量越高越好,模型才能夠有着更好的泛化能力。

2、簡單數據增強(Easy Data Augmentation,EDA)

(1)EDA方法

同義詞替換、隨機插入、隨機交換、隨機刪除

  • 同義詞替換(Synonym Replacement, SR):從句子中隨機選取n個不屬於停用詞集的單詞,並隨機選擇其同義詞替換它們;
  • 隨機插入(Random Insertion, RI):隨機的找出句中某個不屬於停用詞集的詞,並求出其隨機的同義詞,將該同義詞插入句子的一個隨機位置。重複n次;
  • 隨機交換(Random Swap, RS):隨機的選擇句中兩個單詞並交換它們的位置。重複n次;
  • 隨機刪除(Random Deletion, RD):以 $p$ 的概率,隨機的移除句中的每個單詞。

(2)EDA工具使用方法

  • 先將需要處理的語料按照下面的例子處理好成固定的格式

0 今天天氣不錯哦。

1 今天天氣不行啊!不能出去玩了。

0 又是陽光明媚的一天!

即,標籤+一個製表符\t+內容

  • 命令使用例子
$python code/augment.py --input=train.txt --output=train_augmented.txt --num_aug=16 --alpha=0.05

其中:

  • input參數:需要進行增強的語料文件
  • output參數:輸出文件
  • num_aug參數:每一條語料將增強的個數
  • alpha參數:每一條語料中改動的詞所佔的比例

(3)EDA相關工具

3、回譯

在這個方法中,我們用機器翻譯把一段中文翻譯成另一種語言,然後再翻譯回中文。回譯的方法不僅有類似同義詞替換的能力,它還具有在保持原意的前提下增加或移除單詞並重新組織句子的能力。

回譯可使用python translate包和textblob包(少量翻譯),或者使用百度翻譯或谷歌翻譯的api通過python實現。

百度開放的翻譯接口http://api.fanyi.baidu.com/api/trans/product/apidoc支持每月200萬字的免費翻譯,提供了各種語言的使用demo,本篇使用Python3調用百度API實現自然語言的翻譯,實現代碼如下。

import http.client
import hashlib
import json
import urllib
import random
 
 
#調用百度翻譯API將中文翻譯成英文
def baidu_translate(content):
    appid = 'appid'
    secretKey = '祕鑰'
    httpClient = None
    myurl = '/api/trans/vip/translate'
    q = content
    fromLang = 'zh'  # 源語言
    toLang = 'en'  # 翻譯後的語言
    salt = random.randint(32768, 65536)
    sign = appid + q + str(salt) + secretKey
    sign = hashlib.md5(sign.encode()).hexdigest()
    myurl = myurl + '?appid=' + appid + '&q=' + urllib.parse.quote(
        q) + '&from=' + fromLang + '&to=' + toLang + '&salt=' + str(
        salt) + '&sign=' + sign
 
    try:
        httpClient = http.client.HTTPConnection('api.fanyi.baidu.com')
        httpClient.request('GET', myurl)
 
        # response是HTTPResponse對象
        response = httpClient.getresponse()
        jsonResponse = response.read().decode("utf-8")  # 獲得返回的結果,結果爲json格式
        js = json.loads(jsonResponse)  # 將json格式的結果轉換字典結構
        dst = str(js["trans_result"][0]["dst"])  # 取得翻譯後的文本結果
        #print(dst)  # 打印結果
        return dst
    except Exception as e:
        print('err:' + e)
    finally:
        if httpClient:
            httpClient.close()
 
if __name__=='__main__':
    contents='百度翻譯開放平臺是百度翻譯針對廣大開發者提供的開放服務平臺'
    
    #將翻譯後的英文寫入文件
    with open('data/test_data_translate', 'a', encoding="utf-8") as f:
        translate_en = baidu_translate_1(contents)  # 中文翻譯成英文
        f.write( '\t' + translate_zh + '\n')
        
        print(translate_en)

4、基於上下文的數據增強方法

(1)方法論文:Contextual Augmentation: Data Augmentation by Words with Paradigmatic Relations

(2)方法實現代碼:使用雙向循環神經網絡進行數據增強。

(3)該方法目前針對於英文數據進行增強,實驗工具:spacy(NLP自然語言工具包)和chainer(深度學習框架)。

5、數據增強的作用

(1)增加訓練的數據量,提高模型的泛化能力。

(2)增加噪聲數據,提升模型的魯棒性。

 

 

參考:數據增強方法

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