type
status
date
slug
summary
tags
category
icon
password
😀
文章前言:在文本挖掘和信息检索领域,衡量两个文本的相似度是一个非常重要的任务。本文将介绍如何使用 TF-IDF(词频-逆文档频率)来计算文本的相似度。

TF-IDF介绍


1 TF-IDF算法介绍

TF-IDF(term frequency–inverse document frequency,词频-逆向文件频率)是一种用于信息检索(information retrieval)与文本挖掘(text mining)的常用加权技术。
TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。
TF-IDF的主要思想是:如果某个单词在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。

1.1 TF-IDF的数学表达形式

要理解 TF-IDF 算法,第一个步骤是理解 TF-IDF 的应用背景。TF-IDF 来源于一个最经典、也是最古老的信息检索模型,即“向量空间模型”(Vector Space Model)。
其实它就是一个庞大的矩阵,用词语的数字向量来代表一篇文档,当比较文档时,就是在比较这些向量的相似性。
如果把向量展示在图上,就会有类似下面图案的样子,加上一个计算向量相似度的方式,比如cosine距离,我们就能判段哪些文档在这个三维空间上比较相似了。 图中两个蓝色向量离得越近,就代表他们越像。
notion image

1.2 词频(Term Frequency, TF)

词频表示某个词语在文档中出现的次数。计算公式为:
其中,f(t, d)表示词语 t 在文档 d 中出现的次数,N(d) 表示文档 d 中的总词数。

1.3 逆文档频率(Inverse Document Frequency, IDF)

逆文档频率表示某个词语在整个文档集合中出现的频率。计算公式为:
IDF(t,D)=log1+∣d∈D:t∈d∣N​
其中,(N) 表示文档集合中的文档总数,(|d \in D: t \in d|) 表示包含词语 (t) 的文档数量。

1.4 TF-IDF 计算

某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的TF-IDF。因此,TF-IDF倾向于过滤掉常见的词语,保留重要的词语。
将词频和逆文档频率相乘,得到词语在文档中的 TF-IDF 值:
TF−IDF(t,d,D)=TF(t,d)×IDF(t,D)TF−IDF(t,d,D)=TF(t,d)×IDF(t,D)

1.5 使用 Python 进行 TF-IDF 计算

下面是一个使用 Python 和 scikit-learn 库进行 TF-IDF 向量化计算的示例:
  • TF-IDF 矩阵: 表示每个文档的词语在文档中的重要程度。
 

2 TF-IDE算法的实现

2.1 Python3实现TF-IDF算法

notion image

2.2 NLTK实现TF-IDF算法

notion image

2.3 Sklearn实现TF-IDF算法

notion image

2.4 Jieba实现TF-IDF算法

notion image
注:
  • jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
  • sentence 为待提取的文本
  • topK 为返回几个 TF/IDF 权重最大的关键词,默认值为 20
  • withWeight 为是否一并返回关键词权重值,默认值为 False
  • allowPOS 仅包括指定词性的词,默认值为空,即不筛选
 

3 TF-IDF算法的不足

TF-IDF 采用文本逆频率 IDF 对 TF 值加权取权值大的作为关键词,但 IDF 的简单结构并不能有效地反映单词的重要程度和特征词的分布情况,使其无法很好地完成对权值调整的功能,所以 TF-IDF 算法的精度并不是很高,尤其是当文本集已经分类的情况下。
在本质上 IDF 是一种试图抑制噪音的加权,并且单纯地认为文本频率小的单词就越重要,文本频率大的单词就越无用。这对于大部分文本信息,并不是完全正确的。IDF 的简单结构并不能使提取的关键词, 十分有效地反映单词的重要程度和特征词的分布情 况,使其无法很好地完成对权值调整的功能。尤其是在同类语料库中,这一方法有很大弊端,往往一些同类文本的关键词被盖。
TF-IDF算法实现简单快速,但是仍有许多不足之处:
(1)没有考虑特征词的位置因素对文本的区分度,词条出现在文档的不同位置时,对区分度的贡献大小是不一样的。
(2)按照传统TF-IDF,往往一些生僻词的IDF(反文档频率)会比较高、因此这些生僻词常会被误认为是文档关键词。
(3)传统TF-IDF中的IDF部分只考虑了特征词与它出现的文本数之间的关系,而忽略了特征项在一个类别中不同的类别间的分布情况。
(4)对于文档中出现次数较少的重要人名、地名信息提取效果不佳。

📎 参考文章


 
💡
有关问题,欢迎您在底部评论区留言,一起交流~
OS:文件管理OS:I/O管理
Loading...
Koreyoshi
Koreyoshi
一个无可救药的乐观主义者
Latest posts
软件测试:数据流测试
2025-3-20
软件测试:集成测试
2025-3-20
软件测试:系统测试
2025-3-20
OpenHarmony L2开发板烧录
2025-3-18
软件测试:测试管理
2025-3-18
软件工程:软件项目管理
2025-3-17
Announcement
🎉写给自己的2025心愿🎉
保研
国奖
完善博客
学一门乐器
发表一篇论文
拍摄人生照片
去3个城市旅游
专业课知识视频
拍摄毕业季视频
----- 2025 ------
👏希望我们一起变好👏