ChatGPT и другие сервисы генерируют тексты, которые уже сейчас сложно отличить от человеческих. Рассказываем, как это происходит. Это адаптированный пересказ статьи Стивена Вольфрама — программиста, математика и физика. Если читаете на английском, посмотрите оригинальный текст, там больше подробностей.
Будьте готовы. Тема сложная, нужно врубаться. На чтение потребуется не менее 10 минут.
Имитация работы человеческого мозга
Любая большая языковая модель — это нейронная сеть, что-то вроде модели идеального мозга.
В человеческом мозге около 100 миллиардов нейронов, каждый из которых производит до тысячи электрических импульсов в секунду. Эти импульсы передаются от каждого нейрона множеству других. Всё это соединено между собой.
По такому же принципу работает нейросеть, только вместо электрических сигналов по ней бегают числа.
Из чего нейросеть состоит:
- собственно нейроны — места для хранения данных;
- слои нейронов — условное разделение нейронов на группы, между которыми передаётся информация;
- связи между нейронами — способность одного нейрона передать другому какие-то данные;
- вес каждой связи — то, как данные меняются при передаче от одного нейрона к другому.
Вот классическая визуализация этой конструкции на очень маленьком примере:
Смысл работы каждого нейрона — считать. Когда нейронка получает вводные данные в виде чисел, нейроны на каждом слое считают свои числа в соответствии с весами. Когда они всё рассчитали, они передают результаты дальше по сети, и тогда начинает считать следующий слой.
Пока что выглядит легко, но представьте, что таких нейронов миллиарды. Именно благодаря количеству нейронов сеть может выдать какой-то полезный результат.
См. также: Что такое искусственный интеллект.
Обучение на примерах
Польза нейросети — в её весах, то есть в том, какие значения присвоены связям между нейронами. При одном наборе весов одна и та же нейросеть может отличать кошечек от собачек; при другом — различать людей на фото; при третьем — преобразовывать речь в текст и так далее. Именно веса в модели позволяют ей делать что-то нужное в хозяйстве.
Значения весов присваиваются связям не просто так, а по мере обучения нейросети на примерах. Как это происходит:
- В нейронку загружают массив обучающих данных — «Как правильно работать».
- Нейронка подстраивает веса между нейронами таким образом, чтобы воспроизвести приведённые примеры.
- Если полученный результат стал ближе к нужному результату, эти веса закрепятся.
- Если результат пошёл не в ту сторону, его связи будут пересчитаны.
- Иногда дополнительно добавляют процедуру проверки на контрольных данных — например, нейросеть обучили на одних собачках и кошечках, а потом проверяют верность определения на других собачках и кошечках. Если нейросеть ошибается на новых данных, веса снова автоматически корректируются.
Если провести параллель с музыкой, веса — это ручки громкости и скорости воспроизведения разных инструментов. Нейронка крутит их, чтобы сгенерировать такую же музыку, какую в неё загрузили. Но делает она это не разумно, а методом перебора и получения обратной связи: «Попробовала — ей сказали, хорошо или плохо, — скорректировала — попробовала снова — получила обратную связь — начинай сначала».
Например, мы хотим заставить нейронку воспроизвести функцию с таким графиком:
С каждым возможным набором весов нейронка будет вычислять некоторую функцию. Поначалу у неё может получаться не очень хорошо и результат вычислений не будет похож на исходный пример. По мере того как нейронка будет подбирать подходящие значения весов, результат будет приближаться к обучающему примеру. После огромного множества попыток мы получим нейросеть, которая успешно воспроизводит нужную функцию. Попыток может быть и миллион, и десять миллионов, и больше.
На примере ниже показан пример обучения нейросети: в первые заходы, потом на 10 тысячах заходов, 100 тысячах, миллионе и 10 миллионах. Получается, что за 10 миллионов попыток нейросеть настроила свои веса так, чтобы воспроизводить данную ей функцию. Так как расчёты происходят быстро, эти 10 миллионов заходов можно было получить за несколько секунд. И всё равно она воспроизводит функцию не совсем точно — обратите внимание на правый край.
См. также: Как учатся нейронки.
Как связаны нейронки и ChatGPT
ChatGPT — это сервис на базе лингвистической модели GPT какой-то версии. Раньше была версия 3.5, сейчас — 4.0, дальше будет следующая версия.
Помимо нейронки, в сервисе куча других вещей, например парсеры, которые позволяют нейронке в определённых случаях получить текст нужной вам веб-страницы; всевозможные надстройки и докрутки поверх языковой модели; инструменты разработчика и API. То есть сама нейронка — это только часть сервиса ChatGPT. Но языковая модель — это её главный компонент.
Чтобы получить языковую модель GPT, компания-разработчик OpenAI обучила её на огромном массиве написанных людьми текстов из книг, интернета и других источников. Всего около 100 миллиардов слов.
На иллюстрации выше в нейронке всего 19 весов. В ChatGPT, по разным данным, их от 150 до 1000 миллиардов (то есть до триллиона). Такую махину нет смысла визуализировать, она не влезет ни в какой экран.
Прогнозирование и добавление одного слова за раз
Основная цель языковой модели — осмысленно продолжать цепочку слов в предложении. Но делает она это до тех пор, пока смысл похож на примеры текстов, написанных человеком.
Представим, что у нас есть текст «Самая крутая штука в нейронках — это их способность». Просматривая миллиарды страниц текста, нейронка находит все экземпляры этой фразы и изучает, какими словами они продолжаются. При этом нейронка не смотрит на текст буквально, она ищет слова, которые примерно совпадают по смыслу (об этом будет ниже).
Текст | Следующее слово | Вероятность продолжения |
Самая крутая штука в нейронках — это их способность | учиться | 4,5% |
предсказывать | 3,5% | |
создавать | 3,2% | |
понимать | 3,1% | |
делать | 2,9% |
Когда нейронка пишет, она оценивает текст в его текущем состоянии и рассчитывает, каким должно быть следующее слово. При этом она необязательно выбирает то слово, у которого вероятность выше. Если бы языковая модель делала так постоянно, у неё получался бы примерно одинаковый текст. Поэтому время от времени нейронка выбирает слова с более низким рейтингом.
Таким образом можно получить следующий текст:
Самая крутая штука в нейронках — это их способность
Самая крутая штука в нейронках — это их способность учиться
Самая крутая штука в нейронках — это их способность учиться на
Самая крутая штука в нейронках — это их способность учиться на своём
Самая крутая штука в нейронках — это их способность учиться на своём опыте,
Самая крутая штука в нейронках — это их способность учиться на своём опыте. Это
Самая крутая штука в нейронках — это их способность учиться на своём опыте. Это не
Детали: эмбеддинг
Многие слова имеют похожее значение, и нейронки это определяют. Анализируя обучающие тексты, нейронки видят такие слова в сходных по смыслу предложениях. Это называется эмбеддинг.
Например, слова «крокодил» и «аллигатор» часто встречаются как взаимозаменяемые. Хотя фактически это разные животные, не многие люди их различают и поэтому считают эти названия синонимами. При эмбеддинге нейронки поместят слова «крокодил» и «аллигатор» рядом и будут использовать их наравне. А вот слова «репа» и «орёл» не будут появляться в похожих предложениях, поэтому при эмбеддинге будут располагаться далеко друг от друга.
Детали: определение лингвистических признаков и словесных аналогий
Для ChatGPT и других языковых моделей любой фрагмент текста — это массив чисел, которые можно представить как координаты в каком-то пространстве. Это пространство называют пространством лингвистических признаков.
Когда нейронка продолжает фрагмент текста, она отслеживает траекторию в этом пространстве. Вот как могли бы располагаться существительные, если бы это пространство было двумерным (в реальности оно многомерное):
А так могли бы располагаться слова, соответствующие разным частям речи. При этом, если у слова может быть несколько значений, нейронка сможет их различить. Глядя на то, как предложения с определёнными словами расположены в пространстве, можно разобрать различные значения, например слово «ласточка» может означать птицу или название фирменного поезда.
При обучении на загруженных текстах языковые модели берут все слова и описывают их списками от сотен до тысяч чисел. Мы схематично показываем слова в виде точек в пространстве, но на самом деле в нейронке это векторы.
У векторного представления слов есть ещё одна особенность — словесные аналогии. За счёт них языковая модель выполняет простые операции с векторами слов. Например, если вычесть из вектора слова «король» вектор слова «мужчина» и прибавить к результату вектор слова «женщина», получится вектор слова «королева».
См. также: что такое вектор, операции с векторами.
Детали: соблюдение грамматики и синтаксиса
Нейронки соблюдают правила синтаксиса и грамматики, потому что натренировались на более-менее правильных текстах на заданном языке.
Нейронке также помогает токенизация: когда она работает не с конкретным словом, а с частями слова — приставками, корнями, суффиксами и окончаниями. Нейронка обучается, что в таком-то падеже русского языка такие-то окончания, и когда ей потом нужно сгенерировать предложение, она оперирует не только словами по смыслу, но и токенами — кусочками этих слов. Так нейронка ставит правильные окончания.
Детали: учёт семантики
Даже если предложение составлено корректно с точки зрения синтаксиса, это не значит, что оно может соответствовать реальности. Например, предложение «Слон полетел на Луну» соответствует законам синтаксиса и грамматики, но такой сюжет может быть только в детской сказке.
Чтобы создавать соответствующие запросу тексты, ChatGPT и другие языковые модели учитывают семантику — смысловое значение единиц языка. Семантика обычно связана с какой-то моделью мира, неким скелетом, поверх которого наслаивается язык. Например, у текстов делового письма и частушки будет разная семантика.
Почему же всё работает так хорошо?
Короткий ответ — за счёт огромного числа нейронов, весов, текстов для обучения и ручного труда.
Много нейронов и весов — в ChatGPT их число измеряется миллиардами и триллионами. Именно масса вот этих тонко натренированных нейронов и связей дают ощущение магии.
Много текстов — ChatGPT обучали на огромном корпусе написанных людьми текстов разного качества и на разных языках. Даже собрать этот корпус — огромный труд, а отфильтровать в нём нужные качественные тексты — и подавно.
Ручной труд — когда нейронка обучилась, её «воспитывают»: это значит, что живые люди общаются с нейронкой и дают ей обратную связь, какие тексты хорошие, а какие нет. Так из нейронки вычищаются баги, дурь и последствия дурных примеров текста, Подробно об этом рассказывал Алексей Гусаков из Яндекса, рассказывая о будущей языковой модели, на которую сейчас ищут тренеров. Посмотрите видео, если вам интересна тема воспитания нейронок: