文本特征的作用:
- 文本特征处理可以为语料添加具有普适性的文本特征,如:n-gram特征
- 文本特征处理对加入特征后的语料进行长度规范处理,保持语料长度的一致性
这些特征处理工作能够有效的将重要的文本特征加入到模型训练中,增强模型评估指标。
常见的文本特征处理方法,有:
- 添加n-gram特征
- 文本长度规范
文本数据增强的方法:
- 回译数据增强法
一、n-gram特征
n-gram特征是指,给定一段文本序列,其中n个词或字的相邻共线特征,即n-gram特征,常用的n-gram特征是bi-gram和tri-gram,分别对应n为2和3.
n-gram特征的详细理解,可以阅读《N-gram概率语言模型,你知道多少?》这篇博客
# 一般n-gram特征中的n取2或3,这里取2
n_gram_range = 2
def create_ngram_set(input_list):
"""从列表input_list中获取所有的n-gram特征
Args:
input_list (list): 输入的数值列表,可以看作是词汇映射后的列表
Returns:
set: n-gram特征组成的集合
"""
#
ngram_set = set(zip(*[input_list[i:] for i in range(n_gram_range)]))
return ngram_set
input_list = [1, 4, 9, 4, 1, 4]
print(create_ngram_set(input_list))
输出:{(4, 9), (4, 1), (1, 4), (9, 4)}
二、文本长度规范
文本长度规范的作用:一般模型的输入需要相同尺寸大小的矩阵,因此,在进入模型前,需要对每条文本数值映射后的长度进行规范,此时,将根据句子长度分布,分析出覆盖绝大多数文本的合理长度,对超长文本进行截断,对不足文本进行补齐(一般使用数字0),这个过程就是文本长度规范。
from keras.preprocessing import sequence
# cutlen根据数据分析中句子的长度分布,覆盖90%左右语料的最短长度
def padding(sen):
return sequence.pad_sequences(sen, cutlen)
cutlen = 10 # 假定cutlen为10,即所有的数据语料都规范到10的长度
data = [[1, 23, 4, 3, 5, 2, 3, 1, 4, 56, 34, 12, 434, 21, 12, 45, 45],
[1, 1, 2, 3, 4]]
print(padding(data))
输出:
[[1, 4, 56, 34, 12, 434, 21, 12, 45, 45],
[0, 0, 0, 0, 0, 1, 1, 2, 3, 4]]
文本在输入模型的时候,不可能有长有短,必须要统一长度,这样才更容易进行统一的处理,这就是文本长度规范的意义。
三、回译数据增强法
回译数据增强法目前是文本数据增强方面效果较好的增强方法,一般基于Google翻译接口,将文本数据翻译成另一种语言(一般选择小语种),之后再翻译回原语言,即可认为得到与原语料同标签的新语料,新语料加入到原数