了解Skip gram模型输出

时间:2017-03-22 23:57:27

标签: machine-learning neural-network word2vec

如果Skip gram Word2vec模型中隐藏和输出层之间的所有权重矩阵相同,那么输出如何相互不同?

2 个答案:

答案 0 :(得分:0)

本周我试图理解skip-gram时遇到了同样的问题。我经历过似乎是整个互联网而没有找到答案。幸运的是,我能够弄明白。

首先,您在问题中提到的输出确实相同。你是对的。但它仍然有意义,因为我们说 n 输出向量的原因是我们在skip-gram窗口中有n个单词。每个输出将与此窗口中的不同单词进行比较,我们将分别计算它们的错误。然后我们用反向传播更新矩阵。

我强烈建议您阅读这篇文章:word2vec Parameter Learning Explained。它将解释有关word2vec基础知识的所有问题。

干杯!

答案 1 :(得分:0)

遇到同样的问题,因为丑陋的学士回答了输出是一样的。作为补充,在https://iksinc.wordpress.com/tag/skip-gram-model/处有一个简单的例子,它看起来像这样(使用的精度较低):

# skip-gram learning example

import numpy as np

wi = np.array([[-0.094, -0.44, 0.31], [-0.491, -0.23, 0.065], [0.07, 0.17, -0.36], [0.1, 0.46, 0.08], [-0.23, -0.15, -0.04], [0.41, -0.19, -0.44], [0.18, 0.09, 0.28], [-0.05, 0.49, 0.26]])
wo = np.array([[0.02, 0.48, 0.43, 0.37, -0.36, -0.12, 0.27, -0.35], [-0.37, 0.42, -0.26, -0.15, 0.03, 0.35, -0.14, 0.13], [0.42, 0.36, 0.47, -0.02, -0.42, -0.44, 0.27, -0.45]])

xk = np.array([[0, 1, 0, 0, 0, 0, 0, 0]])
ht = np.dot(xk, wi)    
u0 = np.dot(ht, wo)
yk = np.exp(u0) / np.dot(np.exp(u0), np.exp(u0).transpose())

print yk

产生

[[ 0.14522021  0.09623482  0.11615102  0.11297892  0.15114373  0.12464769 0.12064487  0.1466973 ]]

然后yk和相应的真值向量之间的差异被反向传播以更新权重wi和wo。