NeuMF — Neural CF
Те же эмбеддинги, что у MF, но итоговый балл считает нейросеть (GMF + MLP), а не дот-произведение. Главное здесь — честный урок: сложнее ≠ лучше.
Карта эмбеддингов (GMF): топ-400 фильмов
Точки — фильмы в пространстве GMF-эмбеддингов, спроецированные в 2D (PCA), цвет — основной жанр. Эмбеддинги учатся, но, как видно по метрикам, сама по себе нейросеть поверх них не даёт выигрыша над простыми моделями.
обучение и проекция эмбеддингов…
Теория простым языком
NeuMF (Neural Collaborative Filtering) берёт те же user/item-эмбеддинги, что и MF, но скор считает нейросеть, а не скалярное произведение. Идея: дот- произведение — это лишь один способ «сложить» совпадение векторов, а MLP мог бы выучить связь сложнее. Заодно это наш стенд для важного урока: сложнее ≠ автоматически лучше.
Две ветки: GMF и MLP
У каждого пользователя и фильма — по два эмбеддинга (для каждой ветки). Их обрабатывают двумя путями, потом склеивают.
Выходы обеих веток конкатенируют и подают в финальный линейный слой → один балл. Так модель совмещает «линейное» (GMF) и «нелинейное» (MLP) совпадение.
▸Почему нейросеть ≠ автоматически лучше
Как обучается
Как и implicit-ALS/BPR, NeuMF учится на неявном фидбеке: позитив — фильм, с которым было взаимодействие; негатив — случайный невзаимодействованный (сэмплим несколько на каждый позитив). Цель — бинарная классификация «было/не было», лосс — кросс-энтропия.
для каждого позитива (u, i) и нескольких случайных негативов (u, j):
gmf = pG[u] ⊙ qG[i] # поэлементное произведение
h = MLP( concat(pM[u], qM[i]) ) # несколько слоёв + ReLU
ŷ = σ( w · concat(gmf, h) ) # вероятность «понравится»
loss = BCE(ŷ, метка 1/0) # обновляем веса градиентом
score(u, i) = w · concat(gmf, h) # для рекомендаций (порядок)▸Формула: GMF + MLP + BCE
GMF-ветка — поэлементное произведение эмбеддингов:
MLP-ветка — склейка эмбеддингов через слои с нелинейностью:
Финальный балл — линейный слой над конкатенацией веток:
Обучение — BCE по позитивам и сэмплированным негативам:
Для ранжирования сигмоида не нужна (монотонна) — сравниваем логиты .
Главный урок: нейросеть ≠ автоматически лучше
Казалось бы, MLP мощнее дот-произведения — значит, должно быть точнее? Проверим на наших данных (NDCG@10, порог «понравилось»):
Это не случайность нашего датасета. Знаменитая работа Rendle et al. 2020 («Neural Collaborative Filtering vs. Matrix Factorization Revisited») показала: аккуратно настроенный дот-продукт MF обходит NeuMF из оригинальной статьи. Мораль: сложная модель оправдана только если измеримо бьёт простые baseline на твоих данных — а часто не бьёт. На маленьких данных её ещё и легче переобучить.
Сильные стороны
- Гибкость: MLP может выучить нелинейные взаимодействия, недоступные дот-произведению.
- Единый каркас: GMF и MLP — частные случаи, легко расширять (фичи, контекст).
- Хорошая учебная точка для нейросетевых рекомендаций.
Слабые стороны
- На наших данных не бьёт простые baseline (popularity/BPR/item-CF) — классический «neural ≠ лучше».
- Дороже и медленнее MF; больше гиперпараметров (слои, негативы, lr).
- Легко переобучить на маленьком датасете; холодный старт остаётся.
⚠️ Что может пойти не так
- Сравнивай с сильным baseline: хорошо настроенный MF/BPR часто не уступает NeuMF (Rendle 2020). Без честного сравнения легко обмануться «потому что нейросеть».
- Negative sampling важен: сколько негативов на позитив и как их брать — сильно влияет на качество.
- Переобучение: на маленьких данных сложная сеть запоминает train; нужны регуляризация и ранняя остановка.
- Цена сложности: больше параметров и времени обучения ради сомнительного выигрыша — в проде это реальный trade-off.
🧠 Проверь себя: Чем NeuMF принципиально отличается от обычной MF?
Где встречается в жизни
NCF/NeuMF — популярная отправная точка нейросетевых рекомендаций и частый бенчмарк. Но именно вокруг него развернулась дискуссия «нейросети против простых baseline», которую важно знать: умение честно сравнить с настроенной MF ценится выше, чем «взял модель посложнее».