MD 更新:2026/5/13

Embedding 向量

是什么

Embedding(嵌入)是将离散的高维符号(如单词、句子、图片、用户ID)映射到连续的低维稠密向量空间的技术。

"猫" → [0.23, -0.81, 0.45, 0.12, ...]  # 例:768维向量
"狗" → [0.21, -0.79, 0.43, 0.15, ...]  # 语义相近,向量相近
"汽车" → [-0.55, 0.32, -0.11, 0.88, ...]  # 语义不同,向量差异大

核心思想:语义相似的事物,在向量空间中距离相近


为什么需要 Embedding

问题:计算机无法直接处理符号

传统方法用 One-Hot 编码

词汇汽车
100
010
汽车001

缺陷:

  • 维度爆炸:词汇表10万词 → 10万维向量
  • 无语义信息:猫和狗的相似度 = 猫和汽车的相似度(都是0)
  • 稀疏低效:99.999% 的值都是0

解决:Embedding 的优势

特性One-HotEmbedding
维度词汇表大小(万级)固定低维(128~4096)
语义有(相似词向量相近)
稠密度极稀疏稠密
可计算不可做算术可做向量运算

核心原理

分布式假设

“一个词的含义由它的上下文决定” —— J.R. Firth, 1957

出现在相似上下文中的词,语义相近 → 向量相近。

向量空间的几何意义

国王 - 男人 + 女人 ≈ 女王
巴黎 - 法国 + 中国 ≈ 北京

向量之间的加减法可以捕捉语义关系,这是 Embedding 最神奇的特性。

相似度度量

# 余弦相似度(最常用)
similarity = cos(θ) = (A · B) / (|A| × |B|)

# 值域 [-1, 1],越接近1越相似

如何训练 Embedding

Word2Vec(2013,Mikolov)

两种训练方式:

CBOW(Continuous Bag of Words)

  • 输入:上下文词 → 预测:中心词
  • 适合:高频词

Skip-gram

  • 输入:中心词 → 预测:上下文词
  • 适合:低频词、罕见词
窗口大小=2,句子:"我 喜欢 吃 苹果 派"

Skip-gram 训练样本:
  (吃, 我), (吃, 喜欢), (吃, 苹果), (吃, 派)

GloVe(2014,Stanford)

结合全局共现矩阵统计,比 Word2Vec 更稳定。

BERT / Transformer 时代的 Embedding

现代 LLM 中,Embedding 不再是静态的:

  • 静态 Embedding(Word2Vec/GloVe):每个词只有一个固定向量
  • 动态 Embedding(BERT/GPT):同一个词在不同上下文中有不同向量
"苹果" 在 "我吃了一个苹果" → 水果语义向量
"苹果" 在 "苹果发布了新iPhone" → 公司语义向量

Embedding 的类型

类型示例应用场景
词 EmbeddingWord2Vec, GloVeNLP基础任务
句子 EmbeddingSentence-BERT语义搜索、相似度
文档 EmbeddingDoc2Vec文档分类、检索
图像 EmbeddingCLIP, ResNet特征图像搜索、多模态
用户 Embedding推荐系统个性化推荐
代码 EmbeddingCodeBERT代码搜索、补全

在 LLM 中的位置

输入文本

Token化(分词)

Token ID → Embedding 层(查表)

位置编码(Positional Encoding)叠加

Transformer 层(注意力机制处理)

输出

LLM 的第一层就是 Embedding 层,将 token ID 转换为向量,是整个模型的入口。

位置编码(Positional Encoding)

Transformer 本身无序列感知,需要额外注入位置信息:

最终向量 = Token Embedding + Positional Embedding

RAG 中的 Embedding

RAG(检索增强生成) 的核心就是 Embedding:

1. 建库阶段:文档 → Embedding → 存入向量数据库
2. 检索阶段:用户问题 → Embedding → 向量相似度搜索 → 找到相关文档
3. 生成阶段:相关文档 + 问题 → LLM → 回答

常用向量数据库:FaissChromaPineconeWeaviateMilvus


维度选择

维度代表模型特点
128~256轻量级速度快,精度低
768BERT-base平衡
1536OpenAI text-embedding-ada-002高精度
3072text-embedding-3-large最高精度

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


实践代码示例

# 使用 sentence-transformers 生成句子 Embedding
from sentence_transformers import SentenceTransformer

model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2')

sentences = ["我喜欢吃苹果", "我爱吃水果", "今天天气很好"]
embeddings = model.encode(sentences)  # shape: (3, 384)

# 计算相似度
from sklearn.metrics.pairwise import cosine_similarity
sim = cosine_similarity(embeddings)
# sim[0][1] ≈ 0.85(前两句相似)
# sim[0][2] ≈ 0.12(第一句和第三句不相似)
# 使用 OpenAI Embedding API
from openai import OpenAI

client = OpenAI()
response = client.embeddings.create(
    input="你好,世界",
    model="text-embedding-3-small"
)
vector = response.data[0].embedding  # 1536维向量

关键概念速查

概念解释
语义空间Embedding 向量所在的高维空间
余弦相似度衡量两向量夹角,与长度无关
欧氏距离衡量两向量的直线距离
ANN 搜索近似最近邻搜索,向量数据库的核心算法
微调 Embedding在特定领域数据上继续训练,提升领域相关性
量化将float32压缩为int8,减少存储,略损精度

相关概念