嵌套 (Embeddings):获取嵌套

您可以通过多种方式来获取嵌套,包括 Google 研发的世界一流算法。

标准降维技术

目前有很多在低维空间捕获高维空间重要结构的数学技术。理论上,这些技术都可以用来创建用于机器学习系统的嵌套。

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

Word2vec

Word2vec 是 Google 为了训练字词嵌套而研发的一种算法。Word2vec 基于分布假设,将语义上相似的字词映射到在几何图形上邻近的嵌套矢量。

分布假设指出经常具有相同相邻字词的字词往往在语义上相似。“狗”和“猫”这两个字词经常靠近“兽医”一词出现,这就可以说明这两个字词在语义上相似。正如语言学家约翰·弗斯 (John Firth) 在 1957 年所言:“观其伴而知其意”。

Word2Vec 通过训练神经网络来区分实际共同出现的多组字词与随机出现在一起的字词,从而充分利用此类上下文信息。输入层采用一种稀疏表示法用于组合一个目标字词与一个或多个上下文字词。这一输入层会连接到一个较小的隐藏层。

在其中一版算法中,系统通过用随机噪点字词替代目标字词来举出反面示例。在给出正面示例“the plane flies”的情况下,系统可能会换成“jogging”来创建对比鲜明的反面示例“the jogging flies”。

另一版算法通过将真实的目标字词与随机选择的上下文字词配对来创建反面示例。因此,系统可能会举出正面示例((the, plane)、(flies, plane))和反面示例((compiled, plane)、(who, plane)),然后通过学习分辨哪几对真正地在文字中一起出现。

不过,分类器不是上述任何一版算法的真正用途。在训练模型后,你得到的是一组嵌套。借助将输入层连接到隐藏层的权重,您可以将字词的稀疏表示映射到小型矢量。这类嵌套可在其他分类器中重复利用。

要详细了解 word2vec,请参阅 tensorflow.org 上的教程

将嵌套训练为大型模型的一部分

您也可以将嵌套作为目标任务的神经网络的一部分进行学习。通过这个方法,您可以为自己的特定系统量身定制嵌套,不过耗费的时间可能要比单独训练嵌套的时间长。

一般来说,当您具有稀疏数据(或您想要嵌套的密集数据)时,您可以创建一个嵌套单元,这个嵌套单元其实是大小为 d 的一个特殊类型的隐藏单元。此嵌套层可与任何其他特征和隐藏层组合。和任何 DNN 中一样,最终层将是要进行优化的损失函数。例如,假设我们正在执行协同过滤,目标是根据其他用户的兴趣预测某位用户的兴趣。我们可以将这个问题作为监督式学习问题进行建模,具体做法是随机选取(或留出)用户观看过的一小部分影片作为正类别标签,然后再优化 Softmax 损失。

图 5. 根据协同过滤数据学习影片嵌套的 DNN 架构示例。

再举一个例子,如果您想在 DNN 中针对房地产广告词创建嵌套层来预测房价,则您可以将训练数据中的已知房屋售价用作标签来优化 L2 损失。

在学习 d 维嵌套时,每一项都会映射到 d 维空间中的一个点,这样相似项就会在该空间内彼此邻近。图 6 说明了在嵌套层中学到的权重与几何视图之间的关系。输入节点与 d 维嵌套层中的节点之间的边的权重对应于 d 维坐标轴中每一维的坐标值。

嵌入层权重与嵌入的几何视图之间的关系说明图。

图 6. 嵌套层权重的几何视图。