total_words должен быть указан вместе с аргументом corpus_file - PullRequest
0 голосов
/ 31 октября 2019

Я тренирую doc2vec с файлом корпуса, который очень большой.

model = Doc2Vec(dm=1, vector_size=200, workers=cores, comment='d2v_model_unigram_dbow_200_v1.0')
model.build_vocab(corpus_file=path)
model.train(corpus_file=path, total_examples=model.corpus_count, epochs=model.iter)

Я хочу знать, как получить значение total_words.

Редактировать:

total_words=model.corpus_total_words

Это правильно?

1 Ответ

1 голос
/ 31 октября 2019

В соответствии с действующей (gensim 3.8.1, октябрь 2019 г.) Doc2Vec.train() документацией , вам не нужно указывать total_examples и total_words, только одно или другое:

Для поддержки линейного спада скорости обучения от (начального) альфа до min_alpha и точной регистрации процента прогресса, ДОЛЖНЫ быть предоставлены либо total_examples (количество документов), либо total_words (количество необработанных слов в документах),Если документы - это тот же корпус, который был предоставлен для build_vocab () ранее, вы можете просто использовать total_examples = self.corpus_count.

Но, оказывается, для новой опции corpus_file требуются оба, иКомментарий к документу неверен. Я подал ошибку , чтобы исправить недосмотр документации.

Да, модель кэширует количество слов, обнаруженных во время самого последнего build_vocab() внутри model.corpus_total_words, поэтому total_words=model.corpus_total_words должен сделать для вас правильную вещь.

При использовании параметра ввода текста corpus_file, разделенного пробелами, числа, заданные corpus_count и corpus_total_words, должны соответствовать счетчикам строк и слов, которые вы также увидите, выполнив wc your_file_pathв командной строке.

(Если бы вы использовали классический, простой итеративный вариант корпуса Python (который не может использовать потоки так эффективно), то было бы бесполезно указывать total_examples и total_words для train()- он будет использовать только один или другой для оценки прогресса.)

...