跳到主要内容

让它别瞎说 — 按意思搜索,和「先查再答」这套流水线

这一章讲三件事: 「按意思搜索」和「按字面搜索」到底差在哪儿(有一个非常干净的对比实验); 为什么治「它一本正经地编」的办法不是修模型,而是把材料先查出来喂进去; 以及这套流水线里最被低估、也最该由你自己调的那个参数是什么。 在全书链条里,这一章是「不训练」这条路的终点—— 走完这一章还不够,才该考虑第 08、09 章的训练。 需要先读第 02、04 章,其余生词都在当场解释。

1. 先看现象:同一个查询,两种搜法,第一名完全不同

这一节回答:「按意思搜索」这五个字,到底是不是营销话术。

书做了一个特别干净的对比。语料是一部电影的百科条目,拆成 15 个句子。 查询是:「那部电影的科学有多严谨?」(原文 how precise was the science)

搜法排第一的句子为什么
按字面找「这是一部 2014 年的史诗科幻电影……」因为它含有「科学」这个词1
按意思找「许多天文学家称赞它的科学准确性和对理论天体物理学的呈现」这句话完美回答了问题2

关键在这里:排第一的那句话里,根本没有「严谨」这个词。

书自己下的结论是(关键词搜索就是「按字面比对词」的那种老搜法): 如果我们只进行关键词搜索,这是不可能实现的, 因为最靠前的结果并不包含查询中的相同关键词2

而按字面找的那个第一名,书的评价是:它实际上并没有回答问题, 尽管它与查询共享了「science」这个词1

这就是「按意思搜索」的全部含义:按意思找,不是按字面找。

这件事的分量,从两家搜索引擎的表态就能看出来。 书开篇引了两句:谷歌把这类模型用进搜索时称其代表了**「搜索史上最大的飞跃之一」; 微软必应说这带来了「过去一年中最大的质量提升」**3

2. 顶层全景:三道工序,顺序不能反

你的问题

│ ①【粗筛】把问题变成一串数,在几百万段材料里找离得最近的那几十上百段
│ 要的是「别漏」。快,但只看方向像不像

一批候选段落(几十到上百)

│ ②【重排】把问题和每一段并排交给另一个模型,逐对打分,重新排名次
│ 要的是「别歪」。慢得多,但准得多

排在最前面的几段

│ ③【照着答】把这几段连同原问题一起交给生成模型,要求它据此作答
│ 要的是「说人话」,而且最好把出处标出来

一个有据可查的回答

图说:**三道工序各管一件事,而且分工不能换。**
① 快但粗,所以要多捞一点;② 慢但准,所以只处理 ① 捞上来的那一批;
③ 根本不负责「找得对不对」——它只负责把给它的材料说清楚。

「检索」就是「从一大堆材料里把有关的找出来」,和日常说的「搜索」是一回事。 这一章后面凡是出现「检索」,都可以直接读成「搜」——这是书用的词,我们沿用。

「稠密」就是「一段话变成几百个数,每个数都不是零、密密麻麻」—— 它是相对「稀疏」说的:老办法把一段话表示成「词表里哪些词出现了」, 几万个格子里绝大多数是零,那才叫稀疏。 本章后面一律说「按意思找」,不再用「稠密」这个词。

书给这三类系统的正式叫法依次是:稠密检索(就是「按意思找」)、重排序、检索增强生成(RAG)4

3. 核心原理

3.1 第一道工序:把「搜索」换成「找最近的点」

它解决什么问题: 用户的说法和材料里的说法对不上,按字面根本搜不到。

它怎么做:一个换问题的手法,和第 04 章那招零样本同源。

把库里每一段材料都变成一串数,想象成空间里的一个点
│ 意思相近的段落,点就挨得近(第 02 章)

用户提问时,把问题也变成一串数,投到同一个空间里


找离这个点最近的几个点 —— 它们就是搜索结果

图说:**「搜索」这个问题被换成了「找最近邻」。**
换完之后,它就变成了一个纯粹的几何问题,和文字本身没关系了。

书的原话:这些表示可以被想象为空间中的点,距离近意味着它们所代表的文本是相似的5

实操上要先做一件事:建一个「索引」——

索引在这里就是一个为「快速找最近的点」而专门组织过的数据结构。 而最近邻就是「离得最近的那几个点」。 书说这种结构经过优化,即使有非常多的点,也能快速检索最近邻6

规模决定用什么工具,书给了一条很实用的分档7:

你有多少段材料用什么
几千到几万直接一个一个算距离就行,书说这是合理的做法
到百万级近似最近邻的库——能在毫秒级从大规模索引中检索结果
需要频繁增删、还要按条件过滤向量数据库(一种专门存这些「一串数」、并且天生就会找最近邻的数据库)

「近似」这两个字是有代价的:它不保证找到的一定是最近的那几个,只保证「几乎总是」。 换来的是速度。

向量数据库比普通库多的那两样,书说得很具体: 允许你添加或删除向量而无需重建索引,以及提供过滤搜索—— 比如「只在 2023 年之后的文档里找」8

3.2 按意思找的四条软肋,以及一条必须记住的结论

这一节是这一章最实用的一节。 书很老实地列了这套办法不灵的地方。

软肋一:库里根本没有答案,它也照样给你三个结果

书直接演示了这件事:问「月球的质量是多少」,而语料是一部电影的条目。 结果照样返回三条,还带着距离9——因为「找最近的点」永远找得到最近的点。

书给的应对是设阈值: 定一个最大相关距离,超过就不返回10。 它还补了一条很实在的产品建议: 许多搜索系统向用户呈现他们能获得的最佳信息,由用户自行判断是否相关; 而追踪用户是否点击了某个结果,可以帮助改进未来版本的搜索系统10

软肋二:用户要精确匹配某个短语时,它反而不如老办法

书的判断很干脆:用户想要精确匹配某个特定短语时,这种情况非常适合关键词匹配11

由此得出这一章最该抄下来的一条结论:

建议使用混合搜索(同时包含按意思找和按字面找),而不是仅仅依赖按意思找。11

产品编号、人名、报错信息、法条编号——这些东西的正确搜法永远是按字面。

软肋三:换个领域就不灵

书的原话:在非其训练领域的数据上也难以良好运行。 它举的例子是:在互联网和百科数据上训练的检索模型, 部署在法律文本上(而没有足够的法律数据作为训练集的一部分),效果就不会那么好12

这条软肋直通第 08 章:治法是拿自己领域的数据去微调那个嵌入模型。

软肋四(最容易被忽略):问题和答案本来就长得不像

书提了一个很根本的问题,而且自己回答了:

查询与其最佳结果是否在语义上相似?并不总是如此。 这就是为什么语言模型需要经过问答对的训练才能更好地进行检索。13

这一条值得停下来想:「巴黎的人口是多少?」和「巴黎有 210 万常住居民」这两句话, 从字面到句式都不像。通用嵌入模型是按「意思相近」训的,不是按「这是那个问题的答案」训的。

所以「检索用的嵌入模型」和「判断两段话像不像的嵌入模型」不是同一种东西。 前者要用问答对专门训过。这是第 08 章的内容。

3.3 最被低估的一处设定:分块

这一节回答:一篇长文档,该怎么切开再存进去。

分块就是把一篇长文档切成若干小段,每一小段各自变成一串数、各自建索引。 「块」指的就是切出来的那一小段。

为什么非切不可? 书给的理由是硬约束: 语言模型的上下文大小有限,我们无法向模型输入超过其支持长度的超长文本14

但更实在的理由在后面:一整篇文档压成一个向量,信息全糊掉了。

书给了两条路15:

路线具体做法书的评价
一篇文档一个向量只嵌开头或标题,其余不管对快速搭个演示有用,但「大量信息会被排除在索引之外,无法被搜索到」
切块后各自嵌入,再把这些向量取平均会产生一个高度压缩的向量,丢失文档中的大量信息
一篇文档多个向量切块,每块单独嵌入,索引的是块更好——「全面覆盖了文本,并且向量倾向于捕获文本中的个别概念」

书给的理由一句话就够: 很多时候,搜索是针对文章中的某条特定信息, 如果该概念拥有自己的向量,则能更好地被捕获16

具体怎么切?书给了三档,可以直接抄17:

切法问题
一句一块可能过于细粒度,向量无法捕获足够的上下文
一段一块段落短的话很好;否则 3 到 8 句一块更合适
重叠切块让相邻的块共享一部分文字,以免一句话被切在两块之间

还有一条独立于切法的技巧,书特意提了:把文档的标题也加进每一块里17—— 因为某些块的很大一部分含义来自周围的文本

书最后留了一句预测,今天看仍然准: 随着这个领域发展,预计会出现更多的分块策略, 其中一些甚至可能使用大语言模型来动态地把文本拆分为有意义的块18

判断(我们的,不是书里的): 分块是这套系统里唯一一个你必须自己调、 而且没有人能替你调的设定。 模型可以换现成的,索引可以用现成的,重排可以调接口——只有「多长算一块」 取决于你的文档长什么样、用户问什么样的问题。 如果错,会错在: 如果模型的上下文长到可以把整篇文档都塞进去, 而且它在长输入里不丢信息,那分块的重要性会下降—— 但第 03 章那条「信息放中段更容易被漏掉」的实测说明,这个前提今天还不成立。

3.4 第二道工序:重排,以及它凭什么更准

它解决什么问题: 第一道工序快,但只看「方向像不像」,排得不够准。

它怎么做:把问题和每一段并排放进同一个模型,让模型同时看两边再打分。

为什么这样更准? 因为第一道工序里,问题和材料是各自单独变成数的—— 它们从头到尾没有见过面,最后只是比了一下方向。 而重排是把两段文字拼在一起送进模型,模型能看着两边做判断。

书给这种结构起的名字叫交叉编码器(「交叉」指的就是两段文字交叉着一起看),并说明: 查询和候选结果同时呈现给模型,允许模型在分配相关性分数之前同时查看这两段文本19

