Stop sequences (language models) (RO)
Stop Sequence (secvență de oprire) în contextul modelelor lingvistice de mari dimensiuni (LLM) este o secvență specială de caractere sau token-uri care semnalează modelului necesitatea de a opri generarea textului[1]. Acest mecanism reprezintă o componentă importantă a modelelor lingvistice autoregresive, asigurând finalizarea controlată și previzibilă a răspunsului.
Atunci când se utilizează o stop sequence, modelul verifică la fiecare pas de generare dacă textul deja generat se termină cu una dintre secvențele specificate. Dacă se găsește o potrivire, procesul se oprește imediat, iar stop sequence în sine nu este inclusă în rezultatul final[2]. Aceasta permite dezvoltatorului să controleze cu precizie limitele răspunsului fără a modifica interogarea în sine.
Principii de bază ale funcționării
În modelele lingvistice autoregresive, generarea textului are loc secvențial, token cu token. La fiecare pas, modelul prezice următorul token pe baza întregii secvențe anterioare (promptul de intrare și textul deja generat). Din punct de vedere matematic, aceasta se exprimă ca probabilitate condiționată:
unde este token-ul curent generat, — secvența de token-uri generate anterior, iar — secvența de intrare[3].
Mecanismul stop sequence funcționează ca un criteriu extern pentru întreruperea acestui proces iterativ.
Tipuri de secvențe de oprire
Există mai multe tipuri principale de mecanisme de oprire, care pot fi utilizate atât separat, cât și în combinație.
1. Token-uri de sfârșit de secvență (EOS)
End-of-Sequence (EOS) — sunt token-uri speciale (de exemplu, `<|endoftext|>`), încorporate în vocabularul modelului și destinate marcării sfârșitului unui fragment logic de text. Modelul este antrenat să genereze token-ul EOS atunci când consideră că răspunsul este complet, deoarece toate textele din setul de antrenament se termină cu acest token[4]. La detectarea token-ului EOS, generarea se oprește automat.
Cercetările arată că prezența token-urilor EOS influențează arhitectura de atenție: modelele dezvoltă mecanisme interne de numărare a pozițiilor, ceea ce, totuși, le poate limita capacitatea de extrapolare pe secvențe care depășesc semnificativ lungimea exemplelor de antrenament[5].
2. Secvențe personalizate
Acestea sunt șiruri arbitrare pe care dezvoltatorul le specifică pentru o sarcină concretă. Ele nu fac parte din vocabularul modelului, dar sunt urmărite la nivel de caractere. Exemplele includ:
- Caractere de sfârșit de linie: `\n` sau `\n\n` pentru oprire după un paragraf.
- Marcatori contextuali: `Human:`, `User:` sau `Q:` pentru separarea replicilor într-un dialog.
- Marcatori speciali: `###`, `</output>` sau `END`.
3. Secvențe structurale
Aceștia sunt marcatori specializați utilizați pentru finalizarea anumitor elemente structurale, ceea ce este esențial la generarea de conținut formatat[1]:
- Cod: ghilimele inverse triple (```) pentru încheierea unui bloc de cod.
- JSON/XML: paranteze de închidere (`}`) sau etichete (`</element>`).
Implementare tehnică și probleme
Detectarea eficientă a stop sequence este o sarcină netrivială, asociată cu o serie de dificultăți.
Algoritmul de detectare și optimizare
Procesul de detectare în sistemele reale include:
- Verificare la fiecare pas: După generarea fiecărui nou token, sistemul verifică dacă rezultatul curent se termină cu una dintre stop sequences specificate.
- Gestionarea potrivirilor parțiale: Sistemul trebuie să urmărească situațiile în care o parte a secvenței a fost deja generată, dar potrivirea completă nu a fost încă realizată.
- Verificare multi-criteriu: Majoritatea sistemelor (de exemplu, OpenAI API) permit urmărirea simultană a mai multor stop sequences (până la patru)[2].
În framework-ul Hugging Face Transformers, în acest scop este implementată clasa abstractă `StoppingCriteria`, care permite crearea de criterii de oprire personalizate, precum `MaxLengthCriteria` (după lungime) sau `EosTokenCriteria` (după token-ul EOS)[4].
Probleme și limitări
- Problema tokenizării: Aceasta este principala dificultate tehnică. Aceeași secvență de caractere (de exemplu, `\nUser:`) poate fi împărțită în token-uri diferit, în funcție de context. Aceasta complică detectarea fiabilă, deoarece stop sequence poate fi distribuită între mai multe token-uri[5].
- Performanță: Verificarea mai multor stop sequences lungi la fiecare pas poate încetini generarea, în special atunci când se lucrează cu secvențe lungi în timp real.
- Declanșări false: Secvența specificată poate apărea accidental în mijlocul răspunsului dorit, ducând la o finalizare prematură. De aceea este important să se aleagă marcatori suficient de unici și specifici (de exemplu, `\n###\n`)[6].
Aplicații și scenarii de utilizare
Stop sequences reprezintă un instrument puternic pentru controlul comportamentului LLM.
- Controlul lungimii și al costurilor: Permit limitarea dimensiunii maxime a răspunsului și, implicit, reducerea consumului de token-uri, ceea ce este important la utilizarea API-urilor cu plată.
- Sisteme de dialog: Sunt utilizate pentru separarea clară a replicilor interlocutorilor, astfel încât modelul-asistent să nu genereze răspunsuri în locul utilizatorului.
- Generarea de conținut structurat: Sunt indispensabile pentru obținerea unui output corect în formatele JSON, XML sau la scrierea de cod, prevenind adăugarea de informații suplimentare după finalizarea structurii[7].
- Prevenirea comportamentului nedorit: Ajută la întreruperea generării atunci când apare conținut repetitiv sau incorect (halucinații).
- Antrenament și fine-tuning: În seturile de date de antrenament se utilizează frecvent marcatori unici (de exemplu, `###`) ca stop sequence, pentru ca modelul să învețe să finalizeze răspunsul în locul potrivit[6].
Direcții actuale de cercetare
- Criterii adaptive de oprire: Dezvoltarea de metode care determină dinamic punctul de finalizare pe baza contextului și a calității textului generat.
- Abordări bazate pe entropie: Utilizarea entropiei distribuției token-urilor ca criteriu. Entropia ridicată poate indica incertitudinea modelului și poate servi drept semnal pentru oprirea generării.
Referințe
- Documentația OpenAI privind utilizarea stop sequences
- Documentația Hugging Face privind StoppingCriteria
Bibliografie
- 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.
Note
- ↑ 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]