От текста до работы мечты построение рекомендательной системы работы на основе NLP в Talent.com с использованием Amazon SageMaker.

Превращение текста в мечтовую работу создание рекомендательной системы на базе NLP в Talent.com с помощью Amazon SageMaker.

Это сообщение написано совместно Анатолием Хоменко, инженером машинного обучения, и Абденуром Беззухом, главным техническим директором Talent.com.

Основанная в 2011 году, Talent.com является одним из крупнейших источников трудоустройства в мире. Компания объединяет платные вакансии от своих клиентов с общедоступными вакансиями на одной платформе. С более чем 30 миллионами вакансий в более чем 75 странах, Talent.com предлагает работу в различных языках, отраслях и каналах распространения. Результатом является платформа, которая соответствует миллионам соискателей работы с доступными вакансиями.

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

В связи с этой задачей Talent.com и AWS объединились для создания рекомендательной системы по работе с использованием передовых методов обработки естественного языка (NLP) и техник обучения глубоких нейронных сетей с помощью Amazon SageMaker для обеспечения непревзойденного опыта для соискателей работы. В этой статье представлен наш коллективный подход к разработке системы рекомендаций по работе, включая создание признаков, описание архитектуры модели глубокого обучения, оптимизацию гиперпараметров и оценку модели, которая обеспечивает надежность и эффективность нашего решения как для соискателей работы, так и для работодателей. Система разрабатывается командой опытных ученых по прикладному машинному обучению (ML), инженеров по ML и предметных экспертов в сотрудничестве между AWS и Talent.com.

Рекомендательная система увеличила CTR (показатель кликабельности) в онлайн-тестировании на 8,6% по сравнению с предыдущим решением на основе XGBoost, способствуя более успешной связи миллионов пользователей Talent.com с лучшими вакансиями.

Обзор решения

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

Система включает в себя четыре основных компонента:

  • Архитектура модели – Основой этого рекомендательного движка является модель с глубоким обучением Triple Tower Pointwise, включающая кодирование запросов пользователя, кодирование описания вакансий и обработку исторических функций взаимодействия пользователя и вакансий. Выходы трех башен объединяются и передаются через классификационную голову для прогнозирования вероятностей клика на вакансии. Обучая эту модель на поисковых запросах, деталях вакансий и исторических данных взаимодействия пользователя с сервисом Talent.com, система предоставляет персонализированные и очень релевантные рекомендации по вакансиям соискателям работы.
  • Создание признаков – Мы выполняем два набора создания признаков для извлечения ценной информации из входных данных и передачи их в соответствующие башни модели. Два набора – это стандартное создание признаков и обучение векторизованными представлениями предложений SBERT (Sentence-BERT). Мы используем стандартные созданные признаки как ввод для кодировщика взаимодействия, а полученные векторизированные представления SBERT передаем в кодировщик запросов и кодировщик документов.
  • Оптимизация и настройка модели – Мы используем передовые методы обучения для обучения, тестирования и развертывания системы с использованием SageMaker. Это включает распределенное параллельное обучение SageMaker Distributed Data Parallel (DDP), автоматическую настройку модели SageMaker Automatic Model Tuning (AMT), планирование скорости обучения и раннюю остановку для улучшения производительности и скорости обучения модели. Использование DDP позволило ускорить обучение модели примерно в восемь раз.
  • Оценка модели – Мы проводим как оффлайн, так и онлайн-оценку. Мы оцениваем производительность модели по площади под кривой (AUC) и средней средней точности на K (mAP@K) в оффлайн-оценке. Во время онлайн-тестирования А/В проводится оценка улучшения CTR.

В следующих разделах мы подробно рассмотрим эти четыре компонента.

Дизайн архитектуры модели глубокого обучения

Мы разрабатываем модель Triple Tower Deep Pointwise (TTDP), используя трехбашенную архитектуру глубокого обучения и подход моделирования попарных точек. Трехбашенная архитектура представляет собой три параллельных глубоких нейронных сети, каждая из которых обрабатывает набор функций независимо. Этот шаблон дизайна позволяет модели изучать различные представления из разных источников информации. После получения представлений от всех трех башен они объединяются и передаются через голову классификации для получения конечного прогноза (0-1) вероятности клика (настройка моделирования попарных точек).

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

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

  • Энкодер запросов – Энкодер запросов принимает SBERT-вложения, полученные из поискового запроса пользователя. Мы улучшаем вложения с помощью настроенной SBERT-модели. Этот энкодер обрабатывает и понимает намерение пользователя при поиске работы, включая детали и нюансы, улавливаемые нашими предметно-специфичными вложениями.
  • Энкодер документов – Энкодер документов обрабатывает информацию о каждой вакансии. Конкретно, он принимает SBERT-вложения объединенного текста из названия должности и компании. Мы предполагаем, что пользователям будет больше интересно вакансии, которые более соответствуют поисковому запросу. За счет отображения вакансий и поисковых запросов в одном векторном пространстве (определенном SBERT) модель может научиться предсказывать вероятность того, что работник найдет подходящую работу.
  • Энкодер взаимодействия – Энкодер взаимодействия работает с предыдущими взаимодействиями пользователя с вакансиями. Показатели генерируются с помощью стандартного этапа создания признаков, который включает вычисление показателей популярности для должностей и компаний, установление показателей сходства контекста и извлечение параметров взаимодействия из предыдущих взаимодействий пользователя. Этот процесс также обрабатывает распознавание именованных сущностей в названиях должностей и поисковых запросах с помощью предварительно обученной модели распознавания именованных сущностей (NER).

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

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

