TF-IDF算法详解与应用
TF-IDF
TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。
而对于TF-IDF ,举一个小例子来做一下简要说明:
TF(Term Frequency):
短语“世界最大的对撞机”可以分为四个关键词:世界,最大,的,对撞机。如果要考虑关键词与类别的相关性,一个方法是统计在一段短文中出现该关键词的频率(Term Frequency),但是短文字数较少就会产生占便宜,所以我们要采用归一化的方法,即用该关键词出现的次数除以该类别所有短文的字数,比如在“科技”类别中共有1000个词,“世界”,“最大”,“的”,“对撞机”分别出现了10次、5次、35次和2次,那么它们对应的词频就分别是0.010、0.005、0.035、0.002,其和等于0.052就是“世界最大的对撞机”的TF,因此,度量句子与类别的相关性,一个简单的方法就是直接使用该关键词在网页中出现的总词频。具体的讲,如果一个句子包括关键词w1,w2,...,,wNw_1,w_2,...,,w_Nw1,w2,...,,wN
它们在一个特定的网页中的词频分别是:TF1,TF2,...,TFN,TF_1,TF_2,...,TF_N,TF1,TF2,...,TFN,
那么,这个短语与类别的相关性(即相似度)就是:TF1+TF2+...+TFNTF_1+TF_2+...+TF_NTF1+TF2+...+TFN
IDF(Inverse Document Frequency , 缩写为IDF),逆文本频率指数
考虑一下,在汉语中,“最大”是个很通用的词,而“对撞机”是很专业的词,后者的相关性排名要比前者重要,但是在TF中“原子能”贡献度低于“最大”的贡献度,那么我们要给予每一个词一个权重,这个权重的设定需要满足两个条件:
- 一个词预测主题的能力越强,权重就会越大,反之,权重越小。例如在我们看到“对撞机”时,或多或少能了解文本的主题,但是“最大”一词并不能给我们判断文本主题的依据,因此,“对撞机”的权重就要比“最大”的大;
- 停用词的权重为0。
概括来讲,假定一个关键词w在Dw个文本中出现,那么Dw越大,w的权重越小,反之亦然。在“信息检索”中我们经常使用“逆文本频率指数”(Inverse Document Frequency , 缩写为IDF)它的公式为:
log(D/Dw)log(D/D_w)log(D/Dw)其中D是全部的网页数。假如有1000万个文本,“对撞机”在2万个文本中出现,即Dw=20000,那么它的权重IDF = log(500) = 8.98。又假定通用词“最大”出现在500万个文本中,它的权重IDF = log(2) = 1。即找到一个“对撞机”的命中率(Hits)相当于找到九个”最大“的命中率。
那么TF-IDF就写为:
TF1⋅IDF1+TF2⋅IDF2+...+TFN⋅IDFNTF_1·IDF_1+TF_2·IDF_2+...+TF_N·IDF_NTF1⋅IDF1+TF2⋅IDF2+...+TFN⋅IDFN
那么上面的例子中,该文本的“世界最大的对撞机”中,“对撞机”的贡献度就会大于“最大”的贡献度,也比较符合我们的直觉感受。
python中我们可以直接调用的 sklearn 中的TfidfVectorizer 进行处理。
def get_tfidf(self,X_train,X_test):vectorizer = TfidfVectorizer(min_df = 100)vectorizer.fit_transform(X_train)X_train_vec = vectorizer.transform(X_train)X_test_vec = vectorizer.transform(X_test)return X_train_vec, X_test_vec,vectorizer
项目具体应用看这篇文章:基于文本分类的机器学习-数据处理、One-hot、TF-IDF、Bag of word
TF-IDF的信息论依据
预备知识(信息论):
简要来讲,不确定性的减少量 = 信息量,什么叫不确定性的减少量?拿上边那句“世界最大的对撞机”举个例子,不确定性指的是这句话是属于哪种文本种类的,是“家居”话题还是“科技”话题?如果给你一个关键词“世界”或者“最大”,你可以推断出这篇文章再讲什么事吗?可见其不确定性并没有减少,这两个关键字的信息量是很小的,但是给你一个关键词“对撞机”,那么你可能选择科技话题的比较靠谱,而这个过程就是不确定性减少的过程,换一句话说,在这篇文章中关键词“对撞机” 的信息量是比较大的。给出信息量的公式为:
I(x)=−P(w)log2P(w)I(x) = -P(w)log_2P(w)I(x)=−P(w)log2P(w)
有了信息量的基础知识,那么我们回到TF-IDF,一个查询(Query)中的每一个关键词(Key Word) w 的权重应该反映这个词对查询来讲提供了多少信息。其中一个简单的办法就是用每个词的信息量作为它的权重,即:
I(w)=−P(w)logP(w)=−TF(w)NlogTF(w)N=TF(w)NlogNTF(w)I(w) = -P(w)logP(w) =-\frac{TF(w)}{N}log\frac{TF(w)}{N} = \frac{TF(w)}{N}log\frac{N}{TF(w)}I(w)=−P(w)logP(w)=−NTF(w)logNTF(w)=NTF(w)logTF(w)N
其中,N是整个语料库的大小,是个可以省略的常数。上面的公式可以简化成:
I(w)=TF(w)logNTF(w)I(w) = TF(w)log\frac{N}{TF(w)}I(w)=TF(w)logTF(w)N
但是,如果两个词出现的频率TF相同,一个是某篇文章中的常见词,而另一个词是分散在多篇文章中,那么显然第一个词有更高的分辨率,它的权重应该更大。显然,更好的权重公式应该反映出关键词的分辨率。
如果做一些假设:
每个文献大小基本相同,均为M个词,即:
M=ND=∑wTF(w)DM =\frac{N}{D}= \frac{\displaystyle\sum_{w}TF(w)}{D}M=DN=Dw∑TF(w)一个关键词在文献中一旦出现,无论次数多少,贡献是相同的,这样一个词要么在一个文献中出现c(w)=TF(w)/D(w)次,要么是零。需要注意的是,c(w)<M,那么我们就可以得到如下公式:
I(w)=TF(w)logNTF(w)=TF(w)logMDc(w)D(w)I(w) = TF(w)log\frac{N}{TF(w)} =TF(w)log\frac{MD}{c(w)D(w)}I(w)=TF(w)logTF(w)N=TF(w)logc(w)D(w)MD=TF(w)log(DD(w)Mc(w))= TF(w)log(\frac{D}{D(w)}\frac{M}{c(w)}) =TF(w)log(D(w)Dc(w)M)
这样,我们看到TF-IDF和信息量之间的差异就是公式中的第二项,因为c(w)<M,所以第二项大于0,它是c(w)的递减函数。将上式重写为:
TF−IDF(w)=I(w)−TF(w)logMc(w)TF-IDF(w) = I(w) - TF(w)log\frac{M}{c(w)}TF−IDF(w)=I(w)−TF(w)logc(w)M
可以看到,一个词的信息量I(w)越多,TF-IDF的值越大;同时w命中的文献中w平均出现的次数越多,第二项越小,TF-IDF也越大。这些结论和信息论完全相符。
Reference:数学之美 吴军,
TF-IDF算法详解与应用相关推荐
- 推荐系统简介+算法详解+项目介绍
目录标题 推荐系统简介 1.推荐系统目的 2.推荐系统的应用 3.推荐系统的基本思想 4.推荐系统的数据分析 5.推荐系统的分类 6.推荐算法简介 6.1 基于人口统计学的推荐算法(基于用户数据) 6 ...
- 【强化学习】Actor-Critic(演员-评论家)算法详解
1 Actor Critic算法简介 1.1 为什么要有Actor Critic Actor-Critic的Actor的前身是Policy Gradient,这能让它毫不费力地在连续动作中选取合适的动 ...
- 强化学习教程(四):从PDG到DDPG的原理及tf代码实现详解
强化学习教程(四):从PDG到DDPG的原理及tf代码实现详解 原创 lrhao 公众号:ChallengeHub 收录于话题 #强化学习教程 前言 在前面强化学习教程(三)中介绍了基于策略「PG」算 ...
- 【强化学习】DDPG(Deep Deterministic Policy Gradient)算法详解
http://www0.cs.ucl.ac.uk/staff/d.silver/web/Teaching.html 引用莫凡老师的素材 https://morvanzhou.github.io/tut ...
- 【强化学习】Policy Gradient算法详解
DeepMind公开课https://sites.google.com/view/deep-rl-bootcamp/lectures David Silver教程 http://www0.cs.ucl ...
- 寻路算法——A*算法详解并附带实现代码
一.前言 前天看了一篇博客介绍A*算法,按照自己的理解记录一下A*算法. 二.应用场景 一副地图中有坐标A和B,需要找到一条路径(如果有的话)能从A到B,地图中可能有河流或墙壁不能直接穿过,我们需要怎 ...
- 谱聚类算法详解及代码实现
谱聚类算法详解及代码实现 文章目录 谱聚类算法详解及代码实现 参考 关于谱聚类介绍 谱聚类概述 谱聚类前置知识 无向权重图 邻接矩阵 度矩阵 拉普拉斯矩阵 相似度矩阵 确定目标函数 初始化目标函数(最 ...
- Matlab人脸检测算法详解
这是一个Matlab人脸检测算法详解 前言 人脸检测结果 算法详解 源代码解析 所调用函数解析 bwlabel(BW,n) regionprops rectangle 总结 前言 目前主流的人脸检测与 ...
- 图论-最短路Dijkstra算法详解超详 有图解
整体来看dij就是从起点开始扩散致整个图的过程,为什么说他稳定呢,是因为他每次迭代,都能得到至少一个结点的最短路.(不像SPFA,玄学复杂度) 但是他的缺点就是不能处理带负权值的边,和代码量稍稍复杂. ...
- C++中的STL算法详解
1.STL算法详解 STL提供能在各种容器中通用的算法(大约有70种),如插入.删除.查找.排序等.算法就是函数模板,算法通过迭代器来操纵容器中的元素.许多算法操作的是容器上的一个区间(也可以是整个容 ...
最新文章
- 荣耀20青春版鸿蒙,荣耀20青春版曝光,浴霸三摄+麒麟810+系统亮点满满
- mysql设置行值唯一_mysql怎么设置行值唯一?
- 网页左右怎么划分_UI基础汇总——网页设计规范
- JAVA 导出 Excel, JS 导出 Excel
- ANDROID常用的命令(转载,后续自己完善)
- 苹果mac高效先进的网页开发工具:Espresso
- hard-negative mining详细介绍
- 鸢尾花(Iris)数据集下载保存到Excel文件
- 计算机图形学 参数曲线和曲面的相关知识点
- 这4款适合原型图的软件,产品经理都说好
- 异数OS TCP协议栈测试(五)--关于QOS与延迟
- css vss irf,网络虚拟化技术:VSS、IRF2和CSS解析
- u大师u盘装系统win7_黑鲨U盘重装win7系统教程
- mariadb BSL协议期限
- AD20笔记-元器件绘制
- 完美移除ESXI 7.0默认120G虚拟闪存,并支持自由调整,释放被占用的磁盘空间
- 拼多多店铺昨天还好好的,今天突然没流量,怎么回事?
- 江苏省一级计算机ms,计算机一级六大MS题型介绍
- 国内的服务器的优势就是,国产芯片服务器的优势是什么
- Python之建模规划篇--整数规划
热门文章
- 地图上如何量方位角_利用GPS测量方位角的方法
- linux polkitd 漏洞,Ubuntu Linux中的特权提升漏洞Dirty Sock分析(含PoC)
- 3D图形渲染及数字图像处理算法相关文集
- 关于打印出来的字符串,最后的逗号改为句号的解决办法
- 制作u盘winpe启动盘_u盘启动盘制作教程
- Cygwin的安装教程
- Word页码从任意页开始设置方法
- IOTOS物联中台从0到1开发Thales800驱动 实例详解
- 手机html设计规范,手机网页设计尺寸规范具体是多少?
- matlab优化工具箱安装,matlab优化工具箱安装