Understanding Embedding

理解嵌入表示:深度学习最核心的表征思想

综合整理自 Colah、Mikolov、Bengio 等人的研究成果

引言:为什么 Embedding 如此重要?

在深度学习领域,有一个思想几乎贯穿了所有成功的模型——学习数据的良好表示(representation)。而 Embedding(嵌入)正是这个思想最直接、最优雅的体现。

Embedding 的核心思想出人意料地简单:将离散的、高维的符号(如单词、用户 ID、商品编号)映射到一个连续的、低维的向量空间中,使得语义上相似的对象在这个空间中距离也相近。

一个 Embedding 就是一个参数化的映射函数 \(W: \text{symbols} \rightarrow \mathbb{R}^n\),它将离散符号映射到 \(n\) 维实数向量空间。这些向量并不是人工设计的——而是在优化某个任务的过程中自动学习得到的。

正如 Christopher Olah 在其经典博文中所说:"为什么神经网络如此有效?因为更好的数据表示方式可以从优化分层模型的过程中自然涌现。" Embedding 正是这种涌现最典型的案例。

从 One-Hot 到分布式表示

要理解 Embedding 为什么重要,首先要理解它替代了什么。在 Embedding 出现之前,最常见的离散数据表示方法是 one-hot 编码:为词汇表中的每个词分配一个独立的维度。

One-Hot 编码 "cat" "dog" "car" 1 0 0 0 ... 0 0 1 0 0 ... 0 0 0 1 0 ... 0 维度 = 词汇量(~50,000+) 任意两词距离相同 学习映射 Embedding 表示 "cat" "dog" "car" 0.2 -0.4 0.7 ... 0.3 -0.3 0.6 ... -0.5 0.8 -0.2 ... 维度 = 100~300(远小于词汇量) "cat" 和 "dog" 向量接近 cat dog car 向量空间

从稀疏的 one-hot 编码到稠密的 embedding 向量

One-hot 编码有两个根本问题:

  • 维度灾难:如果词汇表有 50,000 个词,每个词就是一个 50,000 维的向量——绝大多数位置都是 0,极其浪费。
  • 语义盲区:任何两个不同词的 one-hot 向量都是正交的,余弦相似度为 0。"cat" 和 "dog" 之间的距离与 "cat" 和 "airplane" 之间的距离完全相同——网络无法从表示本身获得任何语义信息。

Embedding 解决了这两个问题。1986 年,Hinton 在其开创性论文中首次提出了分布式表示(distributed representation)的概念:用一个稠密的低维向量来表示每个符号,向量的每个维度都参与编码,一个概念由多个维度共同表达。这就是 embedding 的思想根基。

Embedding 训练的核心思想

Embedding 最精妙的地方在于:向量不是人工设计的,而是通过解决某个代理任务(proxy task)自动学习得到的。学习的方式是反向传播——embedding 矩阵是模型参数的一部分,在训练过程中被不断优化。

这个思路源自语言学中的分布假说(Distributional Hypothesis),由 Harris (1954) 和 Firth (1957) 提出:

"You shall know a word by the company it keeps." —— J.R. Firth, 1957

一个词的含义由它出现的上下文决定。

具体来说,embedding 的训练通常遵循以下模式:

输入词 "cat" "sat" "on" Embedding W 查表 + 学习 θ 矩阵 (V × d) 可训练参数 稠密向量 [0.2, -0.4, ...] [0.1, 0.7, ...] [-0.3, 0.5, ...] 任务模块 R 预测下一个词 或判断有效性 输出 反向传播更新 W 的参数 W 的参数在训练中自动学习 → 语义相似的词获得相似的向量

Embedding 的训练范式:通过解决代理任务来学习表示

关键洞察:Embedding 中涌现出的良好属性(如语义相似性、类比关系)全部是副产品。我们从未显式地要求"让同义词的向量接近"——这是优化过程自发产生的结果。正如 Bengio et al. (2003) 在其开创性论文 A Neural Probabilistic Language Model 中解释的:模型需要将 "the cat sat on the mat" 的有效性泛化到 "the dog sat on the mat",而做到这一点最自然的方式就是让 "cat" 和 "dog" 拥有相似的向量表示。

这种泛化能力是指数级的:如果有 \(n\) 个可替换位置,每个位置有 \(k\) 个同义词,那么从一个句子就能泛化到 \(k^n\) 个语义等价的句子。

突破性方法:Word2Vec 与 GloVe

虽然词嵌入的概念早在 2003 年就被提出,但真正让它成为 NLP 标配的是 2013 年 Mikolov 等人在 Google 开发的 Word2Vec

CBOW(连续词袋模型)

w(t-2) w(t-1) w(t+1) w(t+2) 求和 投影 w(t) 用上下文预测中心词

Skip-gram

