嵌入:获取嵌入

本部分介绍了获取嵌入的几种方式,以及如何将静态嵌入转换为上下文嵌入。

降维技术

有许多数学技术可在低维空间中捕获高维空间的重要结构。从理论上讲,这些技术中的任何一种都可以用于为机器学习系统创建嵌入。

例如,主成分分析 (PCA) 已用于创建词嵌入。在给定一组实例的情况下,例如词袋向量,PCA 会尝试查找高度相关且可以合并为单个维度的维度。

在神经网络中训练嵌入

您可以在为目标任务训练神经网络时创建嵌入。通过这个方法,您可以为特定系统量身定制嵌入,不过耗费的时间可能要比单独训练嵌入的时间长。

一般来说,您可以在神经网络中创建一个大小为 d 的隐藏层,并将其指定为嵌入层,其中 d 既表示隐藏层中的节点数,也表示嵌入空间中的维度数。此嵌入层可与任何其他特征和隐藏层组合。与任何深度神经网络一样,这些参数将在训练期间进行优化,以最大限度地减少网络输出层中的节点损失。

回到食物推荐示例,我们的目标是根据用户当前喜欢的食物来预测他们会喜欢的新食物。首先,我们可以针对用户最喜欢的五种食物编译更多数据。然后,我们可以将此任务建模为监督学习问题。我们将这五种食物中的四种设置为特征数据,然后随机将第五种食物设置为模型要预测的正标签,并使用 softmax 损失优化模型的预测结果。

在训练期间,神经网络模型将学习第一个隐藏层(充当嵌入层)中的节点的最佳权重。例如,如果模型在第一个隐藏层中包含三个节点,则可能会确定食物项的三个最相关维度是三明治度、甜点度和液体度。图 12 显示了将“热狗”的独热编码输入值转换为三维向量的过程。

图 12. 用于对热狗进行独热编码的神经网络。第一层是包含 5 个节点的输入层,每个节点都带有表示其所代表食物(罗宋汤、热狗、沙拉、沙瓦玛等)的图标。这些节点分别具有值 [0, 1, 0, ..., 0],表示“热狗”的独热编码。输入层连接到 3 个节点的嵌入层,其节点的值分别为 2.98、-0.75 和 0。嵌入层连接到 5 个节点的隐藏层,然后连接到 5 个节点的输出层。
图 12. 作为深度神经网络输入的 hot dog 独热编码。嵌入层会将独热编码转换为三维嵌入向量 [2.98, -0.75, 0]

在训练过程中,嵌入层的权重将得到优化,以便相似样本的嵌入向量彼此靠近。如前所述,实际模型为其嵌入选择的维度不太可能像本示例中那样直观或易于理解。

上下文嵌入

word2vec 静态嵌入向量的一个局限是,字词在不同上下文中可能有不同的含义。“Yeah”本身表示一种含义,但在“Yeah, right.”中表示相反的意思。“Post”可以表示“邮件”“放入邮件”“耳环托”“赛马结束时的标记”“后期制作”“支柱”“张贴通知”“驻扎警卫或士兵”或“之后”,以及其他可能的含义。

但是,对于静态嵌入,每个字词都由向量空间中的单个点表示,即使它可能具有多种含义。在上一个练习中,您发现了静态嵌入对于字词 orange(可以表示颜色或水果类型)的局限性。在仅使用一个静态嵌入的情况下,用 word2vec 数据集进行训练时,orange 将始终比 juice 更接近其他颜色。

上下文嵌入旨在解决此限制。借助上下文嵌入,字词可以通过多个嵌入来表示,这些嵌入会整合有关周围字词以及字词本身的信息。在数据集中,对于包含字词“Orange”的每个唯一句子,都会有不同的嵌入。

一些用于创建上下文嵌入的方法(例如 ELMo)会采用样本的静态嵌入(例如句子中某个字词的 word2vec 向量),并通过一个包含其周围字词信息的函数对其进行转换。这样即可生成上下文嵌入。

点击此处可详细了解上下文嵌入

  • 具体而言,对于 ELMo 模型,静态嵌入会与从其他层提取的嵌入进行汇总,这些嵌入会对句子的从前到后和从后到前处理方式进行编码。
  • BERT 模型会遮盖模型作为输入的序列的一部分。
  • Transformer 模型使用自注意力层来权衡序列中其他字词与每个字词的相关性。它们还会将位置嵌入矩阵(请参阅位置编码)中的相关列逐个元素添加到之前学习的每个 token 嵌入中,以生成输入嵌入,并将其馈送到模型的其余部分进行推理。 此输入嵌入是每个文本序列所特有的上下文嵌入。

虽然上述模型是语言模型,但上下文嵌入在其他生成任务(例如图片)中也很有用。与仅包含 RGB 值的原始静态嵌入相比,将马照片中的像素 RGB 值的嵌入与表示每个像素的位置矩阵和相邻像素的某些编码结合使用,可为模型提供更多信息,从而创建上下文嵌入。