一、简要介绍
word2vec是Google在2013年发布的一个开源项目,它能够将词表征为实数值向量的高效工具,采用的模型有CBOW(Continuous Bag-Of-Words,即连续的词袋模型)和Skip-Gram两种。word2vec项目详细信息请参见。
word2vec通过训练,可以把文本内容的处理简化为K维向量空间中的向量运算,而向量空间上的相似度可以用来表示文本语义上的相似度,因此,word2vec输出的词向量可以用来做聚类、找同义词、词性分析等NLP相关工作。word2vec单机每天可训练上千亿词,可见性能之高效。
与传统信息检索模型中的向量空间模型(VSM)不同,向量空间模型(VSM)是将文档向量化,而word2vec是将词向量化。更新多心请参见。
二、快速入门
1、代码下载
#mkdir word2vec && cd word2vec
#svn co
2、编译源码
修改makefile,以linux为例,将编译选项-Ofast改为-O2或者-g(调试时用),删除编译器不认识的选项-march=native和-Wno-unused-result。编译word2vec工具:
#make
编译通过后,产生word2vec和distance。
3、训练分词
训练前确认保语料已经分词过了,执行如下命令,训练模型:
./word2vec -train text8 -output vectors.bin -cbow 0 -size 200 -window 10 -negative 0 -hs 1 -sample 1e-3 -threads 8 -binary 1
上面参数说明如下:
-train:输入文件
-output:输出的词向量(或聚类)
-cbow 0:0表示使用skip-gram模型(慢,对罕见词有利),1表示使用continuous bag-of-words模型(速度快)。
-size 200:每个单词的向量维度是200
-window 10:窗口大小,skip-gram通常在10附近,cbow通常在5附近。
-negative 0:采样使用hierarchical softmax方法(负采样,对常见词有利),不使用negative sampling方法(对罕见词有利)。
-sample 1e-3:采样阈值,如果一个词语在训练样本中出现的频率越大,那么就越会被采样。
-binary 1:1表示模型存储为二进制,0表示模型存储为文本。
还有其他一些默认参数:
-alpha:学习速率,默认为0.025
-min-count:最低频率,默认是5,如果一个词语在文档中出现的次数小于5,那么就会丢弃。
-classes 5:输出单词聚类(聚类个数为5),此时将不再输出词向量。
4、词的相似关系提取
执行下面命令,提取词的相似关系:
./distance vectors.bin
比如:输入china,就能得到相似词。
上面过程也可以直接执行脚本demo-word.sh、demo-analogy.sh、demo-phrases.sh等完成编译、训练和相似词查询,默认下载样本数据text8,text8中是以空格分隔的英文单词,共1600多万个单词。
如果你的分词是中文语料,且每个词(term)之间用空格分隔,则也可以直接用word2vec来处理。
5、聚类
word2vec内置聚类(k-means)功能,即用词的向量表示来判断词与词的距离。
./word2vec -train text8 -output classes.txt -cbow 0 -size 200 -window 5 -negative 0 -hs 1 -sample 1e-3 -threads 12 -classes 100
其中,classes表示聚成100个类,这个值可以根据你的语料多少或者分类要求而定。
输出的数据classes.txt分为2列,分别是词和所属于的聚簇:
#sort -k2,2n classes.txt |vim -
zambia 99
zambian 99
zanzibar 99
...
从上面数据可以看出对于部分近似词的聚类效果还是可以的。
阅读(4634) | 评论(0) | 转发(0) |