rronoitadatcaeaesaotdoysaroiyiinnbantoioestlhddeocneooewceseciselnodrtrdgriscsatsepesdcniouhoetsedeyhedslernevstothindtbmnaohngotannbthrdthtonsipieldn
Мы можем разбить это на «слова», добавив пробелы, как если бы это были буквы с определенной вероятностью:
sd n oeiaim satnwhoo eer rtr ofiianordrenapwokom del oaas ill e h f rellptohltvoettseodtrncilntehtotrkthrslo hdaol n sriaefr hthehtn ld gpod a h y oi
Мы также можем упростить процесс, разделив буквы в соответствии со стандартной длиной слов в английском языке:
ni hilwhuei kjtn isjd erogofnr n rwhwfao rcuw lis fahte uss cpnc nluoe nusaetat llfo oeme rrhrtn xdses ohm oa tne ebedcon oarvthv ist
Нам не удалось обнаружить здесь никаких реально существующих слов, но последующие результаты выглядят немного лучше. Однако, чтобы пойти дальше, нам нужно сделать нечто большее, чем просто выбрать буквы наугад. Так, например, мы знаем, что если у нас есть буква q, то следующей буквой должна быть u.
Вот график вероятностей самих букв:

А вот график, который показывает вероятности пар букв в типичном английском тексте. Первая буква пары показана сверху, вторая – слева:

Здесь мы видим, например, что столбец q пуст (нулевая вероятность), за исключением пересечения со строкой u. Итак, теперь вместо того, чтобы генерировать наши «слова» по одной букве за раз, давайте генерировать их, рассматривая по две буквы за раз. Вот результат, который, как оказалось, включает в себя несколько реальных слов:
on inhuman men ise forernoft wheat iofobato buc is corey ousesetiv fallen tinoco rye for a the ecseri pasuthrgr cuconom tra tesla will tat pere thi
Имея достаточно большой объем текста на английском языке, мы можем определить вероятности не только отдельных букв или их пар, но и более длинных серий (n-буквенные). И если мы будем генерировать случайные «слова», постепенно увеличивая это число n, то увидим, что получающиеся «слова» становятся более реалистичными:
0 – on gxeeetowmt tsifhy ah aufnsoc ior oia itlt bnc tu ih uls
1 – ri io os ot timumumoi gymyestit ate bshe abol viowr wotybeat mecho
2 – wore hi usinallistin hia ale warou pothe of premetra bect upo pr
3 – qual musin was witherins wil por vie surgedygua was suchinguary outheydays theresist
4 – stud made yello adenced through theirs from cent intous wherefo proteined screa
5 – special average vocab consumer market prepara injury trade consa usually speci utility
Но давайте предположим, что мы имеем дело с целыми словами, а не с отдельными буквами (как и делает ChatGPT). В английском языке насчитывается около 40 тысяч достаточно часто используемых слов. И, просмотрев большой корпус английского текста (скажем, несколько миллионов книг, содержащих в общей сложности несколько сотен миллиардов слов), мы можем определить, насколько часто встречается каждое слово. Используя эту информацию, можно начать генерировать «предложения», в которых каждое слово выбирается независимо и случайным образом на основе той вероятности, которой оно обладает в корпусе. Вот пример того, что мы получаем:
of program excessive been by was research rate not here of of other is men were against are show they the different the half the the in any were leaved
Безусловно, получается полная ерунда. Итак, как же добиться лучших результатов? Точно так же, как с буквами, мы можем учитывать вероятности не только для отдельных слов, но и для словосочетаний из двух и большего числа слов. Вот пять примеров того, что можно получить, если начать генерировать предложение, начинающееся со слова «кошка»:
cat through shipping variety is made the aid emergency can the
cat for the book flip was generally decided to design of
cat at safety to contain the vicinity coupled between electric public
cat throughout in a confirmation procedure and two were difficult music
cat on the theory an already from a representation before a
Здесь текст становится более читабельным. Теперь мы можем представить, что, если бы использовали достаточно длинные словосочетания, мы бы, по сути, получили чат – в том смысле, что это нечто генерировало бы последовательности слов длиной в эссе с «правильными общими вероятностями написания эссе». Но проблема заключается в том, что у нас нет такого количества написанных на английском языке текстов, чтобы можно было вывести эти вероятности.
В интернете, возможно, содержится несколько сотен миллиардов слов, в книгах, которые были оцифрованы, может содержаться еще сто миллиардов. Но при наличии 40 тысяч общеупотребительных слов число возможных словосочетаний из двух слов составляет 1,6 миллиарда, а число возможных комбинаций из трех слов равно 60 триллионам. Таким образом, мы никак не можем оценить вероятности для всех этих случаев на основе имеющегося текста. И к тому времени, когда мы добираемся до «фрагментов эссе» длиной в 20 слов, количество возможных комбинаций превышает количество частиц во Вселенной, так что все эти вероятности никогда не смогут быть подсчитаны.
Что мы можем сделать? Главная идея заключается в том, чтобы создать модель, которая позволит нам оценить вероятность последовательностей, даже несмотря на то, что мы никогда не видели эти последовательности непосредственно в тексте. Именно такая модель – большая языковая модель (БЯМ, англ. large language model, LLM) – лежит в основе ChatGPT, и она была специально создана для того, чтобы выполнять оценку этих вероятностей.
Что такое модель?
Предположим, что вы (подобно Галилею в конце 1500-х годов) хотите знать, сколько времени будет падать пушечное ядро, если сбросить его поочередно со всех этажей Пизанской башни. Вы можете просто замерить время в каждом конкретном случае и составить таблицу результатов. Или сделать то, что является сутью теоретической науки: создать модель, которая позволит вам вычислить ответ, вместо того чтобы проводить серию экспериментов и получать данные эмпирическим путем.
Давайте представим, что у нас есть (несколько усредненные) данные о том, сколько времени требуется пушечному ядру, чтобы долететь до земли при падении с разных этажей:

Как мы можем выяснить, сколько времени потребуется ядру, чтобы долететь до земли при падении с конкретного этажа, если не проводили эксперимент? В этом случае мы можем использовать известные законы физики. Но, допустим, все, что у нас есть, – это экспериментальные данные, и мы не знаем, какие основополагающие физические законы управляют движением ядра. Тогда мы могли бы сделать математическое предположение, например, что, возможно, нам следует использовать в качестве модели прямую линию:

Можно было бы провести разные прямые линии. Но эта линия в среднем ближе всего к полученным нами данным. И по этой прямой мы можем оценить время падения ядра с любого этажа.
Как мы поняли, что нужно провести прямую линию? Это следует из самых основ математики. Мы привыкли к тому, что множество эмпирически полученных данных хорошо описываются с помощью простых математических формул. Мы могли бы попробовать что-нибудь математически более сложное, скажем: a + bx + cx2, и тогда у нас получится следующее:

Однако результат может быть и не таким, как нам надо. Вот, например, что выйдет, если мы используем формулу a + b: x + c × sin(x):
