文章目录

  • 1.词袋模型
  • 2.TF-IDF模型
  • 3.词汇表模型

1.词袋模型

  • 词集模型:单词构成的集合,集合中仅统计单词的有无,不统计具体单词的出现的次数
  • 词袋模型:在词集模型的基础上,统计单词出现的次数

两者区别在于词袋模型增加了对具体单词(特征)频率的维度。

1.1导包

from sklearn.feature_extraction.text import CountVectorizer

1.2函数介绍

CountVectorizer:收集的文本文档转换为矩阵的令牌数量

class sklearn.feature_extraction.text.CountVectorizer(*, input='content', encoding='utf-8', decode_error='strict', strip_accents=None, lowercase=True, preprocessor=None, tokenizer=None, stop_words=None, token_pattern='(?u)\b\w\w+\b', ngram_range=(1, 1), analyzer='word', max_df=1.0, min_df=1, max_features=None, vocabulary=None, binary=False, dtype=<class 'numpy.int64'>)

常用参数介绍:

  • input:string {‘filename’, ‘file’, ‘content’}, default=’content’。如果“filename”,作为参数传递给fit的序列应该是一个文件名列表,需要读取这些文件名以获取要分析的原始内容。如果“file”,序列项必须有一个“read”方法(类文件对象),该方法被调用来获取内存中的字节;否则,输入应该是一个项目序列,类型可以是string或byte。
  • encoding:string, default=’utf-8’,如果字节或文件被给予分析,这种编码被用来解码。
  • lowercase:bool, default=True。在标记之前将所有字符转换为小写。
  • analyzer:string, {‘word’, ‘char’, ‘char_wb’} or callable, default=’word’。该特征是由n个字母组成还是由n个字母组成。选择“char_wb”创建角色-gram只从文本单词边界;字格词带的边缘空间。
  • stop_words:string {‘english’}, list, default=None。如果“english”,则使用内置的英语停止词列表。如果“english”,则使用内置的英语停止词列表。如果一个列表,则假定该列表包含停止词,所有这些词都将从结果标记中删除。只适用于analyzer == ‘word’。
  • min_df:float in range [0.0, 1.0] or int, default=1。在构建词汇表时,忽略那些文档频率严格低于给定阈值的术语。这个值在文献中也称为cut-off。如果是浮点数,则该参数表示文档的比例,整数绝对计数。

1.3 代码示例

corpus = ['This is the first document.','This document is the second document.','And this is the third one.','Is this the first document?',]
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(corpus)
# 获取词袋化特征向量
print(X.toarray())
# 获取对应的字节名称
print(vectorizer.get_feature_names())

输出:

[[0 1 1 1 0 0 1 0 1][0 2 0 1 0 1 1 0 1][1 0 0 1 1 0 1 1 1][0 1 1 1 0 0 1 0 1]]
['and', 'document', 'first', 'is', 'one', 'second', 'the', 'third', 'this']

使用现有的词袋的词汇表,对其他文本进行特征提取,我们定义词袋的特征空间叫做词汇表(vocabulary),针对其他文本进行词袋处理时,可以直接使用现有的词汇表:

my_vocalulary = vectorizer.vocabulary_ # 获取词汇表,术语到特征索引的映射,属于字典类型。
new_vectorizer = CountVectorizer(vocabulary=my_vocalulary)
new_corpus = ['And the first']
new_X = new_vectorizer.transform(new_corpus) # 无需再fit,直接使用transform函数
print(new_X.toarray())
print(new_vectorizer.get_feature_names())

输出:

[[1 0 1 0 0 0 1 0 0]]
['and', 'document', 'first', 'is', 'one', 'second', 'the', 'third', 'this']

2.TF-IDF模型

词频与反文档频率模型(term frequency-inverse document frequency,TF-IDF),用以评估某一字词对于一个文件集或一个语料库的重要程度,字词的重要性跟它在文件中出现的次数成正比,同时跟它在语料库中出现的频率成反比。
TF-IDF的主要思想:TF-IDF是指TF乘IDF,其中词频(TF)是根据某个词或短语在一篇文章中出现的频率即词频,如果频率高,并且在其他文章中很少出现,则认为该词具有很好的区分能力;反文档频率(IDF)指:如果包含词条a的文档越少,也就说n越小,IDF越大,说明词条a具有很好的区分能力。

