windows如何使用word2vec进行分词训练

1、word2vec分词器运行一般都会在linux系统,所以在windows系统下,我们一般会借用其他工具,在这里我推荐两种。一种是xshell进行连接你的服务器,在你的服务器下进行linux命令操作,还有一种就是下载cygwin(地址:http://www.cygwin.com/install.html),在安装时注意:因为默认安装下没有安装make命令工具(后面要用到),所以在安装时,选择package时,需要选择Devel与Utils模块,如下图所示:

分词器 HanLP pom 分词器训练_数据

2. 下载word2vec,下载地址为:http://word2vec.googlecode.com/svn/trunk/,将下载的所有文件放入word2vec文件夹下。
注意:压缩包,很多文件都是在解压之后的trunk文件,待会我们操作的时候,就需要进入trunk文件夹进行操作,而不是word2vec文件夹下。

3.下载训练素材,训练素材自己在网上找。本篇博客使用的素材是cna_eng.txt文件。

4.将素材文件cna_eng.txt文件放到trunk文件夹下面(因为我们在trunk文件下操作)。

5.利用cd命令,就拿我的而言,首先进入d盘,然后进入word2vec ,最后进入trunk文件夹。操作命令如下:

cd d: 

ls 

cd word2vec

ls 

cd trunk

如图:


6.启动cygwin,使用cd命令进入word2vec文件夹下,输入make命令,报如下错误


这里就要注意两个问题:

第一是要解决方法是将word2vec目录下的makefile文件:
CFLAGS = -lm -pthread -O3 -march=native -Wall -funroll-loops -Wno-unused-result这一行注释掉。


如果还是出现以上错误的话,执行下面命令

第二,那么就make clean 一下,在执行make操作即可了。


7.素材文件cna_eng.txt文件,放入word2vec目录下的trunk文件夹中中,修改demo-word.sh文件,该文件默认情况下使用自带的text8数据进行训练,如果训练数据不存在,则会进行下载,因为需要使用自己的数据进行训练,所以可以将
#if [ ! -e text8.zip ]; then
#wget http://mattmahoney.net/dc/text8.zip -O text8.gz
#gzip -d text8.gz -f
#fi
进行注释,并将
time ./word2vec -train text8 -output vectors.bin -cbow 1 -size 200 -window 8 -negative 25 -hs 0 -sample 1e-4 -threads 20 -binary 0 -iter 15
./distance vectors.bin

分词器 HanLP pom 分词器训练_txt文件_02


中的text8更改成自己的素材文件cna_eng.txt文件,如果你是其他文件,一定别忘记带后缀,我因为忘记这个后缀找了一下午的原因。

参数解释:
-train 训练数据
-output 结果输入文件,即每个词的向量
-cbow 是否使用cbow模型,0表示使用skip-gram模型,1表示使用cbow模型,默认情况下是skip-gram模型,cbow模型快一些,skip-gram模型效果好一些
-size 表示输出的词向量维数
-window 为训练的窗口大小,8表示每个词考虑前8个词与后8个词(实际代码中还有一个随机选窗口的过程,窗口大小<=5)
-negative 表示是否使用NEG方,0表示不使用,其它的值目前还不是很清楚
-hs 是否使用HS方法,0表示不使用,1表示使用
-sample 表示 采样的阈值,如果一个词在训练样本中出现的频率越大,那么就越会被采样
-binary 表示输出的结果文件是否采用二进制存储,0表示不使用(即普通的文本存储,可以打开查看),1表示使用,即vectors.bin的存储类型
-------------------------------------
除了上面所讲的参数,还有:
-alpha 表示 学习速率
-min-count 表示设置最低频率,默认为5,如果一个词语在文档中出现的次数小于该阈值,那么该词就会被舍弃
-classes 表示词聚类簇的个数,从相关源码中可以得出该聚类是采用k-means

8.使用一下sh demo-word.sh,

跑程序需要一段时间,跑完的效果是这样的




提醒一下,本篇博客有部分内容也是参考别人的,如果你看到相似之处,我的原则是弄懂问题,请勿喷。谢谢