DSSM [WIP]
TODO LIST:
Подробнее расписать про архитектуру
Разобраться про каждый слой
Можно ли добавлять другие слои (attention, менять структуру, могут ли быть разные головы, …)
Добавить пример реализациия Two-Tower DSSM на PyTorch
Модификации DSSM (Multi-head DSSM?) и доп ссылки его применения (WB, LAMODA, Yandex Market, Yandex Dzen, …)
Интуицию
BoW
Embedding
DSSM
Цель обучения состоит в том, чтобы увеличить вероятность того, что модель предскажет документ, на который пользователь кликнет, исходя из запроса. То есть, если пользователь кликнул на документ, этот документ считается релевантным для данного запроса, и модель должна обучиться предсказывать такие результаты.
Входной слой: 30000 нейронов
Это соответствует размеру хешированного вектора признаков после обработки текста N-граммами.
Первый скрытый слой: 300 нейронов
Второй скрытый слой: 300 нейронов
Выходной слой: 128 нейронов
Это финальное семантическое представление запроса или документа
текстовые данные обрабатываются через bag of words с применением n-грамм (обычно от 1 до 3) и после применяется хеширование
В оригинальной статье используется 3 полносвязных слоя с нелинейными функциями активациями tanh
CODE EXAMPLE
Two tower
Recommender DSSM
DSSM — это нейросеть из двух башен. Каждая башня строит свой эмбеддинг, затем между эмбеддингами считается косинусное расстояние, это число — выход сети. То есть сеть учится оценивать близость объектов в левой и правой башне. Подобные нейросети используются, например, в веб-поиске, чтобы находить релевантные запросу документы. Для задачи поиска в одну из башен подаётся запрос, в другую — документ. Для нашей сети роль запроса играет пользователь, а в качестве документов выступают фильмы.
Башня фильма строит эмбеддинг на основе данных о фильме: это заголовок, описание, жанр, страна, актёры и т. д. Эта часть сети достаточно сильно похожа на поисковую. Однако для зрителя мы хотим использовать его историю. Чтобы это сделать, мы агрегируем эмбеддинги фильмов из истории с затуханием по времени с момента события. Затем поверх суммарного эмбеддинга применяем несколько слоёв сети и в итоге получаем эмбеддинг размера 400.
CODE
https://github.com/insdout/RecSys-Core-Algorithms/blob/main/4. DSSM.ipynb