【问题标题】:How to load numpy array to gensim Keyedvector format?如何将 numpy 数组加载为 gensim Keyedvector 格式?
【发布时间】:2019-02-23 07:09:09
【问题描述】:

在训练完词嵌入后,我将其保存为 npz 格式。 当我尝试将其加载为 KeyedVectors 格式时,它会出错。 如何将 numpy 数组加载为 gensim.KeyedVectors 格式? 我真的需要它,因为我需要使用诸如 most_similar() 之类的函数,而不仅仅是向量值。

在带有张量流的model.py中,

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

【问题讨论】:

    标签: python numpy tensorflow gensim embedding


    【解决方案1】:

    Gensim KeyedVectors 实例无法从单纯的原始数组中加载:没有关于表示哪些单词以及哪些索引保存哪些单词的信息。

    gensim 中的普通 .load() 需要使用 gensim 自己的 .save() 方法从 gensim 保存的对象。

    字向量可以从与原始 Google/Mikolov word2vec.c 工具使用的格式相同的文件中加载。那么也许你的 tensorflow 代码可以这样保存它们?

    然后,您将使用.load_word2vec_format()

    【讨论】:

      猜你喜欢
      • 2018-06-22
      • 2014-12-18
      • 1970-01-01
      • 1970-01-01
      • 2016-08-23
      • 2015-05-21
      • 1970-01-01
      • 1970-01-01
      • 2020-06-06
      相关资源
      最近更新 更多