Windows下运行C语言版Word2Vec训练词向量

来源:互联网 发布:华师网络教育平台 编辑:程序博客网 时间:2024/05/19 17:23

在Word2vec模型中,算法可以通过无监督的方法为每个词计算出一个d维的向量,即将每个词映射为d维的空间中的一个点,d维空间中点之间的距离(即每个词对应的d维向量的距离)可反映词之间的相似性。

dav/word2vec是一个经典的利用多线程训练词向量的代码,非常地好用且非常地高效。然而该代码是用Linux C语言写的,而且代码的调度使用的是shell。在Windows上安装Cygwin即可运行该代码。

1.下载Cygwin,安装包可在官网下载,也可加QQ群426491390从群文件中下载。
2.在Cygwin中安装gcc、make、wget、unzip命令。例如,安装make命令的方法如下图所示:

这里写图片描述

3.下载并解压dav/word2vec代码,代码也可从QQ群426491390从群文件中下载。
4.打开Cygwin,进入dav/word2vec所在文件夹(windows目录在Cygwin的/cygdrive目录下),实行命令:

cd scriptssh demo-word.sh

这时候发现报错了,这是因为word2vec中的src/makefile将word2vec.c编译成了类似word2vec而并非word2vec.exe,同样,scripts/demo-word.sh中执行的是bin/word2vec而不是word2vec.exe,因此要对src/makefile和scripts/demo-word.sh都进行一些修改,QQ群426491390群文件中的dev/word2vec版本已经修改过这俩文件。

将src/makefile修改为:

SCRIPTS_DIR=../scriptsBIN_DIR=../binCC = gcc#The -Ofast might not work with older versions of gcc; in that case, use -O2CFLAGS = -lm -pthread -O2 -Wall -funroll-loops -Wno-unused-resultall: word2vec word2phrase distance word-analogy compute-accuracyword2vec : word2vec.c    $(CC) word2vec.c -o ${BIN_DIR}/word2vec.exe $(CFLAGS)word2phrase : word2phrase.c    $(CC) word2phrase.c -o ${BIN_DIR}/word2phrase.exe $(CFLAGS)distance : distance.c    $(CC) distance.c -o ${BIN_DIR}/distance.exe $(CFLAGS)word-analogy : word-analogy.c    $(CC) word-analogy.c -o ${BIN_DIR}/word-analogy.exe $(CFLAGS)compute-accuracy : compute-accuracy.c    $(CC) compute-accuracy.c -o ${BIN_DIR}/compute-accuracy.exe $(CFLAGS)    chmod +x ${SCRIPTS_DIR}/*.shclean:    pushd ${BIN_DIR} && rm -rf word2vec.exe word2phrase.exe distance.exe word-analogy.exe compute-accuracy.exe; popd

将scripts/demo-word.sh修改为:

#!/bin/bashDATA_DIR=../dataBIN_DIR=../binSRC_DIR=../srcTEXT_DATA=$DATA_DIR/text8ZIPPED_TEXT_DATA="${TEXT_DATA}.zip"VECTOR_DATA=$DATA_DIR/text8-vector.binpushd ${SRC_DIR} && make; popdif [ ! -e $VECTOR_DATA ]; then  if [ ! -e $TEXT_DATA ]; then    if [ ! -e $ZIPPED_TEXT_DATA ]; then        wget http://mattmahoney.net/dc/text8.zip -O $ZIPPED_TEXT_DATA    fi    unzip $ZIPPED_TEXT_DATA    mv text8 $TEXT_DATA  fi  echo -----------------------------------------------------------------------------------------------------  echo -- Training vectors...  time $BIN_DIR/word2vec.exe -train $TEXT_DATA -output $VECTOR_DATA -cbow 0 -size 200 -window 5 -negative 0 -hs 1 -sample 1e-3 -threads 12 -binary 1fiecho -----------------------------------------------------------------------------------------------------echo -- distance...$BIN_DIR/distance.exe $DATA_DIR/$VECTOR_DATA

cd scripts进入scripts文件夹,再次运行:

sh demo-word.sh

回车后开始训练:

这里写图片描述

训练完成后会自动运行近义词查询程序:

这里写图片描述

为什么示例中与small最相似的近义词是large?因为Word2vec计算出的近义词倾向于用法的相似性,而非真正语义的相似性。

更多与Word2vec相关的知识可加QQ群426491390讨论。