fedorthinks

速成课 · No. 32

计算机靠逐字比对文本,文字背后的意义对它而言是不可见的。embedding 修正了这一点——它把一段文本变成一串数字,变成空间中的一个点,并且放置得让意义相近的东西彼此靠近。于是「帮我找出与此类似的东西」一下子变成了「找出邻近的点」,而这是计算机瞬间就能解决的问题。它是搜索、RAG、推荐等许多东西背后那台安静的引擎。

20 个概念 · 每个都配一幅图 · 结尾附速查表

§ 01

整个领域都建立在一个优雅的想法上:如果你能把意义放进空间,你就能对它进行计算。领会了这一点,embedding 便不再神秘。

地图:七组共 20 个概念

一张地铁图:先看到整张网络,再一站一站地坐过去。

先是三个基础——为什么光有字符对计算机还不够、embedding 是什么、意义空间是什么。然后是六组,每章一组:相似度、vector database、semantic search、检索之外的用途、陷阱,以及如何用好它。

之后每个概念都得到同样的对待:它的英文名称(要记住——这就是术语)、一幅生活中的画面、一张图,以及一张带字段的卡片:是什么、原理、例子、坑和关联。

BasicsLexical gapEmbeddingVector spaceSimilaritySemantic similarityNearest neighboursCosine similarityVector databaseVector databaseANN searchEmbed once, query manySemantic searchSemantic searchSame model, same spaceRAG retrievalBeyond searchClustering / dedupRecommendationsClassify / anomaliesPitfallsModel mismatchSimilar ≠ relevantGarbage inUsing it wellModel choiceEmbedding evals
上面是基础,然后是六组——第 2–7 章依次讲它们。

Lexical Gap — 计算机看到的是字符,而非意义

一台机器能逐像素地分辨出两张照片不同,却完全不知道它们都画着一只狗——表面有差异,意义却对它不可见。

对计算机来说,文本只是字符。它能检查两个字符串是否完全相同,但它天生就没有这种意识:「car」和「automobile」是同一个意思,或者「the bank approved my loan」和「my mortgage was accepted」说的是同一件事。这道文字与意义之间的鸿沟就是 lexical gap。逐字匹配(exact match)会完全错过意义。要让软件处理文本所意味的东西,而不是它如何拼写,你需要一种把意义变成计算机能度量之物的方法。

“the bank approved my loan”“my mortgage was accepted”Exact match✗ different stringsMeaning✓ the same eventcomputers compare characters — the meaning stays invisible
对精确比对来说,这是两个不同的字符串。对人来说,是同一件事。
ConceptLexical Gap· 文字与意义之间的鸿沟
是什么
同一个意思可以用不同的词来说——而计算机只比较词。
例子

「Car」和「automobile」;「the bank approved my loan」和「my mortgage was accepted」。

坑
按精确词匹配的搜索,会悄悄漏掉所有换了说法的内容。
关联
这正是 embedding 要弥合的鸿沟。

Embedding — 文本变成一个点

一张地图,每个想法都有一个位置,意义相近的想法彼此靠近——「dog」紧挨着「puppy」,两者都远离「tax return」。

embedding 是一串数字——一个 vector——它代表一段文本的意义。它由 embedding model 产生:模型读入文本,输出它的坐标。相近的文本得到相近的数字——也就是邻近的点。原本对计算机不可见的意义,变成了一个位置——而位置正是软件能够比较、排序和检索的东西。

