GPU, ускорители и инфраструктура LLM

Декодирование с грамматическими ограничениями

Определение

Декодирование с грамматическими ограничениями — способ генерации, который исключает токены, после которых префикс нельзя завершить по заданной грамматике.

Также ищут: grammar-constrained decoding · ограниченное декодирование по грамматике

Зачем это знать

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

Наглядно

Две процедуры — разные вероятности строк

Две процедуры — разные вероятности строк Допустимы только ac и bd Исходно: a=1/2, b=1/2 После a: c=9/10 После b: d=1/10 Локальная маска Обе ветви допустимы ac — 1/2 bd — 1/2 Отбор полных строк Исходные массы ac: 9/20 ÷ 1/2 = 9/10 bd: 1/20 ÷ 1/2 = 1/10
Учебная модель: каждый символ — один токен, после двух токенов всегда EOS. Допустимы только ac и bd. Локальная маска оставляет обе первые ветви, затем делает второй токен обязательным. При отборе полных строк исходной модели учитывают их исходные вероятности: 9/20 и 1/20. Их сумма 1/2 служит знаменателем нормировки. Это расчёт, не замер модели. Источники схемы
Связи из словаря

Карта понятия

Декодирование с грамматическими ограничениями
Доказательная часть

Что подтверждено

  1. При декодировании с грамматическими ограничениями парсер проверяет префикс по мере генерации. Маска исключает следующий токен, если после него префикс уже нельзя продолжить до строки выбранной грамматики.

    Граница применимости: Grammar-constrained decoding с маской допустимых префиксов; допустимость определяется относительно реально заданной грамматики.

  2. Префикс, для которого существует допустимое завершение, сам ещё не обязательно является полной строкой грамматики. Если генерация остановлена раньше, маска префикса не превращает результат в завершённый вывод.

    Граница применимости: Различие префикса и полной строки следует из определения языка; пример остановки относится к внешнему ограничению числа новых токенов.

  3. Локальная грамматическая маска перенормирует выбор среди токенов с допустимым продолжением. В общем случае это не равно исходному распределению модели, условленному на том, что вся сгенерированная строка принадлежит грамматике.

    Граница применимости: Распределение полных строк при случайной выборке; не утверждение о каждом возможном декодере или каждой конкретной грамматике.

  4. Для 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. Не измерение модели.

  5. Принадлежность строки заданному формальному языку подтверждает только ограничения, закодированные в этом языке; сама по себе она не подтверждает связь значения с внешним фактом или конкретным запросом.

    Граница применимости: Логическое различие формального языка и внешнего смысла; грамматика может явно ограничивать значения, например перечислением или числовым условием.

  6. В llama.cpp b4514 JSON Schema преобразуется в GBNF только в поддерживаемом подмножестве; руководство предупреждает, что некоторые неподдерживаемые элементы пропускаются и рекомендует проверять построенную грамматику.

    Граница применимости: Именно документация tag b4514; не описание всех версий llama.cpp и не универсальная характеристика JSON Schema.

  7. В примере README llama.cpp b4514 свойство age имеет тип number и exclusiveMinimum=0. В показанной грамматике правило age использует общий number с необязательным минусом, поэтому допускает отрицательное число.

    Граница применимости: Чтение опубликованной пары схемы и GBNF. Отрицательное число нарушает исходную границу; это не выполненный тест конвертера или runtime. В этой версии числовые границы поддержаны для integer, не number.

Перед спецификацией

Что проверить

  1. Различайте завершённую строку и остановку на допустимом префиксе.
  2. Проверяйте реально построенную грамматику, а не только исходную JSON Schema.
  3. Отличайте принадлежность грамматике от соответствия внешнему факту или запросу.
Открытые основания

Первоисточники

  • Исследование1
  • Документация2
  • Первичная публикация
    Grammar-Aligned Decoding Kanghee Park, Jiayu Wang, Taylor Berg-Kirkpatrick, Nadia Polikarpova и Loris D’Antoni · arXiv:2405.21047v2, 04.11.2024; раздел 2: GAD и ограничения GCD · проверено

    Подразделы HTML не нумерованы; разделяет локальную маску префикса и целевое распределение полных строк при условии грамматической допустимости.

    Утверждения: 01 · 02 · 03 · 04 · 05

  • Официальная документация
    Transformers 4.44.2: Generation Hugging Face · документация Hugging Face Transformers v4.44.2, страница открыта 7 сентября 2026 года · проверено

    Открыт редактором 7 сентября 2026 года, заголовок документа сверен.

    Утверждения: 02

  • Официальная документация
    GBNF Guide ggml-org/llama.cpp · llama.cpp b4514; The root rule; JSON Schemas → GBNF, known limitations · проверено

    Закреплённое руководство перечисляет ограничения JSON Schema→GBNF и показывает пример number с exclusiveMinimum, преобразованный в неограниченную по знаку number-грамматику.

    Утверждения: 04 · 05 · 06 · 07

Подтвердите действие