了解Word2Vec的Skip-Gram结构和输出

Bla*_*ard 5 nlp vector machine-learning word2vec

我的问题是双重的,但希望不要太复杂.这两个部分都特别适用于Word2Vec中的Skip-Gram模型:

  • 第一部分是关于结构:据我所知,Skip-Gram模型基于一个神经网络,一个输入权重矩阵W,一个大小为N的隐藏层,以及每个用于生成的C输出权重矩阵W' C输出向量之一.它是否正确?

  • 第二部分是关于输出向量:据我所知,每个输出向量的大小为V,是Softmax函数的结果.每个输出向量节点对应于词汇表中单词的索引,并且每个节点的值是对应单词出现在该上下文位置(对于给定输入单词)的概率.然而,即使训练实例是,目标输出矢量也不是单热编码的.它是否正确?

我想象的方式是以下几行(构成示例):

假设词汇['quick','fox','jumped','lazy','dog']和C = 1的上下文,并假设对于输入词'jumped',我看到两个输出向量看起来像这个:

[0.2 0.6 0.01 0.1 0.09]

[0.2 0.2 0.01 0.16 0.43 ]

我会将此解释为"狐狸"是最有可能在"跳跃"之前出现的词(p = 0.6),而"狗"最有可能出现在它之后(p = 0.43).

我有这个权利吗?还是我完全脱了?任何帮助表示赞赏.

小智 5

这是我在 SO 的第一个答案,所以这里是..

根据本文,您对这两部分的理解似乎都是正确的:

http://arxiv.org/abs/1411.2738

这篇论文详细解释了 word2vec,同时保持它非常简单——值得一读,以彻底了解 word2vec 中使用的神经网络架构。

  • Skip Gram 的结构确实使用单个神经网络,输入作为单热编码的目标词,预期输出作为单热编码的上下文词。在文本语料库上训练神经网络后,输入权重矩阵W 用作语料库中单词的输入向量表示和所有C 个输出(输出向量)共享的输出权重矩阵W'在问题的术语中,但要避免与接下来使用的输出向量表示混淆..),成为单词的输出向量表示。通常忽略输出向量表示,而输入向量表示W用作词嵌入。为了进入矩阵的维度,如果我们假设词汇量大小为V,隐藏层的大小为N,我们将有W作为(V,N)矩阵,每一行代表索引词的输入向量词汇。W'将是一个(N,V)矩阵,每列代表索引词的输出向量。这样我们就得到了单词的 N 维向量。
  • 正如您所提到的,每个输出(避免使用术语输出向量)的大小为V并且是 softmax 函数的结果,输出中的每个节点都给出了该词作为给定目标的上下文词出现的概率词,导致输出不是单热编码。但预期输出确实是单热编码,即在训练阶段,通过减去出现在该上下文位置的实际单词的单热编码向量来计算误差,来自神经网络输出,然后使用梯度下降更新权重。

参考你提到的例子,C =1,词汇['quick', 'fox', 'jumped', 'lazy', 'dog']

如果skip-gram 的输出是[0.2 0.6 0.01 0.1 0.09],其中正确的目标词是“fox”,那么误差计算如下:

[0 1 0 0 0] - [0.2 0.6 0.01 0.1 0.09] = [-0.2 0.4 -0.01 -0.1 -0.09]

并且更新权重矩阵以最小化该误差。

希望这可以帮助 !