TF-IDF算法

最近在肝腾讯广告大赛2020,特征提取部分陷入了窘境,突然想起了tf-idf,就来复习一波。

TF-IDF的概念

TF-IDF是Term Frequency - Inverse Document Frequency的缩写,即“词频-逆文本频率”。它由两部分组成,TF和IDF。

TF策略我在之前的高频词提取文章中进行过使用,TF用来表示词频,也就是某个词在文章中出现的总次数,也就是:

TF=某个词在文章中出现的总次数

但是考虑到每篇文章的长短是不同的,所以我们可以把上述内容进行一个标准化:

TF=某个词在文章中出现的总次数/文章的总词数

IDF用来表示逆文档频率,所谓逆文档频率其实是用来反映一个词在所有文档中出现的频率,当一个词在很多文档中出现的时候,其所对应的IDF值也应该变低,当一个词在很少的文档中出现的时候,其所对应的IDF值就会变高,用一个式子来表述一下:

IDF=log(语料库中的文档总数/(包含该词的文档数+1))

在这里我们+1的目的是为了当没有词语在文档中时来避免分母为0。

现在我们知道了TF,IDF分别代表什么,那么我们也可以得到TF-IDF:

TF-IDF=TF*IDF

并且根据上述的性质我们可以得出:TF-IDF与一个词在文档中的出现次数成正比,与该词在整个语料库中的出现次数成反比。

TF-IDF的实现,sklearn来计算TF-IDF

from sklearn.feature_extraction.text import TfidfVectorizer
corpus = [
    "what is the weather like today",
    "what is for dinner tonight",
    "this is a question worth pondering",
    "it is a beautiful day today"
]
 
tfidf_vec = TfidfVectorizer()
# 利用fit_transform得到TF-IDF矩阵
tfidf_matrix = tfidf_vec.fit_transform(corpus)
 
# 利用get_feature_names得到不重复的单词
print(tfidf_vec.get_feature_names())
 
# 得到每个单词所对应的ID
print(tfidf_vec.vocabulary_)
 
# 输出TF-IDF矩阵
print(tfidf_matrix)

总结

TF-IDF主要用于文章中关键词的提取工作,也可用于查找相似文章、对文章进行摘要提取、特征选择(重要特征的提取)工作。

TF-IDF算法的优点是简单快速,结果比较符合实际情况。缺点是,单纯以"词频"衡量一个词的重要性,不够全面,有时重要的词可能出现次数并不多。而且,这种算法无法体现词的位置信息,出现位置靠前的词与出现位置靠后的词,都被视为重要性相同,这是不正确的。(一种解决方法是,对全文的第一段和每一段的第一句话,给予较大的权重。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值