到底什么是 Embedding,为什么深度学习模型都要引入它?

作者:JC2026.11.03 22:14浏览量:0

简介:Embedding 是深度学习中将离散符号转换为连续向量的核心技术。本文从定义、产生背景、学习方式、矩阵表示、典型应用场景以及与相关概念的区别等角度,系统解释 Embedding 为什么能刻画语义相似性,以及在工程实践中需要关注哪些问题,帮助读者建立完整、可落地的理解。

一、Embedding 是什么?

在深度学习中,Embedding 通常被翻译为“向量表示”“嵌入表示”或“词向量”。它的核心定义可以概括为:

Embedding 是一种将离散、稀疏的符号对象映射为连续、稠密的低维向量的表示方法。

这里的“符号对象”可以是:

  • 自然语言中的词、字、子词;
  • 推荐系统中的用户、商品、品类;
  • 图结构中的节点、边;
  • 搜索系统中的查询词、文档;
  • 行为序列中的事件、动作。

映射之后,每个对象不再只是一个编号或独热向量,而是一个由浮点数组成的向量,例如:

  1. 猫 -> [0.91, 0.82, 0.13]
  2. 狗 -> [0.87, 0.79, 0.15]
  3. 汽车 -> [0.18, 0.11, 0.92]

从技术视角看,Embedding 是一种可学习的参数化映射。
从业务视角看,Embedding 是一种把现实世界对象转化为模型可计算表示的方式。
从使用视角看,Embedding 通常表现为“查表操作”:输入一个 ID,输出一个向量。

因此,Embedding 并不是某一种特定的神经网络结构,而是一种表示思想。它广泛应用于语言模型、推荐系统、图像分类、知识图谱等各类深度学习任务中。


二、为什么需要 Embedding?

要理解 Embedding 的价值,需要先回到一个基础问题:模型只能处理数值。

神经网络的计算基础是矩阵乘法、加法、非线性激活和梯度更新。这些运算都要求输入是数值。但现实世界中的很多对象并不是天然的数值,例如:

  • 文本中的词;
  • 用户 ID;
  • 商品 ID;
  • 类目名称;
  • 行为类型。

因此,在将现实对象输入模型之前,必须先进行数值化表示。

2.1 简单编号的问题

一种最直观的做法是给每个对象一个唯一编号,例如:

  1. 猫 -> 1
  2. 狗 -> 2
  3. 汽车 -> 3

但这种方式存在明显缺陷。

第一,编号之间的大小关系会产生误导。
模型可能认为“汽车”的编号 3 大于“猫”的编号 1,从而产生错误的计算语义。但事实上,3 并不比 1 更“高级”或更“重要”。

第二,编号无法表达对象之间的相似性。
在这种表示下,“猫”和“狗”的距离与“猫”和“汽车”的距离没有本质区别。模型无法得知“猫”和“狗”在语义上更接近。

第三,编号表示难以泛化。
模型看到编号 1 时,只能学习到“编号 1 的行为”。它不知道编号 1 和编号 2 是否有相似上下文,也无法将编号 1 的知识迁移到编号 2 上。

2.2 独热编码的问题

另一种常见方式是独热编码。例如,词表大小为 10000 时,“猫”可以表示为:

  1. [1, 0, 0, 0, ..., 0]

独热编码解决了“编号大小产生误导”的问题,但仍然存在两个主要缺陷:

  1. 维度极高且稀疏。当词表达到百万级时,每个向量都有百万维,其中绝大部分是 0,计算和存储成本都很高。
  2. 任意两个词之间距离相同。独热向量之间的内积为 0,欧氏距离也完全相同。因此它仍然无法表示“猫”和“狗”更相似这一语义关系。

2.3 Embedding 的改进

Embedding 的核心改进在于,它不再把每个对象视为孤立的符号,而是用一个可学习的连续向量表示。这个向量的每一维并没有人工规定的含义,但通过训练,可以逐步获得语义结构。

例如,经过训练后:

  1. 猫 -> [0.91, 0.82, 0.13]
  2. 狗 -> [0.87, 0.79, 0.15]
  3. 汽车 -> [0.18, 0.11, 0.92]

可以看到,“猫”和“狗”的向量在空间中更接近,而它们与“汽车”的向量距离较远。这样,对象的相似性就被转化为几何空间中的距离关系。

因此,Embedding 的核心价值可以归纳为三点:

  • 将离散对象转化为连续数值;
  • 用向量距离表达对象之间的相似性;
  • 通过训练自动学习表示,而不是人工设计特征。

