使用word2vec预训练向量,如何生成句子的id作为tensorflow中tf.nn.embedding_lookup函数的输入?

时间:2017-01-04 15:13:47

标签: python tensorflow gensim word2vec

要提取输入数据的嵌入表示,tensorflow文档说我们可以使用以下内容:

embed = tf.nn.embedding_lookup(embeddings, input_data)

对于TF documentation,函数tf.nn.embedding_lookup的第二个参数是一个ids的张量:

  

ids:类型为int32或int64的Tensor,包含要在params中查找的ID。

我的问题是:给出一句话,比方说,

  

“欢迎来到世界”

如何表示并将其转换为ids?在下面的代码中,如何将句子转换为input_data

from gensim import models
embedding_path = "../embeddings/GoogleNews-vectors-negative300.bin"
w = models.Word2Vec.load_word2vec_format(embedding_path, binary=True)
X = w.syn0
W = tf.Variable(tf.constant(0.0, shape=X.shape),trainable=False, name="W")
embedding_placeholder = tf.placeholder(tf.float32, X.shape)
embedding_init = W.assign(embedding_placeholder)
embed = tf.nn.embedding_lookup(embedding_init, input_data)
sess = tf.Session()
sess.run(embed, feed_dict={embedding_placeholder: X})

1 个答案:

答案 0 :(得分:3)

我正在寻找像这样的代码。我不知道w的类属性 - 在gensim网站上找不到它们。

s = "hello, how are you?"
tokens = tokenize(s)//function that returns a list of the tokens in a sentence

ids = []
for key in tokens:
  try:
    ids.append(w.vocab[key].index)
  except:
    ids.append(w.vocab['UNK'].index)