机器咋判断两篇文章像不像?聊聊 TF-IDF 这把尺

先说人话:它给每个词打个「重要分」
TF-IDF 是个给词打分的老法子,专门衡量「一个词对一篇文章有多重要」。TF 是词频(Term Frequency),说白了就是这个词在文章里出现得多不多;IDF 是逆文档频率(Inverse Document Frequency),说的是这词在所有文章里稀不稀有。俩一乘,就得出一个分数:又常见(在这篇里)、又稀罕(在别的篇里少)的词,分最高,最代表这篇文章的调性。它不深不花哨,就是一把帮机器判断「这篇到底在讲啥」的土尺子,谁都能拎起来用。
TF 这半拉:出现越多,越像关键词?
先拆 TF。它干的事特直白——数数。一个词在文章里冒出来多少次,次数越多,它就越可能是这篇文章的主角。比如一篇讲「猫」的文章,「猫」字满篇跑,TF 就高。但这招立马露怯:像「的」「了」「是」这种废话词,出现得比谁都多,按 TF 它们最该是关键词,纯属瞎扯。所以光靠 TF 不行,得有人管管这些烂大街的词——这就轮到 IDF 上场了,它专治这种虚胖。
IDF 这半拉:越烂大街,越要压下去
IDF 干的,就是给「烂大街词」泼冷水。它的逻辑:一个词要是每篇文章都有(比如「的」「我们」),那它压根分不清文章,重要个屁,分数往下压;反过来,一个词只在少数文章出现(比如「量子」「桑拿」),那它八成是某篇的独家标签,分数往上抬。IDF 就这么把「谁都有的」和「独此一份的」区别开。所以 TF 管「这篇里多不多」,IDF 管「别处稀不稀」,俩一个管局部、一个管全局,配合得刚刚好,谁也离不了谁。
合起来咋用:用分数比文章像不像
TF 乘 IDF,每个词拿到一个分,一篇文章就变成一长串「词—分」的清单。比两篇文章像不像,就把它们的清单摆一块儿:重合的高分词越多,说明讲的越是一个调调。搜索引擎早期就这么干——你搜「怎么做红烧肉」,它把库里每篇按这法子打分、跟你的词对上号的排前面。它比单纯数「有没有这词」聪明,因为会区分「关键稀有词」和「废话常用词」,排序才像点人话,不至于满屏都是蹭热词的水文。
它为啥被嫌弃:不懂词意、不认近义词
但 TF-IDF 有个死穴:它只认字面,不懂意思。「车」和「汽车」它当俩词,「苹果公司」和「苹果水果」它分不清,近义词、同义词更是一点不认。所以你搜「手机」,它搜不出标了「移动电话」的文章,死板得很。如今有了能懂语义的向量模型(把文章变成意思向量再比),TF-IDF 这种字面尺子就显得拙了。它就停在那儿:会数词、不会懂词,这是它跨不过的坎,也是被后浪拍在沙滩上的根儿。
可它还没退休:便宜、皮实、好解释
别看被嫌弃,TF-IDF 至今没下岗。原因特实在:它便宜啊——不用大模型、不烧显卡,几行代码就跑,小网站、小数据、要个快出活儿的场合,它比花里胡哨的向量模型划算多了。而且它好解释:哪个词分高、为啥排前,一目了然,不黑盒。所以真落地,老炮常拿它当基线、当快筛,粗粗分一拨再交给精细模型。它就像算盘,算不过计算机,但拎着方便、看得懂,该用还得用,别一味追新。








