跳过克模型的不同训练对之间的一致性

时间:2017-03-06 23:34:15

标签: machine-learning nlp word2vec

关于skip-gram模型,出于训练目的,输入是单词(单热表示),输出是其上下文单词(多个单热表示)。例如,(A,B),(A,C),(A,D) 我的问题是:当我们运行培训过程时,我们正在成对运行模型对,或者我们只是完全输入[A,B | C | D]?

另一个问题是关于单词矢量矩阵“M”(输入和隐藏层之间的矩阵)。由于输入是一热的,因此输入(尺寸| V |)×M的结果是尺寸| V |的矢量这是一个单词矢量矩阵的行。我的问题是:当我们运行反向传播时,似乎只更新了一行字向量矩阵。

这是真的吗?

如果是这种情况并且假设我们通过对(A,B),(A,C),(A,D)训练模型对,如何保持不同对的不同反向传播之间的一致性?例如,一旦完成对(A,B),就会更新字向量矩阵中的行。通过更新,(A,B)的错误将变得更少。然后我们运行对(A,C),选择相同的行并通过反向传播进行更新。现在,这次(A,C)的误差将变小。但是(A,B)的校正将被删除,这意味着(A,B)的反向传播被丢弃。我的理解在这里是否正确?

由于

1 个答案:

答案 0 :(得分:0)

您可以将其视为呈现对,单独作为训练示例:(A,B),(A,C),(A,D)。这就是算法的定义方式。 (但是,某些实现可能实际上可以批量执行它们。)

请注意,使用负采样时,“输出”仅为“一热”。 (在hierarchical-softmax中,预测一个字需要一组可变霍夫曼编码的输出节点,以具有特定的0/1值。)

是的,在skip-gram中,每个训练示例(例如“A预测B”)仅导致单个单词的向量(“行向量矩阵”)被更新,因为只涉及一个单词。

请注意,尽管本文描述了使用焦点词来预测其附近的单词,但作为实施问题,发布的Google word2vec.c代码(以及其上的其他实现)使用上下文单词来预测焦点单词。本质上,它只是一种不同的构造循环的方式(从而对训练对示例进行排序),我相信它们可以提高CPU缓存效率。

在您的场景中,(A,C)示例的后续反向提示不一定“擦除”先前的(A,B)反向支持 - 取决于B& B的外部表示。 C,它可能会加强它(在某些方面/方向/尺寸),或削弱它(以其他方式/方向/尺寸)。从根本上说,在所有不同的例子之间重复的拔河比赛,最终产生了一种权重的排列,它们在某种程度上反映了A,B和C的一些有用的相似之处。

严格理解所发生情况的最佳方法是查看实施的源代码,例如original Google word2vec.cPython implementation in gensim