一键中文数据增强包 ; NLP数据增强、bert数据增强、EDA:pip install nlpcda

NLP Chinese Data Augmentation 一键中文数据增强工具

使用:pip install nlpcda

开源不易,欢迎 star🌟

pypi:https://pypi.org/project/nlpcda/


介绍

一键中文数据增强工具,支持:

经过细节特殊处理,比如不改变年月日数字,尽量保证不改变原文语义。即使改变也能被猜出来、能被猜出来、能被踩出来、能被菜粗来、被菜粗、能菜粗来

WIP

  • 基于语音的洗文本过程(类似翻译)。文本语音>语音识别回文本:基于fastspeech2对文本生成语音,基于wav2vec2语音识别文本

例子:

input: 新华社北京消息 > fastspeech2 > x.wav

x.wav > wav2vec2 > output: 新华设北京消息

  • 数字转换工具(用于文本转换、中文语音合成需要纯中文)

今天是8月29日消息 > 今天是八月二十九日消息

我有1234个苹果 > 我有一千二百三十四个苹果

意义

  • 在不改变原文语义的情况下,生成指定数量的训练语料文本
  • 对NLP模型的泛化性能、对抗攻击、干扰波动,有很好的提升作用
  • 参考比赛(本人用此策略+base bert拿到:50±/1000):https://www.biendata.com/competition/2019diac/

⚠️ 单纯刷准确率分数的比赛,用此包一般不会有分数提升


API

1.随机(等价)实体替换

参数:

  • base_file :缺省时使用内置(公司)实体。对公司实体进行替换

    是文本文件路径,内容形如:
    实体1
    实体2

    实体n

  • create_num=3 :返回最多3个增强文本
  • change_rate=0.3 : 文本改变率
  • seed : 随机种子
from nlpcda import Randomword

test_str = '''这是个实体:58同城;今天是2020年3月8日11:40,天气晴朗,天气很不错,空气很好,不差;这个nlpcad包,用于方便一键数据增强,可有效增强NLP模型的泛化性能、减少波动、抵抗对抗攻击'''

smw = Randomword(create_num=3, change_rate=0.3)
rs1 = smw.replace(test_str)

print('随机实体替换>>>>>>')
for s in rs1:
    print(s)
'''
随机实体替换>>>>>>
这是个实体:58同城;今天是2020年3月8日11:40,天气晴朗,天气很不错,空气很好,不差;这个nlpcad包,用于方便一键数据增强,可有效增强NLP模型的泛化性能、减少波动、抵抗对抗攻击
这是个实体:长兴国际;今天是2020年3月8日11:40,天气晴朗,天气很不错,空气很好,不差;这个nlpcad包,用于方便一键数据增强,可有效增强NLP模型的泛化性能、减少波动、抵抗对抗攻击
这是个实体:浙江世宝;今天是2020年3月8日11:40,天气晴朗,天气很不错,空气很好,不差;这个nlpcad包,用于方便一键数据增强,可有效增强NLP模型的泛化性能、减少波动、抵抗对抗攻击
'''

2.随机同义词替换

参数:

  • base_file :缺省时使用内置同义词表,你可以设定/自己指定更加丰富的同义词表:

    是文本文件路径,内容形如(空格隔开):
    Aa01A0 人类 生人 全人类
    id2 同义词b1 同义词b2 … 同义词bk

    idn 同义词n1 同义词n2\

  • create_num=3 :返回最多3个增强文本
  • change_rate=0.3 : 文本改变率
  • seed : 随机种子
from nlpcda import Similarword

test_str = '''这是个实体:58同城;今天是2020年3月8日11:40,天气晴朗,天气很不错,空气很好,不差;这个nlpcad包,用于方便一键数据增强,可有效增强NLP模型的泛化性能、减少波动、抵抗对抗攻击'''

smw = Similarword(create_num=3, change_rate=0.3)
rs1 = smw.replace(test_str)

print('随机同义词替换>>>>>>')
for s in rs1:
    print(s)

