RAG 中的 Embedding 向量化是什么?如何工作的?
- 标签:RAG、Embedding
🏛 业务架构师
RAG 中的 Embedding 向量化:把文本块(和查询)通过 Embedding 模型压缩成高维稠密向量(如 1024 维浮点数组),使"语义相近的文本在向量空间中距离相近"——为语义检索建立数学基础。
工作机制分两段:
入库段(离线):文档解析→切分成块→每块过 Embedding 模型(本质是 Transformer 编码器,取池化后的输出向量)→向量+原文+元数据写入向量库。
查询段(在线):用户 query 用同一个模型向量化→与库中所有分块向量计算相似度(通常余弦)→取 Top-K 相似分块作为检索结果(ANN 索引加速到毫秒级)。
为什么语义相近就距离近:Embedding 模型经过对比学习训练——语义相关的"问题-答案"对在训练中被拉近、无关对被推远,模型学会了把"语义"映射为"几何位置"。这就是"怎么退款"能检索到"售后退换流程"的原因:两者字面不同但向量相近。
业务视角的三个关键认知:
- 模型必须一致:入库和查询用同一个 Embedding 模型(不同模型的向量空间互不兼容)——换模型=全量重建索引,选型要趁早定;
- 质量决定天花板:切块语义完整性+Embedding 模型对领域语言的适配度,直接决定召回质量——中文场景选 BGE/Qwen Embedding 类并在自有语料上验证;
- 成本便宜但不是零:海量文档入库的批量向量化、增量更新的持续向量化要纳入工程规划(好在 Embedding 调用成本比生成模型低两个数量级)。
🏗 系统架构师
Embedding 向量化 = 把文本映射为稠密向量,使"语义相近 ⇒ 向量相近"。在 RAG 中的工作机制按数据流讲:
离线(建库):文档 → 解析 → 分块 → 每块过 Embedding 模型(Transformer 编码器 + 池化,输出 512~3072 维向量)→ 向量 + 元数据入向量库,建 ANN 索引。批量管道,吞吐优先。
在线(查询):用户 query → 同一模型编码成向量(单条,10~50ms)→ ANN 索引检索 Top-K 最近邻(余弦/IP 距离,10~50ms)→ 返回候选 chunk →(Rerank)→ 组装进 Prompt。
为什么能"工作"(机制):
- 对比学习训练:模型用"相关文本对拉近、无关对推远"的目标训练——向量空间的几何结构被校准为"语义距离":方向编码语义(归一化后余弦即相似度),平移不变性让"改写不改义"的文本聚簇;
- 双塔架构:query 与文档独立编码(无交互)——文档向量可离线预计算,在线只需一次 query 编码 + 索引查找,这是 RAG 检索能到毫秒级的架构基础(代价:精度低于交互式,所以后配 Rerank)。
工程关键约束:
- 同模型同度量:建库与查询必须同一 Embedding 模型与距离度量——换模型 = 全库重嵌入(数据迁移级);
- 维度与预算:内存 ≈ N × dim × 4B;MRL 截断/量化可降本;
- 粒度由分块决定:向量代表的是 chunk 的语义——分块策略与 Embedding 是一对耦合设计。
定位:Embedding 决定 RAG 召回上限,Rerank 与 Prompt 决定下限之上的发挥——上限不够时换 Embedding 比调 Prompt 有效得多。
💻 全栈开发专家
Embedding 向量化 = 用 Encoder 模型把变长文本压成固定长度的稠密向量,语义信息编码在向量方向上。
工作原理(四步):
- 编码:文本 tokenize 后过 Transformer Encoder(BERT 类双塔结构),每个 token 得到上下文相关的隐状态;
- 池化:把 token 级表示聚合成句级向量——mean pooling(平均,主流)/ [CLS] / last-token(E5/bge 类指令模型常用);
- 归一化:L2 归一化(把向量长度拉成 1,余弦=点积,检索加速);
- 相似度计算:query 向量与文档向量点积/余弦——训练时的目标就是让「语义相关的对」相似度高(对比学习:正对拉近、负对推远,in-batch negatives 是标配技巧)。
"退货政策" → [0.12, -0.35, 0.88, ...] (1024维)
"售后退换货流程" → [0.10, -0.33, 0.91, ...] ← 与上面余弦≈0.95
"今日股市行情" → [-0.4, 0.22, -0.1, ...] ← 与上面余弦≈0.2在 RAG 中的工作流:
- 离线:文档 chunk → 向量化 → 入向量库(ANN 索引);
- 在线:query → 同一模型向量化 → ANN 检索最近邻 → 返回 chunk+分数。
工程要点:
- 同一模型编码两侧(不同模型的向量空间不可比);
- 指令型模型(bge/E5)区分 query/passage 前缀(「query:」/「passage:」),用错前缀召回掉点;
- 非对称检索(短 query 搜长文档)选模型时确认支持;
- 换模型=重建全量索引,管道预留双写切换窗口。