16

我一直在阅读很多关于 NLP 的论文,并且遇到了很多模型。我得到了 SVD 模型并以 2-D 表示它,但我仍然不知道如何通过为 word2vec/skip-gram 模型提供语料库来制作词向量?它也是每个单词的共现矩阵表示吗?你能通过一个示例语料库来解释它:

Hello, my name is John.
John works in Google.
Google has the best search engine. 

基本上,skip gram 如何转换John为向量?

4

4 回答 4

10

我认为您需要阅读有关培训过程的论文。基本上,向量的值是经过训练的神经网络的节点值。

我试图阅读原始论文,但我认为新荣的论文“word2vec Parameter Learning Explained”有更详细的解释。

于 2015-09-12T18:09:11.920 回答
9

通过使用神经网络进行自动编码的示例可以很容易地理解主要概念。您训练神经网络通过较小的中间层将信息从输入层传递到输出层。

在传统的自动编码器中,您有一个大小为 N 的输入向量、一个长度为 M<N 的中间层和一个大小为 N 的输出层。您一次只希望在输入层中打开一个单元,然后训练网络在输出层复制与输入层相同的单元。

训练成功完成后,您将看到神经网络将信息从输入层传输到输出层,它进行了自我调整,使得每个输入单元在中间层都有相应的向量表示。

稍微简化一下,在 word2vec 的上下文中,您的输入和输出向量或多或少以相同的方式工作,除了在您提交给网络的样本中,输入层中打开的单元与打开的单元不同。在输出层。
事实上,您训练网络从您的语料库中挑选附近(不一定相邻)的单词对并将它们提交给网络。
输入和输出向量的大小等于您提供给网络的词汇的大小。
您的输入向量仅打开了一个单元(对应于所选对的第一个单词),输出向量打开了一个单元(对应于所选对的第二个单词)。

于 2016-05-31T20:52:36.107 回答
2

首先,您通常不会将 SVD 与 Skip-Gram 模型一起使用,因为 Skip-Gram 是基于神经网络的。您使用 SVD 是因为您想减少词向量的维度(例如:用于 2D 或 3D 空间上的可视化),但在神经网络中,您使用您选择的维度构建嵌入矩阵。如果您使用共现矩阵构建嵌入矩阵,则使用 SVD。

具有共现矩阵的向量表示

我在这里写了一篇关于这个的文章。

考虑以下两句话:“所有闪闪发光的不是金子”+“一切都很好,结局很好”

共现矩阵为:

在此处输入图像描述

使用共现矩阵,每一行都是一个词的词向量。但是,正如您在上面构建的矩阵中看到的那样,每行有 10 列。这意味着词向量是 10 维的,无法在 2D 或 3D 空间中可视化。所以我们运行 SVD 将其减少到 2 维:

在此处输入图像描述

现在词向量是二维的,它们可以在二维空间中可视化:

在此处输入图像描述

但是,将词向量缩减为 2D 矩阵会导致有意义的数据大量丢失,这就是为什么不应该将其缩减太多的原因。

让我们再举一个例子:achievesuccess。假设他们有 10 维的词向量:

在此处输入图像描述

由于achievesuccess传达相似的含义,它们的向量表示是相似的。注意它们的相似值和色带图案。但是,由于这些是 10 维向量,因此无法可视化。所以我们运行 SVD 将维度减少到 3D,并将它们可视化:

在此处输入图像描述

词向量中的每个值代表词在向量空间中的位置。相似的词将具有相似的向量,因此,将在向量空间中彼此封闭。

使用 Skip-Gram 的向量表示

我在这里写了一篇关于它的文章。

Skip-Gram 使用神经网络,因此不使用 SVD,因为您可以在第一次构建网络时将词向量的维度指定为超参数(如果您确实需要可视化,那么我们使用一种称为 t-SNE 的特殊技术,但不是 SVD)。

Skip-Gram 结构如下:

在此处输入图像描述

使用 Skip-Gram,N随机初始化维词向量。有两个嵌入矩阵:输入权重矩阵W_input和输出权重矩阵W_output

让我们W_input举个例子。假设您感兴趣的词是passesshould。由于随机初始化的权重矩阵是 3 维的,因此可以将它们可视化:

在此处输入图像描述

这些权重矩阵(W_inputW_ouput)通过预测中心词的相邻词进行优化,并以最小化预测误差的方式更新权重。为中心词的每个上下文词计算预测,并将它们的预测误差相加以计算权重梯度

在此处输入图像描述

权重矩阵更新方程为:

在此处输入图像描述

这些更新应用于语料库中的每个训练样本(因为 Word2Vec 使用随机梯度下降)。

Vanilla Skip-Gram vs 负采样

上面的 Skip-Gram 插图假设我们使用 vanilla Skip-Gram。在现实生活中,我们不使用 vanilla Skip-Gram,因为它的计算成本很高。相反,我们使用一种改编形式的 Skip-Gram,称为负采样

于 2019-06-01T00:45:44.473 回答
2

对于可能还想知道“词向量到底是什么意思”的当前读者,就像当时的 OP 一样:如http://cs224d.stanford.edu/lecture_notes/LectureNotes1.pdf所述,词向量具有维度n,并且n“是一个任意大小,它定义了我们嵌入空间的大小。” 也就是说,这个词向量没有具体的含义。它只是这个词可能具有的某些特性的抽象表示,我们可以用它来区分词。

实际上,要直接回答“如何将单词转换为向量表示”的原始问题,通常只是在初始化时随机化单词嵌入的向量值,并通过迭代进行改进。

这在深度学习/神经网络中很常见,在这些网络中,自己创建网络的人通常不太了解这些值究竟代表什么。网络本身应该通过学习逐渐找出价值。它们只是抽象地代表某物并区分事物。一个例子是 AlphaGo,DeepMind 团队不可能解释向量中的每个值代表什么。它只是工作。

于 2017-02-16T18:42:42.097 回答