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