书把这件事的本质点破了,这句很有价值:

这种将搜索表述为相关性评分的方式,本质上归结为一个分类问题。 给定这些输入,模型输出一个 0-1 之间的分数,0 表示不相关,1 表示高度相关。20

换句话说:重排根本不是「搜索」,它是第 04 章那个分类问题换了个马甲。

代价是什么? 每一对都要跑一次模型。 所以它绝不能用在全库上,只能用在第一道工序捞上来的那一批上。 书把第一道工序正式称为第一阶段,并说通常先筛出一百或一千个结果再交给重排21

一个能看见效果的实验

书把第 1 节那个失败的按字面搜索,后面接了一道重排22:

按字面找,取前 10 条 (第一名是那句没回答问题的「2014 年科幻电影」)


把这 10 条逐条和问题一起打分,重新排序


新的第一名变成了:「加州理工的理论物理学家、2017 年诺贝尔物理学奖得主
Kip Thorne 担任监制、科学顾问,还写了一本配套书」

图说:**同样的 10 条候选,同样没有换检索方式,只是重新排了个序。**

书自己也说这是个玩具例子,但它给了一个真实的数字: 在一项多语言的公开检索考卷上,加上重排可以把分数从 36.5 提升到 62.823

这个提升幅度值得记住:它比这一章任何一个模型换代带来的提升都大。

另外,重排在实操上门槛很低。 书特意说明用托管的重排接口时 我们不需要训练或调优它,传进查询和候选文本就有结果24

3.5 怎么给一个搜索系统打分

这一节回答:你怎么知道改动之后是变好了还是变差了。

先说要准备什么。 书列了三样,缺一不可25:

要素是什么
材料库你要搜的那堆文档
一组查询有代表性的真实问题
相关性判断每个查询对应哪些文档算「相关」——这一项必须人工来定

核心的困难在这里:光数「前三条里有几条相关」是不够的。

书用一个例子讲清了这一点:两个系统在前三条里都只有一条相关, 但一个把它排在第一位,另一个排在第三位26直觉上前者明显更好,可数量一样。

所以要一个能反映「排在第几位」的算法。 书用的叫平均精确率均值,英文缩写 MAP。 拆开只有三步27:

① 从上往下扫结果,每遇到一个相关的,就算一次「到这个位置为止的精确率」
(第 1 位就命中 → 1/1 = 1.0;第 3 位才命中 → 1/3 ≈ 0.33)
│ 精确率的定义见第 04 章:找到的东西里有几成是对的

② 把这个查询的这些值取平均 → 这个查询的「平均精确率」


③ 把所有查询的「平均精确率」再取一次平均 → MAP

图说:**同样命中一条,排在第一位得 1.0,排在第三位只有 0.33 左右。**
排名靠前这件事,就是这样被折算成分数的。

书用上面那个例子给了具体数:排第一位的系统得 1,排第三位的系统得 0.328

书还顺手吐槽了一句这个名字,顺便解释了它为什么这么拗口: 为什么同一个「取平均」的动作既叫 mean 又叫 average? 这很可能是一个美学上的选择,因为 MAP 比「average average precision」听起来更好29

书还提了另一个常用指标,并点出了它和 MAP 的唯一区别: 它叫 nDCG,区别在于文档的相关性不是二元的—— 某个文档可以被标记为比另一个文档更相关30,而不是只有「相关/不相关」两档。

3.6 第三道工序:把材料喂进去,让它照着说

它解决什么问题: 生成模型会非常自信地答错。

书对这个问题的描述很准: 用户开始向模型提问并指望得到事实性答案, 而它们的答案并不总是正确或最新的;这个问题逐渐被称为模型的「幻觉」问题31

治法不是修模型,是换个问法。 书的做法: 在搜索流程的末端添加一个大语言模型,把问题和检索到的最相关文档一起呈现给它, 要求它根据搜索结果提供的上下文来回答问题32

书给这一步起了一个很准的名字:有据生成—— 理由是提供给模型的检索到的相关信息建立了一个特定的上下文,把它锚定在我们感兴趣的领域中33

整套东西的正式名字就是 RAG(检索增强生成)。 书给它的定位有三条34:

  1. 减少幻觉;
  2. 提高事实准确性;
  3. 把生成模型锚定在特定数据集上——书特别点出这实现了「与我的数据聊天」这类场景, 让公司能把模型锚定在内部公司数据或某个感兴趣的数据源上。

补充(不在书里): 书引了这个名字的出处论文但没有讲它。 那篇论文的做法是把两种记忆拼起来:一种是训练时固化在模型参数里的, 另一种是外挂的、可以随时替换的知识库(它用的是维基百科的向量索引)。 结果是在三项开放域问答任务上达到当时最好水平,而且生成的语言 比只靠参数的模型更具体、更多样、更符合事实。 来源:《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》 (Lewis 等,2020-05-22)https://arxiv.org/abs/2005.11401(查阅于 2026-08-25)

