Как добавить 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.