Stop sequences (language models) (BG)
Stop Sequence (последователност за спиране) в контекста на големите езикови модели (LLM) — това е специална последователност от символи или токени, която сигнализира на модела за необходимостта да преустанови генерирането на текст[1]. Този механизъм е важен компонент на авторегресивните езикови модели, осигурявайки управляемо и предсказуемо завършване на отговора.
При използване на stop sequence моделът на всяка стъпка от генерирането проверява дали вече генерираният текст не завършва с една от зададените последователности. Ако съвпадение бъде открито, процесът незабавно се прекратява, като самата stop sequence не се включва в крайния изход[2]. Това позволява на разработчика да контролира точно границите на отговора, без да променя самата заявка.
Основни принципи на функциониране
В авторегресивните езикови модели генерирането на текст се извършва последователно, токен по токен. На всяка стъпка моделът предсказва следващия токен въз основа на цялата предишна последователност (входния prompt и вече генерирания текст). Математически това се изразява като условна вероятност:
където — текущият генериран токен, — последователността от предварително генерирани токени, а — входната последователност[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 е нетривиална задача, свързана с редица трудности.
Алгоритъм за засичане и оптимизация
Процесът на засичане в реални системи включва:
- Проверка на всяка стъпка: След генерирането на всеки нов токен системата проверява дали текущият изход не завършва с някоя от зададените stop sequences.
- Обработка на частични съвпадения: Системата трябва да проследява ситуации, при които част от последователността вече е генерирана, но пълно съвпадение все още не е налице.
- Многокритериална проверка: Повечето системи (например 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].
Съвременни насоки на изследване
- Адаптивни критерии за спиране: Разработване на методи, които динамично определят точката на завършване въз основа на контекста и качеството на генерирания текст.
- Ентропийни подходи: Използване на ентропията на разпределението на токените като критерий. Високата ентропия може да указва несигурност на модела и да служи като сигнал за прекратяване на генерирането.
Връзки
- Документация на OpenAI за използването на stop sequences
- Документация на Hugging Face за StoppingCriteria
Литература
- 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.0 1.1 «Stop Sequence: Understanding & Setting It Correctly». Promptitude.io Help Center. [1]
- ↑ 2.0 2.1 «How do I use stop sequences in the OpenAI API?». OpenAI Help Center. [2]
- ↑ «How to use stop sequences?». Vellum. [3]
- ↑ 4.0 4.1 Brown, Tom, et al. «A Survey on GPT-3». arXiv:2212.00857 [cs.CL], 1 дек. 2022 г. [4]
- ↑ 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.0 6.1 Eric, Mihail. «How to Finetune GPT3». mihaileric.com. [6]
- ↑ Corin, Daniel. «Way Enough - Cursor Triple Backticks Stop Sequence». danielcorin.com. [7]