Word2Vec笔记

单词嵌入是文档词汇表最流行的表示形式之一。 它能够捕获文档中单词的上下文,语义和句法相似性,与其他单词的关系等。

词嵌入到底是什么? 松散地说,它们是特定单词的向量表示。 话虽如此,接下来是如何生成它们? 更重要的是,它们如何捕获上下文?

Word2Vec是使用浅层神经网络学习词嵌入的最流行技术之一。 它是由Tomas Mikolov于2013年在Google上开发的。

让我们逐一解决这个问题。

我们为什么需要它们?

考虑以下类似的句子: Have a good day and Have a great day.。它们几乎没有不同的含义。如果我们构建详尽的词汇表(简称为V),则其V ={Have, a, good, great, day}.

现在,让我们为V中的每个单词创建一个单编码的矢量。我们的单编码的矢量的长度等于V的大小(= 5)。除了索引中代表词汇表中相应单词的元素之外,我们将有一个零向量。该特定元素将是一个。下面的编码可以更好地说明这一点。
有= [1,0,0,0,0]; a = [0,1,0,0,0]; good = [0,0,1,0,0]; great = [0,0,0,1,0]; day = [0,0,0,0,1]代表转置)
如果我们尝试可视化这些编码,我们可以想到一个5维空间,其中每个单词占据一个维,而与其余单词无关(沿着其他维没有投影)。这意味着“好”和“好”与“天”和“有”不同,这是不正确的。
我们的目标是使上下文相似的单词占据紧密的空间位置。在数学上,这些向量之间的角度的余弦值应接近1,即角度接近0。

这就是生成分布式表示的想法。 直观地,我们引入了一个单词对另一个单词的某种依赖性。 在该词的上下文中的词将在这种依赖性中获得更大的份额。 如前所述,在one hot encoding表示中,所有单词都彼此独立。

Word2Vec如何工作?

Word2Vec是一种构造此类嵌入的方法。 可以使用两种方法(都涉及神经网络)来获得它:Skip Gram and Common Bag Of Words (CBOW)。

CBOW模型:此方法将每个单词的上下文作为输入,并尝试预测与上下文相对应的单词。 考虑我们的例子:Have a great day.

让输入到神经网络这个词为:Great。 注意,这里我们试图使用单个上下文输入单词great预测目标单词(day)。 更具体地说,我们使用输入字的one hot encoding,并与目标字的one hot encoding(day)相比,测量输出误差。 在预测目标词的过程中,我们学习目标词的向量表示。
让我们更深入地研究实际架构。

Word2Vec笔记

输入或上下文词是一个大小为V的one hot矢量。隐藏层包含N个神经元,输出又是V长度矢量,其元素为softmax值。

让我们正确了解图片中的术语:

-Wvn是将输入x映射到隐藏层的权重矩阵(V * N维矩阵)
-W`nv是将隐藏层输出映射到最终输出层的权重矩阵(N * V维矩阵)

隐藏层神经元仅将输入的加权总和复制到下一层。 没有像乙状结肠,tanh或ReLU这样的**。 唯一的非线性是输出层中的softmax计算。

但是,以上模型使用单个上下文词来预测目标。 我们可以使用多个上下文词来做同样的事情。

Word2Vec笔记

上面的模型采用C个上下文词。 当Wvn用于计算隐藏层输入时,我们对所有这些C上下文词输入取平均值。
因此,我们已经看到了如何使用上下文单词生成单词表示形式。 但是,我们还有另一种方法可以做到这一点。 我们可以使用目标词(我们要生成其表示形式)来预测上下文,并在此过程中生成表示形式。 另一个名为Skip Gram模型的变体可以做到这一点。

Skip-gram
Word2Vec笔记
因此,在CBOW中,我们试图根据给定上下文词来预测焦点词,而在skip-gram中,我们试图做相反的尝试,就给定上下文词来预测上下文词(恰好相反的任务)。

因此,我们有一个维数为v(词汇量大小)的焦点词,它与大小为N的隐藏层相连,该隐藏层还将与softmax(每个softmax为v维度)相连,以预测上下文词。 因此,在输出层中,我们有k个softmax(上下文词的数量),可以认为是k个多类分类器。

在要训练的参数数量中,但在CBOW中,我们要训练一个softmax,而在skip-gram中,我们要有k softmax,因此skip-gram比CBOW花费更多的时间,因此在计算上更加昂贵。

Word2Vec笔记

给定句子:
“I will have orange juice and eggs for breakfast.”
窗口大小为2,如果目标单词为juice,则其相邻单词为(have,orange和egg)。 我们的输入和目标单词对将是(juice, have), (juice, orange), (juice, and), (juice, eggs).
还要注意,在示例窗口中,单词与源单词的接近度不起作用。 在训练过程中,橘子,和和鸡蛋也是如此。Word2Vec笔记

输入向量的维数将是1xV-其中V是词汇表中单词的数量-即单词的单次表示。单个隐藏层的尺寸为VxE,其中E是单词嵌入的大小,是一个超参数。隐藏层的输出的尺寸为1xE,我们将其馈入softmax层。输出层的尺寸将为1xV,其中向量中的每个值将是目标单词在该位置的概率得分。

CBOW和skip-gram之间的比较:

  1. CBOW的训练速度要比skip-gram快(因为CBOW只能训练一个softmax)。
  2. 对于经常出现的单词,CBOW更好(因为如果单词出现频率更高,它将需要训练更多的训练单词)。
  3. 跳过图的速度较慢,但​​适用于比CBOW少的数据量。
  4. 与CBOW相比,跳字对不经常出现的单词效果很好。
  5. CBOW比Skip-gram更简单(因为在CBOW中,我们只需要在给定许多上下文词的情况下预测一个焦点词)。

对于Skip-gram和CBOW,随着上下文词数量的增加,N维向量表示更好(通常N维接近200/300)。

对于Skip-gram,我们使用下面的权重矩阵来获取上下文词的向量。