2.1 导包

from sklearn.feature_extraction.text import TfidfTransformer

2.2 函数介绍

class sklearn.feature_extraction.text.TfidfTransformer(*, norm='l2', use_idf=True, smooth_idf=True, sublinear_tf=False)

参数:

  • norm:{‘l1’, ‘l2’}, default=’l2’。每个输出行都有单位范数,可以是: ’ l2 ':向量元素的平方和为1。当应用l2范数时,两个向量之间的余弦相似度是它们的点积。‘l1’:向量元素的绝对值之和为1。
  • use_idf:bool, default=True。使inverse-document-frequency权重。
  • smooth_idf:bool, default=True。通过在文档频率上增加1来平滑idf权重,就好像在一个额外的文档中只包含集合中的每一个词一样。防止零分歧。
  • sublinear_tf:bool, default=False。应用次线性tf缩放,即将tf替换为1 + log(tf)。

具体关于TF-IDF的计算方法可详见scikit-learn中文社区

2.3 代码示例

TF-IDF模型常用和词袋模型配合使用,对词袋模型生成的数组进一步处理。

import numpy as np
count = [[1, 1, 1, 1, 0, 1, 0, 0],[1, 2, 0, 1, 1, 1, 0, 0],[1, 0, 0, 1, 0, 1, 1, 1],[1, 1, 1, 1, 0, 1, 0, 0]]
transformer = TfidfTransformer()
tfidf = transformer.fit_transform(count)
print(tfidf.toarray())

输出:

[[0.38408524 0.46979139 0.58028582 0.38408524 0.         0.38408524        0.         0.       ][0.28108867 0.6876236  0.         0.28108867 0.53864762 0.28108867        0.         0.        ][0.31091996 0.         0.         0.31091996 0.         0.31091996        0.59581303 0.59581303][0.38408524 0.46979139 0.58028582 0.38408524 0.         0.38408524        0.         0.        ]]

3.词汇表模型

虽然词袋模型能表现文本由哪些词汇组成,但是无法表达词汇直接的前后关系,词汇表模型弥补了这方面不足。

由于没有找到现成的API直接供我们使用,因此借用TensorFlow2手动实现了该方法:

import tensorflow as tf # 当前测试版本为2.3
x_text = ['i love you','me too','i me too'
]
x_text_list = [tf.keras.preprocessing.text.text_to_word_sequence(a) for a in x_text] # 拆分
# x_text_list:[['i', 'love', 'you'], ['me', 'too'], ['i', 'me', 'too']]
word_set = set() # 获取所有的单词
for text in x_text_list:for word in text:word_set.add(word)
# word_set:{'i', 'love', 'me', 'too', 'you'}
word_list = list(word_set) # 转换为list
word_index =  dict((word, word_list.index(word) + 1) for word in word_list) # 获取序号与单词的映射
# word_index:{'me': 1, 'love': 2, 'too': 3, 'you': 4, 'i': 5}
x_index_list = []
for text in x_text_list:x_index_list.append([word_index.get(word, 0) for word in text])
# x_index_list:[[5, 2, 4], [1, 3], [5, 1, 3]]
result = tf.keras.preprocessing.sequence.pad_sequences(x_index_list).tolist() # 统一长度
print(result)
# [[5, 2, 4], [0, 1, 3], [5, 1, 3]]

最终
i love you -> [5,2,4]
me to -> [0,1,3]
i me to -> [5,1,3]

一般情况下,在深度学习模型的搭建过程中还将搭配嵌入层Embedding作为后续处理

