Автор:
(1) Брэндон Т. Уиллард, Нормальные вычисления;
(2) Реми Луф, Нормальные вычисления.
В этой статье мы показываем, как проблему нейронной генерации текста можно конструктивно переформулировать в терминах переходов между состояниями конечного автомата. Эта структура обеспечивает эффективный подход к управлению генерацией текста с помощью регулярных выражений и контекстно-свободных грамматик, позволяя создавать индекс по словарю языковой модели. Этот подход не зависит от модели, позволяет применять знания и ограничения, специфичные для предметной области, а также позволяет создавать надежные интерфейсы, гарантируя структуру сгенерированного текста. Он добавляет небольшие накладные расходы к процессу генерации последовательности токенов и значительно превосходит существующие решения. Реализация представлена в библиотеке Python Outlines с открытым исходным кодом [Луф и Уиллард].
Нас интересует проблема генерации последовательностей токенов из большой языковой модели (LLM) [Vaswani et al., 2017, Radford et al., 2019], которые соответствуют регулярным выражениям или контекстно-свободным грамматикам (CFG). Этот вид управляемого создания LLM используется для того, чтобы выходные данные модели LLM можно было использовать в условиях жестких требований к форматированию, которые сложно или дорого фиксировать только посредством точной настройки [Beurer-Kellner et al., 2023, Scholak et al., 2021, Poesia et al., 2022a, Rabinovich et al., 2017, Weng, 2021, Dong et al., 2023, Poesia et al., 2022b, Geng et al., 2023, Wang et al., 2023]. Такие функции недавно были обобщены в библиотеках подсказок и интерфейсах [Microsoft, 2023, Beurer-Kellner et al., 2023, Rickard, 2023a,b], но их применимость может быть ограничена из-за затрат на масштабирование.
Большинство реализаций управляемой генерации смещают значения оценок, используемые для определения вероятностей токенов в словаре LLM. Распространенный и достаточный подход включает в себя повторные оценки всего словаря, чтобы определить, какие токены действительны – в соответствии с ограничениями и ранее выбранными токенами – и установку вероятности недействительных токенов на ноль. Этот подход предполагает фиксированную стоимость O(N) для каждого сгенерированного токена, где N — размер словаря LLM.
Мы предлагаем подход, который использует формулировку регулярных выражений с помощью конечного автомата (FSM) для произвольного запуска и остановки управляемой генерации, а также позволяет построить индекс, с помощью которого набор токенов с ненулевой вероятностью может быть эффективно получен на каждом этапе. В результате получается алгоритм, стоимость которого в среднем составляет O(1).
В случае регулярного выражения наш подход больше всего похож на подход Kuchnik et al. [2023], в котором используется формулировка преобразователя для получения конечных автоматов, определенных на основе словаря языковой модели, и эти автоматы содержат большую часть той же информации и преимуществ масштабирования, что и индексы, описанные здесь. Наш подход не требует полной абстракции преобразователя и может использоваться для более легкого расширения существующих эффективных библиотек регулярных выражений без изменения базовых автоматов и их реализаций.
Что еще более важно, наш подход к индексированию также можно распространить на анализаторы CFG и LALR(1), чтобы обеспечить эффективную управляемую генерацию в соответствии с популярными форматами данных и языками программирования (например, JSON, Python, SQL и т. д.). Переход к синтаксическому анализу осуществляется путем расширения традиционных компонентов и операций парсера LALR(1), что снова делает его подходом, который можно использовать для расширения существующих реализаций парсера.
Этот документ доступен на arxiv под лицензией CC 4.0.