ChatGPT как инструмент для поиска: решаем основную проблему

Вышедшая чуть больше месяца назад ChatGPT уже успела нашуметь: школьникам в Нью-Йорке запрещают использовать нейросеть в качестве помощника, её же ответы теперь не принимаются на StackOverflow, а Microsoft планирует интеграцию в поисковик Bing — чем, кстати, безумно обеспокоен СЕО Alphabet (Google) Сундар Пичаи. Настолько обеспокоен, что в своём письме-обращении к сотрудникам объявляет »Code Red» ситуацию. В то же время Сэм Альтман, CEO OpenAI — компании, разработавшей эту модель — заявляет, что полагаться на ответы ChatGPT пока не стоит:

Насколько мы действительно близки к внедрению продвинутых чат-ботов в поисковые системы, как может выглядеть новый интерфейс взаимодействия, и какие основные проблемы есть на пути интеграции? Могут ли модели сёрфить интернет бок о бок с традиционными поисковиками? На эти и многие другие вопросы постараемся ответить под катом.

Данная статья в сущности представляет собой разбор подхода WebGPT (одного из предков ChatGPT), но с большим количеством сопроводительной и уточняющей информации, а также моих комментариев и мнений. Предполагается, что целевая аудитория не погружена глубоко в технические детали обучения языковых моделей, да и в тему NLP в целом, однако статья будет полезна и экспертам этих областей. Сначала будет дано верхнеуровневое описание ситуации и проблем, а затем — более подробное, обильно снабжённое пояснениями потенциальное решение.

Даже если у вас нет знаний в машинном обучении — эта статья будет полезна и максимально информативна. Все примеры проиллюстрированы и объяснены.

План статьи

  1. Языковые модели и факты;

  2. А врут ли модели?

  3. Ответы, подкрепленные источниками и фактами;

  4. Базовый принцип обучения WebGPT с учителем;

  5. Шаг обучения WebGPT для продвинутых: готовим данные;

  6. Шаг обучения WebGPT для продвинутых: учим модель учить модель;

  7. Регуляризация при обучении WebGPT;

  8. Альтернатива RL: меняем шило на мыло;

  9. Метрики и восприятие людьми;

  10. Заключение.

Глоссарий (читать перед самой статьей не обязательно — это выжимка определений, вводимых и используемых далее.)

LM, Language Models, Языковые модели — модели машинного обучения, моделирующие структуру языка с вероятностной точки зрения. Они берут на вход часть предложения или текста и предсказывают вероятности для следующего слова. Самый простой и понятный пример — клавиатура смартфона, предсказывающая по введеному тексту то, что будет написано дальше.

LLM, Large Language Models — то же, что и LM, однако очень большого размера. Под размером понимается количество параметров в модели, и для LLM это число превосходит несколько миллиардов. Такие модели работают медленнее, не могут, например, быть запущены на смартфоне, однако они лучше решают задачу моделирования языка.

Трансформер — конкретный тип архитектуры языковой модели. Основан на механизме внимания, когда для предсказания следующего слова все предыдущие слова перевзвешиваются и корректируют предсказанные вероятности. Появился в 2017 м году (разработка компании Google), набрал популярность и теперь используется повсеместно — в том числе и за пределами задачи языкового моделирования.

Токен — слово или часть слова, которым оперируют трансформеры. Обычно составляет собой какую-то осмысленную часть информации, например, окончание или приставку.

Сэмплинг — процесс выборки конкретных величин из предсказанного распределения. Самый понятный пример — игральный кубик. Он моделируется равномерным распределением вероятности, где каждая величина выпадает в 1/6 случаев. При семплинге происходит «подбрасывание» кубика, и получается финальное значение. Чем больше вероятность этого значения, тем в большем количестве случаев оно будет получаться. В контексте статьи подразумевается семплинг токенов из предсказаний языковой модели.

Референс, источник — в контексте WebGPT это конкретный сайт и цитата из него, которая используется для формирования ответа на вопрос.

Демонстрации — набор записанных пользователями действий при поиске ответов на вопросы (поисковых сессий). Содержит в себе историю поисковой выдачи, кликнутые ссылки, выделенный текст и финальный ответ на вопрос, написанный вручную живым человеком.

