Введение в персонализированное ранжирование ресторанов
В эпоху цифровых технологий, когда пользователи ожидают мгновенного доступа к персонализированному контенту, задача создания эффективных рекомендаций становится всё более актуальной. В данной статье мы рассмотрим, как адаптация метода двухбашенных встраиваний (Two-Tower Embedding, TTE) от Uber может помочь улучшить рекомендации в приложениях доставки еды, даже при ограниченных пользовательских данных и вычислительных ресурсах.
Проблема и контекст
Представьте себе виджет на главном экране приложения доставки еды, который показывает пользователю подборки ресторанов, например, итальянская кухня или здоровая еда. Основная проблема заключалась в том, что ранжирование ресторанов в этих подборках основывалось на общей популярности, что не учитывало персонализированные предпочтения пользователей. В результате виджет не справлялся со своей задачей — пользователи быстро теряли интерес, если не находили что-то привлекательное в первых 10-12 позициях.

Динамическая природа данных
Сложность задачи усугублялась частыми изменениями в подборках ресторанов из-за новых кампаний или инициатив. Обучение отдельной модели для каждой подборки было нереалистичным, и требовалось решение, способное обобщить данные для новых и изменяющихся категорий.
Метод двухбашенных встраиваний
Двухбашенная модель обучает два параллельных энкодера: для пользователя и для ресторана. Каждый энкодер создает вектор в общем пространстве признаков, на основе которого рассчитывается релевантность через оценку схожести, обычно — скалярное произведение. Это позволяет заранее вычислять встраивания ресторанов и обновлять их в реальном времени для пользователей, что делает модель быстрой и эффективной.
Адаптация для ограниченных ресурсов
Для повышения эффективности наша команда упростила наиболее ресурсоёмкие части модели. Вместо тонкой настройки языковой модели для каждого ресторана, мы использовали уже обученную модель TinyBERT, которая обеспечивала необходимое семантическое покрытие. Это позволило снизить затраты на обучение и ускорить процесс.

Персонализация через взаимодействие
Мы отказались от обучения отдельного встраивания для каждого пользователя и вместо этого использовали данные о предыдущих заказах. Среднее встраивание ресторанов, из которых пользователь заказывал, дополнялось данными профиля и сессии. Это позволило учитывать не только долгосрочные предпочтения, но и текущий контекст.
Фильтрация по тегам
Ключевым элементом стало фильтрация истории заказов по тегам текущей подборки. Это позволило уменьшить шум и повысить точность рекомендаций, балансируя между долгосрочными вкусами и текущим намерением пользователя. Если пользователь обычно заказывал бургеры, но сейчас искал мороженое, модель не рекомендовала бы бургерные, которые также продавали десерты.
Многозадачное обучение и его преимущества
Окончательное обучение модели проводилось на уровне сессий с использованием многозадачного подхода. Это позволило учесть разные сценарии: один и тот же ресторан мог быть привлекательным в одной сессии и неинтересным в другой. Модель предсказывала клики, добавление в корзину и заказы совместно, с учетом ограничения воронки: P(заказ) ≤ P(добавление в корзину) ≤ P(клик).
Результаты и перспективы
По результатам A/B тестов, новая система показала значительное улучшение конверсии. Модель оказалась универсальной и применимой не только для виджета, но и для других задач, таких как реклама, благодаря способности оценивать пары пользователь-ресторан без привязки к конкретным спискам.
Будущее развитие
Следующим шагом может стать добавление мультимодальных данных, таких как изображения ресторанов и меню, для улучшения качества рекомендаций. Визуальные элементы могут существенно влиять на клики, и их интеграция в модель сделает рекомендации ещё более точными.