使用gensim中的Word2Vec报错ValueError

你如果尚未解除过word2Vec,这一篇详解值得一看:机器学习:gensim之Word2Vec 详解,以下则主要是我自己项目中使用gensim的Word2Vec中所遇到的问题以及详解
  • 报错信息: ValueError: invalid literal for int() with base 10: 'xx' KeyedVectors.load_word2vec_format()
  • 报错原因:格式有问题
    1、数据类型转换出现问题,不能转换成int(根源)
    2、你传入的数据格式有问题(本人问题所在),这个具体看你使用KeyedVectors.load_word2vec_format()来加载什么,如果是加载训练好的词向量,就说明该词向量就有问题,如果是加载词库出现问题,则需要将词库处理成指定格式;
  • 解决方法
    1、针对词库的问题,需要转换(我使用的是glove.42B.300d.txt)
from gensim.scripts.glove2word2vec import glove2word2vec
def transfer(gloveFile, word2vecFile):
    glove2word2vec(gloveFile, word2vecFile)
 
if __name__ == '__main__':
	# 注意修改成你自己的词库
    transfer('data/glove.42B.300d.txt', 'data/glove_300d_w2v_format.txt')

2、针对训练出来的词向量的问题
首先就是要明确的是训练的出来的词向量文件头部会有两个数字,其表示的是整个词表的大小和维度,所以需要保证你训练出来的词向量最开头一行保存整个词表的大小和维度,我就是因为输出的词向量文本中没有这一行,所以报错!

原来的代码(主要是修改Word2Vec这一部分)

def word2vec_train(data_file,word_vec,save_model):
    num_features = 100  # Word vector dimensionality
    min_word_count = 1  # Minimum word count
    num_workers = 16  # Number of threads to run in parallel
    context = 4  # Context window size
    downsampling = 1e-3  # Downsample setting for frequent words
    f = open(word_vec, mode='w')
	
	# 问题主要就是下面这一部分
    sentences = word2vec.Text8Corpus(data_file)
    model = word2vec.Word2Vec(sentences, workers=num_workers, \
                              size=num_features, min_count=min_word_count, \
                              window=context, sg=1, sample=downsampling)
    # 保存模型
    model.save(save_model)
    # 打印日志
    print(model)
    for key in model.wv.vocab.keys():
        x = model[key].tolist()
        list_x = []
        for var in x:
            list_x.append(str(var))
        list_x = " ".join(list_x)
        f.write(key + ' ' + list_x + '\n')
    return 0

更改后的代码(参数需要根据自己的需要)

def word2vec_train(data_file,word_vec,save_model):
	"""
	data_file:数据文件
	word_vec:训练好的词向量文件
	save_model:训练好的词模型(建议保存,下一次直接加载)
	"""
    num_features = 100  # Word vector dimensionality
    min_word_count = 1  # Minimum word count
    num_workers = 16  # Number of threads to run in parallel
    context = 4  # Context window size
    downsampling = 1e-3  # Downsample setting for frequent words
    f = open(word_vec, mode='w')
	# 问题主要就是下面这一部分
   sentences = LineSentence(dataset_path)
    # 训练word2vec模型(size为向量维度,window为词向量上下文最大距离,min_count需要计算词向量的最小词频)
    model = word2vec.Word2Vec(sentences, num_features, min_word_count, num_workers,context, downsampling,)
    # (iter随机梯度下降法中迭代的最大次数,sg为1是Skip-Gram模型)
    # 保存word2vec模型(创建临时文件以便以后增量训练)
    model.save("word2vec.model")
    model.wv.save_word2vec_format(out_vector, binary=False)
    # 打印日志
    print(model)
    for key in model.wv.vocab.keys():
        x = model[key].tolist()
        list_x = []
        for var in x:
            list_x.append(str(var))
        list_x = " ".join(list_x)
        f.write(key + ' ' + list_x + '\n')
    return 0

如果你有任何疑问欢迎一起交流:d_zhao_work@163.com

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值