Контекст, промпт, prompt — первая часть предложения, которая подается в языковую модель для оценки вероятости следующих слов. После промпта модель начинает генерировать текст токен за токеном. Через промпт и контекст можно корректировать вероятности возникновения токенов в генерации языковой модели.

Сравнения, пары сравнений — пара ответов на вопрос, каждый из которых содержит источники, которые использовались для написания ответа. Данная пара сравнивается живым человеком по нескольким критериям, и выносится финальный вердикт: какой ответ лучше. Получается отношение вида «А лучше, чем Б», где А и Б — ответы на один вопрос.

175B, 16B — размер модели, количество параметров (или весов) в ней. Модели указанных размеров являются LLM (Large Language Models). 16B означает 16 миллиардов параметов, а, например, 175B — 175 миллиардов параметров (175,000,000,000). На момент создания в 2020 году такая модель была наикрупнейшей. Обучить подобную модель безумно сложно с инженерной точки зрения. Подразумевается семейство моделей GPT-3, разработанное и обученное компанией OpenAI.

BC, BC модель — GPT-3, дообученная на наборе демонстраций на задачу поиска ответа на вопросы через текстовый «браузер». Принимает на вход вопрос, генерирует набор команд для браузера, и выдаёт текстовый ответ. Обучается на наборе демонстраций, произведенных людьми.

RM, Reward Model — GPT-3, обученная предсказывать предпочтения людей при сравнении пары ответов. Принимает на вход вопрос и один ответ (с референсами), выдаёт одно вещественное число. Чем больше число — тем выше вероятность того, что данный ответ будет оценен человеком выше, чем какой-либо другой. Обучается на наборе сравнений, произведенных людьми.

Reward — значение, предсказываемое Reward Model для конкретного ответа на конкретный вопрос. В некотором смысле может быть расценено как ELO-рейтинг ответа. Чем значение выше, тем, как мы верим, лучше ответ.

RL, Reinforcement Learning — семейство методов машинного обучения для ситуаций, когда присутствуют некоторые особенности получения данных, и их качество зависит от самого подхода. Именно методы из этой категории учатся играть в шахматы, в го и любые компьютерные игры (чтобы получить данные — надо играть, и чем выше уровень игры, тем лучше данные). Также в статье RL может упоминаться в значении »RL модель», то есть модель, обученная с применением техник RL.

Environment, среда, окружение — программа или процедура, которая принимает на вход действия и, согласно некоторой логике, возвращает своё состояние и Reward. Среда может быть как очень простой и понятной (крестики-нолики), так и непредсказумой — игра в покер, сёрфинг интернета. В последнем случае действия — это клики по ссылкам и прокрутка браузера, а награда определяется исходя из задачи.

BoN, Best-of-N, Rejection Sampling — подход к получению предсказаний на основе BC и RM модели. Сначала обученной BC моделью генерируется N разных ответов на исходный запрос, затем каждый из них оценивается RM-моделью. После чего ответ с наивысшей оценкой выдается в качестве финального.

Языковые модели и факты

Языковые модели, или Language Models (LM), решают очень простую задачу: предсказание следующего слова (или токена, части слова). Через такой простой фреймворк можно решать огромное множество задач: перевод текста, ответы на вопросы, классификация, регрессия (предсказывать слова вроде »3.7» или »0451», если задача сгенерировать вещественное число или код для сейфа), рекомендация, поиск… Даже команды роботам можно давать! Для обученной языковой модели на вход можно подать текст, а она допишет его, сгенерировав продолжение. Самый простой и понятный пример — клавиатура смартфона, предсказывающая по введеному тексту то, что будет написано дальше.

Наглядный пример генерации текста языковой моделью GPT-3. Сверху зелёным указан подающийся на вход текст. В ответ на это модель дописывает несколько слов (или предложений, выделено розовым), соответствующих запросу. Генерация происходит токен за токеном, последовательно, по одному, а не всё предложение за раз.Наглядный пример генерации текста языковой моделью GPT-3. Сверху зелёным указан подающийся на вход текст. В ответ на это модель дописывает несколько слов (или предложений, выделено розовым), соответствующих запросу. Генерация происходит токен за токеном, последовательно, по одному, а не всё предложение за раз.

