2017-04-13 13 views
1

Gensim Doc2Vec Exception AttributeError: 'str' object has no attribute 'words'과 비슷한 질문이 있지만 유용한 답변을 얻지 못했습니다.20newsgroups 데이터 세트에서 Doc2Vec 교육. 예외 얻기 AttributeError : 'str'객체에 'words'속성이 없습니다.

20newsgroups corpora에서 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) 

: screen

I : I 모델을로드 할 때

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) 

문제가 나타납니다 는 여기가 Vocab의 구축 방법 시도 :

  • 레이블 사용 대신 TaggedDocument

  • 대신 목록에 추가의 TaggedDocument를 산출의 edSentence는

  • 설정 min_count 1 그래서 단어 (단지의 경우) 무시 될 것이다

또한 문제의 발생 python2뿐만 아니라 python3.

제발,이 문제를 해결하도록 도와주세요.

답변

0

오프 사이트 (imgur)의 'screen'링크에서 가장 중요한 정보 (오류를 유발하는 정확한 코드 및 오류 텍스트 자체)가 숨겨져 있습니다.

model = Doc2Vec("20ng_infer") 
: (. 즉, 이상적인 텍스트 오류를 ​​트리거하지 않고, 오히려 확인을 실행하는 것 다른 단계보다, 질문에 & 붙여 넣기를 절단하는 것)

은 스크린 샷을 보면, 라인있다

... 오류를 트리거합니다.

documented for the Doc2Vec() initialization method과 같은 인수는 위의 행에서 "20ng_infer" 인수와 같은 일반 문자열이 아니므로 유용하지는 않습니다.

이전에 model.save()으로 저장된 모델을로드하려는 경우 Doc2Vec.load()을 사용해야합니다. 모델을로드 할 로컬 파일 경로를 설명하는 문자열을 사용합니다. 그래서 시도 : 큰 모델은 모두 당신이 save()에 공급되는 문자열로 시작, 여러 파일에 저장 될 수 있음을 또한

model = Doc2Vec.load("20ng_infer") 

(참고,이 파일을 보관해야합니다/함께 이동 다시는에 load()를 재하는 미래.)