[译] Word2vec 教程 1 - Skip Gram Model

注:本文翻译自Word2Vec Tutorial - The Skip-Gram Model by Chris McCormick

开坑学习自然语言处理,先翻一篇Word2vec巩固一下基础知识。以下为译文:


本教程主要讲 Word2vec 中的 Skip-Gram 神经网络架构。我想跳过那些常见的介绍和摘要性文字,直接讲一些细节性内容。这篇文章主要讲 Skip-Gram 神经网络架构。

模型

Skip-Gram 神经网络模型的基本形式实际上很简单,只是后续它有很多改进,把它弄得复杂了。

简单来讲,Word2vec 使用了一个在其它机器学习任务中也能见到的技巧:在某个任务下,用单个隐藏层的神经网络去训练模型,然后得到隐藏层的参数权重(译者注:如果没有隐藏层的话,权重的作用就变成了直接获得训练任务的结果,而非我们需要的权重)。而训练这个神经网络的目的不是为了去泛化到其它数据集做预测,仅仅是为了得到这个权重而已。这个权重,就是我们的单词向量 (Word2vec)

另一个可以见到这种技巧的地方是无监督特征学习。训练一个自动编码器来压缩一个输入向量到隐藏层,然后再到输出层把它解压缩。训练完毕后,只留下隐藏层。——这是一个在没有标签数据的情况下,学习图像特征的好方法。

关于这个“伪”训练任务

现在我们讲讲这个用来训练词向量的“伪任务”,然后再讲这个“伪任务”是怎么给出我们需要的词向量的。

我们这么训练这个神经网络:输入一句句子中,中间的某个词,然后随机输出这个词附近的某个词。所以这个模型会返回词汇表中的每个词在所选词附近出现的概率。

对于这个“附近”有多近,算法中其实会有一个 window size 变量来控制,比如 window size = 5,就意味着该词前后5个单词的距离(总共10)。

输出的概率指的是词汇表中的词在所选词附近出现的概率,比如取“西瓜”这个词,那么输出为“红色”,“夏天”的概率就会比“袋鼠”,“蓝色”的概率高。

所以训练的方法就是把语料库中相邻的词丢进模型,例如,一个 windows size = 2 的模型训练方法为:

Training Data

神经网络会从统计学上学习到每一对组合出现的次数。比如样本中(“西瓜”,“红色”)出现的次数比(“西瓜”,“蓝色”)多,那么最后模型就会对 ”红色“ 给与一个更高的概率。

模型细节——输入层

单词是文本格式的,不可能直接作为输入,那怎么办呢?—— 用”独热码“(one-hot encoding)

假设有语料库里有10000个词,那么每一个词都会被映射为一个 10000 × 1 的向量,这个词所对应位置的向量值为1,其它位置都是0。比如 ”西瓜“ 这个词在词库中位于第二个,那么它所对应的向量表示就是 [0 1 0 0 0 0 ... ... 0]。

以下就是模型的架构:

Skip-gram Neural Network Architecture

隐藏层节点后面没有激活函数,但输出节点用的是 softmax,这个之后再讲。

训练这个神经网络的时候,输入层是输入词对应的 one-hot vector,输出层是输出词对应的 one-hot vector。但是,模型训练完毕后,给一个输入词,输出的结果将不再是独热码,而是一列小数。这列小数代表每个词汇表中的词的出现概率,也就是一个概率分布。

隐藏层

上图的例子中,我们把每个词训练成一个有 300 个属性值的向量,所以隐藏层的参数就会是一个 10000行(语料库大小) × 300列(隐藏层节点数) 的矩阵。

Google 在他们用谷歌新闻训练的词向量模型中,也用了 300个属性值 (Google Code - Word2vec)。这个属性值的数量,你可以根据你的应用来不断调试,最后取产生最好结果的那个值。

 而这个矩阵中中的每一行,就恰好是我们所需要的词向量!

Hidden Layer Weight Matrix

所以我们最终的目的就是学习这个隐藏层的参数矩阵,也就是词向量,而输出层在训练完模型以后就完全不考虑了。

接下来我们回去重新看看我们要训练的模型的定义。

现在你可能会问,”One-hot vector 里几乎全是0,会不会有啥影响?“。如果你用一个 1 × 10000 的 one-hot vector 乘以一个 10000 × 300 的矩阵,它会有效地根据独热码中的”1“来选择矩阵行。下面是一个例子:

Effect of matrix multiplication with a one-hot vector

看到没,输出的向量就是矩阵的第四行。这意味着隐藏层参数其实就是一个查询表。

输出层

在输出层,1 × 300 的词向量是输入,输出是一个 softmax 分类器(详见 Softmax Regression)。这个分类器的好处在于,每个节点(语料库中每个词)输出值都介于0到1,而所有值加起来为1

每个输出节点都有一个权重值,乘以之前隐藏节点的词向量,然后用自然指数变换 exp(x) ,最后为了让值加起来为1,除以所有exp变换后的指数和。以下是图例解释:

Behavior of the output neuron

注意,神经网络不会学习到一些偏差情况。例如:假设有一个语料库,其中所有的”York“前面接的都是"New",那么至少对于训练集来说,York附近出现New的概率是100%。但是如果我们取10个词的邻近,那么是”New“的概率就不是100%了。

词向量背后的涵义

大概了解词向量的产生过程了吧?那么来深入理解一下它的涵义吧。

如果2个不同的词之间,有十分类似的“上下文”(在他们附近出现的词),那么我们的模型就需要给这2个不同的词输出类似的结果。其中一种方法就是,让这2个词的词向量结果相似。所以如果两个对于两个类似的词,模型会给出类似的词向量结果!

那么所谓的 “有类似的上下文” 怎么理解呢?比如同义词“聪明”+“机智”,或者名词和它的修饰词“心情”+“愉快”,他们基本上都会有类似的上下文。

所以,“男性”和“男人”就会拥有类似的词向量,因为他们的上下文会比较相似。

Word2vec的后续

你会发现 Skip-gram 神经网络模型有巨量的参数,我们上面的例子里,10000个词的语料库,就有300×10000也就是300万个参数!这可不是闹着玩的,训练起来很麻烦,所以word2vec的作者们又引入了一系列改进方案,这些我们在 [译] Word2vec 教程 2 - Negative Sampling 中再讲。

你知道 word2vec 也可以被用于非文本数据,比如推荐系统定向广告投放吗(很酷有木有!)?这种情况下,模型学习的就不是词汇的向量,而是用户行为的向量了。详细见这篇文章:[译] Word2vec 教程 3 - 推荐系统和广告投放应用

其它资源

一些其它的 word2vec 的教程,论文,实战:Word2vec Resources

 

References

McCormick, C. (2016, April 19). Word2Vec Tutorial - The Skip-Gram Model. Retrieved from http://www.mccormickml.com

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值