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

Ключевые компоненты рекомендательной системы

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

1. Сбор данных о пользовательском взаимодействии.

2. Представление контента и метаданные.

3. Алгоритмы рекомендаций ― коллаборативные, контентные и гибридные.

4. Обучение и обслуживание модели.

5. Цикл обратной связи и непрерывное обучение.

6. Цикл обратной связи и непрерывное обучение.

Разберем эти компоненты подробно.

Пошаговый процесс проектирования

1. Определение требований

До проектирования определяются цели рекомендательной системы. Вот типичные:

Персонализация: рекомендация контента, который соответствует предпочтениям пользователя.

Обработка в реальном времени: мгновенная выдача рекомендаций, особенно приложениях вроде TikTok, где пользовательское взаимодействие быстрое.

Масштабируемость: миллионы пользователей и фрагментов контента обрабатываются с низкой задержкой.

2. Сбор пользовательских данных

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

Данные профилей пользователей: это основные сведения вроде возраста, пола, интересов.

Данные о взаимодействии: клики, просмотры, лайки, репосты, история поиска.

Неявное поведение: глубина прокрутки, потраченное на контент время, события наведения курсора.

Особенности проектирования: данные собираются на уровне пользовательского интерфейса и непрерывно регистрируются в масштабируемой системе вроде Kafka, чем обеспечивается высокая скорость записи.

Хранение данных:

Реляционные базы данных: для структурированных данных пользовательских профилей.

Нереляционные базы данных: для неструктурированных пользовательских взаимодействий и логов, например MongoDB, Cassandra.

3. Представление контента и метаданные

В рекомендательной системе каждый фрагмент контента хорошо структурируется метаданными. В данные контента включаются:

Теги и категории: метки, которыми контент описывается.

Атрибуты: сведения вроде длины, автора, ключевых слов и т. д.

Для семантического представления контента ― текста, видео, изображений ― понадобятся также методы вроде векторного представления слов: Word2Vec, TF-IDF, BERT.

Особенности проектирования: большие наборы данных контента хранятся в распределенной системе хранения Amazon S3 или Hadoop HDFS, чем обеспечивается высокая доступность.

4. Выбор алгоритма рекомендаций

Приступаем к центральной части системы  —  алгоритму рекомендаций. Имеется три основных подхода:

Контентная фильтрация

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

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

Минусы: ограниченное исследование: рекомендуется не разнообразный, а аналогичный контент.

Коллаборативная фильтрация

Рекомендации выдаются, исходя из отношений «пользователь к пользователю» или «элемент к элементу»:

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

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

Плюсы: высокодинамичная, для обнаружения нового контента.

Минусы: проблема холодного запуска  —  малая эффективность для новых пользователей или контента.

Гибридная фильтрация

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

Плюсы: выше точность, разнообразные рекомендации.

Минусы: вычислительная трудоемкость.

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

5. Обучение и обслуживание модели

Собрав данные и выбрав алгоритм, модель обучают на исторических пользовательских данных. Глубокое обучение осуществляется фреймворками TensorFlow или PyTorch, а более простое машинное ― фреймворком scikit-learn.

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

Онлайн-обучение: в системах реального времени, таких как TikTok, модели постоянно обновляются из-за пользовательского взаимодействия/потоковой передачи данных в реальном времени. Инструментами вроде Kafka и Flink данные обрабатываются в реального времени, а модель постепенно обновляется.

Развертывание модели

Серверы модели: обученные модели обслуживаются системами вроде TensorFlow Serving или MLflow.

Кеширование: часто рекомендуемый контент в целях производительности кешируется с помощью Redis или Memcached.

6. Генерирование рекомендаций

После обучения и обслуживания моделей генерируются рекомендации:

Предварительно рассчитываемые рекомендации: в системах, где ответы в режиме реального времени не критичны, например в Netflix, рекомендации предварительно рассчитываются и кешируются.

В платформах вроде TikTok необходимы рекомендации реального времени: релевантный контент извлекается на основе пользовательских взаимодействий и фильтруется моделью.

Особенности масштабирования

Балансировка нагрузки: входящие запросы для рекомендаций равномерно распределяются по серверам модели балансировщиком нагрузки NGINX или AWS ELB.

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

7. Цикл обратной связи и непрерывное обучение

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

Обратная связь от пользователей: модель обновляется неявными сигналами ― кликами, лайками ― и явной обратной связью ― рейтингами. Эффективность новых моделей перед их полным развертыванием оценивается A/B-тестированием.

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

Инструменты

Kafka Streams: для потоковой передачи в реальном времени данных обратной связи.

Spark Streaming: для переобучения моделей и пакетной обработки.

UML-диаграмма рекомендательной системы

+--------------------+              +-----------------------+
| User Interface | <---------> | API Gateway |
+--------------------+ +-----------------------+
| |
v v
+--------------------+ +------------------------+
| Data Collection | <----------> | Recommendation Service |
| and Storage Layer | | (Collaborative, Content)|
+--------------------+ +------------------------+
| |
v v
+--------------------+ +------------------------+
| User Data Store | | Model Training/Serving|
+--------------------+ +------------------------+
| |
v v
+--------------------+ +------------------------+
| Content Metadata | | Feedback Loop |
+--------------------+ +------------------------+

Пояснение

User Interface: пользовательский интерфейс, то есть фронтенд, где пользователи взаимодействуют с платформой.

API Gateway: API-шлюз, которым запросы от пользователя направляются на бэкенд.

Data Collection Layer: уровень сбора и хранения данных о пользовательских взаимодействиях ― просмотрах, лайках.

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

Model Training/Serving: обучение/обслуживание модели для генерирования рекомендаций.

Feedback Loop: циклом обратной связи и пользовательскими взаимодействиями модель постоянно обновляется.

Заключение

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

Читайте также:

Читайте нас в Telegram, VK и Дзен


Перевод статьи Dev Corner: System Design: How to Design a Recommendation System

Предыдущая статьяC++: подробное руководство по std::accumulate
Следующая статьяКак работать с <qr-code> — настраиваемым элементом HTML с возможностью анимации