Про перетаскивание методов из NLP в RecSys и обратно: часть 1 Я как-то один или два раза уже писал здесь, что NLP и RecSys как области применения ML часто оказывались полезными друг-другу, в этом посте раскрою чуть подробнее эту историю. Началось это еще с матричных разложений - в рекомендательных системах еще в доисторическую эпоху во времена Netflix Prize начали обучать для юзеров и рекомендуемых объектов числовые векторы, скалярное произведение которых хорошо приближает оценку объекта пользователем. Метод использовался и в текстах - в частности в виде LSA (Latent Semantic Analysis), NMF (Non-negative Matrix Factorization), а зачем и в вероятностной постановке - PLSA (Probabilistic LSA), который позже, упакованный в байесовский вывод, выродился в LDA (Latent Dirichlet Allocation). Что общего было у рекомендаций и текстов, что привело к использованию похожего семейства методов? Матрица user-item и матрица term-document обе были разреженные и в некотором смысле с пропусками: как фильм человек мог не видеть, но это не значит, что он нравится или не нравится, так и слово могло не войти в документ просто потому, что сформулирована мысль была немного иначе (или просто использован синоним). Дальше, когда в NLP появились эмбеддинги из word2vec, сразу начали появляться разные способы приспособить word2vec к рекомендациям. Почему так? Word2vec оказался тоже матричным разложением, но уже не матрицы term-document, а матрицы word-context. В рекомендациях это тоже имело смысл: какой товар вы ожидаете увидеть в известном контексте, тот товар и логично "докинуть" в рекомендации. В экспериментах выяснялось ужасное: каким-нибудь doc2vec порой удавалось побить в рекомендациях переранжирование кандидатов каким-нибудь градиентным бустингом. Плюсом для применения word embedding'ов в рекомендациях было то, что последовательность просмотров и покупок товаров, даже если ее развернуть из набора id-шников в набор параметров просмотренных товаров все равно была очень простым и искусственным языком. Те методы, которые работали даже на естественном языке, на логах рекомендаций обучались достаточно быстро. Кстати, в матричных разложениях применительно к рекомендациям была еще одна фишка - baseline predictors, когда прогноз оценки от пользователя фильму считался не просто по скалярному произведению их векторов, а с добавлением базовой оценки пользователя ("строгость пользователя"), фильма ("качество фильма в целом") и некого "среднего" ("к какой оценке в среднем склоняются пользователи"). Если погружаться в детали, это интуитивное объяснение бейзлайн предикторов немного искаженное - т.к. к "среднему" все равно еще будет большая добавка, то это уже не "среднее", а просто поправка на среднюю температуру по больнице, но не будем тут еще больше занудствовать. Так вот в какой-то момент была еще одна вариация word2vec для текстов - GloVe, и там эту идею притащили еще и в тексты.