'''
随机同义词替换>>>>>>
这是个实体:58同城;今天是2020年3月8日11:40,天气晴朗,天气很不错,空气很好,不差;这个nlpcad包,用于方便一键数据增强,可有效增强NLP模型的泛化性能、减少波动、抵抗对抗攻击
这是个实体:58同城;今天是2020年3月8日11:40,天气晴朗,天气很不错,空气很好,不差;这个nlpcad包,用于方便一键数量增强,可有效增强NLP模型的泛化性能、减少波动、抵抗对抗攻击
这是个实体:58同城;今天是2020年3月8日11:40,天气晴朗,天气很不错,空气很好,不差;斯nlpcad包,用于方便一键数据增强,可有效增强NLP模型的泛化性能、减少波动、抵抗对抗攻击
'''


3.随机近义字替换

参数:

  • base_file :缺省时使用内置【同义同音字表】,你可以设定/自己指定更加丰富的同义同音字表:

    是文本文件路径,内容形如(\t隔开):
    de 的 地 得 德 嘚 徳 锝 脦 悳 淂 鍀 惪 恴 棏
    拼音2 字b1 字b2 … 字bk

    拼音n 字n1 字n2\

  • create_num=3 :返回最多3个增强文本
  • change_rate=0.3 : 文本改变率
  • seed : 随机种子
from nlpcda import Homophone

test_str = '''这是个实体:58同城;今天是2020年3月8日11:40,天气晴朗,天气很不错,空气很好,不差;这个nlpcad包,用于方便一键数据增强,可有效增强NLP模型的泛化性能、减少波动、抵抗对抗攻击'''

smw = Homophone(create_num=3, change_rate=0.3)
rs1 = smw.replace(test_str)

print('随机近义字替换>>>>>>')
for s in rs1:
    print(s)

'''
随机近义字替换>>>>>>
这是个实体:58同城;今天是2020年3月8日11:40,天气晴朗,天气很不错,空气很好,不差;这个nlpcad包,用于方便一键数据增强,可有效增强NLP模型的泛化性能、减少波动、抵抗对抗攻击
这是个实体:58同城;今填是2020年3月8日11:40,天气晴朗,天气很不错,空气痕好,不差;这个nlpcad包,用于方便一键数据增强,可有效增强NLP模型的泛化性能、减少波动、抵抗对抗攻击
鷓是个实体:58同乘;今天是2020年3月8日11:40,天迄晴朗,天气很不错,空气很儫,不差;这个nlpcad包,用于方便一键数据增强,犐有效增牆NLP模型的橎化性能、减少波动、抵抗对抗攻击
'''

4.随机字删除

参数:

  • create_num=3 :返回最多3个增强文本
  • change_rate=0.3 : 文本改变率
  • seed : 随机种子
from nlpcda import RandomDeleteChar

test_str = '''这是个实体:58同城;今天是2020年3月8日11:40,天气晴朗,天气很不错,空气很好,不差;这个nlpcad包,用于方便一键数据增强,可有效增强NLP模型的泛化性能、减少波动、抵抗对抗攻击'''

smw = RandomDeleteChar(create_num=3, change_rate=0.3)
rs1 = smw.replace(test_str)

print('随机字删除>>>>>>')
for s in rs1:
    print(s)

'''
随机字删除>>>>>>
这是个实体:58同城;今天是2020年3月8日11:40,天气晴朗,天气很不错,空气很好,不差;这个nlpcad包,用于方便一键数据增强,可有效增强NLP模型的泛化性能、减少波动、抵抗对抗攻击
这是个实体:58同城;今天是2020年3月8日11:40,天气晴朗,天气很不错,空气,不差;这个nlpcad包用于方便一键数据增强,可有效增强NLP模型的泛化性能、减少波动、抵抗对抗
个实体:58同城;今天是2020年3月8日11:40,天气晴朗,天气很不错空气很好,不差;这个nlpcad包,用于方便一键数据增强,可有效增强NLP模型泛化性能、减少波动、抵抗对抗
'''

5.NER命名实体 数据增强

输入标注好的NER数据目录,和需要增强的标注文件路径,和增强的数量,即可一键增强

