Подтвердить что ты не робот

TFIDF для большого набора данных

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

Кто-нибудь знает, какой был бы лучший способ извлечения векторов TFIDF для больших наборов данных?

4b9b3361

Ответ 1

Gensim имеет эффективную модель tf-idf и не требует одновременного хранения всего в памяти.

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

Согласно комментариям, скрипт make_wiki проходит через Википедию на расстоянии около 50 метров на ноутбуке.

Ответ 2

Я считаю, что вы можете использовать HashingVectorizer, чтобы получить небольшую csr_matrix из ваших текстовых данных, а затем использовать TfidfTransformer. Хранение разреженной матрицы из 8M строк и нескольких десятков тысяч столбцов не является таким большим делом. Другим вариантом было бы вовсе не использовать TF-IDF - это может быть так, что ваша система работает достаточно хорошо без нее.

На практике вам может потребоваться подзадача вашего набора данных - иногда система будет делать то же самое, просто изучая 10% всех доступных данных. Это эмпирический вопрос, нет способа заранее сказать, какая стратегия будет лучше для вашей задачи. Я бы не стал беспокоиться о масштабировании до документа 8M, пока не убедился, что он мне нужен (т.е. Пока я не увижу кривую обучения, демонстрирующую четкую тенденцию к повышению).

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