1. 什么是 TF-IDF?
TF-IDF(词频-逆文档频率) 是一种用于 文本信息检索(IR, Information Retrieval) 和 文本挖掘(Text Mining) 的统计方法。它衡量 一个单词(词项,Term)在一个文档集合(Corpus)中的重要性,常用于 关键词提取、文档排序、文本搜索和推荐系统。
核心思想:
- TF(Term Frequency, 词频):衡量一个词在某个文档中出现的次数,表示该词对该文档的重要性。
- IDF(Inverse Document Frequency, 逆文档频率):衡量一个词在整个文档集合中的重要性,越少出现的词越重要,避免常见词(如 “the”、“is”)的影响。
2. TF-IDF 计算公式
TF-IDF 是由 词频(TF) 和 逆文档频率(IDF) 组成:
2.1 词频(TF, Term Frequency)
TF 衡量某个词
t
t
t 在某篇文档
d
d
d 中出现的频率,计算公式:
T
F
(
t
,
d
)
=
n
t
N
TF(t, d) = \frac{n_t}{N}
TF(t,d)=Nnt
- n t n_t nt:单词 t t t 在文档 d d d 中出现的次数
- N N N:文档 d d d 中的总单词数
示例:
文档1: "机器学习是人工智能的一个重要分支"
- “机器学习” 在该文档中出现 1 次,总词数 7 个
- TF(“机器学习”, 文档1) = 1 / 7 ≈ 0.14
2.2 逆文档频率(IDF, Inverse Document Frequency)
IDF 衡量某个词在整个语料库中出现的普遍程度,公式:
I
D
F
(
t
)
=
log
D
D
t
+
1
IDF(t) = \log \frac{D}{D_t + 1}
IDF(t)=logDt+1D
- D D D:文档总数
- D t D_t Dt:包含该单词 t t t 的文档数
- 这里 + 1 +1 +1 用于避免分母为 0。
示例:
假设:
- 总文档数 D = 1000 D = 1000 D=1000
- 词 “机器学习” 出现在 50 篇文档中,则:
I D F ( " 机器学习 " ) = log 1000 50 + 1 = log 19.6 ≈ 1.29 IDF("机器学习") = \log \frac{1000}{50 + 1} = \log 19.6 ≈ 1.29 IDF("机器学习")=log50+11000=log19.6≈1.29 - “的” 出现在 950 篇文档中:
I D F ( " 的 " ) = log 1000 950 + 1 ≈ 0.02 IDF("的") = \log \frac{1000}{950 + 1} ≈ 0.02 IDF("的")=log950+11000≈0.02 - 罕见词(如 “深度学习”)可能仅出现在 10 篇文档中:
I D F ( " 深度学习 " ) = log 1000 10 + 1 = log 91 ≈ 1.96 IDF("深度学习") = \log \frac{1000}{10 + 1} = \log 91 ≈ 1.96 IDF("深度学习")=log10+11000=log91≈1.96
=> 越少见的词,IDF 值越大,代表更重要!
2.3 计算 TF-IDF
T
F
-
I
D
F
(
t
,
d
)
=
T
F
(
t
,
d
)
×
I
D
F
(
t
)
TF\text{-}IDF(t, d) = TF(t, d) \times IDF(t)
TF-IDF(t,d)=TF(t,d)×IDF(t)
示例:
- TF(“机器学习”) = 0.14
- IDF(“机器学习”) = 1.29
T F - I D F ( " 机器学习 " , 文档 1 ) = 0.14 × 1.29 ≈ 0.18 TF\text{-}IDF("机器学习", 文档1) = 0.14 \times 1.29 ≈ 0.18 TF-IDF("机器学习",文档1)=0.14×1.29≈0.18
最终,“机器学习” 的重要性比 “的” 高得多,因为 “的” 是一个无关紧要的高频词。
3. TF-IDF 的应用
3.1 搜索引擎(Search Engines)
- 计算 用户查询关键词 和 文档 的相似性,进行 搜索结果排序。
- 例如,用户搜索 “机器学习基础”,搜索引擎会:
- 计算 “机器学习” 和 “基础” 在各个文档中的 TF-IDF 值。
- 选取 TF-IDF 总和最高的文档,排在前面。
3.2 关键词提取(Keyword Extraction)
- 自动提取文章中最重要的关键词,如:
- 新闻标题生成
- 文档摘要
- 主题建模
3.3 文本分类(Text Classification)
- 邮件垃圾过滤:垃圾邮件 vs. 非垃圾邮件
- 情感分析:正面情感 vs. 负面情感
- 新闻分类:体育 vs. 娱乐 vs. 科技
3.4 推荐系统(Recommendation System)
- 计算 用户感兴趣的词,匹配 相似文章 进行个性化推荐。
4. Python 代码实现 TF-IDF
使用 TfidfVectorizer
计算 多个文档的 TF-IDF:
from sklearn.feature_extraction.text import TfidfVectorizer
# 示例文档
documents = [
"机器学习是人工智能的一个分支",
"深度学习是机器学习的一个分支",
"人工智能包含机器学习和深度学习"
]
# 初始化 TF-IDF 向量化器
vectorizer = TfidfVectorizer()
tfidf_matrix = vectorizer.fit_transform(documents)
# 输出 TF-IDF 词汇
print("词汇索引:", vectorizer.vocabulary_)
# 输出 TF-IDF 值
print("TF-IDF 矩阵:\n", tfidf_matrix.toarray())
输出示例:
词汇索引:
{'机器学习': 0, '人工智能': 1, '深度学习': 2, '分支': 3, '包含': 4}
TF-IDF 矩阵:
[[0.707 0.707 0. 0.707 0. ]
[0.707 0. 0.707 0.707 0. ]
[0.577 0.577 0.577 0. 0.577]]
- “机器学习”、“深度学习”、“人工智能” 的 TF-IDF 值较高,表明它们是这些文档的核心概念。
5. TF-IDF 的优缺点
5.1 优点
✅ 简单高效:TF-IDF 计算简单,适用于大规模文本处理。
✅ 不需要大量标注数据:无需深度学习训练,直接基于文本计算。
✅ 适用于信息检索和文本分类。
5.2 缺点
❌ 无法捕捉词序和语义信息:
- “苹果公司” 与 “苹果 水果” 意义不同,但 TF-IDF 认为它们相似。
❌ 对长文本效果一般: - TF-IDF 主要基于词频,对 长文本中词语关系 无法建模。
❌ 无法处理 OOV(Out-of-Vocabulary, 未登录词): - 训练时没见过的新词无法计算 TF-IDF。
6. TF-IDF vs. 其他 NLP 技术
方法 | 特点 | 应用场景 |
---|---|---|
TF-IDF | 基于词频统计,无需训练 | 关键词提取、搜索引擎 |
Word2Vec(词向量) | 词与词的相似性,捕捉语义 | 词嵌入、推荐系统 |
BERT(预训练语言模型) | 双向 Transformer,语境感知 | 机器阅读、问答、NER |
7. 总结
- TF-IDF 是 NLP 领域最经典的文本表示方法之一,用于衡量 单词在文档中的重要性。
- 核心公式:
- TF(词频):衡量某个单词在文档中的频率。
- IDF(逆文档频率):衡量某个单词在整个语料库中的重要性。
- TF-IDF = TF × IDF
- 主要应用:搜索引擎、文本分类、关键词提取、推荐系统等。
- 局限性:无法捕捉语义信息,无法处理长文本关系。
尽管 深度学习(如 BERT) 已成为主流,TF-IDF 仍然是 搜索和信息检索的基石,在现实应用中依然广泛使用。