没有合适的资源?快使用搜索试试~ 我知道了~
首页Deep Learning 实战之 Word2Vec
Deep Learning已经很火了,本文作者算是后知后觉者,主要原因是作者的目前工作是广告点击率预测,而之前听说Deep Learning最大的突破还是在图像语音领域,而在NLP和在线广告点击预测方面的突破还不够大。但后来听说Google开源的word2vec还挺有意思,能够把词映射到K维向量空间,甚至词与词之间 的向量操作还能和语义相对应。如果换个思路,把词当做feature,那么word2vec就可以把feature映射到K维向量空间,应该可以为现有模型提供更多的有用信息,基于这个出发点,作者对word2vec的相关代码和算法做了相关调研,本文就是作者关于word2vec调研的总结,也是作为自己以后备用。
资源详情
资源评论
资源推荐

Deep Learning 实战之 word2vec
邓澍军、陆光明、夏龙
网易有道
2014.02.27
目录
一、什么是 word2vec? .......................................................................................................... 2
二、快速入门 ........................................................................................................................... 3
三、作者八卦 ........................................................................................................................... 4
四、背景知识 ........................................................................................................................... 5
4.1 词向量 ........................................................................................................................ 5
4.2 统计语言模型 ............................................................................................................ 5
4.3 NNLM .......................................................................................................................... 7
4.4 其他 NNLM ................................................................................................................ 9
4.5 Log-Linear 模型 ........................................................................................................... 9
4.6 Log-Bilinear 模型 ...................................................................................................... 10
4.6 层次化 Log-Bilinear 模型......................................................................................... 10
五、模型 ................................................................................................................................. 11
5.1 CBOW ........................................................................................................................ 11
5.2 Skip-Gram .................................................................................................................. 13
5.3 为什么要使用 Hierarchical Softmax 或 Negative Sampling .................................... 16
六、Tricks................................................................................................................................ 17
6.1 指数运算 .................................................................................................................. 17
6.2 按 word 分布随机抽样 ........................................................................................... 18
6.3 哈希编码 .................................................................................................................. 20
6.4 随机数 ...................................................................................................................... 20
6.5 回车符 ...................................................................................................................... 20
6.6 高频词亚采样 .......................................................................................................... 21
七、分布式实现 ..................................................................................................................... 21
八、总结 ................................................................................................................................. 22
参考代码 ................................................................................................................................. 22
参考文献 ................................................................................................................................. 23

前言:
Deep Learning 已经很火了,本文作者算是后知后觉者,主要原因是作者的目
前工作是广告点击率预测,而之前听说 Deep Learning 最大的突破还是在图像语
音领域,而在 NLP 和在线广告点击预测方面的突破还不够大。但后来听说 Google
开源的 word2vec 还挺有意思,能够把词映射到 K 维向量空间,甚至词与词之间 的
向量操作还能和语义相对应。如果换个思路,把词当做 feature,那么 word2vec
就可以把 feature 映射到 K 维向量空间,应该可以为现有模型提供更多的有用信
息,基于这个出发点,作者对 word2vec 的相关代码和算法做了相关调研,本文
就是作者关于 word2vec 调研的总结,也是作为自己以后备用。存在疏漏之处,
欢迎大家反馈:shujun_deng@163.com。
本文所有讨论都是基于 word2vec 以下版本的代码:
一、什么是 word2vec?
word2vec 是 Google 在 2013 年年中开源的一款将词表征为实数值向量的高效
工具,采用的模型有 CBOW(Continuous Bag-Of-Words,即连续的词袋模型)和
Skip-Gram 两种。word2vec 代码链接为:https://code.google.com/p/word2vec/,
遵循 Apache License 2.0 开源协议,是一种对商业应用友好的许可,当然需要充
分尊重原作者的著作权。
word2vec 一般被外界认为是一个 Deep Learning(深度学习)的模型,究其原
因,可能和 word2vec 的作者 Tomas Mikolov 的 Deep Learning 背景以及 word2vec
是一种神经网络模型相关,但我们谨慎认为该模型层次较浅,严格来说还不能算
是深层模型。当然如果 word2vec 上层再套一层与具体应用相关的输出层,比如
Softmax,此时更像是一个深层模型。
word2vec 通过训练,可以把对文本内容的处理简化为 K 维向量空间中的向量
运算,而向量空间上的相似度可以用来表示文本语义上的相似度。因此,word2vec
输出的词向量可以被用来做很多 NLP 相关的工作,比如聚类、找同义词、词性分
析等等。而 word2vec 被人广为传颂的地方是其向量的加法组合运算(Additive
Compositionality ),官网上的例子是:vector('Paris') - vector('France') +
vector('Italy') vector('Rome'),vector('king') - vector('man') + vector('woman')
vector('queen')。但我们认为这个多少有点被过度炒作了,很多其他降维或主题
模型在一定程度也能达到类似效果,而且 word2vec 也只是少量的例子完美符合
这种加减法操作,并不是所有的 case 都满足。
word2vec 大受欢迎的另一个原因是其高效性,Mikolov 在论文[2]中指出一个
优化的单机版本一天可训练上千亿词。

