在自然语言处理(NLP)和信息检索领域,TF-IDF(Term Frequency-Inverse Document Frequency,词频-逆文档频率)是一种常用的文本权重计算方法。它能够衡量单词在文档中的重要性,并在文本分类、关键词提取、搜索引擎等多个领域广泛应用。
TF-IDF 是一种经典的文本表示方法,能够衡量单词在文档中的重要性。它在信息检索、文本分类和关键词提取等任务中广泛应用。然而,它无法捕捉语义信息,通常与词向量(如 Word2Vec、BERT)等方法结合使用,以提高文本分析的效果
1. TF-IDF 简介
TF-IDF 主要用于评估某个词语在一篇文档中的重要性,基本思想是:
- 词频(Term Frequency, TF) 衡量某个词在文档中出现的频率。
- 逆文档频率(Inverse Document Frequency, IDF) 衡量该词在整个语料库中的稀有程度。
通过 TF 和 IDF 的结合,我们可以计算出一个词的重要性,常见应用包括:
- 关键词提取:自动识别文档的核心词汇。
- 文本相似度计算:用于文本分类和推荐系统。
- 搜索引擎排序:衡量查询词与文档的相关性。
2. TF-IDF 计算公式
TF-IDF 的计算包含两个部分:
2.1 词频(TF)
词频用于衡量某个单词在一篇文档中出现的频率。常见的计算方法如下:
$$ TF(t, d) = \frac{f(t, d)}{\sum_{w \in d} f(w, d)} $$
其中:
- ( f(t, d) ) 表示词 ( t ) 在文档 ( d ) 中出现的次数。
- ( \sum_{w \in d} f(w, d) ) 表示文档 ( d ) 中所有单词的总出现次数。
2.2 逆文档频率(IDF)
逆文档频率用于衡量某个单词在整个文档集合中是否具有区分度。其计算公式为:
$$ IDF(t) = \log \frac{N}{1 + DF(t)} $$
其中:
- ( N ) 是文档总数。
- ( DF(t) ) 是包含词 ( t ) 的文档数量。
- 分母加 1 是为了避免除零错误。
2.3 TF-IDF 计算
最终,TF-IDF 计算公式为:
$$ TFIDF(t, d) = TF(t, d) \times IDF(t) $$
3. TF-IDF 计算示例
假设我们有如下三篇文档:
文档 1: “机器学习 是 人工智能 的 一个 分支”
文档 2: “深度学习 是 机器学习 的 一个 重要 方向”
文档 3: “自然语言处理 是 人工智能 的 一个 重要 领域”
计算 “机器学习” 在 文档 2 中的 TF-IDF 值:
- TF(“机器学习”, 文档 2) = 1 / 7 ≈ 0.142
- IDF(“机器学习”) = log(3 / 2) ≈ 0.176
- TF-IDF(“机器学习”, 文档 2) ≈ 0.142 × 0.176 ≈ 0.025
4. TF-IDF 的优缺点
4.1 优点
✅ 计算简单,易于理解和实现。
✅ 在搜索引擎和文本分析任务中表现良好。
✅ 适用于高维文本数据。
4.2 缺点
❌ 无法捕捉单词的语义信息,例如 “苹果” 可以指水果也可以指公司。
❌ 对长文本不够鲁棒,容易造成高频词权重偏高。
❌ 不能处理同义词、上下文信息,需要结合词向量等方法。
5. TF-IDF 在 NLP 领域的应用
- 搜索引擎:计算查询词与网页的相关性,提高搜索质量。
- 文本分类:作为文本特征用于机器学习模型。
- 关键词提取:自动提取文档的核心关键词。
- 文档相似度计算:用于推荐系统、聚类分析等。
6. Python 代码实现 TF-IDF
Python 提供了 sklearn.feature_extraction.text.TfidfVectorizer
方便计算 TF-IDF,示例如下:
1 | from sklearn.feature_extraction.text import TfidfVectorizer |