我正在运行一些训练,保存和加载Word2Vec模型的代码(这是我下载的库的一部分,由GitHub上的用户制作,作为已发表论文的一部分)。运行该代码后,尽管实际上确实运行到最后,但代码的两部分似乎有问题。
第一个错误是由称为method
的{{1}}(被称为程序主方法的一部分)引起的。
第二个错误是由主train_word2vec()
后面的一行引起的。
method
if exists(model_name):
embedding_model = word2vec.Word2Vec.load(model_name) #This line causes a UserWarning.
x_train, x_val, x_test, vocabulary, vocabulary_inv, sentences = load_data() #This line seems to run fine.
embedding_weights = train_word2vec(sentences, vocabulary_inv) #This line causes two DeprecationWarnings.
执行代码后,第一行有问题的行会引起UserWarning:
“ C:\ Users \ User1 \ Anaconda3 \ lib \ site-packages \ smart_open \ smart_open_lib.py398:用户警告:不建议使用此功能,请改用smart_open.open。有关详细信息,请参阅迁移说明:https://github.com/RaRe-Technologies/smart_open/blob/master/README.rst#migrating-to-the-new-open-function “
第二行有问题的行会导致两个DeprecationWarning:
” load_w2v.py:91:弃用警告:调用已弃用的“ 包含”(方法将在4.0.0中删除,请改用self.wv. 包含())。 embedding_weights = [np.array([embedding_model [w],如果w在embedding_model中,否则为np.random.uniform(-0.25,0.25,embedding_model.vector_size)for vocabulary_inv中的w])]“ “ load_w2v.py:91:弃用警告:调用已弃用的 getitem (方法将从4.0.0中删除,请改用self.wv. getitem ())。 embedding_weights = [np.array([embedding_model [w],如果w在embedding_model中,否则为np.random.uniform(-0.25,0.25,embedding_model.vector_size)对于vocabulary_inv中的w]]] “
我看过RaRe技术自述文件。令人困惑的是,我的代码中什么地方都没有使用“ smart_open”功能,所以我不明白为什么会发出第一个警告。在Python文件开头的导入文件中甚至都没有smart_open。
关于DeprecationWarnings,我在代码中既未使用“包含”方法也未使用“ getitem”方法,因此不确定这些警告来自何处。
据我所知,代码似乎可以正常运行,并且最终文件似乎已成功创建。但是,当我重新创建别人编写的一些代码时,我不确定文件是否已正确创建。
embedding_weights = [np.array([embedding_model[w] if w in embedding_model else np.random.uniform(-0.25,0.25,embedding_model.vector_size) for w in vocabulary_inv])]
和DeprecationWarnings
是否实际上指示程序未成功执行?还是它们像“警告”一样存在?即代码能否正常运行并且仍然发出“警告”?
如果有人可以看到我如何更改代码来避免这些错误,我们将不胜感激。我是Python的新手,所以请指出任何错误。谢谢。
答案 0 :(得分:0)
通常,您通常可以忽略各种“警告”。如果它们停止了操作或破坏了结果,它们将显示为更严重的错误或异常,必须进行处理才能继续执行。
特别是在这里,两个警告实际上都是关于某种方法的“过时”的。通常,这意味着不鼓励使用一种方法,而推荐使用一种更新的,推荐性更高的方法-但该方法目前仍有效(并且可能需要更长的时间)。
请多加注意,您可以尝试抢先确保所有代码(和库)都使用最推荐的方法-但是,如果事情正常进行,通常并不紧急,甚至没有必要。
关于smart_open
的通知实际上是gensim
要在即将发布的版本中修复的问题。 smart_open
软件包改变了它的首选做事方式,gensim
仍在使用较旧的方法(仍在工作,但已弃用)。您并不是直接致电smart_open
,所以这并不是您真正关心的问题。
关于contains
和getitem
的通知可能更多地处于您的控制之下-它们似乎是由文件load_w2v.py
中的行触发的–不在gensim
中,以及您未显示谁的代码。特别是,gensim
现在鼓励对单词向量的访问通过Word2Vec
模型的.wv
属性,而不是通过顶层模型(将在其中生成这些警告)。 (尽管如此,旧方法仍然有效,直到gensim
决定做出重大更改为止。)
如果警告显示确实困扰您,并且您不想深入研究代码以避免触发它们,那么您也可以直接隐藏它们的显示,如@ tom-dalton中的注释和链接所述。