模型技术

Embedding

嵌入

Embedding(嵌入)指把文本、图像等非结构化数据转换为高维向量,使语义相近的内容在向量空间中距离更近。它是 RAG、语义搜索、推荐系统的底层基石。本文拆解 Embedding 的原理、与关键词搜索的差异、主流模型选型、维度与成本权衡,帮你理解这项让机器'理解语义'的核心技术。

2026-08-06
Embedding嵌入向量RAG基础概念

什么是 Embedding

Embedding(嵌入) 指把文本、图像、音频等非结构化数据转换为固定长度的数值向量(如 1536 维浮点数数组),使得语义相近的内容在向量空间中距离更近

打个比方:

  • 关键词搜索 = 字面匹配("苹果"和"iPhone"是两个词,不匹配)
  • Embedding = 语义匹配("苹果"和"iPhone"在向量空间中很近,因为语义相关)

Embedding 是让机器"理解语义"的核心技术,是 RAG、语义搜索、推荐系统、聚类分析的底层基石。

Embedding 的直觉理解

一维示例

假设用 1 个维度表示"积极-消极":

消极 ←--- -0.8 --- -0.3 --- 0 --- 0.5 --- 0.9 ---→ 积极

"糟糕"  → -0.8
"一般"  → -0.3
"还行"  →  0.5
"棒极了" →  0.9

"糟糕"和"一般"距离近(都偏消极),"还行"和"棒极了"距离近(都偏积极)。

多维扩展

实际 Embedding 用几百到几千维:

"苹果手机" → [0.12, -0.34, 0.56, ..., 0.78]  (1536 维)
"iPhone"   → [0.11, -0.32, 0.55, ..., 0.80]  (1536 维)
"香蕉"     → [-0.45, 0.67, -0.12, ..., 0.03] (1536 维)

用余弦相似度计算:

  • "苹果手机" vs "iPhone" → 0.95(很近)
  • "苹果手机" vs "香蕉" → 0.21(很远)

这就是语义搜索的原理:把查询和文档都转成向量,找最近的

Embedding vs 关键词搜索

维度关键词搜索(BM25)Embedding 语义搜索
匹配方式字面匹配语义匹配
"苹果手机"搜"iPhone"❌ 不匹配✅ 匹配
同义词
多语言✅(跨语言模型)
错别字容忍
精确匹配✅ 强⚠️ 弱
计算成本中(向量计算)
可解释性高(哪个词命中)低(黑盒)
适合场景精确检索、代码搜索语义检索、问答

最佳实践:两者结合(Hybrid Search)。关键词搜索保精确,Embedding 补语义。

Embedding 的生成流程

文本 → Tokenize → Embedding 模型 → 向量 → 存入向量数据库

步骤 1:Tokenize

把文本切分为 token(词/子词):

"我爱AI编程" → ["我", "爱", "AI", "编程"]

步骤 2:模型推理

Embedding 模型(如 text-embedding-3-small)把 token 序列转为向量:

from openai import OpenAI
client = OpenAI()

response = client.embeddings.create(
    model="text-embedding-3-small",
    input="我爱AI编程"
)
vector = response.data[0].embedding  # 1536 维浮点数组

步骤 3:存储与检索

把向量存入向量数据库(Pinecone / Milvus / Qdrant),查询时用余弦相似度找最近邻。

主流 Embedding 模型对比

模型维度最大输入中文支持价格适合
OpenAI text-embedding-3-small15368191 token$0.02/1M token通用首选
OpenAI text-embedding-3-large30728191 token$0.13/1M token高精度
Cohere embed-multilingual-v31024512 token$0.10/1M token多语言
BGE-large-zh-v1.5(开源)1024512 token✅ 优秀免费中文自部署
M3E-base(开源)768512 token✅ 优秀免费中文自部署
Jina embeddings v281928192 token$0.02/1M token长文本
Voyage AI voyage-210244000 token$0.10/1M token检索优化

选型建议

  • 通用 + 省钱:OpenAI text-embedding-3-small
  • 中文 + 自部署:BGE-large-zh-v1.5 或 M3E-base
  • 长文本:Jina embeddings v2(8K 上下文)
  • 高精度:OpenAI text-embedding-3-large
  • 多语言:Cohere embed-multilingual-v3

