Представление разных идей внутри языковых моделей

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

Речь о работе «Beyond Single Concept Vector: Modeling Concept Subspace in LLMs with Gaussian Distribution» («За рамками вектора: моделируем представление идей в больших языковых моделях через Гауссово распределение»), она вышла в 2025 году и опубликована на ресурсе OpenReview.

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

Что предлагают авторы

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

Зачем их выявлять? – Затем, чтобы можно было точечно корректировать ответы. Мы про такое обычно говорим применительно к безопасности: ищем, например, как представлена идея «не буду отвечать на запрос», чтобы включать её в нужные моменты – если пользователь спрашивает, как сделать бомбу или с какого спрыгнуть моста.

Есть разные подходы к решению этой задачи – непростой задачи. Вот посмотрим на один из таких.

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

Я использую слово «идея» как перевод термина «concept», потому что слово «концепт» как-то мне режет ухо. Так что в рамках вот этого поста «птица» и «фильм ужасов» – это идеи. Если у вас есть идеи относительно того, как это описать изящнее, поделитесь ими, пожалуйста.

Итак, авторы выбрали эмоционально нейтральные идеи (в смысле, не ценности вроде «честность» или «справедливость», как во многих других работах) и организовали их иерархически. Вот пример.

Идея первого уровня "Фильм" включает в себя четыре идеи второго уровня:

  • ужастик
  • боевик
  • комедия
  • научная фантастика

Для каждой идеи второго уровня они с помощью GPT-4o сгенерировали 5 000 положительных (где идея присутствует) + 5 000 отрицательных (идея отсутствует) примеров.

Например, для идеи «ужастик» положительный вариант такой:

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

И отрицательный:

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

Иерархия (фильм --> ужастик) была нужна, чтобы посмотреть, как разные сложноорганизованные идеи представлены внутри языковых моделей (и совпадает ли это представление с нашим – у авторов вышло, что совпадает).

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

Из 5 000 + 5 000 примеров (положительные + отрицательные) авторы отобрали 1 000 + 1 000 с повторением.

«С повторением» означает, что мы берём 1 000 примеров, записываем, что взяли, возвращаем их обратно в общую кучу, потом берём следующую 1 000. В результате какие-то примеры выбираются несколько раз, а какие-то не выбираются вообще. Это множество невыбранных примеров называется «out-of-bag set» – «объекты, не вошедшие в набор».

В случайных лесах (random forests), например, такие объекты используют для тестирования, но в этой работе они как-то так и остались не у дел. Точнее, авторы их используют, но не так полно, как могли бы. Это мы, впрочем, опустим сегодня: слишком много деталей.

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

Конкретно в данной работе авторы на каждом подмножестве получают вектор, который содержит часть информации об идее. Можно надеяться, что так мы получим (точнее, они получат, а мы посмотрим) больше информации.

Шаг третий. По этим подмножествам получить отдельные векторы: по набору векторов для каждого слоя

Авторы взяли относительно небольшие модели:

  • Llama-2-7B
  • Gemma-7B
  • Llama-2-13B

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

Откуда берутся векторы?

Авторы обучают логистическую регрессию – относительно простой линейный классификатор – чтобы различать положительные и отрицательные примеры. У логистической регрессии есть обучаемые веса – эти веса и есть векторы.

Можете так про них думать: веса – это коэффициенты в формуле. В случае с логистической регрессией мы даём на вход некоторые данные, они пересчитываются по формуле, и на выходе получается либо 1, либо 0 (идея присутствует / отсутствует). «Обучение логистической регрессии» означает, что мы показываем ей данные, и она меняет свои коэффициенты в формуле так, чтобы выдавать 1, когда идея в тексте есть, и 0, когда её нет.

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

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

Шаг четвёртый. Усреднить все векторы, полученные внутри одного слоя на разных подмножествах, – теперь у нас останется по одному вектору на слой

На предыдущем шаге получилось много векторов для каждого слоя языковой модели. Их получили как раз на подмножествах из 1 000 + 1 000 примеров.

Теперь эти векторы усредняются, получается что-то вроде «центрального вектора идеи» (это не их термин, это моё понимание происходящего).

Шаг пятый. Взять этот вектор и наделать вокруг него ещё векторов в пределах одного стандартного отклонения

Наконец, самое интересное.

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

Представление разных идей внутри языковых моделей

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

То есть, можно себе представить что-то такое:

  • есть вектор «ужастик», он центральный;
  • близко к нему находятся векторы «фильм» и «страх»;
  • чуть дальше – «изображение».

И так далее. Это я фантазирую, чтобы вам понятнее было, о чём речь.

И вот тут есть некоторый нюанс.

Если вы желаете использовать нормальное распределение (или любое другое), вам нужно доказать, что оно применимо. То есть, авторы говорят: "Мы возьмём нормальное распределение и используем его, чтобы получить набор векторов, которые описывают идею". Перед этим надо доказать, что описывающие идею векторы распределены нормально.

Вы не потеряли ружьё?

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

Справедливо, конечно, но всё-таки…

Я бы проверила, действительно ли распределение нормально – для подобных целей есть специальные статистические тесты. Если распределение какое-то другое, полученные авторами векторы идей не описывают.

Краткий вывод

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

Но если рассматривать эту работу как начало исследовательской работы побольше, это отличный первый шаг. Так её и воспримем.

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

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

Начать дискуссию