DeepLearning实战之word2vec邓澍军、陆光明、夏龙网易有道2014.02.27目录一、什么是word2vec?..........................................................................................................2二、快速入门...........................................................................................................................3三、作者八卦...........................................................................................................................4四、背景知识...........................................................................................................................54.1词向量........................................................................................................................54.2统计语言模型............................................................................................................54.3NNLM..........................................................................................................................74.4其他NNLM................................................................................................................94.5Log-Linear模型...........................................................................................................94.6Log-Bilinear模型......................................................................................................104.6层次化Log-Bilinear模型.........................................................................................10五、模型.................................................................................................................................115.1CBOW........................................................................................................................115.2Skip-Gram..................................................................................................................135.3为什么要使用HierarchicalSoftmax或NegativeSampling....................................16六、Tricks................................................................................................................................176.1指数运算..................................................................................................................176.2按word分布随机抽样...........................................................................................186.3哈希编码..................................................................................................................206.4随机数......................................................................................................................206.5回车符......................................................................................................................206.6高频词亚采样..........................................................................................................21七、分布式实现.....................................................................................................................21八、总结.................................................................................................................................22参考代码.................................................................................................................................22参考文献.................................................................................................................................23前言:DeepLearning已经很火了,本文作者算是后知后觉者,主要原因是作者的目前工作是广告点击率预测,而之前听说DeepLearning最大的突破还是在图像语音领域,而在NLP和在线广告点击预测方面的突破还不够大。但后来听说Google开源的word2vec还挺有意思,能够把词映射到K维向量空间,甚至词与词之间的向量操作还能和语义相对应。如果换个思路,把词当做feature,那么word2vec就可以把feature映射到K维向量空间,应该可以为现有模型提供更多的有用信息,基于这个出发点,作者对word2vec的相关代码和算法做了相关调研,本文就是作者关于word2vec调研的总结,也是作为自己以后备用。存在疏漏之处,欢迎大家反馈:shujun_deng@163.com。本文所有讨论都是基于word2vec以下版本的代码:一、什么是word2vec?word2vec是Google在2013年年中开源的一款将词表征为实数值向量的高效工具,采用的模型有CBOW(ContinuousBag-Of-Words,即连续的词袋模型)和Skip-Gram两种。word2vec代码链接为:,遵循ApacheLicense2.0开源协议,是一种对商业应用友好的许可,当然需要充分尊重原作者的著作权。word2vec一般被外界认为是一个DeepLearning(深度学习)的模型,究其原因,可能和word2vec的作者TomasMikolov的DeepLearning背景以及word2vec是一种神经网络模型相关,但我们谨慎认为该模型层次较浅,严格来说还不能算是深层模型。当然如果word2vec上层再套一层与具体应用相关的输出层,比如Softmax,此时更像是一个深层模型。word2vec通过训练,可以把对文本内容的处理简化为K维向量空间中的向量运算,而向量空间上的相似度可以用来表示文本语义上的相似度。因此,word2vec输出的词向量可以被用来做很多NLP相关的工作,比如聚类、找同义词、词性分析等等。而word2vec被人广为传颂的地方是其向量的加法组合运算(AdditiveCompositionality),官网上的例子是:vector('Paris')-vector('France')+vector('Italy')≈vector('Rome'),vector('king')-vector('man')+vector('woman')≈vector('queen')。但我们认为这个多少有点被过度炒作了,很多其他降维或主题模型在一定程度也能达到类似效果,而且word2vec也只是少量的例子完美符合这种加减法操作,并不是所有的case都满足。word2vec大受欢迎的另一个原因是其高效性,Mikolov在论文[2]中指出一个优化的单机版本一天可训练上千亿词。二、快速入门1.代码下载:针对个人需求修改makefile文件,比如作者使用的linux系统就需要把makefile编译选项中的-Ofast要更改为-O2或者-g(调试时用),同时删除编译器无法辨认的-march=native和-Wno-unused-result选项。有些系统可能还需要修改相关的c语言头文件,具体网上搜搜应该可以解决。3.运行“make”编译word2vec工具。4.运行demo脚本:./demo-word.shdemo-word.sh中的代码如下,主要工作为:1)编译(make)2)下载训练数据text8,如果不存在。text8中为一些空格隔开的英文单词,但不含标点符号,一共有1600多万个单词。3)训练,大概一个小时左右,取决于机器配置4)调用distance,查找最近的词训练完毕后,输入china就会找出与其最相近的词:5.也可以自己执行其他相关的程序,比如作者比较推崇的向量加减法操作,在命令行执行./word-analogyvectors.bin即可。相关结果如下: