Декодирование с грамматическими ограничениями
Определение
Декодирование с грамматическими ограничениями — способ генерации, который исключает токены, после которых префикс нельзя завершить по заданной грамматике.
Также ищут: grammar-constrained decoding · ограниченное декодирование по грамматике
Зачем это знать
Маска оставляет возможность получить допустимую строку, но меняет шансы разных продолжений. На коротком примере можно увидеть, почему это не то же самое, что отобрать допустимые строки из исходного распределения модели.
Две процедуры — разные вероятности строк
Карта понятия
Что подтверждено
При декодировании с грамматическими ограничениями парсер проверяет префикс по мере генерации. Маска исключает следующий токен, если после него префикс уже нельзя продолжить до строки выбранной грамматики.
Граница применимости: Grammar-constrained decoding с маской допустимых префиксов; допустимость определяется относительно реально заданной грамматики.
Префикс, для которого существует допустимое завершение, сам ещё не обязательно является полной строкой грамматики. Если генерация остановлена раньше, маска префикса не превращает результат в завершённый вывод.
Граница применимости: Различие префикса и полной строки следует из определения языка; пример остановки относится к внешнему ограничению числа новых токенов.
Локальная грамматическая маска перенормирует выбор среди токенов с допустимым продолжением. В общем случае это не равно исходному распределению модели, условленному на том, что вся сгенерированная строка принадлежит грамматике.
Граница применимости: Распределение полных строк при случайной выборке; не утверждение о каждом возможном декодере или каждой конкретной грамматике.
Для S ::= ac | bd, P(a)=P(b)=1/2, P(c|a)=9/10, P(d|a)=1/10, P(d|b)=1/10, P(c|b)=9/10 локальная маска даёт P(ac)=P(bd)=1/2. Исходное распределение, условленное на допустимой строке, даёт P(ac)=9/10 и P(bd)=1/10.
Граница применимости: Оригинальный расчёт по правилу локальной маски и определению условной вероятности. Каждый символ — отдельный токен; ровно после двух токенов следует EOS с вероятностью 1. Не измерение модели.
Принадлежность строки заданному формальному языку подтверждает только ограничения, закодированные в этом языке; сама по себе она не подтверждает связь значения с внешним фактом или конкретным запросом.
Граница применимости: Логическое различие формального языка и внешнего смысла; грамматика может явно ограничивать значения, например перечислением или числовым условием.
В llama.cpp b4514 JSON Schema преобразуется в GBNF только в поддерживаемом подмножестве; руководство предупреждает, что некоторые неподдерживаемые элементы пропускаются и рекомендует проверять построенную грамматику.
Граница применимости: Именно документация tag b4514; не описание всех версий llama.cpp и не универсальная характеристика JSON Schema.
В примере README llama.cpp b4514 свойство age имеет тип number и exclusiveMinimum=0. В показанной грамматике правило age использует общий number с необязательным минусом, поэтому допускает отрицательное число.
Граница применимости: Чтение опубликованной пары схемы и GBNF. Отрицательное число нарушает исходную границу; это не выполненный тест конвертера или runtime. В этой версии числовые границы поддержаны для integer, не number.
Что проверить
- Различайте завершённую строку и остановку на допустимом префиксе.
- Проверяйте реально построенную грамматику, а не только исходную JSON Schema.
- Отличайте принадлежность грамматике от соответствия внешнему факту или запросу.
Первоисточники
- Transformers 4.44.2: Generation
Открыт редактором 7 сентября 2026 года, заголовок документа сверен.
Утверждения: 02
- GBNF Guide
Закреплённое руководство перечисляет ограничения JSON Schema→GBNF и показывает пример number с exclusiveMinimum, преобразованный в неограниченную по знаку number-грамматику.