Известно, что генерация текста с помощью GPT (Genarative Pretrained Transformers) так или иначе основана на вероятности. Рассмотрим поподробнее, к чему приводит такой подход - насколько "правдива" или "обманчива" такая генерация.

Вероятность следующего слова

В самом простом общем случае при обучении модели формируется база данных, с какой вероятностью слово B следует за словом A. Например, после слова "Красивая" в 15% случаях следует слово "Женщина" и в 12% - слово "Кошка", а после слова "Женщина" в 12% случаях следует слово "идет" и в 7% - слово "собирается". Таким образом вся база данных представляет собой просто таблицу из N строк и N столцбов, где N - количество слов, размер словаря.

Конечно, в сумме по каждой строке и каждому столбцу должно быть ровно 1 (100%), но у нас показан не весь словарь и мы считаем, что есть еще много слов и в сумме везде 1 (100%)

"Жадная" генерация

В самом простом случае при генерации текста модель выбирает следующее слово с наибольшей вероятностью. В нашем примере после слова "Красивая" будет предложено слово "Женщина", после слова "Женщина" - слово "идет" и так далее до конца предложения или до конца текста.

Добавляем вариативность

"Жадная" генерация выдает каждый раз одну и ту же реплику, и для ряда задач это не подходит. Для вариативности можно брать не самую большую вероятность, а несколько.

Будем брать не одну самую большую вероятность, а две. В таком случае после "Красивая" модель предложит на первом шаге "Женщина" и "Кошка", на втором шаге после "Женщина" - "Идет" и "Смотрит", а после "Кошка" - "Идет" и "Собирается".

Таким образом на 2 шаге есть уже 4 варианта:
1. Красивая женщина идет
2. Красивая женщина смотрит
3. Красивая кошка идет
4. Красивая кошка собирается.

Как выбрать вариант из 4?
Один из способов - просто выбирать случайным образом.
Другой способ - последовательно перемножить вероятности соответствующих пар и выбрать комбинацию с максимальным значением такого перемножения.

Видно, что итоговая комбинация "Красивая кошка собирается" может иметь больший показатель, чем "Красивая женщина идет", хотя после слова "Красивая" слово "Женщина" встречается чаще, чем слово "Кошка".

Вариативность можно увеличивать еще больше и разными способами.
Например, можно увеличивать количество выбираемых слов на каждом шаге, то есть брать не 2 варианта, а 3, или 5, или 10 и так далее.
Можно брать не количество слов, а занимаемые проценты. То есть на каждом шаге брать наиболее часто встречающиеся слова, которые вместе занимают, например, 80% выборки. И наоборот, не брать наименее часто встречающиеся слова, которые вместе занимают, например, менее 5% выборки.
Так существуют различные способы увеличения вариативности, и в общем случае вариативность генерации увеличиваются и генерация становится все более разнообразной.

Правдивость или человекоподобность?

Из представленной логики формирования генерации следует, что при "жадной" генерации модель просто выбирает наиболее часто встречающиеся комбинации слов. То есть получающаяся фраза может не иметь ничего общего с действительностью, это просто последовательный набор часто встречающихся комбинаций.

Вариативность не добавляет правдивости, просто теперь выбираются не самые часто встречающиеся комбинации, а с призовых мест пониже.

Таким образом генерируемые фразы могут быть читабельными и человекоподобными, могут быть абсолютно корректными с точки зрения согласования падежей, частей речи и прочее, но совершенно не соответствовать действительности. "Правдивость" изначально не заложена в схему генерации, такой метрики при генерации просто нет.

Конечно, иногда тексты и ответы кажутся очень хорошими и правдивыми.
Это происходит как раз потому, что модель учится на реальных человеческих текстах и есть вероятность, что из часто встречающихся комбинаций сложится правильное правдивое высказывание. Это похоже на то, что если совершить подряд несколько часто встречающихся действий - взять кастрюлю, налить воду, включить газ, поставить кастрюлю с водой на газ, подождать 10 минут, насыпать макароны, подождать 10 минут, слить воду - то может получиться настоящая еда. Модели покруче могут предложить откинуть макароны на дуршлаг, положить в тарелку, добавить соус и веточку базилика. Да, это будет вполне правильный текст, но это лишь частный случай, так совпало, и вероятность таких совпадений сильно зависит от текстов, на которых обучалась модель.

Переходим к GPT

В GPT слова изначально имеют свои цифровые представления (Embeddings), но это не меняет принципиальную логику генерации. При обучении нейронной сети коэффициенты (веса) подбираются таким образом, чтобы при поступлении на вход очередного вектора (эмбеддинга) модель выдавала бы следующее слово, имеющую максимальную вероятность, ну или с учетом заданной вариативности аналогично описанным выше случаям. Конечно, GPT сильно сложнее, чем можно объяснить в одном абзаце, и есть множество дополнений, улучшающих и оптимизирующих, но сам подход остается тем же самым - в итоге получается последовательность часто встречающихся комбинаций.

