Embedding 与向量表示

是什么

Embedding 是将离散的符号(文字、Token、图片)映射为连续的高维数值向量的技术。

人类用文字理解世界,机器用向量理解世界。Embedding 就是连接两者的桥梁。

一句话:Embedding 让计算机能够用数学方式衡量”两个东西有多像”。

"国王" → [0.12, -0.45, 0.78, ..., 0.33]  (一个 768 维的向量)
"王后" → [0.13, -0.44, 0.76, ..., 0.35]  (非常相似!)
"自行车" → [-0.67, 0.23, -0.11, ..., 0.89](完全不同)

为什么需要 Embedding

计算机不懂文字

计算机只能做数学运算。如果不把文字转成数字,模型无法处理任何自然语言任务。

传统编码的问题

One-Hot 编码(最朴素的方案):

词表: [猫, 狗, 鱼, 鸟]

猫 → [1, 0, 0, 0]
狗 → [0, 1, 0, 0]
鱼 → [0, 0, 1, 0]
鸟 → [0, 0, 0, 1]

问题:

  • 维度爆炸:词表有 10 万个词,每个向量就是 10 万维,绝大部分是 0
  • 语义丢失:猫和狗的距离 = 猫和鱼的距离 = 猫和桌子的距离。所有词彼此等距,完全没有语义关系

Embedding 的解法

Embedding 将每个词压缩到一个低维稠密向量(如 768 维),并且语义相似的词在向量空间中距离更近

"猫" 和 "狗" → 向量距离 0.15(近,都是宠物)
"猫" 和 "汽车" → 向量距离 0.92(远,毫无关系)

关键概念辨析

Token 向量、词向量、句向量

这三个概念容易混淆,但含义不同:

概念粒度说明典型维度
Token 向量子词级LLM 内部的基本表示单元。一个 Token 可能是一个字、半个词、一个标点4096-12288
词向量(Word Embedding)词级给每个完整的词一个固定向量。代表:Word2Vec、GloVe100-300
句向量(Sentence Embedding)句子/段落级将整个句子压缩为一个向量。代表:Sentence-BERT、text-embedding-ada-002768-1536

上下文无关 vs 上下文相关

词向量(Word2Vec 等)—— 上下文无关

"bank"(银行)→ [0.5, 0.3, ...]
"bank"(河岸)→ [0.5, 0.3, ...]  ← 同一个向量!无法区分歧义

每个词有且只有一个固定向量,无论它出现在什么上下文中。

Token 向量(Transformer 等)—— 上下文相关

"I went to the bank to deposit money" 中的 "bank" → 偏向"银行"的向量
"I sat on the bank of the river" 中的 "bank" → 偏向"河岸"的向量

同一个词在不同上下文中会生成不同的向量——这就是 Transformer 自注意力机制的威力。


Embedding 的生成方式

1. 查表(Token Embedding Layer)

LLM 内部最基础的 Embedding 方式:

Token ID → 查 Embedding 矩阵 → 得到向量

Embedding 矩阵大小 = 词表大小 × 向量维度
例:32000 × 4096 = 约 1.3 亿参数(仅 Embedding 层)

这个矩阵在训练过程中学习得到——初始是随机的,随着训练不断调整,语义相似的 Token 会自然聚到一起。

2. 专用 Embedding 模型

当需要将任意长度的文本(句子、段落、文档)压缩为一个向量时,使用专用 Embedding 模型:

模型开发方维度特点
text-embedding-ada-002OpenAI1536API 调用,通用能力强
text-embedding-3-largeOpenAI3072更高精度,支持维度截断
BGE-largeBAAI(智源)1024开源,中文能力强
E5-mistral-7b-instructMicrosoft4096基于 LLM 的重量级方案
Sentence-BERTUKP Lab768开源经典

这些模型的核心作用是为 RAG 系统 提供语义检索能力。


向量空间的性质

语义相似度

两个向量越”近”,语义越相似。最常用的距离度量:

余弦相似度(Cosine Similarity)

cos(A, B) = (A · B) / (|A| × |B|)

范围:-1 到 1
1  = 完全相同方向(语义一致)
0  = 正交(无关)
-1 = 完全相反方向(语义对立)

为什么用余弦而不是欧氏距离? 余弦只关注方向,不关注长度,对向量的缩放不敏感,更适合衡量”语义方向”。

向量算术

经典发现(Word2Vec 时代):

向量("国王") - 向量("男人") + 向量("女人") ≈ 向量("王后")

这说明 Embedding 空间中捕捉到了”性别”这个语义维度。类似地:

向量("巴黎") - 向量("法国") + 向量("日本") ≈ 向量("东京")

向量空间具有线性可加性,语义关系可以通过向量运算表达。


在 AI 系统中的应用

1. LLM 内部表示

每个 Token 在 LLM 内部都是一个向量,流经每一层 Transformer Block 后不断被修改、丰富语义:

输入层 Token 向量:只含基本语义
          ↓
    第 1 层:融入局部上下文
          ↓
    第 N/2 层:融入句法、语义结构
          ↓
    第 N 层:融入全局理解和任务信息

2. 语义检索(RAG)

将用户查询和文档库都转为向量,通过余弦相似度找最相关的文档:

用户查询: "如何配置 Docker 网络?"
          ↓ Embedding 模型
查询向量: [0.23, -0.11, ...]
          ↓ 在向量数据库中搜索最近邻
匹配文档: "Docker 网络模式配置指南"(相似度 0.92)

这是 RAG 系统的核心环节,详见 05-RAG 原理

3. 聚类与分类

将大量文本 Embedding 后,可以用聚类算法(K-Means 等)自动发现主题分组,或用向量作为特征训练分类器。

4. 推荐系统

将用户和内容都映射到同一向量空间,通过距离计算实现个性化推荐。


向量数据库

当文档量达到百万级以上时,暴力搜索所有向量不现实。向量数据库提供高效的近似最近邻(ANN)搜索:

数据库类型特点
Pinecone云服务全托管,开箱即用
Weaviate自托管/云开源,支持混合搜索
Milvus自托管开源,大规模高性能
ChromaDB本地/嵌入式轻量,适合开发与原型
pgvectorPostgreSQL 扩展无需新数据库,直接在 PG 中使用
FAISS库(非数据库)Meta 出品,纯计算库,极快

核心索引算法:

  • IVF(Inverted File Index):先聚类,再在最近的几个簇中精确搜索
  • HNSW(Hierarchical Navigable Small World):构建多层图结构,快速导航到目标
  • PQ(Product Quantization):压缩向量减少内存,牺牲少量精度

延伸阅读