Exploring Data Splitting Strategies for the Evaluation of Recommendation Models
https://arxiv.org/abs/2007.13237
https://arxiv.org/abs/2007.13237
https://www.facebook.com/100000998741278/posts/4275112192532030/?d=n
На этой неделе мы сделали, чтобы рекомендации вакансий уже на самом первом этапе, при предварительном выборе, применялись RNN DSSM нейросети. Это даёт примерно +400 дополнительных наймов в день, при том, что вакансий, в среднем стало рекомендоваться меньше (да лучше).
Многие рекомендательные системы основаны на вертикальном стеке моделей. На предварительном этапе у них простые эвристики и модели с не очень высоким качеством, зато позволяющие очень быстро сделать из всех элементов «короткий» список (в нашем случае – около 50 тыс. вакансий). Когда-то у нас на первом этапе был эвристический фильтр, который пропускал через себя только вакансии, у которых город совпадал с указанным в резюме соискателя, а для крупных городов – у которых совпадала ещё и профобласть/специализация.
Порой, например, IT-директора жаловались, что в их Железнодорожном для них есть работа максимум эникейщиками. Поэтому мы стали учитывать, что люди могут хотеть переехать, а ещё что часть работы может формально находиться в другом городе, а фактически – в пределах ежедневной транспортной доступности.
Дальше мы увидели жалобы, что нет подходящей работы, хотя находится ведь, например, для швей. Оказалось, что специализаций «швея» несколько, в искусстве и в производстве. Соискатели предпочитают настраивать в резюме «искусство», работодатели – «производство». Таких примеров тысячи, люди переходят из одной профобласти в другую, тенденции в таких переходах изменяются, особенно в связи с коронакризисом, писать исправления для каждого вручную – не вариант. Профобласти и специализации – как и любой ручной классификатор, не идеален, он большой и неоднозначный, и когда люди настраивают его для своих резюме и вакансий, там есть 2 вида ошибок: регулярные (из-за неоднозначности) и случайные (например, когда пользователь отнесся к нему, как к формальности, и выбрал первую попавшуюся специализацию). Чтобы бороться с регулярными, применили PPMI, чтобы со случайными – расширение «короткого» списка с помощью быстрой оценки, сначала сходства резюме и вакансии по тексту (симхеши LSH, т.к. kNN/HNSW оказались слишком медленными), потом по вероятности приглашения (симхеши на обучаемый функции хеширования, MLH).
К тому моменту в эвристическом фильтре особо не осталось эвристик, и он потерял свой единственный плюс - интерпретируемость. А у нас появились нейросети RNN DSSM, хорошо, на основе последовательностей и слов, оценивающие вероятность найма, а также учитывающие числовые и категориальные статические признаки. Метапризнак на RNN DSSM - топ 1 по силе в остальных моделях. Поэтому мы заменили PPMI и MLH на быстрый фильтр на RNN DSSM. Теперь рекомендациям вакансий не страшны ошибки в профобластях и специализациях, потому что они их совсем перестали использовать и учитывая результат – это правильно.
Это важный шаг к тому, чтобы избавиться от линейных моделей и ансамблей решающих деревьев и сделать всё на end-to-end state-of-the-art нейросетях.
Ещё на этой неделе мы применили в рекомендациях по резюме улучшенную, с тонко подобранными гиперпараметрами, RNN DSSM, теперь это даёт ещё около +320 дополнительных наймов в день. В целом, рекомендации резюме в июне дали 1,4 раза больше наймов по базе резюме, чем все виды поиска резюме. По видам поиска, поиск по соответствию, на ML, дал в 1,7 раза больше, чем поиск по дате. Работодатели голосуют за ML, который экономит им время, своим поведением.
Кроме того, на этой неделе мы сделали, чтобы поиск по вакансиям учитывал регион и расстояние от соискателя до интересных ему вакансий в течение 5 мин, обеспечили +20 дополнительных наймов в день. Рекомендации вакансий, конечно, тоже дают в 1,4 раза больше наймов, чем поиск по вакансиям (интересное совпадение), но мы продолжаем развивать и поиск по вакансиям, потому что он даёт бустинг премиальным вакансиям. Для Премиумов и Стандарт+ за счёт прямого бустинга в поиске система не только обеспечивает больше откликов, но и накапливает больше данных о том, какие пользователи на них откликаются и кого из них потом приглашают.
На этой неделе мы сделали, чтобы рекомендации вакансий уже на самом первом этапе, при предварительном выборе, применялись RNN DSSM нейросети. Это даёт примерно +400 дополнительных наймов в день, при том, что вакансий, в среднем стало рекомендоваться меньше (да лучше).
Многие рекомендательные системы основаны на вертикальном стеке моделей. На предварительном этапе у них простые эвристики и модели с не очень высоким качеством, зато позволяющие очень быстро сделать из всех элементов «короткий» список (в нашем случае – около 50 тыс. вакансий). Когда-то у нас на первом этапе был эвристический фильтр, который пропускал через себя только вакансии, у которых город совпадал с указанным в резюме соискателя, а для крупных городов – у которых совпадала ещё и профобласть/специализация.
Порой, например, IT-директора жаловались, что в их Железнодорожном для них есть работа максимум эникейщиками. Поэтому мы стали учитывать, что люди могут хотеть переехать, а ещё что часть работы может формально находиться в другом городе, а фактически – в пределах ежедневной транспортной доступности.
Дальше мы увидели жалобы, что нет подходящей работы, хотя находится ведь, например, для швей. Оказалось, что специализаций «швея» несколько, в искусстве и в производстве. Соискатели предпочитают настраивать в резюме «искусство», работодатели – «производство». Таких примеров тысячи, люди переходят из одной профобласти в другую, тенденции в таких переходах изменяются, особенно в связи с коронакризисом, писать исправления для каждого вручную – не вариант. Профобласти и специализации – как и любой ручной классификатор, не идеален, он большой и неоднозначный, и когда люди настраивают его для своих резюме и вакансий, там есть 2 вида ошибок: регулярные (из-за неоднозначности) и случайные (например, когда пользователь отнесся к нему, как к формальности, и выбрал первую попавшуюся специализацию). Чтобы бороться с регулярными, применили PPMI, чтобы со случайными – расширение «короткого» списка с помощью быстрой оценки, сначала сходства резюме и вакансии по тексту (симхеши LSH, т.к. kNN/HNSW оказались слишком медленными), потом по вероятности приглашения (симхеши на обучаемый функции хеширования, MLH).
К тому моменту в эвристическом фильтре особо не осталось эвристик, и он потерял свой единственный плюс - интерпретируемость. А у нас появились нейросети RNN DSSM, хорошо, на основе последовательностей и слов, оценивающие вероятность найма, а также учитывающие числовые и категориальные статические признаки. Метапризнак на RNN DSSM - топ 1 по силе в остальных моделях. Поэтому мы заменили PPMI и MLH на быстрый фильтр на RNN DSSM. Теперь рекомендациям вакансий не страшны ошибки в профобластях и специализациях, потому что они их совсем перестали использовать и учитывая результат – это правильно.
Это важный шаг к тому, чтобы избавиться от линейных моделей и ансамблей решающих деревьев и сделать всё на end-to-end state-of-the-art нейросетях.
Ещё на этой неделе мы применили в рекомендациях по резюме улучшенную, с тонко подобранными гиперпараметрами, RNN DSSM, теперь это даёт ещё около +320 дополнительных наймов в день. В целом, рекомендации резюме в июне дали 1,4 раза больше наймов по базе резюме, чем все виды поиска резюме. По видам поиска, поиск по соответствию, на ML, дал в 1,7 раза больше, чем поиск по дате. Работодатели голосуют за ML, который экономит им время, своим поведением.
Кроме того, на этой неделе мы сделали, чтобы поиск по вакансиям учитывал регион и расстояние от соискателя до интересных ему вакансий в течение 5 мин, обеспечили +20 дополнительных наймов в день. Рекомендации вакансий, конечно, тоже дают в 1,4 раза больше наймов, чем поиск по вакансиям (интересное совпадение), но мы продолжаем развивать и поиск по вакансиям, потому что он даёт бустинг премиальным вакансиям. Для Премиумов и Стандарт+ за счёт прямого бустинга в поиске система не только обеспечивает больше откликов, но и накапливает больше данных о том, какие пользователи на них откликаются и кого из них потом приглашают.
Facebook
Log in or sign up to view
See posts, photos and more on Facebook.
Эти данные используются и в рекомендациях вакансий, за счёт чего откликов на них из рекомендаций становится совсем немного больше – и они при этом становятся намного более релевантными.
Это что касается этой недели. А на прошлой и позапрошлой у нас был перерыв в продуктовых запусках. Дело не в моём отпуске, а в том, что мы оптимизировали и перезапустили саму систему экспериментов. В поиске мы почти ничего не запускаем без экспериментов, которые показывают, становится ли пользователям лучше. Стандартная продолжительность экспериментов – 2 недели. Система контролируемых экспериментов состоит из системы TDI- и A/B-тестов, а также экспериментальных экземпляров рекомендательных и поисковых систем, которые выдают результаты пользователям, для которых включен эксперимент.
Работа систем на ML связана с постоянным расчётом признаков, при каждом изменении данных о резюме, вакансии, действии пользователя, изменении его местоположения. Многие эксперименты связаны с тем, что мы добавляем или изменяем признаки и метапризнаки. Действий пользователя становится всё больше, а метапризнаки, особенно нейросетевые – всё более ресурсоёмкими, экспериментов – тоже всё больше, например, за Q2 в поиске проверили 67 продуктовых гипотез, в среднем по 3 эксперимента на каждую. Но чтобы быстрее повышать качество выдач и расти, нужно ещё больше экспериментов, и по количеству, и по ресурсоёмкости.
Раньше мы могли себе позволить, для упрощения системы, пересчитывать для каждого экспериментального экземпляра системы и те признаки, которые в нём изменились, и те, которые не изменились, по сравнению с другими экземплярами, экспериментальными и production. Но в последнее время это стало для нас узким местом, ограничивающим количество экспериментов, особенно со сложными (нейросети) и быстрыми (поведение, гео) признаками. Теперь мы сделали, чтобы каждый признак считался только один раз. В результате, сэкономили примерно 40% ресурсоёмкости подсистем, считающих признаки, и сможем улучшать систему быстрее, ну или хотя бы с той же скоростью. В запусках сделали 2-недельный перерыв, но это, даже если брать только последние 3 запуска, того стоило. Пользуйтесь на здоровье!
Ссылка на классическую статью про трансформеры и картинка, пожалуй, самой большой проблемы с ними в production – для привлечения внимания. https://jalammar.github.io/illustrated-transformer/
Это что касается этой недели. А на прошлой и позапрошлой у нас был перерыв в продуктовых запусках. Дело не в моём отпуске, а в том, что мы оптимизировали и перезапустили саму систему экспериментов. В поиске мы почти ничего не запускаем без экспериментов, которые показывают, становится ли пользователям лучше. Стандартная продолжительность экспериментов – 2 недели. Система контролируемых экспериментов состоит из системы TDI- и A/B-тестов, а также экспериментальных экземпляров рекомендательных и поисковых систем, которые выдают результаты пользователям, для которых включен эксперимент.
Работа систем на ML связана с постоянным расчётом признаков, при каждом изменении данных о резюме, вакансии, действии пользователя, изменении его местоположения. Многие эксперименты связаны с тем, что мы добавляем или изменяем признаки и метапризнаки. Действий пользователя становится всё больше, а метапризнаки, особенно нейросетевые – всё более ресурсоёмкими, экспериментов – тоже всё больше, например, за Q2 в поиске проверили 67 продуктовых гипотез, в среднем по 3 эксперимента на каждую. Но чтобы быстрее повышать качество выдач и расти, нужно ещё больше экспериментов, и по количеству, и по ресурсоёмкости.
Раньше мы могли себе позволить, для упрощения системы, пересчитывать для каждого экспериментального экземпляра системы и те признаки, которые в нём изменились, и те, которые не изменились, по сравнению с другими экземплярами, экспериментальными и production. Но в последнее время это стало для нас узким местом, ограничивающим количество экспериментов, особенно со сложными (нейросети) и быстрыми (поведение, гео) признаками. Теперь мы сделали, чтобы каждый признак считался только один раз. В результате, сэкономили примерно 40% ресурсоёмкости подсистем, считающих признаки, и сможем улучшать систему быстрее, ну или хотя бы с той же скоростью. В запусках сделали 2-недельный перерыв, но это, даже если брать только последние 3 запуска, того стоило. Пользуйтесь на здоровье!
Ссылка на классическую статью про трансформеры и картинка, пожалуй, самой большой проблемы с ними в production – для привлечения внимания. https://jalammar.github.io/illustrated-transformer/
jalammar.github.io
The Illustrated Transformer
Discussions:
Hacker News (65 points, 4 comments), Reddit r/MachineLearning (29 points, 3 comments)
Translations: Arabic, Chinese (Simplified) 1, Chinese (Simplified) 2, French 1, French 2, Italian, Japanese, Korean, Persian, Russian, Spanish 1, Spanish…
Hacker News (65 points, 4 comments), Reddit r/MachineLearning (29 points, 3 comments)
Translations: Arabic, Chinese (Simplified) 1, Chinese (Simplified) 2, French 1, French 2, Italian, Japanese, Korean, Persian, Russian, Spanish 1, Spanish…
Forwarded from data.csv (Алексей Смагин)
Wall Street Journal выпустили увлекательное видео о том, как работают алгоритмы тиктока.
Они натренировали несколько десятков ботов с разными интересами, чтобы те смотрели определённые видео, и выяснили, что тиктоку хватает от 40 минут до 2 часов, чтобы построить персональную и удивительно точную ленту рекомендаций, основанную на том, что смотрит пользователь.
У алгоритма есть не очень приятная особенность. Тикток будет показывать вам не те видео, которые вам нравятся, а те видео, которые вы будете смотреть.
В некоторых случаях тикток может стать триггером для мрачных состояний — например, одного бота WJS натренировали для того, чтобы смотреть грустные видео, и вскоре его лента на 93% стала лентой депрессивных роликов.
Смотрите исследование:
https://youtu.be/nfczi2cI6Cs
Они натренировали несколько десятков ботов с разными интересами, чтобы те смотрели определённые видео, и выяснили, что тиктоку хватает от 40 минут до 2 часов, чтобы построить персональную и удивительно точную ленту рекомендаций, основанную на том, что смотрит пользователь.
У алгоритма есть не очень приятная особенность. Тикток будет показывать вам не те видео, которые вам нравятся, а те видео, которые вы будете смотреть.
В некоторых случаях тикток может стать триггером для мрачных состояний — например, одного бота WJS натренировали для того, чтобы смотреть грустные видео, и вскоре его лента на 93% стала лентой депрессивных роликов.
Смотрите исследование:
https://youtu.be/nfczi2cI6Cs