2016-06-11 24 views
4

Gibt es eine Möglichkeit, die Dokumentvektoren von ungesehenen und gesehenen Dokumenten von Doc2Vec in der Version gensim 0.11.1 zu erhalten?Wie bekomme ich den Dokumentenvektor von Doc2Vec in Gensim 0.11.1?

  • Zum Beispiel nehme ich an das Modell tausend auf 1000 trainiert - Kann ich der doc-Vektor für die 1000 docs bekommen?

  • Gibt es eine Möglichkeit, Dokumentvektoren von ungesehenen Dokumenten
    aus dem gleichen Vokabular zu erhalten?

Antwort

6

Zum ersten Aufzählungspunkt, können Sie es

from gensim.models import Doc2Vec 
from gensim.models.doc2vec import LabeledSentence 

documents = [] 
documents.append(LabeledSentence(words=[u'some', u'words', u'here'], labels=[u'SENT_1'])) 
documents.append(LabeledSentence(words=[u'some', u'people', u'words', u'like'], labels=[u'SENT_2'])) 
documents.append(LabeledSentence(words=[u'people', u'like', u'words'], labels=[u'SENT_3'])) 


model = Doc2Vec(size=10, window=8, min_count=0, workers=4) 
model.build_vocab(documents) 
model.train(documents) 

print(model[u'SENT_3']) 

Hier in GENSIM 0.11.1 tun SENT_3 ist ein bekannter Satz.

Für den zweiten Aufzählungspunkt können Sie es nicht in Gensim 0.11.1 tun, Sie müssen es auf 0.12.4 aktualisieren. Diese neueste Version hat die Funktion infer_vector, die einen Vektor für ein ungesehenes Dokument erzeugen kann.

documents = [] 
documents.append(LabeledSentence([u'some', u'words', u'here'], [u'SENT_1'])) 
documents.append(LabeledSentence([u'some', u'people', u'words', u'like'], [u'SENT_2'])) 
documents.append(LabeledSentence([u'people', u'like', u'words'], [u'SENT_3'])) 


model = Doc2Vec(size=10, window=8, min_count=0, workers=4) 
model.build_vocab(documents) 
model.train(documents) 

print(model.docvecs[u'SENT_3']) # generate a vector for a known sentence 
print(model.infer_vector([u'people', u'like', u'words'])) # generate a vector for an unseen sentence