Word2Vec 教程 : The Skip-Gram 模型

Word2Vec教程:Skip-Gram模型

原文链接: .
本教程介绍了Word2Vec的Skip-Gram神经网络体系结构。本教程的目的是跳过有关Word2Vec的常规介绍性知识和抽象性介绍,并深入了解更多细节。特别是在这里,我将深入研究Skip-Gram神经网络模型。

模型介绍

实际上,Skip-Gram神经网络模型的基本形式非常简单。我认为所有这些小的调整和增强开始使解释变得混乱。

让我们对将要阐述的概念做一个高屋建瓴的说明。Word2Vec使用了在机器学习的其他领域的一个技巧。我们将训练一个具有单个隐藏层的简单神经网络来执行特定任务,但实际上,我们将不会使用该神经网络来完成我们所训练的任务!相反,目标实际上只是学习隐藏层的权重-我们将看到这些权重实际上是我们要学习的“词向量”。

您可能已经在非监督的特征学习中看到了这个技巧的,您可以训练自动编码器在隐藏层中压缩输入向量,然后将其解压缩回输出层中的原始向量。训练它之后,您可以剥离输出层(解压步骤),而仅使用隐藏层-这是学习良好图像特征而无需标记训练数据的技巧。

模型算例

因此,现在我们需要讨论将要构建的神经网络以执行模型算例,然后稍后再回到这如何间接地为我们提供真正需要的那些单词向量。

我们将训练神经网络执行以下操作。给定句子中间的特定单词(输入单词),请查看附近的单词并随机选择一个。网络将告诉我们词汇中每个单词成为我们选择的“附近单词”的可能性。

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

输出概率将与找到输入单词附近的每个词汇单词的可能性有关。例如,如果您给受过训练的网络输入了单词“Soviet”,那么“Union”和“Russia”这样的单词的输出概率就会比“西瓜”和“袋鼠”这样的无关单词的输出概率高得多。

我们将通过向神经网络提供训练文档中出现的"单词对"来训练神经网络。下面的示例显示了一些训练示例(单词对),我们将从句子“The quick brown fox jumps over the lazy dog.”中获取。我仅以窗口大小为“2”为例。以蓝色突出显示的单词是输入单词。
Word2Vec 教程 : The Skip-Gram 模型_第1张图片
训练数据

网络将从每个配对出现的次数中学习统计信息。因此,例如,网络可能会比(“Soviet”, “Union”)获得更多的(“Soviet”, “Sasquatch”)训练样本。训练结束后,如果输入“Soviet”,一词,则“Union”)或“Russia”)的概率要比“Sasquatch”的概率高得多。

模型细节

那么,这一切如何实现?

首先,您知道您不能像文本字符串一样向神经网络输入单词,因此我们需要一种将单词向量化后输入给网络的方法。为此,我们首先从我们的语料中构建单词表-假设我们有10,000个唯一单词。

我们将把像“ants”这样的输入词表示为一个单向向量。该向量将具有10,000个元素(词汇中的每个词一个元素),我们将在与“ants”对应的位置设置“ 1”,在所有其他位置设置“0”。

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

这是我们的神经网络的架构。
Word2Vec 教程 : The Skip-Gram 模型_第2张图片
Skip-Gram神经网络架构

隐藏层神经元上没有激活函数,但是输出神经元使用softmax。我们稍后会再讨论。

当在单词对上训练此网络时,输入是表征输入单词的one-hot向量,训练输出也是代表输出单词的one-hot向量。但是,当您在一个输入单词上评估经过训练的网络时,输出向量实际上将是一个概率分布(即一堆浮点值,而不是一个one-hot向量)。

隐藏层

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

Google在其已发布的模型中使用了300维词向量,这些模型已在Google新闻数据集上进行了训练您可以从此处下载。特征维度数是一个“超参数”,可以微调这个参数(尝试不同的值并查看产生最佳结果的参数)。

如果您看一下此权重矩阵的行,这些实际上就是我们的单词向量!
Word2Vec 教程 : The Skip-Gram 模型_第3张图片

因此,所有这一切的最终目标实际上只是学习此隐藏层权重矩阵-完成后,我们将不使用输出层!

不过,让我们回到要训练的模型定义中来。

现在,你可能会问yourself-“这一个one-hot向量几乎是全零…会有什么样的效果?”如果你乘10,000×300矩阵1×10,000一个one-hot向量,将等效于刚刚选择的对应于“ 1”的矩阵行。这是一个给您视觉效果的小例子。
Word2Vec 教程 : The Skip-Gram 模型_第4张图片

这意味着该模型的隐藏层实际上只是用作查找表。隐藏层的输出只是输入单词的“词向量”。

输出层

然后1 x 300,“ants” 的词向量被馈送到输出层。输出层是softmax回归。这里有一个深入使用softmax回归的教程,但它的要点是,每个输出神经元(在我们的词汇中的每一个单词)会产生0和1之间的输出,所有这些输出值的总和加起来到1。

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

这是计算单词“ car”的输出神经元输出的示例。
Word2Vec 教程 : The Skip-Gram 模型_第5张图片
输出神经元的行为

注意,神经网络对输出词相对于输入词的偏移一无所知。对于输入之前的单词和之后的单词,它不会学习不同的概率集。为了理解其含义,可以说在我们的训练语料库中,单词“York”的每个出现都以单词“ New”开头。也就是说,至少根据训练数据,“ New”将在“York”附近的可能性为100%。但是,如果我们在“约克”附近选择10个单词,并随机选择其中一个,则表示“新”的可能性不是100%;您可能在附近选择了其他单词之一。

模型直观感受

好的,您准备好对该网络模型进行一些激动人心的探查了吗?

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

两个单词具有相似的上下文是什么意思?我认为您可以期望“智能”和“智能”等同义词具有非常相似的上下文。或者,相关的词(例如“引擎”和“变速器”)也可能具有相似的上下文。

这也可以为您处理词干–网络可能会为“ants”和“ant”学习相似的词向量,因为它们应该具有相似的上下文。

下一步

您可能已经注意到,Skip-Gram神经网络包含大量权重……对于我们的示例,它具有300个特征维度和10,000个单词的词汇,隐藏层和输出层中的权重均为3M!在大型数据集上进行训练是很困难的,因此word2vec的作者进行了许多调整以使训练得以进行。这些将在本教程的第2部分中介绍。

其他资源

您是否知道word2vec模型也可以应用于非文本数据,以用于推荐系统和广告定向投放?您可以从一系列用户操作中学习向量,而不是从一系列单词中学习向量。了解更多关于这个我在新的帖子在这里。

引用
麦考密克(2016年,4月19日)。Word2Vec教程-Skip-Gram模型。取自http://www.mccormickml.com

你可能感兴趣的:(自然语言处理)