Подготовьте свои данные для Amazon Personalize с помощью Amazon SageMaker Data Wrangler.

Подготовка данных для Amazon Personalize с помощью Amazon SageMaker Data Wrangler

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

В этой статье мы рассмотрим, как подготовить и импортировать набор данных MovieLens, который был подготовлен исследовательской группой GroupLens университета Миннесоты, и содержит различные рейтинги фильмов пользователей, в Amazon Personalize с использованием инструмента Amazon SageMaker Data Wrangler. [1]

Обзор решения

Amazon Personalize – это управляемый сервис, основное преимущество которого заключается в его способности изучать предпочтения пользователей на основе их прошлого поведения и быстро адаптировать эти предпочтения под изменяющееся поведение пользователей практически в реальном времени. Чтобы иметь возможность разрабатывать это понимание пользователей, Amazon Personalize должен обучаться на историческом поведении пользователей, чтобы найти общие закономерности для будущего. В частности, основной тип данных, на которых учится Amazon Personalize, это то, что мы называем набором взаимодействий, что является табличным набором данных, который содержит как минимум три важных столбца – userID, itemID и timestamp, представляющих положительное взаимодействие между пользователем и элементом в определенное время. Чтобы модель могла изучать эти поведенческие тенденции, Amazon Personalize требуется загружать данные, содержащие взаимодействия его собственных клиентов. Хотя внутренние алгоритмы Amazon Personalize были выбраны на основе опыта Amazon в области машинного обучения, персонализированная модель не поставляется с какими-либо данными и тренируется для каждого клиента отдельно.

Набор данных MovieLens, рассмотренный в этом руководстве, не имеет соответствующего формата, поэтому для его подготовки для Amazon Personalize мы используем SageMaker Data Wrangler, специальный инструмент для агрегации и подготовки данных для машинного обучения. Он содержит более 300 преднастроенных преобразований данных, а также возможность использовать пользовательский код для создания собственных преобразований на PySpark, SQL и различных библиотеках обработки данных, таких как pandas.

Необходимые условия

Прежде всего, нам необходимо настроить домен Amazon SageMaker Studio. Для получения деталей о том, как его настроить, обратитесь к руководству Быстрая настройка домена Amazon SageMaker с помощью быстрой установки.

Кроме того, нам нужно настроить правильные разрешения с использованием Identity and Access Management (IAM) Amazon Web Services для ролей Amazon Personalize и Amazon SageMaker, чтобы они могли обращаться к необходимым функциям.

Вы можете создать новую группу наборов данных Amazon Personalize для использования в этом руководстве или использовать существующую.

Наконец, нам нужно скачать и распаковать набор данных MovieLens, поместив его в Amazon Simple Storage Service (Amazon S3).

Запуск SageMaker Data Wrangler из Amazon Personalize

Для начала работы с интеграцией SageMaker Data Wrangler с Amazon Personalize выполните следующие шаги:

  1. На консоли Amazon Personalize перейдите на страницу Обзор вашей группы наборов данных.
  2. Выберите Импорт взаимодействий с данными, Импорт данных пользователей или Импорт данных элементов, в зависимости от типа набора данных (в этом руководстве мы выбираем Импорт взаимодействий с данными).

  1. Для метода импорта выберите Импортировать данные с помощью Data Wrangler.
  2. Выберите Далее.

  1. Укажите ранее созданный домен SageMaker, профиль пользователя и служебную роль IAM в качестве предварительных требований.
  2. Выберите Далее.

  1. Продолжайте выполнять шаги для запуска экземпляра SageMaker Data Wrangler.

Настройка окружения впервые может занять до 5 минут.

Импортировать исходные данные в SageMaker Data Wrangler

При использовании SageMaker Data Wrangler для подготовки и импорта данных мы используем поток данных. Поток данных определяет серию преобразований и анализов данных для их подготовки к созданию модели машинного обучения. Каждый раз, когда мы добавляем шаг к нашему потоку, SageMaker Data Wrangler выполняет действие с нашими данными, такое как объединение с другим набором данных или удаление строк и столбцов.

