LMQL : un langage de requête pour les grands modèles linguistiques

Introduction à LMQL

LMQL (Language Model Query Language) est un langage de requête conçu pour faciliter l'interaction avec les grands modèles linguistiques (LLM). Il combine les avantages de la formulation de questions en langage naturel et l'expressivité de Python. Avec seulement quelques lignes de code LMQL, les utilisateurs peuvent exprimer des requêtes avancées, multi-parties et assistées par des outils, qui sont ensuite optimisées par le runtime LMQL pour être exécutées efficacement dans la boucle de décodage du modèle linguistique.

Présentation de LMQL

Commencer avec LMQL

Pour installer la dernière version de LMQL, vous devez disposer de Python >= 3.10 et exécuter la commande suivante :

pip install lmql

Exécution des programmes LMQL

Après l'installation, vous pouvez lancer l'IDE Playground LMQL avec la commande suivante :

lmql playground

Cela ouvre un IDE basé sur un navigateur, qui comprend de nombreux exemples de programmes LMQL. Si l'IDE ne se lance pas automatiquement, allez sur http://localhost:3000.

Vous pouvez également utiliser lmql run pour exécuter des fichiers .lmql locaux. Notez que lorsque vous utilisez des modèles HuggingFace Transformers locaux dans l'IDE Playground ou via lmql run, vous devez d'abord lancer une instance de l'API d'inférence LMQL pour le modèle correspondant via la commande lmql serve-model.

Présentation de LMQL

Caractéristiques principales de LMQL

  1. Scripted Prompts : LMQL généralise la formulation de questions en langage naturel, la rendant plus expressive tout en restant accessible. LMQL s'appuie sur Python pour permettre aux utilisateurs d'exprimer des questions en langage naturel contenant également du code.
  2. Contraintes de sortie : Dans LMQL, les utilisateurs peuvent spécifier des contraintes logiques de haut niveau sur la sortie du modèle linguistique. Cela permet d'appliquer strictement de nombreuses contraintes, rendant impossible pour le modèle de générer un contenu qui ne satisfait pas les exigences.
  3. Playground et débogueur : LMQL inclut un IDE Playground pour le développement de requêtes. Cela permet aux utilisateurs d'inspecter l'état de l'interpréteur, les résultats de validation et les résultats du modèle à tout moment pendant la génération.
  4. Efficacité : Grâce à une sémantique d'évaluation partielle innovante, LMQL évalue et contrôle le processus de décodage du modèle linguistique au niveau des tokens, ce qui entraîne des gains d'efficacité significatifs par rapport aux approches existantes.
  5. Séparation Frontend/Backend : LMQL fournit une interface de haut niveau pour interagir avec les modèles linguistiques, rendant le code de requête portable et indépendant du modèle. Cela est réalisé en faisant abstraction des détails spécifiques au modèle, tels que la mise en lot, le décodage et la tokenisation.

Recherche et résultats expérimentaux

LMQL est basé sur l'article de recherche "Prompting Is Programming: A Query Language For Large Language Models" accepté lors de la conférence ACM SIGPLAN PLDI'23. Les auteurs, Luca Beurer-Kellner, Marc Fischer et Martin Vechev de SRIlab à l'ETH Zürich, en Suisse, présentent l'idée novatrice de Language Model Programming (LMP). LMP généralise la formulation de questions pour les modèles linguistiques, passant de simples textes à une combinaison intuitive de textes et de scripts. De plus, LMP permet de spécifier des contraintes sur la sortie du modèle linguistique, facilitant ainsi l'adaptation à de nombreuses tâches tout en fournissant des sémantiques de haut niveau.

Pour mettre en œuvre LMP, les chercheurs ont développé LMQL, qui exploite les contraintes et le flux de contrôle d'une invite LMP pour générer une procédure d'inférence efficace qui minimise le nombre d'appels coûteux au modèle linguistique sous-jacent.

Les résultats expérimentaux montrent que LMQL peut capturer un large éventail de méthodes de formulation de questions de pointe de manière intuitive, facilitant en particulier les flux interactifs difficiles à mettre en œuvre avec les API de haut niveau existantes. L'évaluation démontre que LMQL conserve ou augmente la précision sur plusieurs tâches en aval, tout en réduisant considérablement la quantité de calcul ou de coûts nécessaires dans le cas des API payantes (économies de coûts de 26 à 85%).

Conclusion

LMQL est un langage de requête innovant et puissant pour les grands modèles linguistiques, offrant une expressivité accrue et des gains d'efficacité par rapport aux approches traditionnelles. Grâce à ses fonctionnalités uniques telles que les Scripted Prompts, les contraintes de sortie, le Playground et le débogueur, LMQL facilite l'interaction avec les modèles linguistiques et accélère le développement d'applications basées sur ces modèles.