Stop sequences (language models) (PL)
Stop Sequence (sekwencja zatrzymania) w kontekście dużych modeli językowych (LLM) — to specjalna sekwencja znaków lub tokenów, która sygnalizuje modelowi konieczność zaprzestania generowania tekstu[1]. Mechanizm ten jest ważnym elementem autoregresywnych modeli językowych, zapewniając kontrolowane i przewidywalne zakończenie odpowiedzi.
Przy użyciu stop sequence model na każdym kroku generowania sprawdza, czy już wygenerowany tekst nie kończy się jedną z zadanych sekwencji. Jeśli dopasowanie zostanie znalezione, proces natychmiast się zatrzymuje, przy czym sama stop sequence nie jest uwzględniana w końcowym wyjściu[2]. Pozwala to deweloperowi precyzyjnie kontrolować granice odpowiedzi bez modyfikowania samego zapytania.
Podstawowe zasady działania
W autoregresywnych modelach językowych generowanie tekstu odbywa się sekwencyjnie, token po tokenie. Na każdym kroku model przewiduje następny token na podstawie całej poprzedniej sekwencji (wejściowego promptu i już wygenerowanego tekstu). Matematycznie wyraża się to jako prawdopodobieństwo warunkowe:
gdzie — aktualnie generowany token, — sekwencja wcześniej wygenerowanych tokenów, a — sekwencja wejściowa[3].
Mechanizm stop sequence działa jako zewnętrzne kryterium przerywania tego iteracyjnego procesu.
Typy sekwencji zatrzymania
Istnieje kilka podstawowych typów mechanizmów zatrzymania, które mogą być stosowane zarówno osobno, jak i w kombinacji.
1. Tokeny końca sekwencji (EOS)
End-of-Sequence (EOS) — to specjalne tokeny (na przykład `<|endoftext|>`), które są wbudowane w słownik modelu i przeznaczone do oznaczania końca logicznego fragmentu tekstu. Model jest uczony generowania tokenu EOS, gdy uzna odpowiedź za zakończoną, ponieważ wszystkie teksty w zbiorze treningowym kończą się tym tokenem[4]. Po wykryciu tokenu EOS generowanie automatycznie się zatrzymuje.
Badania pokazują, że obecność tokenów EOS wpływa na architekturę mechanizmu uwagi: modele rozwijają wewnętrzne mechanizmy zliczania pozycji, co jednak może ograniczać ich zdolność do ekstrapolacji na sekwencjach znacznie dłuższych niż przykłady treningowe[5].
2. Sekwencje niestandardowe
Są to dowolne ciągi znaków, które deweloper definiuje dla konkretnego zadania. Nie są częścią słownika modelu, lecz są śledzone na poziomie znaków. Przykłady obejmują:
- Znaki nowej linii: `\n` lub `\n\n` do zatrzymania po akapicie.
- Markery kontekstowe: `Human:`, `User:` lub `Q:` do rozdzielania replik w dialogu.
- Markery specjalne: `###`, `</output>` lub `END`.
3. Sekwencje strukturalne
Są to wyspecjalizowane markery używane do kończenia określonych elementów strukturalnych, co jest niezwykle ważne przy generowaniu sformatowanej treści[1]:
- Kod: potrójne odwrotne apostrofy (```) do zakończenia bloku kodu.
- JSON/XML: nawiasy zamykające (`}`) lub tagi (`</element>`).
Implementacja techniczna i problemy
Skuteczne wykrywanie stop sequence to nietrywialny problem, związany z szeregiem trudności.
Algorytm wykrywania i optymalizacja
Proces wykrywania w rzeczywistych systemach obejmuje:
- Sprawdzanie na każdym kroku: Po wygenerowaniu każdego nowego tokenu system sprawdza, czy bieżące wyjście nie kończy się jedną z zadanych stop sequences.
- Obsługa częściowych dopasowań: System musi śledzić sytuacje, gdy część sekwencji została już wygenerowana, ale pełne dopasowanie jeszcze nie nastąpiło.
- Wielokryterialne sprawdzanie: Większość systemów (na przykład OpenAI API) pozwala śledzić kilka (do czterech) stop sequences jednocześnie[2].
W frameworku Hugging Face Transformers zaimplementowano w tym celu abstrakcyjną klasę `StoppingCriteria`, która umożliwia tworzenie niestandardowych kryteriów zatrzymania, takich jak `MaxLengthCriteria` (według długości) lub `EosTokenCriteria` (według tokenu EOS)[4].
Problemy i ograniczenia
- Problem tokenizacji: To główna trudność techniczna. Ta sama sekwencja znaków (na przykład `\nUser:`) może być podzielona na tokeny w różny sposób w zależności od kontekstu. Utrudnia to niezawodne wykrywanie, ponieważ stop sequence może zostać rozdzielona między kilka tokenów[5].
- Wydajność: Sprawdzanie wielu długich stop sequences na każdym kroku może spowalniać generowanie, zwłaszcza przy pracy z długimi sekwencjami w czasie rzeczywistym.
- Fałszywe trafienia: Zadana sekwencja może przypadkowo pojawić się w środku pożądanej odpowiedzi, co spowoduje przedwczesne zakończenie. Dlatego ważne jest wybieranie wystarczająco unikalnych i specyficznych markerów (na przykład `\n###\n`)[6].
Zastosowanie i scenariusze użycia
Stop sequences są potężnym narzędziem do sterowania zachowaniem LLM.
- Kontrola długości i kosztów: Pozwalają ograniczyć maksymalną długość odpowiedzi, a co za tym idzie — zmniejszyć zużycie tokenów, co jest ważne przy korzystaniu z płatnych API.
- Systemy dialogowe: Używane do wyraźnego rozdzielania replik rozmówców, aby model-asystent nie generował odpowiedzi za użytkownika.
- Generowanie treści strukturalnej: Niezastąpione przy uzyskiwaniu poprawnych wyników w formatach JSON, XML lub podczas pisania kodu, zapobiegając dodawaniu zbędnych informacji po zakończeniu struktury[7].
- Zapobieganie niepożądanemu zachowaniu: Pomagają przerwać generowanie w przypadku pojawienia się powtarzających się lub nieprawidłowych treści (halucynacji).
- Uczenie i fine-tuning: W zbiorach danych treningowych często używa się unikalnych markerów (na przykład `###`) jako stop sequence, aby model nauczył się kończyć odpowiedź we właściwym miejscu[6].
Współczesne kierunki badań
- Adaptacyjne kryteria zatrzymania: Opracowywanie metod, które dynamicznie określają punkt zakończenia na podstawie kontekstu i jakości wygenerowanego tekstu.
- Podejścia entropijne: Wykorzystanie entropii rozkładu tokenów jako kryterium. Wysoka entropia może wskazywać na niepewność modelu i służyć jako sygnał do zaprzestania generowania.
Linki
- Dokumentacja OpenAI dotycząca użycia stop sequences
- Dokumentacja Hugging Face dotycząca 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.
Przypisy
- ↑ 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]