「外挂的那一半可以随时替换」这句话,是这套做法今天如此流行的根本原因: 换知识不用重训模型。

书还展示了一个很重要的功能:引用。 它用的托管接口在回答的同时返回了引用信息—— 标出回答里的哪几个字来自哪一份文档35

而用本地小模型复现同一件事时,书老实说明了代价: 我们将失去片段引用的能力,而且较小的本地模型的效果不如较大的托管模型36

判断(我们的,不是书里的): 「能不能标出处」应该被当成选型时的一等指标, 而不是锦上添花的功能。 理由是:这套系统的全部价值主张是「答案有据可查」; 不能标出处的版本,只是把幻觉从「凭空编」变成了「看着材料编」,而你没法发现。 如果错,会错在: 如果你的场景本身容忍不精确(比如内部头脑风暴), 那出处就是多余的开销。判据是:这个答案错了,会不会有人当真去做事。

3.7 再往上五种改法,而它们指向同一个方向

书列了五种进阶做法,一层比一层把更多决定权交给模型37:

做法解决什么例子
查询重写(就是「先让模型把用户那段话改写成一句能搜的」)用户的话又长又乱,直接拿去搜搜不到一大段关于「明天要交论文、喜欢企鹅但还是写海豚吧」的絮叨,被重写成「海豚生活在哪里」38
多查询一个问题其实要查两次「对比英伟达 2020 和 2023 的财务表现」→ 拆成两条查询各查一次39
多跳后一步的查询依赖前一步的结果「2023 年最大的汽车制造商有哪些?它们各自生产电动车吗?」→ 先查出三家公司,再分别查这三家40
查询路由材料不在同一个地方人力资源的问题去查内部文档系统,客户数据的问题去查客户系统41
交给模型自己决定上面全部合起来让模型自己判断要不要搜、搜几次、搜哪儿42

书自己点破了这五条的共同方向,这句归纳很好:

以上一系列增强功能正逐步将越来越多的责任委托给大语言模型,以解决越来越复杂的问题…… 大语言模型的这种新特性开始变得越来越像一个与世界交互的智能体。 数据源现在也可以抽象为工具。43

换句话说:这一章的终点,和第 05 章那一层是同一个地方。

还有一条很实在的门槛,书写在了这一节末尾: 并非所有大语言模型都具备这里提到的能力—— 在书写作时,可能只有最大的托管模型才能尝试这种行为44

另外,第一条「查询重写」还有一个顺带的好处,书提了一句: 让重写器同时判断要不要搜——如果它能直接自信地回答,就不用搜45这条能省下大量不必要的检索。

3.8 怎么评这套系统:书说了实话

RAG 的评测比搜索难得多,因为要评的东西不止一个。 书很干脆地说:如何评估这类模型仍然是一个持续发展的领域46

它引了一篇做人工评估的论文,给了四个维度47:

维度问什么
流畅性生成的文本读起来顺不顺、连不连贯
感知效用这个答案有没有帮上忙、信息够不够
引用召回率它关于外部世界说的那些话里,有几成是被引用完全支持的
引用精确率它给出的那些引用里,有几成真的支持了它对应的说法

最后两行是这套评测的精髓:它们分别防两种作弊—— 「说了但没根据」和「贴了引用但引用对不上」。

人工评最准,但太贵。 所以有了自动化的替代: 让一个有能力的大语言模型充当裁判(书直接用了「大语言模型即裁判」这个叫法), 从不同维度给不同的生成结果打分48

书还点名了一个专门做这件事的软件库,以及它另外评的两个指标48:

  • 忠实度——答案是否与提供的上下文一致(有没有超出材料乱说);
  • 答案相关性——答案与问题的相关程度(有没有答非所问)。

4. 作者的判断与证据

说法属于哪一类说明
按意思找能找到不含关键词的正确答案有实测对照同一查询、同一语料,两种搜法的第一名完全不同12
加重排能把分数从 36.5 提到 62.8有外部实测书引用的是一项公开多语言检索考卷的结果,不是它自己跑的23
「查询和它的最佳答案未必语义相似」作者主动指出的根本困难而且给了原因和出路:需要用问答对训练13
「按意思找在陌生领域会退化」断言,有例子无数据法律文本那个例子是假设性的,书没有跑12
「建议用混合搜索」建议理由充分(精确短语匹配),但书没有给混合的具体权重或做法
「切块比整篇一个向量好」有机制解释理由是「搜索常常针对文章里的某一条具体信息」16
3 到 8 句一块经验值书没有做过对比实验
重排本质上是分类问题洞见这是全章最有价值的一句归纳20
RAG 的评测方法书自己说「仍在发展中」老实,但也意味着这一节给不了可执行方案46

这一章有一处很值得表扬的诚实: 书在演示本地小模型版本时, 主动说明了会失去引用能力、效果不如托管模型36,而不是含糊过去。

5. 边界与局限

第一,书里的例子规模小到不构成验证。 15 个句子、一个查询。 书自己也说了那是玩具示例23方法论可信,分数不可信。

