0%

文本预处理-文本数据增强

文本预处理-文本数据增强

常见的文本数据增强方法

  • 回译数据增强法

什么是回译数据增强法

  • 回译数据增强目前是文本数据增强方面效果较好的增强方法,一般基于google翻译接口,将文本数据翻译成另一种语言(一般选择小语种),之后再翻译回原语言,即可认为得到与原语料同标签的新语料,新语料加入到原数据集中即可认为是对原数据集数据增强。

回译数据增强优势

  • 操作简便,获得新语料质量高

回译数据增强存在的问题

  • 在短文本回译过程中,新语料与原语料可能存在很高的重复率,并不能有效增大样本的特征

高重复率解决办法

  • 进行连续的多语言翻译,如:中文->韩语->日语->英文->中文,根据经验,最多只采用3次连续翻译,更多的翻译次数将产生效率低下、语义失真等问题

回译数据增强实现

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
# 假设取两条已经存在的正样本和两条负样本
# 将基于这四条样本产生新的同标签的四条样本
p_sample1 = "酒店设施非常不错"
p_sample2 = "这家价格很便宜"
n_sample1 = "拖鞋都发霉了,太差了"
n_sample2 = "电视不好用,没有看到足球"

# 导入google翻译接口工具
from googletrans import Translator
# 实例化翻译对象
translator = Translator()
# 进行第一次批量翻译,目标是韩语
l = [p_sample1, p_sample2, n_sample1, n_sample2]
# translations = translator.translate([p_sample1, p_sample2, n_sample1, n_sample2], dest="ko")
translations = [translator.translate(x, dest="ko") for x in l]
# 获得翻译后的结果
ko_res = list(map(lambda x:x.text, translations))
print("中间翻译结果:")
print(ko_res)
# 翻译回中文
# translations = translator.translate(ko_res, dest="zh-cn")
translations = [translator.translate(x, dest="zh-cn") for x in ko_res]
cn_res = list(map(lambda x: x.text, translations))
print("回译得到的增强数据:")
print(cn_res)

中间翻译结果:

['호텔 시설은 아주 좋습니다', '이 가격은 매우 저렴합니다', '슬리퍼는 곰팡이가 너무 나쁩니다', 'TV는 쉽지 않고 축구를 보지 못했습니다']

回译得到的增强数据:

['酒店设施非常好', '这个价格很便宜', '拖鞋太糟糕了', '电视并不容易,我看不到足球']

注意:编码中存在的问题,报错:AttributeError: 'NoneType' object has no attribute 'group'

截至到这篇博客发文的时间,解决方案是:

1
2
!pip uninstall googletrans
!pip install googletrans==4.0.0-rc1