Transformer в задаче рекомендаций |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2020-04-30 14:58 Все статьи, о которых пойдет речь, объединяет одно очень приятное свойство — наличие кода на github. Далее будет много терминов, касающихся модели, предложенной в статье Attention is All You Need (https://arxiv.org/abs/1706.03762). Объяснять их в этом лонгриде на мой взгляд избыточно, поэтому если какой-то термин вам непонятен — имеет смысл почитать статью от Google Brain. SASRec Self-Attentive Sequential Recommendation https://arxiv.org/abs/1808.09781 Архитектура здесь такая: Работает так:
Думаю, всем очевидно, что нереально гонять такую жирную нейронку в real-time чтобы отдавать рекомендации. Но прелесть этой архитектуры в том, что это и не требуется. Для генерации рекомендаций в проде мы будем использовать сохраненные эмбеддинги пользователей и item'ов и нам нужно будет лишь найти item'ы, наиболее близкие к эмбеддингу пользователя по dot-product. Эмбеддингом пользователя здесь будет являться опять-таки последний вектор с выхода модели для этого пользователя. Следующие две работы рассматривают SASRec как бейзлайн. Bert4Rec https://arxiv.org/abs/1904.06690 Архитектура модели очень похожа на предыдущую: Здесь v_i — эмбеддинг item'а, p_i — обучаемый эмбеддинг позиции (как и в SASRec). Отличия от SASRec:
Несмотря на то, что предсказания генерируются более сложно, мы все еще можем свести это к задаче поиска ближайших (в терминах dot-product) item'ов пользователю. В качестве эмбеддингов пользователей мы будем использовать это: В качестве эмбеддингов item'ов — собственно эмбеддинги item'ов. Если сделать в точности так — мы проигнорируем b_o (bias'ы item'ов). В каких-то случаях это может нас устроить (например если мы хотим чуть меньше рекомендовать популярные item'ы). Если же мы хотим делать инференс в точности как в обучении — нужно увеличить размерности эмбеддингов на 1, докинуть в эмбеддинг пользователя единичку, а в эмбеддинг item'а bias этого item'а. Тогда к скалярному произведению прибавится в точности bias нужного item'а. SSE-PT Sequential Recommendation Via Personalized Transformer https://openreview.net/forum?id=HkeuD34KPH Архитектура модели: Отличия от SASRec:
Главная проблема этой архитектуры в том, что мы не можем использовать knn-индексы для генерации рекомендаций в production. В двух предыдущих работах мы сохраняли эмбеддинги пользователей (на самом деле выходы Transformer'а), эмбеддинги item'ов, и все, что нам оставалось сделать для определения релевантности — их перемножить. Именно поэтому мы могли использовать knn-индексы, которые умеют очень быстро по вектору пользователя найти top-k item'ов, вектора которых дают максимальное скалярное произведение с этим пользователем (реализация одного из таких индексов: https://github.com/nmslib/nmslib). Здесь же перед скалярным произведением нам нужно что-то конкатенировать — и это все ломает. Но в целом скалярное произведение — быстрая операция и если item'ов в системе не так много или если ограничения на время ответа не такие жесткие, архитектура вполне годна к использованию в production. Делать inference Transformer'а на каждый запрос рекомендаций здесь не нужно. Источник: m.vk.com Комментарии: |
|