web-dev-qa-db-fra.com

Doc2vec: Comment obtenir des vecteurs de document

Comment obtenir des vecteurs de document de deux documents texte avec Doc2vec? Je suis nouveau dans ce domaine, il serait donc utile que quelqu'un me dirige dans la bonne direction/aide-moi avec un tutoriel

J'utilise gensim.

doc1=["This is a sentence","This is another sentence"]
documents1=[doc.strip().split(" ") for doc in doc1 ]
model = doc2vec.Doc2Vec(documents1, size = 100, window = 300, min_count = 10, workers=4)

Je reçois

AttributeError: l'objet 'list' n'a pas d'attribut 'mots'

chaque fois que je lance cela.

51
bee2502

Si vous souhaitez former un modèle Doc2Vec, votre ensemble de données doit contenir des listes de mots (similaires au format Word2Vec) et des balises (identifiant des documents). Il peut également contenir des informations supplémentaires (voir https://github.com/RaRe-Technologies/gensim/blob/develop/docs/notebooks/doc2vec-IMDB.ipynb pour plus d'informations).

# Import libraries

from gensim.models import doc2vec
from collections import namedtuple

# Load data

doc1 = ["This is a sentence", "This is another sentence"]

# Transform data (you can add more data preprocessing steps) 

docs = []
analyzedDocument = namedtuple('AnalyzedDocument', 'words tags')
for i, text in enumerate(doc1):
    words = text.lower().split()
    tags = [i]
    docs.append(analyzedDocument(words, tags))

# Train model (set min_count = 1, if you want the model to work with the provided example data set)

model = doc2vec.Doc2Vec(docs, size = 100, window = 300, min_count = 1, workers = 4)

# Get the vectors

model.docvecs[0]
model.docvecs[1]

UPDATE (comment s'entraîner à une époque): Cet exemple est devenu obsolète, je l'ai donc supprimé. Pour plus d'informations sur la formation aux époques, voir le commentaire de cette réponse ou @ gojomo.

40
Lenka Vraná

Gensim a été mis à jour . La syntaxe de LabeledSentence ne contient pas d'étiquettes . Il existe maintenant des balises - voir la documentation de LabeledSentence https://radimrehurek.com/gensim/models/doc2vec.html

Cependant, @ bee2502 avait raison avec

docvec = model.docvecs[99] 

Si la valeur du 100e vecteur du modèle formé est utilisée, cela fonctionne avec les entiers et les chaînes.

35
l.augustyniak
doc=["This is a sentence","This is another sentence"]
documents=[doc.strip().split(" ") for doc in doc1 ]
model = doc2vec.Doc2Vec(documents, size = 100, window = 300, min_count = 10, workers=4)

J'ai obtenu AttributeError: l'objet 'list' n'a pas d'attribut 'mots' car les documents d'entrée dans Doc2vec () n'étaient pas au format LabeledSentence correct. J'espère que cet exemple ci-dessous vous aidera à comprendre le format.

documents = LabeledSentence(words=[u'some', u'words', u'here'], labels=[u'SENT_1']) 

Plus de détails sont ici: http://rare-technologies.com/doc2vec-tutorial/ Cependant, j'ai résolu le problème en prenant les données d'entrée d'un fichier à l'aide de TaggedLineDocument ().
Format de fichier: un document = une ligne = un objet TaggedDocument. Les mots doivent être déjà prétraités et séparés par des espaces, les balises sont automatiquement construites à partir du numéro de ligne du document.

sentences=doc2vec.TaggedLineDocument(file_path)
model = doc2vec.Doc2Vec(sentences,size = 100, window = 300, min_count = 10, workers=4)

Pour obtenir un vecteur de document: Vous pouvez utiliser docvecs. Plus de détails ici: https://radimrehurek.com/gensim/models/doc2vec.html#gensim.models.doc2vec.TaggedDocument

docvec = model.docvecs[99] 

où 99 est l'identifiant du document dont nous voulons le vecteur. Si les étiquettes sont au format entier (par défaut, si vous chargez à l'aide de TaggedLineDocument ()), utilisez directement id entier comme je l'ai fait. Si les étiquettes sont au format chaîne, utilisez "SENT_99". Ceci est similaire à Word2vec

26
bee2502
from gensim.models.doc2vec import Doc2Vec, TaggedDocument 
Documents = [TaggedDocument(doc, [i]) for i, doc in enumerate(doc1)]
Model = Doc2Vec(Documents, other parameters~~)

Cela devrait bien fonctionner. Vous devez baliser vos documents pour la formation doc2vec modèle.

0
MovingKyu