Pull to refresh
37
Karma
0
Rating
Александр Сидоров @alextheraven

User

Как мы делали свой поиск в Ozon: эволюция архитектуры от SQL до O2

Большое спасибо за отличную статью и комментарии! А вы пробовали делать смысловой поиск, не только по термам, но и по похожести эмбеддингов документов и запроса/профиля соискателя? И ещё вопрос, есть ли у вас аннотационные признаки, если да, то как устроен их пайплайн и храните ли вы их прямо в индексе?

Успешное изобретение для Умного поиска hh.ru

Есть сборник видео и статей, как у нас всё устроено в поиске и рекомендациях https://vk.com/@713179846-search-and-recomendations-tech-and-processes . Там материалы немного устарели, про RNN DSSM и двустороннее поведение на эмбеддингах ещё нет, но думаю, что в этом году появится.

Успешное изобретение для Умного поиска hh.ru

К сожалению, по Вашему сообщению непонятно, почему так. Напишите, пожалуйста, в техподдержку, через меню "помощь".

Успешное изобретение для Умного поиска hh.ru

В отличие от рекомендаций, в поиске этот алгоритм не применяется, а вакансии выбираются по тексту, потом ранжируются по типу и дате публикации, потом немного доранжируются моделями по вероятности отклика и последующего приглашения. Сейчас hh.ru - это классифайд, у него модель монетизации такая, что все места на выдаче проданы. Несмотря на это, по запросу "M&A" в Москве 48 вакансий из топ 50 релевантны. На выдаче резюме такой монетизации нет, там 50 из топ-50.

Успешное изобретение для Умного поиска hh.ru

А если серьёзно, то я правильно понял, что запатентован примерно тот же метод, что был описан в посте несколько лет назад?

Запатентовали важную часть, которая позволила 1) перестать использовать большую часть эвристик в эвристическом фильтре, причём работает лучше, чем он 2) справиться не с 490 000 вакансий (кстати, сейчас уже в 2 раза больше), а с примерно 10 000 000 резюме (да, рекомендации работают только по резюме, а только с последними обновлёнными).

Успешное изобретение для Умного поиска hh.ru

Я так понимаю использование дискет 5,25'' в вашей системе не предусмотрено?

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

А в чем непосредственно новизна Вашего метода, описание похоже типовую систему ранжирования на перцептивных хешах?

На мой взгляд, в обучаемом снижении размерности и в применении комбинации обучаемой функции хеширования и индексов, чтобы обеспечить очень быстрое применение фильтрующей (не ранжирующей) модели к большому количеству документов.

Как мы улучшили Умный поиск на hh.ru в 2019 году: инфографика

Смотрите, большинство соискателей пользуется поиском по вакансиям по-другому. Чуть больше, чем в половине случаев нажимают кнопку «найти» с пустым запросом, ещё примерно в четверти – с запросом из одного слова, ещё в 14% – с двумя, 6% – с тремя. Когда запрос не пустой, в большинстве случаев вводят 1-3 буквы, затем выбирают слово из саджеста. Безо всяких сложных фильтров, языка поисковых запросов и т.д. Этот сценарий простой, наиболее высокочастотный, но сделать, чтобы он хорошо работал, сложно, и можно только с помощью ML, на нём и концентрируемся. Чаще только сценарий «через поиск не ищу, жду, чтобы подходящие вакансии и приглашения сами пришли».

Сложные условия, которые трудно подобрать и хочется сохранить, актуальны для части из оставшихся нескольких единиц процентов. Большинство соискателей ищут работу меньше недели, и не готовы изучать сложные интерфейсы. Управление сохранёнными запросами — прорабатывали, пока не получилось сделать такой UX, чтобы большинство не путалось, особенно на мобильном. Т.к. это всё же единицы процентов, от идеи совсем не отказались, кое-что в этой области планируем, приоритет не очень высокий. Пока не сделали, можете устроить себе эту функциональность через автопоиск, или за 5 мин. через панель закладок и папки избранного в браузере, сохраняя URL'ы нужных Вам запросов.

