Как стать автором
Обновить

Комментарии 9

Правильно я понимаю, что в вашем пайплайне вообще не осталось Python? Только С с соответствующими файлами конфигурации?

Python в явном виде остался только в процессе сбора датасетов, но в обучении и валидации он практически не используется, да. На питоне написан только код запуска процессов обучения и валидации в Airflow.
Спасибо за наводку на Vowpal, давно искал что-то подобное. Python люблю, но во время inference модели и настройки процесса автоматического переобучения по обновленному датасету он только мешается.
В таком случае vowpal-wabbit действительно будет хорошим выбором :)
Артём, расскажи пожалуйста как вы заполняете полку рекомендаций в продакшене при помощи этой модели?
Наши модели vowpal-wabbit используются не совсем для заполнения полки рекомендаций, а для их ранжирования. То есть другой моделью отбираются несколько товаров, которые могут показываться в полке, а vowpal-wabbit скорит каждый из этих товаров и апишка отбирает топ N из них для отображения пользователю.

Desmond_Price спасибо за статью — очень полезно. Про VW мало пишут


  1. Можете поподробней рассказать, как готовите валидационный датасет — разделяете по времени, т.е. берёте данные за последнюю неделю в валидацию, а данные предпоследней недели добавляете в обучающую выборку?
    Если так, то нет соблазна как-то использовать данные из валидации?


  2. VW позволяет дообучать модели новыми данными. Вы написали что обучаете 5-6 часов модели, если использовать дообучение — не будет ли это быстрее?
    В таком варианте, можно и раз в сутки дообучать


  3. Смотрели ли вы в сторону Contextual Bandits и его вариаций?
    В wiki этому уделено очень много внимания, но сложно понять как на практике это правильно использовать.


Здравствуйте! Рад, что было полезно) Отвечая на ваши вопросы:

1. Выборка для обучения и валидации делится по пользователям. Мы агрегируем логи за нужный период и группируем по каждому пользователю, а затем начинаем процесс генерации вектора (подсчет g-, u-, s-, p- частей, основываясь на всех предыдущих сессиях и текущих показах/кликах). Прямо перед началом этого процесса мы и делим выборку случайным образом в отношении 4:1, проставляя каждому пользователю тэг train/test, с которым его вектора позже записываются в таблицу.
Изначально делили действительно просто по времени, оставляя последнюю неделю для валидации, но решили, что по пользователям делить будет наиболее честно и не давать модели возможность для переобучения.

2. Думали в эту сторону, но это было бы сложнее поддерживать, как минимум из-за learning_rate: непонятно, как его подбирать при расчете на то, что данные будут бесконечными. При до-обучении модели в реалтайме, нужно следить, чтобы не проседал лосс, и в случае чего быть готовым подменить ее моделькой с другим конфигом, но дообученной на тех же датасетах. А еще если данные будут плохие (например, что-то поменяется в логах или в методе их сборки), то тоже придется модель срочно менять на другую.
В общем, решили, что пока слишком много мороки и реализовали более простой вариант :)

3. Да, vowpal может работать как контекстуальный бандит, на вики действительно большой раздел посвящен описанию разных режимов его работы. У нас проводился эксперимент по обучению бандита, но пока до внедрения таких моделей в продакшен не доходили руки, к сожалению. Надеемся, что в 2021 реализуем эту инициативу, кролик имеет довольно мощный набор инструментов для RL :)

Спасибо!
По последним новостям и апдейтам кролика, кажется что он почти полностью фокусируется на cb and rl
жду от вас статей про CB — очень интересно!

Зарегистрируйтесь на Хабре, чтобы оставить комментарий