Инженерия признаков

Мы выполняем два набора процессов инженерии признаков для извлечения ценной информации из исходных данных и подачи ее в соответствующие башни модели: стандартная инженерия признаков и настроенные вложения SBERT.

Стандартная инженерия признаков

Наш процесс подготовки данных начинается со стандартной инженерии признаков. В целом, мы определяем четыре типа признаков:

  • Популярность – Мы вычисляем показатели популярности на уровне отдельных вакансий, отраслевом уровне и уровне компании. Это предоставляет метрику привлекательности конкретной вакансии или компании.
  • Текстовое сходство – Чтобы понять контекстуальные отношения между различными текстовыми элементами, мы вычисляем показатели сходства, включая сходство строк между поисковым запросом и названием вакансии. Это помогает нам оценить соответствие открытой вакансии поиску работника или его истории заявок.
  • Взаимодействие – Кроме того, мы извлекаем признаки взаимодействия из предыдущих взаимодействий пользователя с вакансиями. Один из примеров – это мера сходства между ранее выбранными должностями, за которыми пользователь проявил интерес, и кандидатскими должностями. Эта мера помогает нам понять сходство между предыдущими работами, которые интересовали пользователя, и новыми возможностями работы. Это повышает точность нашего рекомендательного движка.
  • Профиль – Наконец, мы извлекаем информацию о понравившихся работниках из профиля пользователя и сравниваем ее с новыми кандидатскими вакансиями. Это помогает нам определить, соответствует ли кандидатская вакансия интересам пользователя.

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

Настроенные SBERT векторы

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

На следующей схеме показан этап настройки SBERT.

Мы настраиваем SBERT векторы с использованием TripletLoss с косинусной метрикой расстояния, которая обучает текстовые векторы, где косинусова подобие между якорными и положительными текстами выше, чем между якорными и отрицательными текстами. Мы используем запросы пользователей в качестве якорных текстов. Мы объединяем названия должностей и названия работодателей в качестве входных данных для положительных и отрицательных текстов. Положительные тексты выбираются из вакансий, на которые соответствующий пользователь нажал, в то время как отрицательные тексты выбираются из вакансий, на которые пользователь не нажал. Ниже приведена примерная реализация процедуры настройки:

import mathfrom datetime import datetimefrom torch.utils.data import DataLoaderfrom sentence_transformers import (SentenceTransformer, SentencesDataset,                                   LoggingHandler, losses)from sentence_transformers.readers import InputExamplemodel_name = 'all-mpnet-base-v2'train_batch_size = 16num_epochs = 1model_save_path = (f'output/{model_name}_'+                   datetime.now().strftime("%Y-%m-%d_%H-%M-%S"))### Загрузка предобученной модели SBERTmodel = SentenceTransformer(model_name, device="cuda")### Создание набора данных для тренировки из текстов троек,### хранящихся в трех списках (якоря, положительные, отрицательные)train_examples =[]for anchor, positive, negative in zip(achors, positives, negatives):    train_examples.append(InputExample(texts=(anchor, positive, negative)))train_dataset = SentencesDataset(train_examples, model)train_dataloader = DataLoader(train_dataset, shuffle=True,                              batch_size=train_batch_size)### Использование TripletLoss с косинусной метрикой расстояния и отступом 0.5distance_metric=losses.TripletDistanceMetric.COSINEtrain_loss = losses.TripletLoss(model=model,                                distance_metric=distance_metric,                                triplet_margin=0.5)### 10% данных для прогреваwarmup_steps = math.ceil(len(train_dataloader) * num_epochs * 0.1)# Обучение моделиmodel.fit(train_objectives=[(train_dataloader, train_loss)],          epochs=num_epochs,          warmup_steps=warmup_steps,          output_path=model_save_path)

