Как использовать модель doc2vec в производстве? - PullRequest
0 голосов
/ 23 сентября 2019

Интересно, как развернуть модель doc2vec в производстве для создания векторов слов в качестве входных объектов для классификатора.Чтобы быть точным, скажем, модель doc2vec обучается на корпусе следующим образом:

dataset['tagged_descriptions'] = datasetf.apply(lambda x: doc2vec.TaggedDocument(
            words=x['text_columns'], tags=[str(x.ID)]), axis=1)

model = doc2vec.Doc2Vec(vector_size=100, min_count=1, epochs=150, workers=cores,
                                window=5, hs=0, negative=5, sample=1e-5, dm_concat=1)

corpus = dataset['tagged_descriptions'].tolist()

model.build_vocab(corpus)

model.train(corpus, total_examples=model.corpus_count, epochs=model.epochs)

, а затем она сбрасывается в файл рассола.Векторы слов используются для обучения классификатора, такого как случайные леса, для предсказания настроения фильмов.

Теперь предположим, что в производстве есть документ, включающий в себя совершенно новые словари.При этом, они не были среди тех, кто присутствовал во время обучения модели doc2vec.Интересно, как заняться таким делом.

В качестве примечания мне известно о Обновлении обучающих документов для gensim модели Doc2Vec и Gensim: как переучить модель doc2vec с использованием предыдущей модели word2vec .Тем не менее, я был бы признателен за то, чтобы пролить больше света на этот вопрос.

1 Ответ

2 голосов
/ 24 сентября 2019
Модель

A Doc2Vec сможет сообщать обученные векторы только для документов, которые присутствовали во время обучения, и сможет infer_vector() новые векторы документов для текстов, содержащих слова, которые присутствовали во время обучения.(Нераспознанные слова, переданные в .infer_vector(), будут игнорироваться, подобно тому, как любые слова, появляющиеся менее чем min_count раз, игнорируются во время обучения.)

Если со временем вы приобретете много новых текстов с новыми словарными словами,и эти слова важны, вам придется периодически переучивать модель Doc2Vec.И после повторного обучения векторы документов из переобученной модели, как правило, не будут сопоставимы с векторами документов из исходной модели, поэтому классификаторы и другие приложения, использующие векторы документов, также нуждаются в обновлении.

Ваши собственные требования к производству / развертыванию будут определять частоту повторного обучения, а старые модели заменяются новыми.

(В то время как модель Doc2Vec может в любое время подавать новые обучающие данные, поступая так постепенно, как своего рода «тонкая настройка», возникает сложная проблема баланса между старыми и новыми данными. И нетОфициальная поддержка Gensim для расширения существующего словарного запаса модели * 1013. * Таким образом, самый надежный курс - это переподготовка с нуля, используя все доступные данные.)

Несколько дополнительных замечаний к вашему примеру обучающего кода:

  • редко бывает хорошей идеей для min_count=1: редкие слова часто служат «шумом», без достаточного количества примеров использования, чтобы хорошо моделировать, и, таким образом, «шум», который просто замедляет / мешаетпаттерны, которые можно выучить из более распространенных слов

  • dm_concat=1, лучше всего рассматривать как экспериментальный / продвинутый режим, поскольку он делает модели значительно крупнее и медленнее в обучении с недоказанными преимуществами.

  • во многих опубликованных работах используется всего 10-20 учебных эпох;меньшие наборы данных или меньшие документы иногда выигрывают от большего, но 150 могут занимать много времени с очень незначительными преимуществами.

...