word2vec是谷歌2013年开源的工具,原始论文,这个工具能比较高效的训练出词向量。

word2vec 代码参数说明:


默认:./word2vec -train text8 -output vectors.bin -cbow 0 -size 100 -window 5 -negative 0 -hs 1 -sample 1e-4 -threads 20 -binary 1 -iter 20

默认5个windows ,默认架构skip
默认迭代20次
默认 hs
size 默认100
线程默认 20


参数解释:
训练架构:CBOW SKIP
windows : 窗口大小,一个词前几个和后几个词语
-negative 0 -hs 1 :不使用NEG方法,使用HS方法
-sampe指的是采样的阈值,如果一个词语在训练样本中出现的频率越大,那么就越会被采样。


word2vec还有几个参数对我们比较有用比如-alpha设置学习速率,默认的为0.025. –min-count设置最低频率,默认是5,如果一个词语在文档中出现的次数小于5,那么就会丢弃。-classes设置聚类个数,看了一下源码用的是k-means聚类的方法。要注意-threads 20 线程数也会对结果产生影响。

比较:架构:skip-gram(慢、对罕见字有利)vs CBOW(快)
· 训练算法:分层softmax(对罕见字有利)vs 负采样(对常见词和低纬向量有利)
· 欠采样频繁词:可以提高结果的准确性和速度(适用范围1e-3到1e-5)
· 文本(window)大小:skip-gram通常在10附近,CBOW通常在5附近

1.to compute accuracy with the full vocabulary,use:
./compute-accuracy vectors.bin < questions-words.txt
词向量的加减法

2.短语的精确度
./compute-accuracy vectors-phase.bin < questions-phrases.txt

3.questions-words.txt说明
capital-common-countries(506条):Semantic accuracy

capital-world(1452条):Semantic accuracy

currency(货币268条):Semantic accuracy

city-in-state(1571条):Semantic accuracy

family(306条):Semantic accuracy

gram1-adjective-to-adverb(756条):Semantic accuracy,Syntactic(句法) accuracy

gram2-opposite(306条):Semantic accuracy,Syntactic(句法) accuracy

gram3-comparative比较级(1260条):Semantic accuracy,Syntactic(句法) accuracy

gram4-superlative最高级(506):

gram5-present-participle(992):
code coding dance dancing

gram6-nationality-adjective(1371条):
Albania Albanian Australia Australian

gram7-past-tense(1332):

gram8-plural(992)

gram9-plural-verbs(650)

text8: 12268/19544 =62.77%

4.demo-classes.sh聚类

5.demo-analogy.sh类比



中文词向量质量评价可以参考清华大学刘知远老师: https://www.zhihu.com/question/34165212