速成课 · No. 32
计算机靠逐字比对文本,文字背后的意义对它而言是不可见的。embedding 修正了这一点——它把一段文本变成一串数字,变成空间中的一个点,并且放置得让意义相近的东西彼此靠近。于是「帮我找出与此类似的东西」一下子变成了「找出邻近的点」,而这是计算机瞬间就能解决的问题。它是搜索、RAG、推荐等许多东西背后那台安静的引擎。
20 个概念 · 每个都配一幅图 · 结尾附速查表
整个领域都建立在一个优雅的想法上:如果你能把意义放进空间,你就能对它进行计算。领会了这一点,embedding 便不再神秘。
地图:七组共 20 个概念
一张地铁图:先看到整张网络,再一站一站地坐过去。
先是三个基础——为什么光有字符对计算机还不够、embedding 是什么、意义空间是什么。然后是六组,每章一组:相似度、vector database、semantic search、检索之外的用途、陷阱,以及如何用好它。
之后每个概念都得到同样的对待:它的英文名称(要记住——这就是术语)、一幅生活中的画面、一张图,以及一张带字段的卡片:是什么、原理、例子、坑和关联。
Lexical Gap — 计算机看到的是字符,而非意义
一台机器能逐像素地分辨出两张照片不同,却完全不知道它们都画着一只狗——表面有差异,意义却对它不可见。
对计算机来说,文本只是字符。它能检查两个字符串是否完全相同,但它天生就没有这种意识:「car」和「automobile」是同一个意思,或者「the bank approved my loan」和「my mortgage was accepted」说的是同一件事。这道文字与意义之间的鸿沟就是 lexical gap。逐字匹配(exact match)会完全错过意义。要让软件处理文本所意味的东西,而不是它如何拼写,你需要一种把意义变成计算机能度量之物的方法。
- 是什么
- 同一个意思可以用不同的词来说——而计算机只比较词。
- 例子
「Car」和「automobile」;「the bank approved my loan」和「my mortgage was accepted」。
- 坑
- 按精确词匹配的搜索,会悄悄漏掉所有换了说法的内容。
- 关联
- 这正是 embedding 要弥合的鸿沟。
Embedding — 文本变成一个点
一张地图,每个想法都有一个位置,意义相近的想法彼此靠近——「dog」紧挨着「puppy」,两者都远离「tax return」。
embedding 是一串数字——一个 vector——它代表一段文本的意义。它由 embedding model 产生:模型读入文本,输出它的坐标。相近的文本得到相近的数字——也就是邻近的点。原本对计算机不可见的意义,变成了一个位置——而位置正是软件能够比较、排序和检索的东西。
- 是什么
- 一串数字(一个 vector),代表文本的意义。
- 原理
- embedding model 读入文本并输出坐标;意义相近,数字相近。
- 例子
- 「puppy」→
[0.21, −0.83, 0.47, …]——紧挨着「dog」的 vector。 - 坑
- 整个空间的质量取决于构建它的那个模型。
- 关联
- 点位于 vector space 中;由 vector database 来存储。
Vector Space — 邻近即相似的空间
一张地图,「dog」「puppy」「cat」聚成一团在一个角落,「spreadsheet」和「tax return」在另一个角落。
所有 embedding 都存在于同一个高维的 vector space(也叫 embedding space)里。它有几百个维度,但这个想法在一张平面纸上也很容易看明白:意义相近的点靠得近,无关的点离得远。「Dog」和「puppy」靠在一起,两者又都远离「spreadsheet」。这个空间本身就是一张意义的地图。
- 是什么
- 一个高维空间,每段文本在其中都有一个位置。
- 原理
- 模型摆放这些点,使得邻近就意味着意义相似。
- 例子
- 「dog / puppy / cat」这一团远离「spreadsheet / tax return」那一团。
- 关联
- 其中的距离就是 semantic similarity。
Meaning as Geometry — 一旦意义有了坐标,你就能对它进行计算
一旦每个城镇都成了地图上的一个点,「找出最近的城镇」就变成了简单的几何——地图把一个模糊的问题变成了可度量的问题。
这一步让其余一切成为可能:意义被表示成坐标之后,关于意义的模糊问题就变成了关于几何的精确问题。「哪些文档谈的是这个主题?」变成「哪些点靠近这个点?」「这个与那个相似吗?」变成「它们相距多远?」计算机无法理解意义,却能完美地度量距离——而 embedding 让它可以通过度量距离来回答关于意义的问题。这个转换就是全部的诀窍。
计算机看到的是字符,而非意义。embedding 把一段文本变成空间中的一个点,放置得让意义相近的靠得很近——于是意义成了软件可以度量的东西。
意义被放进空间之后,按意义比较两样东西,就变成度量它们的点相距多远。这个简单的想法,是 embedding 所做一切的引擎。
Semantic Similarity — 点靠得近,意义就相近
在地图上,两个相邻的城镇很容易往来;两个分处东西海岸的城镇则很远。地图上的远近,映照着现实中的远近。
由于 embedding 把相近的意义放在彼此附近,点之间的距离度量的是意义的差异:靠得近就相似,离得远就无关。这就是 semantic similarity。要问两段文本有多像,就把两者都做成 embedding,再度量它们 vector 之间的间隔——间隔小,说明它们意思几乎相同。一个你能计算的距离,替代了你原本无法衡量的相似度。
- 是什么
- 两段文本在意义上有多接近。
- 原理
- 把两者都做成 embedding,再度量 vector 之间的距离。
- 例子
「How do I get my money back」靠近「refund policy」,尽管两者几乎没有共同的词。
- 坑
- 主题相似不等于有用——见 similar ≠ relevant。
- 关联
- 通常用 cosine similarity 来度量。
Nearest-Neighbour Search — 找出最近的点
一位图书管理员,你递给他一本书,他立刻就能指给你看与它最相像的那一排书架——不是按书名,而是按内容。
核心操作是 nearest-neighbour search(k-NN):给定一个点,找出离它最近的 k 个点。「给我看看与此类似的东西」变成「在空间里找出这一项的最近邻」。把一个问题、一件商品、一份文档交给系统,它就返回意义上最相似的那些,并按远近排序。这一个操作驱动着 semantic search、推荐,以及后面的大部分内容。一切都是「找出邻近的点」的某种变体。
- 是什么
- 给定一个点,找出离它最近的 k 个点。
- 原理
- 计算相似度,按远近排序——前 k 个(top-k)就是答案。
- 例子
- 一个问题 → 意义上离它最近的三份文档。
- 坑
- 在数百万个点里逐一检查太慢——你需要 ANN。
- 关联
- 是 semantic search、推荐、分类的基础。
Cosine Similarity — 方向比原始距离更重要
两支指向同一方向的箭头是相像的,哪怕一支更长——重要的是它们指向哪里,而不是长度。
实际中,相似度通常用 vector 之间的夹角来度量,而不是直线距离——这种度量叫 cosine similarity。两个指向同一方向的 embedding 会被视为相似,即使其中一个「更长」,因为方向承载意义,而长度往往只反映文本长度之类的东西。使用 embedding 不需要懂这套数学,但值得知道:衡量「有多相似」的标准度量看的是方向,而不是原始距离。
- 是什么
- 按 vector 之间的夹角而非长度来衡量的相似度。
- 为什么
- 方向承载意义;长度往往只反映文本长度。
- 例子
- 同一主题的一则短笔记和一篇长文章——夹角小,相似度高。
- 关联
- semantic similarity 和 k-NN 的标准度量。
意义相近的靠得近,所以相似度变成了距离。核心操作是 nearest-neighbour search——找出最近的点——通常按方向来度量,也就是 cosine similarity。
找最近邻,点少的时候很容易,成百万个点的时候就难了。vector database 就是为在大规模下快速完成这件事而造的引擎——embedding 实际的栖身之所。
Vector Database — 为最近邻搜索而建的存储
一座仓库,布置得让你给出任何一件物品,它都能立刻取来最相似的一百件——不是靠扫遍每个货架,而是靠它的摆放方式。
vector database 存储你的 embedding,并能快速回答「找出离这个点最近的点」这类查询,哪怕面对数百万个 vector。它专为 embedding 需要的那一个操作而造:按相似度做最近邻搜索。你把数据做一次 embedding,存下 vector,数据库就成了一个可搜索的意义索引。人们在 embedding 之上构建搜索、RAG 或推荐时,vector database 就是 vector 的住处,也是搜索发生的地方。
- 是什么
- 一个存放 vector 并支持快速最近邻搜索的存储。
- 原理
- 保存 vector、id 和元数据;给定一个查询 vector,返回最近的 top-k。
- 例子
- 一百万个文档片段;一次查询在几毫秒内找出最近的五个。
- 关联
- 内部是 ANN 索引;上面跑着 semantic search 和 RAG。
ANN — 近似搜索让大规模变快
找最近的咖啡馆,你不会去量到地球上每一家咖啡馆的距离——你先看自己的街区。聪明的捷径胜过逐一检查。
把一次查询与每一个存储的 vector 都比一遍,在大规模下会慢得无法接受。所以 vector database 使用 **approximate nearest-neighbour(ANN)**搜索:巧妙的索引,不必逐一检查就能找到最近的点,用一点点精度换来巨大的速度提升。这就是为什么在数百万条目上做向量搜索只需几毫秒。你很少需要精确的最近邻——「非常近」和「最近」一样好用。
- 问题
- 把一次查询与数百万个 vector 逐一比较,太慢了。
- 思路
- 索引直接跳到空间中正确的区域,只检查那里。
- 例子
- 在数百万个条目上搜索——只需几毫秒。
- 代价
- 偶尔会漏掉真正的最近邻——得到的是「非常近」而不是「最近」。
- 关联
- vector database 内部的引擎;加速 k-NN。
Embed Once, Query Many — 嵌入一次,搜索多次
书到馆时你给图书馆编目一次,此后每次查找都是瞬间的——缓慢的索引工作发生在前面,快速的查找则永远继续。
embedding 系统的形态是:先把数据嵌入一次并存下 vector(index time),然后每次查询都低成本地搜索(query time)。计算 embedding 是有成本的,但这笔成本在数据加入时支付,而不是每次搜索时。昂贵的一步是一次性的索引;每次查询的成本只是一个 vector 加一次快速查找。了解这种划分,有助于你推断 embedding 系统的成本和新鲜度。
- 思路
- 数据加入时就预先嵌入;查询时只嵌入查询本身。
- 例子
- 文档在上传时做 embedding;用户的问题只是一个 vector 加一次查找。
- 坑
- 新增或改动的数据也必须做 embedding,否则搜索看不到它们。
- 关联
存放在 vector database 中;换模型 = 把所有数据重新嵌入(same model)。
vector database 存储 embedding 并快速找出最近邻,靠近似搜索(ANN)扩展到数百万条。把数据在前面嵌入一次;每次查询时低成本地搜索。
embedding 最直接的用途,是能理解意义的搜索。值得把它看清楚,因为它既是最常见的应用,也是 RAG 的基础。
Semantic Search — 按意义搜索,而不是匹配字词
一个帮手,即使你用自己的话描述,他也能找到你想要的——「那个让饮料保持冰凉的东西」就把你带到冰箱前,不需要精确匹配。
semantic search 按意义而不是按匹配关键词(keyword search)来找结果。你把用户的查询做成 embedding,再搜索 vector 与之最近的文档片段。所以搜索「how do I get my money back」能找到标题为「refund policy」的页面,因为它们的意义靠得近——尽管几乎没有共同的词。keyword search 会漏掉这个;semantic search 就是为此而生。它找到的是你想表达的,而不只是你字面上输入的。
- 问题
- 用户用自己的话来写——关键词对不上。
- 思路
- 把查询做成 embedding,找出最近的文档 vector。
- 例子
- 「How do I get my money back」→「Refund policy」页面。
- 代价
- 需要一个模型、一个 vector database,并且换模型时要重新做 embedding。
- 关联
- 跑在 k-NN 和 vector database 上;是 RAG 里的 retrieval。
Same Model, Same Space — 查询要和数据用同样的方式嵌入
要比较两个测量值,必须用同一把尺——一个用英寸量、另一个用厘米量,数字就对不上。
要让搜索行得通,查询和存储的文档必须由同一个模型嵌入到同一个空间——否则它们的坐标没有可比性,「最近」也就毫无意义。你用某个模型嵌入文档,查询时就用同一个模型嵌入问题。这听起来显而易见,却是常见的 bug:混用 embedding 模型,或者换了模型却没有把一切重新嵌入,会悄悄地弄坏搜索,因为这些点已经不在同一个空间里了。
- 是什么
- 查询和文档由完全相同的模型嵌入。
- 为什么
- 不同的模型造出不同的空间;它们的坐标无法比较。
- 例子
- 你换了查询用的模型,却保留了旧的文档 vector——搜索悄悄坏了。
- 坑
- 不会报任何错;结果只是变差了。
- 关联
- 换模型 = 把所有数据重新嵌入(又一次 embed once)。
RAG Retrieval — 这是 RAG 底下的 retrieval
开卷考试:semantic search 就是你在作答之前找到该翻哪几页的方法——让有依据的回答成为可能的那次查找。
semantic search 是 retrieval-augmented generation(RAG 课程)中的 retrieval 步骤。当 RAG 系统依据你的文档作答时,embedding 就是它找出相关片段、放进模型上下文的方式。所以 RAG 系统的质量在很大程度上取决于它的 embedding 搜索质量——让正确的片段靠近查询,回答就有依据;让错误的片段靠近,模型就会依据垃圾作答。
- 是什么
- RAG 为模型的上下文找出片段的那一步。
- 原理
- 嵌入问题 → 找出最近的片段 → 它们进入 prompt。
- 例子
- 客服机器人从帮助文档里找出三段话,并依据它们作答。
- 坑
- 片段不对 → 模型信心十足地依据垃圾作答。
- 关联
- 它就是 semantic search;质量取决于 garbage in 和模型。
semantic search 按意义而非关键词来找——用与数据相同的方式嵌入查询,找出最近的 vector。它是 RAG 底下的 retrieval 引擎。
搜索是显而易见的用途,但同样的「意义即坐标」思想,也在悄悄驱动着一大批其他任务。看看它们,就知道 embedding 为什么是如此基础的工具。
Clustering & Deduplication — 按意义分组
把一堆混杂的文档按主题分成几摞——把意思相近的放在一起,无需读每一个字。
因为意义相近的在空间里聚在一起,你可以自动按意义分组数据——这就是 clustering:把客户反馈归成主题、按话题整理文章、在一堆文本中找出天然的类别。同样的想法还能抓出重复和近似重复(deduplication)——两张用不同的话描述同一个问题的工单靠得很近,所以你能发现并合并它们。任何本质上是「这些里哪些意思相同?」的任务,都是 embedding 任务。
- 问题
- 一堆文本,不知道里面有哪些主题,也不知道哪些重复。
- 思路
- 靠近的点形成一组;几乎相同的点就是重复项。
- 例子
- 客户反馈自动归成主题;两张关于同一问题的工单被合并。
- 关联
- 与 semantic similarity 是同一种邻近关系。
Recommendations — 更多你喜欢的
一位店员,看到你买了什么,就把品味相近的人喜欢的其他东西指给你——输入相似度,输出建议。
推荐其实是伪装起来的 nearest-neighbour search:把物品(商品、文章、歌曲)做成 embedding,让相似的靠得近,「多推荐些类似的」就变成「找出离用户喜欢的东西最近的物品」。找出与查询相似的文档所用的同一套机制,也能找出与一次购买相似的商品。每当你看到「你可能还喜欢」,背后很可能就悄悄地有 embedding。
- 问题
- 怎样建议用户还会想要的其他东西。
- 思路
- 被喜欢的物品就是查询;它的最近邻就是建议。
- 例子
- 买了登山靴 → 徒步袜、雨衣、背包。
- 关联
- 是 k-NN,只不过对象是商品而不是文档。
Classification & Anomaly Detection — 谁属于,谁不属于
一位保安,知道正常是什么样子,并注意到那个举止与众不同的人——离群者在空间里单独站着。
embedding 驱动着 classification——新的物品很可能与离它最近的、已有标签的物品属于同一类别——以及 anomaly detection——某个东西的 embedding 离一切正常的都很远,就是值得标记的离群点。发现欺诈、跑题内容或异常输入,都变成了「找出离那一团很远的东西」。反复出现的模式是一样的:把东西变成点,再就邻近和距离来推理。
- 分类
- 新物品取其最近的、已有标签的邻居的标签。
- 异常
- 离一切正常的都很远的点,是值得标记的离群点。
- 例子
- 一封邮件落在 spam 旁边 → 是 spam;一笔奇怪的交易 → 去审查。
- 关联
- 邻近是 k-NN;离那一团的距离是 similarity。
embedding 驱动的远不止搜索:clustering 和 deduplication 按意义分组,推荐找出相似的物品,classification 和 anomaly detection 则就邻近与距离来推理。
embedding 很强大,却容易以悄悄毁掉结果的方式被误用。少数几个陷阱,就解释了大多数令人失望的 embedding 系统。
Model Mismatch — embedding 模型决定质量
一位只懂一半某门语言的译者,画出的是一张有缺陷的意义地图——之后的每一次比较都继承了这种扭曲。
一切都取决于生成 embedding 的那个模型。好模型能准确地放置意义,所以相似的东西确实靠得近;弱的或不匹配的模型(model mismatch)则造出一个扭曲的空间,其中的距离会误导你。在通用网络文本上训练的模型,可能对你的专门领域(法律、医疗、代码)嵌入得很差,因为它抓不住那里要紧的细微区别。
- 是什么
- 模型不理解你的领域,于是构建出一个扭曲的空间。
- 例子
- 通用模型几乎分不清法律或医疗术语,也分不清代码。
- 坑
- 不会报错——距离只是悄悄地在撒谎。
- 怎么做
- 审慎地选模型,并用你自己的数据检验。
- 关联
- 靠 model choice 和 embedding evals 来解决。
Similar ≠ Relevant — 相似不等于相关
两段文字可以谈同一个主题,却回答不同的问题——「如何取消」和「人们为什么取消」靠得很近,但只有一个是被问到的。
embedding 相似度捕捉的是主题上的接近,这通常是相关性的良好替代——但并不总是。两段文本可能在意义上相近,而只有一段真正回答了需求。这就是为什么原始的 embedding 搜索是强有力的第一遍,却不是最终结论:它找到的是关于正确事物的内容,这与有用的内容并不完全相同。于是有了 reranking 这样的改进——第二步,按结果回答问题的程度重新排序。
- 是什么
- 「最近」意味着「最相似」,而不是「最有用」。
- 例子
对于「how do I cancel」,搜索返回了「why users cancel」——同一主题,答非所问。
- 坑
- 很容易过分相信排在最前的结果。
- 怎么做
- 把搜索当作第一遍;再加上 reranking 作为第二步。
- 关联
- 是 semantic similarity 和 semantic search 的一个局限。
Garbage In — 垃圾进,垃圾空间
如果你用草率、不一致的标签来归档文件,哪怕对文件柜做完美的搜索,得到的也是一团糟——索引的好坏,取决于放进去的是什么。
embedding 系统的质量,受限于你所嵌入内容的质量。糟糕的 chunking(来自 RAG 课程)、嘈杂的文本,或嵌入了错误的字段,都会造出这样一个空间:即使搜索完美,返回的结果也很差——距离是在垃圾上算出来的。所以大部分工作不在搜索,而在准备干净、切分得当的文本。在怪罪搜索之前,先修好输入。
- 是什么
- 进来的糟糕文本会毁掉整个空间。
- 例子
- 在句子中间被切断的片段、嘈杂的文本、嵌入了错误的字段。
- 坑
- 明明是输入坏了,人们却去怪搜索。
- 怎么做
- 先把文本清理干净、切分好,再做 embedding。
- 关联
- 直接冲击 RAG retrieval;靠 embedding evals 发现。
embedding 会以已知的方式令人失望:弱的或不匹配的模型会扭曲空间,「相似」并不总是「相关」,嘈杂的输入会让哪怕完美的搜索也返回垃圾。选好模型,清理好输入。
用好 embedding,归结起来就是:选对模型、喂给它干净的数据,并度量这个空间是否真的反映了你在意的意义。
Model Choice — 为你的数据选 embedding 模型
你雇的是一位真正懂你所用方言的译者——通才可能恰恰漏掉对你最要紧的那些区别。
影响最大的选择是 embedding model,而合适的那一个取决于你的数据和任务。通用模型处理通用文本没问题;专门的领域可能需要一个理解该领域的模型,或在其上微调(fine-tune)过的模型。要考虑语言、领域、vector 大小和成本。别只是随手拿个默认的——要选那个能为你的意义构建出准确空间的模型,因为你将来做的每一次比较都建立在它之上。
- 思路
- 按你的数据来挑模型,而不是直接拿默认的。
- 标准
- 语言、领域、vector 大小、成本。
- 例子
- 对于法律文本——选一个理解法律语言的模型,或在其上微调过的模型。
- 代价
- 以后换模型 = 把你所有的数据重新嵌入。
- 关联
- 解决 model mismatch;由 embedding evals 验证。
Embedding Evals — 度量空间是否反映真实的意义
你检验一张新地图的方法,是看你熟悉的、彼此相近的地方在图上是否真的挨在一起——如果不是,这张地图就是错的。
别假定 embedding 的配置行得通——要检查它。对于一组你知道应该相似的案例,验证搜索是否真的把它们排在最近的那些之中。这就是 embedding 版本的 evals(embedding evals):在你的真实数据上,这个空间是否把正确的东西放得很近?度量这一点,能在一个糟糕的模型、领域不匹配或 chunking 问题悄悄拖垮建在其上的一切之前,把它们揪出来。一个你没测试过的 embedding 空间只是猜测;一个你度量过的空间才是你能信任的工具。
- 思路
- 一组「查询 → 应该找到什么」的配对,检查它是否落在 top-k 之内。
- 例子
- 50 个真实的客服问题,各配上正确的文章——它出现在前 5 里的频率有多高?
- 能发现什么
- 糟糕的模型、领域不匹配、chunking 问题。
- 关联
- 检验 model choice、garbage in 和整条链路。
这些概念如何相连
一条传送带:文本进去,搜索、推荐和分组出来。每个陷阱都是传送带可能出错的地方。
整门课就是一条链。干净的文本进入 embedding model,输出 vector,它们存放在带 ANN 索引的 vector database 里。一次查询用 cosine similarity 找出它的最近邻——而 semantic search 和 RAG、推荐、clustering 和 classification 都建立在这一个操作之上。陷阱就在各个环节上:输入处是 garbage in,模型处是 model mismatch,搜索处是 similar ≠ relevant。而 embedding evals 度量整条链。
- 任务是否关乎意义——相似、分组、检索——也就是 embedding 真正适合的?
- embedding 模型对吗——适合你的数据、领域和语言?
- 查询和文档是否由同一个模型嵌入,进入同一个空间?
- 有没有 vector database,带适合你规模的近似搜索?
- 你嵌入的文本是否干净、切分得当,而不是噪音?
- 你是否度量过,在真实案例上这个空间把正确的东西放得很近?
- 当任务关乎意义而非精确匹配时,你才会想到 embedding。
- 你为你的数据选了 embedding 模型,并以同样的方式嵌入查询和文档。
- 你在大规模下使用带近似搜索的 vector database。
- 你嵌入的是干净、切分得当的文本,并把「相似」当作相关性的一个有力但不完美的替代。
- 你度量过这个空间反映的是真实的意义,而不是想当然。
速查表:全部 20 个概念
基础
- Lexical Gap词与意义
意思相同,用词不同;exact match 看不见。
- Embeddingvector
一串数字——文本意义的坐标。
- Vector Spaceembedding space
一张意义的地图:点靠得近就意味着相似;关于意义的问题变成关于距离的问题。
相似度
- Semantic Similarity按意义的相似度
意义相近 = vector 之间距离小。
- Nearest-Neighbour Searchk-NN
找出最近的 k 个点。核心操作。
- Cosine Similarity基于夹角
按夹角衡量相似度:看方向,不看长度。
vector database
- Vector Databasevector store
存储 vector,并快速找出最近的那些。
- ANN近似最近邻
用一丁点精度,换来数百万条数据上的毫秒级响应。
- Embed Once, Query Manyindex time / query time
前面付一次嵌入的成本;每次查询都低成本地搜索。
Semantic search
- Semantic Search按意义搜索
按意义找,而不是按关键词。
- Same Model, Same Space同一个模型
查询和文档用同一个模型,否则距离毫无意义。
- RAG RetrievalRAG 中的 retrieval
embedding 找出模型据以作答的那些片段。
检索之外
- Clustering & Deduplication分组,近似重复
靠近的点形成一个主题;几乎相同的是重复项。
- Recommendations「你可能还喜欢」
用户所喜欢之物的最近邻。
- Classification & Anomaly Detection标签与离群点
取最近邻的标签;离正常很远就是异常。
陷阱
- Model Mismatch模型不懂这个领域
一个扭曲的空间——距离在悄悄撒谎。
- Similar ≠ Relevantreranking
最近是最相似,而不是最有用。reranking 能帮上忙。
- Garbage In糟糕的输入
糟糕的片段和噪音会毁掉整个空间。
用好它
- Model Choice选择模型
语言、领域、vector 大小、成本——然后在你自己的数据上测试。
- Embedding Evalsretrieval 评估
「查询 → 期望结果」配对:命中 top-k 的比例。
embedding 把意义变成坐标,于是相似度变成了距离。用好它的方式是:选对模型、一致地嵌入、喂入干净的文本,并度量这个空间真的把相似的东西放得很近。