gensim Word2Vec 训练和使用

本文介绍如何使用gensim库中的Word2Vec模型进行词向量训练,包括模型的建立、参数配置、训练过程及结果保存与加载的方法,并演示了如何通过训练后的模型进行词向量查询和相似度计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

训练模型

  • 利用gensim.models.Word2Vec(sentences)建立词向量模型
    • 该构造函数执行了三个步骤:建立一个空的模型对象,遍历一次语料库建立词典,第二次遍历语料库建立神经网络模型可以通过分别执行model=gensim.models.Word2Vec()model.build_vocab(sentences)model.train(sentences)来实现
  • 训练时可以指定以下参数
    • min_count指定了需要训练词语的最小出现次数,默认为5
    • size指定了训练时词向量维度,默认为100
    • worker指定了完成训练过程的线程数,默认为1不使用多线程。只有注意安装Cython的前提下该参数设置才有意义
  • 训练结果保存可以通过model.save('fname')model.save_word2vec_format(fname)来保存为文件,再使用model.load(fname)model.load_word2vec_format(fname,encoding='utf-8')读取查询结果
 

例如:

from gensim.models.word2vec import Word2Vec 

sentences = [['A1','A2'],[],[],....] 
model= Word2Vec()
model.build_vocab(sentences)
model.train(sentences,total_examples = model.corpus_count,epochs = model.iter)

 

 

 

保存:
model.save('/tmp/MyModel')
#model.save_word2vec_format('/tmp/mymodel.txt',binary = False)
#model.save_word2vec_format('/tmp/mymodel.bin.gz',binary = True)
 
  • 前一组方法保存的文件不能利用文本编辑器查看但是保存了训练的全部信息,可以在读取后追加训练
  • 后一组方法保存为word2vec文本格式但是保存时丢失了词汇树等部分信息,不能追加训练
 
追加加训练:
model = gensim.models.Word2Vec.load('/tmp/mymodel')
model.train(more_sentences)
加载:
model = gensim.models.Word2Vec.load('/tmp/mymodel')

#model = gensim.models.KeyedVectors.load_word2vec_format('/tmp/vectors.txt',binary = False)
#model = gensim.models.KeyedVectors。load_word2vec_format('/tmp/vectors.bin',binary = True)
##使用gzipped / bz2输入也可以,不需要解压:
#model = gensim.models.KeyedVectors.load_word2vec_format('/tmp/vectors.bin.gz',binary=True)
 

模型使用:

 

获取词向量

print(model ['man'])
print(type(model ['man']))
输出:
[0.14116223 0.05663395 0.01500377 -0.03592452 ...] 
numpy.ndarray

计算一个词的最近似的词,倒排序

model.most_similar(['男人'])

输出:
[('女',0.7664012908935547),
 ( '男孩',0.6824870109558105),
 ( '青少年',0.6586930155754089),
 ( '女孩',0.5921714305877686),
 ( '强盗',0.5585119128227234),
 ( '男',0.5489763021469116),
 ('人',0.5420035719871521),
 ( '人',0.5342026352882385),
 ( '绅士',0.5337990522384644),
 ( '摩托车手',0.5336882472038269)]
 

计算两词之间的余弦相似度

word2vec一个很大的亮点:支持词语的加减运算(实际中可能只有少数例子比较符合)
model.most_similar(positive = ['woman','king'],negative = ['man'],topn = 2)
输出:
[('王后',0.7118192911148071),('君主',0.6189675331115723)]
---
model.similarity('女人', '男人')
输出:
0.7664012234410319

 

计算两个集合之间的余弦似度

当出现某个词语不在这个训练集合中的时候,会报错!

 

list1 = ['我','走','我','学校'] 
list2 = ['我','去','家'] 
list_sim1 = model.n_similarity(list1,list2)
print(list_sim1)
输出:
0.772446878519

选出集合中不同类的词语

model.doesnt_match('breakfast cereal dinner lunch'.split())
输出:
'谷类'



 






 

 

 

 

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_yuki_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值