用到的模块:gensim, logging, os
原料:f.txt_cut.txt文件
#encoding=utf-8
#定义模型训练函数
def model_train(train_file_name, save_model_file): # model_file_name为训练语料的路径,save_model为保存模型名
from gensim.models import word2vec
import gensim
import logging
# 模型训练,生成词向量
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
sentences = word2vec.Text8Corpus(train_file_name) # 加载语料
model = gensim.models.Word2Vec(sentences, size=200) # 训练skip-gram模型; 默认window=5
model.save(save_model_file)
model.wv.save_word2vec_format(save_model_name + ".bin", binary=True) # 以二进制类型保存模型以便重用
from gensim.models import word2vec
import os
import gensim
cut_file = 'f.txt_cut.txt'
save_model_name = 'f.model'
if not os.path.exists(save_model_name): # 判断文件是否存在
model_train(cut_file, save_model_name)
else:
print('此训练模型已经存在,不用再次训练')
还可以加载已训练好的词向量模型查看训练结果。
# 加载已训练好的模型
model_1 = word2vec.Word2Vec.load(save_model_name)
# 计算两个词的相似度/相关程度
y1 = model_1.wv.similarity("董明珠", "手游")
print(u"董明珠和手游的相似度为:", y1)
print("-------------------------------\n")
# 计算某个词的相关词列表
y2 = model_1.wv.most_similar("中国", topn=10) # 10个最相关的
print(model_1.wv["中国"])
print(u"和中国最相关的词有:\n")
for item in y2:
print(item[0], item[1])
print("-------------------------------\n")
感觉还不错。