Embeddings:获取嵌入

本部分介绍了获取嵌入的几种方法,以及如何将静态嵌入转换为情境嵌入。

降维技术

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

例如,主成分分析 (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 静态嵌入向量的一个限制是,字词在不同的情境中可能有不同的含义。“是的”本身有一种意思,但在“是吗”这个短语中,它却有相反的意思。“Post”可以指“邮件”“放入邮件”“耳环后盖”“马术比赛终点的标记”“后期制作”“支柱”“张贴通知”“驻守警卫或士兵”或“之后”,以及其他可能的含义。

但是,使用静态嵌入时,每个字词都由向量空间中的单个点表示,即使它可能具有多种含义。在上一个练习中,您发现了静态嵌入对于“橙色”一词的局限性,该词既可以表示一种颜色,也可以表示一种水果。如果只有一个静态嵌入,则在 word2vec 数据集上训练时,橙色始终会比果汁更接近其他颜色。

情境嵌入就是为了解决这一限制而开发的。借助情境嵌入,单词可以由多个嵌入表示,这些嵌入会纳入与周围字词以及该字词本身相关的信息。在数据集中,对于包含“橙色”一词的每个唯一句子,该词的嵌入都会有所不同。

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

点击此处详细了解内容相关嵌入

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

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