【特征工程】词袋模型/TF-IDF模型/词汇表模型的代码实现(文本特征提取)相关推荐

  1. 04_机器学习概述,什么是机器学习,应用场景,数据来源与类型,网上可用的数据集、常用数据集数据的结构组成、特征工程是什么、意义、特征抽取、sklearn特征抽取API、文本特征抽取(学习笔记)

    机器学习概述 人工智能.机器学习.深度学习之间的关系 机器学习框架 Pytorch Caffe2 theano Chainer Scikit-learn 语言支持 机器学习书籍 <面向机器智能 ...

  2. 【ML特征工程】第 7 章 :通过K-Means 模型堆叠进行非线性特征化

  3. 机器学习笔记七——特征工程之特征处理

    特征处理 1.类别型特征的处理-特征编码 1.1 处理少量特征 1.2处理大量的类别特征 2.文本特征的处理--文本形式转换为向量形式 2.1 词集模型 2.2 词袋(Bag-of-Words,Bow ...

  4. 词集模型、词袋模型、词向量模型

    分词与统计 词集模型(set of words): 单词构成的集合,集合里面的元素不重复,有且只有一个.所以该模型仅仅考虑词是否在文本中出现,不考虑词频,只需一维. 不足:一个词在文本在文本中出现1次 ...

  5. 【Python自然语言处理】文本向量化的六种常见模型讲解(独热编码、词袋模型、词频-逆文档频率模型、N元模型、单词-向量模型、文档-向量模型)

    觉得有帮助请点赞关注收藏~~~ 一.文本向量化 文本向量化:将文本信息表示成能够表达文本语义的向量,是用数值向量来表示文本的语义. 词嵌入(Word Embedding):一种将文本中的词转换成数字向 ...

  6. 词袋模型和空间金字塔模型

    1 词袋模型 李菲菲认为图像可以类比文档,图像的子块或特征点可以看作是单词,则可以统计图像中所有特征的直方图表示图像,即得到图像的BoW(bag of words)模型.图1是BoW模型的示例图,对于 ...

  7. 谷歌大规模机器学习:模型训练、特征工程和算法选择 (32PPT下载)

    本文转自:http://mp.weixin.qq.com/s/Xe3g2OSkE3BpIC2wdt5J-A 谷歌大规模机器学习:模型训练.特征工程和算法选择 (32PPT下载) 2017-01-26  ...

  8. BoW词袋模型原理学习及Python实现

    文章目录 BoW词袋模型原理 为什么要用BoW模型描述图像 构建BoW码本步骤 编码 测试 BoW词袋模型原理 BoW(Bag of Words)词袋模型最初被用在文本分类中,将文档表示成特征矢量.它 ...

  9. 机器学习的练功心法(三)——特征工程

    文章目录 致谢 3 特征工程 3.1 Sklearn工具及数据集 3.2 数据集 3.3 数据集的划分 3.4 特征工程介绍 3.4.1 为什么需要特征工程 3.4.2 什么是特征工程 3.4.3 特 ...

最新文章

  1. cisco-ccna-第九章测试-work1-汉语
  2. 2021.02.04 Visual QA论文阅读
  3. 分布式ID生成器(来源:架构师之路,2017-06-25 58沈剑 架构师之路)
  4. 《机器学习项目开发实战》送书活动结果公布
  5. 将python中的小数直接进位的函数_python保留小数位的三种实现方法
  6. 数据结构关键路径_2021年厦门大学考研丨能源学院845数据结构参考书目推荐
  7. V-rep学习笔记:机器人逆运动学数值解法(Damped Least Squares / Levenberg-Marquardt Method)...
  8. 力扣-1925 统计平方和三元组的数目
  9. 睡眠排序、面条排序、猴子排序...........................
  10. iOS 小项目--小费计算器
  11. 三次Hermite插值
  12. 计算机查看图片的打开方式,win7系统图片打开方式没有windows照片查看器的解决步骤...
  13. windows2008server实现端口映射代理
  14. [译]第一章:什么是管理
  15. 用frp开源工具,实现内网穿透(详细教程)
  16. 蓝牙电子产品加拿大IC认证周期
  17. 蚂蚁IPO有人欢呼,也有前员工建群,​群名“错失几千万的人”
  18. Android中字母大小写切换的快捷键
  19. 最近瞎忙,比较懒撒,所以要收收心,该学习的学习。
  20. OpenCASCADE 获取面中心点法向

热门文章

  1. FreeRTOS简介
  2. 计算x的n次方(用函数)
  3. 魅蓝5s即将发布 真假快充15日揭晓答案
  4. Oracle 数据库表空间的管理
  5. TI RTOS BLE CC2642 看门狗 Watcdog
  6. 六种正确清理C盘的方法,解决你的红色烦恼
  7. 2020博客之星年度总评选TOP200名单已出,感谢老铁们的支持目前排名TOP77
  8. GAPIT 3.0:全基因组关联分析与预测软件最新版发布
  9. HTML——前端实时可视化开发工具
  10. 看完抖音,感觉我穷我活该,跟个废物一样