三、Embedding 是如何学习出来的?

Embedding 不是人工规定的向量,而是模型训练过程中自动学习出来的参数。

3.1 基本思想

Embedding 学习的基本假设可以概括为:

在相似上下文中出现的对象,应该具有更接近的向量表示。

这一思想来自分布语义假设。例如,在大量语料中:

  1. 猫会喵喵叫
  2. 狗会汪汪叫
  3. 猫喜欢睡觉
  4. 狗喜欢睡觉

“猫”和“狗”经常出现在类似的句子结构和语义环境中,而“汽车”则很少出现在这些语境中。因此,模型会逐步学习到:

  1. cat_embedding ≈ dog_embedding
  2. cat_embedding 远离 car_embedding

3.2 学习方式

Embedding 通常不是单独训练的,而是作为整个神经网络的一部分,通过反向传播同步更新。

以语言模型为例,假设任务是给定上下文预测目标词。模型的大致流程如下:

  1. 输入一个词的 ID;
  2. 通过 Embedding 层查表得到向量;
  3. 将向量输入后续网络;
  4. 网络输出预测结果;
  5. 计算损失;
  6. 反向传播更新网络参数,同时更新 Embedding 表中的向量。

经过大量样本训练后,语义相近的词会因为经常出现在相似任务中而获得相似的向量。

3.3 目标是让距离有意义

需要特别说明的是,Embedding 向量中的某个具体维度通常没有人工可解释的含义。例如,第 3 维是 0.13,并不直接表示“动物程度”或“大小”。真正有意义的是向量之间的相对关系,例如:

  • 余弦相似度;
  • 欧氏距离;
  • 内积。

模型通过训练,使这些距离尽量反映对象之间的语义或业务关系。


四、Embedding 的矩阵表示

在实际工程中,Embedding 通常表示为一个矩阵。

假设词表大小为 V,Embedding 维度为 d,那么 Embedding 矩阵可以写作:

  1. E ∈ R^(V × d)

其中:

  • V:词表大小,表示一共有多少个需要表示的对象;
  • d:每个对象的向量维度,例如 128、256、768 等。

每一行对应一个对象的向量:

  1. v_i = E[i]

当模型输入一个对象的 ID 时,Embedding 层的操作本质上是:

  1. 输入 ID i
  2. 输出 E[i]

这是一种典型的查表操作。

在深度学习框架中,这通常通过 Embedding 层实现。伪代码如下:

  1. # 通用伪代码,不绑定具体框架
  2. embedding_matrix = create_matrix(vocab_size, embedding_dim)
  3. def embedding_lookup(input_ids):
  4. return embedding_matrix[input_ids]

训练开始时,Embedding 矩阵通常使用随机初始化。随着模型训练,矩阵中的数值会不断调整,最终形成具有语义结构的向量空间。


五、Embedding 有哪些典型应用场景?

Embedding 的应用范围非常广泛,并不局限于自然语言处理。

5.1 自然语言处理

在语言模型中,Embedding 用于将词、子词或字符转换为向量。词嵌入是最经典的形式。

例如,在文本分类任务中,输入句子:

  1. 猫在睡觉

模型会先将其拆分为多个词,再通过 Embedding 层得到每个词的向量,最后输入到后续网络中。

Embedding 还可以用于:

  • 语义相似度计算;
  • 文本检索;
  • 机器翻译;
  • 命名实体识别;
  • 情感分析。

在这些任务中,Embedding 的质量往往直接影响最终效果。

5.2 推荐系统

在推荐系统中,Embedding 用于表示用户和物品。

例如,用户 A 和用户 B 的行为历史相似,那么他们的 Embedding 向量应该更接近。物品 X 和物品 Y 经常被同一批用户点击,那么它们的 Embedding 也应该更接近。

通过 Embedding,推荐系统可以把用户和物品映射到同一个向量空间中,然后使用最近邻搜索找到与用户最匹配的物品。

这种方式相比传统协同过滤,能够更好地捕捉复杂行为模式,也更容易与深度学习模型结合。

5.3 图像与多模态学习

在图像任务中,Embedding 可以表示图像、类别或视觉概念。

例如,在图像分类中,类别标签也可以通过 Embedding 表示。在图文匹配任务中,文本和图像可以分别映射到同一向量空间,使语义相似的图文对向量更接近。

这种将不同模态对象映射到统一空间中的做法,在跨模态检索、图文生成等场景中非常重要。

5.4 图与知识表示