Ner类参数:

  • ner_dir_name=‘ner_data’ : 在ner数据放在ner_data目录下(里面很多.txt)
  • ner_dir_name提供的目录下是各种标注数据文件,文件内容以标准的NER 的BIO格式分开:

字1 \t TAG

北 \t B-LOC

京 \t I-LOC

今 \t O

天 \t O

很 \t O

热 \t O

。 \t O

  • ignore_tag_list=[‘O’] : 数据里面O标签的不需要管
  • data_augument_tag_list=[‘P’, ‘LOC’] : 只对P、LOC标签的实体做增强
  • augument_size=3 : 每条标注数据,最多新增强数量
  • seed=0 : 随机种子/ 可缺省

调用函数augment()参数

  • file_name: 1条标注训练文件的路径,如0.txt
  • ner.augment(file_name=‘0.txt’)

例子:

from nlpcda import Ner

ner = Ner(ner_dir_name='ner_data',
        ignore_tag_list=['O'],
        data_augument_tag_list=['P', 'LOC','ORG'],
        augument_size=3, seed=0)
data_sentence_arrs, data_label_arrs = ner.augment(file_name='0.txt')
# 3条增强后的句子、标签 数据,len(data_sentence_arrs)==3
# 你可以写文件输出函数,用于写出,作为后续训练等
print(data_sentence_arrs, data_label_arrs)

6.随机置换邻近的字

  • char_gram=3:某个字只和邻近的3个字交换
  • 内部细节:遇到数字,符号等非中文,不会交换
from nlpcda import CharPositionExchange

ts = '''这是个实体:58同城;今天是2020年3月8日11:40,天气晴朗,天气很不错,空气很好,不差;这个nlpcad包,用于方便一键数据增强,可有效增强NLP模型的泛化性能、减少波动、抵抗对抗攻击'''
smw = CharPositionExchange(create_num=3, change_rate=0.3,char_gram=3,seed=1)
rs=smw.replace(ts)
for s in rs:
    print(s)

'''
这是个实体:58同城;今天是2020年3月8日11:40,天气晴朗,天气很不错,空气很好,不差;这个nlpcad包,用于方便一键数据增强,可有效增强NLP模型的泛化性能、减少波动、抵抗对抗攻击
这实个是体:58城同;今天是2020年3月8日11:40,天气晴朗,天气很不错,空气很好,差不;这个nlpcad包,便用一数方增键强据于,增有效可强NLP模型性泛化的能、动少减波、抵对攻抗抗击
这是个体实:58城同;今是天2020年3月8日11:40,朗气晴天,天气很错不,空好很气,不差;个这nlpcad包,方便键一据增用数于强,可有效强增NLP模型的性化泛能、动减波少、抗抗击抵对攻
'''

7.等价字替换

参数:

  • base_file :缺省时使用内置【等价数字字表】,你可以设定/自己指定更加丰富的等价字表(或者使用函数:add_equivalent_list):

    是文本文件路径,内容形如((\t)隔开):
    0 零 〇
    1 一 壹 ①

    9 九 玖 ⑨

  • create_num=3 :返回最多3个增强文本
  • change_rate=0.3 : 文本改变率
  • seed : 随机种子
from nlpcda import EquivalentChar

test_str = '''今天是2020年3月8日11:40,天气晴朗,天气很不错。'''

s = EquivalentChar(create_num=3, change_rate=0.3)
# 添加等价字
s.add_equivalent_list(['看', '瞅'])
res=s.replace(test_str)
print('等价字替换>>>>>>')
for s in res:
    print(s)

'''
等价字替换>>>>>>
今天是2020年3月8日11:40,天气晴朗,天气很不错。
今天是二〇2〇年3月八日1①:4〇,天气晴朗,天气很不错。
今天是二0贰零年3月捌日11:40,天气晴朗,天气很不错
'''

添加自定义词典

用于使用之前,增加分词效果

from nlpcda import Randomword
from nlpcda import Similarword
from nlpcda import Homophone
from nlpcda import RandomDeleteChar
from nlpcda import Ner
from nlpcda import CharPositionExchange