Даже если дообучить GPT собственными текстами, то это лишь немного изменит коэффициенты, перераспределит вероятности. В итоге модель будет генерировать "в стиле", "как бы". То есть если догрузить в GPT все книги Достоевского, то модель будет учитывать комбинации Достоевского, и генерировать текст как бы в его стиле. Но это все будет также "как бы" и не иметь никакого отношения к действительности.

Вывод

Представляется, что модели GPT действительно хороши для генерации историй, приключений, анекдотов, а также для генерации изображений, музыки и переноса стилей. Учитывая неожиданное совмещение известных комбинаций, такие модели могут пригодиться также и для генерации новых идей. При этом если требуется получать "правдивые" ответы или четкие инструкции, то представляется целесообразным применять другие модели.

Примечания

Если в статье замечены ошибки, могущие критически повлиять на сделанные выводы - пожалуйста, укажите в комментариях.

Комментарии (21)


  1. Nurked
    06.08.2023 14:18
    +10

    А что вы ходите? Так прикольно смотреть на группу людей, которые пяляться на математически усреднённый ответ на любую тему. GPT не может сказать правды или неправды. Он просто может сгенерировать что-то что будет похоже на человеческую речь.

    Но народ, который пытается найти в этом смысл жизни, доставляет удовольствие


    1. Hardcoin
      06.08.2023 14:18

      Подробные рассуждения не объясняют, почему gpt выдает работоспособный код, а не просто похожий.


      1. iridiumhawk
        06.08.2023 14:18
        +2

        Так вроде не всегда рабочий выдает :)


        1. GospodinKolhoznik
          06.08.2023 14:18

          Ну тем не менее он выдает код, который часто работает и это не какой то средне взвешенный текстовый ответ на тему вопроса, а именно осознанный* ответ.

          *Какой смысл я вкладываю в слово осознанный. Чатик как то парсит вопрос, сам себе по нему как то формирует ТЗ, сам додумывает это ТЗ во многом, о чем пользователь не писал, но скорее всего подразумевал, чтобы составить ТЗ очень подробно. И в итоге сам транспилирует это ТЗ в ЯП выбранный пользователем. Да, иногда у него этот сложнейший процесс получается не с первого раза. Особенно сложно правильно додумать за пользователем то, что он скорее всего подразумевал, но явно не сказал. Как он это делает? - загадка дыры. Но это очень сложная аналитическая деятельность, не просто какой то усреднённый ответ.


          1. berng
            06.08.2023 14:18
            +2

            Средневзвешанный. Я часто находил в сети куски кодов, из которых собиралось предлагаемое мне нерабочее решение.


        1. krote
          06.08.2023 14:18

          так и человек не всегда рабочий код выдает ;)


      1. Refridgerator
        06.08.2023 14:18

        Попробуйте попросить GPT алгоритм для быстрого преобразования Хартли (который от Фурье мало чем отличается), и получите именно похожий, даже близко не работоспособный код. GPT даёт рабочий код только для элементарных примитивных задач, которые в него хардкодно заложили. Вы же не думаете, что GPT учился программированию читая книжки Кнута и Страуструпа?


        1. Hardcoin
          06.08.2023 14:18

          У нас очень разные задачи на работе, видимо. Алгоритм Хартли я бы взял из какой-то библиотеки (но не сталкивался с такими задачами).

          которые в него хардкодно заложили

          Не похоже. У меня задачи не сложные, но уникальные, нагуглить код именно с моими особенностями не выйдет.

          GPT учился программированию читая книжки Кнута и Страуструпа

          Думаю. Они наверняка были в обучающей выборке.


          1. Refridgerator
            06.08.2023 14:18
            +1

            Попадалась статья на английском языке, слегка срывающая магические покровы с GPT. Не нужно глубоко лезть в теорию для того чтобы увидеть, что нейросеть — это такая структура данных, просто немного специфическая. Сама по себе она интеллектом не обладает, а её "обучение" есть ничто иное, как просто заполнение данными. Почему нейросеть от Яндекса даже близко не подобралась к GPT, если все технологии открыты и подробно описаны? Да потому что Яндекс не догадался набрать 10000 индусский программистов, согласных работать за еду, для ручной разметки кода в обучающей выборке. Что там ещё есть под капотом у GPT — нам тоже никто рассказывать не будет, и что тоже вполне логично — конкуренция вряд ли поможет отбить инвестиции.


            Синтаксический разбор предложений мы все делали в школе, это не самый сложный процесс и вполне поддаётся формальному описанию. Генераторы правдоподобного текста тоже существовали задолго до GPT, просто никто не пытался преподносить это как что-то особенное.


            1. Hardcoin
              06.08.2023 14:18

              "особенность" тут ни при чём. Людям всё же результат нужен, а никакие генераторы правдоподобного текста такого результата не дают. И формальный синтаксический разбор текста бесполезен, люди десятки лет пытались это сделать, я тоже успел немного повариться в теме.


              1. Refridgerator
                06.08.2023 14:18

                А как, по-вашему, в GPT фильтрация по полит-корректности запросов производится? Вряд ли у GPT есть отдельный канал связи для супер-админов, куда ему говорят типа "если тебя будут просить рассказать что-то плохое про что-то хорошее — не говори. И сиськи тоже запретная тема. И ссылки на пиратский контент тоже нельзя давать".


  1. vagon333
    06.08.2023 14:18
    -1

    Нисколько не знаток, но GPT с наложением personal experience embeddings (личный опыт, психотип, стиль, манера поведения) приближает GPT к человекоподобности. Нет?


  1. VladimirFarshatov
    06.08.2023 14:18

    Оно и так и не совсем так, кмк. :)

    Да, алгоритм выбирает наиболее релевантный ответ, согласно обучению связей в нейросети, что вполне можно представить таким упрощенным способом.

    Но, с другой стороны, открываем словарь Даля и что мы видим? Упс, объяснения одних слов через набор других из .. того же самого словаря. Принимаем эти толкования как наибольшие вероятности, и .. приходим к алгоритму выше путем не сильно сложных мат. преобразований и допущений. Отсюда, словарь, как система обозначений и толкований, приводит к процессу вывода ответа как наиболее вероятного и согласованного с толкованием слов.

    А теперь, внезапно, чем это отличается от человеческого "мышления" (и вообще, есть ли таковое?) или от "выводов чат-гопоты"? ;) По сути, есть некая система обозначений, есть словарь обозначений, есть толкование (правила). Вывод основанный на этом базисе всегда будет верен с т.з. правил и словаря.

    Будет ли это правдой или ложью? Ни тем ни другим, это просто жонглирование словами. Правдой, кмк, оно становится на прохождении фильтра "опыта жизни" и проверки практикой. То есть, если в Сеть заложен реальный опыт - получим его обработку с некой вероятностью на правдивость. Если туда заложены "художественные произведения" - соответствующий стиль усредненных авторов. Ну что можно заложить из форумов Сети или прочих тик-токов .. думаю понятно.

    Весь этот ажиотаж и "прорыв" в технологиях нейросетей, кмк, все острее поднимает иной вопрос, вовсе не про "умность ИИ", а существование "естесственного И" .. такой ли он действительно "И"? :)


  1. krote
    06.08.2023 14:18
    +4

    Извините, но ваша статья никак не про GPT а лишь про более примитивное поколение генераторов, так называемые "бредогенераторы". Про GPT вы написали ровно пол-абзаца, не то что не раскрыв тему но даже не дав понять что вообще понимаете о чем пишете, просто ввернув туда один термин.


  1. domrik
    06.08.2023 14:18
    +1

    Воды налили. Современные LLM подбирают следующее слово смотря не на предыдущее слово, а на весь предыдущий контекст. Гуглите self-attention


  1. kasiopei
    06.08.2023 14:18
    +1

    Водка полезна. Миллионы мужчин не могут ошибаться


  1. Platow
    06.08.2023 14:18

    И так ясно, что там присутствует сэмплинг)


  1. theurus
    06.08.2023 14:18

    Судя по тому как хорошо гпт генерирует тексты, чатится, можно предположить что оно копирует человека, человека видимо как то так же обучают, и работает он так же или очень похоже.


  1. Kahelman
    06.08.2023 14:18

    Похоже вся ясность испарилась, как только вышли за пределы «hello, World”

    Из Википедии:

    Another change for memory management in Zig is that the actual allocation is handled through structs describing the action, as opposed to calling the memory management functions in libc. For instance, in C if one wants to write a function that makes a string containing multiple copies of another string, the function might look like this:

    const char repeat(const char original, size_t times);
    

    In the code, the function would examine the size of original and then malloc times that length to set aside memory for the string it will build. That malloc is invisible to the functions calling it, if they fail to later release the memory, a leak will occur. In Zig, this might be handled using a function like:

    fn repeat(allocator: *std.mem.Allocator, original: []const u8, times: usize) std.mem.Allocator.Error![]const u8;
    

    In this code, the allocator variable is passed a struct that describes what code should perform the allocation, and the repeat function returns either the resulting string or, using the optional type as indicated by the !, an Allocator.Error. By directly expressing the allocator as an input, memory allocation is never "hidden" within another function, it is always exposed to the API by the function that is ultimately calling for the memory to be allocated. No allocations are performed inside Zig's standard library


  1. vedenin1980
    06.08.2023 14:18
    +2

    Очень странный текст, это примерно как написать "ну вы птиц и кальмаров видели, ну вот реактивный самолет боинг это примерно что-то похожее, это такой летающий кальмар с крыльями", потому что все что выше описан не GPT, а те подходы, которые были за десятки лет до него.


    У GPT все намного-намного сложнее (то что описано выше это очень небольшая часть алгоритмов GPT), поэтому иногда он выводит ответы, которые в него не заложены напрямую. Отсюда все выводы статьи очень сомнительны.


  1. theurus
    06.08.2023 14:18

    Стравил двух чатботов между собой, получилось много букв. Читать лень Ж)

    https://telegra.ph/Diskussiya-mezhdu-chat-botom-Google-Bard-i-Claude-AI-08-07