维度与成本的权衡

维度越高,表达力越强,但存储和计算成本越高:

维度存储成本(1M 向量)检索延迟表达力
384~1.5 GB
768~3 GB
1024~4 GB
1536~6 GB优+
3072~12 GB极优

技巧:OpenAI text-embedding-3 支持降维,可从 3072 降到 256,损失少量精度换取大幅成本节省:

response = client.embeddings.create(
    model="text-embedding-3-large",
    input=text,
    dimensions=256  # 从 3072 降到 256
)

相似度计算方法

方法公式特点适合
余弦相似度cos(A,B) = A·B / (A
点积A·B看方向+长度已归一化的向量
欧氏距离√Σ(Ai-Bi)²看绝对距离图像 Embedding
曼哈顿距离ΣAi-Bi

最常用:余弦相似度,范围 [-1, 1],越接近 1 越相似。

Embedding 的应用场景

1. RAG(检索增强生成)

用户问题 → Embedding → 向量数据库检索 → Top-K 相关文档 → 喂给 LLM 生成答案

详见 RAG 术语详解。这是 Embedding 最重要的应用。

2. 语义搜索

查询 "怎么提高转化率" → Embedding → 找到 "提升下单率的 5 个方法"

3. 推荐系统

用户浏览历史 → Embedding → 找语义相近的内容推荐

4. 聚类分析

把所有文档 Embedding → K-Means 聚类 → 自动发现主题分组

5. 去重与相似检测

文档 A Embedding vs 文档 B Embedding → 相似度 > 0.9 → 判定为重复

6. 分类

文本 Embedding → 训练分类器 → 情感分类 / 意图识别

主流向量数据库

数据库特点适合
Pinecone托管 SaaS,零运维快速上线
Milvus开源,高性能自部署大规模
Qdrant开源,Rust 写性能与轻量
Weaviate开源,内置模块化多模态
pgvectorPostgreSQL 扩展已有 PG 的团队
Chroma轻量,Python 原生原型开发

选型建议:已有 PostgreSQL 用 pgvector;快速原型用 Chroma;生产大规模用 Milvus 或 Pinecone。

常见误区

  • 误区 1:维度越高越好。超过 1536 维收益递减,成本翻倍。
  • 误区 2:Embedding 能理解所有语义。它只懂训练数据见过的模式,领域术语需微调。
  • 误区 3:换模型后向量能混用。不同模型的向量空间不同,换模型必须重新 Embedding 全量数据。
  • 误区 4:Embedding 适合精确匹配。代码搜索、ID 查找用关键词搜索更好。
  • 误区 5:Embedding 永久有效。模型升级后旧向量可能失效,需定期重新生成。
  • 误区 6:长文本直接 Embedding。超过模型最大输入会被截断,需先分块(chunking)。

分块(Chunking)策略

长文档不能直接 Embedding(超长度限制),需先分块:

策略方法适合
固定长度每 500 字一块简单通用
按段落按自然段分文章、博客
按语义用模型检测语义边界技术文档
滑动窗口重叠 10-20%防止边界信息丢失
递归分块先大块再小块层级结构文档

最佳实践:块大小 200-500 token,重叠 10-20%,按语义分块优于固定长度。

与其他术语的关系

  • LLM:大语言模型,Embedding 是它的"眼睛"
  • RAG:检索增强生成,Embedding 是检索的基础
  • Fine-tuning:微调,可定制 Embedding 模型
  • Hallucination:幻觉,RAG + Embedding 是缓解方案
  • Token:token,Embedding 的输入单位

小结

Embedding 是让机器"理解语义"的核心技术:把文本变成向量,用距离表达语义相似度。它是 RAG 的地基、语义搜索的引擎、推荐系统的内核。

选型原则

  • 通用场景用 OpenAI text-embedding-3-small(便宜好用)
  • 中文自部署用 BGE-large-zh-v1.5
  • 已有 PostgreSQL 用 pgvector 存向量
  • 长文本先分块再 Embedding

理解 Embedding,才能理解 RAG 为什么能"查着答"、语义搜索为什么能"懂你意思"。这是 AI 应用开发者的必修课。