От автора оригинала статьи: я работаю над серией статей, в которых пытаюсь создать карту психологии и поведения языковых моделей: сжатия, расширения, перевода и ремикширования. Я понял, что для того, чтобы написать её, мне нужно чёткое, низкоуровневое объяснение того, как работают языковые модели. Другими словами, мне нужно было написать приквел к моей статье о языковых моделях как компрессорах текста, Призрачную угрозу этой серии, если хотите (за исключением, надеюсь, того, что вы знаете, хорошего). Это и есть та самая статья.- Дэн Шиппер
Если мы хотим использовать большие языковые модели (БЯМ) в своей работе и при этом называть результаты творческими, нам придётся понять, как они работают — по крайней мере, на высоком уровне.
Существует множество отличных руководств о внутренних механизмах языковых моделей, но все они довольно техничны. (Заметным исключением является статья Нира Зичермана в журнале Every о том, что БЯМ — это еда.) Это обидно, потому что есть всего несколько простых идей, которые нужно понять, чтобы получить базовое представление о том, что происходит под капотом.
Я решил изложить эти идеи для вас — и для себя — в максимально свободной от жаргона форме. Приведённое ниже объяснение намеренно упрощено, но оно должно дать вам хорошее представление о том, как всё работает. (Если вы хотите пойти дальше упрощений, я предлагаю поместить эту статью в ChatGPT или Claude).
Готовы? Приступим.
Представьте, что вы — очень простая языковая модель. Мы дадим вам одно слово и заставим вас хорошо предсказывать следующее слово.
Я — ваш тренер. Моя работа заключается в том, чтобы дать вам возможность испытать себя. Если вы будете решать задачи правильно, я засуну руки в ваш мозг и буду возиться с вашими нейронными проводами, чтобы повысить вероятность того, что в будущем вы будете делать это снова. Если вы ошибётесь, я снова буду возиться, но на этот раз постараюсь сделать так, чтобы вы больше так не делали.
Вот несколько примеров того, как я хочу, чтобы вы работали:
Если я говорю "Дональд", вы говорите: "Трамп".
Если я скажу "Камала", вы скажете: "Харрис".
Теперь ваша очередь. Если я скажу "Джо", что скажете вы?
Серьёзно, постарайтесь угадать, прежде чем переходить к следующему абзацу.
Если вы угадали "Байден", поздравляю — вы правы! Вот небольшое угощение. (Если бы вы угадали неправильно, я бы шлёпнул вас по запястью).
Именно так мы обучаем языковые модели. Есть модель (вы) и есть обучающая программа (я). Обучающая программа тестирует модель и корректирует её в зависимости от того, насколько хорошо она работает.
Мы проверили вас на простых задачах, так что давайте перейдём к чему-нибудь посложнее.
Если я скажу "Джек", что скажете вы?
Попробуйте угадать ещё раз, прежде чем переходить к следующему абзацу.
Очевидно, вы скажете: "of", как, например, «Jack of all trades, master of none!» [умеет всё, но посредственно – известная американская поговорка про дилетантов широкого профиля / прим. перев.] Вот чего боялась моя мама, что со мной случится, если я не сосредоточусь на учёбе".
Что? Это не то, что сразу же промелькнуло у вас в голове? О, вы подумали "Николсон"? Или, может быть, вы подумали "Блэк". Или, может быть, "Харлоу".
Это понятно. Контекст может изменить то, какое слово мы считаем следующим. В предыдущих примерах были имена знаменитых политиков, за которыми следовали их фамилии. Таким образом, вы, языковая модель, предсказали, что следующим словом в последовательности будет имя другой знаменитости. (Если бы вы подумали о "кролике", "в коробке" или "и бобовый стебель", нам, возможно, пришлось бы повозиться в вашем мозгу!)
Если бы перед словом "Джек" у вас было больше контекста — может быть, рассказ о том, кто я такой, о моём воспитании, отношениях с родителями и неуверенности в том, что я универсал, — вы бы с большей вероятностью предсказали, что я «умею всё, но посредственно»
Итак, как же мы можем привести вас к правильному ответу? Если бы мы просто усилили ваши умственные способности — скажем, вложили в ваш мозг всю компьютерную мощь мира, — вы всё равно не смогли бы достоверно предсказать "of", исходя просто из «Jack». Вам понадобится больше контекста, чтобы понять, о каком именно "jack" идёт речь.
Именно так работают языковые модели. Перед словом, которое идёт после "jack", модели проводят много времени, спрашивая: "О каком "jack" идёт речь?". Они делают это до тех пор, пока не сузят круг поиска слова "jack" настолько, чтобы сделать хорошую догадку.
За это отвечает механизм под названием "внимание". Языковые модели обращают внимание на любое слово в подсказке, которое может иметь отношение к последнему слову, и затем используют его для обновления своего понимания того, что это за последнее слово. Затем они предсказывают, что будет дальше.
В этом заключается основная идея языковых моделей:
В английском языке гораздо больше слов, чем мы с вами представляем.
Мы с вами можем увидеть на странице слово "jack", но, будучи БЯМ, вы увидите нечто другое.
Слева от вас будет невидимый дефис с кучей лишних слов, которые вы будете носить с собой, как сбежавший ребёнок с невидимой сумкой:
Вы также будете кодировать такие вещи, как часть речи, встречается ли это слово в живом общении или нет, и миллионы других деталей, которые мы с трудом можем выразить словами.
В результате вам будет гораздо легче предсказать, что будет дальше. Этот метод берёт слово "Jack" и превращает его в гораздо более конкретное слово — назовём его суперсловом, — которое выглядит примерно так:
"Джек-Николсон-иконический-голливудский-актёр-с-легендарной-ухмылкой-известный-за-блестящий-фандом-"Лейкерс"-и-свою-беспокойную-харизму".
Гораздо более сложная версия вышеописанного — это, вероятно, слово, которое существует где-то в GPT-4, и на основе этого слова модель может составить список вероятных вещей, которые будут следующими.
Теперь вопрос: как модель это делает?
В процессе обучения языковая модель создаёт огромный словарь, содержащий все эти очень сложные, выдуманные суперслова. Она создаёт этот словарь, читая весь интернет и создавая суперслова из понятий, с которыми сталкивается.
Для этого она использует тот же механизм внимания, о котором мы говорили ранее: она изучает текст, фрагмент за фрагментом, пытаясь просчитать статистические связи между словами в текстах, которые ему встречаются. Затем она кодирует их в виде слов в своём словаре суперслов.
После обучения, когда языковая модель получает подсказку, всё, что ей нужно сделать, — это взять последнее слово в подсказке и несколько раз спрашивать: "что ты за слово на самом деле?", пока она не создаст гораздо более сложное суперслово. Затем он ищет это суперслово в своём огромном словаре, который помогает ему предсказать, что обычно следует за этим словом. Этот процесс повторяется снова и снова: она объединяет подсказку и свой ответ в виде одного слова и снова вызывает себя с этой новой подсказкой. И так до тех пор, пока не достигнет точки остановки и не вернёт ответ. Полный ответ языковой модели — это запись этого путешествия.
Вот только есть одна проблема. Что, если модель встретит суперслово, которого нет в её словаре? Это может произойти, например, если слова начнут сочетаться друг с другом новым способом, который языковая модель не заметила в процессе обучения.
Например, хорошо известно, что Джек Николсон — болельщик "Лейкерс". Что произойдёт, если он вдруг откажется от своего фэндома, станет болельщиком "Пэйсерс" и переедет в Индианаполис? Маловероятно, что языковая модель столкнулась бы с этим в процессе обучения, а значит, в её словаре вряд ли найдутся суперслова, представляющие Джека Николсона как фаната «Пэйсерс».
Это плохо! Мы не хотим, чтобы наша языковая модель потерпела неудачу, если она встретит суперслова, которых раньше не видела. Это не такой уж большой концептуальный скачок, чтобы сделать Джека Николсона болельщиком «Пэйсерс», а не болельщиком "Лейкерс". Как мы можем построить словарь, который позволит это сделать?
У языковых моделей есть прекрасное решение. Их словари не состоят из списка слов. Вместо этого их словари работают как карта.
Нью-Йорк распланирован по прямоугольной сетке. Если вы начнёте с 1-й улицы и пойдёте на север по 1-й авеню, то в конце концов окажетесь на 14-й улице. Если бы мы составили словарь всех улиц между 1-й и 14-й, он выглядел бы примерно так:
1-я улица
2-я улица
3-я улица
и т. д.
Но между 1-й и 2-й улицами есть целый квартал с разными магазинами и ресторанами. И они постоянно меняются. Отдельные точки в этом квартале не поместились бы в список, подобный приведённому выше, даже если бы они существовали.
Вместо этого мы наносим на карту расположение магазинов и ресторанов. А своё собственное местоположение мы определяем с помощью широты и долготы. Таким образом, мы можем двигаться в нужном направлении меньшими шажками, чем позволяет сетка из одних только названий улиц.
Именно так языковые модели поступают с суперсловами, которые они хранят в своих словарях. В процессе обучения они наносят все созданные ими суперслова на карту. Слова, чьи координаты — или местоположение — находятся ближе друг к другу, более близки по смыслу. Но суперслова могут существовать и между любыми двумя точками на карте, так же как вы можете посетить любое место между, скажем, 1-й и 2-й улицами, даже если этот конкретный адрес на сетке не отмечен.
Представляя суперслова в виде координат на карте, языковые модели могут "знать" о словах, которые находятся между известными точками, даже если эти конкретные слова не присутствовали в обучающих данных.
Самое интересное, что эта карта позволяет выполнять математические операции со смыслом. Вернёмся к слову "Джек". Если двигаться по карте в любом направлении, то можно встретить разные формы этого слова. Например, на карте языковой модели есть направление, соответствующее тому, чтобы быть актёром. Чем дальше вы продвигаетесь в этом направлении, тем больше вероятность того, что конструируемое вами слово относится к актёру.
Существует также направление "музыкант", обладающее тем же свойством. Чем дальше вы продвигаетесь в направлении "музыкант", тем больше вероятность того, что слово относится к музыканту. Если из слова "Джек" вычесть направление "актёр" и добавить направление "музыкант", то созданное вами суперслово с гораздо большей вероятностью будет обозначать "Джека Джонсона", чем "Джека Николсона".
То, как работают языковые модели, раскрывает некоторые глубокие свойства природы языка и реальности.
Они говорят нам, что то, что происходит дальше, является результатом того, что было раньше. Прошлое — это пролог, как говорил Шекспир.
Они также говорят нам, что это происходит не через простой список статичных правил. Вместо этого всё происходит в непрерывном пространстве возможностей, где каждая частичка того, что было раньше, вносит свой вклад в значение слова, а значит, и в то, что будет потом. Каждый кусочек контекста имеет значение.
Как мы уже видели, языковые модели представляют суперслова как места на гигантской карте значений. Расстояние и направление между этими местами отражают сложные отношения между словами и понятиями. Эта карта настолько обширна, что даже комбинации, не встречающиеся непосредственно во время обучения, например Джек Николсон становится болельщиком «Пэйсерс», могут быть найдены, если двигаться в правильном "семантическом направлении".
Они также говорят нам о том, что слова обладают огромной силой. Каждое слово, которое мы вводим в языковую модель, на самом деле является указателем, указывающим на определённое место в этом огромном ландшафте языковых возможностей. И модель генерирует то, что будет дальше, прокладывая путь от этого места, руководствуясь тонким взаимодействием всех указателей, которые были до этого.
В этом и заключается её сила как инструмента: Языковые модели хороши лишь настолько, насколько хорошо мы их используем. Научиться использовать их правильно — это навык и искусство.
Это должно интересовать каждого, кто хочет использовать их в творческой работе.