tutorial train min_count example español python gensim word2vec

python - train - Doc2vec: Cómo obtener vectores de documentos



word2vec español (4)

¿Cómo obtener vectores de documentos de dos documentos de texto usando Doc2vec? Soy nuevo en esto, por lo que sería útil si alguien pudiera señalarme en la dirección correcta / ayudarme con algún tutorial

Estoy usando 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)

yo obtengo

AttributeError: el objeto ''lista'' no tiene atributo ''palabras''

cada vez que corro esto.


Si desea entrenar el modelo Doc2Vec, su conjunto de datos debe contener listas de palabras (similar al formato Word2Vec) y etiquetas (identificación de documentos). También puede contener información adicional (consulte https://github.com/RaRe-Technologies/gensim/blob/develop/docs/notebooks/doc2vec-IMDB.ipynb para obtener más información).

# 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]

ACTUALIZACIÓN (cómo entrenar en épocas): este ejemplo quedó obsoleto, así que lo eliminé. Para obtener más información sobre la capacitación en épocas, consulte esta respuesta o el comentario de @gojomo.


Gensim fue actualizado . La sintaxis de La LabelSentence no contiene etiquetas . Ahora hay etiquetas : consulte la documentación de La LabelSentence https://radimrehurek.com/gensim/models/doc2vec.html

Sin embargo, @ bee2502 tenía razón con

docvec = model.docvecs[99]

Debería ser el valor del vector número 100 para el modelo entrenado, funciona con enteros y cadenas.


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

Esto debería funcionar bien. doc2vec etiquetar sus documentos para la capacitación del modelo doc2vec .


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)

Obtuve AttributeError: el objeto ''lista'' no tiene ''palabras'' de atributo porque los documentos de entrada al Doc2vec () no estaban en el formato correcto de La LabelSentence. Espero que el siguiente ejemplo te ayude a entender el formato.

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

Más detalles están aquí: http://rare-technologies.com/doc2vec-tutorial/ Sin embargo, resolví el problema tomando datos de entrada del archivo usando TaggedLineDocument ().
Formato de archivo: un documento = una línea = un objeto TaggedDocument. Se espera que las palabras ya estén preprocesadas y separadas por espacios en blanco, las etiquetas se construyen automáticamente a partir del número de línea del documento.

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

Para obtener el vector del documento: puede usar docvecs. Más detalles aquí: https://radimrehurek.com/gensim/models/doc2vec.html#gensim.models.doc2vec.TaggedDocument

docvec = model.docvecs[99]

donde 99 es la identificación del documento cuyo vector queremos. Si las etiquetas están en formato entero (por defecto, si carga usando TaggedLineDocument ()), use directamente la identificación entera como lo hice yo. Si las etiquetas están en formato de cadena, use "SENT_99". Esto es similar a Word2vec