Визуализация вложений Gensim Word2vec в Tensorboard Projector - PullRequest
0 голосов
/ 23 мая 2018

Я видел только несколько вопросов, которые задают этот вопрос, и ни на один из них еще нет ответа, поэтому я подумал, что можно попробовать.Я использовал модель word2vec от gensim для создания некоторых векторов.Я экспортировал их в текст и попытался импортировать их на живую модель встраиваемого проектора tenorflow.Одна проблема. Это не сработало .Он сказал мне, что тензоры были неправильно отформатированы.Поэтому, будучи новичком, я решил спросить некоторых людей с большим опытом о возможных решениях.
Эквивалент моего кода:

import gensim
corpus = [["words","in","sentence","one"],["words","in","sentence","two"]]
model = gensim.models.Word2Vec(iter = 5,size = 64)
model.build_vocab(corpus)
# save memory
vectors = model.wv
del model
vectors.save_word2vec_format("vect.txt",binary = False)

Это создает модель, сохраняет векторы, а затем печатаеткрасиво и красиво получается в файле с разделителями табуляции со значениями для всех измерений.Я понимаю, как делать то, что я делаю, я просто не могу понять, что не так с тем, как я это делаю в тензорном потоке, поскольку, насколько я могу судить, документации по этому вопросу довольно мало.
Одна идея, котораяМне представили, реализует соответствующий код тензорного потока, но я не знаю, как это кодировать, просто импортировать файлы в живой демонстрации.

Редактировать: у меня сейчас новая проблема.Объект, в котором находятся мои векторы, не повторяется, потому что gensim, очевидно, решил создать свои собственные структуры данных, несовместимые с тем, что я пытаюсь сделать.
Хорошо.С этим тоже покончено!Спасибо за вашу помощь!

Ответы [ 2 ]

0 голосов
/ 20 августа 2019

Gensim фактически имеет официальный способ сделать это.

Документация по этому поводу

0 голосов
/ 24 мая 2018

То, что вы описываете, возможно.Следует помнить, что Tensorboard читает из сохраненных двоичных файлов tenorflow, представляющих ваши переменные на диске.

Дополнительная информация о сохранении и восстановлении графика тензорного потока и переменных здесь

Поэтому главная задача - получить вложения как сохраненные tf-переменные.

Допущения:

  • в следующем коде embeddings представляет собой python dict {word:np.array (np.shape==[embedding_size])}

  • версия Python 3,5 +

  • используемые библиотеки numpy as np,tensorflow as tf

  • каталог для хранения переменных tf: model_dir/


Шаг 1. Сложите вложениячтобы получить один np.array

embeddings_vectors = np.stack(list(embeddings.values(), axis=0))
# shape [n_words, embedding_size]

Шаг 2. Сохраните tf.Variable на диске

# Create some variables.
emb = tf.Variable(embeddings_vectors, name='word_embeddings')

# Add an op to initialize the variable.
init_op = tf.global_variables_initializer()

# Add ops to save and restore all the variables.
saver = tf.train.Saver()

# Later, launch the model, initialize the variables and save the
# variables to disk.
with tf.Session() as sess:
   sess.run(init_op)

# Save the variables to disk.
   save_path = saver.save(sess, "model_dir/model.ckpt")
   print("Model saved in path: %s" % save_path)

model_dir должен содержать файлы checkpoint, model.ckpt-1.data-00000-of-00001, model.ckpt-1.index, model.ckpt-1.meta


Шаг 3. Создайте metadata.tsv

Чтобы получить красивое помеченное облако вложений, вы можете предоставитьtensorboard с метаданными в виде значений, разделенных табуляцией (tsv) ( ср. здесь ).

words = '\n'.join(list(embeddings.keys()))

with open(os.path.join('model_dir', 'metadata.tsv'), 'w') as f:
   f.write(words)

# .tsv file written in model_dir/metadata.tsv

Шаг 4: Визуализация

Выполнить $ tensorboard --logdir model_dir -> Проектор .

Для загрузки метаданных здесь происходит волшебство:

load_meta


В качестве напоминания, некоторые word2vec встраиваемые проекции также доступны на http://projector.tensorflow.org/

...