w(t) 隐层 投影 w(t-2) w(t-1) w(t+1) w(t+2) 用中心词预测上下文

Word2Vec 的两大创新使其成功:

  • 极简的架构:去掉了 Bengio 模型中的隐藏层,使训练速度提升了几个数量级,可以在数十亿词的语料库上训练。
  • 负采样(Negative Sampling):不需要对整个词汇表做 softmax,而是随机采样少量"负例"进行对比学习,大幅降低了计算成本。

Word2Vec 最令人惊叹的发现是向量算术(vector arithmetic)编码了语义类比关系:

$$ \vec{king} - \vec{man} + \vec{woman} \approx \vec{queen} $$
man king woman queen gender 方向 royalty

Word2Vec 的类比关系:向量差编码了语义维度 (Mikolov et al., 2013)

2014 年,Stanford 的 Pennington 等人提出了 GloVe(Global Vectors),将两种思路统一:既利用全局词共现矩阵的统计信息(类似传统的 LSA/SVD 方法),又像 Word2Vec 那样捕捉局部上下文窗口的关系。其核心目标函数是:

$$ J = \sum_{i,j=1}^{V} f(X_{ij})(w_i^T \tilde{w}_j + b_i + \tilde{b}_j - \log X_{ij})^2 $$

其中 \(X_{ij}\) 是词 \(i\) 和词 \(j\) 在上下文窗口中共同出现的次数。GloVe 的设计使得词向量的内积近似于它们共现概率的对数——这在理论上更加优雅。

Embedding 的神奇属性

Embedding 不仅仅是一种数据压缩手段。经过训练后,它展现出多种引人注目的属性:

语义聚类

语义相似的词自然聚集在向量空间的邻近区域。用 t-SNE 可视化后可以清晰看到:数字词聚在一起、职业词聚在一起、动物词聚在一起。(Turian et al., 2010)

类比推理

词间的关系被编码为一致的方向向量。king-man+woman=queen 只是冰山一角——国家/首都、动词时态、比较级等关系都能被捕获。(Mikolov et al., 2013)

迁移学习

在大规模语料上训练的 embedding 可以直接迁移到各种下游任务——命名实体识别、情感分析、语法分析——并显著提升性能。(Luong et al., 2013)

跨模态对齐

不同模态的数据(文本、图像、音频)可以被嵌入到同一个空间,实现跨模态检索和零样本学习。(Socher et al., 2013; Frome et al., 2013)

最重要的是——这些属性都是涌现的(emergent)。我们只是训练网络完成一个简单的预测任务,这些丰富的结构就自发地出现在了 embedding 空间中。这正是深度学习的力量:优化表示,表示便自然变好

共享表示与跨模态 Embedding

Embedding 的力量不仅限于单一类型的数据。深度学习的一个关键技巧是共享表示(shared representation):在任务 A 上学习好的表示,然后将其应用于任务 B——这就是预训练(pretraining)、迁移学习(transfer learning)和多任务学习(multi-task learning)的基础。

更进一步,我们可以将不同类型的数据映射到同一个表示空间中:

  • 双语 embedding:Socher et al. (2013) 将英语和中文的词嵌入到同一空间。已知互译词对齐后,未知的翻译对也会自然地靠近彼此——就像两种语言具有相似的"形状",对齐几个点后整体就重叠了。
  • 图像-文本 embedding:将图像和单词嵌入到同一空间中,使得狗的图像映射到 "dog" 词向量附近。即便从未见过某个类别(如 "cat"),模型也能把猫的图像映射到 "cat" 向量的邻域——实现零样本分类。(Socher et al., 2013; Frome et al., 2013)
  • CLIP:OpenAI 的 CLIP (2021) 将这一思想推到极致,用对比学习在 4 亿图文对上训练,实现了强大的零样本图像分类和跨模态检索能力。
图像编码器 (CNN/ViT) 文本编码器 (Transformer) 共享 Embedding 空间 dog img cat img car img "dog" "cat" "car" 同义聚类

跨模态 Embedding:将图像和文本嵌入到同一空间

Embedding 的发展历史

1954 — 分布假说

Harris 提出分布假说:语义相似的词出现在相似的上下文中。

1986 — 分布式表示

Hinton 提出分布式表示的概念,为 embedding 奠定理论基础。

1997 — LSA(潜在语义分析)

Deerwester et al. 使用 SVD 对词-文档共现矩阵降维,是最早的向量化表示方法之一。

2003 — 神经概率语言模型

Bengio et al. 发表 A Neural Probabilistic Language Model,首次将神经网络词嵌入引入语言建模,证明了学习到的表示具有泛化能力。这篇论文是现代 word embedding 的起源。

2008 — Collobert & Weston

提出可以在多个 NLP 任务间共享预训练的词嵌入,开启了 NLP 预训练的先河。

2013 — Word2Vec

