一句话理解
Encoding(编码)是把信息从一种表示形式转换成另一种表示形式;Embedding(嵌入)是把对象映射成一个通常由模型学习得到、可以表达特征或语义的稠密向量。
Embedding 是 Encoding 的一种,但 Encoding 不一定是 Embedding。
最简洁的区分是:Encoding 解决“如何表示”,Embedding 进一步解决“如何表达关系和语义”。
同一个“猫”,四种表示
同一份信息可以根据任务使用不同表示。下面四种结果都能让计算机处理“猫”,但只有最后一种主动把语义关系放进表示空间。
| 方式 | 示例结果 | 主要用途 |
|---|---|---|
| UTF-8 | E7 8C AB | 存储与传输文本 |
| Token ID | 12345 | 让模型定位词表中的项目 |
| One-hot | [0, 0, 1, 0, ...] | 无歧义地标识一个类别 |
| Embedding | [0.21, -0.73, 0.44, ...] | 表达特征、语义与相似性 |
核心区别
| 对比维度 | Encoding | Embedding |
|---|---|---|
| 目的 | 让信息可存储、传输或计算 | 让对象的特征和关系可计算 |
| 输出 | 字节、编号、稀疏或稠密向量 | 通常是固定维度的稠密浮点向量 |
| 是否学习 | 不一定 | 通常通过训练学习 |
| 距离的含义 | 通常没有语义保证 | 常用距离、夹角或点积衡量相似性 |
| 能否还原 | 有些编码可以无损解码 | 通常无法精确恢复原始输入 |
为什么向量距离很重要?
UTF-8 字节或 Token ID 主要用于标识对象。编号 12345 和 12346 相邻,不代表对应的两个词语义相近。
Embedding 的价值在于它构造了一个可以比较的空间。训练良好时,“猫”和“狗”的向量通常比“猫”和“数据库”的向量更接近:
< distance(embedding("猫"), embedding("数据库"))
这使语义搜索、推荐、聚类和 RAG 检索可以转化为向量运算。不过,“接近”表达什么取决于训练数据、目标函数和使用的距离度量,并不是所有 embedding 都天然理解同一种语义。
在 Transformer 中,它们分别出现在哪里?
Transformer 语境里还有一个容易混淆的词:Encoder。Tokenizer、Embedding Layer 和 Transformer Encoder 位于不同阶段,承担不同职责。
输入
原始文本
“吃苹果”
ENCODING
Token IDs
Tokenizer 切分并编号
EMBEDDING
初始向量
Embedding Layer 查表
ENCODER
上下文向量
结合句中其它 token
Token ID 是离散编号,Embedding Layer 将编号转成初始向量,Transformer Encoder 再利用上下文更新这些向量。
例如,“苹果公司”和“吃苹果”可能从相同的“苹果”初始 embedding 开始;经过上下文编码后,最终表示会分别偏向“公司”和“水果”的含义。
如何判断一个表示是不是 Embedding?
- 01输出是否为稠密向量?
- 02向量是否通过模型或数据学习得到?
- 03向量之间的距离是否能表达某种相似性?
如果这些条件基本成立,这个表示通常可以称为 Embedding。记住最终结论:Encoding 让数据变得可计算,Embedding 让对象之间的关系变得可计算。
评论加载中...