Для начала давайте импортируем исходные данные.

  1. На странице потока данных выберите Импортировать данные.

С помощью SageMaker Data Wrangler мы можем импортировать данные из более чем 50 поддерживаемых источников данных.

  1. Для Источник данных выберите Amazon S3.

  1. Выберите набор данных, загруженный в ваше хранилище S3.

SageMaker Data Wrangler автоматически отображает предварительный просмотр данных.

  1. Оставьте настройки по умолчанию и выберите Импортировать.

После импорта данных SageMaker Data Wrangler автоматически проверяет наборы данных и определяет типы данных для всех столбцов на основе их выборки.

  1. Выберите Поток данных в верхней части страницы Типы данных, чтобы просмотреть основной поток данных перед переходом к следующему шагу.

Одно из основных преимуществ SageMaker Data Wrangler – это возможность запуска предварительного просмотра ваших преобразований на небольшом подмножестве данных перед применением преобразований на всем наборе данных. Чтобы запустить одно и то же преобразование на нескольких разделенных файлах в Amazon S3, вы можете использовать параметры.

Преобразование данных

Для трансформации данных в SageMaker Data Wrangler добавьте этап Transform в вашу цепочку данных. SageMaker Data Wrangler включает более 300 преобразований, которые вы можете использовать для подготовки ваших данных, включая преобразование Map columns для Amazon Personalize. Вы можете использовать общие преобразования SageMaker Data Wrangler, чтобы исправить проблемы такие как выбросы, проблемы типов и отсутствующие значения, или применять шаги предварительной обработки данных.

Для использования Amazon Personalize данные, которые вы предоставляете в наборе данных взаимодействий, должны соответствовать вашей схеме набора данных. Для нашей системы рекомендаций фильмов, предлагаемая схема набора данных взаимодействий включает в себя:

  • user_id (строка)
  • item_id (строка)
  • event_type (строка)
  • timestamp (в формате Unix-времени)

Чтобы узнать больше о наборах данных и схемах Amazon Personalize, обратитесь к Наборы данных и схемы.

Файл ratings.csv, как показано на последнем шаге в предыдущем разделе, содержит оценки фильмов от 1 до 5. Мы хотим создать систему рекомендаций фильмов на их основе. Для этого мы должны выполнить следующие шаги:

  1. Изменить типы данных столбцов.
  2. Создать два типа событий: Клик и Просмотр.
  3. Назначить все фильмы с оценкой 2 и выше как Клик, а фильмы с оценкой 4 и выше как Клик и Просмотр.
  4. Удалить столбец ratings.
  5. Сопоставить столбцы с схемой набора данных взаимодействий Amazon Personalize.
  6. Убедиться, что наш временной штамп представлен в формате Unix-времени.

Обратите внимание, что Шаг 3 не требуется для создания модели персонализации. Если мы хотим использовать одну из упрощенных систем рекомендаций Amazon Personalize для видео по запросу, таких как Лучшие предложения для вас, требуются типы событий Клик и Просмотр. Однако, если у нас нет их, мы не сможем добавить поле типа события (или добавить свои собственные типы событий, такие как исходные оценки пользователей) и использовать настраиваемый рецепт, такой как Персонализация пользователя. Независимо от того, какую систему рекомендаций мы выбираем, мы должны убедиться, что наш набор данных содержит только представления положительных намерений пользователей. Так что какой бы подход вы ни выбрали, вам нужно удалить все рейтинги одной звезды (и возможно также двухзвездочные рейтинги).

