gensim.models.Word2Vec()
有一系列的参数,常用的如下
- size 定义词向量的维度,默认是100
- alpha 初始的学习率,随着训练的进行,逐渐减少至0
- window 扫描句子的窗口大小,默认值为5
- min_count 过滤掉一些低频词,如果一个词在整个语料库里出现的次数小于min_count,在训练的时候就不考虑这个词。
- max_vocab_size 限制一下词汇表的数量,避免太多词占用太多内存,默认为None
- workers 训练模型的线程
- sg 训练采用的算法,sg=0 采用CBOW,sg=1采用skip-gram
- hs 为1的时候采用hierarchical softmax,如果为0且negative也非0,则采用negative sampling方案
- negative negative sampling的词数,通常是5-20
- cbow_mean 0或1。如果为0,则隐层为输入层的SUM,为1隐层为输入层向量的均值。
- iter 迭代遍历语料库的次数,默认值为5
训练代码:
sentences = sentences_generator('corpus_words.dat')
model = gensim.models.Word2Vec(sentences, size=200, workers=4)
# 计算两个词的相似度/相关程度
y1 = model.similarity(u"不错", u"好")
print u"【不错】和【好】的相似度为:", y1
print "--------\n"
# 计算某个词的相关词列表
y2 = model.most_similar(u"书", topn=20) # 20个最相关的
print u"和【书】最相关的词有:\n"
for item in y2:
print item[0], item[1]
print "--------\n"
# 寻找对应关系
print u"书-不错,质量-"
y3 = model.most_similar([u'质量', u'不错'], [u'书'], topn=3)
for item in y3:
print item[0], item[1]
print "--------\n"
# 寻找不合群的词
y4 = model.doesnt_match(u"书 书籍 教材 很".split())
print u"不合群的词:", y4
print "--------\n"
# 保存模型,以便重用
model.save(u"书评.model")
# 对应的加载方式
# model_2 = word2vec.Word2Vec.load("text8.model")