TF-IDF

Term Frequency-Inverse Document Frequency 的缩写。量化文档中词语重要性的方法。

TF-IDF (Term Frequency-Inverse Document Frequency,词频-逆文档频率) 是一种量化文档集合中特定词语重要性的方法。它是自 20 世纪 70 年代起就在信息检索、文本挖掘和自然语言处理领域使用的经典而实用的指标,也以作为搜索引擎排名算法的基础而闻名。

TF-IDF 由 TF (Term Frequency:词频) 和 IDF (Inverse Document Frequency:逆文档频率) 的乘积计算得出。TF 是目标文档内词语的出现次数除以文档总词数所得的值,表示该词在这篇文档中的重要程度。IDF 是总文档数除以包含该词的文档数所得值的对数,表示该词在整个文档集合中的稀有程度。"的"、"是"、"了" 这类高频词的 IDF 较低,而专业术语和专有名词的 IDF 较高。

在实务中最容易先绊倒人的是 IDF 的实现差异。基本形式是"总文档数除以包含该词的文档数所得值的对数",但为了避免该词在任何一篇文档中都未出现时的除零,存在给分子和分母各加 1 的实现,而对数的底也有使用自然对数和使用常用对数的实现混在一起,因此即使是相同的文档集合,换一个库数值也会变化。例如 100 篇文档中有 10 篇出现的词语,其 IDF 按自然对数的基本形式是 log(100 / 10) = 约 2.30,而在给分子和分母各加 1 之后再对整体加 1 的实现中约为 3.22。因此对于 TF-IDF 值,不要拿绝对值的大小去与其他系统比较,而是把它作为同一计算式、同一文档集合之内的排序来读取才是稳妥的做法。

另一个陷阱在于 IDF 依赖于文档集合本身。IDF 无法仅凭目标的一篇文档确定,它是从作为比较对象的整个文档集合的统计中算出的。因此,如果不保存分类器训练时使用的 IDF,而在推理时用手头的少量文档重新构建,同一个词就会被赋予不同的权重,导致精度下降。更换文档集合时,先决定是重新计算 IDF 还是固定训练时的值,这是实务上的分岔点。另外在基本形式中,出现于全部文档的词语其 IDF 为 log(1) = 0,因此即使不显式排除停用词,它们也会自动从得分中消失。

TF-IDF 在实务中的应用场景非常广泛。搜索引擎用它对查询与文档的相关度进行评分,文档分类中把它作为将文本转换为特征向量的方法来使用。关键词提取中选取 TF-IDF 值高的词作为文档的代表性关键词,文档摘要中把它作为识别重要句子的指标加以利用。一部分 SEO 分析工具也内置了 TF-IDF,作为与竞品页面比对来确认词汇偏向的指标。不过,TF-IDF 值本身并不决定搜索排名,把它当作检查自己文章词汇构成的工具来对待才符合实务。

TF-IDF 存在一些局限。由于仅基于词语的出现频率,它无法考虑词语的含义和上下文。"苹果" 指的是水果还是科技公司,TF-IDF 无法判别。它也无法把同义词 ("车" 与 "汽车") 当作同一概念处理,因此有时会降低检索的召回率。为弥补这些局限,出现了 Word2Vec 这样的词分布式表示,以及 BERT 这样表示会随上下文变化的模型,但 TF-IDF 凭借其计算的轻量和易于解释,截至 2026 年仍被广泛使用。

类似的指标还有 BM25。BM25 是对 TF-IDF 的改进,引入了按文档长度的归一化和 TF 的饱和函数。Elasticsearch 采用 BM25 作为默认的评分函数,因此在全文检索基础设施上处理按相关度排序的结果时,认为运行的并不是 TF-IDF 本身而是 BM25 系的公式,会更接近实情。

从字符计数的角度来看,TF-IDF 基于词语的出现次数 (频率),因此文本的字符数和词数是直接影响该指标的因素。文档的字符数越多,TF 的分母就越大,单个词的 TF 值相对越小。因此,对文档长度进行归一化的处理对提高 TF-IDF 的精度很重要。

分享这篇文章