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 раза больше наймов, чем поиск по вакансиям (интересное совпадение), но мы продолжаем развивать и поиск по вакансиям, потому что он даёт бустинг премиальным вакансиям. Для Премиумов и Стандарт+ за счёт прямого бустинга в поиске система не только обеспечивает больше откликов, но и накапливает больше данных о том, какие пользователи на них откликаются и кого из них потом приглашают.
Post #347
146