2017-12-02 10 views
1

Gensim Phrasesクラスのsave methodを使用して、将来の使用のためにモデルを保存しますが、Gensimのバージョンを更新すると、モデルを読み込む際に問題が発生します。たとえば、モデルを読み込むときに次のエラーが発生します。 2.2.0で作成されたGensim 2.3.0:フォワードの互換性を確保しながらGensimモデルを保存するにはどうすればよいですか?

--------------------------------------------------------------------------- 
AttributeError       Traceback (most recent call last) 
<timed exec> in <module>() 

~/Stuff/Sources/anaconda3/envs/nlp/lib/python3.6/site-packages/gensim/models/phrases.py in __init__(self, phrases_model) 
    395   self.min_count = phrases_model.min_count 
    396   self.delimiter = phrases_model.delimiter 
--> 397   self.scoring = phrases_model.scoring 
    398   self.phrasegrams = {} 
    399   corpus = pseudocorpus(phrases_model.vocab, phrases_model.delimiter) 

AttributeError: 'Phrases' object has no attribute 'scoring' 

転送互換性を保証する良い方法はありますか?

答えて

1

私はgensimを数回しか使用しておらず、初心者ですが、Change Logscoring attribute was introduced on a Phrases class in 2.3.0と判断しています。

githubの問題で気づいたことから、モデルの保存と読み込みに関して、下位互換性はメンテナーが保持しようとしているものです。 "missing score"属性の問題がaddressed in 3.1.0だったようです - pull requestの "フレーズクラスを読み込む際の後方スコアリングの互換性"のコメントと関連する議論を参照してください。修正の考え方は、基本的には、load()メソッドをhandle missing attributes and implicitly replacing them with the defaultsに改善して、失敗のロードを回避することでした。

私は2.3.0の中でgensimがこれを持っていたと思っています。generic SaveLoad class for pickling/unpickling models - ご覧のとおり、ここではモデル固有のロジックはほとんどありません。

モデルを2.2.0と2.3.0の間で互換性を保つことができるかどうかはわかりませんが、私はgensim issue trackerで新しい問題を開くつもりです。

+0

ああ、知っておきたいことです。私は3.1.0に更新しましたが、異なる互換性エラーが発生しました:AttributeError: 'Phrases'オブジェクトに 'common_terms'属性がありません Gensimが後方互換性を維持しようとしている場合は、乾杯! – Durand

+0

@Durand。このディスカッションをgithubの問題と相互参照してください。何が起きているのかを把握したいと思います。ありがとう! – alecxe

+0

@Durand私はあなたが実際に新しい問題を発見したと思う - 私が見るとおり、 '' load() 'メソッドは' 'common_terms'属性を処理しません。(https://github.com/RaRe-Technologies /gensim/blob/develop/gensim/models/phrases.py#L465-L497)。これは、モデル読み込み中に 'scoring'属性として扱われるべきです。 – alecxe

関連する問題