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

在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 scripts
sh 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=../scripts
BIN_DIR=../bin

CC = gcc
#The -Ofast might not work with older versions of gcc; in that case, use -O2
CFLAGS = -lm -pthread -O2 -Wall -funroll-loops -Wno-unused-result

all: word2vec word2phrase distance word-analogy compute-accuracy

word2vec : 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}/*.sh

clean:
    pushd ${BIN_DIR} && rm -rf word2vec.exe word2phrase.exe distance.exe word-analogy.exe compute-accuracy.exe; popd

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

#!/bin/bash

DATA_DIR=../data
BIN_DIR=../bin
SRC_DIR=../src

TEXT_DATA=$DATA_DIR/text8
ZIPPED_TEXT_DATA="${TEXT_DATA}.zip"
VECTOR_DATA=$DATA_DIR/text8-vector.bin

pushd ${SRC_DIR} && make; popd

if [ ! -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 1

fi

echo -----------------------------------------------------------------------------------------------------
echo -- distance...

$BIN_DIR/distance.exe $DATA_DIR/$VECTOR_DATA

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

sh demo-word.sh

回车后开始训练:

这里写图片描述

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

这里写图片描述

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

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

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页