2016-11-14 1 views
1

I las den folgenden Code ein doc2vec model.Each Dokument zu erlernen ist als eine Text/Linie zwischen zwei Linien definiert:Wie lösen Gensim KeyError, wenn ich versuche, den Vektor eines Dokuments zu haben?

  • clueweb09-en0001-XX-XXXXXX
  • end_clueweb09-en0001-XX-XXXXXX

Dies ist mein Code:

path='/home/work/Step2/test-input/html' 


alldocs = [] # will hold all docs in original order 


for fname in os.listdir(path): 
    with open(path+'/'+fname) as alldata: 
     for line in alldata: 
      docId= line 
      print docId 
      context= alldata.next() 
      #print context 
      tokens = gensim.utils.to_unicode(context).split() 
      end=alldata.next() 
      alldocs.append(LabeledSentence(tokens[:],[docId])) 

model = Doc2Vec(alpha=0.025, min_alpha=0.025) # use fixed learning rate 
model.build_vocab(alldocs) 
for epoch in range(10): 
    model.train(alldocs) 
    model.alpha -= 0.002 # decrease the learning rate 
    model.min_alpha = model.alpha # fix the learning rate, no decay 

# store the model to mmap-able files 
model.save(path+'/my_html_model.doc2vec') 

Aber ich habe den Fehler, wenn ich model.docvecs [ 'clueweb09-en0001-01-34238' geschrieben ] aber wenn ich schreibe model.docvecs [0] habe ich das Ergebnis.

Dies ist der Fehler, den ich habe:

Traceback (most recent call last): 
    File "getLearingDoc.py", line 40, in <module> 
    print model.docvecs['clueweb09-en0001-01-34238'] 
    File "/home/flashkar/anaconda/lib/python2.7/site-packages/gensim/models/doc2vec.py", line 341, in __getitem__ 
    return self.doctag_syn0[self._int_index(index)] 
    File "/home/flashkar/anaconda/lib/python2.7/site-packages/gensim/models/doc2vec.py", line 315, in _int_index 
    return self.max_rawint + 1 + self.doctags[index].offset 
KeyError: 'clueweb09-en0001-01-34238' 

Ich habe keine Erfahrungen in Python und GENSIM mir bitte sagen, wie kann ich dieses Problem lösen.

Antwort

0

Sind Sie sicher, dass ein Tag genau'clueweb09-en0001-01-34238' - keine streuenden Zeilenumbrüche/etc - wurde während des Trainings vorgestellt?

Sie können alle String Doktags, die dem Modell bekannt sind, in den Tasten des model.docvecs.doctags dict oder in der Liste model.docvecs.offset2doctag sehen.

Verwandte Themen