🏠 首页 攻略 Embedding(嵌入)是什么?AI 理解语义的核心技术

Embedding(嵌入)是什么?AI 理解语义的核心技术

把文字、图片变成数字向量,让机器理解语义。AI 搜索、推荐系统、相似性匹配都离不开它。

一句话定位

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-small1536
text-embedding-3-large3072
text-embedding-ada-0021536
BGE-M31024

维度越高,表达力越强,但占用的空间和计算量也越大。

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全托管,上手最快
QdrantRust 编写,性能强
Milvus开源,适合大规模
ChromaPython 友好,本地开发首选

步骤三:做相似度检索

查的时候,把查询文本也 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 分钟就能跑起来。