本文目录
  1. 4.1 n-gram
  2. 4.2 文本长度规范
  3. 5.文本数据增强

文本特征处理与数据增强

语料添加具有普适性的文本特征,让模型更有效的处理数据,提高模型性能指标

常用方法:

​ 添加 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.文本数据增强

概念:通过回译数据增强法可以增强语料数目 好处:简单 坏处:短文本易语料易重复;多次翻译语料易失