当前位置:   article > 正文

文本特征处理(n-garm表示方法、长度规范)_ngram特征

ngram特征

常见的文本特征处理方法:

  • n-gram特征
  • 文本长度规范

1. n-gram特征

句子可以用单个字,词来表示,但是有的时候,可以用2个、3个或者多个词来表示。

N-gram是一组的词语,其中的N表示能够被一起使用的词的数量 【准备词语特征的方法】

例如:

  1. import jieba
  2. text = '深度学习(英语:deep learning)是机器学习的分支,是一种以人工神经网络为架构,对数据进行表征学习的算法。'
  3. cuted = jieba.lcut(text)
  4. print(cuted)
  5. cuted_list = [cuted[i: i+2] for i in range(len(cuted)-1)]
  6. print(cuted_list)

运行结果:

        在传统的机器学习中,使用N-gram方法往往能够取得非常好的效果,但是在深度学习比如RNN中会自带N-gram的效果。

  1. # 一般n-gram中的n取2或者3, 这里取2为例
  2. ngram_range = 2
  3. def creat_ngram_set(input_list):
  4. """
  5. description: 从数值列表中提取所有的n-gram特征
  6. :param input_list: 输入的数值列表, 可以看作是词汇映射后的列表, 里面每个数字的取值范围为[1, 25000]
  7. :return: n-gram特征组成的集合
  8. eg:
  9. >>> create_ngram_set([1, 4, 9, 4, 1, 4])
  10. {(4, 9), (4, 1), (1, 4), (9, 4)}
  11. """
  12. return set(zip(*[input_list[i:] for i in range(ngram_range)]))
  13. input_list = [1, 3, 2, 1, 5, 3]
  14. res = creat_ngram_set(input_list)
  15. # 该输入列表的所有bi-gram特征
  16. res

2.  文本长度规范及其作用

        一般模型的输入需要等尺寸大小的矩阵, 因此在进入模型前需要对每条文本数值映射后的长度进行规范, 此时将根据句子长度分布分析出覆盖绝大多数文本的合理长度, 对超长文本进行截断, 对不足文本进行补齐(一般使用数字0), 这个过程就是文本长度规范.

  1. from keras.preprocessing import sequence
  2. # cutlen根据数据分析中句子长度分布,覆盖90%左右语料的最短长度.
  3. # 这里假定cutlen为10
  4. cutlen = 10
  5. def padding(x_train):
  6. """
  7. description: 对输入文本张量进行长度规范
  8. :param x_train: 文本的张量表示, 形如: [[1, 32, 32, 61], [2, 54, 21, 7, 19]]
  9. :return: 进行截断补齐后的文本张量表示
  10. """
  11. # 使用sequence.pad_sequences即可完成
  12. return sequence.pad_sequences(x_train, cutlen)
  13. # 假定x_train里面有两条文本, 一条长度大于10, 一天小于10
  14. x_train = [[1, 23, 5, 32, 55, 63, 2, 21, 78, 32, 23, 1],
  15. [2, 32, 1, 23, 1]]
  16. res = padding(x_train)
  17. print(res)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/562301
推荐阅读
相关标签
  

闽ICP备14008679号