Stop sequences (language models) (PL)

From Systems analysis Wiki
Jump to navigation Jump to search

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:

P(yty<t,x)

gdzie yt — aktualnie generowany token, y<t — sekwencja wcześniej wygenerowanych tokenów, a x — 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:

  1. 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.
  2. 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.
  3. 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. 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]