Toolformer. Использование инструментов нейросетями

Мне хотелось к этому посту придумать кликбейтный заголовок в духе «Оно живое!», но что есть, то есть. Зато содержание в самом деле интересное: сегодня поговорим о том, как модели учатся использовать инструменты. В основе поста статья «Toolformer: Language Models Can Teach Themselves to Use Tools» («Toolformer: Модели могут научиться использовать инструменты») прошлого года.
Мы с вами уже говорили о том, какие есть у больших языковых моделей ограничения, теперь поговорим о том, что можно с ними сделать.

Важное отступление: этот пост был написан до того, как вышла GPT o1 (Strawberry), которая умеет многое из того, что не умели предыдущие версии. Есть прекрасное видео, которое вы можете посмотреть, чтобы познакомиться с ее способностями. Тем не менее, разговор об использовании инструментов все равно важен и актуален. Тема инструментов, так сказать, отнюдь не исчерпана.

Краткое введение

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

  • понимать, что нужно обратиться к инструменту;
  • выбрать нужный инструмент;
  • воспользоваться им корректным образом.

Задача со звездочкой – выжить в процессе создания тренировочных данных (в идеале, вообще не привлекая людей).
Авторы придумали использовать контекстное обучение, идея которого заимствована из статьи «Language Models are Few-Shot Learners» («Языковые модели обучаются на примерах»). Обычно обучение для решения конкретной задачи предполагает сбор данных, ручную или частично автоматизированную разметку (например, написание правильных ответов на вопросы) и обучение, которое занимает некоторое количество времени. Обучение на примерах – это ровно то, чем кажется. Модели предлагается несколько примеров с правильными вариантами ответов. Можно создать один такой пример, пять или сто – решение принимается методом проб и ошибок. В упомянутой выше статье примеров было от 10 до 100, авторы использовали модель GPT-J. Результаты получились не прям блестящие, но интересные и стоящие внимания.
Так вот, авторы статьи про Toolformer использовали этот подход: передали модели набор примеров, написанных человеком (небольшой набор), и предоставили ей на основании этих примеров разметить набор данных большего размера (то есть, наделать себе самой тренировочный датасет). Исходные примеры и полученный набор данных представляют собой небольшие тексты с пометкой о том, какой именно инструмент и каким образом нужно использовать.

<i>(Примеры, использованные для обучения. О том, что находится в двух последних столбцах, мы поговорим немного позже)</i>
(Примеры, использованные для обучения. О том, что находится в двух последних столбцах, мы поговорим немного позже)

Потом модель обучили на полученном наборе данных – и получили вдохновляющий результат.

Как это сделали

Вернемся ненадолго к таблице выше. В примерах представлен фрагмент текста вроде такого: «Если бы на Венере была атмосфера, похожая на атмосферу Земли, средняя температура была бы равна 499 градусов по Кельвину (это почти 226 по Цельсию) вместо 735 градусов по Кельвину (примерно 462 градуса по Цельсию), что в [далее вызван инструмент – калькулятор] жарче, чем должно быть. С помощью токенов <API> … </API> обозначен, собственно, вызов инструмента, который выполняет необходимое действие. В данном случае, рассчитывается соотношение температур на Венере при земной атмосфере и ее собственной. В качестве других инструментов используется календарь, чтобы узнать сегодняшнюю дату; Википедия, чтобы уточнить нужный факт, и некоторые другие.
Во втором столбце указано значение разницы некоторых загадочных L, а в третьем – полезность использованного запроса в API. L+ и L- – это функции потерь. Алгоритм здесь вот какой:

  • делаем запрос без вызова дополнительных инструментов, получаем ответ, считаем кросс-энтропию (cross-entropy loss). Я не буду расписывать формулу кросс-энтропии, с вашего позволения, подробнее про нее можно почитать, например, здесь. Пока поверьте мне на слово: кросс-энтропия показывает, насколько хорошо модель справляется с написанием продолжения фразы, которое следует после вызова инструмента (то есть, после блока <API> … </API>) или без него;
  • делаем запрос с вызовом инструмента, получаем ответ, считаем-кросс-энтропию;
  • сравниваем, что получилось: если разница «без использования инструмента» и «с использованием инструмента» выше заранее установленного порога, использование инструмента было полезным и улучшило результат.

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

  • взяли обычный набор текстов;
  • дали модели несколько примеров вызова внешних инструментов;
<i>(Пример примеров)</i>
(Пример примеров)
  • модель нагенерировала больше запросов;
  • авторы эти запросы прогнали с использованием доступных API и отдельно написанных скриптов;
  • посчитали кросс-энтропию и полезность, как описано выше;
  • получили новый набор данных;
  • испытали радость.

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

Что получилось

В экспериментах сравнили четыре варианта моделей:

  • GPT-J – в стандартной комплектации без дополнительного обучения;
  • GPT-J + CC – модель из пункта выше, обученная на наборе данных, который еще не включал в себя запросы ко внешним инструментам;
  • Toolformer – модель из первого пункта (GPT-J), обученная на наборе текстов, в которые уже включили запросы к внешним инструментам;
  • Toolfromer с выключенными запросами к внешним инструментам.

На большинстве заданий для оценки еще использовали OPT и GPT-3 – модели гораздо большего размера, чем основные четыре варианта.
Задания были разные: закончить предложение, решить математическую задачу, ответить на вопрос и так далее.
Результаты получились впечатляющие: Toolformer превзошел конкурентов. Конечно, у этой работы есть свои ограничения, которые сами авторы перечисляют в статье: Toolformer не умеет вызывать несколько инструментов последовательно и не может сам запустить свои запросы, для этого нужно прикрутить к нему отдельный механизм. С некоторыми инструментами, например, с калькулятором, процент успешных взаимодействий достаточно низкий. Тем не менее, это важный шаг вперед. Не единственная работа по обучению языковых моделей использованию дополнительных инструментов, но очень интересная и важная.
Я, кажется, все свои посты заканчиваю этой фразой, но тема очень интересная, за ней нужно следить. Я, собственно, и собираюсь этим заниматься здесь и у себя в телеграме, где я также пишу про разные инструменты и про многие тенденции в развитии ИИ.

1 комментарий

Модели могут научиться использовать инструменты - ну что обезьяны научились, почему бы нейронке на научиться

Ответить