2016-06-11 3 views
4

Existe-t-il un moyen d'obtenir les vecteurs de document des documents invisibles et non visibles de Doc2Vec dans la version 0.11.1 de gensim?Comment obtenir le vecteur de document de Doc2Vec dans Gensim 0.11.1?

  • Par exemple, supposons que je le modèle formé sur 1000000 - Puis-je obtenir le vecteur de doc pour les 1000 documents?

  • Existe-t-il un moyen d'obtenir des vecteurs de document de documents non-créés composés
    à partir du même vocabulaire?

Répondre

6

Pour le premier point, vous pouvez le faire dans gensim 0.11.1

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']) 

Ici SENT_3 est une phrase connue.

Pour le deuxième point, vous ne pouvez PAS le faire dans le gensim 0.11.1, vous devez le mettre à jour à 0.12.4. Cette dernière version a la fonction infer_vector qui peut générer un vecteur pour un document invisible.

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