深度学习----自然语言处理之Word2Vec原理

出处:《Word2Vec Tutorial - The Skip-Gram Model》
英文文章链接:http://mccormickml.com/2016/04/19/word2vec-tutorial-the-skip-gram-model/


Word2vec-Skip-Gram模型(翻译)


本教程介绍Word2vec的跳跃式神经网络体系结构。本教程的目的是跳过关于word2vec的通常的介绍性和抽象的见解,并深入了解更多的细节。具体来说,在这里,我开始研究跳跃式的神经网络模型。


模型

跳过的神经网络模型在其最基本的形式上实际上是非常简单的;我认为是所有的小调整和增强使得解释变得混乱。

让我们从一个高层次的洞察力开始,看看我们要去哪里。Word2vec使用了在机器学习中可能在其他地方见过的一个技巧。我们要训练一个简单的神经网络,用一个单一的隐藏层来执行一个特定的任务,但是我们实际上不打算用那个神经网络来完成我们训练它的任务!相反,我们的目标实际上只是学习隐藏层的权重-我们将看到这些权重实际上是我们试图学习的“单词向量”。

您可能已经看到的另一个技巧是在无监督的特征学习中,您训练一个自动编码器在隐藏层中压缩输入向量,并将其解压回输出层中的原始向量。在训练之后,你去掉输出层(解压缩步骤),只使用隐藏层-这是一个学习好的图像特征的技巧,而没有标记训练数据。

假任务

所以现在我们需要讨论这个“假的”任务,我们要构建神经网络来执行,然后我们稍后再讨论这个问题是如何间接地给出我们真正想要的那些单词向量的。

我们将训练神经网络来完成以下工作。给定句子中间的一个特定单词(输入词),看看旁边的单词,随机挑选一个单词。网络将告诉我们词汇中每个单词成为我们选择的“附近单词”的概率。

当我说“附近”时,算法实际上有一个“窗口大小”参数。一个典型的窗口大小可能是5,意思是后面5个单词,前面5个单词(总共10个)。

输出概率将与在输入单词附近找到每个词汇表单词的可能性有关。例如,如果你给受过训练的网络输入“苏维埃”这个词,“联盟”和“俄罗斯”这样的词的输出概率将比“西瓜”和“袋鼠”这样的无关词的输出概率高得多。

我们将训练神经网络通过给它提供训练文档中找到的单词对来做到这一点。下面的例子显示了一些训练样本(单词对),我们从句子“快速的棕色狐狸跳过懒惰的狗”。我在这个例子中使用了一个2的小窗口大小。蓝色突出显示的单词是输入词。

Training Data

网络将从每个配对出现的次数中学习统计信息。因此,例如,该网络可能会得到更多的培训样本(“苏联”,“联盟”),而不是它的(“苏联”,“Sasquatch”)。当训练结束时,如果你给它“苏联”这个词作为输入,那么它输出的“联盟”或“俄罗斯”的概率要比“Sasquatch”高得多。


模型细节

那么这一切是如何体现出来的呢?

首先,你知道你不能像给神经网络提供文本字符串那样给一个单词提供信息,所以我们需要一种将单词表示到网络中的方法。为了做到这一点,我们首先从我们的培训文档中建立一个单词词汇表-假设我们有一个10,000个独特单词的词汇表。

我们将把“蚂蚁”这样的输入词表示为一个热向量。这个向量将有10,000个成分(在我们的词汇表中每个单词都有一个),我们将在单词“ant”的对应位置放置一个“1”,在所有其他位置放置一个“0”。

网络的输出是一个向量(也包含10,000个组件),其中包含,对于我们词汇表中的每一个单词,随机选择的附近单词的概率就是该词汇表单词。

这是我们的神经网络的结构。

Skip-gram Neural Network Architecture

隐层神经元没有激活功能,输出神经元使用Softmax。我们稍后再谈这个。

什么时候培训这个网络上的字对,输入是一个单热向量,表示输入字和训练输出。也是一个单热向量。表示输出字。但是当你在输入字上计算训练过的网络时,输出向量实际上是一个概率分布(也就是一串浮点值,单热向量)

隐层

对于我们的例子,我们将说我们正在学习有300个特征的单词向量。因此,隐藏层将由一个包含10,000行(词汇表中每个单词一行)和300列(每个隐藏神经元一列)的权重矩阵表示。

300个功能是google在他们发布的模型中使用的,他们在google新闻数据集上进行了培训(您可以从 这里)特性的数量是一个“超参数”,您只需调优到您的应用程序(即,尝试不同的值,看看什么才是最好的结果)。

如果你看看在这个权重矩阵中,这些实际上是我们的单词向量!

Hidden Layer Weight Matrix

所以,所有这些的最终目标就是学习这个隐藏的层权重矩阵-当我们完成时,我们将抛出输出层!

让我们回到我们将要训练的这个模型的定义上。

现在,你可能会问自己:“这个热向量几乎都是零…。那会有什么影响呢?“如果你把一个1×10,000的单热向量乘以一个10,000 x 300矩阵,它就会有效地选择与“1”对应的矩阵行。这里有一个小例子给你一个视觉。

Effect of matrix multiplication with a one-hot vector

这意味着这个模型的隐藏层实际上只是一个查找表。隐藏层的输出只是输入字的“字向量”。


输出层

这,这个,那,那个1 x 300“蚂蚁”的字向量然后被输入到输出层。输出层是一个Softmax回归分类器。有一个关于Softmax回归的深度教程这里,但是它的要点是,每个输出神经元(在我们的词汇表中每个单词有一个!)将产生一个0到1之间的输出,所有这些输出值的总和将达到1。

具体而言,每个输出神经元都有一个权重向量,它与隐藏层中的单词向量相乘,然后应用该函数。exp(x)结果。最后,为了使输出之和达到1,我们将这个结果除以10,000个输出节点

下面是计算“CAR”一词输出神经元输出的例子。

Behavior of the output neuron

注意,神经网络不知道输出字相对于输入字的偏移量。它 学习输入之前的单词和后面的单词的不同概率集。为了理解它的含义,让我们说在我们的训练语料库中, 每一次事件在“约克”一词的前面是“新”一词。也就是说,至少根据培训数据,“New”在“York”附近的概率是100%。然而,如果我们以“York”附近的10个单词为例,随机选择其中一个单词,那么它的概率是“新的”。 不是100%;你可能选择了附近的其他单词之一。

直觉

好的,你准备好对这个网络有一个令人兴奋的洞察力了吗?

如果两个不同的单词具有非常相似的“上下文”(即它们周围可能出现的单词),那么我们的模型需要对这两个单词输出非常相似的结果。网络输出这两个单词的类似上下文预测的一种方法是单词向量是相似的。。因此,如果两个单词有相似的上下文,那么我们的网络就有动机去学习这两个单词的相似的单词向量!塔达!

对于两个词来说,有相似的语境意味着什么?我想你可以预料到,像“智能”和“聪明”这样的同义词会有非常相似的上下文。或者相关的词,如“引擎”和“传输”,可能也有类似的上下文。

这也可以为你处理堵塞-网络可能会学习类似的词向量“蚂蚁”和“蚂蚁”,因为这些应该有相似的上下文。


出处:《Word2Vec Tutorial - The Skip-Gram Model》
英文文章链接:http://mccormickml.com/2016/04/19/word2vec-tutorial-the-skip-gram-model/

猜你喜欢

转载自blog.csdn.net/Sakura55/article/details/81603409