/knowledge/information-retrieval
信息检索与搜索
敲下几个词,就从数十亿份文档里、在几毫秒内拿到对的那一份。搜索背后的机械优雅、积淀了数十年,并且——有了语义嵌入——成了 AI 系统找到它们需要知道之物的基础。
- 学于
- 信息检索与搜索进阶 · 排序与相关性
- 时间
- NLP 与 IR 课程
- 应用于
- 搜索大型集合
- 阅读 / 复习
- 约 15 分钟阅读2026-06-26
搜索如此寻常,以至于我们忘了它有多了不起:你敲下几个词,而从一个数十亿份文档的语料库里,最相关 的那些就排好序、在几毫秒内回来。信息检索(IR)是它背后的学科——按与一个查询的 相关性来查找并排序文档的科学——也是计算领域最古老、最精炼的方向之一。它也正经历一场复兴:同样的 检索机械,用语义嵌入升级之后,正是现代 AI 系统取回它们据以推理的知识的方式。
这一页是那片干活的地景:搜索如何被做快、经典排序如何运作(以及至今仍静悄悄驱动着大多数搜索框的 BM25 函数)、你如何测量结果好不好,以及转向语义搜索——它弥合了经典方法永远够不到的那道鸿沟。它 建立在 NLP 页之上,并连到推荐系统——两者都是排序问题。
01
大海捞针
IR 问题:给定一个查询和一个庞大的文档语料库,返回那些按与该 查询的相关性排序的文档。有两样东西让它变难。第一,规模——你没法为每个 查询读每一份文档,所以你需要一个能快速找出候选的结构。第二,相关性——「相关」 是模糊而属于人的,把几个查询词变成一个好的排序,正是全部的艺术。这个领域分两个阶段对付它们: 一个快速的结构来取回候选,然后一个排序函数来给它们排序。
02
倒排索引:搜索为什么快
让搜索成为可能的那个结构是倒排索引。它不是存「文档 → 它的词」(那意味着要扫描 每一份文档),而是把它翻转成「词 → 包含它的那些文档」。对词汇表里的每一个词项,索引都保留 一份包含它的每一份文档的列表。
现在一个查询就快了:查出每个查询词、抓取它(预先算好)的文档列表,再对这些列表取交集或并集—— 你立刻就有了那一小组值得打分的候选文档,而不必碰那些不含任何查询词的数十亿份。这与一本书的 索引、对比通读整本书是同一个想法,也正是它把一次不可能的扫描,变成一次毫秒级的查找。排序只在 那个候选集上发生。
03
TF-IDF 与向量空间模型
一旦你有了候选,你如何为相关性打分?经典的答案,是把查询和文档都表示成词权重的向量——向量空间模型——用 TF-IDF,也就是NLP 页里那同一种加权。直觉分两 部分:
- 词频(TF)——一个词在一份文档里频繁出现,标志着那份文档是关于它的。
- 逆文档频率(IDF)——一个出现在少数文档里的词更有区分力;「the」到处 都是、毫无用处,而一个罕见的词项是有信息量的。IDF 给常见的降权、给罕见的升权。
把它们相乘,一份文档在频繁包含查询那些罕见、有辨识度的词项时就得分很高。它简单、可解释、且 出奇地有效——但它有些粗糙的边角,下一个改进会把它们抹平。
04
BM25:至今仍取胜的主力
那个驱动搜索引擎数十年——并且至今仍是一个难缠的基线——的排序函数,是 BM25。它是 TF-IDF 的一个改进,修好了它的两个缺陷,而它给一份文档 、在给定 查询 时的分数,是对各个查询词项求和:
那两个修正,在那个公式里都看得见,正是让它比原始 TF-IDF 更好的东西:
- 词频饱和——一个出现 100 次的词,并不比出现一次相关 100 倍。 项让贡献饱和,于是额外的重复添加得越来越少。(朴素的 TF-IDF 会永远线性增长。)
- 长度归一化——长文档自然含有更多的词,这会不公平地抬高它们的分数。 项,用文档长度除以平均长度,对此做出校正。
BM25 快、可解释、不需要训练,而且真的难以被击败——这就是为什么它仍然是大多数生产搜索的默认 选择,也是现代混合系统关键的一半。
05
测量相关性
你怎么知道你的排序好不好?IR 有它自己的评估指标,而相比分类的关键转变在于顺序要紧——一个排在第 1 位的相关结果,远比 同样的结果排在第 50 位值钱得多。除了在前 k 个上朴素的精确率与召回率,主力是 MAP(平均精度 均值)与 NDCG(归一化折损累积增益),它们奖励把最相关的结果放最高——这与推荐系统里的排序质量想法相同, 因为两者本质上都是「把列表排好」的问题。
06
词汇鸿沟
尽管有种种长处,经典的关键词搜索(BM25 也包括在内)有一个根本的盲点:它匹配词,而非含义。搜「car(汽车)」,而一份只说「automobile(机动车)」的文档得分为零——没有 共享的词项、没有匹配,尽管含义完全相同。这道词汇鸿沟(词汇失配)是词法方法的 天花板:同义词、改述、相关的概念,对一个只数精确词重叠的系统来说都是看不见的。弥合它需要理解 含义,而非匹配字符串——而这正是嵌入革命最终交付的东西。
07
语义搜索:稠密检索
现代的答案是稠密检索。它不用稀疏的词数向量,而是把查询和每一份文档编码成稠密的嵌入——捕获含义的向量, 于是「car」与「automobile」落得很近。检索于是变成在那个语义空间里,找出离查询向量最近的那些 文档向量,这一跃就越过了词汇鸿沟:它在概念上匹配,而非关键词。
稠密检索需要近似最近邻搜索(像 HNSW 这样的算法、像 FAISS 这样的库)才能在数百万 个向量中快速找出相近的,而它比 BM25 更沉重、在精确词项(名字、代码、罕见行话)上也更不精确。 所以现代的最佳实践是混合搜索:稀疏和稠密都跑、融合排序,可选地在最靠前的 结果上再加一个神经重排器。这个「先检索再排序」的流水线,正是 RAG 里的 R——那个把一个大语言模型锚定在真实文档、 而非它的记忆里的检索步骤,这就是为什么有数十年历史的 IR,忽然来到了现代 AI 的中心。
08
它在我工作中的体现
09
60 秒回顾
倒排索引/BM25 的基础、稀疏对稠密的取景,以及混合搜索/RAG 的实务,反映了当前的信息检索参考 文献以及课程。