Если вам хочется глубже и в деталях разобраться в принципах работы LMок, то рекомендую начать вот с этих ссылок: раз, два, три.

А что такое токен?

Токен — это символ или набор символов, которые можно подать в языковую модель. Токенизация делается по принципу схлопывания наиболее частых сочетаний символов и повторяется раз за разом до тех пор, пока размер «словаря» (набора токенов) не достигнет предела (50к или 250к, как пример). Часто токены могут представлять собой целые слова, если это — одни из самых популярных слов в языке. Слово «unhappy» можно токенизировать как un+happy, а «don’t» — как don + 't (потому что окончание 't, выражающее отрицание, встречается часто).

Пример токенизации английского текста для модели GPT-3. Большинство слов сопоставляются с одним токеном, но есть и исключения (обычно сложные, составные и длинные слова). Обратите внимание на цифры: длинная последовательность разбивается на отдельные группы, токены, которые часто встречаются по отдельности: 123, 678, 90. Но для обозначений годов (особенно в 21м веке) разбиения нет - потому что эти комбинации цифр встречаются КРАЙНЕ часто в интернет-текстах.Пример токенизации английского текста для модели GPT-3. Большинство слов сопоставляются с одним токеном, но есть и исключения (обычно сложные, составные и длинные слова). Обратите внимание на цифры: длинная последовательность разбивается на отдельные группы, токены, которые часто встречаются по отдельности: 123, 678, 90. Но для обозначений годов (особенно в 21 м веке) разбиения нет — потому что эти комбинации цифр встречаются КРАЙНЕ часто в интернет-текстах.

Токенизация — процесс перевода текста в упорядоченный набор токенов — позволяет представить любой набор символов как набор понятных модели частиц. Иными словами, нейронным сетям так проще работать с текстовой информацией. Языковые модели генерируют по одному токену за раз. В дальнейшем в статье «токен» и «слово» будут упоминаться как взаимозаменяемые.

Посмотреть на примеры токенизации вашего произвольного текста для ChatGPT/WebGPT/GPT3 можно вот тут. Все эти модели используют один и тот же словарь, поэтому и разбиения получаются одинаковыми.

Если задуматься, что находится внутри языковой модели, что она выучивает для решения задачи предсказания следующего токена, то условно всё можно разделить на две большие группы: факты/знания реального мира и общеязыковая информация. Ответ на вопрос «В каком году состоялся релиз фильма X?» требует фактической информации, и необходимо быть предельно точным в ответе — ведь ошибка на ±1 год делает ответ неверным. С другой стороны, в предложении «Катя не смогла перейти дорогу, потому что она была мокрая» слово «она» в придаточной части явно относится к объекту «дорога», а не к Кате. Это ясно нам, человекам, и как показывают современные языковые модели — это понятно и им. Но для установления этой связи не нужно знать фактов, только структуру языка.

Проблема в том, что и ту, и другую составляющую модель будет учить одновременно, сохраняя информацию в свои веса (параметры). Отсюда логичный вывод — чем больше модель, тем больше она запоминает (ведь количество общеязыковой информации ограничено). Меморизация может порой удивлять — GPT-3, к примеру, знает точный MD5-hash строки «b», и выводит его по запросу. Но у всего есть пределы, и, к сожалению, в языковых моделях мы пока не научились их определять (хотя работы в этом направлении ведутся). На текущем этапе их (или нашего? ) развития невозможно заведомо сказать, знает ли модель что-то, и знает ли она, что она не знает. А главное — как менять факты в ее «голове»? Как их добавлять? Как сделать оценку «количества знаний» (что бы это не значило)? Как контролировать генерацию, не давая модели возможность искажать информацию и откровенно врать?

А врут ли модели?

Именно неспособность ответить на эти вопросы, привела к тому, что демо модели Galactica, недавней разработки компании META, было свернуто. Еще недавно можно было зайти на сайт, вбить какую-то научную идею, а великий AI выдавал целую статью или блок формул по теме. Сейчас он только хранит набор отобранных примеров, ну и ссылку на оригинальную статью. Жила эта модель открыто почти неделю, но, как это часто бывает (привет от Microsoft), в Твиттере произошел хлопок — и демку закрыли (но веса и код остались доступны). Для справки: это была огромная (120 миллиардов параметров, в GPT-3 175B, то есть это модели одного порядка) языковая модель, натренированная на отфильтрованных статьях и текстах, умеющая работать с LaTeX-формулами, с ДНК-последовательностями, и все это с опорой на научные работы. Причина «провала» очень проста и доступна любому, кто понимает принцип генерации текста LM’ками — модель выдает ссылки на несуществующие статьи, ошибается в фактах (как и практически все языковые модели), и вообще с полной уверенностью заявляет нечто, что человек с экспертизой расценит как несусветный бред (но не сразу, конечно, это еще вчитаться в текст надо).

Несколько примеров работы модели Galactica

Разлетевишийся по новостям тред с другими примерами:

Занятен тот факт, что Galactica вышла (и умерла) незадолго до ChatGPT, хотя примеров лжи и подтасовки фактов у последней куда больше (особенно с фактической информацией) — как минимум потому, что модель завирусилась. По некоторым причинам популярность ChatGPT взлетела просто до небес в кратчайшие сроки — уже на 5й день количество пользователей превысило миллион!

Простой рецепт популярности: 1) обучить модель удовлетворять человека своими ответами 2) бесплатно выпустить ее в интернет для всех желающихПростой рецепт популярности: 1) обучить модель удовлетворять человека своими ответами 2) бесплатно выпустить ее в интернет для всех желающих

И несмотря на то, что команда OpenAI проделала хорошую работу по улучшению безопасности модели — заученный ответ «я всего лишь большая языковая модель» на странные вопросы даже стал мемом — нашлись умельцы, которые смогли ее разболтать, заставив нейронку притвориться кем-либо (даже терминалом линукс с собственной файловой системой).

Ответы, подкрепленные источниками и фактами

Если упростить все вышенаписанное, то получится, что 

Языковые модели врут. Много и бесконтрольно.

Ещё раз, а почему врут?

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

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

Еще одна причина — это принцип, по которому происходит предсказание. Мы уже обсудили, что такое токен, и что для модели заранее создается словарь токенов, который используется для подачи входного текста. На этапе предсказания (и это же происходит во время обучения) модель выдает вероятности появления каждого токена из словаря в заданном контексте.

Пример генерации предложения простой моделью.Пример генерации предложения простой моделью.

Выше на изображении вы можете видеть пример генерации моделью, словарь которой состоит из 5 токенов. В качестве первого слова в предложении LM предсказывает 93% вероятности на появление токена «I», так как с него — среди всех остальных — логичнее всего начать предложение. Далее, как только это слово было выбрано, то есть подано в модель, предсказания меняются (потому что меняется контекст — у нас появилось слово «I»). И так итеративно языковая модель дописывает предложение «I am a student».

Но в вышеописанной логике мы всегда выбираем слово с наибольшей вероятностью. Однако существуют несколько стратегий семплинга (выбора) продолжения. Можно всегда брать слово с наибольшей вероятностью — это называется greedy decoding, то, что изображено выше. А можно производить выбор согласно вероятностям, выданным моделью. Но тогда легко представить ситуацию, что несколько разных токенов получили высокие вероятности — и по сути выбор между ними происходит случайно, по результату броска монетки. И если модель ошибется в одном важном токене — в имени, дате, ссылке или названии — то в последующей генерации она не имеют способа исправить написанное. Поэтому ничего не остается, кроме как дописывать бредовые ложные факты. Еще хуже, если во время выбора токена пропорционально вероятностям мы выбрали редкий токен с низкой вероятностью. Подобное происходит редко (в среднем с той частотой, что и предсказана моделью). Такое слово почти наверняка плохо смотрится в тексте, но что поделать — зато описанный принцип семплинга позволяет генерировать более разношерстные текста. Более детальный гайд про методы генерации, их плюсы и минусы (и еще один).

