如何在Python中修复UserWarning和DeprecationWarning

时间:2019-06-28 12:27:37

标签: python word2vec

我正在运行一些训练,保存和加载Word2Vec模型的代码(这是我下载的库的一部分,由GitHub上的用户制作,作为已发表论文的一部分)。运行该代码后,尽管实际上确实运行到最后,但代码的两部分似乎有问题。

第一个错误是由称为method的{​​{1}}(被称为程序主方法的一部分)引起的。

第二个错误是由主train_word2vec()后面的一行引起的。

问题行1-在方法train_word2vec()中:

method

问题第2行-程序的稍后部分,采用主要方法:

if exists(model_name):

embedding_model = word2vec.Word2Vec.load(model_name) #This line causes a UserWarning.

DeprecationWarnings是由train_word2Vec中的以下行专门创建的:

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的新手,所以请指出任何错误。谢谢。

1 个答案:

答案 0 :(得分:0)

通常,您通常可以忽略各种“警告”。如果它们停止了操作或破坏了结果,它们将显示为更严重的错误或异常,必须进行处理才能继续执行。

特别是在这里,两个警告实际上都是关于某种方法的“过时”的。通常,这意味着不鼓励使用一种方法,而推荐使用一种更新的,推荐性更高的方法-但该方法目前仍有效(并且可能需要更长的时间)。

请多加注意,您可以尝试抢先确保所有代码(和库)都使用最推荐的方法-但是,如果事情正常进行,通常并不紧急,甚至没有必要。

关于smart_open的通知实际上是gensim要在即将发布的版本中修复的问题。 smart_open软件包改变了它的首选做事方式,gensim仍在使用较旧的方法(仍在工作,但已弃用)。您并不是直接致电smart_open,所以这并不是您真正关心的问题。

关于containsgetitem的通知可能更多地处于您的控制之下-它们似乎是由文件load_w2v.py中的行触发的–不在gensim中,以及您未显示谁的代码。特别是,gensim现在鼓励对单词向量的访问通过Word2Vec模型的.wv属性,而不是通过顶层模型(将在其中生成这些警告)。 (尽管如此,旧方法仍然有效,直到gensim决定做出重大更改为止。)

如果警告显示确实困扰您,并且您不想深入研究代码以避免触发它们,那么您也可以直接隐藏它们的显示,如@ tom-dalton中的注释和链接所述。