Когда-то еще в Geektrust мы работали с нашим механизмом рекомендаций, рекомендуя крутых разработчиков нашим клиентам на основе их профиля, многолетнего опыта и технологий. Он был построен на Go и Elasticsearch. Что мы сделали, так это согласовали профили пользователей с требованиями компаний. Кроме того, мы выбрали лучших разработчиков, которые очень похожи на то, что искала компания. В то время мы сделали небольшие шаги в мир машинного обучения, проводя сопоставление схожести.

Но у нас была проблема. Мы полагались на технологии, которые использовали наши пользователи, а люди всегда заходили на Java. Не все, но как минимум 60–70% из них сделали это. Это привело к тому, что QA Engineers с некоторым опытом Java были рекомендованы компании, которая искала серьезного разработчика Java Backend. Это не понравилось покупателю, и мы решили ужесточить наши рекомендации. Нам нужно было определить, какие разработчики регистрируются на нашем сайте. И здесь нам на помощь пришло машинное обучение.

Данные обучения

Мы выбрали обучение с учителем, что означает классификацию данных на основе ранее помеченных данных обучения.

В рамках этого первое, что мы сделали, - это перечислили функции, которые мы хотели выделить в разработчике, чтобы классифицировать его / ее как разработчика Backend, Frontend или Fullstack. Помня об этом, мы разработали набор функций, таких как подсчет серверных технологий у пользователя и сканирование их резюме, чтобы понять, над какими технологиями они работали.

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

В приведенном выше файле столбцы указывают функции, а последний столбец указывает элемент, который мы хотим прогнозировать. В обучающих данных существующие данные были очищены и помечены определенной ролью. Это можно сгенерировать с помощью скриптов, но без стопроцентной точности. Нам пришлось изменить наши обучающие данные, чтобы пометить столбец, который необходимо предсказать, - роль. Шесть из нас обработали около 7000 строк данных и при необходимости проверили, подтвердили и изменили данные.

Обучение и тестирование

Как только обучающие данные были готовы, нам нужно было проверить точность этой модели. Мы пробовали разные классификаторы, такие как K ближайших соседей (KNN), деревья решений и машины опорных векторов (SVM). Нам также пришлось вернуться и настроить тренировочные данные, добавив больше функций, удалив некоторые из них. Все эти решения были основаны на точности, которую мы получили на этих различных классификаторах. SVM дал нам лучшую точность, и мы пошли дальше, используя линейное ядро. Реализация была на Python. Имея хорошо зарекомендовавшие себя библиотеки, такие как scikit-learn, NumPy, SciPy и pandas, мы почти не сомневались в выборе Python в качестве основного языка для ML.

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

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

Однако это не гарантирует, что предсказанная роль всегда верна. Иногда мы получаем прогнозируемую роль с вероятностью всего 20–30%. В таких случаях мы вручную переопределяем прогноз в соответствии с тем, что, по нашему мнению, является ролью пользователя. Мы также периодически обновляем существующие обучающие данные, что помогает улучшить прогнозы на будущее.

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

[Об авторе - Дхануш является соучредителем Geektrust и заботится обо всем, что связано с технологиями.

Geektrust создан для того, чтобы технологи могли найти замечательные вакансии.]