第二,混合搜索只有建议,没有做法。 书说了「建议同时用两种」,但怎么把两个分数合起来、权重怎么定、 两边各取多少条,一个字没讲。 这是真实系统里最先要解决的问题之一。

第三,分块的建议全是经验值,没有一条实验。 「3 到 8 句」「让相邻块重叠」「把标题加进去」——都合理,都没数据。

第四,评测这一节等于承认了没有答案。 四个维度、两个指标、一个库的名字——但没有一条「你该怎么给自己的系统建评测集」的可执行建议。 这和第 04 章、第 09 章是同一个缺口,而且在这一章最要命, 因为 RAG 系统的失败往往是安静的:答案读起来很顺,只是不对。

第五,长上下文的出现改变了这套东西的定位,但不是取消它。 书写在上下文只有几千词元的年代,分块是被硬约束逼出来的。今天上下文长得多。

补充(不在书里): 但「能塞进去」不等于「找得到」—— 同一条关键信息放在长输入的中段时,模型明显更容易漏掉。 来源:《Lost in the Middle: How Language Models Use Long Contexts》 (Liu、Lin、Hewitt、Paranjape、Bevilacqua、Petroni、Liang,2023-07-06) https://arxiv.org/abs/2307.03172(查阅于 2026-08-25)

判断(我们的,不是书里的): 长上下文把检索从「省钱手段」变成了「质量手段」。 以前你必须检索,因为塞不下;现在你应该检索,因为塞得下也未必找得到,而且贵。 这个转变的实际后果是:评价检索的标准从「召回率够不够」变成了 「能不能把最相关的那两三段放到最显眼的位置」。 如果错,会错在: 如果新一代模型在超长输入里不再有位置偏好、成本也降到可忽略, 那检索就退化成纯粹的成本优化。判据是:同一份材料,全塞 vs 只塞检索到的三段, 各问五十遍,看正确率差多少。

6. 可带走的

  1. 「按意思找」的真实含义:正确答案里可以一个查询词都没有;
  2. 按字面找并没有被淘汰:产品编号、人名、报错信息、法条编号,永远该按字面找;
  3. 所以标准做法是混合搜索,两种一起用,不是二选一;
  4. 搜索被换成了「找最近的点」——换完之后它就是个几何问题,和文字无关了;
  5. 规模决定工具:几万条直接算距离,百万级用近似最近邻库,要频繁增删和过滤用向量数据库;
  6. 「近似」不保证找到最近的,只保证几乎总是——这是速度的价钱;
  7. 它永远会返回结果,哪怕库里根本没有答案;所以要设距离阈值,或者把判断权交给用户;
  8. 查询和它的正确答案本来就长得不像——所以检索用的嵌入模型要用问答对专门训过(第 08 章);
  9. 分块是这套系统里唯一必须你自己调的设定:一句太碎、整篇太糊,3 到 8 句一块、相邻块重叠、标题塞进每一块;
  10. 重排本质上是一个分类问题,它把问题和候选拼在一起看,所以更准;
  11. 重排必须放在第二阶段,只处理粗筛捞上来的那一批;书引的实测提升幅度是 36.5 → 62.8;
  12. 三道工序分工不能换:粗筛管别漏,重排管别歪,生成只管说清楚——它不负责找得对不对;
  13. RAG 之所以流行,根本原因是「换知识不用重训模型」;
  14. 「能不能标出处」是选型的一等指标,不是锦上添花;
  15. 给搜索打分要三样:材料库、一组真实查询、人工定的相关性判断;
  16. 打分要看排名位置:同样命中一条,排第一得 1.0,排第三只有 0.33 左右;
  17. 评 RAG 要看四个维度,其中两个专防作弊:「说了但没根据」和「贴了引用但对不上」;
  18. RAG 的失败是安静的:答案读起来很顺,只是不对。这是它最危险的地方。

7. 原文地图

