Package: nlpcda
NLP Chinese Data Augmentation 一键中文数据增强工具使用：pip install nlpcda开源不易，欢迎 star🌟pypi:https://pypi.org/project/nlpcda/介绍一键中文数据增强工具，支持：1.随机实体替换2.近义词3.近义近音字替换4.随机字删除（内部细节：数字时间日期片段，内容不会删）5.NER类BIO数据增强6.随机置换邻近的字：研表究明，汉字序顺并不定一影响文字的阅读理解<<是乱序的7.中文等价字替换（1	一	壹	①，2	二	贰	②）8.翻译互转实现的增强9.使用simbert做生成式相似句生成10.Cluster2Cluster生成更多样化的新数据经过细节特殊处理，比如不改变年月日数字，尽量保证不改变原文语义。即使改变也能被猜出来、能被猜出来、能被踩出来、能被菜粗来、被菜粗、能菜粗来计划中的未来内容增加多线程操作，一键操作使用 WordNet数据库 来做同义词替换随机噪声注入？随机插入一些字符，太简单实现了。利用pingyin？https://github.com/mozillazg/python-pinyin基于Word2Vec、BERT等词向量的词语近距离的替换、MASK猜测置换 ？？但是无法控制它生成，以及缺点MASK位置。引入TF-IDF、TextRank、关键词字典等，可以选择：替换/不替换关键词 ？？意义在不改变原文语义的情况下，生成指定数量的训练语料文本对NLP模型的泛化性能、对抗攻击、干扰波动，有很好的提升作用参考比赛(本人用此策略+base bert拿到：50+-/1000)：https://www.biendata.com/competition/2019diac/⚠️ 单纯刷准确率分数的比赛，用此包一般不会有分数提升API1.随机(等价)实体替换参数：base_file ：缺省时使用内置（公司）实体。对公司实体进行替换是文本文件路径，内容形如：实体1实体2...实体ncreate_num=3 ：返回最多3个增强文本change_rate=0.3 ： 文本改变率seed ： 随机种子fromnlpcdaimportRandomwordtest_str='''这是个实体：58同城；今天是2020年3月8日11:40，天气晴朗，天气很不错，空气很好，不差；这个nlpcad包，用于方便一键数据增强，可有效增强NLP模型的泛化性能、减少波动、抵抗对抗攻击'''smw=Randomword(create_num=3,change_rate=0.3)rs1=smw.replace(test_str)print('随机实体替换>>>>>>')forsinrs1: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 ： 随机种子fromnlpcdaimportSimilarwordtest_str='''这是个实体：58同城；今天是2020年3月8日11:40，天气晴朗，天气很不错，空气很好，不差；这个nlpcad包，用于方便一键数据增强，可有效增强NLP模型的泛化性能、减少波动、抵抗对抗攻击'''smw=Similarword(create_num=3,change_rate=0.3)rs1=smw.replace(test_str)print('随机同义词替换>>>>>>')forsinrs1: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 ： 随机种子fromnlpcdaimportHomophonetest_str='''这是个实体：58同城；今天是2020年3月8日11:40，天气晴朗，天气很不错，空气很好，不差；这个nlpcad包，用于方便一键数据增强，可有效增强NLP模型的泛化性能、减少波动、抵抗对抗攻击'''smw=Homophone(create_num=3,change_rate=0.3)rs1=smw.replace(test_str)print('随机近义字替换>>>>>>')forsinrs1: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 ： 随机种子fromnlpcdaimportRandomDeleteChartest_str='''这是个实体：58同城；今天是2020年3月8日11:40，天气晴朗，天气很不错，空气很好，不差；这个nlpcad包，用于方便一键数据增强，可有效增强NLP模型的泛化性能、减少波动、抵抗对抗攻击'''smw=RandomDeleteChar(create_num=3,change_rate=0.3)rs1=smw.replace(test_str)print('随机字删除>>>>>>')forsinrs1: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 Oignore_tag_list=['O'] : 数据里面O标签的不需要管data_augument_tag_list=['P', 'LOC'] : 只对P、LOC标签的实体做增强augument_size=3 : 每条标注数据，最多新增强数量seed=0 : 随机种子/ 可缺省调用函数augment()参数file_name: 1条标注训练文件的路径，如0.txtner.augment(file_name='0.txt')例子：fromnlpcdaimportNerner=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个字交换内部细节：遇到数字，符号等非中文，不会交换fromnlpcdaimportCharPositionExchangets='''这是个实体：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)forsinrs: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 ： 随机种子fromnlpcdaimportEquivalentChartest_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('等价字替换>>>>>>')forsinres:print(s)'''等价字替换>>>>>>今天是2020年3月8日11:40，天气晴朗，天气很不错。今天是二〇2〇年3月八日1①:4〇，天气晴朗，天气很不错。今天是二0贰零年3月捌日11:40，天气晴朗，天气很不错'''添加自定义词典用于使用之前，增加分词效果fromnlpcdaimportRandomwordfromnlpcdaimportSimilarwordfromnlpcdaimportHomophonefromnlpcdaimportRandomDeleteCharfromnlpcdaimportNerfromnlpcdaimportCharPositionExchangeRandomword.add_word('小明')Randomword.add_words(['小明','小白','天地良心'])# Similarword，Homophone，RandomDeleteChar 同上8.翻译互转实现的增强1.百度中英翻译互转实现的增强
note:申请你的 appid、secretKey:http://api.fanyi.baidu.com/api/transfromnlpcdaimportbaidu_translatezh='天气晴朗，天气很不错，空气很好'# 申请你的 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/latestpip install googletransfromgoogletransimportTranslatordefgoogletrans(content='一个免费的谷歌翻译API',t_from='zh-cn',t_to='en'):translator=Translator()s=translator.translate(text=content,dest=t_to,src=t_from)returns.text9.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：构造的句子数量fromnlpcdaimportSimbertconfig={'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)]'''10.Cluster2Cluster参考：数据增强没效果？试试用Cluster-to-Cluster生成更多样化的新数据吧WIP