跳到正文
← 返回文章

技术分享

RAG入门-TF-IDF

5 分钟读完1,451 字

引用

BibTeX

@misc{rag-tf-idf,
  author = {Jingxi Qiu},
  title = {RAG入门-TF-IDF},
  howpublished = {Jingxi Qiu},
  year = {2026},
  url = {https://mouwumou.github.io/zh/blog/rag-tf-idf/}
}

APA

Qiu, J. (2026). RAG入门-TF-IDF. In Jingxi Qiu.

MLA

Qiu, Jingxi. “RAG入门-TF-IDF.” Jingxi Qiu, 2026.

Chicago

Qiu, Jingxi. 2026. “RAG入门-TF-IDF.” In Jingxi Qiu. Preprint.

TF-IDF

TF-IDF(Term Frequency-Inverse Document Frequency,词频-逆文档频率)是信息检索和文本挖掘中一种极其经典且常用的权重计算方法。核心逻辑是如果一个词在某篇文章中出现的次数很多,却在其他文章中出现次数很少,那这一个词能很好地代表这篇文章。

计算公式

TF-IDF

TF-IDF=TF×IDF\text{TF-IDF} = TF \times IDF

TF-IDF 是一个词在特定文档中的得分,由TF(词频)和IDF(逆文档频率)得来。

TF(Term Frequency,词频)

TF衡量的是一个词在当前文档中出现的频率。 • 计算公式:

TF=某个词在文档中出现的次数文档的总词数TF = \frac{\text{某个词在文档中出现的次数}}{\text{文档的总词数}}

一个词在文里出现的次数越多,它越可能更重要。比如一篇关于“量子力学”的文章,“量子”出现的频率自然很高,而在”美食鉴赏“里面则极少出现。

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

IDF衡量的是一个词的稀有程度。

IDF=log(语料库中的文档总数包含该词的文档数+1)IDF = \log\left(\frac{\text{语料库中的文档总数}}{\text{包含该词的文档数} + 1}\right)

如果一个词在所有文章里都出现(比如“的”、“是”、“在”),那么它的IDF就会非常低,说明它没有什么辨识度;相反,如果一个词只在极少数文章中出现(比如“薛定谔”),它的IDF就会很高,说明它具有很强的区分能力。

如果看公式会发现,在上面这个IDF公式中,IDF的范围是[log(1/2),++\infty)。如果有些内容在所有文档中出现,那它的贡献可以理解为0,因此0是合理的。但是我们并不想要一个负数的存在,因为它蕴含的意思是“一个词出现的越多,文档的相关性更低”。因此一般我们会选择IDF的各种变体,比如scikit-learn中默认处理为:IDF(t)=log(1+N1+n(t))+1IDF(t) = \log\left(\frac{1 + N}{1 + n(t)}\right) + 1,而在BM25中则有:IDF(t)=log(Nn(t)+0.5n(t)+0.5+1)\mathrm{IDF}(t)=\log\left(\frac{N-n(t)+0.5}{n(t)+0.5}+1\right),以确保IDF计算出来永远是正的。

因此,根据TF和IDF相乘,当一个词在文档中出现次数越多时,TF会上升,而如果它在所有文档中出现,会被IDF减小;出现少时,则说明这个词更能代表这个文档,从而被放大。它可以看作是词袋模型(Bag of Words)的一种加权版本。

TF-IDF常见应用场景

文本检索

搜索引擎可以用TF-IDF衡量查询词和文档之间的相关性。例如用户搜索“深度学习方法”,那么包含“深度学习”和“方法”且TF-IDF权重较高的文档更可能被排在前面。

文档分类

可以先用TF-IDF把文本转成向量,再训练分类器,比如朴素贝叶斯、逻辑回归、SVM等。

比如假设整个语料库的词表是:

[机器学习, 深度学习, 人工智能, 天气, 方法]

那么每篇文档都可以表示为一个向量:

D1 = [0.45, 0, 0.60, 0, 0]
D2 = [0.40, 0.70, 0, 0, 0.50]
D3 = [0, 0, 0, 0.80, 0]

每个位置对应一个词的TF-IDF权重。这样,原本非结构化的文本就被转换成了机器学习模型可以处理的数值向量。

常见应用于新闻分类、垃圾邮件识别、情感分析、主题分类、相似度计算。

关键词提取

一篇文章中TF-IDF分数较高的词,往往可以作为这篇文章的关键词。例如一篇文章中“注意力机制”“Transformer”“预训练模型”的TF-IDF很高,那么这些词很可能代表文章主题。

优缺点

优点

TF-IDF的优点非常明显:

  1. 首先,它简单、高效、可解释性强。每个词的权重都有明确含义。
  2. 其次,它不需要大量训练数据。和深度学习模型不同,TF-IDF是一种统计方法,不依赖复杂训练过程。
  3. 再次,它在很多传统文本任务中效果很好,尤其适合中小规模数据集、关键词提取、信息检索和传统分类任务。

缺点

TF-IDF毕竟是诞生于20世纪70年代的统计学模型,很多统计学模型缺陷依然存在:

  1. 它无法理解语义,比如“汽车”“轿车”“车辆”语义相近但在TF-IDF中会被识别成单独的词。
  2. 它无法理解语序,比如“我喜欢你”和“你喜欢我”词集合相同但语义不通。
  3. 它无法处理上下文,比如“苹果”既可以指水果,也可以指公司。TF-IDF本身无法根据上下文理解具体含义。
  4. 它容易产生高维稀疏向量,如果语料库中有几十万甚至上百万个词,TF-IDF向量维度会非常高,而且大多数位置是0。
  5. 在中文里,没有类似英文的空格分词,因此中文TF-IDF的效果很大程度上依赖分词器质量。
  6. 面对长短文本它的分布会有系统性的不同,比如在短文本只有三个词,那一个词的TF就是1/3,但在长文本中可能只有1/500。因此常见实现中会增加缩放或者归一化。

TF-IDF 与现代词向量方法的区别

TF-IDF是基于统计的稀疏表示,而Word2Vec、GloVe、BERT等方法通常是稠密语义表示。

方法 表示类型 是否考虑语义 是否考虑上下文 可解释性
TF-IDF 稀疏向量
Word2Vec 稠密向量 较强
BERT 上下文向量

总结

TF-IDF的优势是简单、快、可解释,但缺点是缺乏上下文与语义理解,在复杂的问题中表现被更强大的模型(比如BERT/LLM)全面碾压。但是它的效率和可解释性仍是不可忽略的优势,RAG粗筛的过程还是需要如TF-IDF这类能够高效低成本从海量数据中快速定位的模型。在实际工程中,如果任务较简单、数据规模有限,TF-IDF仍然是非常可靠的baseline。

下一章将介绍如今RAG中常用的TF-IDF的一种改进BM25。

link_to_page

相关文章