[python] Doc2vec: как получить векторы документов



0 Answers

Если вы хотите обучить модель Doc2Vec, ваш набор данных должен содержать списки слов (аналогичные формату Word2Vec) и теги (идентификатор документов). Он также может содержать дополнительную информацию (см. https://github.com/RaRe-Technologies/gensim/blob/develop/docs/notebooks/doc2vec-IMDB.ipynb для получения дополнительной информации).

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

ОБНОВЛЕНИЕ (как тренироваться в эпоху): функция Doc2Vec содержит параметры alpha и min_alpha , но это означает, что скорость обучения распадается в течение одной эпохи от alpha до min_alpha . Чтобы обучить несколько эпох, установите скорость обучения вручную, например:

from gensim.models import doc2vec
import random

alpha_val = 0.025        # Initial learning rate
min_alpha_val = 1e-4     # Minimum for linear learning rate decay
passes = 15              # Number of passes of one document during training

alpha_delta = (alpha_val - min_alpha_val) / (passes - 1)

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

model.build_vocab(docs) # Building vocabulary

for epoch in range(passes):

    # Shuffling gets better results

    random.shuffle(docs)

    # Train

    model.alpha, model.min_alpha = alpha_val, alpha_val

    model.train(docs)

    # Logs

    print('Completed pass %i at alpha %f' % (epoch + 1, alpha_val))

    # Next run alpha

    alpha_val -= alpha_delta
Question

Как получить документ-векторы двух текстовых документов с помощью Doc2vec? Я новичок в этом, поэтому было бы полезно, если бы кто-то мог указать мне в правильном направлении / помочь мне с некоторым учебником

Я использую gensim python library.

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)

Я получаю AttributeError: объект «list» не имеет атрибутных «слов» всякий раз, когда я запускаю этот




Related