学习目标 🍀 了解文本特征处理的作用.掌握实现常见的文本特征处理的具体方法 🍀 掌握实现常见的文本数据增强的具体方法 🍀 掌握常见的文本数据增强方法: 回译数据增强法
假设给定分词列表: ["是谁", "敲动", "我心"] 对应的数值映射列表为: [1, 34, 21] 我们可以认为数值映射列表中的每个数字是词汇特征. 除此之外, 我们还可以把"是谁"和"敲动"两个词共同出现且相邻也作为一种特征加入到序列列表中, 假设1000就代表"是谁"和"敲动"共同出现且相邻 此时数值映射列表就变成了包含2-gram特征的特征列表: [1, 34, 21, 1000] 这里的"是谁"和"敲动"共同出现且相邻就是bi-gram特征中的一个. "敲动"和"我心"也是共现且相邻的两个词汇, 因此它们也是bi-gram特征. 假设1001代表"敲动"和"我心"共同出现且相邻 那么, 最后原始的数值映射列表 [1, 34, 21] 添加了bi-gram特征之后就变成了 [1, 34, 21, 1000, 1001]
# 一般n-gram中的n取2或者3, 这里取2为例
ngram_range = 2
def create_ngram_set(input_list):
"""
description: 从数值列表中提取所有的n-gram特征
:param input_list: 输入的数值列表, 可以看作是词汇映射后的列表,
里面每个数字的取值范围为[1, 25000]
:return: n-gram特征组成的集合
eg:
>>> create_ngram_set([1, 4, 9, 4, 1, 4])
{(4, 9), (4, 1), (1, 4), (9, 4)}
"""
return set(zip(*[input_list[i:] for i in range(ngram_range)]))
input_list = [1, 3, 2, 1, 5, 3]
res = create_ngram_set(input_list)
print(res)
# 该输入列表的所有bi-gram特征
{(3, 2), (1, 3), (2, 1), (1, 5), (5, 3)}
from keras.preprocessing import sequence
# cutlen根据数据分析中句子长度分布,覆盖90%左右语料的最短长度.
# 这里假定cutlen为10
cutlen = 10
def padding(x_train):
"""
description: 对输入文本张量进行长度规范
:param x_train: 文本的张量表示, 形如: [[1, 32, 32, 61], [2, 54, 21, 7, 19]]
:return: 进行截断补齐后的文本张量表示
"""
# 使用sequence.pad_sequences即可完成
return sequence.pad_sequences(x_train, cutlen)
# 假定x_train里面有两条文本, 一条长度大于10, 一天小于10
x_train = [[1, 23, 5, 32, 55, 63, 2, 21, 78, 32, 23, 1],
[2, 32, 1, 23, 1]]
res = padding(x_train)
print(res)
[[ 5 32 55 63 2 21 78 32 23 1]
[ 0 0 0 0 0 2 32 1 23 1]]
# 导入对应的工具包
from google_trans_new import google_translator
# 实例化翻译对象
translator = google_translator()
# 进行第一次翻译, 目标语言是韩语
texts= ['这家价格很便宜', '这家价格很便宜']
tra_list= []
for text in texts:
ko_res= translator.translate(text, lang_src='zh-cn', lang_tgt='ko')
tra_list.append(ko_res)
# 打印中间结果
print('中间结果是:')
print(tra_list)
# 进行第二次翻译, 目标语言是汉语
cn_list = []
for text in tra_list:
cn_res = translator.translate(text, lang_src='ko', lang_tgt='zh-cn')
cn_list.append(cn_res)
# 打印最后的结果
print("最后的结果是:")
print(cn_list)
输出结果展示:
中间翻译结果:
["이 가격은 매우 싼 ", "이 가격은 매우 싼"]
回译得到的增强数据:
["这个价格非常便宜","这个价格很便宜"]