Stop sequences

Материал из Systems analysis wiki
Перейти к навигации Перейти к поиску

Stop Sequence (последовательность остановки) в контексте больших языковых моделей (LLM) — это специальная последовательность символов или токенов, которая сигнализирует модели о необходимости прекратить генерацию текста[1]. Этот механизм является важным компонентом авторегрессивных языковых моделей, обеспечивая управляемое и предсказуемое завершение ответа.

При использовании stop sequence модель на каждом шаге генерации проверяет, не заканчивается ли уже сгенерированный текст одной из заданных последовательностей. Если совпадение найдено, процесс немедленно прекращается, при этом сама stop sequence не включается в итоговый вывод[2]. Это позволяет разработчику точно контролировать границы ответа без изменения самого запроса.

Базовые принципы функционирования

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

P(yty<t,x)

где yt — текущий генерируемый токен, y<t — последовательность ранее сгенерированных токенов, а x — входная последовательность[3].

Механизм stop sequence функционирует как внешний критерий для прерывания этого итеративного процесса.

Типы последовательностей остановки

Существует несколько основных типов механизмов остановки, которые могут использоваться как по отдельности, так и в комбинации.

1. Токены конца последовательности (EOS)

End-of-Sequence (EOS) — это специальные токены (например, `<|endoftext|>`), которые встроены в словарь модели и предназначены для обозначения конца логического фрагмента текста. Модель обучается генерировать EOS-токен, когда считает ответ завершённым, так как все тексты в обучающей выборке заканчиваются этим токеном[4]. При детекции EOS-токена генерация автоматически прекращается.

Исследования показывают, что наличие EOS-токенов влияет на архитектуру внимания: модели развивают внутренние механизмы подсчёта позиций, что, однако, может ограничивать их способность к экстраполяции на последовательностях, значительно превышающих длину обучающих примеров[5].

2. Пользовательские последовательности

Это произвольные строки, которые разработчик задаёт для конкретной задачи. Они не являются частью словаря модели, но отслеживаются на уровне символов. Примеры включают:

  • Символы переноса строки: `\n` или `\n\n` для остановки после абзаца.
  • Контекстные маркеры: `Human:`, `User:` или `Q:` для разделения реплик в диалоге.
  • Специальные маркеры: `###`, `</output>` или `END`.

3. Структурные последовательности

Это специализированные маркеры, используемые для завершения определённых структурных элементов, что критически важно при генерации форматированного контента[1]:

  • Код: тройные обратные кавычки (```) для завершения блока кода.
  • JSON/XML: закрывающие скобки (`}`) или теги (`</element>`).

Техническая реализация и проблемы

Эффективная детекция stop sequence — нетривиальная задача, сопряжённая с рядом сложностей.

Алгоритм детекции и оптимизация

Процесс детекции в реальных системах включает:

  1. Проверка на каждом шаге: После генерации каждого нового токена система проверяет, не заканчивается ли текущий вывод одной из заданных stop sequences.
  2. Обработка частичных совпадений: Система должна отслеживать ситуации, когда часть последовательности уже сгенерирована, но полного совпадения ещё нет.
  3. Многокритериальная проверка: Большинство систем (например, OpenAI API) позволяют отслеживать несколько (до четырёх) stop sequences одновременно[2].

Во фреймворке Hugging Face Transformers для этого реализован абстрактный класс `StoppingCriteria`, который позволяет создавать кастомные критерии остановки, такие как `MaxLengthCriteria` (по длине) или `EosTokenCriteria` (по EOS-токену)[4].

Проблемы и ограничения

  • Проблема токенизации: Это основная техническая сложность. Одна и та же последовательность символов (например, `\nUser:`) может быть разбита на токены по-разному в зависимости от контекста. Это осложняет надёжную детекцию, так как stop sequence может оказаться разделена между несколькими токенами[5].
  • Производительность: Проверка множества длинных stop sequences на каждом шаге может замедлять генерацию, особенно при работе с длинными последовательностями в реальном времени.
  • Ложные срабатывания: Заданная последовательность может случайно встретиться в середине желаемого ответа, что приведёт к преждевременному завершению. Поэтому важно выбирать достаточно уникальные и специфичные маркеры (например, `\n###\n`)[6].

