Используя предварительно обученные векторы 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)