Теперь давайте воспользуемся SageMaker Data Wrangler, чтобы выполнить предыдущие шаги.

  1. На странице Цепочка данных выберите первое преобразование, называемое Типы данных.

  1. Обновите тип для каждого столбца.
  2. Выберите Предварительный просмотр, чтобы отразить изменения, затем выберите Обновить.

  1. Чтобы добавить этап в цепочку данных, выберите знак плюс рядом с этапом, на котором вы хотите выполнить преобразование, затем выберите Добавить преобразование.

  1. Чтобы отфильтровать событие “Click” из оценок фильмов, мы добавляем шаг фильтрации данных для отфильтровки фильмов с оценкой 2 и выше.

  1. Добавьте еще один пользовательский шаг трансформации, чтобы добавить новый столбец eventType со значением Click.
  2. Выберите Предварительный просмотр, чтобы проверить преобразование и убедиться, что результаты соответствуют задуманному, затем выберите Добавить.
  3. В этом случае мы добавляем некоторый код PySpark для добавления столбца с именем eventType, значение которого будет одинаковым для всех наших фильмов с оценкой от двух до пяти:
from pyspark.sql.functions import litdf = df.withColumn("eventType", lit("Click"))

  1. Для событий Watch повторите предыдущие шаги для фильмов с оценкой 4 и выше и присвойте значение Watch, добавив шаги к шагу Data types. Наш код PySpark для этих шагов выглядит следующим образом:
from pyspark.sql.functions import litdf = df.withColumn("eventType", lit("Watch"))

На данном этапе поток данных должен выглядеть следующим образом.

Объединение наборов данных

Поскольку у нас есть два набора данных для просмотров и кликов, давайте рассмотрим, как объединить их в один набор взаимодействий.

  1. На странице Поток данных выберите плюс рядом с Создать событие просмотра и выберите Объединить.

  1. Выберите другой конечный шаг (Создать событие клика) и это автоматически свяжет (схлопнет) оба набора данных в предварительный просмотр объединения.

  1. Выберите Настроить, чтобы просмотреть предварительный просмотр объединенных наборов данных.
  2. Добавьте имя к шагу.
  3. Выберите Добавить, чтобы добавить шаг.

Теперь поток данных выглядит следующим образом.

  1. Теперь добавим шаг управления столбцами, чтобы удалить исходный столбец с рейтингом.

У Amazon Personalize есть стандартные имена столбцов для пользователей, элементов и меток времени. Эти стандартные имена столбцов: user_id, item_id и timestamp.

  1. Добавим этап преобразования для Amazon Personalize, чтобы заменить существующие заголовки столбцов на стандартные заголовки.
  2. В нашем случае мы также используем поле event_type, поэтому давайте также его сопоставим.

С этим шагом преобразование данных завершено, и набор взаимодействий готов к следующему шагу.

Теперь давайте проверим наши метки времени.

  1. Мы можем сделать это, добавив пользовательский шаг преобразования. В этом посте мы выбираем Python (Пользовательская функция).
  2. Выберите столбец метки времени в качестве входного и, в качестве выходного, создайте новый столбец с именем readable_timestamp.
  3. Выберите Python в качестве режима преобразования и вставьте следующий код для функции Python:
def custom_func(value: int) → str:    return datetime.utcfromtimestamp(value).strftime('%Y-%m-%d %H:%M:%S')
  1. Выберите Предварительный просмотр, чтобы просмотреть изменения.

В данном случае мы видим даты в 2000-х годах, так как MovieLens начал собирать данные в 1996 году, это соответствует ожиданиям. Если мы не выберем Добавить, это преобразование не будет добавлено в наш поток данных.

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

Наконец, мы добавляем шаг анализа для создания сводного отчёта о наборе данных. Этот шаг выполняет анализ для оценки пригодности набора данных для Amazon Personalize.

  1. Выберите плюс рядом с последним шагом в потоке данных и выберите Добавить анализ.
  2. Для Типа анализа выберите Отчет о качестве данных и понимании для Amazon Personalize.
  3. Для Типа набора данных выберите Взаимодействия.
  4. Выберите Создать.

