word2vec模型之Skip-Gram Model

本文介绍一种基于神经网络结构的Word2Vec模型,Word2Vec是目前NLP领域的基础知识,这里仅对Word2Vec模型中的Skip-Gram模型进行详细介绍 。

The Model and The Fake Task

Skip-Gram神经网络模型是一种非常简单的神经网络结构,是一个仅有一个Hidden Layer的神经网络结构 。Skip-Gram模型的训练过程可以视作一个“Fake Task(伪任务)”,为何称之为“Fake Task”?是因为训练该模型的目的并不是将训练好的模型用于任何的分类任务,而是为了学习得到隐层的权重矩阵,而通过这些矩阵我们会得到想要的单词的特征向量,总体框架如下图所示 。下面详细介绍这个Skip-Gram模型的训练过程 。
word2vec模型之Skip-Gram Model

给定一个特定的word作为输入,我们从该word的附近随机挑选一个word,该网络模型会告诉我们词汇表中的每个单词出现在“附近”的概率 。这里的“附近”指的是在特定window size范围内 。输出概率与在输入词附近找到每个单词的可能性有关 。这里 , 我们使用文本中指定window size内的word pair(inputword,outputword)来训练神经网络模型 。word pairs的获取方式如下图所示 。
word2vec模型之Skip-Gram Model

这里详细介绍一下Skip-Gram模型的训练过程 。首先,神经网络模型只接受数值型的输入,故不能直接将每个单词直接输入到一个神经网络中 , 故而需要一种针对神经网络模型的单词表示方式,为此需要针对训练集中的所有不同的单词构建一个词汇表(vocabulary) , 然后将词汇表中的每个单词以One-Hot编码的方式进行表示 。比如,现在有一个大小为10000的词汇表,我们需要为每个单词构建一个One-Hot向量,要求每个单词对应的当前单词的位置为1,其他所有位置为0 , 因此我们会得到10000个长度为10000的向量,其中每个向量都只有一个位置为1 。神经网络的输出是一个10000维的向量,表示针对输入单词 , 词汇表中所有的单词出现在输入单词附近的预测概率 。如下图所示:
word2vec模型之Skip-Gram Model

上述的神经网络结构隐层中的神经元没有激活函数,但输出层的每个神经元使用了softmax函数 。训练的过程使用word pair(inputword,outputword),输入是一个One-Hot的向量,输出的也是一个表示输出单词的One-Hot的向量 。但是当在一个输入词在训练好的网络上计算时 , 输出的向量实际上是一个概率分布,并不是一个One-Hot向量 。因为每个输出的单元使用了Softmax,且没有激活函数 。

The Hidden Layer

同样的针对上述问题,有10000个单词,假设需要为每个单词学习一个300维的向量,那么隐层可以由一个10000*300的矩阵来表示(300个神经元,每个神经元都有一个10000维的权重向量),如下图所示 。
word2vec模型之Skip-Gram Model

竖着看这个隐层的权重矩阵,每一列对应一个神经元中的参数向量 , 而如果横着看这个权重矩阵 , 每一行就是一个300维的向量,而这这就是我们需要通过学习得来的词向量!也就是说,10000个单词的向量表示就是这个10000*300的矩阵 , 每行对应一个单词的向量表示 。那么Skip-Gram最终的目的就是学习这个隐层的权重矩阵 。而为什么针对词汇表里的单词要进行One-Hot编码,这里解释一下 。如下图所示,如果我们用一个One-Hot向量乘以这个权重矩阵 , 那么得出的向量结果就是对应单词的特征表示 。这意味着这个模型的隐层实际上只是作为一个查找表,而隐层的输出则是输入的单词的“词向量(word vector)” 。
word2vec模型之Skip-Gram Model

The Output Layer

输出层为softmax回归分类器 , 每个输出神经元(词汇表中的每个单词都有一个对应的输出神经元)将产生0到1之间的输出,所有这些输出值的总和将等于1 。具体来说,每个输出神经元都有一个权重向量,它将权重向量与隐层中的向量相乘 , 然后将指数函数应用于结果 。最后,为了使输出之和达到1,我们将这个结果除以来自所有10,000个输出节点的结果之和 。如下图所示:
word2vec模型之Skip-Gram Model

如果两个不同的单词有非常相似的“上下文”(也就是说,它们周围可能出现什么单词),那么该模型应当为这两个单词输出非常相似的结果 。网络输出这两个单词相似上下文预测的一种表达形式就是这两个单词的单词向量相似 。换言之,如果两个单词有相似的上下文,那么该网络就有能力为这两个单词出学习相似的单词向量!

The Challenge

以上部分介绍了Skip-Gram模型的具体实现思路,接下来会针对Skip-Gram在实际训练中的一些问题进行优化 。通过分析上述的Skip-Gram神经网络模型 , 可以发现一个问题,由于需要为每个单词学习一个固定长度的向量表示,因此以上面的例子为例 , 当需要训练10000个单词的300维的向量表示时,我们需要计算出300万个权重值 。而在更大的数据集上,这样的训练过程是十分缓慢的,基本上不可行,因此Skip-Gram的作者针对这个问题提出了几种解决方案 。常用的方案有Subsampling frequent words和Negative Sampling,接下来会详细介绍这两种解决方案 。

Subsampling Frequent Words

Subsampling主要目的是通过削减训练集的训练样本数来降低训练代价 。由于在文本中,许多单词出现的频率很高 , 这就导致了这个单词对应的word pair (inputword,outputword)在训练集中的数量会非常多,因此需要针对这些高频词进行二次采样以降低这些高频词在训练集中的规模 。具体采样策略如下:
假设

相关经验推荐