先介绍官方C语言版的训练方法。
对于这个方法,我认为几个词可以概括:简单、快速
1.安装word2vec工具C语言版
项目地址:http://word2vec.googlecode.com/svn/trunk/
注:这个需要svn工具来下载。如果实在下载不到,可以上网找下其他资源
下载好之后将文件放到指定文件夹中,使用makefile安装,即运行:“make”
安装好之后如下图:
可以看到有编译好的"word2vec"文件了,接下来就可以训练啦~
2.训练词向量
将分好词的训练语料进行训练,假定我语料名称为star_games_words.txt且在word2vec目录中。输入命令:
./word2vec -train seg_star_games_words.txt -output star_games_vectors.bin -cbow 0 -size 5 -window 1 -negative 0 -hs 1 -sample 1e-3 -threads 12 -binary 1
以上命令表示的是输入文件是seg_star_games_words.txt,
输出文件是star_games_vectors.bin,
不使用cbow模型,默认为Skip-Gram模型。
每个单词的向量维度是5,
训练的窗口大小为5就是考虑一个词前五个和后五个词语(实际代码中还有一个随机选窗口的过程,窗口大小<=5)。
不使用NEG方法,使用HS方法。
-sampe指的是采样的阈值,如果一个词语在训练样本中出现的频率越大,那么就越会被采样。
-binary为1指的是结果二进制存储,为0是普通存储(普通存储的时候是可以打开看到词语和对应的向量的)
除了以上命令中的参数,word2vec还有几个参数对我们比较有用比如-alpha设置学习速率,默认的为0.025.–min-count设置最低频率,默认是5,如果一个词语在文档中出现的次数小于5,那么就会丢弃。-classes设置聚类个数,看了一下源码用的是k-means聚类的方法。
训练出来如果保存的是txt文件,大概是这个样子:
3.测试近邻的词
得到模型后,可以用命令 ./distance data/review.model 测试单词的最近邻。 这个要求刚才生成的模型是保存成二进制的。