Набор данных MovieLens достаточно чистый, поэтому анализ не выявляет проблем. Если были обнаружены какие-либо проблемы, вы можете итерироваться по набору данных и повторно выполнять анализ, пока их не удастся устранить.

Обратите внимание, что анализ по умолчанию выполняется на выборке из 50 000 строк.

Импорт набора данных в Amazon Personalize

На этом этапе наши необработанные данные были преобразованы, и мы готовы импортировать преобразованный набор данных в Amazon Personalize. SageMaker Data Wrangler позволяет экспортировать данные в местоположение внутри S3-ведра. Вы можете указать местоположение, используя один из следующих методов:

  • Узел назначения – где SageMaker Data Wrangler хранит данные после их обработки
  • Экспорт в – экспортирует данные, полученные в результате преобразования, в Amazon S3
  • Экспорт данных – для небольших наборов данных вы можете быстро экспортировать преобразованные данные

С помощью метода Узел назначения для экспорта данных вы создаете узлы назначения и задание SageMaker Data Wrangler. Создание задания SageMaker Data Wrangler запускает обработку задания SageMaker для экспорта вашего потока. После их создания вы можете выбрать узлы назначения, которые вы хотите экспортировать.

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

  1. Выберите Экспортировать в, а затем выберите Amazon S3 (через Jupyter Notebook).

Обратите внимание, что мы также могли выбрать экспорт данных в Amazon Personalize через блокнот Jupyter, доступный в SageMaker Data Wrangler.

  1. Для Название набора данных введите имя, которое будет использоваться в качестве имени папки в предоставленном в качестве места назначения S3-ведре.
  2. Вы можете указать тип файла, разделитель полей и метод сжатия.
  3. По желанию укажите количество разделов и столбец, по которому необходимо разделить.
  4. Выберите Добавить назначение.

Поток данных должен выглядеть следующим образом на снимке экрана.

  1. Создайте задание для обработки потока данных и сохранения данных в назначение (S3-ведро), которое мы настроили на предыдущем шаге.
  2. Введите имя задания, затем выберите Настроить задание.

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

Для отслеживания статуса задания перейдите на страницу Панель инструментов в консоли SageMaker. В разделе Обработка отображается количество завершенных и созданных заданий. Вы можете получить более подробные сведения о завершенном задании.

Когда работа завершена, создаётся новый файл с преобразованными данными в указанном месте назначения.

  1. Вернитесь в консоль Amazon Personalize и перейдите к группе наборов данных для импорта другого набора данных.
  2. Выберите Импортировать данные о взаимодействии.

  1. Выберите Импортировать данные непосредственно в наборы данных Amazon Personalize, чтобы импортировать преобразованный набор данных непосредственно из Amazon S3, затем выберите Далее.

  1. Определите схему. В данном случае наш набор данных состоит из полей user_id (string), item_id (string), event_type (string) и timestamp (long).

На этом этапе вы можете создать алгоритм рекомендаций видео на заказ или настроить пользовательское решение. Для этого следуйте инструкциям в Подготовка и импорт данных

Заключение

В этой статье мы описали, как использовать SageMaker Data Wrangler для подготовки примера набора данных для Amazon Personalize. SageMaker Data Wrangler предлагает более 300 преобразований. Эти преобразования и возможность добавления пользовательских преобразований помогают упростить процесс создания качественного набора данных для предоставления гиперперсонализированного контента конечным пользователям.

Хотя мы рассмотрели только подготовку набора данных о взаимодействии в этой статье, вы также можете использовать SageMaker Data Wrangler для подготовки наборов данных о пользователях и товарах. Дополнительную информацию о типах данных, которые могут использоваться с Amazon Personalize, см. в статье Наборы данных и схемы.

Если вы новичок в Amazon Personalize или SageMaker Data Wrangler, обратитесь к руководству по Началу работы с Amazon Personalize или Началу работы с SageMaker Data Wrangler соответственно. Если у вас возникли вопросы, связанные с этой статьей, задавайте их в разделе комментариев.