сохранить / повторно использовать модель на основе doc2ve c для дальнейших прогнозов - PullRequest
0 голосов
/ 20 января 2020

Я следовал следующему примеру использования doc2ve c для классификации текста:

https://github.com/susanli2016/NLP-with-Python/blob/master/Text%20Classification%20model%20selection.ipynb

Я запустил этот блокнот на своих наборах данных и хочу применить одну из моделей doc2ve c к третьему набору данных (например, к общему набору данных, на котором была построена модель испытания / поезда). Я попытался:

X_train, X_test, y_train, y_test = train_test_split(df.post, df.tags, random_state=0, test_size=0.3)
X_train = label_sentences(X_train, 'Train')
X_test = label_sentences(X_test, 'Test')

#added
big_text = label_sentences(big_text, 'Test') #big_text = larger dataframe

#old
#all_data = X_train + X_test

#new
all_data = X_train + X_test + big_text 

1 - это не очень практично для прикладных целей. Данные, которые кто-то хочет предсказать, могут быть недоступны во время обучения / тестирования.

2 - в результате производительность модели снизилась

Так как я могу сохранить один раз из моделей и применяется к совершенно другому набору данных? Может показаться, что мне нужно обновить модель doc2ve c, добавив документы из другого набора данных.

1 Ответ

1 голос
/ 21 января 2020

Модель Gensim Doc2Vec может быть сохранена и загружена с использованием методов .save(filepath) & .load(filepath). (Использование этих методов native-gensim будет работать на более крупных моделях, чем может поддерживать обычное Python, и более эффективно сохранять некоторые большие внутренние массивы в виде отдельных файлов. (При перемещении сохраненной модели обязательно сохраните это вспомогательные файлы вместе с основным файлом, который находится точно в filepath месте.)

Ранее обученная модель Doc2Vec может генерировать do c -векторы для новых текстов с помощью метода .infer_vector(list_of_words).

Обратите внимание, что list_of_words, предоставленный этому методу, должен был быть предварительно обработан / токенизирован точно так же, как данные обучения - и любые слова, которые не присутствовали (или достаточно min_count часто встречаются) в данных обучения, будут игнорируется. (В крайнем случае, это означает, что если вы передадите list_of_words без распознанных слов, все слова будут проигнорированы, и вы получите обратно случайный инициализированный, но полностью не улучшенный вектор по логическому выводу.)

Тем не менее, если вы переоцениваете или переобучаете последующие прогностические модели новым данным из какого-то нового домена, вы Также часто хотелось бы переучить этап Doc2Vec со всеми доступными данными, чтобы у него была возможность выучить новые слова из новых контекстов использования. (В основном, когда ваши данные об обучении были обширными и репрезентативными, а ваши новые данные поступают постепенно и без значительных изменений в словаре / использовании / области, на которые вы бы хотели положиться .infer_vector().)

...