东湖高新区创业投资引导基金(二期)申报指南
06-17
目前的模型基本解决的是数据集,而不是任务,所以数据极其重要。图像中的数据可以通过旋转、翻转变换、RGB转灰度、添加白噪声等方式进行增强,语义不会改变。
然而,NLP 中经常发生语义变化。已经探索了一些 NLP 的数据增强方法。
同义词替换应该是最早的方法。通过替换句子中的同义词,确保了语义不变性。
根据同义词的来源,可以分为几种方案。 WordNet 通过 WrodNet 中的同义词回忆相似的单词。
请参阅代码语言: javascript Copy import nltkfrom nltk.corpus import wordnetnltk.download('omw')word = "AIR CONDITIONER" for every in wordnet.synsets(word, lang='cmn'): print(each.lemma_names('cmn) '), )# [ '空调', '空调', '空调', '空调装置', '空调设备'] 完整代码参见:word_sim.pysynonymssynonyms是一个中文同义词工具包,参见代码语言: javascript copy import synonymsword = "空调" print(synonyms.nearby(word))# (['空调', '空调', '空调设备', '空调系统', 'Wavebox', '汽车' , '制冷', '空调', '空调', '总线输入'], [1.0, 0., 0., 0., 0., 0., 0., 0., 0., 0. ]) 完整代码参见:word_sim.py 词向量召回 基于词法和框架语义嵌入的数据增强方法 词向量召回主要将单词映射为低维稠密向量,并通过向量召回来召回同义词。上下文嵌入方法。
回忆起的单词可能不是同义词。例如,W2V主要是基于单词分布的向量化,因此位置分布相似的单词可能会被回忆起来,但语义可能会不同。
因此,也有人提出了Frame-Semantic Embeddings方法。代码语言:javascript copy from gensim.models.keyedvectors import KeyedVectorsword = "Air Conditioner"# 词向量召回,词向量下载:= "./cn_bi_fastnlp_d.txt" w2v_model = KeyedVectors.load_word2vec_format(w2v_file)print(w2v_model.similar_by_word(word) ) [:10])# [('空调', 0.), ('暖气', 0.), ('风扇', 0.), ('电暖气', 0.), ('风扇' , 0.), ('暖气', 0.), ('暖气', 0.), ('电暖气', 0.), ('通风', 0.), ('隔音', 0.) ] 完整代码参见:word_sim.py TF-IDF 用于一致性训练的无监督数据增强 TF 表示该术语在文档 d 中出现的频率,IDF 表示逆文档频率 TF-IDF。
分数较低的单词无法提供信息,因此可以在不影响句子的情况下使用。在没有事实依据的情况下更换/插入它们。
原句:The Quick Brown Fox Jumps Over the Lazy Dog Tf-Idf 替换:A Quick Brown Fox Jumps Over the Lazy Dog Tf-IdF 插入:下沉 The Quick Brown Fox Jumps Over the Lazy Sidney Dog 取决于语料库本身足够丰富。源代码:word_level_augment.pyEDA EDA-Easy Data Augmentation Techniques for Boosting Performance on Text Classification Tasks 提出了一种数据增强方法:同义词替换(SR):随机选择句子中的 n 个不间断单词。
对于每个单词,随机选择一个同义词来替换该单词。随机插入(RI):随机选择句子中不是停用词的单词,随机选择该单词的同义词,将该同义词随机插入句子中n次。
随机交换(RS):随机选择两个单词并交换它们的位置n次。随机删除(RD):对于句子中的每个单词,以概率 p 选择它进行删除。
同义词替换已存在。说实话,其他三种方法不太好用,会产生很多错误的查询。
由于随机替换、交换和删除会让原本序列化的句子的顺序变得不重要,因此模型更关注某些单词是否出现,这增加了模型误识别的风险。更详细的可以参考EDA作者,他也开源了英文EDA代码:kuratalabeled,kuratalabeled),VAE(yoovariational,xieunsupervised)等方法。
我个人感觉它们与任务耦合,通用性不是很强。相反,使用语言模型进行生成更为可靠。
。主要参考Context Augmentation,通过Bi-LSTM训练语言模型,并添加数据标签来控制生成。
Conditional BERT Contextual Augmentation在上一篇文章的基础上介绍了BERT。对于分类问题,作者将BERT原来的segment embedding替换为label embedding,然后继续使用MLM任务对数据继续finetune。
训练后,预测过程的输入包括:原始查询的标记,但会制作一些随机掩码进行预测。蒙面的话。
用于分类的类别标签,保证语义不变性。关于中文数据,笔者认为其实我们可以基于此做一些优化。
可以改变mask策略,利用分词的方法,将随机mask改为分词mask。同时,还可以随意插入口罩。
同样,插入位置是在单词之间而不是单词内部。基于此,我们来尝试一下。
对于原始输入,使用此方法后增强的数据: 原句:帮我查一下航班信息。生成句子: 请帮我查看航班信息, 帮我查看航班信息, 帮我查看航班信息 代码: bert_main.py 提取数据 与其生成句子,不如从现有语料库中挖掘潜在相关数据。
Wangs 从 Twitter 中挖掘日志。作者使用聚类的方法来标注相似的数据,进行预标注,然后手动标注每个聚类的类别。
在聚类方法中,设定聚类数量,需要对聚类结果进行合并或分裂,然后对结果进行人工审核。本文还提出使用word2vec来回忆同义词并进行同义词替换。
回译将目标句子翻译成外语,然后再将外语翻译成中文。翻译一般都会重新组织句子结构,因此增强后的数据具有一定的句子丰富度。
以下是使用百度翻译API的结果。代码语言:javascript copy if __name__ == '__main__':querys = '帮我查一下航班信息,查一下航班信息,附近有什么好玩的东西'.split(",") # 根据语言列表,可以翻译分成多个句子,语言:en,jp,kor,fra,spa,th,ara,ru,pt,de,it,el,nl,pl,bul,est,dan,fin,cs,rom,slo,swe, hu ,cht,vie... 对于查询中的查询: out_arr = [] lan_list = "en,jp,kor".split(",") 对于 lan_list 中的 tmp_lan:对于 baidu_translate(query, tmp_lan) 中的 tmp_q:out_arr。
extend (baidu_translate(tmp_q, 'zh')) print(list(set(out_arr))) # ['帮我查一下航班信息', '请帮我查一下航班信息。', '帮我查一下航班信息。
', '检查我的航班信息。 '... #【'询问航班信息。
', '查看航班信息', '查看VOO信息', '查看航班信息', ... # ['这里有什么有趣的? ', '这里有什么有趣的地方', '这个地方有什么有趣的地方? ', ...完整代码参见:back_translate.py mixup Augmenting Data with Mixup for Sentence Classification: An Empirical Zhu等人提出主要用于分类问题,应用于图像。两张图片按比例随机组合,形成新图片。
郭等人将其应用到NLP中。 wordMixup就是混合词向量,将句子padding到相同的长度,然后按照新的embedding的比例对每个token的embedding进行加权,用于下游分类,标签也是两个句子的标签比例。
如下图左侧所示,sentMixup是句子向量的混合。句子向量被随机加权并求和。
标签也是原始两个句子的加权标签。
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
标签:
相关文章
06-17
06-18
06-18
06-06
06-06
06-18
06-18
最新文章
【玩转GPU】ControlNet初学者生存指南
【实战】获取小程序中用户的城市信息(附源码)
包雪雪简单介绍Vue.js:开学
Go进阶:使用Gin框架简单实现服务端渲染
线程池介绍及实际案例分享
JMeter 注释 18 - JMeter 常用配置组件介绍
基于Sentry的大数据权限解决方案
【云+社区年度征文集】GPE监控介绍及使用