主题原书章原文位置
两家搜索引擎的表态语义搜索与检索增强生成text/10-fm.txt:5(搜「搜索史上最大的飞跃之一」)
语义搜索的定义语义搜索与检索增强生成text/10-fm.txt:7(搜「按含义搜索」)
幻觉与 RAG 的动机语义搜索与检索增强生成text/10-fm.txt:9(搜「幻觉」)
三大类系统语义搜索与检索增强生成text/10-fm.txt:13(搜「稠密检索、重排序和检索增强生成」) · text/10-fm.txt:15(搜「最近邻」) · text/10-fm.txt:19(搜「重排序语言模型」)
嵌入是空间中的点语义搜索与检索增强生成text/10-fm.txt:37(搜「想象为空间中的点」)
阈值与用户点击语义搜索与检索增强生成text/10-fm.txt:47(搜「最大相似度分数阈值」) · text/10-fm.txt:311(搜「用户是否点击了某个结果」)
查询与答案未必语义相似语义搜索与检索增强生成text/10-fm.txt:49(搜「并不总是如此」)
星际穿越那个对照实验语义搜索与检索增强生成text/10-fm.txt:195(搜「how precise was the science」) · text/10-fm.txt:210(搜「scientific accuracy」) · text/10-fm.txt:221(搜「这是不可能实现的」)
按字面搜索的失败语义搜索与检索增强生成text/10-fm.txt:223(搜「BM25」) · text/10-fm.txt:286(搜「并没有回答问题」)
库里没答案也照样返回语义搜索与检索增强生成text/10-fm.txt:290(搜「如果文本中没有包含答案」)
精确短语该用关键词、建议混合搜索语义搜索与检索增强生成text/10-fm.txt:313(搜「混合搜索」)
换领域会退化语义搜索与检索增强生成text/10-fm.txt:315(搜「法律文本」)
为什么要分块语义搜索与检索增强生成text/10-fm.txt:317(搜「对长文本进行分块的最佳方式」) · text/10-fm.txt:321(搜「上下文大小有限」)
一篇一个向量的两种做法及其代价语义搜索与检索增强生成text/10-fm.txt:331(搜「快速构建演示原型」) · text/10-fm.txt:333(搜「高度压缩的向量」)
一篇多个向量更好语义搜索与检索增强生成text/10-fm.txt:343(搜「全面覆盖了文本」) · text/10-fm.txt:335(搜「某条特定信息」)
三档切法与重叠、加标题语义搜索与检索增强生成text/10-fm.txt:349(搜「过于细粒度」) · text/10-fm.txt:351(搜「3-8个句子」) · text/10-fm.txt:353(搜「块之间可以重叠」)
未来可能用模型来动态分块语义搜索与检索增强生成text/10-fm.txt:355(搜「动态地将文本拆分为有意义的块」)
索引、规模分档、向量数据库语义搜索与检索增强生成text/10-fm.txt:150(搜「索引存储嵌入」) · text/10-fm.txt:361(搜「几千或几万个向量」) · text/10-fm.txt:365(搜「毫秒级」) · text/10-fm.txt:367(搜「无需重建索引」)
微调嵌入模型用于检索语义搜索与检索增强生成text/10-fm.txt:371(搜「查询和相关结果组成的训练数据」) · text/10-fm.txt:387(搜「使相关查询更靠近文档」)
重排是搜索流程的第二阶段语义搜索与检索增强生成text/10-fm.txt:393(搜「两阶段搜索系统的第二阶段」) · text/10-fm.txt:420(搜「第一阶段」)
重排接口不需要训练语义搜索与检索增强生成text/10-fm.txt:399(搜「不需要训练或调优它」)
重排把失败的关键词搜索救回来语义搜索与检索增强生成text/10-fm.txt:483(搜「恰当地将第二个结果提升」)
交叉编码器与「本质上是分类问题」语义搜索与检索增强生成text/10-fm.txt:491(搜「交叉编码器」) · text/10-fm.txt:495(搜「归结为一个分类问题」)
评测三要素语义搜索与检索增强生成text/10-fm.txt:501(搜「平均精确率均值」) · text/10-fm.txt:503(搜「相关性判断」)
位置为什么重要语义搜索与检索增强生成text/10-fm.txt:515(搜「出现在不同的位置上」) · text/10-fm.txt:521(搜「系统1对该查询的结果得分为1」)
精确率的逐位算法语义搜索与检索增强生成text/10-fm.txt:527(搜「位置1的精确率为1.0」)
MAP 与那句吐槽语义搜索与检索增强生成text/10-fm.txt:541(搜「这个指标称为平均精确率均值」) · text/10-fm.txt:545(搜「美学上的选择」)
nDCG 与二元相关性语义搜索与检索增强生成text/10-fm.txt:549(搜「归一化折损累积增益」)
RAG 的定位三条语义搜索与检索增强生成text/10-fm.txt:553(搜「面向知识密集型」) · text/10-fm.txt:557(搜「与我的数据聊天」)
有据生成语义搜索与检索增强生成text/10-fm.txt:563(搜「在搜索流程的末端添加一个大语言模型」) · text/10-fm.txt:565(搜「这个生成步骤被称为有据生成」)
引用信息语义搜索与检索增强生成text/10-fm.txt:598(搜「The film generated a worldwide gross of over $677 million」) · text/10-fm.txt:601(搜「ChatCitation」)
本地小模型版本的代价语义搜索与检索增强生成text/10-fm.txt:607(搜「失去片段引用的能力」)
五种进阶做法语义搜索与检索增强生成text/10-fm.txt:720(搜「这就是为什么使用大语言模型将查询重写为有助于检索步骤获取正确信息的查询是一个好主意」) · text/10-fm.txt:722(搜「企鹅」) · text/10-fm.txt:734(搜「英伟达2020年」) · text/10-fm.txt:746(搜「最大的汽车制造商」) · text/10-fm.txt:756(搜「查询路由」)
「越来越像一个智能体」语义搜索与检索增强生成text/10-fm.txt:762(搜「与世界交互的智能体」) · text/10-fm.txt:764(搜「并非所有大语言模型都具备」)
让重写器判断要不要搜语义搜索与检索增强生成text/10-fm.txt:740(搜「判断是否需要搜索」)
RAG 评测的四个维度与两个指标语义搜索与检索增强生成text/10-fm.txt:768(搜「仍然是一个持续发展的领域」) · text/10-fm.txt:772(搜「引用召回率」) · text/10-fm.txt:774(搜「忠实度」)

