2)计算词频
词频即计算某个单词在一篇文章中出现的频率,计算公式为:
TF = 单词在一篇文章中出现的次数 / 这篇文章的总词汇数
以一篇名为《应届生到底适不适合去深圳?》的文章为例,这篇文章的总词汇数为486个,其中“应届生”一词共出现8次,“深圳”一词出现3次,“毕业”一词出现6次,由此可以计算出这三个单词的TF值为:
单词出现次数
当前文档词汇总数
TF值
应届生
8
486
0.0164
深圳
3
486
0.0062
毕业
6
486
0.0123
…
…
…
…
3)计算逆文档频率
一个单词的逆文档频率,由全部文档数除以包含该单词的文档数,再取对数得到。如果一个单词越常见,那么分母就越大,逆文档频率就越接近0。计算公式为:
IDF = log(全部文档数/包含该词的文档总数+1)
*分母加1是为了避免分母为0的情况(即所有文档都不包含该词)
在本次用于训练的12382篇文章中,出现“应届生”一词的文章共有18篇,出现“深圳”一词的文章共有69篇,出现“毕业”一词的文章共有5篇,由此可以计算出各个单词的逆文档频率为:
出现该单词文档数
全部文档数
IDF值
应届生
18
12382
2.814
深圳
69
12382
2.2477
毕业
5
12382
3.3146
…
…
…
…
4)计算TF-IDF值
TF-IDF值由TF值和IDF值相乘得到,计算公式为:
TF-IDF = TF *IDF
上文中,我们已经计算得到了“应届生“、“深圳”、“毕业”三个单词的TF值和IDF值,那么这三个单词的TF-IDF值为:
TF值
IDF值
TF-IDF值
应届生
0.0164
2.814
0.0058
深圳
0.0062
2.2477
0.0027
毕业
0.0123
3.3146
0.0037
…
…
…
…
5)提取关键词
通过上述计算过程可以发现,一个单词的TF-IDF值与其在文档中出现的频率成正比,与其在整个语料中的出现的频率成反比,TF-IDF值越大,说明该单词对于当前文档的重要程度越高,反之亦然。所以自动提取关键词,就是计算出文档中所有单词的TF-IDF值,然后按降序排列,取排在最前面的几个单词。
仍然以《应届生到底适不适合去深圳?》一文为例,笔者计算了该文章全部486个单词的TF-IDF值并按降序排序,部分结果展示如下:
TF-IDF值
应届生
0.0058
毕业
0.0037
职业
0.0032
深圳
0.0027
薪资
0.0026
…
…
如果
0.00011
是
0.00005
可以看到在全文486个单词中,TF-IDF值最大的3个单词分别是:“应届生“、“毕业”和“职业”。假设我们要为该文章提取出3个关键词,则通过TF-IDF算法自动提取的结果分别是:“应届生“、“毕业”和“职业”。
另外我们还发现,“如果”、“是”这类通用词的TF-IDF值很小,主要原因是虽然它们在文章中出现的频率很高,但由于在大多数文章中都出现过,所以IDF值很小导致TF-IDF值很小,说明这些单词对于不同文档的区分能力较弱。
所以,与使用词频来暴力统计关键词相比,TF-IDF算法可以帮助我们剔除掉一些虽然词频很高,但是并没有明显区分能力的单词,从而提高关键词提取的准确度。
以上就是TF-IDF值计算的实现过程,实际上Python已经帮助我们定义好了相关的函数,直接调用即可。具体实例可以参考:
https://radimrehurek.com/gensim/models/tfidfmodel.html
三 算法应用
TF-IDF算法的实现逻辑清晰,且实现起来简单快速,在很多实际场景中都取得了较好的应用效果,主要包括:使用TF-IDF进行文本关键词提取,TF-IDF结合距离公式来计算文本相似度,以及实现文章自动摘要(根据单词的TF-IDF值筛选出包含信息最多的句子)等等。
不过,TF-IDF算法也有一定的局限性。它仅考虑了词频对于文本的重要程度,出现在文章不同位置的单词重要性权重是一样的。而事实上,一个单词的重要程度与它在文本中出现的位置是有关系的,比如我们认为出现在摘要和段落首行的单词一般都具有总结性作用,因此应该被赋予更高的权重。
关于TF-IDF应用的更多想法,欢迎大家在文章下方留言讨论。
团队介绍:我们是毕马威旗下的专业数据挖掘团队,微信公众号(kpmgbigdata)每周六晚8点准时推送一篇原创数据科学文章。我们的作品都由项目经验丰富的博士或资深顾问精心准备,分享结合实际业务的理论应用和心得体会。欢迎大家关注我们的微信公众号,关注原创数据挖掘精品文章;您也可以在公众号中直接发送想说的话,与我们联系交流。返回搜狐,查看更多