做产品 PMaker
空格的键盘
把每句话放到一张地图上,找答案就变成了「找最近的邻居」 原文 怎么申请退款 退货流程是什么 订单多久发货 今天天气怎么样 向量模型 一串数字(这里简化成两维) [0.82, 0.31] [0.79, 0.35] [0.61, 0.44] [0.12, 0.90] 语义空间 怎么申请退款 ← 你问的 退货流程是什么 订单多久发货 今天天气怎么样 线越短=意思越近。检索就是量一遍距离,取最近的几个 真实向量是几百到几千维,画不出来 —— 但「近=像」这个直觉是对的

向量把「意思」变成了坐标。有了坐标,「哪段话和这个问题最像」就成了一道可以计算的距离题。

向量与语义相似度

整套知识库、语义搜索、推荐相关内容,底下都是同一个东西:把文字变成坐标,然后比距离。这一节讲清楚这个坐标是怎么回事。

你会遇到的现象
  • 知识库能答对「怎么退款」,但用户问「我不想要了」它就找不到
  • 工程师说「做个向量库就行」,你不确定这句话覆盖了多少工作
  • 搜索结果看起来都挺相关,但就是没有真正要的那一条

它解决了什么

先看老办法的毛病。传统的关键词搜索是字面匹配:用户搜「退款」,系统去找含有「退款」两个字的文档。

问题是,同一个意思有太多说法。「退款」「退钱」「不想要了」「申请退回」——字面上毫无重合,意思却是一回事。关键词搜索对这些一律抓瞎。

向量解决的就是这件事。它不看字面,看意思。「我不想要了」和「怎么申请退款」在字面上没有一个字重合,但转成坐标之后,两个点靠得很近。

所以那张图右边的语义空间,可以理解成一张按意思排布的地图:讲退款的挤在一块,讲物流的挤在另一块,讲天气的在很远的地方。检索就是把用户的问题也放上这张图,然后看谁离它最近。

怎么变成坐标的

负责这件事的是一个专门的模型,叫向量模型(embedding model)。它和你熟悉的文本模型是两类不同的东西:文本模型文字进文字出,向量模型文字进、一串数字出。

这串数字通常有几百到几千个,也就是几百到几千维。图上画成两维只是为了看得见——但「距离近=意思像」这个直觉是对的,几千维空间里也是同一回事。

这些坐标不是人定的,是模型从海量文本里训练出来的:经常出现在相似语境里的词句,坐标就被拉得近。所以它反映的是语料里的用法习惯,不是什么客观真理——这一点后面会成为一个坑。

算距离的方法通常叫余弦相似度,你不需要懂它的数学。只要知道:它输出一个 0 到 1 之间的数,越大越像。

好消息是这一层很便宜。向量模型是六类模型里最便宜的,通常比文本模型低一两个数量级。所以「把全部文档向量化」这件事,成本上几乎不是问题。

产品上意味着什么

三件事值得知道。

一、这是一次性的预处理。你的文档要先切成小段、逐段算出向量、存进向量数据库。这是离线做的,用户提问时只需要给问题算一次向量,然后比距离——所以查询很快。

二、文档更新要重新算。改了一篇文档,对应的向量得重新生成。这件事很容易在项目里被忘掉,结果就是知识库答的还是三个月前的旧内容。更新机制必须在设计阶段就想好。

三、换向量模型意味着全部重算。不同向量模型产出的坐标系不通用,混着用等于在两张不同的地图上量距离,结果毫无意义。所以选型要慎重,换一次成本不小。

几个要知道的限制

向量很好用,但它有几个内建的局限,提前知道能少踩不少坑。

一、它算的是「像不像」,不是「对不对」。这是最要紧的一条,下一节专门讲。一段和问题很像的文字,未必包含答案;一段能回答问题的文字,未必和问题字面相像。

二、它对否定不敏感。「支持退款」和「不支持退款」在向量空间里往往靠得很近——因为它们的用词几乎一样。这在合规、政策类的知识库里是个真风险。

三、精确匹配反而是弱项。订单号、产品型号、法条编号这类东西,向量检索经常不如老式的关键词搜索准。这也是实际系统要混合使用两种检索的原因。

四、长文本会被稀释。一段很长的文字压成一个坐标,等于把里面所有主题平均了一下,结果哪个主题都不突出。所以切分怎么做,直接决定检索准不准。

很好用,但有四个内建的局限,提前知道能少踩不少坑 ① 算的是「像不像」,不是「对不对」 一段和问题很像的文字,未必包含答案; 一段能回答问题的文字,未必字面相像。 这是整套 RAG 的效果天花板所在 ② 对否定不敏感 支持退款 ≈ 不支持退款 用词几乎一样,坐标就靠得很近 合规、政策类知识库里的真风险 ③ 精确匹配反而是弱项 订单号、产品型号、法条编号这类, 向量经常不如老式关键词搜索准。 所以实际系统要两种检索混着用 ④ 长文本会被稀释 一段长文压成一个坐标,等于把里面 所有主题平均了一下,哪个都不突出。 切分怎么做,直接决定检索准不准
还有两条工程上的硬约束:文档更新要重新算向量(最容易在项目里被忘掉,结果知识库答的还是三个月前的内容),以及换向量模型意味着全部重算——不同模型的坐标系不通用,混着用等于在两张地图上量距离。