2017-04-13 5 views
1

Il y avait une question similaire ici Gensim Doc2Vec Exception AttributeError: 'str' object has no attribute 'words', mais il n'a pas obtenu de réponses utiles. J'essaie de former Doc2Vec sur les corpus de 20newsgroups. Voilà comment je construis le vocab:Formation du jeu de données Doc2Vec sur 20newsgroups. Obtenir Exception AttributeError: l'objet 'str' n'a pas d'attribut 'words'

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) 

Ensuite, je forme le modèle et enregistrer le résultat:

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) 

Le problème apparaît lorsque je tente de charger le modèle: screen

I essayé:

  • en utilisant Label edSentence au lieu de TaggedDocument

  • rendement TaggedDocument au lieu de les annexant à la liste

  • paramètre min_count 1, donc pas de mot serait ignoré (au cas)

De plus, le problème se produit sur python2 ainsi que python3.

Aidez-moi à résoudre ce problème.

Répondre

0

Vous avez masqué les informations les plus importantes - le code exact qui déclenche l'erreur, et le texte d'erreur lui-même - dans le lien hors site (imgur) 'screen'. (. Ce serait le texte idéal pour couper & coller dans la question, plutôt que d'autres mesures qui semblent fonctionner OK, sans déclencher l'erreur)

En regardant cette capture d'écran, il y a la ligne:

model = Doc2Vec("20ng_infer") 

... qui déclenche l'erreur.

Notez qu'aucun des arguments comme documented for the Doc2Vec() initialization method est une chaîne normale, comme l'argument "20ng_infer" dans la ligne ci-dessus - il est donc peu probable que cela fasse quelque chose d'utile. Si vous essayez de charger un modèle précédemment enregistré avec model.save(), vous devez utiliser Doc2Vec.load() - qui prendra une chaîne décrivant un chemin de fichier local à partir duquel charger le modèle. Donc, essayez:

model = Doc2Vec.load("20ng_infer") 

(Notez également que les modèles plus grands peuvent être enregistrés dans plusieurs fichiers, tout en commençant par la chaîne que vous avez fourni à save(), et ces dossiers doivent être conservés/déplacés ensemble à nouveau les re- load() dans la futur.)