什么是 Embedding(向量嵌入)?为什么把文字变成一串数字之后,就能计算两段话的语义相似度?
向量检索
答案要点 Embedding(向量嵌入)是把文字转成一串固定长度数字(向量)的技术,让机器能“计算”语义 核心性质:意思越接近的文本,向量在空间中的位置越近——这是一切语义检索的基础 语义相似度最常用余弦相似度来算:看两个向量方向的夹角,值越接近 1 越相似 向量由专门训练的嵌入模型生成(如 BGE 系列),不是随便编码 它是 RAG 检索、语义搜索、推荐系统共同的地基 核心概念 Embedding(向量嵌入)是指用模型把一段文字映射成一个固定长度的数字向量(比如 1024 个小数),使得语义相近的文字在向量空间中的位置也相近。可以把它想象成给每段话发一个“语义坐标”:谈论同一件事的句子,坐标就挨得近。 比如“我想退货”和“这个商品我不要了”,字面上几乎没有重复的字,关键词搜索会认为它们无关;但嵌入模型理解语义,会把两句话映射到相近位置——这正是语义搜索超越关键词搜索的原因。 语义相似度怎么算 用同一个嵌入模型,分别把两段文本转成向量 A 和 B 计算余弦相似度:cos(A, B) = A·B / (|A| × |B|),本质是看两个向量方向的夹角有多小 结果越接近 1,说明方向越一致、语义越像;接近 0 则基本无关 也可以用点积、欧氏距离等度量,原理相通:把“语义像不像”的模糊问题,变成“数字算一算”的精确问题。注意:两段文本必须用同一个模型编码,不同模型的向量空间互不兼容。 在 RAG 里的角色 | 阶段 | Embedding 做什么 | |---|---| | 离线建库 | 把知识库里每个文本块转成向量,存入向量数据库 | | 在线检索 | 把用户问题也转成向量,找出距离最近的 Top-K 个块 | 没有 Embedding 就没有“按意思找资料”这件事,RAG 检索质量的上限很大程度取决于嵌入模型的好坏。 入门之后,可以往嵌入模型的选型与评测(MTEB / C-MTEB 榜单)、向量数据库与 ANN 近似最近邻索引(如 HNSW)两个方向继续深入。
口语版讲法(约2分钟)
- 一句话定义:给每段话发一个语义坐标
- 关键性质:意思越近,向量位置越近
- 退货的例子:字面不同但语义相近,超越关键词搜索
- 相似度就是算夹角:余弦相似度越接近 1 越像
- 埋钉子:RAG 检索质量很大程度取决于嵌入模型
Embedding,一句话说,就是用模型把一段文字变成一串固定长度的数字,也就是一个向量,相当于给每段话发一个“语义坐标”。它最关键的性质是:意思越接近的文字,坐标离得越近。 展开讲,为什么这件事重要?因为机器本来是没法直接比较“两句话意思像不像”的。举个例子,“我想退货”和“这个商品我不要了”,这两句话几乎没有一个字是重复的,传统的关键词搜索会认为它们完全无关。但嵌入模型是在海量语料上训练出来的,它“读懂”了这两句话说的是同一件事,于是把它们映射到向量空间里相邻的位置。这样一来,“语义像不像”这个模糊的问题,就变成了“两个坐标离得近不近”这个可以精确计算的问题,这就是语义搜索能超越关键词搜索的根本原因。 那相似度具体怎么算?最常用的是余弦相似度。做法很简单:用同一个嵌入模型把两段文本分别转成向量 A 和 B,比如各一千零二十四个数字,然后算这两个向量方向的夹角。夹角越小、方向越一致,余弦值越接近 1,说明语义越像;接近 0 就基本无关。除了余弦,也有点积、欧氏距离这些度量,原理都相通。这里有个新手容易踩的坑:两段文本必须用同一个模型来编码,不同模型的向量空间互不兼容,混着比是没有意义的。 放到 RAG 里看,Embedding 就是检索环节的地基:离线建库时,把每个文本块转成向量存进向量数据库;用户提问时,把问题也转成向量,找出距离最近的几个块。[钉子] 所以我常说,RAG 检索质量的上限,很大程度是嵌入模型决定的——选型时我会参考 MTEB 这类评测榜单,另外海量向量怎么做到毫秒级检索,就要靠 HNSW 这类近似最近邻索引了,这块也可以展开聊。
关键一句:Embedding 把“语义像不像”变成“向量距离近不近”,意思越近坐标越近,相似度用余弦算。
面试官可能的追问
- 【概念辨析】Embedding 向量和给每个词编一个号(比如字典序号)有什么本质区别?为什么编号没法算语义相似度,向量就可以?
- 【场景切入】用户在商城搜“不想要了怎么办”,关键词搜索匹配不到“退货政策”这篇文档。用 Embedding 怎么解决这个问题?大概流程是什么样的?