如何在Tensorflow中投影我的word2vec模型

时间:2018-11-17 17:57:54

标签: tensorflow gensim word2vec tensorboard

我是不熟悉使用单词嵌入的人,并且想知道如何在Tensorflow中投影模型。我当时在看tensorflow网站,它只接受tsv文件(矢量/元数据),但不知道如何生成所需的tsv文件。我尝试查找它,但找不到任何解决方案来对此进行分级。我会尝试以tsv文件格式保存模型吗,是否需要进行一些转换?任何帮助将不胜感激。

我将模型保存为以下文件,并在需要使用时将其加载:

  

word2vec.model

     

word2vec.model.wv.vectors.npy

1 个答案:

答案 0 :(得分:1)

假设您要尝试将一些经过预训练的Gensim词嵌入程序加载到模型中,则可以使用以下代码直接执行此操作。

import numpy
import tensorflow as tf
from   gensim.models import KeyedVectors

# Load the word-vector model
wvec_fn = 'wvecs.kv'
wvecs = KeyedVectors.load(wvec_fn, mmap='r')
vec_size = wvecs.vector_size
vocab_size = len(wvecs.vocab)

# Create the embedding matrix where words are indexed alphabetically
embedding_mat = numpy.zeros(shape=(vocab_size, vec_size), dtype='int32')
for idx, word in enumerate(sorted(wvecs.vocab)):
    embedding_mat[idx] = wvecs.get_vector(word)

# Setup the embedding matrix for tensorflow
with tf.variable_scope("input_layer"):
    embedding_tf = tf.get_variable(
       "embedding", [vocab_size, vec_size],
        initializer=tf.constant_initializer(embedding_mat),
        trainable=False)

# Integrate this into your model
batch_size = 32     # just for example
seq_length = 20
input_data = tf.placeholder(tf.int32, [batch_size, seq_length])
inputs = tf.nn.embedding_lookup(embedding_tf, input_data)

如果您保存的不是模型,而不仅仅是KeyedVector,则可能需要修改代码以加载模型,然后使用model.wv访问KeyedVector。