Контентная фильтрация
Рекомендуем по свойствам товаров — когда важен контент, а не поведение
Идея контентной фильтрации
Контентная фильтрация (Content-Based Filtering) рекомендует товары на основе их свойств, а не поведения других пользователей. Если вам нравились боевики с Брюсом Уиллисом — рекомендуем другие боевики с ним. Не нужно знать, что смотрели другие люди.
Подход: описываем каждый товар набором признаков (жанр, актёры, теги, описание). Строим «профиль» пользователя из свойств понравившихся товаров. Рекомендуем товары, похожие на этот профиль.
Профиль пользователя
Профиль пользователя — это вектор, представляющий его предпочтения. Простейший способ: взвешенное среднее фичей понравившихся товаров.
I_u — множество товаров, оценённых пользователем u
Товары с высокими оценками влияют на профиль сильнее. Результат — вектор в том же пространстве, что и фичи товаров. Рекомендация: ищем товары, ближайшие к профилю.
TF-IDF для текстового контента
Если контент текстовый (описания, теги, рецензии), нужно превратить текст в числовой вектор. TF-IDF (Term Frequency — Inverse Document Frequency) — классический способ:
TF — частота термина в документе, DF — в скольких документах встречается, N — всего документов
- Частые слова в конкретном документе → высокий TF
- Редкие слова во всей коллекции → высокий IDF
- Результат: слова, уникальные для документа, получают высокий вес
- Стоп-слова («и», «в», «на») получают низкий IDF → автоматически подавляются
Cosine Similarity
Имея профиль пользователя и вектор товара, считаем сходство через косинус угла:
Cosine similarity не зависит от длины вектора — только от направления. Это важно: длинное описание товара не получит преимущества над коротким. Рекомендуем товары с наибольшим сходством.
Feature Engineering для товаров
Качество контентной фильтрации напрямую зависит от того, насколько хорошо мы описали товары:
- Категории и жанры — one-hot encoding (боевик, комедия, драма)
- Теги — bag-of-words или TF-IDF (хорошо для музыки, статей)
- Ценовой сегмент — бакетизация (эконом, средний, премиум)
- Бренд / автор / режиссёр — важный сигнал для формирования вкуса
- Числовые характеристики — длительность, год выпуска, рейтинг
- Всё вместе — конкатенация разнотипных фичей в один вектор
Embeddings контента
TF-IDF — хорошо, но не улавливает семантику. «Весёлая комедия» и «смешной фильм» — разные слова, но одинаковый смысл. Нейросетевые эмбеддинги решают эту проблему:
- Word2Vec / FastText — эмбеддинги слов, усредняем по тексту описания
- BERT / Sentence-BERT — контекстные эмбеддинги всего предложения, лучше улавливают смысл
- CNN (ResNet, EfficientNet) — эмбеддинги изображений товаров (одежда, мебель, еда)
- Мультимодальные: CLIP — совмещает текст и изображения в одном пространстве
Предобученные модели можно использовать «из коробки» — не нужно обучать с нуля. Просто прогоняем описание/картинку через модель и получаем вектор.
Преимущества и недостатки
Преимущества
- Нет cold start для новых товаров — достаточно описания, не нужны оценки других пользователей
- Объяснимость — «рекомендуем, потому что вам нравились боевики» понятно пользователю
- Независимость от других пользователей — работает даже с одним пользователем
- Рекомендует нишевые товары — не зависит от популярности
Недостатки
- Ограничена свойствами — если фичи товаров описаны плохо, рекомендации будут плохими
- Filter bubble — рекомендует «больше того же самого», пользователь застревает в пузыре
- Нет serendipity — не может удивить неожиданной рекомендацией из другой категории
- Cold start для пользователей — пока пользователь ничего не оценил, профиль пустой
- Нужна ручная работа по описанию товаров (feature engineering)
Cold start: товары vs пользователи
Контентная фильтрация НЕ страдает от cold start товаров — новый товар сразу имеет описание/фичи и может быть рекомендован. Но СТРАДАЕТ от cold start пользователей — без истории взаимодействий невозможно построить профиль. Это зеркальная ситуация по сравнению с коллаборативной фильтрацией.
Итого
- Контентная фильтрация рекомендует на основе свойств товаров, а не поведения других
- Профиль пользователя = взвешенное среднее фичей понравившихся товаров
- TF-IDF — классика для текста, cosine similarity — для измерения сходства
- Нейросетевые эмбеддинги (BERT, CNN, CLIP) дают семантическое понимание контента
- Плюсы: нет cold start товаров, объяснимость, работа с нишевыми товарами
- Минусы: filter bubble, нет serendipity, cold start пользователей
- На практике — часть гибридной системы, комбинируется с коллаборативной фильтрацией