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)相比,测量输出误差。 在预测目标词的过程中,我们学习目标词的向量表示。
让我们更深入地研究实际架构。
输入或上下文词是一个大小为V的one hot矢量。隐藏层包含N个神经元,输出又是V长度矢量,其元素为softmax值。
让我们正确了解图片中的术语:
-Wvn是将输入x映射到隐藏层的权重矩阵(V * N维矩阵)
-W`nv是将隐藏层输出映射到最终输出层的权重矩阵(N * V维矩阵)
隐藏层神经元仅将输入的加权总和复制到下一层。 没有像乙状结肠,tanh或ReLU这样的**。 唯一的非线性是输出层中的softmax计算。
但是,以上模型使用单个上下文词来预测目标。 我们可以使用多个上下文词来做同样的事情。
上面的模型采用C个上下文词。 当Wvn用于计算隐藏层输入时,我们对所有这些C上下文词输入取平均值。
因此,我们已经看到了如何使用上下文单词生成单词表示形式。 但是,我们还有另一种方法可以做到这一点。 我们可以使用目标词(我们要生成其表示形式)来预测上下文,并在此过程中生成表示形式。 另一个名为Skip Gram模型的变体可以做到这一点。
Skip-gram
因此,在CBOW中,我们试图根据给定上下文词来预测焦点词,而在skip-gram中,我们试图做相反的尝试,就给定上下文词来预测上下文词(恰好相反的任务)。
因此,我们有一个维数为v(词汇量大小)的焦点词,它与大小为N的隐藏层相连,该隐藏层还将与softmax(每个softmax为v维度)相连,以预测上下文词。 因此,在输出层中,我们有k个softmax(上下文词的数量),可以认为是k个多类分类器。
在要训练的参数数量中,但在CBOW中,我们要训练一个softmax,而在skip-gram中,我们要有k softmax,因此skip-gram比CBOW花费更多的时间,因此在计算上更加昂贵。
给定句子:
“I will have orange juice and eggs for breakfast.”
窗口大小为2,如果目标单词为juice,则其相邻单词为(have,orange和egg)。 我们的输入和目标单词对将是(juice, have), (juice, orange), (juice, and), (juice, eggs).
还要注意,在示例窗口中,单词与源单词的接近度不起作用。 在训练过程中,橘子,和和鸡蛋也是如此。
输入向量的维数将是1xV-其中V是词汇表中单词的数量-即单词的单次表示。单个隐藏层的尺寸为VxE,其中E是单词嵌入的大小,是一个超参数。隐藏层的输出的尺寸为1xE,我们将其馈入softmax层。输出层的尺寸将为1xV,其中向量中的每个值将是目标单词在该位置的概率得分。
CBOW和skip-gram之间的比较:
- CBOW的训练速度要比skip-gram快(因为CBOW只能训练一个softmax)。
- 对于经常出现的单词,CBOW更好(因为如果单词出现频率更高,它将需要训练更多的训练单词)。
- 跳过图的速度较慢,但适用于比CBOW少的数据量。
- 与CBOW相比,跳字对不经常出现的单词效果很好。
- CBOW比Skip-gram更简单(因为在CBOW中,我们只需要在给定许多上下文词的情况下预测一个焦点词)。
对于Skip-gram和CBOW,随着上下文词数量的增加,N维向量表示更好(通常N维接近200/300)。
对于Skip-gram,我们使用下面的权重矩阵来获取上下文词的向量。