В этом томе мы описываем, как мы реализовали модель Transformer для рекомендаций в Gousto, и визуализируем механизм внимания Transformer, чтобы понять сигналы клиентов, которые модель использует для прогнозирования.

В Gousto мы решили проблему холодного старта клиентов с рекомендациями, смоделировав клиентов как последовательность заказанных ими рецептов, а не изучая отдельные пользовательские встраивания. Такой подход проложил путь к использованию современной архитектуры в машинном обучении, а именно Transformer.

Краткий обзор Трансформеров

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

Одним из основных компонентов архитектуры Transformer является механизм самоконтроля с несколькими головками. Мы дадим представление о том, как это работает, разбив этот механизм на две части: мульти-голова и самовнимание. За подробным описанием математики, лежащей в основе многоголового самовнимания, мы отсылаем читателя к оригинальной статье, а также к прекрасному сообщению в блоге Джея Аламмара.

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

Элементы последовательности представляют собой исторические рецепты, заказанные данным клиентом, и представляют собой входные данные для рекомендателя на основе Transformer (подробнее об этом позже). Для каждого рецепта в последовательности модель создаст представление, формально вложение, которое учитывает другие рецепты в последовательности. Мы визуализируем внимание, уделяемое различным рецептам в последовательности, когда модель строит представление рецепта под названием «Цыпленок в соевой глазури с салатом по-японски».

В этом примере модель уделяет больше всего внимания самому выбранному рецепту. Затем компания обращает внимание на другие рецепты, похожие по характеру на «Цыпленок в соевой глазури с салатом по-японски», а именно на «Жареный цыпленок Ян-Нюм по-корейски» и «Курица терияки с рисом и горошком». Мы видим, что эти рецепты имеют схожие характеристики как в описательной, так и в визуальной части (блюда из курицы и риса в азиатском стиле). И наоборот, модель уделяет очень мало внимания рецептам, которые заметно отличаются от выбранного рецепта, например «Simply Perfect Lean Beef Spag Bol».

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

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

Трансформеры для рекомендаций

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

Между нашей моделью и моделью, предложенной Alibaba, есть заметные различия. Во-первых, последовательность, передаваемая кодировщику Transformer, состоит из исторических покупок рецептов, сделанных покупателем, объединенных с целевым рецептом, который должна ранжировать модель. Мы усекаем и дополняем историческую последовательность до длины 50 и используем в нашей модели 8 головок само-внимания.

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

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

Открытие черного ящика — чему научилась модель?

Механизм внутреннего внимания внутри Трансформеров дает уникальное представление о том, как модель принимает свои решения. Мы можем видеть, на какие части входной последовательности (в нашем случае рецепты, заказанные покупателем) модель обращает наибольшее внимание при принятии решения о том, рекомендовать рецепт или нет. Следовательно, у нас есть понятие «интерпретируемость» на уровне для каждого клиента, что не всегда возможно с другими нейронными моделями.

При само-внимании каждый рецепт в последовательности уделяет различное внимание каждому другому рецепту в последовательности. Следовательно, у нас есть 51 x 51 значение внимания на голову для каждой рекомендации. Это можно визуализировать на тепловой карте, как показано ниже:

Строки — это карты внимания для каждого элемента в последовательности (0 — это первый рецепт в истории, 49 — последний, а 50 — рассматриваемый целевой рецепт). Столбцы представляют количество внимания, уделяемого каждому другому элементу в последовательности.

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

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

На следующих графиках крайний правый прямоугольник — это целевой рецепт. Цвета подчеркивают внимание, уделяемое рецептам в истории данного клиента, а также целевому рецепту. Мы используем цветовую шкалу viridis, показанную ниже, где внимание возрастает слева (фиолетовый) направо (желтый):

Повторные покупки

Приведенная выше тепловая карта является действительно положительной рекомендацией для «Simply Perfect Lean Beef Spag Bol», одного из наших любимых рецептов на каждый день, который всегда доступен. Мы видим, что для данного клиента это рецепт, который он регулярно заказывает, и модель успешно определила это, уделяя больше внимания этим покупкам по сравнению с другими. Хотя больше всего внимания уделяется целевому товару, сумма внимания по всем предыдущим покупкам превысит это значение.

Назад в меню

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

К счастью, модель Transformer научилась делать это сама!

В приведенном выше примере целевым рецептом является «Песто с фисташками, помидорами и моцареллой Тортеллони» из нашей вкусной линейки Pasta Pronto. Это была лучшая рекомендация для этого клиента. Рецепт, о котором идет речь, был заказан ранее, и в промежуточный период его не было в нашем меню. Модель не только порекомендовала этот товар на основе предыдущей покупки клиента (воспроизведение в меню), но и сделала это разумно. Мы отмечаем несколько высоких значений внимания к рецептам, похожим по своей сути на целевой рецепт, таким как другие блюда из равиоли и тортеллони. Модель заметила, что покупатель заказывал похожие рецепты в промежуточный период, и, вероятно, был бы признателен, узнав, что рецепт песто с фисташками вернулся. Этот тип информированной рекомендации был бы невозможен с простой функцией «вернуться в меню», основанной на правилах.

Также стоит отметить способность модели использовать рецепты в начале исторической последовательности клиента (в данном случае 4-й рецепт). Это одно из известных преимуществ Transformers по сравнению с рекуррентными нейронными сетями, которые могут страдать от исчезающих градиентов с длинными контекстными окнами.

Предыдущие покупки иногда могут вводить в заблуждение

Визуализация тепловых карт внимания также оказывается полезным инструментом отладки. Здесь мы показываем ложноположительный пример — рекомендация «Цыпленок Роган Джош в одном горшке с йогуртом» не была заказана, несмотря на высокий рейтинг. Как и в других примерах, модель обратила внимание на предыдущую покупку этого рецепта покупателем и обратила внимание преимущественно на это, а не на промежуточные заказы.

Так почему же это плохая рекомендация? Мы не узнаем наверняка, не спросив клиента, но логично предположить, что рецепт ему не понравился. Поскольку мы используем неявные ярлыки, мы принимаем заказы на «лайки». Однако, как показывает этот пример, это может привести к ложным срабатываниям и предполагает, что мы должны также включить в нашу модель некоторые явные отзывы, такие как рейтинги рецептов.

Спасибо за внимание!

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

Еще одно преимущество Transformers, о котором стоит упомянуть, заключается в том, что с его помощью очень легко давать имена конечным точкам модели — наша самая последняя версия называется Optimus! Оставайтесь с нами, чтобы увидеть, как выглядят Бамблби и Мегатрон…

Обязательно ознакомьтесь с Томом 1 и Томом 2 этой серии, если вы их пропустили. Хотя в этом томе основное внимание уделялось модели, фундаментальной частью любого успешного приложения машинного обучения является инфраструктура данных. Вы можете прочитать об использовании Feature Stores и их преимуществах здесь.