Mikolov et al. 在 Google 提出 Word2Vec(CBOW 和 Skip-gram),通过极简架构和负采样技术实现大规模训练,发现了向量类比等惊人属性。Efficient Estimation of Word Representations in Vector SpaceDistributed Representations of Words and Phrases 两篇论文影响深远。

2014 — GloVe

Pennington et al. 在 Stanford 提出 GloVe,统一了全局统计和局部上下文两种方法。同年,Cho et al. 展示了短语级别的 embedding 用于机器翻译。

2014 — 序列到序列学习

Sutskever et al. 使用 LSTM encoder-decoder 进行机器翻译,将整个句子嵌入到一个固定向量中——证明 embedding 不仅可以表示单词,还可以表示句子。

2015 — fastText

Facebook 的 Bojanowski et al. 提出子词(subword)嵌入,利用字符 n-gram 构建词向量,能处理词汇表外的词。

2017 — Transformer 与注意力机制

Vaswani et al. 提出 Transformer 架构(Attention is All You Need),其中的 positional embedding 和 self-attention 机制彻底改变了序列建模,也为后续的上下文化嵌入奠定了基础。

2018 — ELMo 与 BERT

Peters et al. 提出 ELMo(基于双向 LSTM 的上下文化词嵌入);Devlin et al. 提出 BERT(基于 Transformer 的双向预训练)。Embedding 从静态变为上下文相关——同一个词在不同句子中获得不同的向量。

2020 — GPT-3

OpenAI 的 GPT-3 展示了大规模语言模型中 embedding 的涌现能力:1750 亿参数模型中学到的表示可以实现 few-shot 和 zero-shot 学习。

2021 — CLIP

Radford et al. 提出 CLIP,通过对比学习将图像和文本嵌入到共享空间,实现了强大的零样本视觉分类。

2022+ — 向量数据库与 RAG

随着大语言模型的兴起,text embedding 成为检索增强生成(RAG)的核心组件。Pinecone、Weaviate 等向量数据库生态蓬勃发展。

从静态 Embedding 到上下文化 Embedding

Word2Vec 和 GloVe 属于静态嵌入——每个词无论出现在什么语境中,都只有一个固定向量。但现实中,词义往往依赖上下文:"bank" 在 "river bank" 和 "bank account" 中含义完全不同。

2018 年是 embedding 发展的转折点。ELMo(Peters et al.)和 BERT(Devlin et al.)先后提出了上下文化嵌入的概念:embedding 不再是固定的查找表,而是由整个输入句子动态生成的。

静态 embedding 是一张查找表(\(W_\theta(w_n) = \theta_n\)),而上下文化 embedding 是一个函数(\(h_i = f(w_1, w_2, \ldots, w_n; i)\))——第 \(i\) 个词的表示取决于整个序列。

这一转变的意义是深远的。在 BERT 中,"bank" 在不同语境下会获得完全不同的向量表示。更重要的是,这些上下文化的表示可以作为通用特征,几乎在所有 NLP 任务上都取得了质的飞跃——BERT 在发布时刷新了 11 项 NLP 基准测试。

现代的大语言模型(GPT、LLaMA、Claude 等)本质上就是超大规模的上下文化 embedding 模型。它们的每一层都在不断地精炼和丰富 token 的表示,直到最终层产生足够丰富的表示来完成各种任务。

Embedding 的广泛应用

Embedding 的影响远远超出了 NLP。任何涉及离散符号或需要学习表示的领域,都在使用 embedding 的思想:

推荐系统

将用户和商品嵌入到同一空间,用向量相似度衡量偏好。YouTube、Spotify 等大规模推荐系统的核心。

知识图谱

TransE 等模型将实体和关系嵌入为向量,使知识推理变成向量运算。

分子科学

将蛋白质序列和分子结构嵌入为向量,用于药物发现和蛋白质结构预测(AlphaFold)。

代码理解

将代码片段嵌入为向量,用于代码搜索、克隆检测和自动补全。

语义搜索 / RAG

将文档和查询嵌入同一空间,通过向量相似度实现语义检索,是 RAG 系统的基础。

音频 / 图像

CNN 和 ViT 的中间层输出本质上就是图像 embedding。音频的 Wav2Vec 同理。

核心要点总结

1

Embedding 将离散符号映射为连续向量,让模型能够度量相似性并实现泛化

2

训练的核心是分布假说:通过预测上下文来学习表示,语义信息作为副产品涌现

3

Word2VecGloVe 证明了词向量可以大规模训练,并展现出类比推理等神奇属性

4

从静态到上下文化(ELMo → BERT → GPT),embedding 变得更加强大和灵活

5

跨模态 embedding(CLIP 等)将不同类型数据对齐到同一空间,实现零样本学习

6

Embedding 是深度学习最根本的思想之一:学习良好的表示是一切的基础

References

本文综合参考了以下研究成果: