Получи случайную криптовалюту за регистрацию!

Ходят слухи что у тик тока хорошие рекомендации контента. Про | Время Валеры

Ходят слухи что у тик тока хорошие рекомендации контента.

Прочитал статью от пацанов из tik-tok Monolith: Real Time Recommendation System WithCollisionless Embedding Table. Как мы знаем, прочитать статью - задача посильная не каждому директору

Решают две проблемы: Первая - разреженность признаков, то есть огромное число комбинацией(интеракции пользователи/видео) и соотвественно относительная редкость появления каждой конкретной комбинации.Вторая - динамичность среды, быстрая смена интересов, трендов и паттернов

Первая проблема часто приводит к коллизиями, так как комбинации путем хитрых манипуляций представляется в виде эмбедингов, а эмбединги хранятся в таблице конечного размера, соответсвенно будут коллизии и не все комбинации получат уникальные эмбединги. Следовательно надо создать collisionless hash table, которая поддерживала бы удаление неактуальных фичей.

Для того чтобы избежать коллизий используется Сuckoo Hashmap - сложность O(1) для просмотров/удалений и средняя амортизация до O(1) на вставку. Для того чтобы снизить размер таблицы - исключают редко встречаемые сущности, кроме того очищают от устаревших сущностей (что такое часто и что такое старый - настраиваемые параметры)

Обучение модели идет в две стадии.
1. Batch - всего 1 проход!
2. Online - ловят на лету, обновляют модель, обновленную модель переодически пушат в лайв

Вот пожалуй и все. Из интересного следующие тонкости:

Online Joiner - признаки и конечный результат действий - несихнронны. Пользователь может купить товар через несколько дней после его показа. Если фичи держать в памяти и ждать результата, никакого железа не хватит, поэтому большую часть грузим на диск, что то держим в памяти, когда приходит результат - смотрим и в диск и в память, затем джойним.

Negative Sampling - очень большой дисбаланс классов приводит к тому что нет смысла брать все негативные семплы. Но если брать не все - пойдет смещение в модели, чтобы это избежать, используют поправку из Nonuniform Negative Sampling and Log Odds Correction with Rare Events Data (хотя можно и проще калибровать, так мне кажется)

Модель тяжелая, весит террабайты, перекидывать всю модель после пары онлайн обновлений - довольно непрактично. К счастью, как мы помним, очень много разреженных признаков, соответсвенно обновлять нужно в каждый отдельный момент времени лишь небольшие их количество, а не всю модель. Те признаки, которые разреженными не являются - часто обновлять не надо, там дрифт происходит медленно

Результаты

Хэши проверяли
офлайн, хэш без коллизий победил везде
Data sparsity caused by collisionless embedding table will
not lead to model overfitting
Обновление модели
раз в час лучше, чем раз в 5 часов и даже чуть лучше, чем раз в 30 минут (правда не стат значимо) и всегда лучше чем без обновления, на горизонте в 50 часов
Онлайн обновление побило Batch training на 14-18% AUC в аб тесте (странная метрика для аб)

Хорошая инженерная статья и видимо именно поэтому рекомендаци Тик Тока хороши, не поленились и сделали онлайн обновления

Обучали DeepFM - DeepFM: A Factorization-Machine based Neural Network for CTR Prediction

P.S. лично для меня пару Фейсбук - Инстаграм побить тяжело. Но не по контенту, а по рекламе, сложно оценить сколько классных вещей я купил, увидев рекламу на этих площадках