机器学习中的嵌入是什么?

2025年6月21日 | 阅读 7 分钟

在机器学习中,嵌入(Embeddings)为高维空间创建低维的潜在表示,用于查看和解释高维数据,同时保持数据点之间有意义的关系。因此,它们对于表示非结构化的类别数据(例如图像、单词或用户偏好)至关重要,这些数据存在于数百万维的空间中,可以通过能够强调其语义相似性的密集数值向量来很好地描述。

嵌入主要用于 自然语言处理(NLP) 中,将单词或句子投影到向量空间。Word2Vec、GloVe 和 FastText 等模型会生成词嵌入,其中语义上相似的单词在向量空间中具有相似的表示。例如,在嵌入空间中,“king”(国王)与不相关的词“car”(汽车)相距甚远,而与“queen”(王后)的距离则近得多。通过这种方式,这些模型可以理解单词之间的关系,并将这些知识应用到情感分析、机器翻译和推荐系统等实际应用中。

嵌入是推荐系统中常用的概念。例如,Netflix 或 Spotify 等平台使用嵌入来表示不同的用户与不同的电影、歌曲等,从而找到相似性并进行推荐。类似地,在计算机视觉领域,嵌入通过为图像相似性和面部识别任务提供图像特征空间的低维表示来提供帮助。

代码

输出

What are Embeddings in Machine Learning?

这些具有稀疏高基数(cardinality)的类别变量有很多值,但在每个观测中只有少数几个值。单词是一个常见的例子;单个推文中可能只包含半打单词,而英语则包含数十万个单词。词嵌入在自然语言处理的深度学习应用中起着至关重要的作用,但其他应用也是可能的。使用诸如员工 ID(约 250)、设施邮政编码(约 3000)和所有者姓名(约 35000)之类的变量,从洛杉矶县餐厅检查数据集中,可以将这些类别变量识别为稀疏类别变量。使用嵌入层可以有效地在神经网络中表示这些变量。

在一个电影评分从 0.5 到 5 星的系统中,目标是指示用户 ui 会给特定电影 mj 打多少分。mj 列是对评分列的转换,在减去均值后非常有用。userId 和 movieId 都可以被视为稀疏类别变量;这使得它们非常适合在模型中进行嵌入表示,因为存在大量唯一值。

代码

输出

 
138,493 distinct users rated 26,744 different movies (total ratings = 20,000,263)

模型

任务是导出一个接受用户 ui 和电影 mj 的模型。作为回报,该模型会生成一个 0.5 到 5 星的评分,代表该用户对该电影的预期评分。尽管 MovieLens 数据集将包含其他信息,例如电影标题、发行年份、类型和用户分配的标签,但该模型将专注于用户和电影的交互,而不包含任何额外信息。

代码

输出

What are Embeddings in Machine Learning?

对于推荐系统中存在的海量类别(例如用户和电影),独热编码(One-hot encoding)可能会变得不切实际。例如,如果数据集中有 165,237 个唯一项,则将单个实例表示为独热向量将是一个非常稀疏的向量,只有一个非零条目。如果将其乘以 2000 万个评分,将需要存储约 3 万亿个值,这超出了内存和计算的实际能力。它对于训练效率也很低,因为大部分计算都是零乘法。

嵌入层提供了一种比独热编码更广为人知的替代方案。嵌入层将离散实体(单词、用户、电影)映射到具有实数的密集向量,从而需要执行更少的巨大矩阵乘法。嵌入层充当一个简单的查找表,其中每个实体(电影)都由一个固定长度的向量定义,而不是处理巨大的稀疏向量。

What are Embeddings in Machine Learning?

代码

输出

What are Embeddings in Machine Learning?

现在我们将对此进行训练。

代码

为了对我们的模型有多好进行某种评估,拥有某种基线会很方便。在下面的单元格中,我们计算了一些简单基线的误差:预测全局平均评分和预测每部电影的平均评分。

代码

输出

What are Embeddings in Machine Learning?

要了解我们的模型有多好,最方便的方法是有一个可以与之比较的基线。在下一个单元格中,我们计算了两个简单基线对应的误差:全局平均评分和每部电影的平均评分。

代码

输出

What are Embeddings in Machine Learning?

代码

输出

What are Embeddings in Machine Learning?
What are Embeddings in Machine Learning?

用户 26556 对电影《飞机!》和《飞机 II:续集》给出了两个完美的五星评分。很棒的选择!也许他们也会喜欢《白头神探》系列——另一个由莱斯利·尼尔森主演的恶搞电影系列。

这位用户没有给我们提供太多线索来判断他们讨厌什么。与其从他们少数几个评分很低的电影中推断,似乎最好的指示是什么让这位用户不喜欢,可能是他们根本没有评分的电影。无论如何,我们将根据用户的评分历史,举出几部这位用户可能永远不会观看的电影的例子。

代码

输出

What are Embeddings in Machine Learning?

总的来说,非常明智!我们预计该用户对《白头神探》系列所有三部电影的评分将比数据集的平均评分高出一个多星,而我们选择的其他影片获得的预测评分则相对低于平均水平。