[Поисковые технологии, Машинное обучение, Развитие стартапа, Карьера в IT-индустрии, Поисковая оптимизация] Как мы запустили агрегатор удаленных вакансий и зачем в нем ML

Автор Сообщение
news_bot ®

Стаж: 6 лет 9 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
29-Май-2021 23:31


В один прекрасный день в конце 2020 года мы решили сделать еще один агрегатор удаленных вакансий, начав с исключительно IT-позиций. Логично спросить: зачем? Мол, на рынке их уже достаточно. Ответ на этот вопрос звучит очень просто: мы понимали, как улучшить текущие решения как минимум по пяти параметрам.
  • Количество (агрегировать больше всех в мире);
  • Реальная удаленка (а не позиции в стиле "remote until COVID-19");
  • Актуальность (часто на схожих сайтах можно найти большое количество неактуальных вакансий);
  • Хороший поиск (по нашему мнению поиск на текущих сайтах с удаленными вакансиями находится на уровне 2005 года);
  • Фильтр по гражданству.
О последнем параметре я и хочу сегодня рассказать.Прежде, чем вы начнете читать. Сегодня мы запустились с Bergamot на ProductHunt. И, если у вас вдруг возникло желание поддержать наш продукт, будет круто. Ищите нас тут. ПроблемаИногда компании устанавливают ограничения для граждан некоторых стран (например, компания готова нанимать только ребят с гражданством США / или конкретным типом визы ЕС). Как правило, на страницах с описанием вакансий нет отдельного поля где выводились бы подобные ограничения. И поиска/фильтра, соответственно, тоже нет. Поэтому соискателю приходится внимательно читать текст каждой вакансии, чтобы понять, есть ли вообще смысл откликаться на эту позицию.Мы знали, как решить эту проблему, а именно — показывать пользователю только те вакансии, на которые он реально может претендовать, учитывая его гражданство.АнализСначала мы думали решить эту задачу простыми алгоритмическими методами. Базовая идея заключалась в следующем:Шаг №1Ищем определенные ключевые слова в тексте, например: «only», «remote in», «authorized to work in» и так далее.Шаг №2Ищем рядом с ключевыми словами локацию. Как правило, это слово, которое начинается с заглавной буквы. Если такое слово-локация находится, то оно и является ограничением.Окей, если в вакансии написано «USA only», то такая логика работает идеально. Но если капнуть глубже, становится понятно, что ограничения могут быть обозначены самыми разными, например:
  • This role is remote and you can be based anywhere across the UK
  • Living in Europe is a must
  • This opportunity is only open to candidates within Canada at this time
  • Location: Argentina (any part of the country it’s great for us!)
  • и еще сотни других описаний.
Очевидно, алгоритмами задачу не решить — и мы попробовали использовать силу ML-a.ЗадачаНа всякий случай ещё раз сформулирую задачу. На входе — текст с описанием вакансии, в котором, как правило, содержится описание компании, стек технологий, требования, условия, бенефиты и так далее. На выходе у нас должны быть параметры:restriction: 0 (no) / 1 (yes)если restriction = 1, то тогда необходимо выделять еще и страну, по которой есть ограничениеРешениеСтруктура решенияИтак: на входе у нас текст, в котором обычно содержится куча всего. Задача была несколько сложнее, чем просто написать обычный классификатор. Сначала нужно было найти, что именно классифицировать.Так как мы пытаемся решить проблему с локациями, для начала нам нужно найти их в тексте. Потом выделить все предложения, в которых содержались локации и уже для них написать классификатор.Нахождение локацийСначала мы также хотели решить задачу «в лоб»: найти где-нибудь список всех стран и городов и просто искать их вхождение в тексте. Но опять же, задача оказалась не такой очевидной.Во-первых, ограничения касались не только стран и столиц мира, а также небольших городов и штатов. Например «Can work full time in Eugene, OR / Hammond, IN». А сделать список локаций всех уровней уже сложнее.Во-вторых, написания локаций в вакансиях часто отличались от стандартного (например «100% Remote in LATAM»).Поэтому для выделения локаций мы приняли решение использовать NER. Пробовали разные готовые варианты: В итоге выбор пал на spaCy, потому что из готовых и бесплатных вариантов spaCy EntityRecognizer показал наилучший результат.Итого: нам удалось выделить в тексте локации.Разделение на предложенияДля разделения на предложения, где есть локации, мы тоже использовали spaCy.На выходе мы получили список предложений из текста, где содержатся локации. Вот примеры таких предложений:
  • The position is remote so the only thing is they have to be in the US and be able to work Eastern or Central time.
  • This job is located out of our Chicago office, but remote, US-based applicants are still encouraged to apply.
  • This is a remote role, but we're looking for candidates based in Montreal, Canada.
КлассификаторЭти предложения и должна была разметить модель. Важно — у нас не было возможности сделать датасет с десятками тысяч таких предложений (на это нужно очень много времени), поэтому при подборе модели нам надо было учесть эти ограничения.Решили попробовать несколько моделей, среди которых как более простые CNN и LSTM, так и более современные transformers. Последние предсказуемо оказались лучше, обучение которых сводилось по сути к fine-tunning — это нам точно подходило, ведь датасет, как я уже сказал выше, был невелик.Среди transformers наилучший результат показала архитектура RoBERTa (roberta-base) с показателем точности 94% для нашего датасета.Нормализация локацийНа основе классификатора и NER-a для каждой вакансии мы получили вот такие дополнительные поля:restriction: 1 (yes); location: LondonRestriction отдавал классификатор. А вот Location выдавал NER. Из-за того что в поле Location могли быть разные написания городов и стран, мы еще сделали дополнительную нормализацию через Google API. Остановились на том, чтобы сделать ограничения по странам.То есть на выходе получалось:restriction: 1 (yes); location: United KingdomИтогВ итоге мы теперь умеем это делать и кандидаты могут фильтровать неподходящие для них вакансии. Mission accomplished (вроде бы! вы можете сами потестить Bergamot и написать, что думаете).
===========
Источник:
habr.com
===========

Похожие новости: Теги для поиска: #_poiskovye_tehnologii (Поисковые технологии), #_mashinnoe_obuchenie (Машинное обучение), #_razvitie_startapa (Развитие стартапа), #_karera_v_itindustrii (Карьера в IT-индустрии), #_poiskovaja_optimizatsija (Поисковая оптимизация), #_machine_learning, #_agregator (агрегатор), #_rabota (работа), #_poisk_raboty (поиск работы), #_udalennaja_rabota (удаленная работа), #_poisk_raboty_v_it (поиск работы в it), #_poisk_raboty_v_ssha (поиск работы в сша), #_poiskovye_tehnologii (
Поисковые технологии
)
, #_mashinnoe_obuchenie (
Машинное обучение
)
, #_razvitie_startapa (
Развитие стартапа
)
, #_karera_v_itindustrii (
Карьера в IT-индустрии
)
, #_poiskovaja_optimizatsija (
Поисковая оптимизация
)
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 22-Ноя 14:19
Часовой пояс: UTC + 5