如何从TensorFlow word2vec教程加载已保存的模型并用于单词比较

时间:2017-10-06 16:03:25

标签: tensorflow word2vec

我是TensorFlow,word2vec和神经网络的新手,我正在努力了解它们。我正在研究这个TensorFlow教程:https://www.tensorflow.org/tutorials/word2vec。我为这个教程运行了word2vec_o​​ptimized.py代码:https://github.com/tensorflow/models/blob/master/tutorials/embedding/word2vec_optimized.py。当教程代码完成运行时,它会输出一个保存的TensorFlow模型。我试图看看我是否可以重新加载模型并使用它来进行单词比较,即法国是在巴黎,因为俄罗斯是在莫斯科。

我在教程代码中看到有一个可用于此的类比方法:

def analogy(self, w0, w1, w2):
    """Predict word w3 as in w0:w1 vs w2:w3."""
    wid = np.array([[self._word2id.get(w, 0) for w in [w0, w1, w2]]])
    idx = self._predict(wid)
    for c in [self._id2word[i] for i in idx[0, :]]:
      if c not in [w0, w1, w2]:
        print(c)
        break
    print("unknown")

但首先,我需要重新加载已保存的模型,我在主要方法中执行此操作:

def main(_):
  with tf.Graph().as_default(), tf.Session() as session:
    with tf.device("/cpu:0"):
      model = tf.train.import_meta_graph('model.ckpt.meta')
      model.restore(session, tf.train.latest_checkpoint('/results/'))
      model.analogy(b'france', b'paris', b'russia')

这会导致以下错误:

Traceback (most recent call last):
  File "./word2vec_test.py", line 539, in <module>
  tf.app.run()
  File "/util/opt/anaconda/2.2/envs/tensorflow-1.0.0/lib/python2.7/site-packages/tensorflow/python/platform/app.py", line 44, in run
    _sys.exit(main(_sys.argv[:1] + flags_passthrough))
  File "./embedding_tutorial/embedding/word2vec_test.py", line 534, in main
    model.analogy(b'france', b'paris', b'russia')
AttributeError: 'Saver' object has no attribute 'analogy'

如何加载已保存的模块并使用它来调用类比方法?我将我的main方法放在与模拟方法相同的文件中。

1 个答案:

答案 0 :(得分:0)

我认为问题是analogy()是类Word2Vec的方法,但是您没有将model实例化为该类型的对象。

试试这个:

opts = Options()
with tf.Graph().as_default(), tf.Session() as session:
  with tf.device("/cpu:0"):
    model = Word2Vec(opts, session)
    model.saver = tf.train.import_meta_graph('/path/to/model.ckpt.meta')
    model.saver.restore(session, 
                        tf.train.latest_checkpoint('/path/to/results/'))
    model.analogy(b'france', b'paris', b'russia')

或者实际上,如果您在训练时使用--interactive,则在训练结束后,您将使用ipython进入interactive mode