“puppy”textEmbedding modelreads the text[0.21, −0.83, 0.47, …]vector = list of numberscoordinates of the meaningsimilar text → nearby numbers → nearby point
文本 → embedding model → vector。vector 就是意义的坐标。
ConceptEmbedding· vector
是什么
一串数字(一个 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」。这个空间本身就是一张意义的地图。

Vector space (shown in 2D)dogpuppycattax returnspreadsheetinvoicefar = unrelatedclose = similar meaning
意义相近的聚在一起;无关的落在地图的另一头。
ConceptVector Space· embedding space
是什么
一个高维空间,每段文本在其中都有一个位置。
原理
模型摆放这些点,使得邻近就意味着意义相似。
例子
「dog / puppy / cat」这一团远离「spreadsheet / tax return」那一团。
关联
其中的距离就是 semantic similarity。

Meaning as Geometry — 一旦意义有了坐标,你就能对它进行计算

一旦每个城镇都成了地图上的一个点,「找出最近的城镇」就变成了简单的几何——地图把一个模糊的问题变成了可度量的问题。

这一步让其余一切成为可能:意义被表示成坐标之后,关于意义的模糊问题就变成了关于几何的精确问题。「哪些文档谈的是这个主题?」变成「哪些点靠近这个点?」「这个与那个相似吗?」变成「它们相距多远?」计算机无法理解意义,却能完美地度量距离——而 embedding 让它可以通过度量距离来回答关于意义的问题。这个转换就是全部的诀窍。

fuzzy question about meaningprecise question about geometryWhich docs are about this?Which points are near this one?Is A similar to B?How far apart are A and B?a computer can't understand meaning, but it measures distance perfectly
左边是关于意义的模糊问题;右边是同样的问题,变成了精确的几何。

计算机看到的是字符,而非意义。embedding 把一段文本变成空间中的一个点,放置得让意义相近的靠得很近——于是意义成了软件可以度量的东西。

§ 02

意义被放进空间之后,按意义比较两样东西,就变成度量它们的点相距多远。这个简单的想法,是 embedding 所做一切的引擎。

Semantic Similarity — 点靠得近,意义就相近

在地图上,两个相邻的城镇很容易往来;两个分处东西海岸的城镇则很远。地图上的远近,映照着现实中的远近。

由于 embedding 把相近的意义放在彼此附近,点之间的距离度量的是意义的差异:靠得近就相似,离得远就无关。这就是 semantic similarity。要问两段文本有多像,就把两者都做成 embedding,再度量它们 vector 之间的间隔——间隔小,说明它们意思几乎相同。一个你能计算的距离,替代了你原本无法衡量的相似度。

“get my money back”refund policyoffice hourssmall gap → similarbig gap → unrelateddistance between points = difference in meaning
查询「get my money back」靠近「refund policy」,远离「office hours」。
ConceptSemantic Similarity· 按意义的相似度
是什么
两段文本在意义上有多接近。
原理
把两者都做成 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、推荐,以及后面的大部分内容。一切都是「找出邻近的点」的某种变体。

query#1#2#3k = 3 nearest neighbours, ranked by closenesseverything else stays far
查询的周围:最近的三个点,按远近排序。其余的都很远。
ConceptNearest-Neighbour Search· k-NN
是什么
给定一个点,找出离它最近的 k 个点。
原理
计算相似度,按远近排序——前 k 个(top-k)就是答案。
例子
一个问题 → 意义上离它最近的三份文档。
坑
在数百万个点里逐一检查太慢——你需要 ANN。
关联
是 semantic search、推荐、分类的基础。

Cosine Similarity — 方向比原始距离更重要

两支指向同一方向的箭头是相像的,哪怕一支更长——重要的是它们指向哪里,而不是长度。

实际中,相似度通常用 vector 之间的夹角来度量,而不是直线距离——这种度量叫 cosine similarity。两个指向同一方向的 embedding 会被视为相似,即使其中一个「更长」,因为方向承载意义,而长度往往只反映文本长度之类的东西。使用 embedding 不需要懂这套数学,但值得知道:衡量「有多相似」的标准度量看的是方向,而不是原始距离。

A · short textB · long textC · other topicsmall angle→ similarbig angle → differentcosine similarity: direction counts, length doesn't
A 和 B 指向同一方向——尽管长度不同,仍然相似。C 指向别处。
TermCosine Similarity· 基于夹角的相似度
是什么
按 vector 之间的夹角而非长度来衡量的相似度。
为什么
方向承载意义;长度往往只反映文本长度。
例子
同一主题的一则短笔记和一篇长文章——夹角小,相似度高。
关联
semantic similarity 和 k-NN 的标准度量。

意义相近的靠得近,所以相似度变成了距离。核心操作是 nearest-neighbour search——找出最近的点——通常按方向来度量,也就是 cosine similarity。

§ 03

找最近邻,点少的时候很容易,成百万个点的时候就难了。vector database 就是为在大规模下快速完成这件事而造的引擎——embedding 实际的栖身之所。

Vector Database — 为最近邻搜索而建的存储

一座仓库,布置得让你给出任何一件物品,它都能立刻取来最相似的一百件——不是靠扫遍每个货架,而是靠它的摆放方式。

vector database 存储你的 embedding,并能快速回答「找出离这个点最近的点」这类查询,哪怕面对数百万个 vector。它专为 embedding 需要的那一个操作而造:按相似度做最近邻搜索。你把数据做一次 embedding,存下 vector,数据库就成了一个可搜索的意义索引。人们在 embedding 之上构建搜索、RAG 或推荐时,vector database 就是 vector 的住处,也是搜索发生的地方。

Appsearch · RAG · recsVector databasedoc-1[0.21, −0.83, …]+ metadatadoc-2[0.19, −0.80, …]+ metadatadoc-3[−0.66, 0.12, …]+ metadatadoc-4[0.05, 0.91, …]+ metadatamillions of rows + an index for nearest-neighbour searchstore vectorstop-k nearest
应用把 vector 存进数据库,再取回最近的 k 个。
ToolVector Database· vector store
是什么
一个存放 vector 并支持快速最近邻搜索的存储。
原理
保存 vector、id 和元数据;给定一个查询 vector,返回最近的 top-k。
例子
一百万个文档片段;一次查询在几毫秒内找出最近的五个。
关联
内部是 ANN 索引;上面跑着 semantic search 和 RAG。

ANN — 近似搜索让大规模变快

找最近的咖啡馆,你不会去量到地球上每一家咖啡馆的距离——你先看自己的街区。聪明的捷径胜过逐一检查。

把一次查询与每一个存储的 vector 都比一遍,在大规模下会慢得无法接受。所以 vector database 使用 **approximate nearest-neighbour(ANN)**搜索:巧妙的索引,不必逐一检查就能找到最近的点,用一点点精度换来巨大的速度提升。这就是为什么在数百万条目上做向量搜索只需几毫秒。你很少需要精确的最近邻——「非常近」和「最近」一样好用。

Exact search: compare with every vectorqueryslow at scaleANN: the index jumps to the right neighbourhoodquerymilliseconds≈ same answertrade a tiny bit of accuracy for a huge gain in speed
上:精确搜索要与所有向量比较。下:ANN 直接去往正确的街区。
ConceptANN· 近似最近邻
问题
把一次查询与数百万个 vector 逐一比较,太慢了。
思路
索引直接跳到空间中正确的区域,只检查那里。
例子
在数百万个条目上搜索——只需几毫秒。
代价
偶尔会漏掉真正的最近邻——得到的是「非常近」而不是「最近」。
关联
vector database 内部的引擎;加速 k-NN。

Embed Once, Query Many — 嵌入一次,搜索多次

书到馆时你给图书馆编目一次,此后每次查找都是瞬间的——缓慢的索引工作发生在前面,快速的查找则永远继续。

embedding 系统的形态是:先把数据嵌入一次并存下 vector(index time),然后每次查询都低成本地搜索(query time)。计算 embedding 是有成本的,但这笔成本在数据加入时支付,而不是每次搜索时。昂贵的一步是一次性的索引;每次查询的成本只是一个 vector 加一次快速查找。了解这种划分,有助于你推断 embedding 系统的成本和新鲜度。

INDEX TIME · once, when data arrives (costly)All documentsEmbedmany vectorsVector DBstoredQUERY TIME · every request (cheap)QueryEmbedone vectorSearchnearest neighbourspay the embedding cost once; every search after is fast
上:对所有文档做一次性索引。下:每次查询的低成本路径。
PracticeEmbed Once, Query Many· index time 与 query time
思路
数据加入时就预先嵌入;查询时只嵌入查询本身。
例子
文档在上传时做 embedding;用户的问题只是一个 vector 加一次查找。
坑
新增或改动的数据也必须做 embedding,否则搜索看不到它们。
关联

存放在 vector database 中;换模型 = 把所有数据重新嵌入(same model)。

vector database 存储 embedding 并快速找出最近邻,靠近似搜索(ANN)扩展到数百万条。把数据在前面嵌入一次;每次查询时低成本地搜索。

§ 05

搜索是显而易见的用途,但同样的「意义即坐标」思想,也在悄悄驱动着一大批其他任务。看看它们,就知道 embedding 为什么是如此基础的工具。

Clustering & Deduplication — 按意义分组

把一堆混杂的文档按主题分成几摞——把意思相近的放在一起,无需读每一个字。

因为意义相近的在空间里聚在一起,你可以自动按意义分组数据——这就是 clustering:把客户反馈归成主题、按话题整理文章、在一堆文本中找出天然的类别。同样的想法还能抓出重复和近似重复(deduplication)——两张用不同的话描述同一个问题的工单靠得很近,所以你能发现并合并它们。任何本质上是「这些里哪些意思相同?」的任务,都是 embedding 任务。

billinglogin issuesshippingnear-duplicate tickets→ mergegroups appear by meaning
工单自己落成几个主题;两个几乎相同的点就是要合并的重复项。
PatternClustering & Deduplication· 分组,近似重复检测
问题
一堆文本,不知道里面有哪些主题,也不知道哪些重复。
思路
靠近的点形成一组;几乎相同的点就是重复项。
例子
客户反馈自动归成主题;两张关于同一问题的工单被合并。
关联
与 semantic similarity 是同一种邻近关系。

Recommendations — 更多你喜欢的

一位店员,看到你买了什么,就把品味相近的人喜欢的其他东西指给你——输入相似度,输出建议。

推荐其实是伪装起来的 nearest-neighbour search:把物品(商品、文章、歌曲)做成 embedding,让相似的靠得近,「多推荐些类似的」就变成「找出离用户喜欢的东西最近的物品」。找出与查询相似的文档所用的同一套机制,也能找出与一次购买相似的商品。每当你看到「你可能还喜欢」,背后很可能就悄悄地有 embedding。

You boughthiking bootsNearest itemsin embedding spacetrail socksrain jacketbackpackliked item= the “query”“you may also like”
这次购买充当查询;它的最近邻就是推荐。
PatternRecommendations· 「你可能还喜欢」
问题
怎样建议用户还会想要的其他东西。
思路
被喜欢的物品就是查询;它的最近邻就是建议。
例子
买了登山靴 → 徒步袜、雨衣、背包。
关联
是 k-NN,只不过对象是商品而不是文档。

Classification & Anomaly Detection — 谁属于,谁不属于

一位保安,知道正常是什么样子,并注意到那个举止与众不同的人——离群者在空间里单独站着。

embedding 驱动着 classification——新的物品很可能与离它最近的、已有标签的物品属于同一类别——以及 anomaly detection——某个东西的 embedding 离一切正常的都很远,就是值得标记的离群点。发现欺诈、跑题内容或异常输入,都变成了「找出离那一团很远的东西」。反复出现的模式是一样的:把东西变成点,再就邻近和距离来推理。

Classificationspamnot spamnew item lands near “spam”→ label it spamAnomaly detectionnormaloutlierfar from everything normal → flag it
左:新物品落在「spam」旁边。右:离正常很远的点就是异常。
PatternClassification & Anomaly Detection· 按邻居打标签,离群点检测
分类
新物品取其最近的、已有标签的邻居的标签。
异常
离一切正常的都很远的点,是值得标记的离群点。
例子
一封邮件落在 spam 旁边 → 是 spam;一笔奇怪的交易 → 去审查。
关联
邻近是 k-NN;离那一团的距离是 similarity。

embedding 驱动的远不止搜索:clustering 和 deduplication 按意义分组,推荐找出相似的物品,classification 和 anomaly detection 则就邻近与距离来推理。

§ 06

embedding 很强大,却容易以悄悄毁掉结果的方式被误用。少数几个陷阱,就解释了大多数令人失望的 embedding 系统。

Model Mismatch — embedding 模型决定质量

一位只懂一半某门语言的译者,画出的是一张有缺陷的意义地图——之后的每一次比较都继承了这种扭曲。

一切都取决于生成 embedding 的那个模型。好模型能准确地放置意义,所以相似的东西确实靠得近;弱的或不匹配的模型(model mismatch)则造出一个扭曲的空间,其中的距离会误导你。在通用网络文本上训练的模型,可能对你的专门领域(法律、医疗、代码)嵌入得很差,因为它抓不住那里要紧的细微区别。

domain-fit modelbreachterminationliabilitylunch menulegal terms cluster; noise stays fargeneric / weak modelbreachterminationliabilitylunch menudistorted space → distances mislead
左:模型懂这个领域——法律术语聚在一起。右:通用模型——一切都散落各处。
PitfallModel Mismatch· 模型与领域不匹配
是什么
模型不理解你的领域,于是构建出一个扭曲的空间。
例子
通用模型几乎分不清法律或医疗术语,也分不清代码。
坑
不会报错——距离只是悄悄地在撒谎。
怎么做
审慎地选模型,并用你自己的数据检验。
关联
靠 model choice 和 embedding evals 来解决。

Similar ≠ Relevant — 相似不等于相关

两段文字可以谈同一个主题,却回答不同的问题——「如何取消」和「人们为什么取消」靠得很近,但只有一个是被问到的。

embedding 相似度捕捉的是主题上的接近,这通常是相关性的良好替代——但并不总是。两段文本可能在意义上相近,而只有一段真正回答了需求。这就是为什么原始的 embedding 搜索是强有力的第一遍,却不是最终结论:它找到的是关于正确事物的内容,这与有用的内容并不完全相同。于是有了 reranking 这样的改进——第二步,按结果回答问题的程度重新排序。

vector search · similarafter rerank · relevant1. Why users cancel2. Cancel your plan: steps3. Cancellation feesRerankerchecks the need1. Cancel your plan: steps2. Cancellation fees3. Why users cancelquery: “how do I cancel?” — near in topic ≠ answers the question
相似度搜索把「why users cancel」排第一。reranker 把真正回答问题的抬上来。
PitfallSimilar ≠ Relevant· reranking
是什么
「最近」意味着「最相似」,而不是「最有用」。
例子

对于「how do I cancel」,搜索返回了「why users cancel」——同一主题,答非所问。

坑
很容易过分相信排在最前的结果。
怎么做
把搜索当作第一遍;再加上 reranking 作为第二步。
关联
是 semantic similarity 和 semantic search 的一个局限。

Garbage In — 垃圾进,垃圾空间

如果你用草率、不一致的标签来归档文件,哪怕对文件柜做完美的搜索,得到的也是一团糟——索引的好坏,取决于放进去的是什么。

embedding 系统的质量,受限于你所嵌入内容的质量。糟糕的 chunking(来自 RAG 课程)、嘈杂的文本,或嵌入了错误的字段,都会造出这样一个空间:即使搜索完美,返回的结果也很差——距离是在垃圾上算出来的。所以大部分工作不在搜索,而在准备干净、切分得当的文本。在怪罪搜索之前,先修好输入。

Noisy inputbad chunks · wrong fieldEmbedperfect searchJunk resultsdistances over junkClean inputwell-chunked textEmbedsame searchGood resultsspace reflects meaningthe space inherits whatever you put in — fix inputs first
同样的搜索:嘈杂的输入得到垃圾,干净的输入得到好结果。
PitfallGarbage In· 输入糟糕,空间糟糕
是什么
进来的糟糕文本会毁掉整个空间。
例子
在句子中间被切断的片段、嘈杂的文本、嵌入了错误的字段。
坑
明明是输入坏了,人们却去怪搜索。
怎么做
先把文本清理干净、切分好,再做 embedding。
关联
直接冲击 RAG retrieval;靠 embedding evals 发现。

embedding 会以已知的方式令人失望:弱的或不匹配的模型会扭曲空间,「相似」并不总是「相关」,嘈杂的输入会让哪怕完美的搜索也返回垃圾。选好模型,清理好输入。

§ 07

用好 embedding,归结起来就是:选对模型、喂给它干净的数据,并度量这个空间是否真的反映了你在意的意义。

Model Choice — 为你的数据选 embedding 模型

你雇的是一位真正懂你所用方言的译者——通才可能恰恰漏掉对你最要紧的那些区别。

影响最大的选择是 embedding model,而合适的那一个取决于你的数据和任务。通用模型处理通用文本没问题;专门的领域可能需要一个理解该领域的模型,或在其上微调(fine-tune)过的模型。要考虑语言、领域、vector 大小和成本。别只是随手拿个默认的——要选那个能为你的意义构建出准确空间的模型,因为你将来做的每一次比较都建立在它之上。

LanguageDomainlegal · medical · codeVector sizeCostEmbedding modelchosen on purposeTest on your databefore you commit
语言、领域、vector 大小和成本 → 选定模型 → 在你自己的数据上测试。
PracticeModel Choice· 选择 embedding 模型
思路
按你的数据来挑模型,而不是直接拿默认的。
标准
语言、领域、vector 大小、成本。
例子
对于法律文本——选一个理解法律语言的模型,或在其上微调过的模型。
代价
以后换模型 = 把你所有的数据重新嵌入。
关联
解决 model mismatch;由 embedding evals 验证。

Embedding Evals — 度量空间是否反映真实的意义

你检验一张新地图的方法,是看你熟悉的、彼此相近的地方在图上是否真的挨在一起——如果不是,这张地图就是错的。

别假定 embedding 的配置行得通——要检查它。对于一组你知道应该相似的案例,验证搜索是否真的把它们排在最近的那些之中。这就是 embedding 版本的 evals(embedding evals):在你的真实数据上,这个空间是否把正确的东西放得很近?度量这一点,能在一个糟糕的模型、领域不匹配或 chunking 问题悄悄拖垮建在其上的一切之前,把它们揪出来。一个你没测试过的 embedding 空间只是猜测;一个你度量过的空间才是你能信任的工具。

Test casesquery → expected docSearchtop-kExpectedin top-k?✓ hit✗ missscore = share of hits on your real datacatches a bad model, a domain mismatch or a chunking problem early
测试用例「查询 → 期望的文档」;命中 top-k 的比例就是得分。
PracticeEmbedding Evals· retrieval 评估
思路
一组「查询 → 应该找到什么」的配对,检查它是否落在 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 度量整条链。

garbage inmodel mismatchClean textgood chunksEmbeddingmodelVectorspointsVector DB+ ANN indexNearest neighbourssimilarity = distance (cosine)querysimilar ≠ relevant→ rerankSemantic search→ RAGRecommendationssimilar itemsClustering+ dedupClassify+ anomaliesEmbedding evals measure the whole chain on your real data
文本 → 模型 → vector → 数据库 → 最近邻 → 各种用途。红色:出问题的地方。
在 embedding 之上构建之前
  • 任务是否关乎意义——相似、分组、检索——也就是 embedding 真正适合的?
  • embedding 模型对吗——适合你的数据、领域和语言?
  • 查询和文档是否由同一个模型嵌入,进入同一个空间?
  • 有没有 vector database,带适合你规模的近似搜索?
  • 你嵌入的文本是否干净、切分得当,而不是噪音?
  • 你是否度量过,在真实案例上这个空间把正确的东西放得很近?
你用好 embedding 的迹象
  • 当任务关乎意义而非精确匹配时,你才会想到 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 把意义变成坐标,于是相似度变成了距离。用好它的方式是:选对模型、一致地嵌入、喂入干净的文本,并度量这个空间真的把相似的东西放得很近。

速成课终 · 7 章 · 20 个概念

接下来是练习:取一小批你自己的文本,把它们嵌入,再检索——用你自己的话给它一个查询,看看最近的结果是否就是那些真正意思相同的。然后试一个非搜索的用途:按意义把它们 clustering,或找出近似重复。当一次检索找到了正确的文档、哪怕它与你的查询不共用任何关键词时,这个想法就在那一刻变得具体。但有一个想法要置于其余之上:embedding 把意义变成坐标,而一旦意义有了坐标,「找出相似的」便不过是几何。那一次转换,正是搜索、RAG、推荐,以及远不止于此的一切背后的引擎。