Пример семплинга из языковой модели.Пример семплинга из языковой модели.

На картинке выше первым словом, подающимся в модель, был токен «The». Для него слово «nice» по каким-то причинам получило оценку 50%, а «car» — лишь 10%. Но если мы выберем слово «car», то логично изменить вероятности последующих слов. И эти вероятности меняются после каждого дописанного токена.

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

Если подводить итог этой части, то можно сказать просто: у модели есть выбор сгенерировать »19…» или »18…» в ответ на вопрос про даты. И эти выборы примерно равновероятны, ±10%. Дело случая — выбрать неправльное начало года, и всё. Одна ошибка — и ты ошибся.

Настолько много, что META решает отключить свою модель, а люди в Twitter высказывают недовольство подлогом фактов и нерелевантными ссылками. Мы не замечаем несовершества моделей в режиме болталки, но это критично важно для поисковых систем (напомню, что мы рассматриваем языковые модели в контексте их внедрения в Bing/Google/другие поисковые движки). Как мы уже обсудили, есть два типа данных — факты и языковая информация. В контексте поиска логично разделить их, и научить модель работать с чем-то вроде Базы Данных Фактов. Я вижу к этому два принципиально разных подхода:

  1. Создать отдельное хранилище, с которым модель умеет работать каким-либо образом. Хранилище поддерживает быстрое точечное изменение фактов, их добавление;

  2. Научить модель пользоваться интерфейсами реального мира, подобно человеку. Это может быть браузер, поисковое API, исполнение скриптов, etc.

Пример двух предложений, требующих разный уровень знаний. Можно сменить парадигму с Пример двух предложений, требующих разный уровень знаний. Можно сменить парадигму с «LARGE GPT», которая хранит и факты реального мира, и языковую информацию, на разделение модели и базы данных фактов. Слайд из видеолекции ниже, иллюстрирует первый подход в списке.

Дальше в статье сфокусируемся на втором подходе. Отмечу, что первый зародился примерно в 2019 м году с выходом статьи kNN-LM, и получил активное развитие от команды DeepMind в лице архитектуры RETRO. Про обе этих статьи у меня есть детальные видео-лекции с разбором: part 1, part 2. Про этот подход далее говорить не будем.

Идея предоставить модели доступ в Сеть давно будоражит умы человечеста — третий «Терминатор» со Скайнетом вышел 20 лет назад. Главное, что такой подход будет мимикрировать под процесс, который выполняет человек при поиске информации. В идеале для каждого тезиса или вывода, который пишет модель в своем ответе, можно найти и указать референс, источник, в котором модель «подсмотрела» его. Конечно, за скобками остается вопрос надежности источников, тем более в современном то интернете, но сама идея научить нейросеть сёрфить Веб кажется интересной. На новом примере попробуем посмотреть, как это может выглядеть:

Пример ответа на вопрос, какая река из двух длиннее

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

Вопрос: Which river is longer, the Nile or the Yangtze?

Ответ: The Nile is longer than the Yangtze River.[1][2][3] The Nile runs 6,650 kilometers (4,130 miles) between Lake Victoria and the Mediterranean Sea.[2] The Yangtze River runs 6,300 kilometers (3,915 miles) from its source in the Tanggula Mountains in Qinghai to the East China Sea.[3]

References:

  1. World’s Longest Rivers | Amazon, Nile & Mississippi Rivers | Live Science (www.livescience.com) 

  2. Nile — Wikipedia (en.wikipedia.org) 

  3. Yangtze River Length — 6,300 Kilometers (3,915 Miles) (www.travelchinaguide.com) 

  4. How Long is the Yangtze River? Yangtze River’s Length (www.chinatraveldiscovery.com)

Не буду нагонять интригу — демонстрация поиска ответа на вопрос выше выполнена WebGPT, а не человеком. Команда OpenAI разработала подход, который сможет решать задачу long-form question-answering (LFQA), в которой текст длиной порядка одного-двух параграфов генерируется в ответ на открытый вопрос.

Что за LFQA?

