Rémi Louf :
Outlines est une bibliothèque Python qui se concentre sur la génération de texte avec de grands modèles de langage. Brandon et moi ne sommes pas des experts en LLM et avons commencé le projet il y a quelques mois parce que nous voulions mieux comprendre comment le processus de génération fonctionne. Notre formation initiale est la programmation probabiliste, relationnelle et symbolique.
Récemment, nous avons trouvé un moyen rapide de générer du texte qui correspond à une expression régulière (https://blog.normalcomputing.ai/post...eneration.html...). L'idée de base est simple : les expressions régulières ont une représentation équivalente en Automate Déterministe-Fini (DFA). Nous pouvons transformer ce DFA en un modèle génératif : dans chaque état, nous obtenons une liste de symboles qui correspondent à des complétions qui correspondent partiellement à l'expression régulière. Nous masquons les autres symboles dans les logits renvoyés par un grand modèle de langage, nous échantillonnons un nouveau symbole et nous passons à l'état suivant. La subtilité est que les modèles de langage travaillent avec des jetons, et non des symboles, de sorte que nous dérivons un nouveau FSM dont l'alphabet est le vocabulaire du modèle. Nous pouvons le faire en un seul passage sur le vocabulaire.
La génération des masques de jetons ne nécessite donc qu'une consultation du dictionnaire à chaque état. Notre méthode fait pâlir d'envie d'autres bibliothèques comme Microsoft guidance.
À partir de là, il n'y avait qu'un petit pas à franchir pour pouvoir générer du texte qui suit un schéma JSON (https://json-schema.org/), ou qui peut être analysé dans un modèle pydantique (https://docs.pydantic.dev/latest/usage/models/). La méthode fonctionne avec les types union, les types optionnels, les schémas imbriqués, les tableaux, tout. Il est garanti que la sortie est analysable.
Je pense que c'est cool, et j'ai passé beaucoup de temps à regarder des modèles même minuscules sortir du JSON valide pendant le week-end. J'espère que vous en ferez autant.
J'attends avec impatience les commentaires, les rapports de bogues, les demandes de fonctionnalités et les discussions !
Edit : Lien vers notre pré-impression expliquant la méthode et comment elle peut être étendue pour générer du texte qui suit une Grammaire Contextuelle Libre https://arxiv.org/abs/2307.09702
Outlines est une bibliothèque Python qui se concentre sur la génération de texte avec de grands modèles de langage. Brandon et moi ne sommes pas des experts en LLM et avons commencé le projet il y a quelques mois parce que nous voulions mieux comprendre comment le processus de génération fonctionne. Notre formation initiale est la programmation probabiliste, relationnelle et symbolique.
Récemment, nous avons trouvé un moyen rapide de générer du texte qui correspond à une expression régulière (https://blog.normalcomputing.ai/post...eneration.html...). L'idée de base est simple : les expressions régulières ont une représentation équivalente en Automate Déterministe-Fini (DFA). Nous pouvons transformer ce DFA en un modèle génératif : dans chaque état, nous obtenons une liste de symboles qui correspondent à des complétions qui correspondent partiellement à l'expression régulière. Nous masquons les autres symboles dans les logits renvoyés par un grand modèle de langage, nous échantillonnons un nouveau symbole et nous passons à l'état suivant. La subtilité est que les modèles de langage travaillent avec des jetons, et non des symboles, de sorte que nous dérivons un nouveau FSM dont l'alphabet est le vocabulaire du modèle. Nous pouvons le faire en un seul passage sur le vocabulaire.
La génération des masques de jetons ne nécessite donc qu'une consultation du dictionnaire à chaque état. Notre méthode fait pâlir d'envie d'autres bibliothèques comme Microsoft guidance.
À partir de là, il n'y avait qu'un petit pas à franchir pour pouvoir générer du texte qui suit un schéma JSON (https://json-schema.org/), ou qui peut être analysé dans un modèle pydantique (https://docs.pydantic.dev/latest/usage/models/). La méthode fonctionne avec les types union, les types optionnels, les schémas imbriqués, les tableaux, tout. Il est garanti que la sortie est analysable.
Je pense que c'est cool, et j'ai passé beaucoup de temps à regarder des modèles même minuscules sortir du JSON valide pendant le week-end. J'espère que vous en ferez autant.
J'attends avec impatience les commentaires, les rapports de bogues, les demandes de fonctionnalités et les discussions !
Edit : Lien vers notre pré-impression expliquant la méthode et comment elle peut être étendue pour générer du texte qui suit une Grammaire Contextuelle Libre https://arxiv.org/abs/2307.09702
- Outlines 〰 est une bibliothèque de génération de texte neuronal. Vous pouvez la considérer comme un remplacement plus souple de la méthode generate de la bibliothèque Transformers.
- Outlines 〰 aide les développeurs à guider la génération de texte pour construire des interfaces robustes avec des systèmes externes. Il fournit des méthodes de génération qui garantissent que la sortie correspondra à une expression régulière ou suivra un schéma JSON.
- Outlines 〰 fournit des primitives d'incitation robustes qui séparent l'incitation de la logique d'exécution et conduisent à des implémentations simples de générations de quelques coups, de ReAct, de méta-prompting, d'agents, etc.
- Outlines 〰 est conçu comme une bibliothèque destinée à être compatible avec un écosystème plus large, et non à le remplacer. Nous utilisons aussi peu d'abstractions que possible, et la génération peut être entrelacée avec le flux de contrôle, les conditionnelles, les fonctions Python personnalisées et les appels à d'autres bibliothèques.
- Outlines 〰 est compatible avec tous les modèles. Il ne s ' interface avec les modèles que par l ' intermédiaire des logits du prochain jeton. Il peut également être utilisé avec des modèles basés sur l'API.
Caractéristiques
- Simple et puissantes primitives d'incitation basées sur le moteur de templating Jinja
- Génération guidée, y compris choix multiples, contraintes de type et arrêt dynamique
- Génération rapide guidée par des expressions rationnelles (regex)
- Génération JSON rapide suivant un schéma JSON ou un modèle Pydantique
- Intercaler des complétions avec des boucles, des conditionnelles et des fonctions Python personnalisées
- Mise en cache des générations
- Intégration avec les modèles transformers de HuggingFace
Installation : Outlines est disponible sur PyPi :
Code : | Sélectionner tout |
pip install outlines
Source : Rémi Louf
Et vous ?
Qu'en pensez-vous ?
Voir aussi :
Les chatbots alimentés par des grands modèles de langage (LLM) entraîneront un pic de violations de données d'initiés, 82 % des entreprises ne disposant pas de stratégie de gestion des risques
Stability AI annonce la sortie de StableCode, son tout premier produit d'IA générative LLM pour le codage
Les experts techniques commencent à douter que les « hallucinations » de ChatGPT disparaîtront un jour : « Ce n'est pas réparable »., pour eux, les LLM vont continuer d'inventer des faits