Séquences d'arrêt

From Systems analysis wiki
Jump to navigation Jump to search

Une séquence d'arrêt (en anglais, Stop Sequence) dans le contexte des grands modèles de langage (LLM) est une séquence spécifique de caractères ou de tokens qui signale au modèle qu'il doit cesser de générer du texte[1]. Ce mécanisme est un composant essentiel des modèles de langage autorégressifs, garantissant une complétion de la réponse contrôlée et prévisible.

Lorsqu'une séquence d'arrêt est utilisée, le modèle vérifie à chaque étape de la génération si le texte déjà généré se termine par l'une des séquences spécifiées. Si une correspondance est trouvée, le processus s'arrête immédiatement, et la séquence d'arrêt elle-même n'est pas incluse dans la sortie finale[2]. Cela permet au développeur de contrôler précisément les limites de la réponse sans modifier la requête elle-même.

Principes de fonctionnement de base

Dans les modèles de langage autorégressifs, la génération de texte se fait de manière séquentielle, token par token. À chaque étape, le modèle prédit le token suivant en se basant sur toute la séquence précédente (le prompt d'entrée et le texte déjà généré). Mathématiquement, cela s'exprime par une probabilité conditionnelle :

P(yty<t,x)

yt est le token en cours de génération, y<t est la séquence des tokens précédemment générés, et x est la séquence d'entrée[3].

Le mécanisme de séquence d'arrêt agit comme un critère externe pour interrompre ce processus itératif.

Types de séquences d'arrêt

Il existe plusieurs types principaux de mécanismes d'arrêt, qui peuvent être utilisés séparément ou en combinaison.

1. Tokens de fin de séquence (EOS)

Les tokens End-of-Sequence (EOS) sont des tokens spéciaux (par exemple, `<|endoftext|>`) intégrés au vocabulaire du modèle et conçus pour marquer la fin d'un segment de texte logique. Le modèle est entraîné à générer un token EOS lorsqu'il estime que la réponse est complète, car tous les textes de l'ensemble de données d'entraînement se terminent par ce token[4]. Lorsqu'un token EOS est détecté, la génération s'arrête automatiquement.

Des recherches montrent que la présence de tokens EOS influence l'architecture d'attention : les modèles développent des mécanismes internes de comptage de position, ce qui peut cependant limiter leur capacité d'extrapolation à des séquences dépassant de manière significative la longueur des exemples d'entraînement[5].

2. Séquences personnalisées

Ce sont des chaînes de caractères arbitraires que le développeur définit pour une tâche spécifique. Elles ne font pas partie du vocabulaire du modèle, mais sont surveillées au niveau des caractères. Exemples :

  • Caractères de saut de ligne : `\n` ou `\n\n` pour arrêter après un paragraphe.
  • Marqueurs contextuels : `Human:`, `User:` ou `Q:` pour séparer les tours de parole dans un dialogue.
  • Marqueurs spéciaux : `###`, `</output>` ou `END`.

3. Séquences structurelles

Ce sont des marqueurs spécialisés utilisés pour terminer des éléments structurels spécifiques, ce qui est crucial lors de la génération de contenu formaté[1] :

  • Code : trois backticks (```) pour terminer un bloc de code.
  • JSON/XML : accolades fermantes (`}`) ou balises (`</element>`).

Implémentation technique et défis

La détection efficace des séquences d'arrêt est une tâche non triviale, qui comporte plusieurs difficultés.

Algorithme de détection et optimisation

Dans les systèmes réels, le processus de détection comprend :

  1. Vérification à chaque étape : Après la génération de chaque nouveau token, le système vérifie si la sortie actuelle se termine par l'une des séquences d'arrêt spécifiées.
  2. Gestion des correspondances partielles : Le système doit suivre les situations où une partie de la séquence a déjà été générée, mais où il n'y a pas encore de correspondance complète.
  3. Vérification multicritère : La plupart des systèmes (par exemple, l'API d'OpenAI) permettent de surveiller plusieurs (jusqu'à quatre) séquences d'arrêt simultanément[2].

Dans le framework Hugging Face Transformers, cela est implémenté via la classe abstraite `StoppingCriteria`, qui permet de créer des critères d'arrêt personnalisés, tels que `MaxLengthCriteria` (basé sur la longueur) ou `EosTokenCriteria` (basé sur le token EOS)[4].

Problèmes et limitations

  • Problème de la tokenisation : C'est la principale difficulté technique. Une même séquence de caractères (par exemple, `\nUser:`) peut être divisée en tokens de différentes manières selon le contexte. Cela complique une détection fiable, car la séquence d'arrêt peut se retrouver répartie sur plusieurs tokens[5].
  • Performance : La vérification de multiples séquences d'arrêt longues à chaque étape peut ralentir la génération, en particulier lors du traitement de longues séquences en temps réel.
  • Faux positifs : Une séquence définie peut apparaître accidentellement au milieu de la réponse souhaitée, entraînant une fin prématurée. Il est donc important de choisir des marqueurs suffisamment uniques et spécifiques (par exemple, `\n###\n`)[6].

Applications et scénarios d'utilisation

Les séquences d'arrêt sont un outil puissant pour contrôler le comportement des LLM.

  • Contrôle de la longueur et des coûts : Elles permettent de limiter la taille maximale de la réponse et, par conséquent, de réduire la consommation de tokens, ce qui est important lors de l'utilisation d'API payantes.
  • Systèmes conversationnels : Elles sont utilisées pour séparer clairement les tours de parole des interlocuteurs, afin que le modèle assistant ne génère pas de réponse à la place de l'utilisateur.
  • Génération de contenu structuré : Indispensables pour obtenir une sortie correcte aux formats JSON, XML ou lors de l'écriture de code, en empêchant l'ajout d'informations superflues après la fin de la structure[7].
  • Prévention des comportements indésirables : Elles aident à interrompre la génération en cas d'apparition de contenu répétitif ou incorrect (hallucinations).
  • Entraînement et ajustement fin (fine-tuning) : Dans les ensembles de données d'entraînement, des marqueurs uniques (par exemple, `###`) sont souvent utilisés comme séquences d'arrêt pour que le modèle apprenne à terminer la réponse au bon endroit[6].

Axes de recherche actuels

  • Critères d'arrêt adaptatifs : Développement de méthodes qui déterminent dynamiquement le point d'arrêt en fonction du contexte et de la qualité du texte généré.
  • Approches basées sur l'entropie : Utilisation de l'entropie de la distribution des tokens comme critère. Une entropie élevée peut indiquer une incertitude du modèle et servir de signal pour arrêter la génération.

Liens externes

Bibliographie

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

Notes et références

  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]