RAG 中的 Embedding 向量化是什么?如何工作的?
RAG 中的 Embedding 向量化是什么?如何工作的?
这道题考的是Embedding 向量化这个核心技术,以及它在 RAG 检索流程中是怎么工作的。面试官想看你能不能把"文本怎么变成向量"这件事讲清楚。
我从四个方面来讲:
- Embedding 向量化到底是什么
- 向量空间是怎么工作的
- RAG 中向量检索的完整流程
- 主流向量索引算法对比
1. Embedding 向量化到底是什么
先说人话:Embedding 就是把文本转成一堆数字的技术。
就这么简单。你跟计算机说"苹果",它不懂。你得把这俩字变成一串数字,它才能处理。
这个转换不是瞎转的。Embedding 模型(像 BERT、text-embedding-ada-002 这些)会把每个词、每句话映射到一个固定长度的向量。
比如"我爱机器学习"这句话,通过 Embedding 模型处理后,会变成这样:
[0.23, -0.45, 0.89, 0.12, -0.67, ...]
一串浮点数,大概几百维到几千维,看用的模型具体是哪个。
关键点来了:这个转换不是简单的一一对应,而是带着语义信息的。
"苹果"和"水果"转换后的向量,距离会很近。
"苹果"和"手机"转换后的向量,距离中等。
"苹果"和"高铁"转换后的向量,距离很远。
计算机不懂"苹果"是什么意思,但它能算两个向量之间的距离。距离近,就说明语义相似。
2. 向量空间是怎么工作的
想象一个二维坐标系。
"猫"和"狗"的向量落在这张图上,位置很接近。
"汽车"和"飞机"的向量落在另一块区域。
这就像水果摊摆水果——苹果、橘子、香蕉都放一块儿,汽车、火车、飞机放另一块儿。语义相近的东西,自然就扎堆了。
这个"扎堆"的现象,是因为 Embedding 模型在训练的时候,就是用大量文本让模型学会:出现在相似上下文里的词,应该有相似的向量表示。
怎么衡量两个向量"近不近"?
最常用的是余弦距离。
公式不用记,你就知道:余弦距离看的是两个向量的方向,不是长度。
一个向量是 [0.5, 0.5],另一个是 [1.0, 1.0],方向一样,余弦距离就是 1(最大),说明完全相似。
还有个点积距离,算的是向量对应位相乘再相加。
实际选哪个?余弦距离用得多,因为它对向量长度不敏感。
3. RAG 中向量检索的工作流程
说完了基础概念,现在看 Embedding 在 RAG 里怎么用的。
RAG 的检索阶段分两步:索引构建和相似度检索。
索引构建(离线)
你的文档库不能直接搜,得先处理一遍。
流程是这样的:
文档 → 分块 → 每个块做 Embedding → 存入向量数据库
分块就是把长文档切成小段落。切成多大?一般 500-1000 个 token,看具体场景。
每个小块都生成一个向量,和原始文本块一起存到向量数据库里。
这个过程是离线的,文档入库之后就能随时检索了。
相似度检索(在线)
用户来查询了,流程是:
用户查询 → 查询向量化 → 向量数据库检索 → 返回 Top-K 相关文档
用户输入"什么是梯度下降",这句话先被 Embedding 模型转成向量。
然后向量数据库去库里找跟这个向量最接近的 K 个文档块。
这就是检索。返回的 K 个文档块,会被塞给大模型当上下文,大模型再生成最终回答。
为什么不直接用关键词匹配?
你可能会问:直接搜"梯度下降"这四个字不行吗?
可以,但不够聪明。
用户问"神经网络参数怎么更新的",你搜"参数更新"可能搜不到。
但用 Embedding 搜,"参数更新"和"梯度下降"向量很近,就能命中。
这就是 Embedding 的好处——语义层面的匹配,不依赖字面对齐。
4. 主流向量索引算法对比
刚才说的检索,听起来是拿查询向量跟库里每个文档向量比一遍。
这叫全量扫描,也叫 Flat 索引。
问题来了——如果库里有一亿个文档,每次查询都要比一亿次?
这肯定扛不住。
所以有了各种向量索引算法,目的就一个:加速检索,减少比较次数。
HNSW
目前最流行的,叫 HNSW(Hierarchical Navigable Small World)。
翻译过来是"分层导航小世界图"。
思想是这样的:想象一座高楼,有很多层。
- 最底层是所有数据点
- 往上走,每层的数据点越来越少,但是连接关系更稀疏
- 搜索的时候,从最高层开始,大步跳跃找大致方向
- 到了底层,再细致搜索
就像你坐电梯到高层俯瞰全局,找到大概位置,再一层层往下走。
HNSW 的优点:快、准。对数级复杂度,召回率还高。
缺点是内存占用大。因为要存多层图结构。
实际调参的时候,有个关键参数叫 ef_search。
- 值越大,搜得越准,但越慢
- 值越小,搜得越快,但可能漏掉近邻
一般在 50-300 之间调。
IVF-PQ
还有一种叫 IVF-PQ,适合超大规模数据。
IVF 是倒排索引,先把向量聚类;
PQ 是乘积量化,把高维向量压缩成短编码。
好处是省内存。适合内存敏感的场景,比如单机跑但数据量几千万。
缺点是召回率一般比 HNSW 低。
怎么选?
- 百万级数据,pgvector 自带的索引够用
- 千万到亿级,用 Milvus + HNSW
- 超大规模、内存紧张,用 Milvus + IVF-PQ
面试怎么答
基础版
Embedding 是把文本转成固定长度向量的技术。在向量空间中,语义相似的词距离近,可以通过余弦距离等度量来比较相似度。
在 RAG 里,流程是这样的:文档先分块,每块做 Embedding 后存到向量数据库。用户查询时,查询文本也做 Embedding,然后去向量数据库里找最相似的 Top-K 文档块,这些文档块作为上下文喂给大模型生成回答。
加分版
Embedding 本质是把高维语义信息压缩到低维连续向量空间,让计算机能通过数学计算理解文本含义。
RAG 中,向量检索是核心环节。文档入库时需要离线构建索引,检索时在线查询。为了应对大规模数据,需要借助向量索引算法——HNSW 是目前最常用的,通过分层图结构实现对数级检索,核心参数 ef_search 可以平衡召回率和延迟。选型上,百万级以下用 pgvector,千万级以上建议用 Milvus 这类专用向量数据库。
一句话总结
Embedding 就是把文本"翻译"成数字,让计算机能通过计算向量距离来理解语义相似性,配合向量索引实现 RAG 的高效检索。