在知识图谱中,实体和关系可以通过 Embedding 表示。例如:

  1. 猫 -[属于]-> 动物

实体“猫”和“动物”可以通过 Embedding 学习到语义层级关系。基于 Embedding 的知识表示可以用于链接预测、图谱补全和问答系统。

5.5 搜索与召回

在搜索系统中,查询词和文档标题可以分别进行 Embedding。通过计算查询向量与文档向量的相似度,可以召回语义相关但字面不匹配的内容。

例如,用户搜索“怎样让猫不抓沙发”,即使某篇文档没有完全出现这些词,只要其语义向量与查询向量相近,也可能被召回。

这种方式可以显著提升搜索系统的召回能力和语义理解能力。


六、Embedding 与相关概念的区别

在实际使用中,Embedding 经常与其他概念一起出现。为了避免混淆,需要明确它们之间的区别。

6.1 Embedding 与独热编码

独热编码是静态、稀疏、高维的表示。
Embedding 是可学习、稠密、低维的表示。

独热编码无法表达相似性,Embedding 可以表达相似性。
独热编码不需要训练,Embedding 需要通过训练获得。

6.2 Embedding 与特征向量

特征向量通常指人工设计的特征表示,例如年龄、价格、点击次数等。
Embedding 通常指自动学习得到的表示。

特征向量中的每一维通常有明确含义,Embedding 中的每一维通常没有明确含义。
特征向量不一定可学习,Embedding 是可学习参数。

6.3 Embedding 与编码器输出

在一些模型中,Embedding 特指最底层的查表向量,而编码器输出是经过多层网络计算后的上下文表示。

例如,在 Transformer 类模型中:

  • 输入词首先通过 Embedding 层得到初始向量;
  • 经过多层自注意力机制后,得到上下文相关的表示。

因此,一个词在不同句子中可能有不同的编码器输出,但它在 Embedding 层中只有一个基础向量。


七、使用 Embedding 时需要注意哪些问题?

在实际工程中使用 Embedding 时,需要关注多个方面。

7.1 维度选择

Embedding 维度 d 是一个重要的超参数。

维度过低,表达能力不足,可能无法充分捕捉对象之间的差异。
维度过高,会增加模型参数量和计算成本,也容易导致过拟合。

常见的维度范围从几十到上千不等,需要根据数据规模、任务复杂度和模型能力进行选择。

7.2 词表大小与未登录对象

Embedding 矩阵的大小与词表大小成正比。当词表过大时,Embedding 参数量会显著增加。

同时,实际使用中经常出现未在词表中出现过的对象,即未登录对象。常见处理方式包括:

  • 使用一个固定的未知对象向量;
  • 使用子词或字符级表示;
  • 使用哈希映射到固定桶。

这些策略需要在覆盖率与模型复杂度之间进行权衡。

7.3 冷启动问题

在推荐系统或用户建模中,新用户或新物品没有足够的行为数据,其 Embedding 通常难以训练。

冷启动问题是 Embedding 工程实践中的典型挑战。常见缓解方式包括:

  • 使用内容特征初始化 Embedding;
  • 使用全局统计特征;
  • 使用元学习或快速适配策略。

7.4 训练稳定性

Embedding 矩阵通常参数量较大,且输入稀疏。训练时可能遇到以下问题:

  • 部分向量更新频率很低;
  • 梯度稀疏;
  • 过拟合。

可以使用正则化、Dropout、梯度裁剪等方式提高训练稳定性。

7.5 偏置与公平性

Embedding 会从训练数据中学习到统计规律,也可能继承数据中的偏置。

例如,词嵌入可能放大某些社会刻板印象。因此,在敏感场景中使用 Embedding 时,需要关注偏置评估和缓解。


八、总结

Embedding 是深度学习中将离散世界转换为连续计算空间的核心表示方法。

它的本质不是简单地给对象一个数字编号,而是将对象映射为一个可学习的连续向量。通过训练,语义或业务上相近的对象会被映射到向量空间中相近的位置,从而使模型能够利用几何距离来理解对象之间的关系。

从形式上看,Embedding 是一个参数矩阵,输入对象 ID,输出对应向量。
从本质上看,Embedding 是一种表示学习机制,是连接现实对象与模型计算的重要桥梁。

在自然语言处理、推荐系统、搜索召回、图像与多模态学习、知识表示等场景中,Embedding 都发挥着基础性作用。理解 Embedding 的定义、原理和工程注意事项,是进一步学习深度学习模型和构建实际系统的重要前提。