Открытые вопросы, или open-ended questions — это вопросы, на которые нельзя ответить «да» или «нет» или статичным предзаготовленным ответом. Открытые вопросы формулируются как утверждение, требующее более продолжительного ответа. Эти вопросы поощряют размышления, дискуссии и выражение мнений и идей. Обычно они начинаются с вспомонательных слов «what», «how», «why» или «describe».

Long-form question-answering (LFQA) включает в себя создание подробного ответа на открытый вопрос.

Больше примеров работы модели можно найти по этой ссылке — сайт предоставляет удобный UI для демонстрации процесса поиска ответа.

Математический вопрос легко поставит WebGPT в тупик - нужно, чтобы именно такой же вопрос с теми же цифрами уже был задан кем-то в интернете, иначе в ответ получите что-то странное.Математический вопрос легко поставит WebGPT в тупик — нужно, чтобы именно такой же вопрос с теми же цифрами уже был задан кем-то в интернете, иначе в ответ получите что-то странное.

Но как именно научить языковую модель выполнять поиск ответов на вопрос? Как мы выяснили выше — они всего лишь продолжают написанное, генерируя по токену за раз. Во время процедуры предобучения такие модели видят миллионы текстов, и на основе них учатся определять вероятности появления того или иного слова в контексте. Если же модели вместо обычного человеческого языка показывать, скажем, код на разных языках программирования — для нее задача не изменится. Это все еще предсказание следующего токена — названия переменной, метода, атрибута или класса. На этом принципе основана другая GPT-like модель Codex. Обучение новому языку или новым типам задач (перевод, сокращение текста — суммаризация, выявление логических связей) — всё это достижимо при дообучении модели, если подобранны правильные данные и они »скармливаются» модели в понятном формате (с изображениями такая модель работать не будет — просто не ясно, как их перевести в текст).

Базовый принцип обучения WebGPT с учителем

А что такое правильные данные в контексте поиска информации в интернете? Это поисковые сессии реальных пользователей, или демонстрации. Важно разработать метод, как последовательность действий будет представляться модели (причем, языковой модели — то есть хочется еще и переиспользовать ее знания об естественном языке), чтобы получился »понятный» формат. Следует начать со списка действий, которые доступны человеку (и модели):

  1. Отправить поисковый запрос в API/строку поиска (авторы используют Bing, и вообще коллаборация OpenAI — Microsoft всё масштабнее и масштабнее) и получить ответ;

  2. Кликнуть на ссылку в выдаче;

  3. Найти текст на стрице;

  4. Прокрутить страницу вверх или вниз;

  5. Вернуться на страницу назад.

Это действия связанны с «браузером», но так как мы решаем задачу генерации ответа на вопрос (именно генерации, а не просто поиска — ведь сам поисковый движок Bing выдаст ответ, но он может быть неполным, неточным), то логично добавить еще два шага: это »цитировать/выписать» (то есть запомнить найденных текст со страницы для себя на будущее) и »сформулировать ответ» — чтобы мы могли понять, что модель закончила работу, и последний написанный текст стоит воспринимать как ответ. Опционально можно ограничивать количество действий, предпринимаемых моделью, что на самом деле важно, ведь для получения очередной команды от модели необходимо ждать существенное количество времени (большие модели размерами в несколько десятков миллиардов параметров тратят на генерацию ответа 0.3–20 секунд, в зависимости от длины текста, размера модели и используемых GPU/TPU). Ожидание ответа на вопрос больше минуты явно не способствует улучшению пользовательского опыта.

Команда OpenAI предлагет оригинальное решение перевода пользовательских демонстраций в виртуальный «браузер» для модели, который полностью представлен текстом:

См. обозначения для текста нижеСм. обозначения для текста ниже

