Skip to content

嵌入模型 / 向量表示

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 Vector

1. 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-smallOpenAI512–15368191~100Matryoshka 维度,$0.02/百万 tokens
text-embedding-3-largeOpenAI256–30728191~100OpenAI 最佳质量,$0.13/百万 tokens
text-embedding-ada-002OpenAI15368191~100旧版模型,正在逐步淘汰
embed-english-v3.0Cohere1024512EN支持二值嵌入,4.0 版支持多语言
embed-multilingual-v3.0Cohere1024512100+SOTA 多语言
voyage-3Voyage AI1024–307232000~60长上下文,针对 RAG 优化
voyage-3-liteVoyage AI512–204832000~60快速、更便宜的版本

开源模型

模型开发者维度最大 Tokens语言备注
BGE-base/medium/largeBAAI768/512/1024512EN/ZH开源类别 MTEB 最高分
BGE-M3BAAI10248192100+多语言、多粒度、混合(稠密 + 稀疏 + ColBERT)
E5-base/largeintfloat (Microsoft)768/1024512EN基于 GPT-3 的合成训练数据
multilingual-E5-largeintfloat1024512100+多项基准测试中最优的开源多语言模型
E5-mistral-7bintfloat40964096ENLLM 即嵌入;使用 Mistral-7B 作为骨干
GTE-base/largeAlibaba768/1024512/8192EN/ZH检索和分类表现均优
Jina-embeddings-v3Jina AI512–10248192100+LoRA 适配器支持任务特定,Matryoshka
nomic-embed-text-v1Nomic AI7682048EN完全开放(数据+权重),0.5B 参数
Snowflake-arctic-embedSnowflake768–1024512EN针对检索优化,多尺寸可选
gte-Qwen2Alibaba358432768EN/ZHLLM 即嵌入,Qwen2-7B 骨干

Sentence-Transformers (SBERT) 生态

sentence-transformers 库由达姆施塔特工业大学 UKP 实验室开发,是训练和部署嵌入模型最广泛使用的框架。它提供:

  • 预训练模型(all-MiniLM-L6-v2all-mpnet-base-v2
  • 用于对比学习的训练工具
  • 交叉编码器重排序器
  • 与向量数据库和 RAG 框架的集成

许多开源嵌入模型以 sentence-transformers 模型的形式发布在 HuggingFace 上。

评估基准

MTEB(大规模文本嵌入基准)

MTEB(Massive Text Embedding Benchmark,大规模文本嵌入基准)是评估嵌入模型的事实标准。它涵盖 8 项任务,涉及 58 个数据集

任务示例数据集评估指标测试内容
检索MS MARCO, NQ, HotpotQANDCG@10对查询结果的相关文档排序
聚类Reddit, 20 Newsgroups, ArxivV-Measure无监督分组质量
配对分类Twitter SemEval, SprintAverage Precision语义相似度分类
重排序StackOverflowDupQuestionsMAP区分细粒度相关性
分类Amazon, DBpediaAccuracy线性探针分类
STS(语义文本相似度)STS-B, SICK-RSpearman ρ直接相似度评分
摘要SummEvalSpearman ρ摘要质量评估
重新评分BiossesSpearman ρ句子相关性评分

当前顶级模型(截至 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-v1BGE-M3Jina-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,低秩适配)适应特定领域。流程如下:

  1. 从一个通用嵌入模型开始(例如 BGE-large)
  2. 收集领域特定的 (query, relevant_document)
  3. 在编码器上训练小型 LoRA 适配器(而非池化器)
  4. 在推理时合并或加载适配器

这显著优于在专门领域(法律、医疗、代码)上的零样本嵌入,且远比全量微调便宜。参见 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+),在质量与推理成本之间取得平衡。

生产环境优化

延迟预算

组件目标延迟说明
嵌入查询< 100msRAG 中的关键路径
嵌入批量文档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)

AI Knowledge Base — 持续积累