Как LinkedIn использует языковые модели, чтобы решить, что показать вам в ленте

cybercobra

Administrator
Команда форума
Регистрация
6 Авг 2025
Сообщения
792
Реакции
1
Баллы
777
Веб-сайт
cybercobra.ru
Разбор научной статьи Large Scale Retrieval for the LinkedIn Feed using Causal Language Models от команды LinkedIn Engineering.

Статья рассказывает о том, как LinkedIn переделал свою систему рекомендаций, встроив в неё большую языковую модель — ту самую технологию, на которой работают ChatGPT и аналоги. Результат: лента стала точнее угадывать, что вам интересно.

Сначала — базовые понятия​


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

Рекомендательная система
Это алгоритм, который решает, что показать конкретному пользователю. YouTube решает, какое видео предложить следующим. Spotify — какую песню. LinkedIn — какой пост поставить в ленту. Задача одна: из миллионов вариантов выбрать те несколько десятков, которые человеку скорее всего понравятся.

Кандидато-генерация (Candidate Generation / Retrieval)
Рекомендация работает в два этапа. Первый — быстро отобрать несколько тысяч «кандидатов» из всей базы (это и есть кандидато-генерация). Второй — из этих тысяч умным ранжированием выбрать финальные 20–50 штук для показа. В этой статье речь именно о первом этапе — быстром отборе.

Эмбеддинг (Embedding)
Представьте, что каждый пост в LinkedIn — это точка в многомерном пространстве. Не в привычных трёх измерениях, а, например, в 512. Координаты этой точки и называются эмбеддингом — числовым «портретом» поста. Пользователь тоже описывается такой точкой. Задача системы — сделать так, чтобы точка пользователя и точки интересных ему постов оказывались рядом в этом пространстве, а неинтересные посты — далеко.

LLM — Large Language Model (Большая языковая модель)
Нейросеть, обученная на огромных объёмах текста. Она умеет понимать смысл предложений, связывать понятия, улавливать контекст. ChatGPT, Claude, LLaMA — всё это LLM. LinkedIn взял одну из таких моделей и «перепрофилировал» её под задачу рекомендаций.

Файнтюн (Fine-tuning)
Дообучение уже готовой модели под конкретную задачу. Представьте человека, который закончил университет (предобучение на огромных данных) и теперь проходит курсы повышения квалификации под конкретную работу (файнтюн). Это дешевле и быстрее, чем учить с нуля.

Косинусное сходство (Cosine Similarity)
Способ измерить, насколько две точки «смотрят в одну сторону» в многомерном пространстве. Если эмбеддинги пользователя и поста очень похожи — косинусное сходство близко к 1. Не похожи — близко к 0 или отрицательное. По этому числу система и решает, предложить ли пост.

Классический подход: две башни​


До этой статьи стандартом в рекомендательных системах была двухбашенная архитектура (Two-Tower Model). Представьте два независимых «вычислительных блока»:

  • Башня пользователя — берёт всё, что известно о человеке (интересы, история просмотров, должность), и превращает это в эмбеддинг
  • Башня контента — берёт данные о посте (текст, автор, тема) и делает его эмбеддинг

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

Минус классического подхода: каждая башня не «видит» другую в процессе обучения. Они работают изолированно, а значит теряют часть контекста.

Что придумал LinkedIn: одна LLM вместо двух башен​


LinkedIn взял ту же идею — строить эмбеддинги пользователей и постов, сближать их — но заменил обе башни на одну общую LLM. Конкретно использовалась модель LLaMA-3 3B (3 миллиарда параметров — средний размер для современных языковых моделей).

Это даёт ключевое преимущество: LLM понимает текст. Она видит реальное содержание поста, а не просто набор чисел. И она же понимает текстовое описание пользователя.

Как посты и пользователи подаются на вход​


Вместо числовых идентификаторов (типа «пост номер 4 872 193») LinkedIn описывает каждый объект текстом:

Для поста: текст публикации + метаданные + счётчики популярности («этот пост лайкнули 2400 раз, прокомментировали 180 раз»). Популярность добавляется специально, чтобы модель понимала, что контент «горячий».

Для пользователя: текстовое описание профиля (должность, индустрия, навыки) + история взаимодействий («последние N постов, с которыми пользователь активно взаимодействовал»).

Почему текст лучше числовых кодов? Потому что LLM понимает смысл. Она знает, что «Machine Learning Engineer» и «AI Researcher» — близкие понятия. Числовой идентификатор этого не знает.

Как получить один эмбеддинг из LLM: Mean Pooling​


