关于 word2vec 我有话要说

写在前面的话:

总结一下使用word2vec一年来的一些经验,因为自己在做的时候,很难在网上搜到word2vec的经验介绍,所以归纳出来,希望对读者有用。

这里不介绍word2vec的原理,因为原理介绍的资料网上很多:

作者论文 word2vec论坛

作者论文讲的比较简单,推荐一个比较全面的word2vec原理分析

最后,由于本人知识有限,错误之处,还望指正。

1 word2vec 是word embedding 最好的工具吗?

word2vec并非是效果最好的word embedding 工具。最容易看出的就是word2vec没有考虑语序,这里会有训练效果损失。

由于 word2vec 训练速度快 ,易用,google出品 等,使得word2vec使用的人多。

训练快是因为 word2vec只有输入层和输出层,砍去了神经网络中,隐藏层的耗时计算(所以word2vec并不算是一个深度学习算法)。另外,阅读word2vec的google的源码,会发现里面有一些提速的trick。如 sigmod函数,采用一次计算,以后查表,减去了大量的重复计算。如词典hash存储, 层次softmax等。

易用是因为word2vec 公布了word2vec的代码。在tensorflow,gensim,spark mllib包中都有集成,使用方便。

2 word2vec 训练结果的差异主要来自什么因素?

2.1 语料影响最大

语料的场景,比如微博的语料和新闻语料训练的结果差别很大。因为微博属于个人发帖,比较随意。而新闻比较官方正式,另外新闻句式相对复杂。经过训练对比:微博这种短文,训练的相似词更多是同级别的相关词。比如 深圳 相关的是 广州 。而用新闻语料,训练得到 深圳 相关的词 更多是与 深圳 有关联的词,比如 深圳大学。

为什么会出现这种情况呢?

因为 word2vec 的原理就是 一个词预测 前后词 或者 前后词 预测 当前词,使得概率最大化。

这就导致如下两个结果:

2.1.1 相似的句子,相同部位的词 会相似。

比如 句子1 w1 w2 w3 w4 X w5 w6 w7.

句子2 w1 w2 w3 w5 Y w5 w6 w7.

因为 X 的向量 受 w1 w2 w3 w4 w5 w6 w7 向量影响决定, Y也是受这几个词影响决定。

所以 X Y 是相似的。

2.1.2 挨着近的词,也是相似的。

比如 句子 w1 w2 w3 w4 X Y w5 w6 w7. 这样 X Y 都是受到 来自 w1 w2 w3 w4 w5 w6 w7 向量影响决定。

所以X Y是相似的。

所以,微博和新闻的句子的整体分布是不一样的。 这里影响 结论 2.1.1.

其次,新闻长文多,句式复杂,微博短文多,这里影响结论2.1.2.

2.2 算法参数的影响。

算法参数对总体效果影响不大。相对来说,比较重要的参数有以下:

2.2.1 负采样

负采样越低,对高频词越不利,对低频词有利。可以这么理解,本来高频词 词被迭代50次,低频词迭代10次,如果采样频率降低一半,高频词失去了25次迭代,而低频词只失去了5次。一般设置成le-5

2.2. 2 语言模型

skip-gram 和cbow,之前有对比,切词效果偏重各不相同。 从效果来看,感觉cbow对词频低的词更有利。这是因为 cbow是基于周围词来预测某个词,虽然这个词词频低,但是他是基于 周围词训练的基础上,通过算法来得到这个词的向量。通过周围词的影响,周围词训练的充分,这个词就会收益。

2.2. 3 窗口大小

窗口大小影响 词 和前后多少个词的关系,和语料中语句长度有关,建议可以统计一下语料中,句子长度的分布,再来设置window大小。一般设置成8。

2.2. 4 min-count

最小词频训练阀值,这个根据训练语料大小设置,只有词频超过这个阀值的词才能被训练。

根据经验,如果切词效果不好,会切错一些词,比如 “在深圳”,毕竟切错的是少数情况,使得这种错词词频不高,可以通过设置相对大一点的 min-count 过滤掉切错的词。

2.2. 5 向量维度

如果词量大,训练得到的词向量还要做语义层面的叠加,比如 句子 的向量表示 用 词的向量叠加,为了有区分度,语义空间应该要设置大一些,所以维度要偏大。一般 情况下200维够用。

2.2. 6 其他参数

比如学习率 可以根据需要调。

3 word2vec 影响速度的因素有哪些?

