图学习参考资料 词向量word2vec( 二 )


2.如何让向量具有语义信息得到每个单词的向量表示后,我们需要思考下一个问题:比如在多数情况下,“香蕉”和“橘子”更加相似,而“香蕉”和“句子”就没有那么相似;同时,“香蕉”和“食物”、“水果”的相似程度可能介于“橘子”和“句子”之间 。那么如何让存储的词向量具备这样的语义信息呢?
我们先学习自然语言处理领域的一个小技巧 。在自然语言处理研究中,科研人员通常有一个共识:使用一个单词的上下文来了解这个单词的语义,比如:

“苹果手机质量不错,就是价格有点贵 。”
“这个苹果很好吃,非常脆 。”
“菠萝质量也还行,但是不如苹果支持的APP多 。”
在上面的句子中,我们通过上下文可以推断出第一个“苹果”指的是苹果手机,第二个“苹果”指的是水果苹果,而第三个“菠萝”指的应该也是一个手机 。事实上,在自然语言处理领域,使用上下文描述一个词语或者元素的语义是一个常见且有效的做法 。我们可以使用同样的方式训练词向量,让这些词向量具备表示语义信息的能力 。
2013年,Mikolov提出的经典word2vec算法就是通过上下文来学习语义信息 。word2vec包含两个经典模型:CBOW(Continuous Bag-of-Words)和Skip-gram,如 图4 所示 。
  • CBOW:通过上下文的词向量推理中心词 。
  • Skip-gram:根据中心词推理上下文 。

图学习参考资料 词向量word2vec

文章插图
假设有一个句子“Pineapples are spiked and yellow”,两个模型的推理方式如下:
  • 在CBOW中,先在句子中选定一个中心词,并把其它词作为这个中心词的上下文 。如 图4 CBOW所示,把“spiked”作为中心词,把“Pineapples、are、and、yellow”作为中心词的上下文 。在学习过程中,使用上下文的词向量推理中心词,这样中心词的语义就被传递到上下文的词向量中,如“spiked → pineapple”,从而达到学习语义信息的目的 。
  • 在Skip-gram中,同样先选定一个中心词,并把其他词作为这个中心词的上下文 。如 图4 Skip-gram所示,把“spiked”作为中心词,把“Pineapples、are、and、yellow”作为中心词的上下文 。不同的是,在学习过程中,使用中心词的词向量去推理上下文,这样上下文定义的语义被传入中心词的表示中,如“pineapple → spiked”,从而达到学习语义信息的目的 。
【图学习参考资料 词向量word2vec】说明:
一般来说,CBOW比Skip-gram训练速度快,训练过程更加稳定,原因是CBOW使用上下文average的方式进行训练,每个训练step会见到更多样本 。而在生僻字(出现频率低的字)处理上,skip-gram比CBOW效果更好,原因是skip-gram不会刻意回避生僻字 。
2.1 CBOW和Skip-gram的算法实现我们以这句话:“Pineapples are spiked and yellow”为例分别介绍CBOW和Skip-gram的算法实现 。
如 图5 所示,CBOW是一个具有3层结构的神经网络,分别是:
图学习参考资料 词向量word2vec

文章插图