Stop sequences (language models) (IT)

From Systems analysis Wiki
Jump to navigation Jump to search

Stop Sequence (sequenza di arresto) nel contesto dei grandi modelli linguistici (LLM) è una sequenza speciale di caratteri o token che segnala al modello la necessità di interrompere la generazione del testo[1]. Questo meccanismo è una componente importante dei modelli linguistici autoregressivi, garantendo una conclusione della risposta controllata e prevedibile.

Quando si utilizza una stop sequence, il modello a ogni passo di generazione verifica se il testo già generato termina con una delle sequenze specificate. Se viene trovata una corrispondenza, il processo si interrompe immediatamente, e la stop sequence stessa non viene inclusa nell'output finale[2]. Ciò consente allo sviluppatore di controllare con precisione i limiti della risposta senza modificare la richiesta stessa.

Principi di base del funzionamento

Nei modelli linguistici autoregressivi, la generazione del testo avviene in modo sequenziale, token per token. A ogni passo il modello prevede il token successivo sulla base dell'intera sequenza precedente (il prompt in ingresso e il testo già generato). Matematicamente questo si esprime come probabilità condizionale:

P(yty<t,x)

dove yt è il token attualmente generato, y<t è la sequenza dei token generati in precedenza e x è la sequenza in ingresso[3].

Il meccanismo della stop sequence funziona come criterio esterno per interrompere questo processo iterativo.

Tipi di sequenze di arresto

Esistono diversi tipi principali di meccanismi di arresto, che possono essere utilizzati singolarmente o in combinazione.

1. Token di fine sequenza (EOS)

End-of-Sequence (EOS) sono token speciali (ad esempio `<|endoftext|>`) integrati nel vocabolario del modello e destinati a indicare la fine di un frammento logico di testo. Il modello viene addestrato a generare il token EOS quando ritiene che la risposta sia completa, poiché tutti i testi nel dataset di addestramento terminano con questo token[4]. Al rilevamento del token EOS, la generazione si interrompe automaticamente.

Le ricerche mostrano che la presenza di token EOS influisce sull'architettura dell'attention: i modelli sviluppano meccanismi interni di conteggio delle posizioni, il che tuttavia può limitare la loro capacità di estrapolazione su sequenze significativamente più lunghe degli esempi di addestramento[5].

2. Sequenze personalizzate

Sono stringhe arbitrarie che lo sviluppatore definisce per un compito specifico. Non fanno parte del vocabolario del modello, ma vengono monitorate a livello di caratteri. Alcuni esempi includono:

  • Caratteri di nuova riga: `\n` o `\n\n` per fermarsi dopo un paragrafo.
  • Marcatori contestuali: `Human:`, `User:` o `Q:` per separare le battute nel dialogo.
  • Marcatori speciali: `###`, `</output>` o `END`.

3. Sequenze strutturali

Sono marcatori specializzati utilizzati per concludere determinati elementi strutturali, il che è di fondamentale importanza nella generazione di contenuto formattato[1]:

  • Codice: tripli apici inversi (```) per concludere un blocco di codice.
  • JSON/XML: parentesi di chiusura (`}`) o tag (`</element>`).

Implementazione tecnica e problematiche

Il rilevamento efficace delle stop sequence è un compito non banale, associato a diverse difficoltà.

Algoritmo di rilevamento e ottimizzazione

Il processo di rilevamento nei sistemi reali comprende:

  1. Verifica a ogni passo: Dopo la generazione di ogni nuovo token, il sistema verifica se l'output corrente termina con una delle stop sequence specificate.
  2. Gestione delle corrispondenze parziali: Il sistema deve monitorare le situazioni in cui parte della sequenza è già stata generata, ma non si è ancora raggiunta la corrispondenza completa.
  3. Verifica multicritério: La maggior parte dei sistemi (ad esempio, OpenAI API) consente di monitorare più stop sequence (fino a quattro) contemporaneamente[2].

Nel framework Hugging Face Transformers, a questo scopo è implementata la classe astratta `StoppingCriteria`, che consente di creare criteri di arresto personalizzati, come `MaxLengthCriteria` (per lunghezza) o `EosTokenCriteria` (per token EOS)[4].

Problemi e limitazioni

  • Problema di tokenizzazione: Questa è la principale difficoltà tecnica. La stessa sequenza di caratteri (ad esempio, `\nUser:`) può essere suddivisa in token in modi diversi a seconda del contesto. Ciò complica il rilevamento affidabile, poiché la stop sequence può risultare divisa tra più token[5].
  • Prestazioni: La verifica di numerose stop sequence lunghe a ogni passo può rallentare la generazione, specialmente quando si lavora con sequenze lunghe in tempo reale.
  • Falsi positivi: La sequenza specificata può comparire accidentalmente nel mezzo della risposta desiderata, causando una conclusione prematura. È quindi importante scegliere marcatori sufficientemente unici e specifici (ad esempio, `\n###\n`)[6].

Applicazioni e scenari d'uso

Le stop sequence sono uno strumento potente per controllare il comportamento degli LLM.

  • Controllo della lunghezza e dei costi: Consentono di limitare la dimensione massima della risposta e, di conseguenza, di ridurre il consumo di token, il che è importante quando si utilizzano API a pagamento.
  • Sistemi di dialogo: Vengono utilizzate per separare chiaramente le battute degli interlocutori, affinché il modello assistente non generi risposte al posto dell'utente.
  • Generazione di contenuto strutturato: Sono indispensabili per ottenere output corretto nei formati JSON, XML o nella scrittura di codice, prevenendo l'aggiunta di informazioni superflue dopo il completamento della struttura[7].
  • Prevenzione di comportamenti indesiderati: Aiutano a interrompere la generazione quando compaiono contenuti ripetitivi o non corretti (allucinazioni).
  • Addestramento e fine-tuning: Nei dataset di addestramento vengono spesso utilizzati marcatori unici (ad esempio, `###`) come stop sequence, affinché il modello impari a concludere la risposta nel punto corretto[6].

Direzioni di ricerca attuali

  • Criteri di arresto adattivi: Sviluppo di metodi che determinano dinamicamente il punto di conclusione sulla base del contesto e della qualità del testo generato.
  • Approcci basati sull'entropia: Utilizzo dell'entropia della distribuzione dei token come criterio. Un'alta entropia può indicare incertezza del modello e fungere da segnale per interrompere la generazione.

Riferimenti

  • Documentazione OpenAI sull'utilizzo delle stop sequence
  • Documentazione Hugging Face su StoppingCriteria

Bibliografia

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