Про проблему «беспокоят местные компании», кажется, первое обращение. К сожалению, ничего такого не планируем — существующая форма резюме и логика доступа уже довольно сложная. Отказывайте на приглашения, добавляйте компании в блеклист.

Говорить пользователям «да, скоро будет» гораздо приятнее, чем «нет, ничего такого не планируем». У каждого пользователя есть свои пожелания. Но даже если бы мы имели неограниченные ресурсы, не имели требований, чтобы компания была очень прибыльной, и могли бы реализовать их все, продуктом стало бы невозможно пользоваться из-за сложности логики и интерфейса. Приходится выбирать.

Как мы улучшили Умный поиск на hh.ru в 2019 году: инфографика

Привет, я Саша Сидоров, продакт-менеджер поисковых и рекомендательных систем в HH. Я знаю об этой проблеме примерно с марта 2017. Она влияет на качество выдачи примерно для 0,3% соискателей часто и 2% — изредка. Её ещё не починили в том числе из-за моих решений всё это время проверять другие гипотезы, которые могут улучшить выдачу у бОльшего количества пользователей, от 30% и больше. О части из них, которые принесли пользу и решили выкатить на всех в 2019, мы написали выше. Количество ресурсов всегда ограничено, сделать всё не получится, моя работа – вместе с командой выбирать, что делать, чтобы разработка окупалась и приносила наибольшую пользу.

К сожалению, эту проблему вряд ли получится решить так просто, как Вы пишете. У многих вакансий в разных регионах разный уровень зарплаты, иногда разный (по форме) заголовок и описание. Иногда, наоборот, заголовки разные, описание одинаковое. Какую вакансию выбирать – тоже нельзя решить простым правилом. Нужно учитывать зарплату, часовой пояс, продвижение вакансии работодателем (да, мы коммерческая компания), скорость разбора откликов на вакансию, физическое расстояние и возможно, что-то ещё, с помощью ML. Это довольно дорого делать и скорее всего не получится статистически значимо измерить за разумное время, сделали ли лучше, потому изменение будет влияет на не очень большое количество пользователей.

Поэтому думаем над тем, чтобы улучшить выдачу не только по удалённой работе, но для некоторых других пользователей, которые сейчас могут встречаться с не подходящими для них дублями внутри городов, чтобы изменения коснулись хотя бы 10% соискателей и пользу от них можно было измерить. Но это ещё несколько сложнее и дороже. Приоритет не очень большой, дойдём ли до проверки этой гипотезы в этом году и покажут ли эксперименты улучшение, чтобы включить на всех – сейчас не могу сказать.

Как докатить ML в прод: шесть граблей, на которые мы наступили

Возможно, но тогда мог бы выйти бодрый спор об определениях, наподобие «как это машина автоматически подбирает функции, решающие правила, когда pipeline для этого настраивает и запускает человек? линейная регрессия в Excel это уже ML или ещё нет? а в scikit-learn? а если сначала коэффициенты подобрали ML'ем, а потом подправили, ввели бустинги и fixlist'ы вручную — было машинное обучение, а какое стало?»

Как докатить ML в прод: шесть граблей, на которые мы наступили

На самом деле, нейросеть одинаково не находит между этими терминами связи, значения прогноза на уровне сотых — в пределах случайной погрешности.

Умный поиск: как искусственный интеллект hh.ru подбирает вакансии к резюме

Модели могут учитывать данные о разных, по порядку, местах работы по-разному. Т.к. существенная часть моделей – не линейные, то в каждом конкретном случае вклад конкретных значений определённых признаков в итоговый score может быть разным, поэтому я не могу сказать о весе.

Модели выучивают закономерности из откликов пользователей. Например, если кто-то с резюме, похожим на ваше, много откликался на вакансии с rust и kdb/q, модели могут это выучить. Также могут выучить, что те, кто знает php, часто откликаются на вакансии, в которых есть js. Для частых запросов+резюме+вакансий есть много примеров, поэтому закономерности могут быть более качественными, чем для редких, для которых в train может быть всего несколько отдельных откликов, иногда странных.

