一、引言
在自然语言处理(NLP)和信息检索(IR)领域,我们常常需要对文本进行数字化建模,尤其是在文本分类、相似度计算、关键词提取等任务中。
TF-IDF(Term Frequency-Inverse Document Frequency,词频-逆文档频率)是一种经典的文本表示方法,至今仍被广泛使用。它以简洁的统计方式衡量词语对文档的重要性,是连接词与信息价值的桥梁。
二、TF-IDF 是什么?
TF-IDF 是一个加权模型,其核心思想是:如果某个词在一篇文章中频繁出现,但在整个语料库中很少见,那么它很可能是这篇文章的关键词。
TF-IDF 的计算由两个部分组成:
-
TF(Term Frequency)词频
表示词语在当前文档中出现的频率。
TF(t, d) = \frac{\text{词 }t \text{ 在文档 }d \text{ 中出现的次数}}{\text{文档 }d \text{ 的总词数}}
-
IDF(Inverse Document Frequency)逆文档频率
衡量词语在所有文档中的稀有程度。
IDF(t, D) = \log \left( \frac{N}{1 + |\{d \in D : t \in d\}|} \right)
其中 (N) 是语料库中文档总数,分母是包含词 (t) 的文档数,加 1 是为了避免除以 0。 -
TF-IDF 加权公式
TF\text{-}IDF(t, d, D) = TF(t, d) \times IDF(t, D)
三、为什么 TF-IDF 有效?
- 降噪:排除高频但无意义的停用词,如“的”、“是”、“和”等。
- 稀疏表示:大部分词在文档中是稀有的,TF-IDF 保留了稀有但关键的词语。
- 易于实现且高效:在词袋模型基础上演化,适用于大规模语料处理。
四、TF-IDF 实际应用场景
-
关键词提取
提取文本中的核心主题词,可用于文章摘要、SEO 优化等。 -
文本相似度计算
文本向量化后,可计算余弦相似度,用于推荐系统、文档去重等。 -
特征工程
在文本分类(如垃圾邮件识别、情感分析)中,TF-IDF 是传统模型的首选特征。
五、Python 实现
from sklearn.feature_extraction.text import TfidfVectorizer
corpus = [
"ChatGPT 是一个语言模型",
"语言模型可以生成自然语言",
"TF-IDF 是文本特征提取的方法"
]
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(corpus)
print(vectorizer.get_feature_names_out())
print(X.toarray())
输出结果即为每个文档中每个词的 TF-IDF 权重表示。
六、TF-IDF 的局限性
- 忽略词序和上下文语义:它是基于词袋模型的,不能理解词义差异。
- 对新词不友好:训练时未见过的词,IDF 无法计算。
- 不适合处理极长文本或小语料:在极端情况下会导致权重失衡。
七、与其他方法的对比
方法 | 特点 | 是否考虑语义 |
---|---|---|
TF-IDF | 简单有效,基于词频 | ❌ |
Word2Vec | 基于上下文训练词向量 | ✅ |
BERT Embedding | 基于深度学习的语义建模 | ✅ |
TF-IDF 仍在实际系统中承担着“轻量级选手”的角色,尤其适合快速构建原型或对关键词敏感的应用场景。
八、总结
TF-IDF 是一种简单而强大的文本特征提取方法。尽管在深度学习模型盛行的今天,它逐渐被更复杂的表示学习方法替代,但在资源受限或对可解释性有要求的任务中,TF-IDF 依然是不二之选。
引用资料
- Salton, G., & Buckley, C. (1988). Term-weighting approaches in automatic text retrieval. Information Processing & Management, 24(5), 513–523.
- scikit-learn 官方文档:https://scikit-learn.org/stable/modules/feature_extraction.html#text-feature-extraction
- Wikipedia: https://en.wikipedia.org/wiki/Tf–idf