Прочитайте эту статью на других языках:English.
Механизмы рекомендаций — один из самых известных, наиболее широко используемых и наиболее ценных вариантов применения прикладного машинного обучения. Несмотря на то, что существует много ресурсов, доступных в качестве основы для обучения рекомендательных моделей, по-прежнему относительно мало ресурсов, объясняющих, как на самом деле развертывать эти модели для создания больших рекомендательных систем.
Этот шаблон кода продемонстрирует ключевые элементы создания такой системы с использованием Apache Spark и Elasticsearch.
Этот репозиторий содержит Jupyter Notebook, в котором показано, как использовать Spark для обучения модели рекомендаций совместной фильтрации с данными рейтинга, хранящимися в Elasticsearch, сохранять факторы модели в Elasticsearch, а затем использовать Elasticsearch для подачи рекомендаций в реальном времени из этой модели. Данные, которые вы будете использовать, взяты изMovieLens, и является общим эталонным набором данных в сообществе рекомендаций. Эти данные содержат MovieLens Набор оценок, предоставленных пользователями системы оценки фильмов для различных фильмов. Также содержит метаданные (название и категорию) для каждого фильма.
После завершения этого шаблона кода вы будете знать, как:
- Принимать и индексировать данные о пользовательских событиях в Elasticsearch с помощью коннектора Elasticsearch Spark.
- Загрузите данные о событиях в Spark DataFrames и используйте библиотеку машинного обучения Spark (MLlib) для обучения модели рекомендательной системы совместной фильтрации.
- Экспорт обученной модели в Elasticsearch
- Используя специальный плагин Elasticsearch, вычислитеПерсонализируйте пользователяиПохожие товарыРекомендации и комбинируйте рекомендации с поиском и фильтрацией контента.
Операционные процедуры
- Загрузите набор данных фильма в Spark.
- Очистите набор данных с помощью операций Spark DataFrame и загрузите его в Elasticsearch.
- Используя Spark MLlib, обучите модель рекомендаций по совместной фильтрации.
- Сохраните полученную модель в Elasticsearch.
- Сгенерируйте несколько примеров рекомендаций, используя запросы Elasticsearch и пользовательский плагин векторной оценки. использоватьMovie DatabaseAPI для отображения изображений постеров фильмов для предлагаемых фильмов.
Включенные компоненты
- Apache Spark: Быстрая кластерная вычислительная система общего назначения с открытым исходным кодом.
- Elasticsearch: Механизм поиска и анализа с открытым исходным кодом
- Jupyter Notebook: веб-приложение с открытым исходным кодом, которое можно использовать для создания и обмена документами, содержащими живой код, уравнения, визуализации и интерпретируемый текст.
Избранная технология
- наука о данных: систематический и научный подход к анализу структурированных и неструктурированных данных для извлечения знаний и идей.
- искусственный интеллект: ИИ можно применять в различных областях решений для создания прорывных технологий.
- Python: Python — это язык программирования, обеспечивающий более быструю работу и более эффективную интеграцию систем.
смотреть видео
шаг
Выполните следующие действия, чтобы создать необходимые службы и запустить блокнот локально.
- клонировать репозиторий
- Настройка эластичного поиска
- Загрузите коннектор Elasticsearch Spark.
- Скачать Apache Spark
- Скачать данные
- Запустить блокнот
- запустить блокнот
1. Клонируйте репозиторий
будетelasticsearch-spark-recommender
Репозиторий клонируется локально. В терминале выполните следующие команды:
$ git clone https://github.com/IBM/elasticsearch-spark-recommender.git
скопировать код
2. Настройте эластичный поиск
Этот шаблон кода в настоящее время зависит от Elasticsearch 5.3.0. перейти кстраница загрузки, загрузите соответствующий пакет для вашей системы.
Например, на Linux/Mac вы можете скачатьTAR-архиви распакуйте его с помощью следующей команды:
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.3.0.tar.gz
$ tar xfz elasticsearch-5.3.0.tar.gz
скопировать код
Измените каталог на только что разархивированную папку, используя следующую команду:
$ cd elasticsearch-5.3.0
скопировать код
Далее необходимо установитьПлагин векторной оценки Elasticsearch. Для этого вы можете запустить следующую команду (Elasticsearch скачает для вас файл плагина):
$ ./bin/elasticsearch-plugin install https://github.com/MLnick/elasticsearch-vector-scoring/releases/download/v5.3.0/elasticsearch-vector-scoring-5.3.0.zip
скопировать код
Затем запустите Elasticsearch (сделайте это в отдельном окне терминала, чтобы он продолжал работать):
$ ./bin/elasticsearch
скопировать код
Вы увидите несколько журналов запуска. чекelasticsearch-vector-scoring-plugin
Загружено успешно:
$ ./bin/elasticsearch
[2017-09-08T15:58:18,781][INFO ][o.e.n.Node ] [] initializing ...
...
[2017-09-08T15:58:19,406][INFO ][o.e.p.PluginsService ] [2Zs8kW3] loaded plugin [elasticsearch-vector-scoring]
[2017-09-08T15:58:20,676][INFO ][o.e.n.Node ] initialized
...
скопировать код
Наконец, вам нужно будет установить клиент Elasticsearch Python. Для этого выполните следующую команду (вы должны выполнить эту команду в другом окне терминала, отличном от того, в котором работает Elasticsearch):
$ pip install elasticsearch
скопировать код
3. Загрузите коннектор Elasticsearch Spark.
Проект Elasticsearch HadoopОбеспечивает соединители между Elasticsearch и различными системами, совместимыми с Hadoop, включая Spark. Проект предоставляет для загрузки ZIP-файл, содержащий все эти соединители. Вам нужно поместить JAR-файл соединителя Spark в путь к классам при запуске блокнота PySpark. Чтобы настроить коннектор, выполните следующие действия:
1.скачать elasticsearch-hadoop-5.3.0.zip
файл, содержащий все коннекторы. Для этого запустите:
$ wget http://download.elastic.co/hadoop/elasticsearch-hadoop-5.3.0.zip
скопировать код
2. Выполните следующую команду, чтобы извлечь файл:
$ unzip elasticsearch-hadoop-5.3.0.zip
скопировать код
3. Имя JAR коннектора Sparkelasticsearch-spark-20_2.11-5.3.0.jar
, он будет расположен в каталоге, в который вы распаковали указанный выше файл.dist
подпапка.
4. Загрузите Apache Spark
Этот шаблон кода должен работать с любой версией Spark 2.x, но рекомендуется начинать сстраница загрузкиЗагрузите последнюю версию Spark (в настоящее время 2.2.0). После загрузки файла выполните следующую команду, чтобы извлечь его:
$ tar xfz spark-2.2.0-bin-hadoop2.7.tgz
скопировать код
Обратите внимание, что если вы загружаете другую версию, соответствующие команды, используемые выше и в других местах в этом шаблоне кода, должны быть соответствующим образом скорректированы.
Вам также необходимо установитьNumpy, чтобы использовать библиотеку машинного обучения SparkMLlib. Если Numpy не установлен, выполните следующую команду:
$ pip install numpy
скопировать код
5. Загрузите данные
вы будете использоватьНабор данных кинообъектива, который содержит набор предоставленных пользователями рейтингов фильмов и метаданных фильмов. Существует несколько версий этого набора данных. вы должны скачать"последняя малая" версия.
Запустите следующие команды из базового каталога репозитория шаблонов кода:
$ cd data
$ wget http://files.grouplens.org/datasets/movielens/ml-latest-small.zip
$ unzip ml-latest-small.zip
скопировать код
6. Запустите ноутбук
Ноутбук должен работать с Python 2.7 или 3.x (проверено на 2.7.11 и 3.6.1).
Чтобы запустить этот блокнот, вам необходимо запустить сеанс PySpark в блокноте Jupyter. Если Jupyter не установлен, вы можете установить его, запустив:
$ pip install jupyter
скопировать код
При запуске Блокнота не забудьте включить путь к классам изШаг 3JAR-файл коннектора Elasticsearch Spark.
Выполните следующую команду, чтобы запустить сервер PySpark Notebook локально.Чтобы правильно выполнить эту команду, вам нужно запуститьшаг 1Запустите записную книжку из базового каталога репозитория клонированных шаблонов кода.. Если вы не в этом каталоге, сначала пройдитеcd
команду в этот каталог.
PYSPARK_DRIVER_PYTHON="jupyter" PYSPARK_DRIVER_PYTHON_OPTS="notebook" ../spark-2.2.0-bin-hadoop2.7/bin/pyspark --driver-memory 4g --driver-class-path ../../elasticsearch-hadoop-5.3.0/dist/elasticsearch-spark-20_2.11-5.3.0.jar
скопировать код
Откроется окно браузера с содержимым папки Code Pattern. нажмитеnotebooks
подпапку и нажмитеelasticsearch-spark-recommender.ipynb
файл для запуска ноутбука.
По желанию:
Чтобы отобразить изображения в рекомендуемых демонстрациях, вам необходимо посетитьThe Movie Database API. Пожалуйста, следуйтеинструкцииПолучите API-ключ. Вам также потребуется установить клиент Python с помощью следующей команды:
$ pip install tmdbsimple
скопировать код
Демонстрацию можно запустить без доступа к этому API, но изображение отображаться не будет (поэтому выглядит некрасиво!).
7. Запустите ноутбук
При выполнении Блокнота на самом деле происходит то, что каждая единица кода в Блокноте выполняется в порядке сверху вниз.
Вы можете выбрать каждую кодовую единицу и добавить маркер в левом поле перед кодовой единицей. Формат тегаIn [x]:
. В зависимости от состояния ноутбукаx
Возможно:
- Пустой, указывающий на то, что модуль никогда не выполнялся.
- Число, представляющее относительный порядок выполнения шагов этого кода.
- Один
*
, указывая на то, что модуль в настоящее время выполняется.
Ячейки кода в Блокноте могут быть выполнены несколькими способами:
- Одна единица за раз.
- Выберите ячейку и нажмите на панели инструментов
Play
кнопка. Вы также можете нажатьShift+Enter
для выполнения блока и перехода к следующему блоку.
- Выберите ячейку и нажмите на панели инструментов
- Пакетный режим, выполняемый последовательно.
-
Cell
Строка меню содержит несколько опций. Например, вы можете выбратьRun All
Запустите все ячейки в Блокноте или, при желании,Run All Below
, который начнется с первой ячейки под текущей выбранной ячейкой и продолжится со всеми последующими ячейками.
-
Пример вывода
data/examples
Пример вывода в папке показывает полный вывод после запуска Notebook. допустимыйздесьПроверьте это.
Примечание:Чтобы увидеть код и уменьшенную ячейку без вывода, вы можете найти его наПросмотр оригинальной записной книжки в средстве просмотра Github.
Исправление проблем
- Ошибка:
java.lang.ClassNotFoundException: Failed to find data source: es.
Если вы видите эту ошибку при попытке записи данных из Spark в Elasticsearch в блокноте, это означает, что Spark не нашел коннектор Elasticsearch Spark в пути к классам при запуске блокнота (elasticsearch-spark-20_2.11-5.3.0.jar
).
Решение: начать сначалаШаг 6команда в ,Обязательно запустите его из базового каталога репозитория шаблонов кода..
Если это не сработает, попробуйте использовать полный путь к JAR-файлу при запуске Блокнота, например:
PYSPARK_DRIVER_PYTHON="jupyter" PYSPARK_DRIVER_PYTHON_OPTS="notebook" ../spark-2.2.0-bin-hadoop2.7/bin/pyspark --driver-memory 4g --driver-class-path /FULL_PATH/elasticsearch-hadoop-5.3.0/dist/elasticsearch-spark-20_2.11-5.3.0.jar
вFULL_PATH
даты распаковываешьelasticsearch-hadoop
ZIP-файлПолный (не относительный) путь к используемому каталогу.
- Ошибка:
org.elasticsearch.hadoop.EsHadoopIllegalStateException: SaveMode is set to ErrorIfExists and index demo/ratings exists and contains data.Consider changing the SaveMode
Если вы видите эту ошибку при попытке записать данные из Spark в Elasticsearch в блокноте, это означает, что вы записали данные в соответствующий индекс (например, записываете данные оценки вratings
показатель).
Решение: попытайтесь продолжить обработку записной книжки со следующей ячейки. Вы также можете сначала удалить все индексы и повторно запустить команду Elasticsearch, чтобы создать карту индексов (см.Шаг 2. Загрузите данные в Elasticsearch.).
- Ошибка:
ConnectionRefusedError: [Errno 61] Connection refused
Вы можете увидеть эту ошибку при попытке подключения к Elasticsearch в Notebook. Вероятно, это означает, что ваш экземпляр Elasticsearch не запущен.
Решение: в новом окне терминала пройдите
cd
Команда для перехода в каталог, где установлен Elasticsearch, запустите./bin/elasticsearch
для запуска Elasticsearch.
- Ошибка:
Py4JJavaError: An error occurred while calling o130.save. : org.elasticsearch.hadoop.rest.EsHadoopNoNodesLeftException: Connection error (check network and/or proxy settings)- all nodes failed; tried [[127.0.0.1:9200]]
Вы можете увидеть эту ошибку при попытке прочитать данные из Elasticsearch в Spark (или записать данные из Spark в Elasticsearch) в записной книжке. Вероятно, это означает, что ваш экземпляр Elasticsearch не запущен.
Решение: в новом окне терминала пройдите
cd
Команда для перехода в каталог, где установлен Elasticsearch, запустите./bin/elasticsearch
для запуска Elasticsearch.
- Ошибка:
ImportError: No module named elasticsearch
Если вы получаете эту ошибку, это означает, что клиент Elasticsearch Python не установлен или может быть недоступен вPYTHONPATH
найти на.
Решение: попробуйте использовать
$ pip install elasticsearch
Установите клиент (если он работает в виртуальной среде Python, такой как Conda или Virtualenv), или используйте$ sudo pip install elasticsearch
. Если это не сработает, вы можете добавить папку site-packages в свой путь Python (например, на Mac:export PYTHONPATH=/Library/Python/2.7/site-packages
для Python 2.7). Другой пример для Linux см.Вопрос о стеке.Примечание:То же самое общее решение работает для любых других ошибок импорта модулей, с которыми вы можете столкнуться.
- Ошибка:
HTTPError: 401 Client Error: Unauthorized for url: https://api.themoviedb.org/3/movie/1893?api_key=...
Если вы видите эту ошибку в своем ноутбуке при тестировании доступа к TMDb API или создании рекомендаций, это означает, что вы установилиtmdbsimple
Пакет Python без установки ключа API.
Решение: следуйтеШаг 6инструкции в конце, чтобы настроить свою учетную запись TMDb и получить ключ API. Затем скопируйте этот ключ вШаг 1. Подготовьте данныеВ блоке «Ноутбук» после завершения
tmdb.API_KEY = 'YOUR_API_KEY'
линия (скороYOR_API_KEY
с правильным ключом). После этого шага выполните этот модуль, чтобы проверить свой доступ к TMDb API. Доступ.
Ссылка на сайт
- Демо на Юку: Смотреть видео.
- Видеопрезентация стендап-встречи: Посмотрите стендап-презентацию, в которой рассказывается об истории и технических деталях этого шаблона кода.
- материалы для стендап-встречи: просмотр слайд-шоу презентации.
- ApacheCon Big Data Europe 2016: Ознакомьтесь с расширенной версией этой стендап-презентации:
- Данные и аналитика: Узнайте, как интегрировать этот режим в данные и анализ эталонной архитектуры.
узнать больше информации
- Шаблон кода анализа данных: Нравится этот шаблон кода? Узнайте о других нашихШаблон кода анализа данных
- Плейлист AI и шаблон кода данных: Избранное содержит все наши видео с шаблонами кода.плейлист
- Data Science Experience: через IBMData Science ExperienceОвладение искусством науки о данных
- Искра в облаке IBM: Нужен кластер Spark? через нашСпарк-сервис, чтобы создать до 30 исполнителей Spark в IBM Cloud.