2017-06-22 22 views
0

gensimパッケージを使用してword2vecモデルを習得し、Word2vecで保存されたモデルはUTF-8でエンコードされていませんが、Word2vecモデルに入力された文章はUTF-8でエンコードされています

これらのログメッセージ情報があります。モデルは訓練されて保存されていました。その後

INFO : not storing attribute syn0norm 
INFO : not storing attribute cum_table 

、私は次のエラーを得、これを使用してモデルをロードするために

from gensim.models import Word2Vec 
model = Word2Vec.load("300features_1minwords_10context") 

を試してみました。

2017-06-22 21:27:14,975 : INFO : loading Word2Vec object from 300features_1minwords_10context 
2017-06-22 21:27:15,496 : INFO : loading wv recursively from 300features_1minwords_10context.wv.* with mmap=None 
2017-06-22 21:27:15,497 : INFO : setting ignored attribute syn0norm to None 
2017-06-22 21:27:15,498 : INFO : setting ignored attribute cum_table to None 
2017-06-22 21:27:15,499 : INFO : loaded 300features_1minwords_10context 
--------------------------------------------------------------------------- 
AttributeError       Traceback (most recent call last) 
<ipython-input-25-9d90db0f07c0> in <module>() 
     1 from gensim.models import Word2Vec 
     2 model = Word2Vec.load("300features_1minwords_10context") 
----> 3 model.syn0.shape 

AttributeError: 'Word2Vec' object has no attribute 'syn0' 

また、ファイル "300features_1minwords_10context" で、

"300features_1minwords_10context" is not UTF-8 encoded 
Saving disabled. 
Open console for more details 

は、上記の属性のエラーを修正するにことを示して、私はまた、Googleのフォーラムから次のことを試してみました

import gensim 
model = gensim.models.KeyedVectors.load_word2vec_format("300features_1minwords_10context") 
model.syn0.shape 

別のエラーが発生しました。

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte 

モデルはUTF-8エンコードされた文章で訓練されています。なぜ私はこのエラーを投げているのか分かりません。

詳細情報:ここでは

df = pd.read_csv('UNSPSCdataset.csv',encoding='mac_roman',low_memory=False) 
features = ['MaterialDescription'] 
temp_features = df[features] 
temp_features.to_csv('materialDescription', encoding='UTF-8') 
X = pd.read_csv('materialDescription',encoding='UTF-8') 

は、私はパンダのデータフレームを使用してアクセスするために、「mac_roman」エンコーディングを使用する必要がありました。データフレーム内のテキストはモデルのトレーニング中にUTF-8でなければならないため、UTF-8でエンコードして別のCSVファイルに保存しました。その特定の列にアクセスしました。

すべてのヘルプは

答えて

2

最新gensimを使用しているかなりのでしょうか?そうでない場合は、試してみてください。古いバージョンでは、時にはsave()/load()のバグがあります。

INFOログの行が正常である「保存しない」 - 彼らはすべての問題を示すものではありませんよ、あなたが直接時にエラー「何の属性を持っていない」

を取得している(したがって、あなたの質問から削除される可能性があります。) load()? (ここでは完全なエラー・スタックが便利、そしてこれを明確でしょう。)


UPDATE:今-示すエラー・スタックからは、エラーがないあるload()ラインで発生したが、上次の行に、model.syn0.shapeにアクセスしようとしたとき。 gensimの最近のバージョンでは、Word2Vecクラスオブジェクトのプロパティとしてsyn0がなくなりました。その情報は、wvプロパティの構成要素KeyedVectorsオブジェクトに移動されました。したがって、model.wv.syn0.shapeは、あなたが探しているものにエラーなしでアクセスする可能性が高いです。


モデルが大きめである

save()は、モデルの大きなアレイのプロパティ(等 syn0)のために、余分な拡張子を持つ、側面に複数のファイルを生成することができます。これらのファイルは、モデルが再設定されるためには、メインファイル名の横に保管する必要があります。 load()が不完全な新しい場所に、 300features_1minwords_10contextファイルを移動しましたが、添付ファイルは移動できませんでしたか?

することはできませんload_word2vec_format()save() Dネイティブgensimたファイル - 彼らの異なるフォーマット完全に、エンコーディングエラーが完全に別の形式として(save()から)バイナリPythonのピクルスファイルを読み込もうとするだけの成果物であるようにします。

+0

こんにちは@gojomo、私は最新のgensimを使用しています。はい、ロード時に「属性がありません」というエラーが発生しています 質問にエラースタックが付いています。 syn0のようなものは生成されません。モデルで保存されたファイルでさえ、何もありません。 Unicodeの問題のために、モデルはまったく保存されないと思います。 文章を印刷すると、このようなユニコードのシンボルは表示されませんでした。u'Airtel ' –

+0

上記の更新インラインを参照してください。実際のエラーは 'load()'ではなく、次の行の 'model.syn0'にアクセスしようとしています。' syn0'にアクセスしようとしています。最近のgensimのバージョンでは ' model.wv.syn0'。 – gojomo

+0

こんにちは、私はこれを試してください。 https://stackoverflow.com/questions/44740161/how-to-preserve-number-of-records-in-word2vec –

関連する問題