Auteur:
(1) Brandon T. Willard, informatique normale ;
(2) Rémi Louf, Informatique normale.
Dans cet article, nous montrons comment le problème de la génération de texte neuronal peut être reformulé de manière constructive en termes de transitions entre les états d'une machine à états finis. Ce cadre conduit à une approche efficace pour guider la génération de texte avec des expressions régulières et des grammaires sans contexte en permettant la construction d'un index sur le vocabulaire d'un modèle de langage. L'approche est indépendante du modèle, permet d'appliquer des connaissances et des contraintes spécifiques au domaine, et permet la construction d'interfaces fiables en garantissant la structure du texte généré. Il ajoute peu de frais au processus de génération de séquences de jetons et surpasse considérablement les solutions existantes. Une implémentation est fournie dans la bibliothèque Python open source Outlines [Louf et Willard].
Nous sommes préoccupés par le problème de la génération de séquences de jetons à partir d'un grand modèle de langage (LLM) [Vaswani et al., 2017, Radford et al., 2019] conformes aux expressions régulières ou aux grammaires sans contexte (CFG). Ce type de génération LLM guidée est utilisé pour rendre la sortie du modèle LLM utilisable sous des exigences de formatage rigides qui sont difficiles ou coûteuses à capturer uniquement par un réglage fin [Beurer-Kellner et al., 2023, Scholak et al., 2021, Poesia et al., 2022a, Rabinovich et al., 2017, Weng, 2021, Dong et al., 2023, Poesia et al., 2022b, Geng et al., 2023, Wang et al., 2023]. De telles fonctionnalités ont récemment été généralisées dans les bibliothèques et interfaces d'invite [Microsoft, 2023, Beurer-Kellner et al., 2023, Rickard, 2023a,b], mais leur applicabilité peut être limitée par leurs coûts de mise à l'échelle.
La plupart des implémentations de génération guidée biaisent les valeurs de score utilisées pour déterminer les probabilités des jetons dans le vocabulaire d'un LLM. Une approche courante et suffisante implique des évaluations répétées sur l’ensemble du vocabulaire afin de déterminer quels jetons sont valides – en fonction des contraintes et des jetons précédemment échantillonnés – et de fixer à zéro les probabilités de jetons invalides. Cette approche implique un coût O(N) fixe pour chaque jeton généré, où N est la taille du vocabulaire du LLM.
Nous proposons une approche qui utilise la formulation d'expressions régulières de machine à états finis (FSM) pour démarrer et arrêter arbitrairement la génération guidée et permettre la construction d'un index avec lequel l'ensemble des jetons de probabilité non nulle peut être obtenu efficacement à chaque étape. Le résultat est un algorithme qui coûte en moyenne O(1).
Pour le cas des expressions régulières, notre approche partage le plus de similitudes avec Kuchnik et al. [2023], qui utilise une formulation de transducteur pour obtenir des FSM définis sur le vocabulaire d'un modèle de langage, et ces FSM contiennent en grande partie les mêmes informations et avantages de mise à l'échelle que les indices décrits ici. Notre approche ne nécessite pas l'abstraction complète du transducteur et peut être utilisée pour étendre plus facilement les bibliothèques d'expressions régulières existantes et efficaces sans modifier les automates sous-jacents et leurs implémentations.
Plus important encore, notre approche d'indexation peut également être étendue aux analyseurs CFG et LALR(1) pour permettre une génération guidée efficace selon les formats de données et langages de programmation populaires (par exemple JSON, Python, SQL, etc.). La transition vers l'analyse syntaxique se fait au moyen d'augmentations des composants et opérations de l'analyseur LALR(1) traditionnels, ce qui en fait – encore une fois – une approche qui peut être utilisée pour étendre les implémentations d'analyseurs existantes.
Cet article est disponible sur arxiv sous licence CC 4.0.