为什么word2vec为每个单词使用2个表示?

时间:2015-04-01 01:44:41

标签: word2vec

我试图理解为什么word2vec的skipgram模型对每个单词(隐藏表示,即单词嵌入)和输出表示(也称为上下文单词嵌入)有2个表示。这只是为了一般性,上下文可以是任何东西(不仅仅是单词)或是否有更基本的原因

4 个答案:

答案 0 :(得分:10)

我建议你阅读这篇关于Word2Vec的文章: http://arxiv.org/pdf/1402.3722v1.pdf

他们直截了当地说明为什么在脚注中有两个表示:一个单词不可能出现在它自己的上下文中,所以你想要最小化概率p(w | w)。但是如果你使用w作为上下文而不是作为中心词使用相同的向量,如果要将单词嵌入保持在单位圆中,则不能最小化p(w | w)(通过点积计算)。

但这只是一种直觉,我不知道是否有任何明确的理由......

恕我直言,你使用不同表现形式的真正原因是因为你操纵了不同性质的实体。 "狗"因为上下文不应被视为" dog"作为一个中心词,因为他们不是。你基本上操纵出现的大矩阵(单词,上下文),试图最大化实际发生的这些对的概率。理论上你可以使用bigrams作为上下文,试图最大化例如(word =" for",context ="最大化")的概率,你可以为&分配一个矢量表示。 #34;最大化"。我们不这样做是因为会有太多的表示要计算,而且我们会有一个非常稀疏的矩阵,但我认为这个想法就在这里:我们使用" 1-gram"因为上下文只是我们可以使用的所有上下文的特例。

我是怎么看的,如果错了,请更正!

答案 1 :(得分:1)

word2vec模型可以被认为是具有一个隐藏层且没有非线性激活的简化神经网络模型。给出一个单词的模型试图预测它出现的上下文单词。

因为它是一个神经网络,它需要输入,输出和目标函数。输入和输出只是单词的一个热编码,目标函数是交叉熵损失,输出处有softmax激活。

隐藏权重矩阵的输入与单热编码输入相乘,为每个单词选择一个唯一列。类似地,隐藏到输出矩阵证明它可以解释为对应于每个上下文字的行(相同的单热编码输出在此处起作用)。

答案 2 :(得分:1)

查看第2页的脚注:http://arxiv.org/pdf/1402.3722v1.pdf

这为这个问题提供了一个非常明确的直觉。

但您也可以只使用一个向量来表示单词。 检查一下(斯坦福CS 224n)https://youtu.be/ERibwqs9p38?t=2064

我不确定如何实施(视频也没有解释)。

答案 3 :(得分:0)

每个单词有两种矢量表示。

  1. 当特定单词“ W”被视为中心单词(c),而邻居窗口单词充当上下文单词(O)时,第一个矢量表示出现。 enter image description here
  2. 第二矢量表示是将相同的单词“ W”视为其他相邻单词的“ 邻居窗口上下文单词”。

enter image description here