Stop sequences (language models) (CS)

From Systems analysis Wiki
Jump to navigation Jump to search

Stop Sequence (sekvence zastavení) v kontextu velkých jazykových modelů (LLM) je speciální posloupnost znaků nebo tokenů, která signalizuje modelu, že má ukončit generování textu[1]. Tento mechanismus je důležitou součástí autoregresivních jazykových modelů a zajišťuje řízené a předvídatelné dokončení odpovědi.

Při použití stop sequence model na každém kroku generování kontroluje, zda již vygenerovaný text nekončí jednou ze zadaných posloupností. Pokud je nalezena shoda, proces se okamžitě zastaví, přičemž samotná stop sequence není zahrnuta do výsledného výstupu[2]. To umožňuje vývojáři přesně řídit hranice odpovědi bez změny samotného dotazu.

Základní principy fungování

V autoregresivních jazykových modelech probíhá generování textu postupně, token po tokenu. Na každém kroku model předpovídá následující token na základě celé předchozí posloupnosti (vstupního promptu a již vygenerovaného textu). Matematicky se to vyjadřuje jako podmíněná pravděpodobnost:

P(yty<t,x)

kde yt je aktuálně generovaný token, y<t je posloupnost dříve vygenerovaných tokenů a x je vstupní posloupnost[3].

Mechanismus stop sequence funguje jako vnější kritérium pro přerušení tohoto iterativního procesu.

Typy sekvencí zastavení

Existuje několik základních typů mechanismů zastavení, které lze používat samostatně i v kombinaci.

1. Tokeny konce posloupnosti (EOS)

End-of-Sequence (EOS) jsou speciální tokeny (například `<|endoftext|>`), které jsou zabudovány do slovníku modelu a slouží k označení konce logického úseku textu. Model se učí generovat EOS token, když považuje odpověď za dokončenou, protože všechny texty v trénovací sadě tímto tokenem končí[4]. Po detekci EOS tokenu se generování automaticky zastaví.

Výzkumy ukazují, že přítomnost EOS tokenů ovlivňuje architekturu pozornosti (attention): modely si vyvíjejí vnitřní mechanismy pro počítání pozic, což však může omezovat jejich schopnost extrapolace na posloupnostech výrazně delších, než jsou trénovací příklady[5].

2. Uživatelské posloupnosti

Jde o libovolné řetězce, které vývojář zadá pro konkrétní úlohu. Nejsou součástí slovníku modelu, ale jsou sledovány na úrovni znaků. Příklady zahrnují:

  • Znaky nového řádku: `\n` nebo `\n\n` pro zastavení po odstavci.
  • Kontextové markery: `Human:`, `User:` nebo `Q:` pro oddělení replik v dialogu.
  • Speciální markery: `###`, `</output>` nebo `END`.

3. Strukturální posloupnosti

Jde o specializované markery používané k ukončení určitých strukturálních prvků, což je klíčové při generování formátovaného obsahu[1]:

  • Kód: trojité zpětné uvozovky (```) pro ukončení bloku kódu.
  • JSON/XML: uzavírací závorky (`}`) nebo tagy (`</element>`).

Technická implementace a problémy

Efektivní detekce stop sequence je netriviální úloha spojená s řadou obtíží.

Algoritmus detekce a optimalizace

Proces detekce v reálných systémech zahrnuje:

  1. Kontrola na každém kroku: Po vygenerování každého nového tokenu systém kontroluje, zda aktuální výstup nekončí jednou ze zadaných stop sequences.
  2. Zpracování částečných shod: Systém musí sledovat situace, kdy část posloupnosti již byla vygenerována, ale k úplné shodě ještě nedošlo.
  3. Vícekriteriální kontrola: Většina systémů (například OpenAI API) umožňuje sledovat několik (až čtyři) stop sequences současně[2].

Ve frameworku Hugging Face Transformers je pro tento účel implementována abstraktní třída `StoppingCriteria`, která umožňuje vytvářet vlastní kritéria zastavení, jako je `MaxLengthCriteria` (podle délky) nebo `EosTokenCriteria` (podle EOS tokenu)[4].

Problémy a omezení

  • Problém tokenizace: Jde o hlavní technickou obtíž. Stejná posloupnost znaků (například `\nUser:`) může být rozdělena do tokenů různě v závislosti na kontextu. To komplikuje spolehlivou detekci, protože stop sequence může být rozdělena mezi několik tokenů[5].
  • Výkon: Kontrola mnoha dlouhých stop sequences na každém kroku může zpomalovat generování, zejména při práci s dlouhými posloupnostmi v reálném čase.
  • Falešná pozitiva: Zadaná posloupnost se může náhodně vyskytnout uprostřed požadované odpovědi, což povede k předčasnému ukončení. Proto je důležité volit dostatečně unikátní a specifické markery (například `\n###\n`)[6].

Použití a scénáře nasazení

Stop sequences jsou mocným nástrojem pro řízení chování LLM.

  • Kontrola délky a nákladů: Umožňují omezit maximální velikost odpovědi a tím snížit spotřebu tokenů, což je důležité při využívání placených API.
  • Dialogové systémy: Používají se k jasnému oddělení replik účastníků konverzace, aby model-asistent negeneroval odpověď za uživatele.
  • Generování strukturovaného obsahu: Jsou nezbytné pro získání správného výstupu ve formátech JSON, XML nebo při psaní kódu, přičemž zabraňují přidávání nadbytečných informací po dokončení struktury[7].
  • Předcházení nežádoucímu chování: Pomáhají přerušit generování při výskytu opakujícího se nebo nesprávného obsahu (halucinací).
  • Trénování a fine-tuning: V trénovacích datových sadách se často používají unikátní markery (například `###`) jako stop sequence, aby se model naučil ukončovat odpověď na správném místě[6].

Současné směry výzkumu

  • Adaptivní kritéria zastavení: Vývoj metod, které dynamicky určují bod ukončení na základě kontextu a kvality vygenerovaného textu.
  • Entropické přístupy: Využití entropie rozdělení tokenů jako kritéria. Vysoká entropie může naznačovat nejistotu modelu a sloužit jako signál k ukončení generování.

Odkazy

  • Dokumentace OpenAI k použití stop sequences
  • Dokumentace Hugging Face ke StoppingCriteria

Literatura

  • 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.

Poznámky

  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]