如何在gensim中使用word2vec2tensor?

时间:2019-02-11 04:31:23

标签: python gensim word2vec

我正在按照下面的gensim教程将word2vec模型转换为张量。 链接至本教程:https://radimrehurek.com/gensim/scripts/word2vec2tensor.html

更具体地说,我运行了以下命令

python -m gensim.scripts.word2vec2tensor -i C:\Users\Emi\Desktop\word2vec\model_name -o C:\Users\Emi\Desktop\word2vec

但是,以上命令却出现以下错误。

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte

当我使用model.wv.save_word2vec_format(model_name)保存模型时(如以下链接所述:https://github.com/RaRe-Technologies/gensim/issues/1847),然后使用上述命令,我得到以下错误。

ValueError: invalid vector on line 1 (is this really the text format?)

只是想知道我是否在逗号的语法上犯了任何错误。请让我知道如何解决此问题。

很高兴在需要时提供更多详细信息。

2 个答案:

答案 0 :(得分:1)

我能够使用以下代码解决此问题:

model = gensim.models.keyedvectors.KeyedVectors.load(file_name)

max_size = len(model.wv.vocab)-1
w2v = np.zeros((max_size,model.layer1_size))

if not os.path.exists('projections'):
    os.makedirs('projections')

with open("projections/metadata.tsv", 'w+') as file_metadata:

    for i, word in enumerate(model.wv.index2word[:max_size]):

        #store the embeddings of the word
        w2v[i] = model.wv[word]

        #write the word to a file 
        file_metadata.write(word + '\n')

sess = tf.InteractiveSession()
with tf.device("/cpu:0"):
    embedding = tf.Variable(w2v, trainable=False, name='embedding')
tf.global_variables_initializer().run()
saver = tf.train.Saver()
writer = tf.summary.FileWriter('projections', sess.graph)
config = projector.ProjectorConfig()
embed= config.embeddings.add()
embed.tensor_name = 'embedding'
embed.metadata_path = 'metadata.tsv'
projector.visualize_embeddings(writer, config)
saver.save(sess, 'projections/model.ckpt', global_step=max_size)

答案 1 :(得分:1)

您的模型与gensim.scripts.word2vec2tensor()不兼容。您可能需要使用model.wv.save_word2vec_format()保存模型。

我猜您使用了model.save(),它在后台调用pickle(请参阅utils documentation)。或者,model.wv.save_word2vec_format()将以“ docs中所述的格式保存单词向量“采用与原始word2vec实现兼容的格式”。此格式与gensim.scripts.word2vec2tensor()