跳到主内容
AIHO 2026 全新改版上线
概念Embedding向量语义搜索RAG

Embedding(向量嵌入)

把文本、图片等数据转成高维向量,让机器能通过向量距离衡量语义相似度——RAG、搜索、推荐的基础。

什么是 Embedding

Embedding(向量嵌入)是把文本、图片、音频等数据转换成一组数字(向量)的过程。这组数字保留了原始数据的语义信息——语义相近的内容,向量距离也近。

简单说:把"意思"变成"坐标"

为什么需要 Embedding

计算机不能直接理解"猫和老虎比猫和桌子更像"。但如果把每个词映射到高维空间中的一个点,让"猫"和"老虎"的坐标接近、"猫"和"桌子"的坐标远离,计算机就能通过计算距离来判断语义相似度。

猫   → [0.21, -0.35, 0.88, ...]  ← 768 维向量
老虎 → [0.19, -0.31, 0.91, ...]  ← 与"猫"距离很近
桌子 → [-0.72, 0.55, -0.12, ...] ← 与"猫"距离很远

工作原理

1. 文本 → Token

先把文本切分成 token(与 LLM 一样的分词方式)。

2. Token → 向量

通过预训练的 Embedding 模型,把每个 token 映射到高维空间。

3. 聚合

把一段文本所有 token 的向量聚合成一个向量(通常用平均池化或特殊 CLS token)。

4. 存储 + 检索

把生成的向量存入向量数据库,查询时把问题也转成向量,找距离最近的。

常见 Embedding 模型

模型维度特点价格
OpenAI text-embedding-3-large3072通用、稳定$0.13/M
OpenAI text-embedding-3-small1536性价比高$0.02/M
BGE-large-zh-v1.51024中文最佳(开源)免费
Jina Embeddings v31024多语言免费(开源)
Cohere embed v41024多语言+多模态$0.10/M
GTE-large1024阿里出品(开源)免费
voyage-code-31024代码专用$0.18/M

维度选择

  • 512-768 — 精度低但速度快,适合大规模粗筛
  • 1024 — 平衡,最常用
  • 1536-3072 — 高精度,适合对召回质量要求高的场景

text-embedding-3 系列支持 Matryoshka:训练时就让前 N 维独立可用,需要时直接截断到 256 / 512 / 1024,不用重新 embed。省存储省检索时间。

相似度计算

两个向量之间的"距离"有几种计算方式:

方法说明适用
余弦相似度最常用,衡量方向相似性语义搜索(推荐)
欧氏距离衡量绝对距离图像检索
点积最快,但受向量长度影响大规模检索(需归一化)

推荐用余弦相似度,它对向量长度不敏感,适合文本语义匹配。

ANN 索引:百万向量怎么秒级查

数据量小时(< 10 万)暴力遍历就够。上百万级就必须用 ANN(Approximate Nearest Neighbor)索引:

索引原理适用
HNSW多层图结构跳跃查找通用首选,召回率最高
IVF先聚类后局部搜索上亿向量,内存敏感
IVF-PQIVF + 乘积量化压缩超大规模,能省 8-16x 内存
Flat暴力扫描< 10 万向量,要求 100% 召回

经验值:100 万 1024 维向量,HNSW 单机能做到 <10ms 查询;上亿规模建议 IVF-PQ + 多机分片。

Chunk Size 的取舍

文档分块大小直接决定 RAG 质量,没有银弹,但有经验区间:

chunk size优点缺点适合
128-256 token检索精度高上下文不完整FAQ、短问答
512 token平衡,最常用通用文档
1024 token上下文完整检索精度下降长文档、技术手册
整章/整页语义完整噪音多、贵Late Chunking 场景

重叠(overlap)一般设 chunk size 的 10-20%——避免关键句被切到两个 chunk 边界都丢失。

Late Chunking

新思路:先 embedding 整篇文档,然后再切。让每个 chunk 的向量保留全文上下文。Jina v3 等模型原生支持,对长文档效果显著优于先切后 embed。

混合检索:BM25 + 向量

纯向量检索有死角——人名、型号、错别字、罕见专业术语,关键词匹配往往更准。生产 RAG 几乎都用混合检索

query
  ├→ BM25 检索       → 候选集 A(关键词命中)
  ├→ Vector 检索     → 候选集 B(语义命中)
  ↓
  RRF / 加权融合     → top-K 候选
  ↓
  Reranker 二阶段排序 → 最终 top-N
  ↓
  喂给 LLM

经验值:BM25 和向量按 0.5 / 0.5 加权融合就能比纯向量提升 5-15% 召回率。

Reranker:二阶段排序

向量检索快但粗。Reranker(Cross-Encoder) 慢但准——把 query 和每个候选一起输入模型,输出相关性分数。流程:

  1. 向量检索召回 top-100
  2. Reranker 重排 top-100 → top-10
  3. top-10 喂给 LLM

主流 Reranker:BGE-reranker-v2、Cohere Rerank 3、Jina Reranker v2。Reranker 是 RAG 最高 ROI 的优化点之一,加一步通常能让最终答案质量提升 10-20%。

应用场景

1. RAG(检索增强生成)

RAG 的核心步骤就是 Embedding:

  1. 把知识库文档全部 Embedding → 存入向量数据库
  2. 用户提问 → Embedding → 在向量数据库找最相似的文档片段
  3. 把文档片段 + 问题一起发给 LLM → 生成回答

2. 语义搜索

传统搜索靠关键词匹配,搜"手机"找不到"智能手机"。语义搜索用 Embedding,搜"手机"能找到"移动通信设备"。

3. 推荐系统

把用户行为和内容都 Embedding,推荐与用户向量最近的内容。

4. 去重与聚类

把文档 Embedding 后聚类,相似文档自动归为一类。用于:

  • 新闻去重
  • 文档分类
  • 知识图谱构建

向量数据库

数据库特点适用场景
Chroma轻量、Python 原生原型开发
QdrantRust 高性能、支持过滤生产环境
Milvus分布式、亿级向量企业级
Pinecone托管 SaaS、免运维快速上线
pgvectorPostgreSQL 扩展已有 PG 的项目
Weaviate内置多模态多模态搜索
libsql / sqlite-vecSQLite 扩展嵌入式 / 边缘部署

批量 Embedding 的成本优化

百万级文档全量 embed 一次很贵。三招省钱:

  1. 批量 API——OpenAI / Cohere 都有 batch API,价格直接打五折,24 小时内出结果。
  2. 本地开源模型——BGE、GTE 在一张 4090 上跑 100 万段文本只要几小时,电费可忽略。
  3. 增量更新——文档没变就别重新 embed,加 hash 去重。

常见问题

Q: Embedding 维度越高越好吗

不是。高维度带来更高精度,但也带来更大存储和更慢检索。768-1536 维对大多数场景够用。

Q: 不同语言的 Embedding 能互相对比吗

可以,前提是用了多语言 Embedding 模型(如 BGE-m3、Jina v3)。这样中文"猫"和英文"cat"的向量距离会很近。

Q: Embedding 能理解代码吗

专门的代码 Embedding 模型(如 voyage-code-3、jina-embeddings-v2-code)可以。通用 Embedding 模型对代码的语义理解有限——会把所有 import os 都判定为高度相似。

Q: 换 Embedding 模型要重新跑全库吗

是。向量空间不通用,不同模型生成的向量不能混用。这也是为什么生产环境上选模型要慎重——重新 embed 一次百万级文档不便宜。

延伸阅读