То, что ChatGPT может автоматически генерировать что-то, что читается даже внешне как текст, написанный человеком, замечательно и неожиданно. Но как он это делает? И почему это работает? Моя цель здесь — дать общее представление о том, что происходит внутри ChatGPT, а затем исследовать, почему он может так хорошо создавать то, что мы могли бы считать осмысленным текстом. Я должен сказать с самого начала, что я собираюсь сосредоточиться на общей картине происходящего — и хотя я упомяну некоторые технические детали, я не буду углубляться в них. (И суть того, что я скажу, применима так же хорошо к другим текущим “большим языковым моделям” [LLM], как и к ChatGPT.)
Первое, что нужно объяснить, это то, что ChatGPT всегда принципиально пытается сделать, это создать “разумное продолжение” любого текста, который у него есть на данный момент, где под “разумным” мы подразумеваем “то, что можно было бы ожидать от кого-то написать, увидев, что люди написали на миллиардах веб-страниц и т.д.” Кстати, chat gpt в россии доступен на страницах специализированного сайта.
Итак, допустим, у нас есть текст “Лучшее в ИИ — это его способность”. Представьте, что вы просматриваете миллиарды страниц текста, написанного человеком (скажем, в Интернете и в оцифрованных книгах), и находите все экземпляры этого текста, а затем смотрите, какое слово идет следующим, какую долю времени. ChatGPT эффективно делает что-то подобное, за исключением того, что (как я объясню) он не просматривает буквальный текст; он ищет вещи, которые в определенном смысле “совпадают по смыслу”. Но конечным результатом является то, что он выдает ранжированный список слов, которые могут следовать, вместе с “вероятностями”:
И примечательно то, что когда ChatGPT делает что-то вроде написания эссе, по сути, он просто спрашивает снова и снова: “Учитывая текст на данный момент, каким должно быть следующее слово?” — и каждый раз добавляет слово. (Точнее, как я объясню, это добавление «токена”, который может быть просто частью слова, вот почему он иногда может “составлять новые слова”.)
Но, хорошо, на каждом шаге он получает список слов с вероятностями. Но какой из них он должен выбрать на самом деле, чтобы добавить к эссе (или чему-то еще), которое он пишет? Можно подумать, что это должно быть слово с “наивысшим рейтингом” (т. Е. то, которому была присвоена наивысшая «вероятность”). Но именно здесь начинает прокрадываться что-то от вуду. Потому что по какой—то причине — которую, возможно, однажды мы поймем в научном стиле — если мы всегда выбираем слово с самым высоким рейтингом, мы обычно получаем очень “плоское» эссе, которое, кажется, никогда не “проявляет никакого творчества” (и даже иногда повторяется слово в слово). Но если иногда (наугад) мы выбираем слова с более низким рейтингом, мы получаем “более интересное” эссе.
Тот факт, что здесь присутствует случайность, означает, что если мы используем одно и то же приглашение несколько раз, мы, вероятно, каждый раз получим разные эссе. И, в соответствии с идеей вуду, существует особый так называемый параметр “температуры”, который определяет, как часто будут использоваться слова с более низким рейтингом, и для генерации эссе оказывается, что “температура” 0,8 кажется оптимальной. (Стоит подчеркнуть, что здесь не используется никакая “теория”; это просто вопрос того, что, как было установлено, работает на практике. И, например, понятие “температура” существует потому, что используются экспоненциальные распределения, знакомые из статистической физики, но нет никакой “физической” связи — по крайней мере, насколько нам известно.)
Прежде чем мы продолжим, я должен объяснить, что в целях наглядности я в основном не собираюсь использовать полную систему, которая есть в ChatGPT; вместо этого я обычно работаю с более простой системой GPT-2, которая имеет приятную особенность в том, что она достаточно мала, чтобы ее можно было запускать на стандартном настольном компьютере. Итак, по существу, ко всему, что я показываю, я смогу включить явный код на языке Wolfram, который вы сможете немедленно запустить на своем компьютере. (Щелкните любую картинку здесь, чтобы скопировать код за ней.)
Например, вот как получить приведенную выше таблицу вероятностей. Во-первых, мы должны получить базовую нейронную сеть “языковой модели”:
Позже мы заглянем внутрь этой нейронной сети и поговорим о том, как это работает. Но пока мы можем просто применить эту “сетевую модель” в виде черного ящика к нашему тексту и запросить 5 лучших слов по вероятности, которые, по мнению модели, должны следовать:
Этот результат преобразуется в явно отформатированный “набор данных”:
Вот что произойдет, если многократно “применять модель” — на каждом шаге добавлять слово, имеющее наибольшую вероятность (указанное в этом коде как “решение” из модели):
Что произойдет, если продолжать дольше? В этом случае (“нулевая температура”) то, что вскоре выходит, становится довольно запутанным и повторяющимся:
Но что, если вместо того, чтобы всегда выбирать «верхнее» слово, иногда случайным образом выбираются “не верхние” слова (со “случайностью”, соответствующей “температуре” 0,8)? Опять же, можно создавать текст:
И каждый раз, когда кто-то делает это, будут сделаны разные случайные выборы, и текст будет другим — как в этих 5 примерах:
Стоит отметить, что даже на первом шаге есть множество возможных “следующих слов” на выбор (при температуре 0,8), хотя их вероятности довольно быстро падают (и, да, прямая линия на этом логарифмическом графике соответствует n-1 “степенному” спаду, который очень характерен для общей статистики языка):
Итак, что произойдет, если продолжать дольше? Вот случайный пример. Это лучше, чем вариант с первым словом (нулевая температура), но все равно в лучшем случае немного странно:
Это было сделано с помощью простейшей модели GPT-2 (с 2019 года). С более новыми и большими моделями GPT-3 результаты лучше. Вот текст с верхним словом (нулевая температура), созданный с помощью той же “подсказки”, но с самой большой моделью GPT-3:
И вот случайный пример при “температуре 0.8”:
Откуда берутся вероятности?
Хорошо, итак, ChatGPT всегда выбирает следующее слово на основе вероятностей. Но откуда берутся эти вероятности? Давайте начнем с более простой проблемы. Давайте рассмотрим генерацию английского текста по одной букве (а не слову) за раз. Как мы можем вычислить, какой должна быть вероятность для каждой буквы?
Самое минимальное, что мы могли бы сделать, это просто взять образец английского текста и подсчитать, как часто в нем встречаются разные буквы. Так, например, это подсчитывает буквы в статье Википедии о “кошках”:
И это делает то же самое для “собак”:
Результаты похожи, но не одинаковы («о”, без сомнения, чаще встречается в статье “собаки”, потому что, в конце концов, оно встречается в самом слове “собака”). Тем не менее, если мы возьмем достаточно большую выборку текста на английском языке, мы можем ожидать, что в конечном итоге получим по крайней мере довольно последовательные результаты:
Вот пример того, что мы получим, если просто сгенерируем последовательность букв с такими вероятностями:
Мы можем разбить это на “слова”, добавив пробелы, как если бы они были буквами с определенной вероятностью:
Мы можем сделать немного лучшую работу по созданию «слов”, принудительно приведя распределение “длин слов” в соответствие с тем, что есть в английском:
Нам не удалось получить здесь никаких “реальных слов”, но результаты выглядят немного лучше. Однако, чтобы пойти дальше, нам нужно сделать больше, чем просто выбрать каждую букву отдельно случайным образом. И, например, мы знаем, что если у нас есть «q», следующая буква в основном должна быть “u”.