Используя предварительно обученные векторы word2vec, как генерировать идентификаторы предложения в качестве входных данных для функции tf.nn.embedding_lookup в тензорном потоке?

Чтобы извлечь встраиваемые представления входных данных, в документации по тензорному потоку сказано, что мы можем использовать следующее:

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

Согласно документации TF, второй параметр функции tf.nn.embedding_lookup является тензором идентификаторов:

Идентификаторы: Тензор с типом int32 или int64, содержащий идентификаторы для поиска в параметрах.

Мой вопрос: учитывая предложение, скажем,

"Добро пожаловать в мир"

как я могу представить и превратить его в 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 ответ

Я искал код что-то вроде этого. Я не знал об атрибутах класса 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)
Другие вопросы по тегам