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

什么是嵌入?粗略地说,它们是一个特定单词的向量表示形式。接下来是我们如何生成它们?更重要的是,他们如何捕捉上下文?

Word2Vec是目前最流行的一种利用浅层神经网络学习词缀的技术。它是由Tomas Mikolov于2013年在谷歌开发的。

我们为什么需要它们?

考虑以下相似的句子:Have a good day 和 Have a great day。它们几乎意思相同。如果我们构建一个详尽的词汇表(我们称它为V),它将有V = {have, a, good, great, day}。

现在,让我们为V中的每个单词创建一个one -hot编码的向量,one -hot编码的向量的长度等于V(=5)的大小。除了索引处的元素表示词汇表中对应的单词外,我们将有一个0向量。这个特定的元素是1。下面的编码可以更好地解释这一点。

Have = [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维空间,其中每个单词占据一个维度,而与其他维度无关(没有沿着其他维度的投影)。这意味着“good”和“great”就像“day”和“have”一样不同,这是不对的。

我们的目标是让具有相似语境的词占据相近的空间位置。从数学上讲,这些向量之间的夹角的余弦值应该接近于1,即夹角接近于0。

以下是生成分布式表示的想法。直觉上,我们引入了一个词对另一个词的依赖关系。这个词的上下文中的词会得到更多的依赖。正如前面提到的,在one-hot编码表示中,所有的单词都是相互独立的。

Word2Vec如何工作?

Word2Vec是一种构造这种嵌入的方法。它可以使用两种方法(均涉及神经网络)获得:Skip Gram和Common Bag of Words(CBOW)

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

请注意,这里我们尝试使用单个上下文输入字来预测目标字(day )。更具体地说,我们使用输入字的one-hot编码,并测量与目标字(day)的one-hot编码相比的输出误差。 在预测目标词的过程中,我们学习目标词的矢量表示。

让我们深入了解实际架构。

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

让我们来了解一下图片中的各项:

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

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

隐藏层神经元只是将输入的权重和复制到下一层。没有像sigmoid, tanh或ReLU那样的激活。唯一的非线性是输出层的softmax计算。

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

上面的模型使用C上下文单词。当使用Wvn计算隐藏层输入时,我们取所有这些C上下文词输入的平均值。

因此,我们已经看到了如何使用上下文单词生成单词表示。但还有一种方法我们也可以这么做。我们可以使用目标词(我们希望生成其表示形式)来预测上下文,在此过程中,我们生成表示形式。另一种被称为Skip Gram model的变体就是这样做的。

Skip-Gram model:

这看起来像 multiple-context CBOW模型刚刚被翻转。在某种程度上,这是事实。

我们将目标词输入网络。模型输出C个概率分布。这是什么意思?

对于每个上下文位置,我们得到V概率的C概率分布,每个单词有1个。

在这两种情况下,网络都使用神经网络的反向传播来学习。

哪个好一些?

两者各有利弊。根据Mikolov的说法,Skip Gram可以很好地处理少量数据,并且可以很好地代表罕见的单词。

另一方面,CBOW更快,并且对更频繁的单词具有更好的表示。

最后

以上解释是非常基本的。它只是让您了解嵌入字是什么以及Word2Vec如何工作。

还有很多东西。例如,为了使算法在计算上更有效,使用诸如Hierarchical Softmax和Skip-Gram Negative Sampling之类的技巧