word2vec 是google 推出的做词嵌入(word embedding)的开源工具。 简单的说,它在给定的语料库上训练一个模型,然后会输出所有出现在语料库上的单词的向量表示,这个向量称为"word embedding"。基于这个向量表示,可以计算词与词之间的关系,例如相似性(同义词等),语义关联性(中国 - 北京 = 英国 - 伦敦)等。NLP中传统的词表示方法是 one-hot representation, 即把每个单词表示成dim维的稀疏向量,dim等于词汇量的大小。这个稀疏向量只有一个维度(该单词的index)上是1,其余全是0。这个表示方法使得单词之间是孤立的。 word embedding则是把单词的表示降维到n维的稠密向量,n<<dim。

作为非NLP专业的人,我不在此讲述word embedding的算法原理,本文是对word2vec工具使用过程的整理与总结,方便大家尽快上手。本文以中文处理为例,Word2vec对语言并没有限制。

安装 word2vec

从它的项目主页上下载源码(或者从我的github上下载 https://github.com/Leavingseason/word2vec  内容是一样的)。源码是linux下的c语言写的,如果要在windows下编译,需要用到Cygwin。Cygwin就是在windows平台上运行类Unix的模拟环境。安装需要几个小时,之后在Cygwin里面编译Word2vec,不需要改任何代码。

如果不想装Cygwin,也可以用Java版本的Word2vec。 我fork了一个java版本的实现:https://github.com/Leavingseason/Word2VEC_java  其中MyWord2VEC_java_eclipse.zip是我自己稍微整理的直接在eclipse上可以用的源码。经测试java版的也很好用。

准备语料库

要针对自己的情景,训练适合自己的词嵌入,所以要自己准备一个语料库。我用的是商品点评的语料。如果大家想做实验试试,可以用wiki的中文语料库,参考 http://www.52nlp.cn/%E4%B8%AD%E8%8B%B1%E6%96%87%E7%BB%B4%E5%9F%BA%E7%99%BE%E7%A7%91%E8%AF%AD%E6%96%99%E4%B8%8A%E7%9A%84word2vec%E5%AE%9E%E9%AA%8C/comment-page-1  我自己处理了一份中文wiki语料库,已经完成格式化、繁体转简体和分词的过程,下载页面: http://pan.baidu.com/s/1jHZCvvo   格式如下图所示:

对于中文语料,第一步需要分词。现成的工具很多,我喜欢用SnowNLP https://github.com/isnowfy/snownlp , 除了分词,它还提供情感分析,繁体转简体,汉字to拼音等功能。 当然现有的其他NLP工具很多,像结巴分词等等。我试用了SnowNLP,感觉效果还挺不错的。

分完词后,把语料库整理成Word2vec的输入格式。这个格式很简单,单词之间用空格隔开就行了。 word2vec 把一个单词的前面和后面的k个单词作为context训练, 其中会自动把换行符替换成 </s> ,也就是句子分隔符。

训练word2vec模型

其实在源码目录有一些类似“demo-train-big-model-v1.sh”的脚本,它们就是运行Word2vec工具的示例。它会自动下载一个语料库然后执行。如果我们已经有了语料库,就不用下载了,脚本可以简化很多(Cygwin中运行):

time ./word2vec -train "data/review.txt" -output "data/review.model" -cbow 1 -size 100 -window 8 -negative 25 -hs 0 -sample 1e-4 -threads 20 -binary 1 -iter 15
-train "data/review.txt" 表示在指定的语料库上训练模型
-cbow 1 表示用cbow模型,设成0表示用skip-gram模型-size 100 词向量的维度为100-window 8 训练窗口的大小为8   即考虑一个单词的前八个和后八个单词
-negative 25 -hs 0  是使用negative sample还是HS算法
-sample 1e-4 采用阈值
-threads 20 线程数
-binary 1 输出model保存成2进制 
-iter 15 迭代次数训练还是很快的,在我的1G语料库上训练2小时左右。使用结果

得到模型后,可以用命令  ./distance data/review.model 测试单词的最近邻。 这个要求刚才生成的模型是保存成二进制的。

除了计算距离,还有一些有意思的例子,例如http://www.tuicool.com/articles/RB7fqaB 所写。

如果把模型保存成普通文本型,那么可以得到每个单词的向量表示,使用就灵活了,可以在自己的程序里读取这个model, 然后和自由计算各种值。

如果想偷懒的话,就用上述提到的java版程序加载model,然后可以做一系列方法调用。

Word2Vec 使用总结相关推荐

  1. 通俗易懂word2vec详解词嵌入-深度学习

    https://blog.csdn.net/just_so_so_fnc/article/details/103304995 skip-gram 原理没看完 https://blog.csdn.net ...

  2. python实现glove,gensim.word2vec模型训练实例

    20210331 https://blog.csdn.net/sinat_26917383/article/details/83029140 glove实例 https://dumps.wikimed ...

  3. gensim的word2vec如何得出词向量(python)

    首先需要具备gensim包,然后需要一个语料库用来训练,这里用到的是skip-gram或CBOW方法,具体细节可以去查查相关资料,这两种方法大致上就是把意思相近的词映射到词空间中相近的位置. 语料库t ...

  4. 用gensim学习word2vec

    20211224 输入为分词列表 import gensim # Train Word2Vec model model = gensim.models.Word2Vec(all_data_test[' ...

  5. word2vec 中的数学原理详解(二)预备知识

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/peghoty/article/details/37969635 https://blog.csdn. ...

  6. 理解 Word2Vec 之 Skip-Gram 模型

    20211003 NLP系列:Word2Vec原始论文:Efficient Estimation of Word Representations in Vector Space - 简书 原始论文翻译 ...

  7. 漫谈Word2vec之skip-gram模型

    https://zhuanlan.zhihu.com/p/30302498 陈运文 ​ 复旦大学 计算机应用技术博士 40 人赞同了该文章 [作者] 刘书龙,现任达观数据技术部工程师,兴趣方向主要为自 ...

  8. word2vec应用场景_Embedding在腾讯应用宝的推荐实践

    作者:carloslin,腾讯 PCG 应用研究员 Embedding 技术目前在工业界以及学术界中应用非常广泛,关于 Embedding 的探索和应用从未停歇.Embedding 的训练方法主要分成 ...

  9. 收藏 | 图解Word2vec,读这一篇就够了!

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:大数据文摘 ...

  10. 将LSTM与word2vec结合实现中文自动写作

    将LSTM与word2vec结合实现中文自动写作 # 载入所需的工具包 import jieba from gensim.models.word2vec import Word2Vecimport p ...

最新文章

  1. 复解析蕴含不可延拓性
  2. SwiftUI之如何使用@EnvironmentObject在视图之间共享数据
  3. C程序中main函数参数调用[个人学习简记]
  4. HTTP Status 500 - The absolute uri: http://java.sun.com/jsp/jstl/core cannot-报错解决方法
  5. 游标sql server_学习SQL:SQL Server游标
  6. ORACLE数据库设置编码
  7. UE4之判断点是否在矩形内
  8. 安卓:android.process.media意外停止解决方法
  9. 灵光一闪-(面对对象实践)
  10. 标准nvmexpress控制器驱动下载_NVM Express控制器驱动程序
  11. 今天发布《看图玩儿》看图软件
  12. sql服务器字段顺序怎么修改,你可能不知道SQL Server索引列的升序和降序带来的性能问题...
  13. LeetCode刷题之路:781. 森林中的兔子
  14. MySQL数据库(1):数据库 Database 基本概念
  15. 工程师视角的手游SDK
  16. windowsServer安装sqlServer2008
  17. html5制作颜色的诗句,带有颜色的诗句(精选60句)
  18. go通过channel获取goroutine的处理结果
  19. 华为HCIE RS笔记-20 OSPF的V-Link
  20. 凉心的比赛(一)补题

热门文章

  1. 土豆地方门户o2o小程序源码同城系统源码
  2. 小白Java成长之旅
  3. 计算机网络的八大性能指标,速率、带宽、吞吐量、时延、时延带宽积、往返时间、利用率、丢包率
  4. Linux----uniq命令详细使用方法
  5. 通俗易懂讲解均方误差 (MSE)
  6. 扫地机器人什么牌子的好 费电吗_哪个牌子的扫地机器人好一点?
  7. Lecture 06 Converage——Hinton课程
  8. sed删除匹配到的第一行记录
  9. 由对称性知定点一定在x轴上_在平面直角坐标系中,点P(x,y)为动点,已知点...
  10. 数据库应用设计学生宿舍管理系统java+SQL