本部分重点介绍了获取嵌入的两种常用方法:
- 降维
- 从更大的神经网络模型中提取嵌入
降维技术
有许多数学方法可用于在低维空间中捕获高维空间的重要结构。从理论上讲,这些方法中的任何一种都可以用于为机器学习系统创建嵌入。
例如,主成分分析 (PCA) 已用于创建词嵌入。给定一组实例(例如词袋向量),PCA 会尝试找到可合并为单个维度的高度相关维度。
将嵌入放入神经网络中进行训练
您可以在为目标任务训练神经网络时创建嵌入。这种方法可让您为特定系统很好地自定义嵌入,但可能需要比单独训练嵌入花费的时间更长。
一般来说,您可以在神经网络中创建大小为 d 的隐藏层,并将其指定为嵌入层,其中 d 既表示隐藏层中的节点数,也表示嵌入空间中的维度数。该嵌入层可与任何其他特征和隐藏层组合使用。与任何深度神经网络一样,参数将在训练期间进行优化,以尽量减少网络输出层中节点的损失。
回到食品推荐示例,我们的目标是根据用户当前喜爱的餐食来预测用户会喜欢的新餐食。首先,我们可以收集有关用户最喜欢的五种食物的其他数据。然后,我们可以将此任务建模为监督式学习问题。我们将这五种食物中的四种设置为特征数据,然后随机将第五种食物设置为模型要预测的正例标签,并使用 softmax 损失函数优化模型的预测结果。
在训练期间,神经网络模型将学习第一个隐藏层(用作嵌入层)中的节点的最佳权重。例如,如果模型在第一个隐藏层中包含三个节点,则可能会确定食品的三个最相关维度是三明治度、甜点度和液体度。图 12 显示了“热狗”的独热编码输入值转换为三维向量。
在训练过程中,嵌入层的权重将得到优化,以便类似示例的嵌入矢量彼此更近。嵌入层的各个维度(嵌入层中每个节点所代表的含义)很少像“甜度”或“流动性”那样理解。有时可以推断出它们的“含义”,但并非总是如此。
嵌入通常因任务而异,如果任务不同,嵌入也会不同。例如,由“素食与非素食”分类模型生成的嵌入可能具有两个维度:肉类内容和乳制品内容。与此同时,针对美式料理的早餐和晚餐分类器生成的嵌入可能具有略有不同的维度:卡路里含量、谷物含量和肉类含量。在“早餐与晚餐”分类器的嵌入空间中,“麦片”和“鸡蛋培根三明治”可能相距不远,但在“素食与非素食”分类器的嵌入空间中,它们可能相距甚远。
训练字词嵌入
在上一部分中,您探索了 word2vec 嵌入空间中语义关系的可视化表示。
Word2vec 是用于训练词嵌入的众多算法之一。它依赖于分布假设,将语义上相似的词映射到几何上接近的嵌入向量。分布假说指出,经常具有相同邻近词的词往往在语义上相似。“狗”和“猫”经常与“兽医”一词相近,这一事实反映了它们的语义相似性。正如语言学家约翰·费尔斯在 1957 年所说:“你可以通过一个词所处的环境来了解这个词。”
以下视频介绍了在训练神经网络的过程中,使用更简单的模型创建词嵌入的另一种方法:
静态嵌入与上下文嵌入
如上方视频中所讨论的,词嵌入的一个限制是,它们是静态的。每个字词在向量空间中都由一个点表示,即使它可能具有各种不同的含义,具体取决于它在句子中的使用方式。在上一个练习中,您发现将单词 orange 的语义相似度对应起来很难,因为它可以表示一种颜色或一种水果。
情境嵌入就是为了解决这些缺点而开发的。情境嵌入允许对同一字词使用多种表示法,每种表示法都包含有关该字词所用情境的信息。在上下文嵌入中,单词 orange 可能有两种不同的表征:一个捕获单词的“color”用法(如“MyFavorite sweater has orange stripes”(我最喜欢的毛衣有橙色条纹)等句子),而另一个则捕获单词“feater with orange stripes”(我最喜欢的毛衣有橙色条纹)的“faction”(水果)用法,如 orange 之前的 orange 中“