2013-04-13 2 views
5

Я работаю над относительно большой проблемой классификации веб-классификации на основе текста, и я планирую использовать многокомпонентный классификатор Naive Bayes в sklearn в python и структуру scrapy для сканирования , Тем не менее, я немного обеспокоен тем, что sklearn/python может быть слишком медленным для проблемы, которая может включать классификацию миллионов веб-сайтов. Я уже обучил классификатор на нескольких тысячах сайтов из DMOZ. Рамки исследования:Использование sklearn и Python для большого применения классификации/скрещивания приложений

1) Гусеница приземляется на доменное имя и скрежет текста из 20 ссылок на сайте (глубина не более одного). (Количество обозначенных слов здесь, по-видимому, колеблется от нескольких тысяч до 150K для выборочного пробега искателя) 2) Запустите многопользовательский классификатор NB sklearn с около 50 000 функций и запишите доменное имя в зависимости от результата

Вопрос в том, будет ли классификатор на основе Python соответствовать задаче для такого крупномасштабного приложения, или я должен попытаться повторно написать классификатор (а может быть, скребок и токенизатор) в более быстрой среде? Если да, то какова может быть эта среда? Или, возможно, Python достаточно, если он сопровождается некоторой распараллеливанием кода? Благодаря

ответ

5

Используйте HashingVectorizer и один из линейных классификационных модулей, которые поддерживают partial_fit API для экземпляра SGDClassifier, Perceptron или PassiveAggresiveClassifier пошагово изучить модель без векторизации и загрузить все данные в памяти авансовой и вы не должны иметь любая проблема в изучении классификатора на сотнях миллионов документов с сотнями тысяч (хешированных) функций.

Вы должны, однако, загружать небольшую подвыборку, которая подходит в памяти (например, документы 100 тыс.), И поиск в сетке хороших параметров для векторизованного объекта с использованием объекта Pipeline и класса основной линии ветви RandomizedSearchCV. Вы также можете точно настроить значение параметра регуляризации (например, C для PassiveAggressiveClassifier или alpha для SGDClassifier) ​​с использованием того же RandomizedSearchCV или большего, предварительно векторизованного набора данных, который подходит в памяти (например, несколько миллионов документов).

Также можно усреднить линейные модели (в среднем coef_ и intercept_ из 2 линейных моделей), чтобы можно было разбить набор данных, самостоятельно изучить линейные модели, а затем усреднить модели для получения окончательной модели.

3

Принципиально, если вы полагаетесь на numpy, scipy и sklearn, Python не будет узким местом, так как большинство критических частей этих библиотек реализованы как C-расширения.

Но, поскольку вы очищаете миллионы сайтов, вы будете ограничены возможностями вашей единственной машины. Я бы рассмотрел возможность использования службы, такой как PiCloud [1] или Amazon Web Services (EC2), для распределения вашей рабочей нагрузки на многих серверах.

Примером может быть последовательность ваших выскабливаний через Cloud Queues [2].

[1] http://www.picloud.com

[2] http://blog.picloud.com/2013/04/03/introducing-queues-creating-a-pipeline-in-the-cloud/

Смежные вопросы