NATURAL LANGUAGE PROCESSING · 04
学习 n-gram、文本长度规范化以及文本数据增强方法。
- n-gram
- 数据增强
文本特征处理与数据增强
语料添加具有普适性的文本特征,让模型更有效的处理数据,提高模型性能指标
常用方法:
添加 n-gram 特征
规范文本长度规范
4.1 n-gram
给定一段文本序列, 其中n个字或词的相邻共现,可以做为一个特征,即n-gram特征
data =[1,2,3,4,5]
#给定一段文本序列, 其中n个字或词的相邻共现,可以做为一个特征,即n-gram特征
# 提取data的2-gram特征
gram = 2
# set 无序、去重 ->这里没有重复的,所以看不到set的效果
# zip 两个列表上下组合,迭代器 -> [(1,2),(2,3),(3,4),(4,5)]
# * 拆包,拿出列表每一个元素 -> [1,2,3,4,5],[2,3,4,5]
# 列表推导式 -> [data[0:],data[1:]] -> [[1,2,3,4,5],[2,3,4,5]]
res = set(zip(*[data[i:] for i in range(gram)]))
print(res)
# gram = 3
# res -> [(1,2,3),(2,3,4),(3,4,5)]
4.2 文本长度规范
文本过长需要截断,文本过短需要打pad补齐(补零)这个操作就是文本长度规范
# 需要句子长度一致
# 截断或补全
from tensorflow.keras.preprocessing import sequence
# 四种场景
# 1.前面补全(默认前面补全)
# 参1:数据 参2:长度标准
# [[0 0 0 1 2 3 4 5]]
data = [[1,2,3,4,5]]
data1 = sequence.pad_sequences(data,maxlen=8,padding='pre')
# 2.后面补全--post 后面补全
data2 = sequence.pad_sequences(data,maxlen=8,padding='post')
# 3.前面截断(默认前面截断)
data3 = [[1,2,3,4,5,6,7,8,9,10]]
data4 = sequence.pad_sequences(data3,maxlen=8,truncating='pre')
# 4.后面截断
data5 = sequence.pad_sequences(data3,maxlen=8,truncating='post')
print(data1)
print(data2)
print(data4)
print(data5)
# 总结:默认前面截断和前面补全(根据长度标准,自行判断是截断还是补全)
# 后面补全 -- padding = 'post'
# 后面截断 -- truncating = 'post'
# 可以处理多维数据,如果缺就补全,多就截断,要想后面补全,后面截断,两个参数都要传
def pad_trunk(data,word_len,pad='pre',trunk='pre'):
res = []
for i in data:
if len(i) > word_len:
if pad == 'pre':
# 截掉前面
i = i[len(i) - word_len:]
res.append(i)
elif trunk == 'post':
# 截掉后面
i = i[:word_len]
res.append(i)
elif len(i) == word_len:
res.append(i)
elif len(i) < word_len:
if trunk == 'pre':
# 补全前面
i= [0] * (word_len - len(i)) + i
res.append(i)
elif trunk == 'post':
# 补全后面
i = i + [0] * (word_len - len(i))
res.append(i)
return res
5.文本数据增强
概念:通过回译数据增强法可以增强语料数目 好处:简单 坏处:短文本易语料易重复;多次翻译语料易失