LinkedIn: LLM-извлечение навыков — 200 правок профилей в секунду и модель на 80% меньше без потери качества
Система в проде обрабатывает ~200 правок профилей в секунду с латентностью до 100 мс на сообщение — на CPU, благодаря дистиллированной модели на 80% меньше исходной. В онлайн A/B-тестах улучшенное извлечение навыков подняло метрики сразу трёх продуктов. Матчинг навыков кандидата и вакансии: +0,87% качественных откликов, +0,40% к их доле, +0,48% кликов «Откликнуться», +0,24% прогнозируемых подтверждённых наймов. Поиск работы: +0,76% выручки PPC, +0,15% сессий, +0,23% вовлечённости. Рекомендации вакансий: +0,46% прогнозируемых подтверждённых наймов и +0,14% откликов. Читать эти цифры нужно с двумя оговорками. Первая — масштаб: на платформе с сотнями миллионов участников доли процента в воронке найма — это значимые абсолютные величины и прямые деньги (PPC-выручка). Вторая — источник: все проценты — внутренние A/B-тесты LinkedIn из инженерного блога, без внешнего аудита; впрочем, детальность разбивки по метрикам и явное указание «прогнозируемых» (а не фактических) наймов говорят в пользу аккуратности отчёта. На наш взгляд, главный инженерный урок кейса — в том, что «LLM в проде» почти никогда не означает «самая большая модель в проде». Реальная формула LinkedIn: большая модель как учитель, дистиллированный ученик в сервинге, CPU-инфраструктура вместо GPU — и весь интеллект конвейера в связке с графом знаний, а не в одном гигантском трансформере. Это архитектура «LLM + знаниевый граф», где таксономия даёт интерпретируемость и управляемость, а нейросеть — понимание контекста; на фоне моды на end-to-end решения такой гибрид выглядит консервативно, но именно он выдерживает 200 событий в секунду на CPU. Второе наше наблюдение — организационное: LinkedIn отчитывается об эффекте ML-конвейера метриками конечных продуктов (отклики, наймы, выручка), а не точностью извлечения. Это дисциплинирует: инфраструктурная команда, чей успех измеряется чужими продуктовыми метриками, вынуждена строить петли обратной связи с продуктами — что LinkedIn и сделала, встроив валидацию навыков в интерфейсы рекрутёров и соискателей.
- Extracting skills from content to fuel the LinkedIn Skills Graph — LinkedIn Engineering Blog (Ji Yan et al.), 2023-12-13
- Building and maintaining the skills taxonomy that powers LinkedIn's Skills Graph (39K навыков, 374K алиасов, KGBert) — LinkedIn Engineering Blog (Macskássy et al.), 2023-03-21
Контекст
LinkedIn последовательно перестраивает рынок труда вокруг навыков, а не должностей и дипломов: ставка компании в том, что «skills-first» подход открывает работодателям более широкие пулы кандидатов, а специалистам — карьерные траектории, которые не считываются из одного лишь названия позиции. Технический фундамент этой стратегии — Skills Graph: таксономия навыков, связанных с участниками, вакансиями, курсами и контентом платформы.
Масштаб таксономии описан в отдельном инженерном посте (март 2023): почти 39 000 навыков, 374 000 алиасов на 26 локалях (разные написания одного навыка вроде «data analysis» и «data analytics») и более 200 000 связей-рёбер между узлами; с февраля 2021 года граф вырос почти на 35%. Навыки образуют полииерархию «линий знания»: например, «Offshore Construction» одновременно наследует и «Construction», и «Oil and Gas». Поддерживают граф таксономисты в паре с ML: модель KGBert (развитие идеи KG-BERT) предсказывает связи между навыками на 20%+ лучше предыдущей системы по F1. К концу 2023 года таксономия перевалила за 41 000 навыков.
Но сам по себе граф — лишь словарь. Ценность возникает, когда каждая сущность платформы — профиль, вакансия, курс, пост — корректно размечена навыками из этого словаря. В декабре 2023 года команда LinkedIn AI (техлид Джи Янь с соавторами) опубликовала разбор боевого конвейера, который извлекает навыки из всего контента платформы с помощью LLM-энкодеров — и укладывается в жёсткие ограничения продакшена: мировой поток правок профилей на CPU-инфраструктуре, без дорогих GPU.
Проблема
Навыки в профилях, вакансиях и постах написаны свободным текстом, на десятках языков и часто неявно: «строил ETL-пайплайны» — это Spark? Airflow? SQL? Наивный поиск по словарю не понимает контекста и тонет в омонимах, а один и тот же навык люди называют сотнями способов — недаром в таксономии 374 тысячи алиасов. При этом связывать текст нужно не с абстрактными тегами, а с конкретными узлами графа из 41 тысячи навыков — включая иерархические выводы: указание «BERT» в профиле кое-что говорит и о «NLP», и о «Deep Learning».
Вторая половина проблемы — продакшен-ограничения. Полноразмерные LLM слишком дороги и медленны для потока правок: профили участников редактируются примерно 200 раз в секунду по всему миру, и каждое сообщение нужно обработать быстрее чем за 100 миллисекунд — на CPU-инфраструктуре стриминга Samza-BEAM, а не на GPU-кластерах. Плюс периодически требуется офлайн-переобработка всего корпуса — сотен миллионов профилей и вакансий, — что задаёт отдельные требования к пропускной способности конвейера.
Наконец, ошибка извлечения — не абстрактная метрика: от разметки навыков зависят рекомендации вакансий, поиск работы, матчинг кандидатов и выдача рекрутёров. Пропущенный навык — это кандидат, не увидевший подходящую вакансию; лишний — нерелевантный отклик и потерянное время рекрутёра. Качество экстракции напрямую конвертируется в воронку найма всей платформы.
Решение
Конвейер извлечения навыков построен из четырёх последовательных стадий. Сначала сегментация: неструктурированный текст (вакансия, профиль, резюме) разбирается на структурные секции — где требования, где обязанности, где описание компании. Затем теггинг навыков двумя путями параллельно: токенный поиск по словарю таксономии и семантический матчинг. За семантику отвечает двухбашенная модель на основе Multilingual BERT: одна башня кодирует предложение, другая — навык таксономии, и текст сопоставляется с навыками в общем векторном пространстве — так «выстраивал конвейеры обработки данных» находит «ETL» без дословного совпадения, на любом из поддерживаемых языков. Третья стадия — расширение: по найденным навыкам конвейер обходит Skills Graph и добавляет связанные узлы-кандидаты из иерархии. Финальная стадия — мультизадачный кросс-доменный скоринг: трансформерный контекстный энкодер текста и энкодер сущностей (общие модули) плюс отдельные «башни» под каждый тип контента — вакансии, профили, ленту — оценивают релевантность каждой пары «контент-навык».
Ключевой ход, сделавший всё это возможным в реальном времени, — knowledge distillation: компактная «ученическая» модель обучена воспроизводить поведение полноразмерной и получилась на 80% меньше без потери качества. Именно она обслуживает поток из ~200 правок профилей в секунду с латентностью до 100 мс на сообщение — на существующей CPU-инфраструктуре Samza-BEAM, в гибридной схеме: нирлайн-обработка правок в реальном времени плюс офлайн-джобы для полной переобработки корпуса при обновлениях моделей или таксономии.
Отдельный контур — обратная связь из продуктов, встроенная прямо в интерфейсы: рекрутёры подтверждают или правят навыки при публикации вакансий, соискатели оценивают релевантность совпавших навыков при отклике, а участники дают фидбек после прохождения LinkedIn Skill Assessments. Эти сигналы возвращаются в обучение, замыкая цикл улучшения экстракции. Извлечённые навыки питают Skills Graph и все продукты поверх него: рекомендации вакансий, поиск работы, матчинг кандидатов. В планах команда называла LLM-генерацию развёрнутых описаний навыков и переход к полностью эмбеддинговым представлениям навыков для семантического матчинга.
Результат
Система в проде обрабатывает ~200 правок профилей в секунду с латентностью до 100 мс на сообщение — на CPU, благодаря дистиллированной модели на 80% меньше исходной. В онлайн A/B-тестах улучшенное извлечение навыков подняло метрики сразу трёх продуктов. Матчинг навыков кандидата и вакансии: +0,87% качественных откликов, +0,40% к их доле, +0,48% кликов «Откликнуться», +0,24% прогнозируемых подтверждённых наймов. Поиск работы: +0,76% выручки PPC, +0,15% сессий, +0,23% вовлечённости. Рекомендации вакансий: +0,46% прогнозируемых подтверждённых наймов и +0,14% откликов.
Читать эти цифры нужно с двумя оговорками. Первая — масштаб: на платформе с сотнями миллионов участников доли процента в воронке найма — это значимые абсолютные величины и прямые деньги (PPC-выручка). Вторая — источник: все проценты — внутренние A/B-тесты LinkedIn из инженерного блога, без внешнего аудита; впрочем, детальность разбивки по метрикам и явное указание «прогнозируемых» (а не фактических) наймов говорят в пользу аккуратности отчёта.
На наш взгляд, главный инженерный урок кейса — в том, что «LLM в проде» почти никогда не означает «самая большая модель в проде». Реальная формула LinkedIn: большая модель как учитель, дистиллированный ученик в сервинге, CPU-инфраструктура вместо GPU — и весь интеллект конвейера в связке с графом знаний, а не в одном гигантском трансформере. Это архитектура «LLM + знаниевый граф», где таксономия даёт интерпретируемость и управляемость, а нейросеть — понимание контекста; на фоне моды на end-to-end решения такой гибрид выглядит консервативно, но именно он выдерживает 200 событий в секунду на CPU.
Второе наше наблюдение — организационное: LinkedIn отчитывается об эффекте ML-конвейера метриками конечных продуктов (отклики, наймы, выручка), а не точностью извлечения. Это дисциплинирует: инфраструктурная команда, чей успех измеряется чужими продуктовыми метриками, вынуждена строить петли обратной связи с продуктами — что LinkedIn и сделала, встроив валидацию навыков в интерфейсы рекрутёров и соискателей.
Уроки для индустрии
- LLM в проде — это почти всегда не «самая большая модель», а дистиллированная: −80% размера без потери качества сделали сервинг возможным на CPU в бюджете 100 мс.
- Гибрид «LLM + знаниевый граф» бьёт end-to-end: таксономия даёт интерпретируемость и иерархические выводы, нейросеть — понимание контекста и мультиязычность.
- Считайте эффект в метриках конечных продуктов: LinkedIn отчитывается не точностью извлечения, а качественными откликами (+0,87%), выручкой PPC (+0,76%) и прогнозируемыми наймами.
- Встраивайте обратную связь в продукт: валидация навыков рекрутёрами, фидбек соискателей и результаты Skill Assessments возвращаются в обучение и замыкают цикл качества.
- Двухбашенная архитектура (текст и таксономия в общем пространстве) масштабируется на новые типы контента и 26 локалей без переобучения всего конвейера.
- На платформах с сотнями миллионов пользователей прирост в доли процента — серьёзные деньги: не отбрасывайте «маленькие» результаты A/B-тестов.
- Единый граф навыков как общий слой данных умножает ценность одного ML-конвейера сразу во многих продуктах: поиск, рекомендации, матчинг, выдача рекрутёров.
Частые вопросы
Как LinkedIn извлекает навыки из профилей и вакансий?
Четырёхстадийным конвейером: сегментация текста → теггинг (словарный + семантический через двухбашенный Multilingual BERT) → расширение по Skills Graph → мультизадачный скоринг пар «контент-навык». Дистиллированная модель (на 80% меньше) обрабатывает ~200 правок профилей в секунду быстрее чем за 100 мс.
Что дало дистиллирование модели LinkedIn?
Сокращение размера модели на 80% без потери качества — это позволило обслуживать поток в реальном времени на существующей CPU-инфраструктуре (Samza-BEAM) вместо дорогого GPU-сервинга, плюс офлайн-переобработку всего корпуса при обновлениях.
Как улучшенное извлечение навыков повлияло на бизнес-метрики LinkedIn?
В онлайн A/B-тестах: +0,87% качественных откликов и +0,24% прогнозируемых наймов в матчинге навыков, +0,76% выручки PPC в поиске работы, +0,46% прогнозируемых наймов в рекомендациях вакансий. На масштабе платформы доли процента — значимый бизнес-эффект.
Что такое Skills Graph и кто его поддерживает?
Таксономия из 41 000+ навыков с 374 000 алиасов на 26 локалях и 200 000+ иерархических связей («Offshore Construction» наследует и «Construction», и «Oil and Gas»). Поддерживают её таксономисты в паре с ML-моделью KGBert, которая предсказывает связи между навыками на 20%+ точнее предыдущей системы.
Откуда система знает, что извлекла навыки правильно?
Из продуктовых петель обратной связи: рекрутёры подтверждают навыки при публикации вакансий, соискатели оценивают релевантность совпадений при отклике, участники дают фидбек после Skill Assessments. Эти сигналы возвращаются в обучение моделей.