Machine learning skip-gram模型不同训练对间的一致性

Machine learning skip-gram模型不同训练对间的一致性,machine-learning,nlp,word2vec,Machine Learning,Nlp,Word2vec,关于skip-gram模型,出于训练目的,输入是一个单词(一个热表示),输出是其上下文单词(多个热表示)。例如,(A,B),(A,C),(A,D) 我的问题是:当我们运行训练过程时,我们是一对一对地运行模型,还是只输入[A,B | C | D]呢 另一个问题是关于单词向量矩阵“M”(输入层和隐藏层之间的矩阵)。因为输入是一个热点,所以输入(size | V |)x M的结果是一个size | V |的向量,它是单词向量矩阵的一行。我的问题是:当我们运行反向传播时,似乎只有一行字向量矩阵被更新 这

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

另一个问题是关于单词向量矩阵“M”(输入层和隐藏层之间的矩阵)。因为输入是一个热点,所以输入(size | V |)x M的结果是一个size | V |的向量,它是单词向量矩阵的一行。我的问题是:当我们运行反向传播时,似乎只有一行字向量矩阵被更新

这是真的吗

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


谢谢

你可以把它看作是展示成对的,分别作为训练例子:(A,B),(A,C),(A,D)。算法就是这样定义的。(但是,一些实现实际上可能能够批量完成这些任务。)

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

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

请注意,虽然本文描述了如何使用焦点词来预测其附近的词,但发布的GoogleWord2vec.c代码(以及基于它的其他实现)在实现时使用上下文词来预测焦点词。本质上,这只是构建循环的一种不同方式(从而对训练对示例进行排序),我相信他们这样做是为了稍微提高CPU缓存效率

在您的场景中,(A,C)示例的后续backprop不一定“擦除”先前的(A,B)backprop–根据B&C的外部表示,它可能会加强它(在某些方式/方向/维度),或削弱它(在其他方式/方向/维度)。从本质上讲,就是在所有不同的例子之间反复的拔河,最终形成了权重的安排,以某种方式反映了A、B和C的一些有用的相似性

严格理解正在发生的事情的最佳方法是查看实现的源代码,例如或