Некоторое время назад, когда мне нужно было сделать простое, доказательное распознавание спама, и я искал простой фреймворк на scala или python, я случайно встретил prediction.io. Быстрый просмотр страницы меня заинтересовал, и я решил, что стоит попробовать. Мое впечатление об этом инструменте было действительно отличным. Простой, легкий в настройке, минимальные усилия для запуска механизма машинного обучения и, независимо от простоты использования, он дает действительно полное решение для машинного обучения. Он основан на передовых решениях интеллектуального анализа данных: elasticsearch, hbase spark (вместе с MLLib) с scala в качестве языка предметной области. Я напишу, как с помощью этого инструмента запустить сервер для простого обнаружения спама с минимальными усилиями.

Несколько шагов, чтобы настроить сервер обнаружения спама за 5 минут

Итак, давайте начнем шаг за шагом ...

Прежде всего установите его с помощью одной простой команды:
$ bash -c «$ (curl -s https://install.prediction.io/install.sh) '
Он будет установлен в вашем каталоге $ home / PredictionIO вместе со всеми необходимыми инструментами.

Теперь, когда у вас установлен prediction.io, перейдите в его каталог. Теперь вам нужно скачать один из шаблонов prediction.io. Шаблон - это полноценный механизм прогнозирования. На официальной странице: https://templates.prediction.io/ вы можете найти действительно хороший набор готовых шаблонов. Для предсказания почты я выбрал шаблон-scala-parallel-textclassification. Итак, давайте запустим:
$ pio template get template-scala-parallel-textclassification spam-detection
и перейдем в только что созданный каталог spam-detection, где был загружен шаблон. Давайте посмотрим в src, как мало исходных файлов и как мало кода требуется для создания полноценного движка.

Теперь, когда у нас есть готовый шаблон, нам нужно его построить, обучить и развернуть. Но для того, чтобы что-то сделать, нам нужно запустить все необходимые сторонние инструменты, упомянутые ранее. Но не волнуйтесь, для этого предопределена одна команда:
$ pio-start-all

Выше команды запускают также сервер событий. Сервер событий - это решение prediction.io для предоставления данных нашему движку через HTTP-запросы (для этого существует множество API-интерфейсов для большинства популярных языков программирования, но, конечно, вы можете использовать только curl). Обычно для добавления новой отдельной записи данных вы выполняете конкретный HTTP-запрос, проходящий через объект javascript с параметрами в соответствии с вашей структурой данных. Но вначале, чтобы предоставить кучу данных для первого обучения нашего движка, мы можем использовать команду командной строки для импорта данных из файла .json. Шаблон даже предоставляет файлы примеров с данными, необходимыми для первого сеанса обучения, в каталоге «data» (emails.json и stopwords.json). Для отправки любых данных вам необходимо создать идентификатор приложения, чтобы получить идентификатор для вашего приложения (в результате он создал таблицу в hbase для приложения, а затем требуется идентификатор, отправляя события, информирующие, какие данные таблицы должны отправляться). Итак, чтобы сделать все (создать appID и импортировать 2 файла с данными), введите:
$ pio app new MyTextApp
$ pio import - appid *** - input data / stopwords.json
$ pio import - appid *** - input data / emails.json
Изменение *** с идентификатором вашего приложения.

Теперь пора запустить три основные волшебные команды:
$ pio build
$ pio train
$ pio deploy
Первая команда создаст проект (шаблон ), второй тренирует модель, используя данные, которые мы импортировали ранее, а последний - движок развертывания. С этого момента вы можете с радостью открыть страницу: http: // localhost: 8000 и увидеть, что ваш сервер работает и готов делать прогнозы. Чтобы проверить это, давайте выполним несколько первых запросов:
$ curl -H Content-Type: application / json -d ‘{ text : Мне нравятся быстрые и быстрые мотоциклы . } ’ Http: // localhost: 8000 / query.json
$ curl -H Content-Type: application / json -d‘ {text: Зарабатывайте дополнительные деньги! } 'Http: // localhost: 8000 / query.json
и вы увидите следующие результаты:
{category: не спам, уверенность : 0.852619510921587}
{категория: спам, уверенность: 0,5268770133242983}

Вот и все! Все просто, не правда ли? В заключение, чтобы показать, насколько быстро и просто это было, я еще раз представлю все команды, которые нам нужно было ввести, чтобы заставить его работать без описания:
$ bash -c «$ (curl -s https: // install .prediction.io / install.sh) '
$ cd PredictionIO
$ pio template get template-scala-parallel-textclassification spam-detection
$ cd spam-detection
$ pio -start-all
$ pio app new MyTextApp

$ pio import - appid *** - input data / stopwords.json
$ pio import - appid *** - input data / emails.json
$ pio build
$ pio train
$ pio deploy

Что нам еще нужно?

В начале поста я упомянул, что это законченное решение, поэтому нельзя обойтись без возможности оценить наш механизм машинного обучения, чтобы можно было настроить / выбрать лучшие параметры алгоритма, а также выбрать лучший алгоритм. PredictionIO поставляется с компонентом Evaluation, и все шаблоны обеспечивают его простую реализацию. Обычно оценщики используют метод перекрестной проверки (мы, конечно, можем настроить k-кратное количество). Чтобы проверить, как это работает, введите:
$ pio eval org.template.textclassification.AccuracyEvaluation org.template.textclassification.EngineParamsList
, и вы проведете пошаговый тест. результаты по всем параметрам для всех алгоритмов. Лучшая конфигурация по умолчанию сохраняется в best.json. Эту конфигурацию можно будет использовать позже во время сеанса поезда (pio train -v best.json).

Мы можем делать больше и больше…

Конечно, мы можем сделать гораздо больше, чем было описано выше. Мы можем добавить больше движков: существующих (например, из других шаблонов) или легко написать свои собственные. Мы можем добавить больше метрик (в нашем примере есть одна простая: точность) и, конечно, мы можем написать свои собственные. Мы можем редактировать / расширять каждую часть шаблона: обработку данных до перехода к тренировке, редактирование поведения движка и т. Д. И т. Д. Мы не ограничены использованием одного лучшего движка. Мы можем легко настроить наш шаблон для использования более чем одного движка параллельно, и результатом прогнозирования будет комбинация результатов большего количества движков. MLlib будет очень полезен для всех упомянутых задач.

В следующих статьях я подробно опишу эти более продвинутые функции.

Хотите поделиться со мной своими мыслями? Найдите меня в Твиттере.