Главная » Хабрахабр » Что внутри у HR-а? (Анатомии не будет)

Что внутри у HR-а? (Анатомии не будет)

Привет, Хабр! Недавно мы делились с вами интервью с представителем робота Веры, первого в мире робота-рекрутера, разработанного в России командой Stafory. И вот подъехали технические подробности проекта, ведь мы попросили ребят рассказать, как устроена Вера.

Интервью о роботе Вере.

Передаю слово автору.

Робота Веру придумали чуть больше года назад, но за такое короткое время она успела сделать довольно много. Первый в мире робот-рекрутер экономит 60% рабочего времени для специалистов по подбору персонала в 300 компаниях не только в России, но и за рубежом. Всего за год Вера успела подобрать компаниям больше 95 000 кандидатов, провести 2 300 видеоинтервью и сделать больше 1 000 000 звонков, а в октябре 2017 года еще и выиграла всемирный конкурс стартапов HR Tech World.

Работы уйма — Вера ищет подходящие резюме соискателей среди десятков миллионов записей на работных сайтах, одновременно делает десятки тысяч звонков соискателям, чтобы предложить им вакансии, проводит видеоинтервью, распознает эмоции кандидатов и на вопрос “А что по деньгам-то?” ответит не хуже, чем на стандартный “Какую заработную плату предлагают?”.

Веб-сторона Веры

Управление Верой происходит в личном кабинете на сайте robotvera.com, а быстро запустить робота-рекрутера и обеспечить бесперебойную работу помогли решения от Microsoft. Первым, что разворачивали в облаке Azure, был веб-сервер на Django. Благодаря тому, что на маркетплейсе есть готовое решение с очень простой и понятной документацией, все настроили очень быстро. В общей сложности от начала работ до момента, когда развернули сайт, прошло меньше часа.

Это со временем мы перешли на стандартные инстансы с Ubuntu, но на первых этапах возможность развернуть сайт как облачный сервис, потратив всего несколько минут, для нас была очень полезной. Еще очень кстати оказалось наличие в маркетплейсе инстансов уже с Django. Например, тут есть сборка виртуальной машины от Bitnami, и если ей воспользоваться, то уже не надо устанавливать Django и сервер — все уже есть. В результате надо просто создать и запустить свое приложение-сайт.

Конечно, нельзя не учитывать, что у Bitnami есть свои особенности, например, дополнительный файрволл — из-за него порт надо открывать не только на Azure, но и на самой виртуальной машине в Bitnami. Но это тоже не сложно и не занимает много времени, тем более при помощи маркетплейса Azure мы его уже изрядно сэкономили.

Обучаем Веру

Веб-сервер, естественно, не самая сложная задача, которую мы решаем, работая с нашим продуктом. Поскольку Вера берет на себя задачу обзванивать кандидатов и беседовать с ними, она должна разговаривать, как человек.

Мы хотим, чтобы наш робот-рекрутер не просто задавал вопросы работодателя по скрипту и механически фиксировал ответы, но и мог рассказать кандидату ту информацию, которая его интересует, справляясь с любой сложностью формулировок. Эта задача лежит в области машинного обучения. Запрограммировать хардкорно все варианты возможных вопросов от соискателей оказалось практически невозможно, потому что вариаций тысячи. Стандартный вопрос “Какая зарплата?” может звучать в десятке вариантов, например, “Что по деньгам?”, “Какой оклад?” или “Сколько денег дают?”.

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

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

В коде выше мы инициализируем массив с предложениями, потом создаем модель word2vec и передаем в нее наш массив в качестве аргумента. Получаем все вектора из модели в переменную Х. Далее создаем двухмерную модель PCA (метод главных компонент) с помощью библиотеки scikit-learn, вызываем метод fit_transform и передаем в него наши вектора.

После этого наши слова можно отобразить в векторном пространстве, используя pyplot:

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

Чтобы робот стал полноценно общаться, мы загрузили в модель 13 миллиардов слов (это 25 000 книг и телесценариев, или 150 Гб текстов) и описание 100 000 вакансий. Это огромный массив данных, но только после этого модель начинает достаточно хорошо считать расстояние между предложениями и позволяет корректно подбирать ответы на вопросы пользователей.

Для расчета расстояния используем метод wmdistance(). Если брать наш же пример с парой предложений, которые используем в качестве аргументов, в данном случае модель должна рассчитать между этими предложениями расстояние. На листинге ниже видно, как это работает: вопрос кандидата “сколько платите?” имеет меньшую дистанцию по отношению к слову “зарплата”, чем, например, к слову “адрес”.

Учитывая, какой объем информации мы загрузили, чтобы робот мог общаться полноценно и расстояния между предложениями рассчитывались корректно, наша модель весит более 19 ГБ в оперативной памяти, плюс корпус для обучения — еще 41 ГБ. Опять же, используя Azure, мы легко подобрали подходящую машину. Развертка ее заняла несколько минут, после этого мы на данном инстансе сделали API для использования этой модели в своем продукте.

Обучаем Веру за 1 ночь

А вот еще одна история, когда Azure помог быстро подобрать нужный инстанс. Когда мы проводили pre-ICO, нам нужно было за ночь обучить чат-бота отвечать на вопросы про криптовалюту и блокчейн. Диалоги мы брали с этого форума. Полноценных диалогов там не так много, но все же достаточно, чтобы машина начала говорить что-то более-менее связное.

Например, у нас получились вот такие диалоги:

— Is mining illegal?
— That depends per view.

— Chinese government banned all of ICOs.
— Please don't panic, just calm for your mother.

— What is your favorite trading exchange?
— I use coinbase.

Бота мы учили, используя модель Sequence-to-Sequence библиотеки TensorFlow, которая переводит текст с французского на английский. Для обучения была необходима машина с GPU, поэтому мы использовали инстанс Azure N-Series. Все обучение проходило в облаке. Конечно, из примеров видно, что бот делал ошибки, и 100% совпадения вопросов и ответов мы на тот момент не добились. Но учитывая, что на разработку и обучение мы потратили всего один день и одну ночь, а бот при этом еще и умудрялся шутить, будем считать, что цели мы добились.

А тут вы найдете интервью с Алексеем Костаревым, одним из создателей Робота Веры.

Об авторе

Владимир Свешников — в прошлом основатель компании по оформлению персонала из стран СНГ. Затем партнеры создали робота Веру. Осенью 2017 года Робот Вера стал первым российским стартапом, выигравшим всемирный конкурс питчей на конференции HR Tech World 2017 в Амстердаме.


x

Ещё Hi-Tech Интересное!

Как мы электронику производили: с нуля, в России, за свои. Часть 1

Пайка на коленке. Бывает и так UPD:это вводная статья, в которой нет технической информации.Материала много, а опыта написания статьей на эту тему почти нет.Мне хотелось бы узнать у потенциальной аудитории, каким вопросам по заявленной теме стоит уделить внимание.Если «лирику» вам ...

Статический анализ PHP-кода на примере PHPStan, Phan и Psalm

У нас очень много PHP-кода (миллионы строк) и наверняка даже сохранились строки, написанные 12 лет назад. Компания Badoo существует уже более 12 лет. Мы выкладываем код два раза в день, и каждая выкладка содержит примерно 10—20 задач. У нас есть ...