Мы протестировали Azure Personalizer - вот чего вы можете ожидать!

Автор: Кристьян Эльджанд | Разведчик технологий

Персонализатор Azure призван предоставить функциональные возможности системы персонализации / рекомендаций контента, которые можно реализовать без опыта в области машинного обучения. Сервис обладает огромным потенциалом, поскольку в качестве рабочей лошадки он использует один из самых мощных методов машинного обучения (обучение с подкреплением). Но сможет ли он выполнить свои обещания !?

Обучение с подкреплением (RL) - это метод машинного обучения, при котором модель обучается по принципу кнута и пряника. Например, вы начнете с того, что порекомендуете покупателю случайные товары. Если пользователю понравится выбранный предмет, вы получите награду за модель. В противном случае вы накажете модель отрицательной наградой. Затем модель рассматривает вознаграждения и наказания и переобучается, чтобы увеличить вознаграждение при следующем взаимодействии. Обучение с подкреплением использовалось в нескольких самых известных решениях искусственного интеллекта, таких как AlphaGo (искусственный интеллект, который играет в настольную игру в го лучше, чем профессиональные игроки в го), и хорошо подходит для задач, которые включают долгосрочное и краткосрочное вознаграждение. .

Обратите внимание: этот тест проводится в период с 12 по 23 августа 2019 г., и Azure Personalizer находится в состоянии предварительной версии. Я надеюсь, что пока вы это читаете, проблемы, упомянутые в этом документе, уже решены 😊 .

1. Настройка Azure Personalizer

Azure Personalizer - это облачная служба. Первоначальная настройка представляет собой двухэтапный процесс:

1. Создайте учетную запись в Azure Cloud Platform;

2. Создайте новый ресурс Personalizer. Платформа Azure имеет понятие «ресурсы», что означает определенную службу.

Попутно вам нужно будет заполнить одну или две формы, но процесс довольно прост. Один из вариантов, который вы должны сделать, - это выбрать ценовой уровень. В настоящее время (21.08.2019) персонализатор Azure имеет ценовые уровни Бесплатно и S0. Уровень Free дает вам 50 000 бесплатных транзакций в месяц. S0 будет составлять 0,08 доллара за 1000 транзакций для 1 миллиона транзакций, а цена за единицу будет снижаться с увеличением трафика (подробнее см. Здесь). Я настоятельно рекомендую использовать уровень S0 (причины будут обсуждены в параграфе обучения модели).

После заполнения форм и подачи команды на запуск ресурса Azure создает API, исходную модель и политику обучения для модели. Через 10–15 минут все будет в порядке!

2. Обучение модели.

В этом тесте мы воспользуемся образцом из Azure Personalizer Github repo и попробуем обучить систему рекомендаций, которая прогнозирует предпочтения кофе. В нашем ассортименте кофе:

  • Капучино: горячее, органическое, темное жаркое из Кении.
  • Холодное пиво: холодное, органическое, легкое жаркое из Бразилии.
  • Мокко со льдом: холодное, не органическое, легкое жаркое из Эфиопии.
  • Латте: горячее, не органическое, темное жаркое из Бразилии.

Эти четыре варианта будут нашими функциями действий или возможными вариантами, которые мы можем порекомендовать нашим клиентам. Контекст рекомендации состоит из трех переменных:

  • Имя клиента: Алиса, Боб, Кэти, Дэйв,…
  • Время дня: утро, день, вечер.
  • Погода: солнечно, дождливо, снежно.

По правде говоря, мы знаем предпочтения наших клиентов. Например, солнечным утром Алиса любит пить холодное пиво, а дождливым вечером предпочитает латте. Напротив, Кэти предпочитает латте солнечным утром и холодный мокко дождливым вечером. Мы не будем показывать эти данные нашей модели. Наша модель начнет угадывать, и если она угадает правильно, мы дадим ей +1. Если предположение неверно, мы дадим ему награду 0.

3. Модельное обучение

Настройка Azure Personalizer - простой процесс, но с обучением модели все становится намного сложнее. Было бы справедливо сказать, что вы не добьетесь успеха без базовых навыков программирования.

Документация Personalizer указывает следующие шаги для обучения модели:

  • Вызовите Rank API, отправив ему:

A. список возможных позиций (ассортимент кофе) и;

Б. контекстная информация (имя клиента, время суток, погода).

  • Rank API возвращает элемент с наивысшим рейтингом;
  • Вызовите Reward API, отправив ему вознаграждение от -1 до 1 за ранжированный элемент.

3.1. Формальные аспекты обучения модели

Первоначально я установил бесплатный экземпляр Personalizer, но около 50% вызовов Rank и Reward терпели неудачу. Причина неизвестна, но моя гипотеза состоит в том, что Azure выделила слишком маленький ресурс для уровня Free. После настройки нового экземпляра с ценой S0 API работал должным образом.