Randomword.add_word('小明')
Randomword.add_words(['小明','小白','天地良心'])
# Similarword,Homophone,RandomDeleteChar 同上

8.翻译互转实现的增强

1.百度中英翻译互转实现的增强
note:

申请你的 appid、secretKey: http://api.fanyi.baidu.com/api/trans

from nlpcda import baidu_translate

zh = '天气晴朗,天气很不错,空气很好'
# 申请你的 appid、secretKey
# 两遍洗数据法(回来的中文一般和原来不一样,要是一样,就不要了,靠运气?)
en_s = baidu_translate(content=zh, appid='xxx', secretKey='xxx',t_from='zh', t_to='en')
zh_s = baidu_translate(content=en_s, appid='xxx', secretKey='xxx',t_from='en', t_to='zh')
print(zh_s)

2.谷歌翻译互转实现的增强

pip 包:py-googletrans

免费的谷歌翻译API,需要翻墙且不稳定

https://py-googletrans.readthedocs.io/en/latest

pip install googletrans

from googletrans import Translator
def googletrans(content='一个免费的谷歌翻译API', t_from='zh-cn', t_to='en'):
    translator = Translator()
    s = translator.translate(text=content, dest=t_to,src=t_from)
    return s.text

9.simbert

来源:https://github.com/ZhuiyiTechnology/pretrained-models

参考:https://github.com/ZhuiyiTechnology/simbert

下载其中任意模型,解压到任意位置赋值给model_path变量:

名称训练数据大小词表大小模型大小下载地址
SimBERT Tiny2200万相似句组1368526MB百度网盘(1tp7)
SimBERT Small2200万相似句组1368549MB百度网盘(nu67)
SimBERT Base2200万相似句组13685344MB百度网盘(6xhq)

参数:

  • config:model_path(上述下载的模型位置),设备(cpu/cuda…)、最大长度、随机种子
  • sent:需要增强的句子
  • create_num:构造的句子数量

环境参考(手动安装):


keras==2.3.1
bert4keras==0.7.7
# tensorflow==1.13.1
tensorflow-gpu==1.13.1

from nlpcda import Simbert
config = {
        'model_path': '/xxxx/chinese_simbert_L-12_H-768_A-12',
        'CUDA_VISIBLE_DEVICES': '0,1',
        'max_len': 32,
        'seed': 1
}
simbert = Simbert(config=config)
sent = '把我的一个亿存银行安全吗'
synonyms = simbert.replace(sent=sent, create_num=5)
print(synonyms)
'''
[('我的一个亿,存银行,安全吗', 0.9871675372123718), 
('把一个亿存到银行里安全吗', 0.9352194666862488), 
('一个亿存银行安全吗', 0.9330801367759705), 
('一个亿的存款存银行安全吗', 0.92387855052948),
 ('我的一千万存到银行安不安全', 0.9014463424682617)]
'''


  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
