2017-04-13 4 views
1

ここに似た質問がありますGensim Doc2Vec Exception AttributeError: 'str' object has no attribute 'words'ですが、役に立たない回答はありませんでした。Doc2Vecを20newsgroupsデータセットでトレーニングする。例外の取得AttributeError: 'str'オブジェクトの属性 'words'がありません

私は20newsgroupsコーパスでDoc2Vecを訓練しようとしています。 は、ここで私は単語を構築する方法は次のとおりです。

from sklearn.datasets import fetch_20newsgroups 
    def get_data(subset): 
     newsgroups_data = fetch_20newsgroups(subset=subset, remove=('headers', 'footers', 'quotes')) 
     docs = [] 
     for news_no, news in enumerate(newsgroups_data.data):  
      tokens = gensim.utils.to_unicode(news).split() 
      if len(tokens) == 0: 
       continue 
      sentiment = newsgroups_data.target[news_no] 
      tags = ['SENT_'+ str(news_no), str(sentiment)] 
      docs.append(TaggedDocument(tokens, tags)) 
     return docs 

    train_docs = get_data('train') 
    test_docs = get_data('test') 
    alldocs = train_docs + test_docs 

    model = Doc2Vec(dm=dm, size=size, window=window, alpha = alpha, negative=negative, sample=sample, min_count = min_count, workers=cores, iter=passes) 
    model.build_vocab(alldocs) 

その後、私はモデルを訓練し、結果を保存します。

model.train(train_docs, total_examples = len(train_docs), epochs = model.iter) 
model.train_words = False 
model.train_labels = True 
model.train(test_docs, total_examples = len(test_docs), epochs = model.iter) 

model.save(output) 

私はモデルをロードしようとすると、問題が表示されます。 screen

私は試しました:

  • ラベルを使用しました代わりにTaggedDocument

  • のedSentenceはTaggedDocumentをもたらす代わりの1にmin_count設定リストに

  • それらを追加するので、何の言葉は、問題がで発生した。また

(念のため)無視されないであろうpython2だけでなく、python3。

これを解決してください。

答えて

0

オフサイト(imgur)の 'screen'リンクで最も重要な情報、つまりエラーを引き起こす正確なコードとエラーテキスト自体を非表示にしました。 (。それがエラーをトリガすることなく、むしろ、OKを実行するように見える他のステップよりも、問題に&ペーストをカットするのに理想的なテキストになります)

そのスクリーンショットを見ると、ラインがあります:

model = Doc2Vec("20ng_infer") 

...エラーをトリガします。

documented for the Doc2Vec() initialization methodという引数のいずれも、上記の行の"20ng_infer"引数のようなプレーンな文字列ではないので、何も役立たない可能性があります。

model.save()で以前に保存されたモデルをロードしようとすると、Doc2Vec.load()を使用する必要があります。これには、モデルをロードするローカルファイルパスを示す文字列が使用されます。だから、試してみてください。

model = Doc2Vec.load("20ng_infer") 

(大きなモデルは、すべてあなたがsave()に供給された文字列で始まる、複数のファイルに保存されるかもしれないことにも注意し、これらのファイルが再びでload()にそれらを再ために一緒に移動/保管しなければなりません未来。)

関連する問題