NLP之---gensim库word2vec的使用经验

8 篇文章 2 订阅
3 篇文章 8 订阅

1.说明

在本篇中不介绍关于word2vec的算法原理,仅仅分析关于gensim库中word2vec的使用经验。

2.安装

pip install gensim

3.训练模型

from gensim.models import Word2Vec
model = Word2Vec(sentences=None, # 被训练的文本数据
				 corpus_file=None, # 语料的路径,可以替换掉sentence参数
				 size=100, # 词向量的维度
				 alpha=0.025, # 初始学习率
				 window=5, # 滑动窗口,左右各5个词
				 min_count=5, # 最小计数,如果单词统计数不够就不会进行训练
                 max_vocab_size=None, # 构建词汇表时的内存限制,默认不限制
                 sample=1e-3, # 对高频词进行下采样,采样比例阈值设置
                 seed=1, # 随机种子,初始化词向量时使用,单词的哈希值+seed
                 workers=3, # 线程数
                 min_alpha=0.0001, # 学习率会随迭代次数线性衰减
                 sg=0, # 1表示是skip-gram,0表示CBOW
                 hs=0, # 1表示层级softmax,0表示负采样
                 negative=5, # 如果>0表示使用负采样,官方实验推荐5-20
                 ns_exponent=0.75, # 负采样指数分布,官方推荐0.75
                 cbow_mean=1, # CBOW算法词向量的的合并,0表示使用词向量的和,1表示使用词向量的均值
                 hashfxn=hash, # 哈希的方式初始化权重,有利于复现权重
                 iter=5, # 迭代次数
                 null_word=0, 
                 trim_rule=None, 
                 sorted_vocab=1, # 1表示按照单词出现频率的降序进行排序
                 batch_words=MAX_WORDS_IN_BATCH, # 批次
                 compute_loss=False, # 是否计算并保持损失
                 callbacks=(),
                 max_final_vocab=None
                 )

4.参数解析

  • 1.sg = 1是skip-gran算法,对低频词敏感;默认sg = 0是CBOW算法。【后面会开篇说明原理】
  • 2.size = 100是输出词向量的维度数,值太小会导致词映射因为冲突而影响结果,值太大则会耗内存并使得算法变慢,一般取值为100-200之间。
  • 3.windows = 5是句子当中与目标词之间的最大距离;5表示在目标词钱看5-b个词,后面看b个词(其中,b在0-5之间随机)。
  • 4.min_count = 5是对词进行过滤,频率小于min_count的单词则会被忽视,默认是5.
  • 5.negative和sample可根据训练结果进行微调,sample表示更高频率的词被随机下采样到所设置的阈值,默认值为le-3
  • 6.hs = 1表示层级softmax将会被使用,默认 hs = 0且negative不为0,则负采样将会被选择使用。
  • 7.workers表示并行度,此蚕食只有在安装了CPython后才有效,否则只能使用单核。

5.模型保存与加载

# 保存模型
model.sava(fname)
# 保存词向量,以数值的方式保存,非二进制
model.wv.save_word2vec_format('../data/embedding.txt',binary=False)
# 加载
model = Word2Vec.load(fname)

6.模型使用(词语相似度计算)

model.most_similar(positive = ['woman','king'],negative = ['man'])
# 输出:[('queen',0.50882536),...]
model.doesnt_match("brekfast cereal dinner lunch".split())
# output:'cereal'
model.similarity('woman','man')
# output:0.737
model['computer']	# raw numpy vector of a word
# output:array([-0.00449447, -0.00310097, 0.02421786, ...],dtype = float32)

参考gensim的word2vec的官方说明

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值