Представь: у тебя 1,3 миллиарда пользователей, и каждому надо показать «ту самую» ленту — чтобы и полезно, и не скучно, и не только про котиков коллег из соседнего отдела. А внутри всё держится на пяти разных системах, которые добывают посты каждая по-своему. Одни тащат «что написала твоя сеть», другие — «что сейчас в тренде по региону», третьи — «что похоже на твои интересы». И у каждой — своя инфраструктура, свои костыли и свой характер.
LinkedIn (да, тот самый) решил: хватит зоопарка. За год они разобрали эту конструкцию и заменили пять «добывающих» пайплайнов одним — на базе большой языковой модели (LLM). И утверждают, что теперь лента лучше понимает профессиональный контекст и при этом дешевле в обслуживании.
Почему пять систем — это боль, а не стратегия
Проблема LinkedIn двусторонняя.
С одной стороны, у тебя есть «официальная версия тебя»: должность, навыки, отрасль, резюме. С другой — реальная: на что ты кликаешь, что читаешь, на что реагируешь неделями и месяцами. И эти две версии регулярно спорят между собой.
Плюс лента должна показывать не только то, что постит твоя сеть. Иначе она превращается в бесконечную хронику «рады сообщить» и «счастлив присоединиться». Нужно аккуратно подмешивать контент шире — но так, чтобы не выглядело, будто тебя перепутали с другим человеком.
Как они склеили пять «добывалок» в одну
Раньше посты попадали в ленту из разных источников: хронология твоих контактов, тренды по географии, фильтрация по интересам, отраслевые подборки и другие системы, которые работали через «векторные слепки» текста (в упрощении — модель превращает пост и твой интерес в набор чисел и сравнивает, что ближе).
Работало? Да. Но обслуживать это — как пять разных кухонь в одной квартире. И в каждой кто-то оставил сковородку на плите.
Новая идея: вместо пяти отдельных «добытчиков» — один LLM-подход. Модель должна богаче понимать и посты, и контекст человека, чтобы находить подходящее более персонально.
Только LLM любит текст. А данные LinkedIn — это не только текст. А данные LinkedIn — это не только текст, но и куча структурированных сигналов: профиль, опыт, навыки, действия, просмотры, реакции.
Поэтому LinkedIn собрал библиотеку промптов — шаблонов, которые превращают данные в аккуратные текстовые последовательности. Для постов учитывали формат, автора, метаданные статьи, текст поста и показатели вовлечённости.
Для человека — профиль, навыки, опыт, образование и «хронологический список постов, с которыми он взаимодействовал».
Ирония в том, что даже цифры пришлось «переучивать».
LLM и числа: «12 345 просмотров» — это просто слово
Во время тестов LinkedIn поймал классическую ловушку: если в промпт написать views:12345, модель воспринимает это примерно как ещё один фрагмент текста. Не как важный сигнал популярности, а как строку вроде «артикул:12345».
Решение — максимально инженерное и немного смешное: они превратили числа в «корзины по процентилям». То есть не «12 345», а условно «просмотры: топ-5%» (и пометили это специальными токенами, чтобы модель точно заметила). После этого система стала ощутимо лучше понимать «вес» поста по охвату.
Как если бы ты вместо «зарплата 157 000» говорил «зарплата — очень даже ничего». Люди, кстати, так и делают.
Ранжирование: лента читает твою карьеру как сериал
Добыть подходящие посты — полдела. Дальше их нужно отсортировать. И LinkedIn говорит, что старые ранжирующие модели часто ошибались в главном: они оценивали посты по одному, как будто твои интересы — это набор случайных кликов.
А на деле интересы в профессиональной жизни идут «сюжетными арками». Сегодня ты менеджер и читаешь про найм, через полгода — про метрики, потом — про переговоры и выгорание.
Поэтому LinkedIn сделал свой Generative Recommender (GR) — модель, которая смотрит на историю взаимодействий как на последовательность. Она прогоняет больше тысячи твоих прошлых действий, чтобы уловить долгосрочные паттерны и «временные ритмы» интересов.
Отдельно LinkedIn подчёркивает: в таких моделях используются профессиональные сигналы и поведение, но не демография, и систему регулярно проверяют на «равное обращение» с разными группами пользователей.
GPU дорогие. LinkedIn придумал как не разориться
Когда ты приносишь LLM в продакшн на миллиард пользователей, реальность быстро напоминает: нейросети питаются GPU, а GPU питаются твоим бюджетом.
LinkedIn пришлось серьёзно перелопатить инфраструктуру, чтобы не утонуть в стоимости вычислений:
Они разделили задачи: всё, что хорошо делается на CPU (подготовка признаков и данных), вынесли отдельно от того, что реально требует GPU (инференс модели). Идея простая: пусть каждый «тип железа» делает своё, а не ждёт друг друга в очереди, как в МФЦ в понедельник.
Ещё они переписали загрузчики данных на C++, потому что Python с мультипроцессингом добавлял накладные расходы. Плюс сделали свою версию оптимизации внимания (это та часть, где модель «смотрит» на контекст) и распараллелили сохранение промежуточных состояний обучения, чтобы лучше использовать память GPU.
Смысл в одном: на масштабе LinkedIn недостаточно «включить LLM». Нужно научиться кормить её данными и железом так, чтобы компания не начала продавать офисные кресла ради видеокарт.
Что тут важно (и немного отрезвляет)
Эта история не про то, что «LLM решает проблему ленты». Скорее наоборот: LLM заставляет решить новые проблемы, о которых ты раньше мог не думать.
Например, как объяснить модели, что 12 345 — это не слово. Как аккуратно хранить «контекст человека» в промпте. Как не сжечь бюджет на GPU. И как научить ранжирование видеть не набор кликов, а длинную последовательность — твою профессиональную историю.
В итоге лента становится похожа не на пять разрозненных радиостанций, которые дерутся за внимание, а на один нормальный пульт, где наконец-то подписали кнопки. И да — иногда, чтобы навести порядок, нужно не добавлять шестую систему, а набраться смелости и выкинуть пять старых.