词袋模型与TF-IDF

  • 1、词袋模型
    • 1.1 词袋和词集
    • 1.2 实践
  • 2、TF-IDF
    • 2.1 TF-IDF描述
    • 2.2 实践
特征提取方法有两大主要方式,一种是词袋模型,还有一种就是TF-IDF 模型(term frequency-inverse document frequency,词频与逆向文件频率)

1、词袋模型

1.1 词袋和词集

文本特征提取有两个非常重要的模型
词集模型:单词构成的集合,集合自然每个元素只能有一个,也就是词集中的每个单词都只有一个
词袋模型:在词集的基础上,如果一个单词在文档中出现不止一次,统计其出现的次数。

二者本质上的区别,词袋是在词集的基础上增加了频率的维度,词集只关注有和没有,而词袋还关注出现了多少次。

1.2 实践

现在我们来进行词袋模型的实践:

首先来导入相关的函数库:

import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer

导入数据

data = pd.read_csv("./dataset/Movies_dirty.csv")
data['Movie description'] = data.iloc[:,1]+' '+data.iloc[:,-1]#合并两列数据

这里我使用的是movie的数据集,包括movie的name,director,year,…,description属性,只使用name和description两个属性,并对这两列数据进行合并。如果找不到相关数据也可以随便用一个简单的数据集来实验。

corpus = []
for i in data['Movie description']:corpus.append(i)

将数据放到列表中,显示部分,两个逗号之间表示一条数据。

词袋模型:

vectorizer = CountVectorizer(min_df=1)
X = vectorizer.fit_transform(corpus)
feature_names = vectorizer.get_feature_names_out()
# print(feature_names,len(feature_names))
X_feature = X.toarray()
print(X_feature,len(X_feature))
print(data.shape)

完整代码:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.feature_extraction.text import CountVectorizerdata = pd.read_csv("./dataset/Movies_dirty.csv")
data['Movie description'] = data.iloc[:,1]+' '+data.iloc[:,-1]
corpus = []
for i in data['Movie description']:corpus.append(i)
print(corpus)
vectorizer = CountVectorizer(min_df=1)
X = vectorizer.fit_transform(corpus)
feature_names = vectorizer.get_feature_names_out()
# print(feature_names,len(feature_names))
X_feature = X.toarray()
print(X_feature,len(X_feature))
print(data.shape)

2、TF-IDF

2.1 TF-IDF描述

TF-IDF是一种统计方法,用以评估某一字词对于一个文件集成或一个语料库的重要程度。
字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在预料库中出现的频率成反比下降。
TF-IDF加权的各种形式常被搜索引擎应用,作为文件与用户查询之间相关程度的度量或者评级。

TF-IDF的主要思想:
如果某个词或短语在一篇文章中出现的频率TF(Term Frequency,词频),词频高,并且在其他文章中很少出现,
则认为此词或者短语具有很好的类别区分能力,适合用来分类。

TF-IDF 实际上就是:TF*IDF。
TF表示词条在文档中出现的频率,IDF(inverter document frequency,逆向文件频率)的主要思想就是:如果包含词条t的文档越少,也就是n越少,IDF越大,则说明词条t具有很好的类别区分能力。

如果某一类文档C中包含词条t的文档数为m,而其他类包含t的文档总数为k,显然所有包含t的文档数为n = m+k,当m大的时候,n也大,按照IDF公式得到的IDF的值会小,就说明该 词条t类别区分能力不强。但实际上,如果一个词条在一个类的文档中频繁出现,则说明该词条能够很好的代表这个类的文本的特征,这样的词条应该赋予较高的权重,并选来作为该类文本的特征词以区别于其他类文档。

2.2 实践

在sklearn中实现了TF-IDF算法,实例化TfidfTransformer即可。

导入相关库

from sklearn.feature_extraction.text import TfidfTransformer
transformer = TfidfTransformer(smooth_idf=False)
tfidf = transformer.fit_transform(X_feature).toarray()
print(tfidf,len(tfidf),len(tfidf[0]))

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

最后附上完整代码,及词袋模型和TF-IDF模型的结合,输出特征:

"""
将movie的name和description合并
利用词袋模型和TF-IDF进行特征化"""
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.feature_extraction.text import CountVectorizer,TfidfTransformerdata = pd.read_csv("./dataset/Movies_dirty.csv")
data['Movie description'] = data.iloc[:,1]+' '+data.iloc[:,-1]
corpus = []
for i in data['Movie description']:corpus.append(i)
# print(corpus)
vectorizer = CountVectorizer(min_df=1)
transformer = TfidfTransformer(smooth_idf=False)
X = vectorizer.fit_transform(corpus)
feature_names = vectorizer.get_feature_names_out()
# print(feature_names,len(feature_names))
X_feature = X.toarray()
tfidf = transformer.fit_transform(X_feature).toarray()
print(X_feature,len(X_feature))
# print(data.shape)
print(tfidf,len(tfidf),len(tfidf[0]))

