![](https://habrastorage.org/webt/gy/-r/vz/gy-rvzv0m2qnqh5uyx_ll7cizsq.jpeg)
Интервью о роботе Вере.
Передаю слово автору.
Робота Веру придумали чуть больше года назад, но за такое короткое время она успела сделать довольно много. Первый в мире робот-рекрутер экономит 60% рабочего времени для специалистов по подбору персонала в 300 компаниях не только в России, но и за рубежом. Всего за год Вера успела подобрать компаниям больше 95 000 кандидатов, провести 2 300 видеоинтервью и сделать больше 1 000 000 звонков, а в октябре 2017 года еще и выиграла всемирный конкурс стартапов HR Tech World.
![](https://habrastorage.org/webt/wm/j-/an/wmj-anmxltwdq1fpjku2wk0hzag.png)
Работы уйма — Вера ищет подходящие резюме соискателей среди десятков миллионов записей на работных сайтах, одновременно делает десятки тысяч звонков соискателям, чтобы предложить им вакансии, проводит видеоинтервью, распознает эмоции кандидатов и на вопрос “А что по деньгам-то?” ответит не хуже, чем на стандартный “Какую заработную плату предлагают?”.
Веб-сторона Веры
Управление Верой происходит в личном кабинете на сайте robotvera.com, а быстро запустить робота-рекрутера и обеспечить бесперебойную работу помогли решения от Microsoft. Первым, что разворачивали в облаке Azure, был веб-сервер на Django. Благодаря тому, что на маркетплейсе есть готовое решение с очень простой и понятной документацией, все настроили очень быстро. В общей сложности от начала работ до момента, когда развернули сайт, прошло меньше часа.
Это со временем мы перешли на стандартные инстансы с Ubuntu, но на первых этапах возможность развернуть сайт как облачный сервис, потратив всего несколько минут, для нас была очень полезной. Еще очень кстати оказалось наличие в маркетплейсе инстансов уже с Django. Например, тут есть сборка виртуальной машины от Bitnami, и если ей воспользоваться, то уже не надо устанавливать Django и сервер — все уже есть. В результате надо просто создать и запустить свое приложение-сайт.
Конечно, нельзя не учитывать, что у Bitnami есть свои особенности, например, дополнительный файрволл — из-за него порт надо открывать не только на Azure, но и на самой виртуальной машине в Bitnami. Но это тоже не сложно и не занимает много времени, тем более при помощи маркетплейса Azure мы его уже изрядно сэкономили.
Обучаем Веру
Веб-сервер, естественно, не самая сложная задача, которую мы решаем, работая с нашим продуктом. Поскольку Вера берет на себя задачу обзванивать кандидатов и беседовать с ними, она должна разговаривать, как человек.
Мы хотим, чтобы наш робот-рекрутер не просто задавал вопросы работодателя по скрипту и механически фиксировал ответы, но и мог рассказать кандидату ту информацию, которая его интересует, справляясь с любой сложностью формулировок. Эта задача лежит в области машинного обучения. Запрограммировать хардкорно все варианты возможных вопросов от соискателей оказалось практически невозможно, потому что вариаций тысячи. Стандартный вопрос “Какая зарплата?” может звучать в десятке вариантов, например, “Что по деньгам?”, “Какой оклад?” или “Сколько денег дают?”.
Все варианты предусмотреть невозможно, и чтобы находить наиболее близкий по смыслу ответ на вопрос кандидата, мы решили использовать библиотеку word2vec. Если вдруг кто-то забыл или не знает, это технология, которая обрабатывает огромные массивы текстовой информации и вычисляет векторное представление слов. Последнее основано на близости в контексте: слова, которые встречаются в тексте рядом с одинаковыми словами, определяются как имеющие схожий смысл. В векторном представлении они будут иметь близкие координаты векторов-слов.
Давайте посмотрим, как обучается модель на паре предложений, в данном случае это слова, касающиеся доходов.
![](https://habrastorage.org/webt/vw/6q/0a/vw6q0aegnhbtkk3pmsz0gxem9fk.png)
В коде выше мы инициализируем массив с предложениями, потом создаем модель word2vec и передаем в нее наш массив в качестве аргумента. Получаем все вектора из модели в переменную Х. Далее создаем двухмерную модель PCA (метод главных компонент) с помощью библиотеки scikit-learn, вызываем метод fit_transform и передаем в него наши вектора.
После этого наши слова можно отобразить в векторном пространстве, используя pyplot:
![](https://habrastorage.org/webt/ka/g8/0l/kag80l5edc946gwkss8sywvtun8.png)
Видно, что на этом этапе слова пока расположены вразброс, и явной корреляции смысла и их расположения нет. Это происходит потому, что модель еще совсем не обучена, поскольку мы передали в нее только пару предложений.
Чтобы робот стал полноценно общаться, мы загрузили в модель 13 миллиардов слов (это 25 000 книг и телесценариев, или 150 Гб текстов) и описание 100 000 вакансий. Это огромный массив данных, но только после этого модель начинает достаточно хорошо считать расстояние между предложениями и позволяет корректно подбирать ответы на вопросы пользователей.
Для расчета расстояния используем метод wmdistance(). Если брать наш же пример с парой предложений, которые используем в качестве аргументов, в данном случае модель должна рассчитать между этими предложениями расстояние. На листинге ниже видно, как это работает: вопрос кандидата “сколько платите?” имеет меньшую дистанцию по отношению к слову “зарплата”, чем, например, к слову “адрес”.
![](https://habrastorage.org/webt/xh/ua/_2/xhua_2he4okq6gjmxjkhfdvvf9s.png)
Учитывая, какой объем информации мы загрузили, чтобы робот мог общаться полноценно и расстояния между предложениями рассчитывались корректно, наша модель весит более 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% совпадения вопросов и ответов мы на тот момент не добились. Но учитывая, что на разработку и обучение мы потратили всего один день и одну ночь, а бот при этом еще и умудрялся шутить, будем считать, что цели мы добились.
А тут вы найдете интервью с Алексеем Костаревым, одним из создателей Робота Веры.
Об авторе
![](https://habrastorage.org/webt/_m/b4/6k/_mb46kccgqgga3vt5otdqxm1y7u.png)
Комментарии (8)
Areso
16.02.2018 10:47В который уже раз…
Как заменить HR-a роботом? причем здесь ряд комментаторов, и я в том числе, решили посмотреть, что из себя представляет столь продвигаемая технология и пришли к неудовл. выводу InstaHeat
HR-робот обзванивает тысячи людей одновременно: рассказываем, какInstaHeat
16.02.2018 12:12Про качественные характеристики я и сам признаю. Робот пока что просто не может учитывать всех условий, звонит в неудобное время и так далее. Т.е. качество робота ниже хорошего специалиста.
Только вот хороших HR мало. А конкурировать с плохими робот может, что говорит о количественных показателей.
К тому же, как мне видится, такой робот должен — и скорее всего так используется — для подбора массовых вакансий типа оператора, грузчика и т.д. Там, знаете-ли, и кандидаты умом не блещут. Когда встречается чудо-робот и чудо-кандидат мы получаемподобрать компаниям больше 95 000 кандидатов
Это реально удобно. Удобнее, чем выяснять по 30 раз на дню, алкаш ли твой потенциальный кандидат или нетlybin
16.02.2018 14:22Верно, это одна из первых автоматизаций в HR, массовые вакансии, без Веры надо обзвонить в ручную 95 000 спросить удобно ли, задать 95 000 раз одни и те же вопросы.
Про удобно ли говорить есть настройка, Вера может спросить в начале диалога, зависит от рекрутера, который настраивает логику анкетирования.
Mox
16.02.2018 13:17Всему свое применение. Хороших спецов хантят лично и никакие роботы общаться тут не помогут. А вот когда надо закрыть 300 позиций на заправки какой-нибудь Газпромнефти — отличное решение.
enjoykaz
16.02.2018 11:48-2Вроде все большие дяди, а желтые клик-бейт заголовки пишем, как будто студентка плохого журфака из Пензы.
sahsAGU Автор
16.02.2018 12:21Иногда говорят «Каждый понимает все в меру своей испорченности». Никого не имею ввиду :), но такого подтекста уж точно не было.
Небольшой подтекст есть о науке Анатомии. Она изучает строение организмов, внутренние органы и все такое. А мы пишем, что в статье ничего об этом не будет, будут только технические внутренности.
StViga
16.02.2018 12:46+1Отличное решение. Уверен, что такой робот во многом лучше 70% всех HR. Плюс нет человеческого фактора, который может быть на подобии того, что кто-то может нравится/не нравиться внешне девочке HR, например.
InstaHeat
Вроде бы подобные достижения должны радовать. Но известно, что роботы сейчас не намного умнее человека в общении, да и могут далеко не все. И с таким подтекстом этот робот — не показатель ли качества работы «живых» HR? Не буду обобщать, но мне часто встречались довольно слабенькие рекрутеры. На фоне них Вера куда выгоднее. Плюс «вау» эффект