word2vec 使用小结 2014 年 6 月 7 日 10:37:48 1、、源码源码 Google Code 提供的 word2vec 可以通过 SVN 下载, 地址为: 2、、环境环境 编译和运行都需要在 linux 系统中进行; 3、编译、编译 (使用 Ubuntu 系统) (1)cd 进入 word2vec 的代码目录; (2) 直接输入: make, 然后回车即开始编译, 完成后目录中多出几个没有后缀的文件, 即为编译后的程序; 4、下载训练数据、下载训练数据 text8:下载地址: 直接解压到当前文件夹,text8 数据文件与程序在同一目录 也可以自己从语料中提取训练数据 5、、训练和测试训练和测试 ((1)训练)训练 训练 wordvector 一般要指定向量的维度,可以使用默认值:200 编辑 demo-word.sh 原文件中的脚本如下: make if [ ! -e text8 ]; then wget -O text8.gz gzip -d text8.gz -f fi time ./word2vec -train text8 -output vectors.bin -cbow 0 -size 200 -window 5 -negative 0 -hs 1 -sample 1e-3 -threads 12 -binary 1 ./distance vectors.bin 因为已经编译和下载了 text8 数据了,所以可以删除相应的代码,只保留: time ./word2vec -train text8 -output vectors.bin -cbow 0 -size 200 -window 5 -negative 0 -hs 1 -sample 1e-3 -threads 12 -binary 1 ./distance vectors.bin 保存后,就可以在命令行下运行了:sh demo-word.sh 等待训练完成,可以输入单词测试,输出为按余弦相似度排序的结果词。
当然,也可以不要上述编译和下载数据的步骤,直接使用该脚本 ((2)测试词向量的加减)测试词向量的加减 这个主要功能是:给定一个 negative 的词 w0、两个 positive 的词 w1、w2,寻找词向量 表中与向量(w1+w2-w0)最相似的词; 因为 w1+w2-w0 是一个向量, 并且一般不会直接对应向量表中某个向量, 所以只能寻找 相似度最高的向量 其论文中著名的加减法是:king+woman-man = queen 测试数据: 在代码中提供了两个测试文件:questions-words.txt、questions-phrases.txt 其格式为: 每行有四个词 “w0 w1 w2 w3” , 中间是空格分隔, 其中:w0 是 negative 词,w1、w2 是 positive 词,w3 表示希望得到的词,即答案 目前上述说明只训练了针对 word 的 vector,所以只测试 questions-words.txt 同样,需要先编辑脚本文件:demo-word-accuracy.sh: 只保留训练的那一句代码: ./compute-accuracy vectors.bin 30000 questions-words.txt 或者直接复制到命令行运行。
然后会运行并输出测试准确率: capital-common-countries: ACCURACY TOP1: 34.78 % (176 / 506) Total accuracy: 34.78 % Semantic accuracy: 34.78 % Syntactic accuracy: -nan % capital-world: ACCURACY TOP1: 21.35 % (310 / 1452) Total accuracy: 24.82 % Semantic accuracy: 24.82 % Syntactic accuracy: -nan % currency: ACCURACY TOP1: 3.73 % (10 / 268) Total accuracy: 22.28 % Semantic accuracy: 22.28 % Syntactic accuracy: -nan % city-in-state: ACCURACY TOP1: 18.40 % (289 / 1571) Total accuracy: 20.67 % Semantic accuracy: 20.67 % Syntactic accuracy: -nan % family: ACCURACY TOP1: 58.50 % (179 / 306) Total accuracy: 23.50 % Semantic accuracy: 23.50 % Syntactic accuracy: -nan % gram1-adjective-to-adverb: ACCURACY TOP1: 3.44 % (26 / 756) Total accuracy: 20.37 % Semantic accuracy: 23.50 % Syntactic accuracy: 3.44 % gram2-opposite: ACCURACY TOP1: 15.03 % (46 / 306) Total accuracy: 20.06 % Semantic accuracy: 23.50 % Syntactic accuracy: 6.78 % gram3-comparative: ACCURACY TOP1: 28.81 % (363 / 1260) Total accuracy: 21.77 % Semantic accuracy: 23.50 % Syntactic accuracy: 18.73 % gram4-superlative: ACCURACY TOP1: 15.02 % (76 / 506) Total accuracy: 21.28 % Semantic accuracy: 23.50 % Syntactic accuracy: 18.07 % gram5-present-participle: ACCURACY TOP1: 15.22 % (151 / 992) Total accuracy: 20.52 % Semantic accuracy: 23.50 % Syntactic accuracy: 17.33 % gram6-nationality-adjective: ACCURACY TOP1: 52.59 % (721 / 1371) Total accuracy: 25.25 % Semantic accuracy: 23.50 % Syntactic accuracy: 26.64 % gram7-past-tense: ACCURACY TOP1: 18.09 % (241 / 1332) Total accuracy: 24.36 % Semantic accuracy: 23.50 % Syntactic accuracy: 24.90 % gram8-plural: ACCURACY TOP1: 39.52 % (392 / 992) Total accuracy: 25.65 % Semantic accuracy: 23.50 % Syntactic accuracy: 26.83 % gram9-plural-verbs: ACCURACY TOP1: 14.31 % (93 / 650) Total accuracy: 25.05 % Semantic accuracy: 23.50 % Syntactic accuracy: 25.83 % Questions seen / total: 12268 19544 62.77 % ------------------------------------------------------------------------------------------------ 补充补充 1、word2vec 的原版代码是 google code 上的,也有改写的其他两个版本: (1)c++11 版本: (jdeng/word2vec) 下载地址: 该代码可以在 windows 下编译运行,但需要编译器支持 c++11; 已使用 VS2013 编译通过并运行:运行 vs2013 命令提示符,cd 进入代码目录,输入 cl main.cc,然后编译即可;训练命令直接是 main,测试命令是“main test” 。
运行和测试同样需要 text8、questions-words.txt 文件 该版本输出的 model 文件为文本格式 (2)java 版本: 下载地址: 经测试,OK 也可以使用该 java 代码加载上述 c++11 版本的 model,但需要自行添加 load 的代码 2、关于训练数据 (1) 训练数据格式: 句子分词后用空格分隔, 将所有的句子直接拼接到一行中, 即可 (2)训练数据可以是中文,但是要注意字符集编码格式,具体的要参照代码和不同的 系统。