二、快速入门
1. 代码下载:http://word2vec.googlecode.com/svn/trunk/
2. 针对个人需求修改 makefile 文件,比如作者使用的 linux 系统就需要把
makefile 编译选项中的-Ofast 要更改为-O2 或者-g(调试时用),同时删除编译器
无法辨认的-march=native 和-Wno-unused-result 选项。有些系统可能还需要修改
相关的 c 语言头文件,具体网上搜搜应该可以解决。
3. 运行“make”编译 word2vec 工具。
4. 运行 demo 脚本:./demo-word.sh
demo-word.sh 中的代码如下,主要工作为:
1) 编译(make)
2) 下载训练数据 text8,如果不存在。text8 中为一些空格隔开的英文单
词,但不含标点符号,一共有 1600 多万个单词。
3) 训练,大概一个小时左右,取决于机器配置
4) 调用 distance,查找最近的词
训练完毕后,输入 china 就会找出与其最相近的词:
5. 也可以自己执行其他相关的程序,比如作者比较推崇的向量加减法操作,
在命令行执行./word-analogy vectors.bin 即可。相关结果如下:

当然效果的好坏是取决于你语料大小和质量以及训练相关参数的。
6. 模型的输出 vectors.bin 是每个词及其对应的浮点数向量,只是默认为二进
制的,不好查看,如果想要查看文本形式,请在训练时把 binary 选项设置为
0。
7. 也可以./demo-phrases.sh 进行短语训练,这样 los angeles 就会被当成一个
整体来看待。distance 的相关测试如下:
8. 如果是中文的语料,则需要调用相应的分词工具将预料中的词用空格隔开。
三、作者八卦
感觉上 Deep Learning 圈子很小,一般离不开 Hinton,Bengio,Lecun,Ng 等
人,Tomas Mikolov 也不例外,他的工作很多参考了 Bengio 的工作,而且曾在

Bengio 实验室呆过一段时间,也一起发表过 paper。而且相关的语言模型也被这
几个大牛翻江倒海搞了好多年。
还有一个 Deep Learning 相关开源工具 SENNA 的作者 Ronan Collobert 则是
Samy Bengio(也是张栋的博士生导师)的博士生,而 Samy Bengio 则是 Yoshua
Bengio 的亲弟弟。
四、背景知识
4.1 词向量
1. One-hot Representation
NLP 相关任务中最常见的第一步是创建一个词表库并把每个词顺序编号。这
实际就是词表示方法中的 One-hot Representation,这种方法把每个词顺序编号,
每个词就是一个很长的向量,向量的维度等于词表大小,只有对应位置上的数字
为 1,其他都为 0。当然在实际应用中,一般采用稀疏编码存储,主要采用词的
编号。
这种表示方法一个最大的问题是无法捕捉词与词之间的相似度,就算是近义
词也无法从词向量中看出任何关系。此外这种表示方法还容易发生维数灾难,尤
其是在 Deep Learning 相关的一些应用中。
2. Distributed Representation
Distributed representation 最早由 Hinton 在 1986 年提出
[8]
。其基本思想是
通过训练将每个词映射成 K 维实数向量(K 一般为模型中的超参数), 通过词之
间的距离(比如 cosine 相似度、欧氏距离等)来判断它们之间的语义相似度。而
word2vec 使用的就是这种 Distributed representation 的词向量表示方式。
4.2 统计语言模型
传统的统计语言模型是表示语言基本单位(一般为句子)的概率分布函数,
这个概率分布也就是该语言的生成模型。一般语言模型可以使用各个词语条件概
率的形式表示:
(s) = (
(
,
,
)=
Context)
其中 Context 即为上下文,根据对 Context 不同的划分方法,可以分为五大类:
(1)上下文无关模型(Context=NULL)
该模型仅仅考虑当前词本身的概率,不考虑该词所对应的上下文环境。这是
一种最简单,易于实现,但没有多大实际应用价值的统计语言模型。
Context)=
=
这个模型不考虑任何上下文信息,仅仅依赖于训练文本中的词频统计。它是
n-gram 模型中当 n=1 的特殊情形,所以有时也称作 Unigram Model(一元文法统
计模型)。实际应用中,常被应用到一些商用语音识别系统中。
剩余22页未读,继续阅读

















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0