TF-IDF:概念与python实现

1. 基本概念

TF-IDF(Term Frequency - Inverse Document Frequency)表示“词频-逆文本频率”。词频(TF,Term Frequency )表示给定词语在文件或语料中出现的频率(归一化以屏蔽长短文件的差异);逆文本频率(IDF,Inverse Document Frequency)是一个词语重要性的度量。

(1)Term Frequency

当以“人工智能的应用”为关键词进行网页搜索,根据直觉,“人工智能”、“的”、“应用”这三个词出现次数较多的网页相关性也较高。

但由于篇幅较长的网页一般包含较多的关键词,为屏蔽文本篇幅的差异,根据网页长度对关键词的次数进行归一化,就是词频(Term-Frequency)

此时,度量网页相关性可以直接将关键词的词频相加,假设 N N N个关键词的词频分别为 T F 1 , T F 2 , . . . , T F N TF_1,TF_2,...,TF_N TF1TF2...TFN,该网页的相关性为:

T F 1 + T F 2 + . . . + T F N TF_1 + TF_2 + ... +TF_N TF1+TF2+...+TFN

比如,某个网页的词共1000个,“人工智能”、“的”和“应用”分别出现3次,30次,10次,它们的词频分别为0.003,0.03,0.01,该网页与“人工智能的应用”相关性为

0.003 + 0.03 + 0.01 = 0.043 0.003+0.03+0.01= 0.043 0.003+0.03+0.01=0.043

但是“人工智能”是一个很专业的词,“应用”是一个很普通的词,“的”是一个停止词(Stop Word),但在计算相关行性时候“的”贡献却是最多的,而“人工智能”贡献却最少。因此还需要给每个词赋予相应的权重进行修正,以满足以下设定:

  • 一个词与主题相关性越大,权重越大,反正权重越小。
  • 停止词权重为0。即忽略“的”、“得”、“地”、“是”、“也”这些词。

(2) Inverse Document Frequency

可见如果一个关键词只在少量文本中出现,当它一旦出现时,就很容易锁定该文本的主题,反之亦然;即一个关键词 x x x N N N个文本中出现,当 N N N越大时, x x x的权重就越小,反之亦然。

上述理念通过定义逆文本频率(IDF,Inverse Document Frequency)实现:
I D F ( x ) = l o g N N ( x ) IDF(x) = log\frac{N}{N(x)} IDF(x)=logN(x)N

其中, N N N代表语料库中文本的总数,而 N ( x ) N(x) N(x)代表语料库中包含词 x x x的文本总数。

当某个生僻词未在语料库中出现过, N ( x ) N(x) N(x)=0, 需要进行如下平滑处理: I D F ( x ) = l o g N + 1 N ( x ) + 1 + 1 IDF(x) = log\frac{N+1}{N(x)+1} + 1 IDF(x)=logN(x)+1N+1+1

IDF反应了一个词在所有文本中出现频率的逆,如果一个词在较少文本中出现,它的IDF值应该高,如“人工智能”这样的专业名词;如果一个词在较多文本中出现,它的IDF值应该低,比如“应用”这样词。极端的情况下,如果一个词在所有(或大多数)文本中都出现,那么它的IDF值应该为0,比如“的”这样的停止词。

上述例子中,假设所有文本语料数量 N = 1 0 9 N=10^9 N=109,“人工智能”出现 1 0 5 10^5 105次,“应用”出现 1 0 8 10^8 108次,“的”在所有网页中都出现,则

I D F ( 人 工 智 能 ) = log ⁡ 2 ( 1 0 9 1 0 5 ) = 13.29 IDF(人工智能) = \log_2(\frac {10^9}{10^5}) = 13.29 IDF=log2(105109)=13.29

I D F ( 应 用 ) = log ⁡ 2 ( 1 0 9 1 0 8 ) = 3.32 IDF(应用) = \log_2(\frac {10^9}{10^8}) = 3.32 IDF=log2(108109)=3.32

I D F ( 的 ) = log ⁡ 2 ( 1 0 9 1 0 9 ) = 0 IDF(的) = \log_2(\frac {10^9}{10^9}) = 0 IDF=log2(109109)=0

此时,相关性可以用TF-IDF度量,假设 N N N个关键词的词频分别为 T F 1 , T F 2 , . . . , T F N TF_1,TF_2,...,TF_N TF1TF2...TFN,该网页与关键词的相关性为:

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

上述例子中,“人工智能”的TF-IDF为0.04,“应用”的TF-IDF为0.03,而“的”TF-IDF为0,则该网页与“人工智能的应用”的相关性为0.07,其中“人工智能”贡献了一半以上的相关性。

2. 代码实现

使用sklearn.feature_extraction.text中的TfidfVectorizer类实现,支持传入停止词。

from sklearn.feature_extraction.text import TfidfVectorizer
corpus=["I come to China to travel", 
    "This is a car polupar in China",          
    "I love tea and Apple ",   
    "The work is to write some papers in science"] 
tfidfVec = TfidfVectorizer()
tfidf = tfidfVec.fit_transform(corpus)
print("\n词频矩阵(TF-IDF):")
print(tfidf)
print("\n词袋模型(TF-IDF):")
print(tfidf.toarray())

输出如下:
在这里插入图片描述在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

隐私无忧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值