3.1 语言模型:cbow 比skip-gram 更快

为什么 cbow更快,很重要的一个原因,cbow是基于周围词来预测这个单词本身 。而skip-gram是基于本身词去预测周围词。 那么,cbow只要 把窗口内的其他词相加一次作为输入来预测 一个单词。不管窗口多大,只需要一次运算。而skip-gram直接受窗口影响,窗口越大,需要预测的周围词越多。在训练中,通过调整窗口大小明显感觉到训练速度受到很大影响。

3.2 迭代次数

影响训练次数,语料不够的情况下,可以调大迭代次数。spark 版本有bug,迭代次数超过1,训练得到的词向量维度值超大。

3.3 线程数

单机版(google word2vec)可以通过设置多线程跑,集群版(spark mllib)可以设置多个 partitions.但是从经验来看,在集群上设置partitions 过多,会影响训练的效果。

3.4 其他参数

采样频率 影响词的训练频率 min-count 最小词频 影响 训练词的数量 Window大小 影响 skip-gram 的 预测次数。 向量维度 维度决定了训练过程中计算的维度

4 怎样评估word2vec训练的好坏?

4.1 词聚类

可以采用 kmeans 聚类,看聚类簇的分布

4.2 词cos 相关性

查找cos相近的词

4.3 Analogy对比

a:b 与 c:d的cos距离 (man-king woman-queen )

4.4 使用tnse,pca等降维可视化展示

词的分布,推荐用google的tensorboard,可以多视角查看,如果不想搭建服务,直接访问这里。另外可以用python的matplotlib。

4.5 Categorization 分类 看词在每个分类中的概率

动物

食物

汽车

电子

橘子

0.11

0.68

0.12

0.11

0.66

0.11

0.13

0.11

雅阁

0.14

0.23

0.67

0.11

苹果

0.11

0.65

0.11

0.65

前三条来自官网的评测方法

网上也有相关的word embedding 的评估方法,可以参考这里

资源

word2vec效果展示

板砖砸过来(^_^)

原创声明,本文系作者授权云+社区-专栏发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

old zhang的专栏

1 篇文章2 人订阅

我来说两句

3 条评论
登录 后参与评论

相关文章

来自专栏AI研习社

Github 「stars」 平均 3558,最棒的 30 个机器学习实例

在过去的一年里,我们比较了近 8800 个机器学习开源项目选出了其中最棒的 30 个 (几率只有 0.3%)。 这是一个非常具有竞争力的名单,名单是从 2017...

36312
来自专栏AI研习社

谷歌工程师亲自讲解:开源TensorFlow模型在图像、语言和艺术的应用

谷歌2017开发者大会 Google I/O已经落幕,有不少亮点都值得我们学习和回顾,其中相当一部分是机器学习开发的内容。AI研习社精选了其中的精彩视频译制呈现...

3164
来自专栏AI研习社

深度解密换脸应用 Deepfake

Deepfake 就是前一阵很火的换脸 App,从技术的角度而言,这是深度图像生成模型的一次非常成功的应用,这两年虽然涌现出了很多图像生成模型方面的论文,但大都...

4436
来自专栏专知

基于TensorFlow的机器学习速成课程25讲视频全集(13-15讲)

1413
来自专栏大数据文摘

我们对比了GitHub上8800个开源机器学习项目,并选出了其中的Top30

1534
来自专栏刘建银的专栏

推荐算法之协同过滤

推荐算法在个性化领域有着广泛的应用,粗略统计,所涉及到的学科包括人工智能、机器学习、认知科学、信息抽取、数据挖掘、预测理论、近似理论,甚至是管理科学、市场营销和...

1.2K2
来自专栏机器之心

教程 | 深度Q学习:一步步实现能玩《毁灭战士》的智能体

选自Medium 作者:Thomas Simonini 机器之心编译 参与:Panda 近年来,深度强化学习已经取得了有目共睹的成功。机器之心也曾发布过很多介绍...

2725
来自专栏数据派THU

教你用PyTorch实现“看图说话”(附代码、学习资源)

3036
来自专栏量子位

MaskGAN:谷歌大脑让AI学做完形填空的新尝试

岳排槐 发自 凹非寺 量子位 出品 | 公众号 QbitAI 又见一篇神标题论文。 来一起感受一下。 ? MaskGAN: Better Text Genera...

3288
来自专栏宏伦工作室

天池FashionAI全球挑战赛小小尝试

1835

扫码关注云+社区