写在前面的话:
总结一下使用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。

关于word2vec我有话要说的更多相关文章

  1. word2vec 中的数学原理详解

    word2vec 是 Google 于 2013 年开源推出的一个用于获取 word vector 的工具包,它简单.高效,因此引起了很多人的关注.由于 word2vec 的作者 Tomas Miko ...

  2. Java豆瓣电影爬虫——使用Word2Vec分析电影短评数据

    在上篇实现了电影详情和短评数据的抓取.到目前为止,已经抓了2000多部电影电视以及20000多的短评数据. 数据本身没有规律和价值,需要通过分析提炼成知识才有意义.抱着试试玩的想法,准备做一个有关情感 ...

  3. word2vec参数调整 及lda调参

     一.word2vec调参   ./word2vec -train resultbig.txt -output vectors.bin -cbow 0 -size 200 -window 5 -neg ...

  4. [Algorithm & NLP] 文本深度表示模型——word2vec&doc2vec词向量模型

    深度学习掀开了机器学习的新篇章,目前深度学习应用于图像和语音已经产生了突破性的研究进展.深度学习一直被人们推崇为一种类似于人脑结构的人工智能算法,那为什么深度学习在语义分析领域仍然没有实质性的进展呢? ...

  5. Word2Vec 使用总结

    word2vec 是google 推出的做词嵌入(word embedding)的开源工具. 简单的说,它在给定的语料库上训练一个模型,然后会输出所有出现在语料库上的单词的向量表示,这个向量称为&qu ...

  6. Word2vec多线程(tensorflow)

    workers = [] for _ in xrange(opts.concurrent_steps): t = threading.Thread(target=self._train_thread_ ...

  7. Word2vec 模型载入(tensorflow)

    opts = Options() with tf.Graph().as_default(), tf.Session() as session: model = Word2Vec(opts, sessi ...

  8. Forward-backward梯度求导(tensorflow word2vec实例)

    考虑不可分的例子         通过使用basis functions 使得不可分的线性模型变成可分的非线性模型 最常用的就是写出一个目标函数 并且使用梯度下降法 来计算     梯度的下降法的梯度 ...

  9. Tensorflow word2vec编译运行

    Word2vec 更完整版本(非demo)的代码在 tensorflow/models/embedding/     首先需要安装bazel 来进行编译 bazel可以下载最新的binary安装文件, ...

随机推荐

  1. three.js 数学方法之Plane

    今天郭先生就来继续说一说three.js数学方法中的plane(平面).在三维空间中无限延伸的二维平面,平面方程用单位长度的法向量和常数表示.构造器为Plane( normal : Vector3, ...

  2. Java中goto标签的使用

    编写此文仅为以后可以复习. 最近在自学Java核心技术(很好的书,推荐!!),也是第一次从上面了解了goto,或许只是浅层了解. 错误之处希望大佬们给予批评与建议!!谢谢!!! Java核心技术中就提 ...

  3. 用x种方式求第n项斐波那契数,99%的人只会第一种

    大家好啊,我们又见面了.听说有人想学数据结构与算法却不知道从何下手?那你就认真看完本篇文章,或许能从中找到方法与技巧.     本期我们就从斐波那契数列的几种解法入手,感受算法的强大与奥妙吧. 原文链 ...

  4. django-rest-framework-源码解析002-序列化/请求模块/响应模块/异常处理模块/渲染模块/十大接口

    简介 当我们使用django-rest-framework框架时, 项目必定是前后端分离的, 那么前后端进行数据交互时, 常见的数据类型就是xml和json(现在主流的是json), 这里就需要我们d ...

  5. python-闭包和装饰器-01-闭包(closure)

    闭包(closure) 闭包就是在一个函数定义的内部再定义一个函数,并且这个函数用到了外边函数的变量,那么将这个函数以及用到的一些变量称之为闭包,如: def line(a, b): def cal( ...

  6. 初识Http

     HTTP是一个用在计算机世界里的协议,它确立了一种计算机之间交流通信的规范,以及相关的各种控制 和错误处理方式.  HTTP专门用来在两点之间传输数据,不能用于广播.寻址或路由. HTTP传输的是文 ...

  7. MySQL组复制MGR(二)-- 组复制搭建

    (一)主机操作 (1)路由信息vmnet5 192.168.10.0 (2)主机信息 主机名称 IP地址 操作系统版本 数据库版本 mgr-node1 192.168.10.11 centos 7.4 ...

  8. laravel开发调试工具laravel-debugbar的安装

    一.使用 Composer 安装该扩展包 composer require barryvdh/laravel-debugbar --dev 二.(可选)修改配置文件app/config.php Lar ...

  9. 珍藏多年的学习资料300G+,赶紧免费领取,从此离大神更进一步

    将时间线拉到2014     2014年的寒冬,每天早晨六点钟,都会一个弱小的身影,从学校寝室出发,走在去实习公司的路上.经过食堂边的包子铺,他会顺手买两个包子,一杯豆浆,老板也会像往常一样热情的吆喝 ...

  10. ORCHESTRATOR介绍及使用

    ORCHESTRATOR 一简介 MySQL高可用性和复制拓扑管理工具,支持复制拓扑结构的调整,自动故障转移和手动主从切换等.后端数据库用MySQL或SQLite存储元数据,并提供Web界面展示MyS ...