Как я могу классифицировать большие текстовые данные с помощью scikit-learn? - PullRequest
0 голосов
/ 21 мая 2019

У меня большая база данных размером 50 ГБ, которая состоит из выдержек из 486 000 диссертаций по 780 специальностям. В научных целях необходимо проводить обучение на основе этих данных. Но, увы, ресурсы ограничены мобильным процессором, 16 ГБ памяти (+ 16 ГБ SWAP)

Анализ проводился с использованием набора из 40 000 элементов (10% от базовой) (4,5 ГБ) и классификатора SGDClassifier, а потребление памяти составило около 16-17 ГБ.

Поэтому я прошу сообщество помочь в этом.

в настоящее время мой код похож

text_clf = Pipeline([
     ('count', CountVectorizer()),
     ('tfidf', TfidfTransformer()),
     ('clf', SGDClassifier(n_jobs=8),)
 ],
 )
texts_train, texts_test, cat_train, cat_test = train_test_split(texts, categories_ids, test_size=0.2)
text_clf.fit(texts_train, cat_train)

Поэтому я прошу совета о том, как оптимизировать этот процесс, чтобы я мог обработать всю базу данных.

1 Ответ

1 голос
/ 21 мая 2019

Вы можете использовать warm_start=True и вызывать .partial_fit() (вместо .fit()).

См. Документацию здесь для модели, которую вы используете, где она описывает этот аргумент ифункция соответственно.

По сути, вы будете загружать только часть данных за раз, запускать их через конвейер и вызывать частичную_подход в цикле.Это снизит требования к памяти, а также позволит вам тренироваться со всеми данными, независимо от их количества.

РЕДАКТИРОВАТЬ

Как отмечено в комментариях, вышеУпомянутый цикл будет работать только для прогнозирующей модели, поэтому предварительная обработка данных должна выполняться отдельно.

Вот решение для итеративной подготовки CountVectorizer.

Этот вопрос содержит реализацию TFIDF, которая не требует загрузки всех данных в память.

Таким образом, окончательным решением будет предварительная обработка данных в два этапа.Первый для CountVectorizer и второй для взвешивания TFIDF.

Затем, чтобы обучить модель, вы следуете тому же процессу, что и первоначально предложенный, за исключением того, что без конвейера, потому что в этом больше нет необходимости.

...