### 理解Word2Vec的Skip-Gram结构和输出

我对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]

我会解释为’fox’是出现在’jumped’之前最可能的词(p=0.6),而’dog’是出现在它之后最可能的词(p=0.43)。

我的理解正确吗?还是完全错了?


回答:

根据这篇论文,您在两个方面的理解似乎都是正确的:

http://arxiv.org/abs/1411.2738

该论文详细解释了word2vec,同时保持了非常简单的描述 – 值得一读,以深入理解word2vec中使用的 neural net 架构。

  • 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]

然后更新权重矩阵以最小化此误差。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注