Применение и сценарии использования

Stop sequences являются мощным инструментом для управления поведением LLM.

  • Контроль длины и стоимости: Позволяют ограничить максимальный размер ответа и, как следствие, сократить расход токенов, что важно при использовании платных API.
  • Диалоговые системы: Используются для чёткого разделения реплик собеседников, чтобы модель-ассистент не генерировала ответ за пользователя.
  • Генерация структурированного контента: Незаменимы для получения корректного вывода в форматах JSON, XML или при написании кода, предотвращая добавление лишней информации после завершения структуры[7].
  • Предотвращение нежелательного поведения: Помогают прервать генерацию при появлении повторяющегося или некорректного контента (галлюцинаций).
  • Обучение и тонкая настройка (fine-tuning): В обучающих наборах данных часто используются уникальные маркеры (например, `###`) в качестве stop sequence, чтобы модель научилась завершать ответ в нужном месте[6].

Современные направления исследований

  • Адаптивные критерии остановки: Разработка методов, которые динамически определяют точку завершения на основе контекста и качества сгенерированного текста.
  • Энтропийные подходы: Использование энтропии распределения токенов как критерия. Высокая энтропия может указывать на неуверенность модели и служить сигналом к прекращению генерации.

См. также

Ссылки

Литература

  • Sutskever, I.; Vinyals, O.; Le, Q. V. (2014). Sequence to Sequence Learning with Neural Networks. arXiv:1409.3215.
  • Vaswani, A. et al. (2017). Attention Is All You Need. arXiv:1706.03762.
  • Keskar, N. S. et al. (2019). CTRL: A Conditional Transformer Language Model for Controllable Generation. arXiv:1909.05858.
  • Holtzman, A. et al. (2020). The Curious Case of Neural Text Degeneration. arXiv:1904.09751.
  • Brown, T. et al. (2020). Language Models are Few-Shot Learners. arXiv:2005.14165.
  • Zong, M.; Krishnamachari, B. (2022). A Survey on GPT-3. arXiv:2212.00857.
  • Zhao, Y. et al. (2022). Calibrating Sequence Likelihood Improves Conditional Language Generation. arXiv:2210.00045.
  • Hu, J. C.; Cavicchioli, R.; Capotondi, A. (2023). A Request for Clarity over the End-of-Sequence Token in the Self-Critical Sequence Training. arXiv:2305.12254.
  • Zhu, W. et al. (2024). Improving Open-Ended Text Generation via Adaptive Decoding. arXiv:2402.18223.
  • Zhang, H. et al. (2024). Adaptable Logical Control for Large Language Models. arXiv:2406.13892.
  • Suh, Y. J. et al. (2025). The Curious Case of Sequentially Mis-calibrated Language Models. arXiv:2205.11916.

Примечания

  1. 1,0 1,1 «Stop Sequence: Understanding & Setting It Correctly». Promptitude.io Help Center. [1]
  2. 2,0 2,1 «How do I use stop sequences in the OpenAI API?». OpenAI Help Center. [2]
  3. «How to use stop sequences?». Vellum. [3]
  4. 4,0 4,1 Brown, Tom, et al. «A Survey on GPT-3». arXiv:2212.00857 [cs.CL], 1 дек. 2022 г. [4]
  5. 5,0 5,1 Suh, Y. J., et al. «The Curious Case of Sequentially Mis-calibrated Language Models». arXiv:2205.11916 [cs.CL], 24 мая 2022 г. [5]
  6. 6,0 6,1 Eric, Mihail. «How to Finetune GPT3». mihaileric.com. [6]
  7. Corin, Daniel. «Way Enough - Cursor Triple Backticks Stop Sequence». danielcorin.com. [7]