LLM на выходе даёт не один вектор, а целый ряд — по одному на каждый токен (слово или часть слова) входного текста. Чтобы получить один итоговый эмбеддинг, LinkedIn применяет mean pooling — берёт среднее значение по всем токенам.

Простая аналогия: если у вас 10 экспертов, каждый оценил объект по 512 параметрам, а вам нужна одна итоговая оценка — возьмите среднее по всем экспертам. Это и есть mean pooling.

Как модель обучается: Contrastive Learning и InfoNCE Loss​


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

Идея Contrastive Learning (контрастивного обучения)

Модель учат на примерах: «вот пользователь, вот пост, который ему понравился (позитив) — сделай их эмбеддинги близкими. А вот посты, которые ему не понравились (негативы) — держи их эмбеддинги подальше».

Со временем пространство эмбеддингов «организуется»: похожие вкусы оказываются рядом, непохожие — далеко.

InfoNCE Loss

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

In-Batch Negatives

Хитрость для экономии: при обучении в одном «пакете» (batch) одновременно обрабатываются десятки пар «пользователь — понравившийся пост». Для каждого пользователя позитивные посты других пользователей того же пакета автоматически становятся его негативами. Это позволяет учиться на большом числе примеров без дополнительной разметки.

Hard Negatives (сложные негативы)

Это ключевое улучшение в статье LinkedIn. Обычные (случайные) негативы слишком простые: очевидно, что пост о рыбалке не интересен IT-специалисту. Модель легко их различает и почти ничему не учится.

Сложные негативы — это посты, которые пользователь видел в своей ленте, но не нажал на них и не отреагировал. По-английски это называется impressions — показы без реакции. Это гораздо сложнее для модели: пост был релевантен достаточно, чтобы попасть в ленту, но недостаточно, чтобы заинтересовать. Учиться отличать их от реальных позитивов — намного полезнее.

LinkedIn берёт 2 hard negative на каждый позитив. Именно это делает обучение по-настоящему острым.

Matryoshka Learning — сжатие эмбеддингов без потери качества​


Базовая модель LLaMA-3 3B производит эмбеддинги размером 3072 измерения. Это большой вектор. Хранить и сравнивать миллиарды таких векторов дорого и медленно.

Matryoshka Representation Learning (дословно: «матрёшечное обучение») — техника, при которой модель обучается так, чтобы первые 64 измерения вектора уже несли полезную информацию, первые 128 — ещё больше, первые 256 — ещё больше, и так далее.

Аналогия: представьте матрёшку. Маленькая внутри — это грубый, но рабочий портрет объекта. Каждый слой снаружи добавляет деталей. Можно использовать любую «куклу» в зависимости от того, сколько у вас ресурсов.

Благодаря этому LinkedIn использует эмбеддинги размером 512 на инференсе (реальное применение) вместо 3072 — в 6 раз меньше — без заметной потери качества (recall при этом не падает). Это огромная экономия на хранении и скорости поиска.

Итоговая архитектура одним взглядом​


  1. Вход: текстовое описание пользователя (профиль + история) и текстовое описание поста (контент + статистика популярности)
  2. Обработка: оба текста прогоняются через одну LLM (LLaMA-3 3B, дообученную на данных LinkedIn)
  3. Эмбеддинги: из выходных токенов LLM через mean pooling получают два вектора — пользователя и поста
  4. Сходство: вычисляется косинусное сходство между векторами
  5. Обучение: InfoNCE loss с In-Batch негативами и 2 Hard Negatives на позитив
  6. Сжатие: Matryoshka learning позволяет работать с 512-мерными векторами вместо 3072
  7. Результат: на инференсе для нового пользователя быстро находятся тысячи ближайших постов — кандидаты для дальнейшего ранжирования

Почему это важно и что изменилось​


До этого подхода рекомендательные системы работали с числовыми кодами (ID постов и пользователей) или отдельными «фичами» (характеристиками), которые инженеры придумывали вручную. Проблемы:

  • Новый пост без истории взаимодействий — система почти ничего о нём не знает (проблема «холодного старта»)
  • Тонкие смысловые связи между темами теряются, если оперировать только числами
  • Добавление новых типов контента требует ручной настройки признаков

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

Простая аналогия для всей системы целиком​


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

LLM — это библиотекарь, который понимает смысл, а не просто сортирует по номерам.

Источник​


Large Scale Retrieval for the LinkedIn Feed using Causal Language Models — оригинальная статья на arxiv.org
 
Назад
Сверху Снизу

Экосистема проектов TeleCobra

CyberCobra.ru — форум TeleCobra.com — софт для Telegram TeleCobra.ru — экосистема CyberMindBot — нейрокомментинг Spellbook Academy — AI обучение