gensim中word2vec使用

       ~~~~~~       看了很多文章,对word2vec的原理讲解很清楚,还有一些源码解读和实现。但是在真正工作中如何熟练使用更是必须的。翻了下网页发现这个内容比较少。就记录一下关键它的使用。
       ~~~~~~       word2vec的实现是位于gensim包中gensim\models\word2vec.py文件里面的Word2Vec类中

参数24个:
参数名称默认值用途
sentencesNone训练的语料,一个可迭代对象。对于从磁盘加载的大型语料最好用gensim.models.word2vec.BrownCorpusgensim.models.word2vec.Text8Corpusgensim.models.word2vec.LineSentence 去生成sentences
size100生成词向量的维度
alpha0.025初始学习率
window5句子中当前和预测单词之间的最大距离,取词窗口大小
min_count5文档中总频率低于此值的单词忽略
max_vocab_sizeNone构建词汇表最大数,词汇大于这个数按照频率排序,去除频率低的词汇
sample1e-3高频词进行随机下采样的阈值,范围是(0, 1e-5)
seed1向量初始化的随机数种子
workers3几个CPU进行跑
min_alpha0.0001随着学习进行,学习率线性下降到这个最小数
sg0训练时算法选择 0:skip-gram, 1: CBOW
hs00: 当这个为0 并且negative 参数不为零,用负采样,1:层次 softmax
negative5负采样,大于0是使用负采样,当为负数值就会进行增加噪音词
ns_exponent0.75负采样指数,确定负采样抽样形式:1.0:完全按比例抽,0.0对所有词均等采样,负值对低频词更多的采样。流行的是0.75
cbow_mean10:使用上下文单词向量的总和,1:使用均值; 只适用于cbow
hashfxnhash希函数用于随机初始化权重,以提高训练的可重复性。
iter5迭代次数,epoch
null_word0空填充数据
trim_ruleNone词汇修剪规则,指定某些词语是否应保留在词汇表中,默认是 词频小于 min_count则丢弃,可以是自己定义规则
sorted_vocab11:按照降序排列,0:不排序;实现方法:gensim.models.word2vec.Word2VecVocab.sort_vocab()
batch_words10000词数量大小,大于10000 cython会进行截断
compute_lossFalse损失(loss)值,如果是True 就会保存
callbacks()在训练期间的特定阶段执行的回调序列~gensim.models.callbacks.CallbackAny2Vec
max_final_vocabNone通过自动选择匹配的min_count将词汇限制为目标词汇大小,如果min_count有参数就用给定的数值
模型保存使用:

完成训练后只存储并使用~gensim.models.keyedvectors.KeyedVectors
该模型可以通过以下方式存储/加载:
~gensim.models.word2vec.Word2Vec.save 保存模型
~gensim.models.word2vec.Word2Vec.load 加载模型

训练过的单词向量也可以从与其兼容的格式存储/加载:
gensim.models.keyedvectors.KeyedVectors.save_word2vec_format实现原始 w o r d 2 v e c word2vec word2vec 的保存
gensim.models.keyedvectors.KeyedVectors.load_word2vec_format 单词向量的加载

模型的属性

wv: 是类 ~gensim.models.keyedvectors.Word2VecKeyedVectors生产的对象,在word2vec是一个属性
为了在不同的训练算法(Word2Vec,Fastext,WordRank,VarEmbed)之间共享单词向量查询代码,gensim将单词向量的存储和查询分离为一个单独的类 KeyedVectors
       ~~~~~~       包含单词和对应向量的映射。可以通过它进行词向量的查询

model_w2v.wv.most_similar("民生银行")  # 找最相似的词
model_w2v.wv.get_vector("民生银行")  # 查看向量
model_w2v.wv.syn0  #  model_w2v.wv.vectors 一样都是查看向量
model_w2v.wv.vocab  # 查看词和对应向量
model_w2v.wv.index2word  # 每个index对应的词

小提示:
需要注意的是word2vec采用的是标准hash table存放方式,hash码重复后挨着放 取的时候根据拿出index找到词表里真正单词,对比一下
syn0 :就是词向量的大矩阵,第i行表示vocab中下标为i的词
syn1:用hs算法时用到的辅助矩阵,即文章中的Wx
syn1neg:negative sampling算法时用到的辅助矩阵
Next_random:作者自己生成的随机数,线程里面初始化就是:

vocabulary:是类 ~gensim.models.word2vec.Word2VecVocab
       ~~~~~~        模型的词汇表,除了存储单词外,还提供额外的功能,如构建一个霍夫曼树(频繁的单词更接近根),或丢弃极其罕见的单词。
trainables 是类 ~gensim.models.word2vec.Word2VecTrainables
       ~~~~~~        训练词向量的内部浅层神经网络,CBOWskip-gram(SG)略有不同,它的weights就是我们后面需要使用的词向量,隐藏层的size和词向量特征size一致

sentences相关

训练首先是语料集的加载。首先要生成Word2Vec需要的语料格式:
1.对于简单的句子可以:

from gensim.models import Word2Vec
# sentences只需要是一个可迭代对象就可以
sentences = [["cat", "say", "meow"], ["dog", "say", "woof"]]
model = Word2Vec(sentences, min_count=1)  # 执行这一句的时候就是在训练模型了

2.对于大型语料库:
Gemsim 的输入只要求序列化的句子,而不需要将所有输入都存储在内存中。简单来说,可以输入一个句子,处理它,删除它,再载入另外一个句子。
gensim.models.word2vec.BrownCorpus: BrownCorpus是一个英国语料库,可以用这个直接处理
gensim.models.word2vec.Text8Corpus
gensim.models.word2vec.LineSentence

 # 使用LineSentence() 
sentences = LineSentence('a.txt')   #  文本格式是 单词空格分开,一行为一个文档
 # 使用Text8Corpus() 
sentences = Text8Corpus('a.txt')   #  文本格式是 单词空格分开,一行为一个文
model = Word2Vec(sentences, min_count=1)  # 执行这一句的时候就是在训练模型了
  • 29
    点赞
  • 128
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值