Как загрузить массив NumPy в формате Gensim Keyedvector? - PullRequest
0 голосов
/ 23 февраля 2019

После того, как я обучил встраиванию слов, я сохранил его в формате npz.Хотя я пытаюсь загрузить его в формате KeyedVectors, он делает ошибки.Как я могу загрузить массив numy в формате gensim.KeyedVectors?Я действительно нуждаюсь в этом, потому что мне нужно использовать функции, такие как most_s Similar (), а не только векторные значения.

в model.py с tenorflow,

self.verb_embeddings = tf.Variable(np.load(cfg.pretrained_target)["embeddings"],
                                               name="verb_embeddings",
                                               dtype=tf.float32,
                                               trainable=cfg.tune_emb)

в save.py

target_emb = sess.run(model.verb_embeddings)
np.savez_compressed("trained_target_emb.npz", embeddings=target_emb)

в main.py

 model = KeyedVectors.load('trained_target_emb.npz')

Я получил

_pickle.UnpicklingError: A load persistent id instruction was encountered, but no persistent_load function was specified.

также пытался

 model = KeyedVectors.load_word2vec_format('trained_target_emb.npz')

, но получил

 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xde in position 14: invalid continuation byte

1 Ответ

0 голосов
/ 26 февраля 2019

Gensim KeyedVectors экземпляры не могут быть загружены из простого необработанного массива: нет информации о том, какие слова представлены, и какие индексы содержат какие слова.

Простой .load() в gensim ожидает объекты, которые были сохранены из gensim, используя собственный метод .save() gensim.

Векторы слов могут быть загружены из файлов того же формата, что ииспользуется оригинальным инструментом Google / Mikolov word2vec.c.Так что, возможно, ваш тензор потока кода может сохранить их таким образом?

Тогда вы бы использовали .load_word2vec_format().

...