Статьи

PredictionIO: начальная загрузка приложения с рекомендациями к фильмам

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

  • рекомендовать предметы (например, фильмы, продукты, продукты питания)
  • предсказывать поведение пользователя
  • определить сходство предметов
  • ранжировать предметы

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

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

Установка и настройка

Первое, что вам нужно сделать, это установить PredictionIO и его зависимости. Вы можете сделать это одним из следующих способов:

  1. Запустите экземпляр AWS
  2. Скрипт быстрой установки
  3. Ручная установка
  4. Vagrant Install
  5. Docker Install
  6. Terminal.com

Мы установим с помощью метода Vagrant. Таким образом, мы можем играть с PredictionIO локально, не сталкиваясь с головной болью при установке. Тем не менее, если вы любите приключения, не стесняйтесь выбирать любой метод установки, упомянутый в их документации. Или, если у вас уже есть существующая установка Homestead Improved , вы можете использовать ее вместо этого, а затем установить PredictionIO со скриптом быстрой установки.

Чтобы установить PredictionIO с Vagrant, откройте терминал и выполните следующую команду, чтобы клонировать файл Vagrant для запуска виртуальной машины PredictionIO.

git clone https : / / github . com / PredictionIO / PredictionIO - Vagrant . git 

После этого перейдите в каталог и переключитесь на главную ветку:

 cd PredictionIO - Vagrant / git checkout master 

Откройте Vagrantfile и измените ограничение выполнения процессора и настройки памяти, если хотите. По умолчанию для памяти установлено значение 2048mb а ограничение выполнения процессора — 90 . Если у вас больше памяти и мощный процессор, увеличьте это значение. Обратите внимание, что cpuexecutioncap может иметь значение только до 100 . Здесь значение по умолчанию 90 означает, что один виртуальный ЦП может использовать до 90% ЦП одного хоста.

 config . vm . provider "virtualbox" do | v | v . customize [ "modifyvm" , : id , "--cpuexecutioncap" , "90" , "--memory" , "2048" ] end 

Чтобы выставить виртуальную машину хост-машине, вам необходимо закомментировать следующую строку. Не стесняйтесь менять значение для ip, если хотите.

 config . vm . network : private_network , ip : "192.168.33.10" 

Затем вы можете отредактировать файл хоста хост-машины, указав на этот IP-адрес. Таким образом, вы можете получить доступ к приложению, например, по http://movierec.dev в браузере.

 192 . 168 . 33 . 10 movierec . dev 

Как только вы закончите настройку Vagrantfile , сохраните его и выполните следующую команду для загрузки виртуальной машины:

 vagrant up 

Поскольку вы запускаете команду впервые, она будет выполнять команды установки в файле provision.sh ( provision.sh ), который, если вы посмотрите на него, в основном использует скрипт быстрой установки. И если PredictionIO уже установлен, он просто запустит его с помощью команды pio-start-all . Это запустит PredictionIO и все его зависимости.

предсказание установка завершена

API Movie DB

Поскольку мы создаем приложение с рекомендациями для фильмов, у нас должен быть приличный список фильмов, которые мы можем использовать для нашего приложения. Для этого мы будем использовать API БД фильма .

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

Обзор приложения

Прежде чем мы создадим приложение, я сначала предоставлю вам обзор.
Приложение должно быть максимально простым, поэтому мы реализуем только две основные функции:

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

  • Фаза рекомендации — это та часть, где приложение будет рекомендовать фильмы на основе входных данных, сделанных пользователем на этапе обучения.

Если вы более визуальный человек, вот как выглядит этап обучения:

этап обучения

И вот фаза рекомендации:

фаза рекомендации

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

Создание механизма рекомендаций

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

Команда PredictionIO уже предоставляет официальные механизмы шаблонов, которые могут выполнять такие действия, как ранжирование продуктов, рекомендации по электронной торговле, рекомендовать аналогичные продукты, классифицировать элементы, общие рекомендации и многое другое. Более продвинутые пользователи PredictionIO также создали свои собственные движки. Эти движки можно найти на сайте templates.prediction.io . В этом уроке мы будем использовать общий механизм рекомендаций . Вы можете установить движок используя команду pio template get . Это требует двух аргументов: идентификатор движка и имя, которое вы хотите дать движку.

 pio template get PredictionIO / template - scala - parallel - recommendation RecommendationEngine 

Примечание: это попросит вас ввести имя пакета Scala шаблона. Вы можете ввести все, что вы хотите здесь. Хорошее соглашение для использования это com. а потом твое имя. После этого он установит движок в текущий каталог. Поэтому, если вы хотите немного упорядочить вещи, вы можете создать папку с predictionio-engines и поместить туда все ваши механизмы.

Как только движок создан, нам нужно обновить его, чтобы он мог обрабатывать пользовательские события. Стандартная конфигурация механизма рекомендаций обрабатывает только оценки, присвоенные конкретному элементу. Для этого приложения с рекомендациями по фильмам у нас будет только пользователь, которому нравится или не нравится случайный фильм. Мы можем настроить его, отредактировав файл src/main/scala/DataSource.scala который вы можете найти в корне каталога движка.

Открыв файл, найдите переменную eventNames и установите для нее значение Some(List("like", "dislike")) . Затем ratingValue переменную ratingValue и установите для ее типа и значения следующее:

 Double = event . event match { case "like" => 5.0 case "dislike" => 1.0 case _ => throw new Exception ( s "Unexpected event ${event} is read." ) } 

Вот параллельное сравнение по умолчанию и обновленного:

 //default eventNames = Some ( List ( "rate" , "buy" ) ) , //updated eventNames = Some ( List ( "like" , "dislike" ) ) , //default val ratingValue : Double = event . event match { case "rate" => event . properties . get [ Double ] ( "rating" ) case "buy" => 4.0 // map buy event to rating value of 4 case _ => throw new Exception ( s "Unexpected event ${event} is read." ) } //updated val ratingValue : Double = event . event match { case "like" => 5.0 case "dislike" => 1.0 case _ => throw new Exception ( s "Unexpected event ${event} is read." ) } 

Создание нового приложения PredictionIO

Для каждого приложения, в котором мы хотим использовать PredictionIO, есть аналогичное приложение PredictionIO. На одном сервере может быть размещено несколько приложений, поэтому они используются для идентификации каждого приложения.
Вы можете создать новое приложение с помощью команды pio app new .

 pio app new MovieRecommendationApp 

Это вернет ключ доступа, который мы можем использовать в приложении, которое собираемся создать. Вы можете принять к сведению ключ доступа сейчас или использовать команду pio app list позже, чтобы вывести список всех приложений, которые у вас есть.

Установка зависимостей

Теперь мы готовы построить приложение. Мы будем использовать Микрофреймы Lumen для этого приложения. Вы можете установить его с помощью команды create-project предоставленной Composer:

 composer create - project laravel / lumen blog "5.1.*" 

Как только это будет сделано, мы можем обновить файл composer.json внутри каталога lumen чтобы мы могли установить другие зависимости. Объект require теперь должен выглядеть так:

 "require": { "laravel/lumen-framework": "5.1.*", "vlucas/phpdotenv": "~1.0", "predictionio/predictionio": "~0.8.2", "elasticsearch/elasticsearch": "~1.0", "guzzlehttp/guzzle": "~5.0" }, 

laravel/lumen-framework и vlucas/phpdotenv находятся там по умолчанию, так как мы установили lumen с помощью composer create-project . Другие зависимости, которые у нас есть, следующие:

После этого все, что нам нужно сделать, это выполнить composer install .

Вывод

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