Умный поиск: как искусственный интеллект hh.ru подбирает вакансии к резюме

Можно обновить резюме и настроить для него видимость «не видно никому», тогда звонков от работодателей не будет. Но мы подумаем, как понимать, что пользователь ищет работу, при этом специально не обновляет резюме, спасибо за пример.

Умный поиск: как искусственный интеллект hh.ru подбирает вакансии к резюме

В этом проекте Hadoop используется как хранилище, выгрузка — скриптами на Hive SQL, дальше действительно, почти обычный стек ML на Python на отдельных серверах. Spark и MLlib на кластере Hadoop используется в других проектах HH.

Умный поиск: как искусственный интеллект hh.ru подбирает вакансии к резюме

Посмотрел, для рекомендательной системы достаточно сложный случай — стаж PHP-разработчиком примерно вдвое больше, похожих резюме (и откликов, по которым учится система) не очень много, само резюме полностью по-английски. Как сделать рекомендации лучше для редких резюме — в целом, понятно и запланировали, а пока можно создать автопоиск по «golang разработчик» — зайти на hh.ru/search/vacancy?text=golang+%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA и щёлкнуть «получать на почту новые вакансии по этому запросу».

Умный поиск: как искусственный интеллект hh.ru подбирает вакансии к резюме

Про применение collaborative filtering не могу рассказывать, к сожалению, NDA. Spark на кластере Hadoop тоже используем.

Умный поиск: как искусственный интеллект hh.ru подбирает вакансии к резюме

Это легко проверить, hh.ru/search/vacancy?text=java&area=1 и hh.ru/search/vacancy?text=javascript&area=1. Для меня эти выдачи очень сильно отличаются, и это правильно. Для кого-то они могут не отличаться, и это тоже может быть правильным.

Результаты зависят от конкретных резюме, вакансий и запросов. Модели выучивают закономерности, с какими резюме по таким запросам на какие вакансии соискатели обычно откликаются, и кого после этого работодатели приглашают. Поэтому, к примеру, если у кандидата резюме full stack developer’а со знанием Java, то по запросу «JavaScript» ему/ей, в первую очередь, поиск покажет вакансии full stack developer’ов с Java, примерно такие же, как по запросу «Java».

Умный поиск: как искусственный интеллект hh.ru подбирает вакансии к резюме

В рекомендациях на сайте, рассылках и пуш-уведомлениях — давно не показываем, а в поиске продолжаем показывать, т.к. эксперимент с этим в поиске показал ухудшение.

Умный поиск: как искусственный интеллект hh.ru подбирает вакансии к резюме

Эти признаки считает Lucene, мы используем их в моделях, хотя пришлось довольно много в нём править, чтобы научить получать их по отдельности.

Умный поиск: как искусственный интеллект hh.ru подбирает вакансии к резюме

Большое спасибо за комментарий, но главное не можем или не можем, а в каком порядке делать. Порядок определяется тем, какую пользу принесёт и сколько стоит сделать.

Без указания региона до города ищет меньше 5% пользователей, успешность поиска по таким запросам – обычная. Даже если кардинально улучшить качество поиска для такой доли пользователей, общая польза будет не очень большой.

С пустым запросом ищет около половины пользователей, ещё несколько десятков процентов — с неоднозначными однословными запросами и без заданных условий, т.е. большинство. Поиск на ML обеспечивает улучшение качества выдачи для таких запросов.

Задача про склейку дублей есть, оценка трудоёмкости у неё довольно высокая, т.к. качественная склейка нечетких дублей, с измерением этого качества и механизмом исключений, выбор самого подходящего для пользователя дубля, корректировка количества найденных резюме, с учётом того, что часть из них дубли — не такая уж элементарная вещь. Доберёмся в порядке приоритета.

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Works in
Date of birth
Registered
Activity