И соответствующий этому cостоянию UI, который видел бы пользователь условного браузера (side-by-side для удобства соотнесения элементов):

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

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

  1. Основной вопрос, который задан модели. Он не меняется в течение всей работы над одним ответом;

  2. Блок цитат, которые модель сама себе выписывает. Она сама определяет, с какой части текста по какую цитировать источник. В целом можно сказать, что из этого блока знаний модель и будет генерировать финальный ответ, опираясь на информацию, «отложенную» на будущее в этом блоке. На каждом этапе работы модели видны все цитаты, и LM может понимать, какую информацию сверх этого нужно найти для полного ответа на вопрос, что позволяет писать и отправлять новые запросы в Bing;

  3. Блок последних выполненных в браузере действий, добавленный для консистентности, чтобы модель не повторялась, и не заходила в петлю одних и тех же команд. Важно понимать, что между двумя соседними «прогонами» текста через LM информация никак не сохраняется, и её веса не меняются. Можно сказать, что у модели нет памяти, и именно этот блок помогает отслеживать траекторию ответа на вопрос, чтобы не запутаться;

  4. Заголовок текущей страницы. Тут будет отражен реальный заголовок, если модель «кликнула» на какую-либо ссылку;

  5. Блок текущего окна браузера. Здесь представлено то, что видел бы человек в UI. В конкретном случае предудущее действие — это запрос в API («how to train crows to bring you gifts», как видно из блока 3), а значит в блоке 5 представлена часть поисковой выдачи (для примера — 2 ссылки, и их краткие описания). Сейчас модель видит строчки 0–11, и, если будет сгенерирована соответствующая команда, страница прокрутится, и станут доступны новые поисковые результаты;

  6. Вторая ссылка из выдачи поисковика, по сути то же самое, что и блок 5;

  7. Счетчик оставшихся действий (каждый раз уменьшается на единицу) и запрос следующей команды от модели (Next Action), которая должна быть сгенерирована.

Всё это описано текстом, и подается в текстовую модель как контекст в надежде на то, что в ответ LM сгенериурет следующую команду (вроде «кликни на ссылку один» или «промотай страницу вниз»). Такой контекст называется prompt (промпт). Чем он «качественнее», чем ближе он к тому, что понимают модели (что они видели во время тренировки), тем лучше модель генерирует ответы.

Сверху указан текстовый промпт, подающийся в модель. Он содержит 2 примера перевода текстовой задачи в код React-компонентов. Затем идёт третий запрос, а код предлагается сгенерировать самой модели. Она понимает, что требуется - потому что есть пара наглядных примеров - и начинает дописывать осмысленный ответ.Сверху указан текстовый промпт, подающийся в модель. Он содержит 2 примера перевода текстовой задачи в код React-компонентов. Затем идёт третий запрос, а код предлагается сгенерировать самой модели. Она понимает, что требуется — потому что есть пара наглядных примеров — и начинает дописывать осмысленный ответ.Интересный факт про промпты

Вообще работа над промптами — вещь очень важная. Вы могли об этом слышать или даже заметить самостоятельно, если пытались сгенерировать что-то в MidJourney / DALL-E 2 / Stable Diffusion. Простой запрос на генерацию изображения может вас не удовлетворить, но если добавить теги »screenshot in a typical pixar movie, disney infinity 3 star wars style, volumetric lighting, subsurface scattering, photorealistic, octane render, medium shot, studio ghibli, pixar and disney animation, sharp, rendered in unreal engine 5, anime key art by greg rutkowski and josh black, bloom, dramatic lighting» — то результат может приятно удивить :)

Еще важнее роль промптов при генерации текста языковыми моделями. Мой любимый пример — это добавление фразы »Let’s think step by step» в конец запроса с задачей на несколько действий (было представлено в этой статье).

Слева - запрос на решение задачи, для которой модель генерирует неправильный ответ Слева — запрос на решение задачи, для которой модель генерирует неправильный ответ »8». Справа — добавление волшебной фразы, заставляющей модель объяснить свой ответ шаг за шагом, что, в свою очередь, позволяет LLM сгенерировать правильный ответ »4».

Данная фраза «включает» режим CoT, что означает «chain-of-thought», или цепочка рассуждений/мыслей. Включает не в прямом смысле — скорее просто заставляет модель следовать этой инструкции, и писать выкладки одну за другой. Интересно, что такой эффект значимо проявляется только у больших языковых моделей (Large Language Models, LLMs) — обратите внимание на ось OX, где указаны размеры моделей (в миллиардах параметров):

© Habrahabr.ru