Внутри статьи описывалась модель под названием GPT-3. Её главные характеристики были такими. Сто семьдесят пять миллиардов параметров. Девяносто шесть слоёв трансформера. Контекстное окно в две тысячи сорок восемь токенов. Обучена на массиве примерно из пятисот миллиардов слов, собранных из почищенного слепка Common Crawl, английской Википедии, нескольких сборников книг и веб-страниц. Стоимость обучения, по разным оценкам, от пяти до двенадцати миллионов долларов только на вычисления. Время обучения — несколько недель на тысячах видеокарт в облачной инфраструктуре Microsoft Azure.
Цифры впечатляли. Но впечатляли не они. Впечатляло то, что модель показывала результаты, не предусмотренные ни одной из теоретических работ по обучению нейронных сетей.
До GPT-3 в обработке естественного языка существовала очень устоявшаяся практика. Если у вас есть задача (скажем, классификация эмоциональной окраски твитов или ответы на вопросы по медицинским документам), вы берёте предобученную модель типа BERT или GPT-1, собираете несколько тысяч размеченных примеров вашей задачи, и дообучаете модель на этих примерах. Это называлось fine-tuning, и без этого шага никакая большая модель не была пригодна для практического применения.
GPT-3 предложил иную парадигму. Вместо того, чтобы менять веса модели под каждую конкретную задачу, нужно просто описать задачу в текстовом виде и подать на вход модели как обычный текст. Скажем, вы хотите классифицировать твит. Вы пишете в начале промпта: «Определи эмоциональную окраску твита: положительная, отрицательная или нейтральная». Дальше даёте два или три примера: твит и правильная метка. После этого даёте свой реальный твит и оставляете строку для ответа пустой. Модель видит этот текст, видит примеры, и сама догадывается, что нужно сделать. И в ответ выдаёт правильную метку.
Это поведение Том Браун и его команда назвали in-context learning, «обучение прямо в контексте». В отличие от классического обучения, никаких изменений в весах модели не происходит; задача формулируется и решается полностью в момент генерации.
В статье вводилось три режима использования. Zero-shot, когда модель получает только описание задачи без каких-либо примеров. One-shot, когда даётся один пример. Few-shot, когда даётся от двух до сотни примеров. Каждый следующий режим, как правило, работал лучше предыдущего. И на многих задачах few-shot GPT-3 уже подходил по качеству к специально дообученным под задачу BERT-овским моделям.
Это было поразительно. До GPT-3 общая мудрость отрасли гласила: одна модель не может одинаково хорошо решать много задач без специальной адаптации к каждой. После GPT-3 эта мудрость рассыпалась. Одна модель могла переводить с английского на французский, отвечать на вопросы из истории, складывать двузначные числа, придумывать стихи, писать SQL-запросы, исправлять опечатки в коде. Без переобучения. По одному и тому же набору весов.
Что особенно поразило: некоторые из этих способностей не показывались моделями меньшего размера. GPT-3 умел складывать двузначные числа с точностью больше восьмидесяти процентов; GPT-2 со своими полутора миллиардами параметров на той же задаче проваливался полностью. Это явление стало называться эмерджентностью: некоторые способности появлялись как бы из ниоткуда, когда модель достигала определённого размера, и не присутствовали в моделях меньшего размера ни в каком виде.
В научном сообществе эмерджентность вызывала противоречивые чувства. С одной стороны, было ясно, что это конкретное наблюдаемое явление. С другой стороны, никто не мог его объяснить. Самый честный комментарий на этот счёт дал тогдашний главный научный сотрудник OpenAI Илья Суцкевер. Он сказал в одном из публичных выступлений, что они и сами не понимают, почему это происходит; что у них есть только эмпирические данные, и эти данные говорят, что при определённых размерах в моделях появляется качественно новое поведение. Глубже этого никто пока не разобрался.
OpenAI приняла относительно той же модели решение, существенно отличающееся от того, как они себя вели с GPT-2.
Веса GPT-3 не были опубликованы в открытом доступе. Никаких staged release. Никаких возможностей скачать модель. Вместо этого OpenAI запустила платный API: пользователи могли отправлять запросы в виде HTTP-запросов на серверы OpenAI и получать ответы. За использование платили потокенно — по фиксированному тарифу за каждую тысячу токенов. Это была первая коммерческая монетизация большой языковой модели в истории.