++++++++++++++++++++++++
翻译自 Chris McCormick的blog, 转载请注明出处!!!
本教程主要介绍Word2Vec的skip gram神经网络架构. 下面我将跳过关于Word2Vec常见的介绍, 直接讨论一些细节的内容. 尤其会深入介绍skip gram神经网络模型.
The Model
skip-gram神经网络模型其实非常简单, Word2Vec使用了一个在机器学习领域中非常常见的一个技巧. 我们为了执行某个任务去训练一个简单的神经网络模型, 该模型只含有一个隐藏层, 但是实际上我们并没有使用该模型去解决我们的任务. 相反, 我们的目标实际上是去学习隐藏层的权重, 而我们尝试去学习的权重实际上就是词向量.
另一个技巧是无监督特征学习技巧, 即训练一个自编码器在隐藏层中去压缩输入向量, 然后经过隐藏层到输出层后, 将会解压缩, 复原为原始的输入向量大小. 训练之后,您将剥离输出层(解压缩步骤)并使用隐藏层 - 这是学习良好图像特征而无需标记训练数据的技巧。
The Fake Task
所以现在我们需要讨论这个“虚假”的任务,我们将构建神经网络来执行,然后我们会稍后再回过头来告诉我们那些我们真正追求的单词向量
我们将训练神经网络执行以下操作。给定句子中间的特定单词(输入单词),查看附近的单词并随机选择一个单词。网络将告诉我们词汇中每个单词成为我们选择的词汇的“附近单词”的可能性或者概率。
当我说“附近”时,算法实际上有一个“窗口大小”参数。典型的窗口大小可能是5,意味着所选词之后的5个词,以及所选词之前的5个词(总共10个词)。
输出概率是指输入词与其他词出现在输入词附近的可能性有关。例如,如果你给受过训练的网络输入单词“苏联”,那么像“联盟”和“俄罗斯”这样的单词的输出概率要高于像“西瓜”和“袋鼠”这样的无关单词。
我们从训练文本中, 找到这样的单词对, 例如下面的例子中展示的, 比如我们有一个句子“The quick brown fox jumps over the lazy dog.” 我选取窗口大小为2, 蓝色突出显示的单词是输入词
Training Data网络将根据每个单词对出现的次数来学习统计数据。因此,例如,网络可能会获得比(“苏联”,“Sasquatch”)更多的训练样本(“苏联”,“联盟”)。当训练结束时,如果你给它“苏联”这个词作为输入,那么它将输出比“Sasquatch”更高的“联盟”或“俄罗斯”概率。
Model Details
首先,你知道你不能将一个单词作为文本字符串提供给神经网络,所以我们需要一种方法来向网络表示单词。为此,我们首先从我们的训练文本中建立一个单词词汇表 - 假设我们有10,000个不重复单词的词汇表。
例如我们将“ant”作为输入词, 并通过独热向量进行表示。这个向量将有10,000个元素(代表了词汇表中每个元素的位置),我们将在对应于单词“ants”的位置放置一个“1”,在所有其他位置放置0。
网络的输出也是一个向量(也包含10,000个元素),对于我们词汇表中的每个单词,存在一个概率值, 该概率代表了该单词出现在输入词附近的概率。
这是我们神经网络的架构。
Skip-gram Neural Network Architecture隐藏层神经元上没有激活函数,但输出神经元使用softmax。
Softmax激活函数回顾
当在单词对上训练该网络时,输入是输入单词的独热向量,训练输出也是表示输出单词的独热矢量。但是当您在输入单词上评估训练的网络时,输出向量实际上将是概率分布(即,一堆浮点值,而不是一个热矢量)。
The Hidden Layer
对于我们的例子,我们将说我们正在学习具有300个特征的单词向量。因此隐藏层将由具有10,000行(我们的词汇表中的每个单词代表一行)和300列(每个隐藏神经元代表一列)的权重矩阵表示。
Google推出的模型在Google新闻数据集中使用了300个特征(您可以从此处下载)。特征数量是一个“超参数”,您只需调整它, 根据您的程序(即尝试不同的值,看看是什么产生最佳结果)。
如果你看一下这个权重矩阵的行,这些实际上就是我们的单词向量!
Hidden Layer Weight Matrix因此,所有这一切的最终目标实际上只是学习这个隐藏层的权重矩阵 - 当我们完成时我们只会抛出输出层!
但是,让我们回过头来研究我们将要训练的这个模型的定义。
现在,你可能会问自己-“ 输入单词的独热向量中的元素基本全为0...它能够带来多大的影响呢?”如果用1×10,000的独热向量乘以10000×300的权重矩阵时,这肯定是有效的, 如下图所示
Effect of matrix multiplication with a one-hot vector这意味着该模型的隐藏层实际上只是作为查找表运行。隐藏层的输出只是输入单词的“词向量”。
The Output Layer
然后'ants' 这个词的1 x 300
词向量将进入到输出层。输出层是softmax回归分类器。对于Softmax它的要点是,每个输出神经元(在这时我们词汇表中的每一个词)会产生0和1之间的概率输出,所有这些输出值的总和加起来为1。
具体地说,每个输出神经元具有一个权重向量,它与来自隐藏层的单词向量相乘,然后它将该函数应用于激exp(x)
,激活后返回结果。最后,为了使输出总和为1,我们将该结果除以所有 10,000个输出节点的结果之和。
这是计算单词“car”的输出神经元输出的图示。
Behavior of the output neuron请注意,神经网络对输出单词相对于输入单词的偏移量一无所知。它在输入之前与之后的单词之间没有学习不同的概率集。为了理解其含义,我们可以说,在我们的训练语料库中,“york”一词的每一次出现都以“new”一词开头。也就是说,至少根据训练数据,'New'将在'York'附近的概率为100%。但是,如果我们在'York'附近取10个单词并随机选择其中一个,那么它'New'的概率不是 100%; 你可能已经选择了附近的其他一个词。
Intuition
如果两个不同的单词具有非常相似的“上下文”(即,它们周围可能出现的单词),那么我们的模型需要为这两个单词输出非常相似的结果。并且网络为这两个单词输出类似的上下文预测的一种方式是单词向量是否相似。因此,如果两个单词具有相似的上下文,那么我们的网络就会为这两个单词学习相似的单词向量!
那两个词有类似上下文的意思是什么?我认为你可以期待像“intelligent”和“smart”这样的同义词具有非常相似的上下文信息。或者那些相关的词,如“engine”和“transmission”,也可能具有类似的上下文信息。
这也可以为您处理干扰 - 网络可能会为“蚂蚁”和“蚂蚁”这两个词学习类似的单词向量,因为它们应该具有类似的上下文。
Next Up
您可能已经注意到skip-gram神经网络包含大量的权重...对于我们的示例,有300个特征和10,000个单词的词汇,每个隐藏层和输出层的3M权重!在大型数据集上训练这将是令人望而却步的,因此word2vec作者引入了一些调整以使训练可行。这些内容将在本教程的第2部分中介绍。
其他资源
我还创建了一个帖子,其中包含对其他word2vec教程,论文和实现的链接和描述。
引用
McCormick,C。(2016年4月19日)。Word2Vec教程 - Skip-Gram模型。取自http://www.mccormickml.COM
网友评论