Toolformer: Language Models Can Teach Themselves to Use Tools
Очередная интересная статья про то, как "приварить" инструменты (tools) внешнего мира к LLM-ке. Тут идёт речь про API-вызовы внешних сервисов, запросы к которым генерирует сама языковая модель. Правда здесь модель дообучают на синтетически собранном датасете (об этом ниже), а не просто творят магию с помощью промпта. Самая большая обучаемая моделька GPT-J, 6B параметров.
Итак,
1) Определим набор тулов, которые хотим добавить. Например: перевод, календарь (доступ к датам и их разницам), калькулятор, поиск в вики, QA-система. Странно, что python-интерпретатор не добавили - было бы интереснее!
2) Для каждого инструмента напишем промпт, который указывает модели, как с этим тулом обращаться (см. картинку), давая 1-5 примеров. Промпт содержит специальный токен <API>, который показывает, что тут начинается обращение к тулу.
3) Затем на собранном датасете прогоняем модель, и на каждом токене замеряем вероятность токена <API>. Если она большая - значит модель "хочет" вызвать инструмент. Отбираем такие позиции эвристиками (не больше K вызовов на запрос) + по порогу вероятности
4) Генерируем, собственно, запросы в режиме few-shot - то есть у нас есть несколько примеров в промпте, и для текщущего нового примера модель сама дописывает, какой API-вызов бы нужно было сделать
5) После вставляем API-запрос + результат обратно в текст ответа на вопрос. Фильтруем датасет по эвристике "вставленная конструкция уменьшила лосс на генерируемых токенах как минимум на L", то есть ответ, полученный тулом, высоко оценен самой же НЕДООБУЧЕННОЙ моделью.
Тут ещё раз, это важно: добавление вызова API и его результата снижает loss как минимум на L по сравнению с тем, чтобы не выполнять никаких вызовов API или не получать от них никакого результата.
6) На полученном датасете в обычном режиме файнтюним модельку. Всё!
Вот так по сути без тренировочной выборки (она сама собирается + фильтруется, нужны просто наборы текстов с фактами, которых миллионы на википедии или в новостях) получается новая модель.
Ну и по метрикам - на специальных датасетах (факты и вопросы + математика + вопросы на разных языках), где такие тулы могут помочь, 6B модель обгоняет GPT3.5, но не всегда ☹️ так что LLM еще поборются за свои размеры!
За ссылку спасибо @denissexy
А в комментариях можно дополнительно посмотреть картинки!
Очередная интересная статья про то, как "приварить" инструменты (tools) внешнего мира к LLM-ке. Тут идёт речь про API-вызовы внешних сервисов, запросы к которым генерирует сама языковая модель. Правда здесь модель дообучают на синтетически собранном датасете (об этом ниже), а не просто творят магию с помощью промпта. Самая большая обучаемая моделька GPT-J, 6B параметров.
Итак,
1) Определим набор тулов, которые хотим добавить. Например: перевод, календарь (доступ к датам и их разницам), калькулятор, поиск в вики, QA-система. Странно, что python-интерпретатор не добавили - было бы интереснее!
2) Для каждого инструмента напишем промпт, который указывает модели, как с этим тулом обращаться (см. картинку), давая 1-5 примеров. Промпт содержит специальный токен <API>, который показывает, что тут начинается обращение к тулу.
3) Затем на собранном датасете прогоняем модель, и на каждом токене замеряем вероятность токена <API>. Если она большая - значит модель "хочет" вызвать инструмент. Отбираем такие позиции эвристиками (не больше K вызовов на запрос) + по порогу вероятности
4) Генерируем, собственно, запросы в режиме few-shot - то есть у нас есть несколько примеров в промпте, и для текщущего нового примера модель сама дописывает, какой API-вызов бы нужно было сделать
5) После вставляем API-запрос + результат обратно в текст ответа на вопрос. Фильтруем датасет по эвристике "вставленная конструкция уменьшила лосс на генерируемых токенах как минимум на L", то есть ответ, полученный тулом, высоко оценен самой же НЕДООБУЧЕННОЙ моделью.
Тут ещё раз, это важно: добавление вызова API и его результата снижает loss как минимум на L по сравнению с тем, чтобы не выполнять никаких вызовов API или не получать от них никакого результата.
6) На полученном датасете в обычном режиме файнтюним модельку. Всё!
Вот так по сути без тренировочной выборки (она сама собирается + фильтруется, нужны просто наборы текстов с фактами, которых миллионы на википедии или в новостях) получается новая модель.
Ну и по метрикам - на специальных датасетах (факты и вопросы + математика + вопросы на разных языках), где такие тулы могут помочь, 6B модель обгоняет GPT3.5, но не всегда ☹️ так что LLM еще поборются за свои размеры!
За ссылку спасибо @denissexy
А в комментариях можно дополнительно посмотреть картинки!