一句话定位
Embedding(嵌入)就是把文字、图片等内容变成一串数字向量,让 AI 能"理解"含义并做相似度计算。
什么是 Embedding?
先想一个问题:你怎么判断"苹果手机"和"iPhone"说的是同一个东西?
人类靠经验。AI 呢?它需要一个数学答案。
Embedding 就是给每个词或句子分配一个高维向量——一长串数字。比如:
"苹果手机" → [0.82, -0.31, 0.67, ..., 0.15] (1536 个数字)
"iPhone" → [0.80, -0.29, 0.65, ..., 0.12] (同样 1536 个数字)
这两个向量长得非常像。向量之间的距离越近,语义越相似。
类比理解
把 Embedding 想象成一张**“语义地图"上的坐标**:
- “猫"和"狗"在地图上靠得近
- “猫"和"汽车"离得很远
- “国王 - 男人 + 女人 ≈ 女王”——这就是著名的 Word2Vec 向量运算
你不需要理解为什么是这些数字,就像你不需要理解 GPS 坐标的经纬度是怎么算出来的,只需要知道靠近的就是相似的。
维度是多少?
不同模型维度不同:
| 模型 | 维度 |
|---|---|
| text-embedding-3-small | 1536 |
| text-embedding-3-large | 3072 |
| text-embedding-ada-002 | 1536 |
| BGE-M3 | 1024 |
维度越高,表达力越强,但占用的空间和计算量也越大。
Embedding 有什么用?
1. 语义搜索
传统的搜索靠关键词匹配——搜"苹果手机"不会匹配到"iPhone”。
Embedding 搜索先把查询和文档都变成向量,然后算相似度。这样"苹果手机"和"iPhone"会被认为是相似的,搜哪个都能找到。
2. RAG(检索增强生成)
知识库检索的第一步就是把你的问题和文档都 Embedding,然后找最接近的文档给 AI 当参考。没有 Embedding,RAG 就跑不起来。
3. 推荐系统
抖音的"猜你喜欢”、淘宝的"相关推荐”,底层也是 Embedding。你的行为和历史偏好被映射到向量空间,系统推荐和你向量最接近的内容。
4. 去重和聚类
判断两篇新闻是不是在说同一件事?比较它们的 Embedding 向量相似度就行。新闻去重、话题聚类都用这个思路。
5. 异常检测
正常数据的 Embedding 会聚集在一起,异常值会离群。金融欺诈检测、工业缺陷检测都可以用。
怎么用 Embedding?
步骤一:调用 Embedding API
以 OpenAI 为例:
curl https://api.openai.com/v1/embeddings \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"input": "苹果手机真好用的", "model": "text-embedding-3-small"}'
返回一个包含向量的 JSON。
步骤二:存到向量数据库
把向量存到专门的地方,方便后续快速查找:
| 数据库 | 特点 |
|---|---|
| Pinecone | 全托管,上手最快 |
| Qdrant | Rust 编写,性能强 |
| Milvus | 开源,适合大规模 |
| Chroma | Python 友好,本地开发首选 |
步骤三:做相似度检索
查的时候,把查询文本也 Embedding,然后在向量库里找最近的邻居:
import chromadb
client = chromadb.Client()
collection = client.get_or_create_collection("documents")
# 存文档
collection.add(
documents=["苹果发布了新手机", "今天天气不错"],
ids=["doc1", "doc2"]
)
# 查相似
results = collection.query(
query_texts=["iPhone"],
n_results=1
)
print(results) # 返回最相似的文档
本地 Embedding 方案
不想用 API?也可以用本地模型:
- Sentence-Transformers(Python):最流行的开源方案
- BGE(百度):中文效果特别好
- GTE(阿里):多语言支持
- llama.cpp embedding:C++ 轻量实现
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('BAAI/bge-small-zh-v1.5')
embeddings = model.encode(["苹果手机", "iPhone"])
Embedding vs 传统搜索的区别
| 特性 | 传统搜索 | Embedding 搜索 |
|---|---|---|
| 匹配方式 | 关键词完全匹配 | 语义相似度 |
| 理解同义词 | ❌ | ✅ |
| 理解上下文 | ❌ | ✅ |
| 处理模糊查询 | ❌ | ✅ |
| 速度 | 极快 | 较快 |
| 精度 | 精确匹配高 | 语义匹配高 |
常见问题
Q: Embedding 能替代传统搜索吗?
不用替代。两者互补。精确查找用传统搜索,语义理解用 Embedding。很多系统同时使用两种方案。
Q: Embedding 会泄露隐私吗?
向量本身不是原文,但研究表明可以通过逆向攻击恢复部分原文。敏感数据做 Embedding 时要注意风险。
Q: 中文和英文 Embedding 有什么不同?
中文需要专门的模型(如 BGE-zh),因为中英文的字面结构差异很大。用英文模型处理中文效果会差很多。
总结
Embedding 是 AI 时代的"翻译官"——把人类语言翻译成机器能理解的数字。它是语义搜索、RAG、推荐系统的基石。
理解 Embedding,你就理解了大部分现代 AI 应用背后最核心的技术原理。
想动手试试?用 Chroma 本地建一个向量搜索引擎,5 分钟就能跑起来。