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)增加噪声数据,提升模型的鲁棒性。

 

 

参考:数据增强方法

全部评论

相关推荐

09-18 20:41
阿里巴巴_后端
要个offer怎么这...:哈哈哈哈哈哈,我也拿了0x10000000个offer,秋招温啦啦啦,好开心
我的秋招日记
点赞 评论 收藏
分享
真tmd的恶心,1.面试开始先说我讲简历讲得不好,要怎样讲怎样讲,先讲背景,再讲技术,然后再讲提升多少多少,一顿说教。2.接着讲项目,我先把背景讲完,开始讲重点,面试官立即打断说讲一下重点,无语。3.接着聊到了项目的对比学习的正样本采样,说我正样本采样是错的,我解释了十几分钟,还是说我错的,我在上一家实习用这个方法能work,并经过市场的检验,并且是顶会论文的复现,再怎么不对也不可能是错的。4.面试官,说都没说面试结束就退出会议,把面试者晾在会议里面,丝毫不尊重面试者难受的点:1.一开始是讲得不好是欣然接受的,毕竟是学习。2.我按照面试官的要求,先讲背景,再讲技术。当我讲完背景再讲技术的时候(甚至已经开始蹦出了几个技术名词),凭什么打断我说讲重点,是不能听出人家重点开始了?这也能理解,每个人都有犯错,我也没放心上。3.我自己做过的项目,我了解得肯定比他多,他这样贬低我做过的项目,说我的工作是错误的,作为一个技术人员,我是完全不能接受的,因此我就和他解释,但无论怎么解释都说我错。凭什么,作为面试官自己不了解相关技术,别人用这个方式work,凭什么还认为这个方法是错的,不接受面试者的解释。4.这个无可厚非,作为面试官,不打招呼就退出会议,把面试者晾着,本身就是有问题。综上所述,我现在不觉得第一第二点也是我的问题,面试官有很大的问题,就是专门恶心人的,总结面试官说教,不尊重面试者,打击面试者,不接受好的面试者,技术一般的守旧固执分子。有这种人部门有这种人怎么发展啊。最后去查了一下,岗位关闭了。也有可能是招到人了来恶心人的,但是也很cs
牛客20646354...:招黑奴啊,算法工程师一天200?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务