ZipRecruiter демонстрирует свою мощную архитектуру сопоставления ML, подходящую для большинства потребностей в двунаправленных рекомендациях.

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

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

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

Требования к модели в свете 4 основных проблем

Создание хороших совпадений требует преодоления серьезных проблем, связанных с характером нашего рынка и структурой данных.

1. Оптимизация для обработки больших данных в реальном времени

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

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

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

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

2. Поддержание производительности с чрезвычайно разнообразными и динамичными данными

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

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

Чтобы лучше понять это, давайте посмотрим на атрибут «должность». Очевидно, что «название должности»играет чрезвычайно важную роль в представлении сущности должности. Однако большинство должностей связаны лишь с частью объявлений о вакансиях и, таким образом, актуальны лишь для небольшой группы соискателей. Нетривиально правильно представить десятки тысяч уникальных названий должностей в процессе обучения, когда вероятность появления каждого в отдельности в данных очень мала, что может привести к снижению производительности модели.

На приведенной выше диаграмме вакансии «Data Scientist» составляют примерно 0,1% всех доступных вакансий. Это означает, что сбор достаточного количества данных и обучение модели таким образом, чтобы все значения атрибутов были представлены в достаточной степени, становится очень сложным.

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

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

3. Многогранная сложность требует контекстно-зависимого моделирования

Природа данных связана с представлениями субъектов на рынке. И соискатель, и вакансия в основном основаны на неструктурированном тексте и однозначно выражают нюансы их автора, которые часто демонстрируют личные утверждения или вкус. Большие затраты на обработку и моделирование возникают из-за следующих характеристик сложности данных:

  • Неструктурированные — объекты в основном представляют собой неструктурированные текстовые данные, что означает, что данные предназначены для людей, а не для машин. Зрительное восприятие играет важную роль, что приводит к отсутствию порядка и общей структуры, которые можно было бы использовать.
  • Нестандартный формат для повторяющихся параметров. Кроме того, объекты не следуют определенным соглашениям или правилам проектирования. Например, формат «уровня навыков» может включать числа, визуальную шкалу или просто слово.
  • Креативные названия. Работодатели часто позволяют себе творческий подход и придумывают неподходящие языковые фразы, сленг и даже прилагательные в превосходной степени в составе полного названия должности. Всем нам знакомы такие названия, как «Rockstar Java Developer» и «Ninja Sales Officer».
  • Жаргон, специфичный для предметной области. В некоторых профессиях используется уникальный жаргон, который требует знаний в предметной области, поэтому не всегда возможно извлечь присущий ему смысл. Например, аббревиатуры в профессии медсестры включают — LPN, LVN, RN, NP и многие другие.
  • Контекстно-зависимая терминология. Точно так же некоторые термины могут получить свое истинное значение только в контексте своего объекта. Например, «MD» может представлять как «врача», так и «управляющего директора».
  • Различные источники. Наши данные поступают из нескольких источников, а именно от соискателей, работодателей и самого рынка. Соискатели в основном характеризуются информацией, полученной из их резюме, такой как история занятости, образование, навыки и многое другое. Вакансии, с другой стороны, характеризуются названием и различными атрибутами, извлеченными из описания работы. К ним относятся желаемые навыки, уровень образования, преимущества, местоположение и то, является ли это работой лично или удаленно. Имейте в виду, что многие из отображаемых вакансий собираются из Интернета, и в результате у нас нет доступа к исходным метаданным работодателя, относящимся к вакансии. Что касается рынка, у нас есть все данные о взаимодействии, сгенерированные на нашей платформе, которые отражают взаимодействие между соискателями и работодателями (например, поиски, показы, клики, заявки, сигналы заинтересованности, сигналы о найме…)

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

4. Симметричное уравновешивание конкурирующих целей заинтересованных сторон

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

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

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

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

Обучение подобию и балансировка с предварительно обученными кодировщиками

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

Предварительно обученные кодировщики для обучения подобия одного и того же объекта

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

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

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

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

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

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

Кодировщик заданий

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

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

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

Возобновить кодировщик

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

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

Учимся делать выводы по сущностям — архитектура моделирования

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

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

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

Архитектура модели

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

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

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

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

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

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

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

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

Функция потери

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

Где i представляет собой i-ю пару (соискатель, работа), указывающую приложение, 𝒱 представляет набор выбранных вакансий, sᵢ - данный соискатель, 𝝉 представляет параметр температуры, а точка представляет скалярное умножение между векторами вложения.

Суммируя по всем соискателям в пакете, получаем

где S_batch представляет набор соискателей в пакете.

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

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

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

Обычно построение пар контрастных потерь основано на выборке сущностей партии. Во-первых, мы выбираем n положительных пар, то есть соискатель и вакансия, которые связаны реальным приложением. Затем мы можем выбрать случайные пары из этих n пар и использовать их в качестве отрицательных пар. Таким образом, мы можем объединить эти пары простым и эффективным способом для использования в модели. Таким образом, у нас есть N положительных пар и (N² — N) случайных отрицательных пар:

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

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

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

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

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

Результаты и будущее развитие

После создания первой версии всей системы моделирования мы A/B протестировали ее на нескольких рекомендательных приложениях, с которыми сталкиваются соискатели. Результаты показали значительное улучшение производительности вычислений, общее повышение вовлеченности соискателей на 12% и повышение удовлетворенности более чем на 18%.

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

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

Если вы заинтересованы в работе над подобными решениями, посетите нашу страницу вакансий, чтобы увидеть открытые вакансии.

Об авторе:

Надав Баркай (Nadav Barkai) — менеджер по науке и инженерии данных в команде рекомендаций ZipRecruiter. Используя свой обширный опыт в физике и разработке сложных алгоритмов, он возглавляет смешанную команду специалистов по данным и инженеров по созданию моделей сопоставления и рекомендаций, лежащих в основе интеллектуального рынка труда ZipRecruiter.