Footnotes

  1. 出处:「语义搜索与检索增强生成」第 281 段(text/10-fm.txt:281,搜「epic science fiction film」)与第 286 段(text/10-fm.txt:286,搜「并没有回答问题」)。用的关键词搜索算法叫 BM25,书称它是「领先的词汇搜索方法之一」(第 223 段,text/10-fm.txt:223,搜「BM25」)。 2 3

  2. 出处:「语义搜索与检索增强生成」第 210 段(text/10-fm.txt:210,搜「scientific accuracy」)与第 221 段(text/10-fm.txt:221,搜「这是不可能实现的」)。查询原文是「how precise was the science」(第 195 段,text/10-fm.txt:195,搜「how precise was the science」)。 2 3

  3. 出处:「语义搜索与检索增强生成」第 5 段(text/10-fm.txt:5,搜「搜索史上最大的飞跃之一」)。这两句都是书转述的两家公司的官方说法,不是书自己的评价。

  4. 出处:「语义搜索与检索增强生成」第 13 段(text/10-fm.txt:13,搜「稠密检索、重排序和检索增强生成」)、第 15 段(text/10-fm.txt:15,搜「最近邻」)与第 19 段(text/10-fm.txt:19,搜「重排序语言模型」)。「稠密 vs 稀疏」的对照解释是我们补的,书没有展开这个词的来历。

  5. 出处:「语义搜索与检索增强生成」第 37 段(text/10-fm.txt:37,搜「想象为空间中的点」)。

  6. 出处:「语义搜索与检索增强生成」第 150 段(text/10-fm.txt:150,搜「索引存储嵌入」)。

  7. 出处:「语义搜索与检索增强生成」第 361 段(text/10-fm.txt:361,搜「几千或几万个向量」)与第 365 段(text/10-fm.txt:365,搜「毫秒级」)。书点名的两个近似最近邻库是 Annoy 和 FAISS,并说其中一些还能用显卡加速、扩展到集群。

  8. 出处:「语义搜索与检索增强生成」第 367 段(text/10-fm.txt:367,搜「无需重建索引」)。书点名的两个例子是 Weaviate 和 Pinecone。

  9. 出处:「语义搜索与检索增强生成」第 290 段(text/10-fm.txt:290,搜「如果文本中没有包含答案」)。书演示的查询是「What is the mass of the moon?」,而语料是电影条目。

  10. 出处:「语义搜索与检索增强生成」第 311 段(text/10-fm.txt:311,搜「用户是否点击了某个结果」)与第 47 段(text/10-fm.txt:47,搜「最大相似度分数阈值」)。 2

  11. 出处:「语义搜索与检索增强生成」第 313 段(text/10-fm.txt:313,搜「混合搜索」)。 2

  12. 出处:「语义搜索与检索增强生成」第 315 段(text/10-fm.txt:315,搜「法律文本」)。 2

  13. 出处:「语义搜索与检索增强生成」第 49 段(text/10-fm.txt:49,搜「并不总是如此」)。书把这件事的解法指向了原书第 10 章,即我们的第 08 章。 2

  14. 出处:「语义搜索与检索增强生成」第 321 段(text/10-fm.txt:321,搜「上下文大小有限」)。

  15. 出处:「语义搜索与检索增强生成」第 331 段(text/10-fm.txt:331,搜「快速构建演示原型」)、第 333 段(text/10-fm.txt:333,搜「高度压缩的向量」)与第 343 段(text/10-fm.txt:343,搜「全面覆盖了文本」)。

  16. 出处:「语义搜索与检索增强生成」第 335 段(text/10-fm.txt:335,搜「某条特定信息」)。 2

  17. 出处:「语义搜索与检索增强生成」第 349 段(text/10-fm.txt:349,搜「过于细粒度」)、第 351 段(text/10-fm.txt:351,搜「3-8个句子」)与第 353 段(text/10-fm.txt:353,搜「块之间可以重叠」)。加标题那条也在第 353 段。 2

  18. 出处:「语义搜索与检索增强生成」第 355 段(text/10-fm.txt:355,搜「动态地将文本拆分为有意义的块」)。

  19. 出处:「语义搜索与检索增强生成」第 491 段(text/10-fm.txt:491,搜「交叉编码器」)。书还给了这种做法的一个常见名字 monoBERT,以及描述它的论文《使用 BERT 的多阶段文档排序》。

  20. 出处:「语义搜索与检索增强生成」第 495 段(text/10-fm.txt:495,搜「归结为一个分类问题」)。原文自己也把这一点连回了讲分类的那一章。 2

  21. 出处:「语义搜索与检索增强生成」第 420 段(text/10-fm.txt:420,搜「第一阶段」)。原文还说第一阶段可以是关键词搜索、按意思找,「或者更好的是——同时使用两者的混合搜索」(第 422 段,text/10-fm.txt:422,搜「同时使用两者的混合搜索」)。

  22. 出处:「语义搜索与检索增强生成」第 483 段(text/10-fm.txt:483,搜「恰当地将第二个结果提升」)。做法是先用关键词搜索取前 10 条,再交给重排取前 3 条。

  23. 出处:「语义搜索与检索增强生成」第 483 段(text/10-fm.txt:483,搜「36.5」)。书用的原话是「这是一个玩具示例」,而 36.5 → 62.8 是它引用的一项多语言检索基准(MIRACL)上的结果,衡量指标是 nDCG@10。 2 3

  24. 出处:「语义搜索与检索增强生成」第 399 段(text/10-fm.txt:399,搜「不需要训练或调优它」)。

  25. 出处:「语义搜索与检索增强生成」第 503 段(text/10-fm.txt:503,搜「相关性判断」)。

  26. 出处:「语义搜索与检索增强生成」第 515 段(text/10-fm.txt:515,搜「出现在不同的位置上」)。

  27. 出处:「语义搜索与检索增强生成」第 527 段(text/10-fm.txt:527,搜「位置1的精确率为1.0」)与第 541 段(text/10-fm.txt:541,搜「这个指标称为平均精确率均值」)。

  28. 出处:「语义搜索与检索增强生成」第 521 段(text/10-fm.txt:521,搜「系统1对该查询的结果得分为1」)。

  29. 出处:「语义搜索与检索增强生成」第 545 段(text/10-fm.txt:545,搜「美学上的选择」)。

  30. 出处:「语义搜索与检索增强生成」第 549 段(text/10-fm.txt:549,搜「归一化折损累积增益」)。

  31. 出处:「语义搜索与检索增强生成」第 9 段(text/10-fm.txt:9,搜「幻觉」)。

  32. 出处:「语义搜索与检索增强生成」第 563 段(text/10-fm.txt:563,搜「在搜索流程的末端添加一个大语言模型」)。

  33. 出处:「语义搜索与检索增强生成」第 565 段(text/10-fm.txt:565,搜「这个生成步骤被称为有据生成」)。

  34. 出处:「语义搜索与检索增强生成」第 25 段(text/10-fm.txt:25,搜「锚定在特定数据集上」)与第 557 段(text/10-fm.txt:557,搜「与我的数据聊天」)。书还点名了几个把这套东西做进产品的搜索引擎(第 559 段,text/10-fm.txt:559,搜「Perplexity」)。

  35. 出处:「语义搜索与检索增强生成」第 598 段(text/10-fm.txt:598,搜「The film generated a worldwide gross of over $677 million」)与第 601 段(text/10-fm.txt:601,搜「ChatCitation」)。

  36. 出处:「语义搜索与检索增强生成」第 607 段(text/10-fm.txt:607,搜「失去片段引用的能力」)。 2

  37. 出处:「语义搜索与检索增强生成」第 714 段(text/10-fm.txt:714,搜「高级检索增强生成技术」)。

  38. 出处:「语义搜索与检索增强生成」第 722 段(text/10-fm.txt:722,搜「企鹅」)与第 726 段(text/10-fm.txt:726,搜「海豚生活在哪里」)。

  39. 出处:「语义搜索与检索增强生成」第 734 段(text/10-fm.txt:734,搜「英伟达2020年」)。

  40. 出处:「语义搜索与检索增强生成」第 746 段(text/10-fm.txt:746,搜「最大的汽车制造商」)与第 752 段(text/10-fm.txt:752,搜「丰田、大众和现代」)。

  41. 出处:「语义搜索与检索增强生成」第 756 段(text/10-fm.txt:756,搜「查询路由」)。

  42. 出处:「语义搜索与检索增强生成」第 760 段(text/10-fm.txt:760,搜「智能体式检索增强生成」)。

  43. 出处:「语义搜索与检索增强生成」第 762 段(text/10-fm.txt:762,搜「与世界交互的智能体」)。原文还举了一个很好的例子:既然能搜索某个内部文档系统,同样也应该能往它里面发布内容。

  44. 出处:「语义搜索与检索增强生成」第 764 段(text/10-fm.txt:764,搜「并非所有大语言模型都具备」)。

  45. 出处:「语义搜索与检索增强生成」第 740 段(text/10-fm.txt:740,搜「判断是否需要搜索」)。

  46. 出处:「语义搜索与检索增强生成」第 768 段(text/10-fm.txt:768,搜「仍然是一个持续发展的领域」)。 2

  47. 出处:「语义搜索与检索增强生成」第 772 段(text/10-fm.txt:772,搜「引用召回率」)。书引的是《评估生成式搜索引擎的可验证性》(2023)那篇做人工评估的论文。

  48. 出处:「语义搜索与检索增强生成」第 772 段(text/10-fm.txt:772,搜「大语言模型即裁判」)与第 774 段(text/10-fm.txt:774,搜「忠实度」)。书点名的那个库叫 Ragas。 2