February 28, 2023

Искусственный интеллект может обучать себя сам! Языковые модели знакомят с Toolformer

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

Ранее для обучения больших языковых моделей, таких как GPT-3 и ChatGPT на её основе, требовалось собрать датасеты гигантских размеров. Но количество текстовой информации в сети, доступной для сбора в датасеты конечно. К тому же, если мы хотим улучшить результаты работы модели в какой-то узкой области, нам нужно гораздо больше данных под данную узкую область.

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

В своей работе специальная модель, Toolformer, обучается взаимодействовать со внешними API, решая когда это делать, что именно получать, с какими параметрами и как встраивать результат. Причём учится она в self-supervised режиме с ограниченным числом человеческих аннотаций.

Входы и выходы API представляются текстом и описываются кортежом (ac, ic), где ac это имя API, а ic входные данные. Результат вызова API r.
Для оформления таких вызовов используются словарные токены [”, “]” и “->”, так что строка с вызовом выглядит как “[ac(ic)]”, а строка с результатом как “[ac(ic)->r]”.

Процедура обучения:

В качестве базовой модели используется GPT-J с 6.7B параметров. На входе есть некий датасет текстов (подмножество CCNet). Он конвертится в датасет, аугментированный вызовами внешних API.

Это делается в три шага:

1. Модель сэмплит вызовы потенциальных API через примеры, заданные в in-context learning (внутри промпта).

Есть набор заранее заданных примеров обращений к внешним API через запросы: Question Answering (файнтюненный на Natural Questions retrieval-augmented Atlas), Calculator (просто четыре базовые операции), Wikipedia Search (специальный поисковик, выдающий сниппеты по википедии через BM25 retriever), Переводчик (NLLB 600M), календарь(просто возвращает текущую дату для контексту).
То есть не проблема добавить по своим примерам другие API.

Далее для каждой позиции текста на входе вычисляется вероятность генерации токена “[“, задающего начало API вызова. Оставляются все позиции, для которых такая вероятность выше заданного порога (в работе τs = 0.05) и только топовые k=5 из них.

Далее для каждой позиции сэмплятся возможные имена апишек (m = 5).

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

2. Выполняются вызовы API.

Тут ничего особенного, специальный внешний код на питоне делает что надо и возвращает результат.

3. Результат вызова фильтруется по критерию помощи в предсказании следующего токена (стандартная задача обучения языковой модели).

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

Если разница (L-) - (L+) больше заданного порога (τf = 1.0), то такой вызов значимо уменьшает лосс и полезен. Вызовы, не прошедшие такой порог, убираются.

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

В зависимости от порога и типа апишки получились тысячи и десятки тысяч вызовов.

Во время инференса мы обнаруживаем, что модель начала генерить последовательность вызова апишки, и после токена “->” приостанавливаем генерацию, дёргаем апишку, и вставляем в строку её результат с закрывающим токеном “]”, после чего продолжаем генерацию.

Обученную модель проверяли в режиме prompted zero-shot, то есть чисто промпт без примеров. Доп.модификация также разрешала модели дёргать апишку не только в случае, когда токен начала API-вызова имел максимальную вероятность, но и когда он был среди 10 наиболее вероятных.

Посравнивались на подмножествах SQuAD, GoogleRE и T-REx из бенчмарка LAMA. Toolformer значительно лучше базовых GPT-J, а также более крупных OPT (66B) и
GPT-3 (175B).

На датасетах с математическими задачками он также существенно лучше. Что забавно, там также неплохо прокачался и Toolformer с отключенными вызовами апишек, видимо во время дообучения прокачал свои математические способности.

На QA он слабее самого большого GPT-3, но заметно выше соразмерных бейзлайнов, а также лучше OPT.

На MLQA не везде лучше базового GPT-J, но что интересно большие OPT и GPT-3 здесь тоже заметно хуже маленького GPT-J, вероятно потому что GPT-J обучался на более мультиязычном корпусе.

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

Perplexity на задаче языкового моделирования от добавления апишек особо не просело.

Также поглядели на каком размере модели способность использовать апишки начинает работать, оказалось что начиная с модели на 775M.

Работать ещё есть над чем. Текущая модель пока не умеет делать цепочки вызова тулов, не может также интерактивно работать с тулом (например, уточнять запрос или браузить по страницам выдачи). В целом подход пока ещё sample-inefficient, на датасете из 1M+ документов он обнаруживает лишь несколько тысяч примеров полезного использования калькулятора.

Но направление всё равно интересное, особенно когда нормально работает не с супер гигантской моделью.

* Внесена в перечень общественных объединений и религиозных организаций, в отношении которых судом принято вступившее в законную силу решение о ликвидации или запрете деятельности по основаниям, предусмотренным Федеральным законом от 25.07.2002 № 114-ФЗ «О противодействии экстремистской деятельности».

** В подготовке статьи использовались материалы с Телеграм канала https://t.me/gonzo_ML.