TF-IDF算法详解与应用

本文解析了TF-IDF算法的工作原理,通过TF(词频)和IDF(逆文档频率)结合,衡量关键词在文本中的重要性。通过实例说明如何计算TF-IDF权重,并阐述其与信息论的联系。重点介绍了如何调整权重以反映关键词的分辨率和专业性。
摘要由CSDN通过智能技术生成

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,因此,度量句子与类别的相关性,一个简单的方法就是直接使用该关键词在网页中出现的总词频。具体的讲,如果一个句子包括关键词 w 1 , w 2 , . . . , , w N w_1,w_2,...,,w_N w1,w2,...,,wN
它们在一个特定的网页中的词频分别是: T F 1 , T F 2 , . . . , T F N , TF_1,TF_2,...,TF_N, TF1,TF2,...,TFN,
那么,这个短语与类别的相关性(即相似度)就是: T F 1 + T F 2 + . . . + T F N TF_1+TF_2+...+TF_N TF1+TF2+...+TFN
IDF(Inverse Document Frequency , 缩写为IDF),逆文本频率指数
考虑一下,在汉语中,“最大”是个很通用的词,而“对撞机”是很专业的词,后者的相关性排名要比前者重要,但是在TF中“原子能”贡献度低于“最大”的贡献度,那么我们要给予每一个词一个权重,这个权重的设定需要满足两个条件:

  1. 一个词预测主题的能力越强,权重就会越大,反之,权重越小。例如在我们看到“对撞机”时,或多或少能了解文本的主题,但是“最大”一词并不能给我们判断文本主题的依据,因此,“对撞机”的权重就要比“最大”的大;
  2. 停用词的权重为0。
    概括来讲,假定一个关键词w在Dw个文本中出现,那么Dw越大,w的权重越小,反之亦然。在“信息检索”中我们经常使用“逆文本频率指数”(Inverse Document Frequency , 缩写为IDF)它的公式为:
    l o g ( D / D w ) 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就写为:
    T F 1 ⋅ I D F 1 + T F 2 ⋅ I D F 2 + . . . + T F N ⋅ I D F N TF_1·IDF_1+TF_2·IDF_2+...+TF_N·IDF_N TF1IDF1+TF2IDF2+...+TFNIDFN
    那么上面的例子中,该文本的“世界最大的对撞机”中,“对撞机”的贡献度就会大于“最大”的贡献度,也比较符合我们的直觉感受。
    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 ) l o g 2 P ( w ) I(x) = -P(w)log_2P(w) I(x)=P(w)log2P(w)
有了信息量的基础知识,那么我们回到TF-IDF,一个查询(Query)中的每一个关键词(Key Word) w 的权重应该反映这个词对查询来讲提供了多少信息。其中一个简单的办法就是用每个词的信息量作为它的权重,即:
I ( w ) = − P ( w ) l o g P ( w ) = − T F ( w ) N l o g T F ( w ) N = T F ( w ) N l o g N T F ( 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 ) = T F ( w ) l o g N T F ( w ) I(w) = TF(w)log\frac{N}{TF(w)} I(w)=TF(w)logTF(w)N
但是,如果两个词出现的频率TF相同,一个是某篇文章中的常见词,而另一个词是分散在多篇文章中,那么显然第一个词有更高的分辨率,它的权重应该更大。显然,更好的权重公式应该反映出关键词的分辨率
如果做一些假设:

  1. 每个文献大小基本相同,均为M个词,即:
    M = N D = ∑ w T F ( w ) D M =\frac{N}{D}= \frac{\displaystyle\sum_{w}TF(w)}{D} M=DN=DwTF(w)

  2. 一个关键词在文献中一旦出现,无论次数多少,贡献是相同的,这样一个词要么在一个文献中出现c(w)=TF(w)/D(w)次,要么是零。需要注意的是,c(w)<M,那么我们就可以得到如下公式:
    I ( w ) = T F ( w ) l o g N T F ( w ) = T F ( w ) l o g M D c ( 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 = T F ( w ) l o g ( D D ( w ) M c ( 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)的递减函数。将上式重写为:
    T F − I D F ( w ) = I ( w ) − T F ( w ) l o g M c ( w ) TF-IDF(w) = I(w) - TF(w)log\frac{M}{c(w)} TFIDF(w)=I(w)TF(w)logc(w)M
    可以看到,一个词的信息量I(w)越多,TF-IDF的值越大;同时w命中的文献中w平均出现的次数越多,第二项越小,TF-IDF也越大。这些结论和信息论完全相符。


Reference:数学之美 吴军,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值