Embedding 模型
Embedding 模型把对象编码为固定维度向量,使相似性、聚类和近邻检索可以在向量空间中计算;效果取决于训练目标、输入模式、相似度度量与任务评估,而不是单纯向量维度。
[!info] related notes
- 所属 MOC: AI 模型能力 MOC, AI MOC
- 向量存储: Vector Database
- 二阶段排序: Reranker 模型
- Retrieval: Retrieval Context
- RAG: RAG 知识库设计:pgvector
- 上层系统: Augmented LLM
Embedding 模型
一句话定义
Embedding 模型学习一个编码函数:
object
→ vector in embedding space
让“相关 / 相似”的对象在模型学到的表示空间中更容易被数学距离或相似度区分。
向量不是“语义坐标真理”
Embedding 输出例如:
[0.13, -0.72, 0.08, ...]
这个向量本身没有人类可直接解释的固定语义轴。
“相近”是否代表我们想要的业务相似性,取决于:
- 模型训练目标;
- 数据领域;
- 输入格式;
- query/document prompt;
- similarity metric;
- 评估集。
所以:
向量距离是模型空间里的关系,不是现实世界相似性的绝对真理。
相似度
常见检索会使用:
- cosine similarity;
- dot product;
- Euclidean/L2 distance。
到底使用哪种度量,应匹配模型训练与服务文档。
如果模型要求 normalization,数据库和检索端也要保持一致。
Query 与 Document 不一定同编码方式
某些 embedding 模型是对称的:
text A
text B
→ 同一编码方式
有些 retrieval 模型则区分:
query encoder intent
document encoder intent
甚至要求不同 instruction / prefix。
因此不能假设“把所有字符串扔进同一个 encode() 就一定最优”。
RAG 中的角色
典型链路:
document
→ chunk
→ embedding
→ vector index
query
→ embedding
→ ANN retrieval
→ candidate chunks
→ optional reranker
→ context
→ LLM
Embedding 主要负责 candidate recall。
它不直接负责:
- 最终答案生成;
- 事实验证;
- 权限控制;
- chunk freshness;
- citation correctness。
Dense Retrieval 与关键词检索
Embedding 擅长:
- 语义近义;
- paraphrase;
- 模糊意图;
- 概念相近。
关键词/BM25 擅长:
- exact identifier;
- error code;
- API name;
- rare token;
- 人名/型号/版本。
实际系统常采用 hybrid retrieval。
Reranker
Embedding 检索通常需要在大量候选中快速召回。
Reranker 则对少量候选做更精细的 query-document 相关性判断。
所以常见结构:
Embedding / lexical
→ high recall
Reranker
→ better precision
详见 Reranker 模型。
向量维度
更高维不自动等于更好。
需要权衡:
- retrieval quality;
- index size;
- memory;
- latency;
- bandwidth;
- model cost。
最终应根据实际 benchmark / eval 选择,而不是按维度大小排名模型。
Chunking 会影响 Embedding
一个 2000 字 chunk 和一个 80 字 chunk 即使用同一模型,也会产生不同检索行为。
chunking 影响:
- semantic focus;
- recall;
- context overlap;
- storage;
- downstream answer quality。
因此 embedding quality 与 retrieval pipeline 不能完全分开评估。
Model Migration
更换 embedding model 时,旧向量和新向量通常不应直接混在同一向量空间里比较。
常见做法是:
- 全量 re-embed;
- version index;
- 双写迁移;
- 切流量后淘汰旧 index。
学习检查
- Embedding 向量为什么不是可直接解释的“语义坐标轴”?
- cosine / dot product 的选择为什么要匹配模型约定?
- query 与 document 为什么可能需要不同 prefix / encoder 语义?
- Embedding retrieval 与 Reranker 的职责如何分工?
- 精确 error code 为什么可能更适合 lexical/hybrid retrieval?
- 向量维度越高为什么不自动越好?
- 为什么更换 embedding model 往往需要重新向量化整个 corpus?
- 给一个 RAG 系统,指出 chunking、embedding、vector index、reranker、LLM 分别负责哪一步。