Не используйте ценовой уровень "Бесплатно", если хотите получить надежный API!

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

Personalizer предназначен для обучения в Интернете, что означает, что вы показываете результаты работы Personalizer своим пользователям и отправляете вознаграждение Personalizer в зависимости от того, как пользователь отреагировал на рекомендацию. Процесс обучения, вероятно, немного незнаком специалистам по данным, потому что вы регулярно вводите в модель машинного обучения пакет исторических наблюдений, но в Azure Personalizer вы вводите в модель отдельные наблюдения. Группе разработчиков Personalizer следует учитывать пакетную обработку наблюдений.

Команда разработчиков Personalizer должна рассмотреть возможность добавления функции пакетной обработки для более эффективного автономного обучения!

3.2. Эффективность обучения

Большую часть времени во время этого технологического теста я тратил на размышления об эффективности модели. Всего у нас всего 36 возможных сценариев (4 клиента x 3 типа погоды x 3 временные точки) и всего 4 товара в ассортименте. Таким образом, я ожидал, что смогу обучить приличную модель за несколько сотен ранговых вызовов, но в действительности все было иначе. Чтобы получить какие-либо значимые результаты, вы должны предоставить модели десятки тысяч примеров.

Чтобы получить разумную модель, вы должны предоставить десятки тысяч примеров

В приведенной ниже таблице представлена ​​сводная информация о производительности Personalizer в вызовах 100 000 Rank с частотой обновления модели 1 минута и скоростью исследования 20%. Исследование означает, что модель случайным образом пробует новые вещи, чтобы адаптироваться к изменяющейся среде. Таким образом, наша модель не достигнет точности выше 80%.

Результаты были объединены в бункеры с размером вызовов 1-го ранга. Как и ожидалось, модель запускается случайным образом и получает около правильных (ассортимент продукции включает 4 позиции), но точность растет очень медленно. В диапазоне 15 000–90 000 вызовов Rank модель практически ничего не узнает. В самом конце точность внезапно увеличивается и достигает 75% (помните: 80% максимальны из-за скорости исследования 20%).

Для лучшего понимания рассмотрим несколько примеров рекомендаций. Первый столбец в таблице ниже указывает количество событий Rank, а столбцы 2–4 представляют контекст Rank. Истинное предпочтение пользователя показано в столбце «Предпочтения», а рекомендация модели - в последнем столбце. Первоначально модель случайным образом дает правильные некоторые рекомендации. Затем точность явно возрастает и, наконец, делается лишь несколько ошибок.

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

3.3. Модуль оценки

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

К сожалению, оценочный модуль в настоящее время содержит ошибки и неэффективен. Я должен был попробовать по крайней мере 5–10 раз, прежде чем делать оценку. Как видно из приведенной выше таблицы, политика обучения по умолчанию (Online) была лишь немного лучше, чем политика Random, а оптимальная политика, сгенерированная системой (Hyper1), работала хуже, чем политика Baseline (первое действие из списка действий).

Политика обучения определяет, как Personalizer обучает модель на каждой итерации, и выглядит примерно так: - cb_explore_adf - epsilon 0.2 - power_t 0 -l 0.001 - cb_type mtr -q. Документация Azure гласит: Параметры Политики обучения не предназначены для изменения! Изменяйте настройки только тогда, когда понимаете, как они влияют на Personalizer 😊. Тем не менее, нет доступной документации, объясняющей это загадочное выражение. Мы можем сделать обоснованное предположение, что эпсилон означает скорость исследования, но давайте будем честными: вы не сможете поиграть с ним, пока не появится некоторая документация.

4. Проблемы с решением

В итоге у меня возникли следующие проблемы с сервисом:

  • Частота отказов API для первоначального экземпляра уровня бесплатного пользования составляла около 50%;
  • Во время теста я попытался настроить 10 различных экземпляров Personalizer, и Azure не удалось развернуть 2 из них;
  • Обновления модели происходят через случайные интервалы - вы могли установить частоту обновления модели на 30 секунд, но если вы обновите страницу «Модель и политика» в управлении ресурсами, вы обнаружите, что обновление происходит через довольно случайные интервалы;
  • В оценочном модуле есть ошибки - оценочный модуль существует, но не удивляйтесь, если вы не сможете провести оценку. В настоящее время что-то не так с выбором дат.

5. Резюме

Azure Personalizer - это новая многообещающая служба, которая потенциально может использоваться не только как система персонализации, но и как общий механизм обучения с подкреплением.

Тем не менее, решение еще далеко не готово. Обучение неэффективно, в системе есть несколько ошибок, а документация по некоторым важным концепциям (например, как установить политику оценки) полностью отсутствует.

Помните, что этот тест проводится в период с 12 по 23 августа 2019 года, а Azure Personalizer находится в состоянии предварительной версии. Надеюсь, что пока вы это читаете, вышеупомянутые проблемы уже решены 😊.