嵌入 Embedding
把文字变成向量,让「意思相近」变成「距离相近」
Embedding · 向量表示 · 词向量
- 是什么——把文本变成向量,为什么是「让意思近的靠得近」。
- 凭什么——向量的距离凭什么正好对应语义的远近,是巧合吗。
- 能干嘛——把语义变成可计算之后,解锁了哪些以前做不到的事。
- 两个「嵌入」——为什么它有时是模型的一层、有时又是一个独立模型。
- 两个坑——换模型要重建索引、对「否定」不敏感,各是怎么回事。
- 机器要比「意思」,先得把文本变成数字,且让「意思近」体现成「数字近」——这就是嵌入。(§1)
- 「距离 = 语义」不是设计的,是训练让相近靠拢、无关推开逼出来的。(§2)
- 于是判断两段话是否同义,只需算向量夹角;语义第一次变成可计算的量。(§3)
- 余弦相似度把向量方向关系变成可排序的数,但阈值只能由真实任务校准。(§4)
- 注意区分两个「嵌入」:Transformer 的输入嵌入层(每个 token)vs 独立的嵌入模型(整段文本)。(§5)
- 它最典型的用途是语义搜索:按意思而非字面找最近邻,这是 RAG 的心脏。(§6)
- 两个必知的坑:换模型要重建索引、对否定不敏感。(§7)
1什么是嵌入直觉
机器要判断两段话是否“意思相近”,必须先把文字转换成能够计算和比较的数值表示。嵌入(Embedding)就是完成这种转换的方法:输入是一段文本,模型先对文本进行编码,输出一个由几百到几千个数构成的连续向量。这个向量不是随意编号,而是文本在模型所学习到的语义空间中的坐标。
嵌入的关键约束是让语义关系体现为空间关系:意思越相近的文本,其向量距离通常越近;意思差异越大的文本,其向量通常相隔越远。于是,原本无法直接参与数学运算的“含义是否相近”,就能转化为“两个向量是否接近”这一可计算的问题。图 1 所示的语义地图中,相近内容会自然聚成簇。“怎么退货”和“商品返还流程”虽然没有共同关键词,却会因为表达同一种需求而落在相近位置,这正是嵌入相对于字面匹配的价值。
这张语义地图并不是所有模型共享的统一坐标系。每个嵌入模型都会形成自己的表示空间;同一段文本换用另一个模型后会得到不同坐标。因此,只有处在同一模型坐标系中的向量才适合直接比较,不能把不同嵌入模型生成的向量混在一起解释距离。
2凭什么「距离能等于语义」数学直觉
向量距离能够反映语义距离,并不是碰巧出现的现象,而是训练目标持续塑造出来的几何性质。训练数据包含大量文本样本对,其中有的意思相近,有的彼此无关。模型先把每段文本编码成向量,再根据样本之间已知的关系调整参数:相近样本的向量被拉近,无关样本的向量被推远。这个过程反复进行后,语义关系便被编码进整个向量空间的结构中。
因此,“靠近”不是人为给某个词指定一个固定坐标,而是模型在大量配对约束下学到关联的结果。两个相近样本一次次被要求缩短距离,最终落到邻近区域;无关样本则在训练压力下彼此分开。向量空间形成后,距离就可以作为语义相关程度的数值信号。
更早的词向量体现了同一思路的朴素版本:上下文相似的词,意思往往也相似。例如,“猫”和“狗”周围都可能出现“喂、养、可爱、宠物店”等词,它们面对的上下文高度重合,训练便会让两个词的向量逐渐靠近。无论使用样本对直接拉近或推远,还是从共同上下文中学习关联,“距离对应语义”都不是额外写死的一条规则,而是训练过程产生的结果。这个对应关系也受训练材料和训练目标约束:模型能表达的是它在这些约束中学到的语义结构。
3它把「语义」变成了可计算的东西数学
文本被表示为嵌入向量后,“两段话是否在讲同一件事”就能转化为数值比较。常用指标是余弦相似度:它不要求两段文本共享相同词汇,而是比较两个向量的方向。夹角越小,两个向量越同向,相似度就越高;夹角越大,方向差异越明显,相似度就越低。
相似度 = cos(θ) = (A·B) / (‖A‖ ‖B‖)
其中,A 和 B 是要比较的两个嵌入向量,θ 是它们之间的夹角,A·B 表示点积,‖A‖ 和 ‖B‖ 分别表示两个向量的长度。计算时,先用点积衡量两者方向上的一致程度,再除以两者长度的乘积。分母消除了向量长度的影响,因此余弦相似度关注的是方向,而不是向量本身有多长。
计算结果位于 −1 到 1 之间:越接近 1,表示方向越一致;接近 0,表示两个向量近乎垂直;接近 −1,表示方向相反。这个数只描述同一嵌入模型空间中的相似程度,不能拿不同模型生成的向量跨空间比较,也不能把相似度直接解释成答案正确的概率。
“国王 − 男人 + 女人 ≈ 女王”是向量语义的经典演示。这里不只是单个点的位置有意义,向量空间中的方向也承载关系:“从男人到女人”的变化方向可以作用到“国王”上,使结果靠近“女王”。这说明语义不仅被放进坐标,还被编码进空间的几何结构。
一旦语义可以用向量和相似度计算,检索与语义搜索、向量数据库、RAG 和聚类便有了共同底层:或者寻找距离当前向量最近的邻居,或者把彼此接近的向量归为一组。它们面对的具体任务不同,但都建立在“把语义变成可计算向量”这一能力上。
4手算一个余弦相似度数值例子
用二维玩具向量可以完整复算余弦相似度如何把“更同向”变成可排序的分数。设查询向量 q = [1, 0],候选“返还商品”的向量 a = [0.8, 0.6],候选“列车时刻”的向量 b = [−0.6, 0.8]。这三个向量的长度都为 1,因此余弦相似度公式中的长度乘积均为 1。
对候选 a,先计算点积:
q·a = 1×0.8 + 0×0.6 = 0.8
再除以长度乘积 1,得到 cos(q, a) = 0.8。这个较高的正值说明 a 与查询方向较为一致,因此“返还商品”在这两个候选中更相关。
对候选 b,同样计算:
q·b = 1×(−0.6) + 0×0.8 = −0.6
长度归一化后得到 cos(q, b) = −0.6。负值表示 b 与查询方向相反,因而“列车时刻”在模型空间中更不相关。按照分数从高到低排序,a 会排在 b 前面。图中的夹角关系与计算结果表达的是同一件事:a 与查询的夹角更小,b 与查询的夹角更大。
真实嵌入通常有数百维,但计算流程不变:输入一个查询向量和若干候选向量,先分别计算点积,再用各自长度归一化,输出每个候选的相似度并据此排序。余弦只比较方向,不比较长度;实际检索中常先把向量归一化为单位长度,此时点积就直接等于余弦相似度。
相似度高只说明两个对象在该模型的向量空间中接近,不保证候选在具体业务上一定正确。用于筛选结果的阈值需要根据真实查询、难负例和标签校准;不同模型塑造的空间不同,因此一个模型中的 0.8 与另一个模型中的 0.8 没有统一含义,阈值不能跨模型直接照搬。
| 候选 | 点积 | 余弦与结论 |
|---|---|---|
| a | 0.8 | 0.8,更相关 |
| b | −0.6 | −0.6,更不相关 |
5两个容易混的「嵌入」工程
“嵌入”常指两种不同的东西:Transformer 内部的输入嵌入层,以及 RAG 等检索场景使用的嵌入模型。它们都接收文本并产生向量,但所处位置、输出粒度和目标都不同,不能因为名称相同就互相替代。
Transformer 的输入嵌入层是模型架构的一部分。文本被拆成 token 后,这一层为每个 token 生成一个向量,再把这一组向量交给后续网络处理。它的输出不是整段文本的单个表示,而是与各 token 对应的一系列向量;它承担的是把离散 token 转换为模型内部可处理输入的职责。
检索语境中的嵌入模型则是一个独立训练的模型。它接收整段文本,将其中的信息汇总为一个向量,使不同文本的整体语义能够比较和检索。这里需要的是一段文本对应一个可用于相似度计算的表示,而不是仅取得每个 token 刚进入 Transformer 时的内部向量。
两者的差异可以顺着处理链理解:输入嵌入层执行“token → 每个 token 的向量 → 后续网络”,嵌入模型执行“整段文本 → 一个整段表示向量”。前者服务于 Transformer 内部的计算,后者服务于整段语义的比较。选型时应先确认任务需要逐 token 的模型输入表示,还是用于检索的整段文本表示;混用这两个概念,会直接导致模型选择和实现方式出错。
| Transformer 内部的输入嵌入层 | RAG 里说的「嵌入模型」 | |
|---|---|---|
| 是什么 | 模型架构的一部分 | 一个独立训练的模型 |
| 输出谁的向量 | 每个 token 的向量 | 整段文本的一个向量 |
| 目标 | 给 Transformer 喂输入(见其深读页) | 让整段话的语义可比较、可检索 |
6最典型的用武之地:语义搜索直觉工程
关键词搜索依赖字面匹配:查询中的词需要与文档中的词对得上。用户搜索“怎么退货”时,只写了“商品返还流程”的文档虽然含义相关,却可能因为没有共同关键词而无法命中。语义搜索要解决的正是这种漏检,它按照意思而不是字面形式寻找最近邻。
语义搜索的输入包括查询和文档库。系统先用同一个嵌入模型把查询与各篇文档转换为向量,再比较查询向量和文档向量的距离,输出离查询最近的文档。这样,“退货”和“返还流程”即使措辞不同,也可能因为向量在语义空间中相近而被召回。某篇文档被召回,表示模型判断它与查询的意思接近,而不是它一定包含查询原词。
这套机制也是检索增强生成(RAG)的关键环节。常见的向量检索型 RAG 在回答问题前,会用嵌入执行语义搜索,从知识库中找出与问题相关的材料,再把这些材料交给大模型生成回答;RAG 也可以采用关键词、混合或结构化等检索机制,并不都依赖嵌入。因果链是:嵌入表示查询与文档 → 相似度检索选出材料 → 大模型依据材料作答。嵌入质量会直接影响检索是否捞对内容,而检索结果又决定了回答阶段能获得什么依据,因此检索质量往往成为 RAG 效果的瓶颈。
语义相近只是模型空间中的判断,并不等于业务上必然正确。召回质量取决于嵌入能否准确表达当前领域中的语义关系;即使总体平均召回表现良好,也不能保证每一条结果都正确。检索、向量数据库和 RAG 会在这一基础上继续处理存储、近邻查找与生成等问题。
7实践里的两个坑工程
嵌入落地时有两类尤其容易导致结果失真的问题:混用不同模型的向量,以及把表面相似误当成语义一致。
更换嵌入模型后,必须重建整个向量索引。同一批文本经过不同模型,会被映射到不同的向量空间;A 模型生成的“猫”与 B 模型生成的“猫”即使来自相同文本,坐标也没有直接可比性。如果查询使用新模型、文档索引仍保留旧模型的向量,相似度计算面对的是两个不同坐标系,结果只会成为噪声。因此,换模型意味着所有文档都要重新嵌入,并用新向量重建索引,还要在同一套评测数据上重新验证。
否定表达则暴露了相似度本身的边界。“适合儿童”和“不适合儿童”只有一个否定词不同,大部分字面内容相同,向量可能非常接近,但实际意思正相反。此时高相似度反映了表面与主题上的接近,无法保证关键判断方向一致。对于这种少量文字就能翻转全意的困难负例,不能只依赖向量相似度,需要加入规则、结构化过滤或重排等手段兜底。
嵌入向量通常是高维的。“高维”只表示一个向量含有很多坐标,例如 768 维向量由 768 个数共同描述一段文本。维数增加后,样本间距离可能越来越接近,从而更难区分,这类现象常被概括为“维度灾难”。经过训练的嵌入并非随机散点,而会形成与训练任务相关的结构,因此高维距离仍可能有效;但这种有效性不是天然保证,必须用真实检索样本检验。
为了让人观察数百维向量的分布,可以通过降维把它们临时映射到二维或三维。降维图是一种有损投影,适合帮助发现可疑的簇和离群点,却不能证明原始高维空间中的检索质量。二维图上“聚成一团”不等于检索一定可靠,也不能替代面向任务的指标。
可靠验证应先建立带相关等级的查询—文档小金集,再报告 Recall@k、nDCG 或 MRR,并按否定表达、数字、专有名词、语言和文本长度分别切片检查。如果平均召回很好,而“不适合儿童”仍命中“适合儿童”,问题应定位为困难负例和排序边界,而不是被总体平均值掩盖。此时应增加结构化过滤或重排;换模型后则要在同一金集上复测,同时重新生成全部向量并重建索引。
8把整条因果链连起来综合
嵌入把“对象如何变成向量”和“向量如何产生检索结果”连接成一条完整因果链。起点是机器不能直接计算文本含义,因此要把文本编码为数字向量,并让语义接近体现为空间接近。这个映射不是随意编号:训练不断拉近意思相近的样本、推远无关样本,最终使语义关系成为向量空间的几何结构。
有了这种结构,两段文本的语义关系就能通过向量比较得到数值结果。余弦相似度把两个向量的方向关系转换为可排序分数:方向越一致,分数越高,通常表示模型认为语义越接近。这个分数只在同一模型空间中成立;用于业务筛选的阈值也不是固定常数,而要依据真实任务数据校准。
从这里到语义搜索只差一步。查询和文档由同一个嵌入模型转换为向量后,系统可以按相似度寻找查询的最近邻。匹配依据是语义空间中的接近程度,而不是有没有共同关键词,所以“怎么退货”能够召回“商品返还流程”。RAG 正是先借助这一步从知识库中取回相关材料,再把材料交给大模型作答。
这条链中的选择共同定义了“相似”:训练目标决定向量空间学到什么关系,嵌入模型决定文本落入哪个坐标系,相似度计算决定如何比较方向,任务数据决定怎样校准阈值。实现时还必须区分 Transformer 内部面向每个 token 的输入嵌入层,与面向整段文本生成单个向量的独立嵌入模型;语义检索需要的是后者。
链条的任何一环失配都会破坏最终结果。更换模型却沿用旧索引,相当于混合两个不可比的坐标系,因此必须重新嵌入全部文档并重建索引。遇到“适合儿童”和“不适合儿童”这类否定表达时,表面高度相似也可能掩盖含义反转,需要规则、过滤或重排补足单纯向量相似度的边界。归根结底,向量距离之所以能承载语义,是训练塑造了这种几何关系;没有共同关键词的文档之所以能被召回,是检索比较的是这种关系,而不是字面重合。
11概念依赖与延伸学习路线
理解嵌入需要几项基础概念。向量提供文本的数值表示形式,点积与夹角解释两个向量如何比较方向;Token 与分词说明文本如何被拆成模型能够接收的单位;神经网络则是模型学习映射关系的基础。具备这些先修后,语义坐标、余弦相似度以及训练塑造向量空间的过程就能连成一体。
嵌入的核心知识集中在四个关系上:文本如何落到语义坐标中,余弦相似度如何比较向量方向,Transformer 的输入嵌入层与独立嵌入模型为何不能混为一谈,以及语义搜索如何利用向量近邻按意思召回内容。这些关系共同解释了从文本输入到相似度分数,再到检索结果的完整路径。
与嵌入紧邻的延伸主题包括检索与语义搜索、向量数据库、RAG、聚类、维度灾难和降维。检索与语义搜索关注如何找到相近内容,向量数据库承接向量的存储与查找,RAG 把召回材料接入生成过程,聚类把相近向量归组;维度灾难与降维则帮助理解高维空间的困难,以及如何将高维结构有损地投影出来观察。
再向外延伸,多模态研究如何让不同模态进入共享嵌入空间,CLIP 是相邻的具体学习主题,知识图谱则提供另一条组织和关联知识的路径。沿着“先修基础 → 嵌入核心 → 近邻应用与高维问题 → 跨模态和知识组织”这一层级学习,可以保持各概念之间的依赖关系清晰。
| 学习层级 | 涉及概念 |
|---|---|
| 先修 | 向量、点积与夹角、Token 与分词、神经网络 |
| 本页核心 | 语义坐标、余弦相似度、嵌入层 vs 嵌入模型、语义搜索 |
| 紧邻延伸 | 检索与语义搜索、向量数据库、RAG、聚类、维度灾难、降维 |
| 更远 | 多模态(跨模态共享嵌入空间)、CLIP、知识图谱 |
- Mikolov et al., Efficient Estimation of Word Representations in Vector Space:分布式词向量及其训练目标。
- Reimers & Gurevych, Sentence-BERT:句向量、余弦相似度与语义检索。
- Radford et al., Learning Transferable Visual Models From Natural Language Supervision:跨模态图文嵌入与对比学习。