Обучение модели с использованием SageMaker Distributed Data Parallel

Мы используем SageMaker Distributed Data Parallel (SMDDP), функцию платформы SageMaker ML, основанную на PyTorch DDP. Она обеспечивает оптимизированную среду для запуска задач обучения PyTorch DDP на платформе SageMaker. Она разделает большой набор данных на меньшие фрагменты и распределяет их по нескольким графическим процессорам. Модель реплицируется на каждом графическом процессоре. Каждый графический процессор обрабатывает свои данные независимо, а результаты синхронизируются по всем графическим процессорам. DDP заботится о коммуникации градиентов для синхронизации реплик модели и перекрытие их с вычислениями градиента для ускорения обучения. SMDDP использует оптимизированный алгоритм AllReduce для минимизации коммуникации между графическими процессорами, сокращая время синхронизации и улучшая общую скорость обучения. Алгоритм адаптируется к разным сетевым условиям, что делает его очень эффективным как для предприятий, так и для облачных окружений. В архитектуре SMDDP (как показано на следующей схеме), распределенное обучение также масштабируется с использованием кластера из нескольких узлов. Это означает не только несколько графических процессоров в вычислительном экземпляре, но множество экземпляров с несколькими графическими процессорами, что еще больше ускоряет обучение.

Для получения дополнительной информации об этой архитектуре обратитесь к Введение в распределенную библиотеку SageMaker.

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

Вы можете адаптировать свой обучающий скрипт с помощью SMDDP всего лишь тремя строками кода, как показано в следующем блоке кода. Используя в качестве примера PyTorch, вам нужно только импортировать клиентскую библиотеку SMDDP для PyTorch (smdistributed.dataparallel.torch.torch_smddp). Клиент регистрирует smddp в качестве бэкэнда для PyTorch.

import smdistributed.dataparallel.torch.torch_smddpimport torch.distributed as distdist.init_process_group(backend='smddp')

После того, как у вас будет работающий скрипт PyTorch, адаптированный для использования библиотеки распределенного параллелизма данных, вы можете запустить распределенную задачу обучения, используя Python SDK SageMaker.

Оценка производительности модели

При оценке производительности системы рекомендаций важно выбирать метрики, которые тесно соответствуют бизнес-целям и обеспечивают ясное понимание эффективности модели. В нашем случае мы использовали AUC для оценки производительности модели TTDP по предсказанию щелчков по вакансиям и mAP@K для оценки качества ранжирования списка вакансий.

AUC – это площадь под кривой ROC (полученной при обработке данных операционной характеристики приемника). Он представляет вероятность того, что случайно выбранный положительный пример будет ранжирован выше, чем случайно выбранный отрицательный пример. Он варьируется от 0 до 1, где 1 указывает на идеальный классификатор, а 0.5 представляет собой случайное предположение. mAP@K – это метрика, которая часто используется для оценки качества систем информационного поиска, таких как наш движок рекомендаций вакансий. Она измеряет среднюю точность получения топ-K релевантных элементов для данного запроса или пользователя. Она варьируется от 0 до 1, где 1 указывает на оптимальное ранжирование, а 0 указывает на наименьшую возможную точность при заданном значении K. Мы оцениваем AUC, mAP@1 и mAP@3. Все эти метрики позволяют нам оценить способность модели различать положительные и отрицательные классы (AUC) и ее успех в ранжировании наиболее релевантных элементов вверху (mAP@K).

На основе данных офлайн-оценки, модель TTDP превосходит базовую модель – существующую производственную модель на основе XGBoost – на 16,65% по AUC, на 20% по mAP@1 и на 11,82% по mAP@3.

Кроме того, мы провели онлайн-тест A/B для оценки предлагаемой системы и запустили тест на проценте американского населения электронной почты в течение 6 недель. Всего было отправлено около 22 миллионов электронных писем с использованием рекомендации работы новой системы. Повышение количества кликов по сравнению с предыдущей моделью в производстве составило 8,6%. Talent.com постепенно увеличивает процент для распространения новой системы на всю свою аудиторию и каналы.

Заключение

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

При проведении этого проекта была использована техника SBERT для генерации текстовых эмбеддингов. На момент написания статьи, AWS представила Amazon Titan Embeddings как часть своих базовых моделей (FMs), предлагаемых через Amazon Bedrock, который представляет собой полностью управляемый сервис, предоставляющий выбор высокопроизводительных базовых моделей от ведущих компаний в области искусственного интеллекта. Мы призываем читателей изучить представленные в этом блоге методы машинного обучения и использовать возможности, предоставляемые AWS, такие как SMDDP, пользуясь базовыми моделями, предоставляемыми AWS Bedrock, для создания собственных функций поиска.

Ссылки