赞
踩
CV中有很多简单实用的数据增强方式,如旋转图像、调整RGB等。这些方法在保证图像特征的基础上增加了训练量,进而能够提升模型的表现效果。但在NLP中这些方法就不再适用,文本上少量的调整都可能改变整体上下文语义信息。
《A Visual Survey of Data Augmentation in NLP》(本文主要参考文章)中这样阐述这种情况:
基于公开的知识库,随机选择当前句子中的单词,应用同义词库将其替换为其同义词。比如,使用WordNet数据库,将「awesome」替换为「amazing」。
使用该方法扩充数据集的论文如:
采用预先训练好的单词嵌入,如Word2Vec、GloVe、FastText、Sent2Vec,并使用嵌入空间中最近的相邻单词替换句子中的某些单词。(个人认为用bert微调后的向量表现更佳)
因为词向量可将词汇映射到同一个语义空间,在具体应用中,我们可以通过临近词替换当前词的方式,随机替换单词进而增加训练数据。
使用该方法的论文如:
另外,也可以调用api接口,来获取词向量和每个词的临近词向量。可以导入预训练好的词向量,也可以自行训练(自行训练需要构建个人语料集,分词后feed到词向量模型,经过训练后再计算相似度)。
#导入预训练好的Glove词向量
import gensim.downloader as api
info = api.info() # show info about available models/datasets
model = api.load("glove-twitter-25") # download the model and return as object ready for use
model.most_similar("cat")
#导入预训练好的word2vec词向量
from gensim.models.word2vec import Word2Vec
import gensim.downloader as api
corpus = api.load('text8') # download the corpus and return it opened as an iterable
model = Word2Vec(corpus) # train a model from the corpus
model.most_similar("car")
在BERT模型中,可以通过MLM来根据上下文预测遮盖的词汇。因为bert已经采用大量语料集进行了预训练,所以这种方法生成的词汇在语义程度上更接近原词,生成的文本也更有可解释性。
这种方法存在的问题是要考虑遮盖哪些词,能最大限度保留文本上下文语义。
源码可参考:token预测
替换文本中tfidf分数较低的词汇,要替换的词汇由所有分数较低的词汇中随机抽样。
使用该方法的论文有:
先将文本翻译成其他语言,再翻译回来,如果新文本与原文本形式不一,即可用于数据增强。
资源:Google Sheets说明
使用简单模式匹配来进行转换,这个主要基于正则表达式,无太多技术含量,此处不详述。
加入噪声是机器学习常用的用于提高模型鲁棒性的方法。主要有如下几种噪声注入方式。
映射常见拼写句子,生成错误映射。
资源:英文常见错误映射
随机去除一些词汇,并用占位符标记。常用于缓解过拟合问题。
总结可为:规则+语法依赖树。实用价值较小,不详述。
思想基于图像增强技术,经过修改应用于NLP。相关论文:
随机选择两个文本,经过等长的embedding嵌入,按比例组合在一起。然后再经过CNN/LSTM等编码得到文本嵌入,计算交叉熵。
与上述方法类似,在细节处做了调整。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。