К тренажеру
ВопросHardmlsd-recsysРеальный собес

Как добавить content embeddings в DSSM/two-tower модель

Есть item2vec/DSSM-подобная модель, обученная на сессиях кликов: anchor, positive рядом в сессии и negative. У товара есть текстовый embedding из LLM. Как добавить content-информацию в архитектуру?

Короткий ответ

Базовый путь: взять collaborative item embedding и content embedding, нормализовать/спроецировать их, объединить через concat + MLP/gating/projection и обучать итоговый embedding тем же contrastive/triplet objective на кликах и negatives.

Полный разбор

Нужно сначала различить сигналы. Collaborative embedding учится из поведения пользователей: товары близки, если часто встречаются рядом в сессиях или у похожих пользователей. Content embedding из LLM описывает текст товара, но сам по себе еще не знает, что именно важно для пользовательских переходов.

Простой baseline - concat collaborative embedding и content embedding. Лучше добавить projection/fusion layer: линейный слой или MLP, который приводит размерности и масштабы к общему пространству, может уменьшать размерность и учится выделять из content только то, что помогает interaction objective. Альтернативы: gated fusion, residual добавка content tower, late fusion scores или отдельный cold-start retrieval источник.

Обучение: anchor-positive-negative из сессий, triplet/contrastive loss, in-batch negatives, hard negatives, cosine/dot product в итоговом пространстве. Для production retrieval итоговые item embeddings нужно уметь индексировать в ANN.

Риски: разные нормы и распределения embedding vectors, слишком большая размерность LLM embedding, missing/dirty content, доминирование content над collaborative сигналом, leakage, stale descriptions и деградация latency. Поэтому обычно нужны normalization, projection, ablation и отдельная проверка cold-start и warm items.

Теория

Content features особенно полезны для cold start и sparse items, но для warm recommendations они должны быть согласованы с поведенческой целью, иначе модель оптимизирует текстовую похожесть вместо пользовательской релевантности.

Типичные ошибки

  • Просто склеить два embedding без нормализации и обучения fusion слоя.
  • Считать LLM embedding готовой заменой collaborative сигналу.
  • Не обсудить ANN-index и latency для retrieval.

Как отвечать на собеседовании

  • Скажи "concat как baseline, projection/MLP/gating как более правильный fusion".
  • Объясни проблему разных масштабов embedding и зачем нужна normalization.