Appearance
嵌入模型 / 向量表示
Embedding 模型将文本映射到高维向量空间,使语义相似的文本在几何空间中彼此接近。它们是 Retrieval Augmented Generation、语义搜索、聚类和分类系统的核心基础设施。
定义
文本嵌入是稠密向量表示——由浮点数组成的数组(通常为 256 到 3072 维),用于编码输入文本的语义含义。与稀疏的词袋表示(TF-IDF、BM25)不同,嵌入能够捕捉语义关系:即使 "dog" 和 "puppy" 在表面 token 层面没有任何重叠,它们在向量空间中仍然彼此接近。
关键特性:
- 固定维度:每个输入都映射到相同长度的向量
- 语义连续性:相似的含义 → 向量空间中相邻的点
- 算术运算:向量算术成立——
vector("king") - vector("man") + vector("woman") ≈ vector("queen") - 任务无关:同一个嵌入可用于搜索、分类、聚类和排序
嵌入模型构成了 RAG 系统中的检索部分:文档被预先嵌入到向量数据库中,查询在运行时被嵌入以找到最近邻。
工作原理
大多数现代嵌入模型基于 Transformer 编码器架构(通常为 BERT 风格,而非仅解码器的生成式模型)。
架构流程
Input Text → Tokenizer → Transformer Encoder → Pooling Layer → Normalization → Embedding Vector1. Tokenization(分词): 输入文本使用子词分词器(例如,BERT 类模型使用 WordPiece,E5 使用 SentencePiece)进行分词。参见 Tokenization。
2. Transformer Encoder(Transformer 编码器): 堆叠的 transformer 编码器层对 token 序列进行双向处理,为每个 token 位置生成隐藏状态。嵌入模型偏好仅编码器架构,因为双向上下文能产生比因果(单向)掩码更丰富的表示。
3. Pooling Layer(池化层): 必须将各 token 的隐藏状态合并为单个向量。常见策略:
- [CLS] token 池化:取特殊
[CLS]token 的隐藏状态(BERT 类模型使用)。简单但有时并非最优。 - 均值池化(Mean pooling):对所有 token 隐藏状态取平均。通常效果优于 CLS 池化。
- 加权均值池化(Weighted mean pooling):按重要性加权 token(例如,通过逆文档频率或学习的注意力权重)。
- 最后一个 token 池化(Last token pooling):某些较新的模型使用(如 E5-mistral)。
4. Normalization(归一化): 输出向量通常进行 L2 归一化(单位长度),使余弦相似度简化为简单的点积。
训练目标:对比学习
嵌入模型使用对比学习目标进行训练:
InfoNCE Loss (NT-Xent):
L = -log( exp(sim(q, d⁺)/τ) / Σᵢ exp(sim(q, dᵢ)/τ) )其中 sim 是余弦相似度,d⁺ 是正例(相关)文档,dᵢ 是负例,τ 是温度参数。模型学习将正例对拉近,同时将负例推开。
常见训练数据格式:
- 来自搜索日志的
(query, relevant_document)对 (anchor, positive, negative)三元组- 来自 LLM 的合成数据(例如,E5 使用 GPT-3 生成的合成查询-文档对进行训练)
主要模型与提供商
商业 / API 模型
| 模型 | 提供商 | 维度 | 最大 Tokens | 语言 | 关键特性 |
|---|---|---|---|---|---|
| text-embedding-3-small | OpenAI | 512–1536 | 8191 | ~100 | Matryoshka 维度,$0.02/百万 tokens |
| text-embedding-3-large | OpenAI | 256–3072 | 8191 | ~100 | OpenAI 最佳质量,$0.13/百万 tokens |
| text-embedding-ada-002 | OpenAI | 1536 | 8191 | ~100 | 旧版模型,正在逐步淘汰 |
| embed-english-v3.0 | Cohere | 1024 | 512 | EN | 支持二值嵌入,4.0 版支持多语言 |
| embed-multilingual-v3.0 | Cohere | 1024 | 512 | 100+ | SOTA 多语言 |
| voyage-3 | Voyage AI | 1024–3072 | 32000 | ~60 | 长上下文,针对 RAG 优化 |
| voyage-3-lite | Voyage AI | 512–2048 | 32000 | ~60 | 快速、更便宜的版本 |
开源模型
| 模型 | 开发者 | 维度 | 最大 Tokens | 语言 | 备注 |
|---|---|---|---|---|---|
| BGE-base/medium/large | BAAI | 768/512/1024 | 512 | EN/ZH | 开源类别 MTEB 最高分 |
| BGE-M3 | BAAI | 1024 | 8192 | 100+ | 多语言、多粒度、混合(稠密 + 稀疏 + ColBERT) |
| E5-base/large | intfloat (Microsoft) | 768/1024 | 512 | EN | 基于 GPT-3 的合成训练数据 |
| multilingual-E5-large | intfloat | 1024 | 512 | 100+ | 多项基准测试中最优的开源多语言模型 |
| E5-mistral-7b | intfloat | 4096 | 4096 | EN | LLM 即嵌入;使用 Mistral-7B 作为骨干 |
| GTE-base/large | Alibaba | 768/1024 | 512/8192 | EN/ZH | 检索和分类表现均优 |
| Jina-embeddings-v3 | Jina AI | 512–1024 | 8192 | 100+ | LoRA 适配器支持任务特定,Matryoshka |
| nomic-embed-text-v1 | Nomic AI | 768 | 2048 | EN | 完全开放(数据+权重),0.5B 参数 |
| Snowflake-arctic-embed | Snowflake | 768–1024 | 512 | EN | 针对检索优化,多尺寸可选 |
| gte-Qwen2 | Alibaba | 3584 | 32768 | EN/ZH | LLM 即嵌入,Qwen2-7B 骨干 |
Sentence-Transformers (SBERT) 生态
sentence-transformers 库由达姆施塔特工业大学 UKP 实验室开发,是训练和部署嵌入模型最广泛使用的框架。它提供:
- 预训练模型(
all-MiniLM-L6-v2、all-mpnet-base-v2) - 用于对比学习的训练工具
- 交叉编码器重排序器
- 与向量数据库和 RAG 框架的集成
许多开源嵌入模型以 sentence-transformers 模型的形式发布在 HuggingFace 上。
评估基准
MTEB(大规模文本嵌入基准)
MTEB(Massive Text Embedding Benchmark,大规模文本嵌入基准)是评估嵌入模型的事实标准。它涵盖 8 项任务,涉及 58 个数据集:
| 任务 | 示例数据集 | 评估指标 | 测试内容 |
|---|---|---|---|
| 检索 | MS MARCO, NQ, HotpotQA | NDCG@10 | 对查询结果的相关文档排序 |
| 聚类 | Reddit, 20 Newsgroups, Arxiv | V-Measure | 无监督分组质量 |
| 配对分类 | Twitter SemEval, Sprint | Average Precision | 语义相似度分类 |
| 重排序 | StackOverflowDupQuestions | MAP | 区分细粒度相关性 |
| 分类 | Amazon, DBpedia | Accuracy | 线性探针分类 |
| STS(语义文本相似度) | STS-B, SICK-R | Spearman ρ | 直接相似度评分 |
| 摘要 | SummEval | Spearman ρ | 摘要质量评估 |
| 重新评分 | Biosses | Spearman ρ | 句子相关性评分 |
当前顶级模型(截至 2026 年初):
- 通用:intfloat/e5-mistral-7b-instruct、BAAI/bge-en-icl
- 多语言:intfloat/multilingual-e5-large、BAAI/bge-m3
- 高效:BAAI/bge-small-en-v1.5(384 维,高速)
BEIR(信息检索基准)
BEIR 专注于领域外检索——测试嵌入模型在未见过的领域和任务上的泛化能力。它包含 18 个检索数据集,涵盖生物医学(BioASQ)、法律(TREC-COVID)、新闻(Climate-FEVER)等。BEIR 高分意味着强大的泛化能力。
C-MTEB(中文 MTEB)
中文 MTEB 基准,涵盖中文的检索、语义文本相似度、分类和聚类任务。关键模型:BGE、GTE 和 multilingual-E5 占据主导地位。
维度与性能
维度权衡
| 维度 | 准确率(MTEB 平均) | 每百万文档存储量(FP32) | 查询速度(相对) |
|---|---|---|---|
| 256 | ~58–62% | ~1 GB | 最快 |
| 512 | ~60–64% | ~2 GB | 快速 |
| 768 | ~61–66% | ~3 GB | 中等 |
| 1024 | ~62–68% | ~4 GB | 中等 |
| 3072 | ~64–71% | ~12 GB | 最慢 |
关键洞察: 收益递减——从 256 增加到 768 维大约带来 ~4% 的 MTEB 提升,而从 768 增加到 3072 维仅额外获得 ~2% 的提升,存储却增加了 4 倍。
Matryoshka 表示学习 (MRL)
由 OpenAI 引入并被 text-embedding-3 模型采用,MRL 训练单个模型生成可在多种维度下工作的嵌入。前 N 维在每个粒度级别都包含高质量表示:
- 单个模型支持 256、512、1024 或 1536 维
- 用户可以将向量截断到较低维度,精度损失极小
- 在不需要完整精度时减少存储和查询成本
- 开源实现:
nomic-embed-text-v1、BGE-M3、Jina-embeddings-v3
何时使用较低维度:
- 256–512:高吞吐量分类、快速聚类、存储受限环境
- 768–1024:通用 RAG、语义搜索——最佳平衡点
- 1536–3072:最高精度检索、竞争性重排序、研究用途
应用场景
检索增强生成 (RAG)
最主要的应用场景。文档被分块、嵌入并存储在向量数据库中。查询在运行时被嵌入以检索相关块。参见 Retrieval Augmented Generation。
生产环境注意事项:
- 分块大小与模型的最大 token 限制相关(例如,BGE 为 512 tokens,OpenAI 为 8191)
- 使用交叉编码器重排序(后期交互)能显著提升最终准确率,超越原始嵌入相似度
- 混合检索(稠密 + BM25)优于单一方法
语义搜索
RAG 之外的场景:企业文档搜索、代码搜索(如 code-search-net)、基于 CLIP 风格模型的图文搜索以及跨语言搜索。
聚类
使用嵌入向量作为特征对文本文档进行无监督分组。用于主题发现、文档组织和异常检测。
分类
嵌入 + 轻量级分类器(逻辑回归、SVM、kNN)通常能达到甚至超越微调后的 BERT 分类器的效果,而成本仅为后者的一小部分。通过对比类别描述嵌入可实现零样本分类。
推荐
基于内容的推荐:将用户画像和物品进行嵌入,推荐嵌入距离用户向量最近的物品。
去重
通过计算文档嵌入之间的成对余弦相似度来检测近似重复。用于 LLM 训练的数据清洗流程,从训练语料中移除近似重复内容。
技术方法
Matryoshka 嵌入
如上所述——训练单个模型以支持可变维度嵌入。实现通常涉及在训练期间添加多粒度损失:
L = Σ_{d ∈ D} w_d · InfoNCE(proj_d(h), labels)其中 proj_d 将完整隐藏状态投影到维度 d。
二值嵌入(Cohere 二值化)
Cohere 的 embed-v3 模型支持二值量化:每个浮点数被缩减为单个比特(值的符号),生成 1024 位向量。这将存储减少 32 倍,并通过使用 XOR + popcount CPU 指令实现汉明距离计算来加速搜索。检索基准上的准确率仅下降约 2–3%。
其他方法:乘积量化(Product Quantization, PQ)、标量量化(Scalar Quantization, SQ)——标准的向量数据库技术。
用于领域适配的 LoRA 微调
预训练的嵌入模型可以通过 LoRA(Low-Rank Adaptation,低秩适配)适应特定领域。流程如下:
- 从一个通用嵌入模型开始(例如 BGE-large)
- 收集领域特定的
(query, relevant_document)对 - 在编码器上训练小型 LoRA 适配器(而非池化器)
- 在推理时合并或加载适配器
这显著优于在专门领域(法律、医疗、代码)上的零样本嵌入,且远比全量微调便宜。参见 Fine-tuning。
LLM 即嵌入
一个近期趋势:使用仅解码器的 LLM 作为嵌入骨干,而非 BERT 风格的编码器。示例:
- intfloat/e5-mistral-7b-instruct:Mistral-7B 加对比头,在 MTEB 上达到 SOTA
- BAAI/bge-en-icl:使用指令微调的 LLaMA 骨干,通过上下文学习生成嵌入
- gte-Qwen2-7B-instruct:Qwen2 骨干
优点: LLM 拥有更大的上下文窗口(4K–32K vs 512 tokens),来自生成式预训练的语义理解更丰富。 缺点: 更大(7B 参数 vs 100–300M),推理更慢,成本更高。
与 LLM 的关系
嵌入模型和生成式 LLM 扮演着根本不同的角色:
| 方面 | 嵌入模型 | 生成式 LLM |
|---|---|---|
| 架构 | 编码器(BERT 风格)或带池化的解码器 | 仅解码器(GPT 风格) |
| 输出 | 固定向量 | 变长文本 |
| 训练方式 | 对比学习 | 下一 token 预测 |
| 模型规模 | 100M–7B 参数 | 7B–400B+ 参数 |
| 推理方式 | 单次前向传播 | 自回归(逐 token) |
| 延迟 | ~10–50ms | ~100ms–10s+ |
| 成本 | $0.02–0.13/百万 tokens | $0.15–$15/百万 tokens |
关键洞察: 在 Retrieval Augmented Generation 流程中,嵌入模型处理廉价/快速的检索步骤,而 LLM 处理昂贵的推理步骤。这是有意为之——检索器的速度至关重要,因为它是整个系统的入口。
近期融合趋势: LLM 即嵌入的趋势(E5-mistral、gte-Qwen2、bge-en-icl)模糊了这一界限,使用生成式架构进行对比学习训练。这些模型通常是较小的 LLM(7B)而非前沿模型(70B+),在质量与推理成本之间取得平衡。
生产环境优化
延迟预算
| 组件 | 目标延迟 | 说明 |
|---|---|---|
| 嵌入查询 | < 100ms | RAG 中的关键路径 |
| 嵌入批量文档 | 0.5–5s | 通常离线执行(索引构建) |
| ANN 搜索(100 万向量) | < 20ms | 取决于索引类型 |
| 重排序 | < 50ms | 对 top-K 结果使用交叉编码器 |
向量数据库选项
框架参考 Retrieval Augmented Generation。关键考量:HNSW 索引用于高精度,IVF 用于速度,基于磁盘的用于大规模。
嵌入模型量化
与生成式模型类似,嵌入模型可以使用 Model Quantization 技术量化为 INT8 或 FP8,精度损失极小(~0.5%)。这在使用 CPU 部署嵌入模型(常见于本地 RAG 设置)或减少大规模索引的内存占用时尤其有用。
来源
- MTEB: Massive Text Embedding Benchmark (Muennighoff et al., 2022) — https://huggingface.co/spaces/mteb/leaderboard
- BEIR: A Heterogeneous Benchmark for Zero-shot Evaluation of Information Retrieval Models (Thakur et al., 2021)
- Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks (Reimers & Gurevych, 2019)
- Text Embeddings by Open AI (text-embedding-3) — https://platform.openai.com/docs/guides/embeddings
- Cohere Embed v3 — https://cohere.com/blog/introducing-embed-v3
- BGE: Towards Open Multilingual Embedding Models (BAAI, 2024)
- E5: Text Embeddings by Weakly-Supervised Contrastive Pre-training (Wang et al., 2022)
- Matryoshka Representation Learning (Kusupati et al., 2022)
- BGE M3-Embedding: Multi-Lingual, Multi-Functionality, Multi-Granularity (Chen et al., 2024)
- Voyage AI Embedding Models — https://voyageai.com/docs/embeddings
- Jina Embeddings v3: A Multilingual Embedding Model for Retrieval (Günther et al., 2024)