软件介绍: 超伦电子设计自动化软件EDA2002 自述文件1. 本软件支持 Windows 95/98/Me/NT/2000/XP中文版操作系统。2. 在软件光盘上的font文件夹中有支持印制板艺术汉字的48种中文字体供选择,安装程序仅复制四种常用字体,如果需要更多的字体,直接把字库文件(*.vhz)拷贝到EDA2002下面的Font文件夹中。设计环境:    按“TAB”键切换工作环境。    每个设计环境窗口的状态都将保存。    通过工具条图标可以方便地显示和隐藏管理器、信息和元件窗口,拖动窗口可以控制它的大小和停靠位置。    20页原理图和一个印制板保存在同一个设计文件中。    支持以原理图为主的正向设计,原理图修改并且编译后,印制版部分的网络表随即改变。智能画线:    移动光标停留在元件引脚外端,单击鼠标左键,如果该引脚尚未连线的话,程序自动进入画线命令,为该引脚绘制信号线。十种线型:    原理图画线时有十种线型供选用。    信号线有电连接特性,用信号线相互连接的元件引脚通过高亮或编译命令可以将连接关系提取出来形成网络表。    辅助线、虚线和点划线没有电连接特性,不能高亮或编译。自动编号:    元件自动编号时的顺序优先级可以设定,先上下或先左右。    当定义了块区域时,自动编号仅对块内元件有效。利用按块自动编号功能可以将功能块划分明显的原理图元件分段编号,使编号连续或相近的元件比较集中。自动备份:    当自动备份功能处于激活状态时,每过指定时间,程序会将设计自动保存到一个临时文件中。该临时文件名称和路径与设计文件相同,扩展名为TMP。上下界限:    通过设置菜单中的“上下界限”命令,可以定义原理图每个图页或者印制板图的上下界限。    上下界限可以作为“视图/全貌”命令的缺省显示区域;也可以作为打印和绘图命令的指定输出区域。设置工具条:   在工具条区域内单击鼠标右键可以引出弹出菜单,直接设置工具条的打开和关闭。
我可以回答这个问题。数据增强是指通过对原始数据进行一系列变换,生成新的数据集,以增加数据量和多样性,提高模型的泛化能力。以下是100种数据增强方法: 1. 镜像翻转 2. 随机裁剪 3. 随机旋转 4. 随机缩放 5. 随机亮度调整 6. 随机对比度调整 7. 随机色调调整 8. 随机饱和度调整 9. 随机噪声添加 10. 随机模糊 11. 随机锐化 12. 随机扭曲 13. 随机拉伸 14. 随机变形 15. 随机仿射变换 16. 随机透视变换 17. 随机擦除 18. 随机遮挡 19. 随机加入水印 20. 随机加入文字 21. 随机加入图案 22. 随机加入噪点 23. 随机加入线条 24. 随机加入形状 25. 随机加入边框 26. 随机加入阴影 27. 随机加入光晕 28. 随机加入光斑 29. 随机加入光点 30. 随机加入光线 31. 随机加入雾气 32. 随机加入烟雾 33. 随机加入火焰 34. 随机加入水波 35. 随机加入涟漪 36. 随机加入水滴 37. 随机加入雪花 38. 随机加入冰霜 39. 随机加入霜冻 40. 随机加入雾霾 41. 随机加入沙尘 42. 随机加入风景 43. 随机加入人物 44. 随机加入动物 45. 随机加入植物 46. 随机加入建筑 47. 随机加入车辆 48. 随机加入食物 49. 随机加入家具 50. 随机加入电子产品 51. 随机加入服装 52. 随机加入配饰 53. 随机加入化妆品 54. 随机加入文具 55. 随机加入玩具 56. 随机加入运动器材 57. 随机加入乐器 58. 随机加入书籍 59. 随机加入音乐 60. 随机加入电影 61. 随机加入电视剧 62. 随机加入游戏 63. 随机加入动画 64. 随机加入漫画 65. 随机加入艺术品 66. 随机加入建筑设计 67. 随机加入室内设计 68. 随机加入服装设计 69. 随机加入平面设计 70. 随机加入工业设计 71. 随机加入产品设计 72. 随机加入网页设计 73. 随机加入UI设计 74. 随机加入UX设计 75. 随机加入游戏设计 76. 随机加入交互设计 77. 随机加入数据可视化 78. 随机加入机器学习 79. 随机加入深度学习 80. 随机加入人工智能 81. 随机加入自然语言处理 82. 随机加入计算机视觉 83. 随机加入语音识别 84. 随机加入图像处理 85. 随机加入图像分割 86. 随机加入图像分类 87. 随机加入目标检测 88. 随机加入图像生成 89. 随机加入图像重建 90. 随机加入图像修复 91. 随机加入图像增强 92. 随机加入图像压缩 93. 随机加入图像转换 94. 随机加入图像识别 95. 随机加入图像分析 96. 随机加入图像处理算法 97. 随机加入图像处理工具 98. 随机加入图像处理库 99. 随机加入图像处理框架 100. 随机加入图像处理平台 以上就是100种数据增强方法,希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

stay_foolish12

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值