本次的学习就到这里啦,希望小张的这篇博文能够帮助到需要的小伙伴!!

词袋模型与TF-IDF模型相关推荐

  1. 实体链接(Entity Linking)、依存句法分析、成分句法树、词袋模型、文本向量空间模型(TF-IDF)、

    实体链接(Entity Linking).依存句法分析.成分句法树.词袋模型.文本向量空间模型(TF-IDF) 目录

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

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

  3. 词向量之词袋模型(BOW)详解

    目录 前言 词袋模型 词袋模型的作用 词袋模型的实现 前言   自然语言处理面临的文本数据往往是非结构化杂乱无章的文本数据,而机器学习算法处理的数据往往是固定长度的输入和输出.因而机器学习并不能直接处 ...

  4. java词袋模型_自然语言处理——词袋模型与向量化

    词袋模型 词袋模型(Bag of Words,简称BoW),所谓的词袋模型是一种用机器学习算法对文本进行建模时表示文本数据的方法. 词袋模型假设我们不考虑文本中词与词之间的上下文关系,仅仅只考虑所有词 ...

  5. 【NLP】毕设学习笔记(一):词袋模型、主题模型、词嵌入

    NLP分类方法历史 词袋模型(1954) One-hot TF-IDF N-gram 主题模型(1998) LSA pLSA LDA 词嵌入(word embedding) word2vec(2013 ...

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

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

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

    文章目录 1.词袋模型 2.TF-IDF模型 3.词汇表模型 1.词袋模型 词集模型:单词构成的集合,集合中仅统计单词的有无,不统计具体单词的出现的次数 词袋模型:在词集模型的基础上,统计单词出现的次 ...

  8. 文本表示(Text Representation)之词集模型(SOW)词袋模型(BOW)TF-IDF模型

    转载请注明来源 http://blog.csdn.net/Recall_Tomorrow/article/details/79488639 欢迎大家查看这些模型简单实现的代码--     \ \ \ ...

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

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

最新文章

  1. 【Android UI设计与开发】第13期:顶部标题栏(四)自定义ActionBar风格和样式
  2. 传统公司部署OpenStack(t版)简易介绍(六)——neutron模块部署
  3. js string转number_Node.js 和 C++ 之间的类型转换
  4. 先思再行 闭着眼睛编程
  5. jsp管理系统页面模板_jsp+ssh(spring+struts2+hibernate)+mysql实现的高校实验室管理系统...
  6. 计算机二级java试题_计算机二级考试《Java》试题及答案
  7. 面试遇到职场PUA,只能说兄弟你还嫩了点
  8. Futter基础第5篇: 实现列表、动态列表【ListView、ListView.builder】
  9. python绘制三角函数图像_用python画三角函数
  10. 参考文献标号字体_论文格式要求及字体大小
  11. Wireshark 基础 | 简介篇
  12. 克隆虚拟机后无法连接网络的问题
  13. 怎么更改苹果账户名称_是妥协吗?苹果iCloud终于支持安卓/iOS浏览器了
  14. 计算机课程微信可以教吗,这样操作都可以?教你用微信远程控制电脑!
  15. 《化工流体力学》课程笔记(四)
  16. RTX51tiny 延时长度计算
  17. DataFrame 数据筛选
  18. 程序员敲诈老板,或面临37年监禁
  19. 阿里90后程序员入选全球顶级开源社区技术委员会,网友:真大佬
  20. 硬件nat关闭还是开启_「Windows」到底要不要开启“快速启动”,有没有副作用?...

热门文章

  1. LeetCode Contest 163
  2. plsa java_plsa代码实现 | 学步园
  3. WIN10程序已经打开并且在运行,但是窗口看不到
  4. 如何更换荧石云的手机号码
  5. R语言 绘图组合布局 一页多图
  6. 51物联卡问答:物联网卡丢失损坏可以补办吗?
  7. 计算机数控机床工作原理,数控机床的工作原理
  8. Mac 如何安装apk到安卓手机
  9. 厦门大学c语言在线测试,厦门大学《C语言》模拟试卷(10级).doc
  10. 【算法自由之路】前缀树 桶排序之计数排序和基数排序