LLMS open-source affineux pour le texte à SQL: Présentation du projet et motivations (article 1 de 3)

 LLMS open-source affineux pour le texte à SQL: Présentation du projet et motivations (article 1 de 3)


Auteur (s): Lorentz Yeung

Publié à l’origine sur Vers l’IA.

GPT-4 Mini d’Openai comme référence pour ce projet. Photo de Growtika sur Désactiver

Dans le monde en évolution rapide de l’IA, transformant langage naturel Les questions dans les requêtes SQL exécutables – appelées texte à SQL – sont devenues un changement de jeu pour l’analyse des données. Imaginez demander à votre base de données: «Combien de clients ont passé des commandes au dernier trimestre, regroupés par région et commandés par taux de croissance composé?» et obtenir une requête SQL parfaitement conçue en retour. Ce projet explore le réglage open-open-source Modèles de grande langue (LLMS) Comme Meta’s LaLAMA 3.1 8b Instruct et la série QWEN 2.5 d’Alibaba pour exceller à cette tâche, en utilisant des techniques avancées comme l’optimisation des politiques de récompense guidée (GRPO). Plus de 60 séances de formation (1600+ heures), j’ai expérimenté sur une configuration haut de gamme (RTX 4090 via WSL2 sur Windows 11) pour pousser ces modèles vers la gestion des requêtes complexes.

Ceci est le premier d’une série d’articles. Ici, je couvrirai la méthodologie du projet, les éléments de base, les méthodes, ensembles de donnéesMes motivations (y compris pourquoi les modèles open source sont cruciaux pour les écosystèmes fermés) et un aperçu de haut niveau des résultats. Le deuxième article plongera dans la configuration de la machine, et le troisième détaillera les résultats et les principaux plats à retenir.

Qu’est-ce que ce projet?

En son cœur, ce projet vise à créer un LLM «expert» adapté aux tâches de texte à SQL sur un schéma de base de données spécifique. J’ai commencé avec le modèle d’instruct de lama 3.1 8b (de Meta) et je suis ensuite passé aux variantes QWEN 2.5 (comme QWEN2.5-coder-7b-instruct) pour de meilleures performances sur les tâches liées au codage, et je les échange enfin à part entière. Le réglage fin s’est concentré sur les requêtes compatibles SQLite, mettant l’accent sur les opérations complexes comme l’auto-jointure, l’analyse temporelle, les totaux de course et la détection de récidive.

L’objectif final? Un modèle qui rivalise avec les services payants comme Grok ou Perplexity pour la génération SQL complexe, mais dans une configuration open source et axée sur la confidentialité. Est-il possible? Si oui, combien de heures prendrait-il? À quel point pouvons-nous nous attendre? À la fin de ce projet, j’ai mes réponses pour toutes ces questions. Si vous n’êtes intéressé que par les résultats / réponses finaux. Veuillez passer au 3ème article.

Méthodes utilisées

J’ai adapté des techniques d’articles tels que «affliger un text-to-sql llm pour le raisonnement en utilisant grpo» de yi ai, optimisant pour mon matériel (RTX 4090 avec 24 Go de VRAM). J’ai modifié ce script pour répondre à mes besoins, par exemple mon script se concentre sur l’équilibrage des ensembles de données de formation, puis j’ai concentré sur des requêtes SQL complexes; J’ai également organisé mon propre ensemble de données pour le projet. J’ai ma propre méthode d’évaluation pour une évaluation après la formation.

Quoi qu’il en soit, les méthodes clés incluent:

1. Optimisation de politique de récompense guidée (GRPO)

GRPO est une approche d’apprentissage de renforcement qui affine le modèle en fonction de plusieurs signaux de récompense. Contrairement au réglage fin supervisé, il encourage l’exploration tout en pénalisant les écarts par rapport à une politique de référence (via KL Divergence).

Fonctions de récompense:

  • Récompense au format: Assure que la sortie suit (Heuristique à base d’heuristique, 0–1).
  • Récompense de l’exactitude SQL: Compare les résultats de l’exécution SQL générés à la vérité au sol (en utilisant SQLGLOT pour l’analyse et la requête réelle en cours d’exécution).
  • Récompense de la complexité: Aligne la complexité de la requête avec l’étalon-or (sur la longueur et les opérations des jetons).
  • Résidération de la qualité: Évalue la clarté du raisonnement (heuristique comme la longueur, l’utilisation du terme SQL et la structure).

Hyperparamètres: taux d’apprentissage de 1E-6 à 4E-5, bêta (pénalité KL) 0,01–0,1, Norme de gradient maximum 1,0–10,0, époques 3–10 (au moins 12 recommandées), taille du lot 8.

Bibliothèques: trl pour Grpotrainer, insuffisantes pour GPU Optimisations, PEFT pour LORA, bitsandbytes pour la quantification 4 bits / 8 bits pour s’adapter dans du VRAM de 14 à 20 Go.

2. Lora pour un réglage fin efficace

  • Au lieu des mises à jour du modèle complet, LORA ajoute des adaptateurs de bas rang (rang 8–32) pour cibler des modules comme les couches d’attention, ne formant que des paramètres ~ 20m.
  • Cela a maintenu des temps de formation raisonnables (~ 2–72 heures par course) et de la mémoire de moins de 15 Go pour la plupart des séances.

3. Métriques d’évaluation

  • Score de validité syntaxique (SVS): La requête fonctionne-t-elle sans erreurs?
  • Score d’exactitude sémantique de la vérité au sol (GTSCS): Les résultats correspondent-ils à la requête en or?
  • Score d’exactitude sémantique de l’IA (AISCS): S’il ne ressemble pas à GT, ce serait toujours juste? Grok porte un jugement sur l’équivalence sémantique dans ce sens.
  • Score de précision composite (CPS): Moyenne de SVS, GTSCS, AISCS.
  • Testé sur 10 requêtes (5 faciles / moyens, 5 dures), exécutés via SQLite.

4. matériel et environnement

  • Ran sur WSL2 (Ubuntu 22.04) avec Cuda 12.1, Pytorch 2.2.0.
  • Dépendances: Transformers 4.43.0, DataSets 2.20.0, SQLGLOT 25.1.0, etc. (liste complète dans les exigences.txt).
  • Défis: Déliares et conflits de dépendance CUDA résolus (par exemple, rétrogradant TRL à 0,8,6 pour la compatibilité).

Ensembles de données

Les ensembles de données ont évolué à travers les sessions pour se concentrer sur la complexité:

  • Ensemble de données initial: De B-MC2 / SQL-CREATE-CONText (Face étreint), ~ 300–500 Exemples pour le prototypage rapide, puis l’ensemble de données entier pour l’analyse comparative. Formaté avec des invites comme: «Schéma: (contexte) Question: (langage naturel) ».
  • Ensemble de données organisé: L’ensemble de données d’origine était d’environ 10 000 lignes au total, validée à 5 020 initialement, puis concentrée sur 616 requêtes de complexité-3 (complexité 1 = facile, 2 = moyen, 3 = dur) qui a été validée avec, par exemple, compter la catégorie avec les totaux de course (par exemple, agrégats trimestriels utilisant Strftime); Séquences temporelles (par exemple, en utilisant Julianday pour les différences de date), problèmes récurrents (par exemple, rang () pour la détection). À ce stade, le point de données est formaté avec des invites telles que: «Schéma: (contexte) Question: (langage naturel), vérité au sol: (SQL), complexité: (niveau dans INT)».
  • Ensemble d’évaluation: L’ensemble d’évaluation se compose de 10 requêtes de test optimisées conçues pour évaluer les modèles de génération SQL sur une base de données de centre d’appels synthétiques («Wandsworth_CallCenter_Sampled.DB») qui se trouve dans le lien ci-dessous. Il comprend des invites de langage naturel nécessitant des requêtes SQL complexes, divisées uniformément en 5 exemples faciles / moyens et 5 (basés sur des facteurs tels que les joints de soi, la logique temporelle et les agrégations). L’ensemble évalue les modèles sur la validité syntaxique (SQL exécutable), l’exactitude sémantique (via la correspondance de sortie de vérité au sol et la revue assistée par l’IA en utilisant Grok), et la précision globale, fournissant des informations sur les performances du modèle sur des tâches réalistes et spécifiques au domaine.
  • Augmentation: Ajout de requêtes synthétiques pour la diversité, assurant une compatibilité SQLite. Aucun ensemble de données externes comme Spider pour éviter les fuites.

La formation a utilisé 200 à 10 000 exemples par exécution, avec une longueur de séquence maximale de 4 096 pour gérer de longs schémas.

Raisons du projet

Ce n’est pas seulement un exercice de recherche – il est motivé par les besoins réels. Voici pourquoi j’ai lancé ceci:

  1. Le réglage fin pour une seule base de données est-il faisable?
    Je voulais tester si nous pouvons créer un LLM «Domain Expert» pour un projet ou une base de données. Les entreprises ont souvent des schémas propriétaires (par exemple, les données clients dans un CRM). Un petit modèle open-open a été affiné les questions difficiles et nuancées comme «Identifier les demandes de services récurrentes dans les services avec des problèmes croissants au cours de la dernière année, en les classant par gravité« , ou « Identifiez les adresses avec les problèmes récurrents de déversement de la mouche sur différents mois et classez les services par le nombre de ces adresses»? L’idée est de rendre le modèle si à l’écoute que les utilisateurs peuvent demander des requêtes complexes et ad hoc et obtenir des réponses fiables sans écriture manuelle SQL.
  2. Combien de formation est nécessaire?
    Si viable, quel est le sweet spot? Les premières courses ont montré que 300 à 500 exemples suffisent pour des requêtes simples, mais celles des complexes avaient probablement besoin de 600+ requêtes axées sur le dur sur 3 à 8 époques. J’ai cherché à quantifier: 1 000 points de données et 12 époques peuvent-ils pousser les GTSC> 50% sur les requêtes difficiles?
  3. De combien de temps a-t-il besoin?
    L’efficacité est importante pour une véritable adoption. Sur un RTX 4090, les courses ont duré 2 à 4 heures (250 à 3 000 pas). La mise à l’échelle à 12 époques peut prendre 48 à 72 heures ou même plus, mais en vaut-elle la peine pour la précision de la production de production?
  4. Quel modèle open source convient le mieux?
    J’ai comparé LLAMA 3.1 8B Instruct (Strong In Instructions suivant les instructions) par rapport aux séries de codeur QWEN 2.5 (optimisées pour le code / SQL). SPOILER: QWEN a dérangé en ramassant de nouvelles fonctions, mais les deux tailles 7b – 8b ont lutté avec une syntaxe ultra-complexe. Mes expériences m’ont dit Même les modèles 13B ont lutté avec ces questions.
  5. La confidentialité et les écosystèmes fermés exigent des solutions open source
    De nombreuses entreprises conservent des bases de données à la sécurité aériennes – les exposant aux API de cloud comme les violations des risques OpenAI ou GROK. Les modèles payants sont interdits, donc l’ouverture est la clé. En mars 2025, seules les plates-formes rémunérées massives gèrent des requêtes vraiment difficiles. Par exemple: «Calculer les totaux de fonctionnement des demandes par quartier, en utilisant les CTES pour identifier des mois avec des escalades consécutives, classés par les différences de julianday.» Grok et Perplexity l’ont cloué avec des CTES et des fonctions de fenêtre correctes, mais des modèles open source plus petits, même la syntaxe invalide hallucinée par ChatGpt 4O. Ce projet teste si les ponts affinés des ponts qui s’échappent abordable.

Ces motivations découlent du déploiement pratique de l’IA: autonomiser les outils internes sans verrouillage des fournisseurs.

Quels sont les résultats?

Sur plus de 60 courses, plus de 1600 heures cumulées, les modèles se sont améliorés sur des requêtes faciles / moyennes (CPS 0,53–0,87, contre 0,43 à 0,50), mais les dures sont restés difficiles (GTSCS 0,00–0,20 contre 0,60 d’OpenAI). Qwen a surpassé le lama dans un SQL simple, et des bits d’apprentissage comme Strftime et Joint – mais CTES et le classement les ont échappés. Paramètres optimaux: 2e-5 ou moins le taux d’apprentissage pour la stabilité, 0,03 bêta, 12+ époques sur 1 000 requêtes. Temps: ~ 72 + heures par course solide. Viable? Oui, pour les bases, mais une expertise complexe a besoin de plus de données / époques. Tous les détails de l’article 3! J’ai décidé d’inclure ma configuration dans l’article 2 dans le sens où j’ai moi-même eu beaucoup de mal à mettre en place ma propre machine pour la formation LLM et la finetuning. Beaucoup de plantages et d’incompatibilité. Avec mes détails de configuration actuels, celui qui veut une solution rapide pour leur machine en bénéficiera, pas seulement limité pour le réglage fin lié à GRPO ou SQL.

Restez à l’écoute pour le guide de configuration et les résultats en profondeur. Questions? Commentaire ci-dessous!

Références:

B-MC2 / SQL-CREATE-CONTEXT · Datasets à Hugging Face

wandsworth_callcenter_sampled.db · Entz / Conseil_2 à Main

wandsworth_callcenter_sampled.csv · Entz / Conseil_2 à Main

Et si vous avez apprécié l’article – je serais ravi si vous envisagez de lancer une pièce de monnaie via Paypal ou devenir un Sponsor github. Votre soutien fait fonctionner le train. Faisons écho à dire James Bently, continuons à contribuer à la communauté de l’IA et à profiter à l’humanité.

Soutenir l’auteur

Si vous avez trouvé cet article utile, veuillez envisager de faire un don à mon pot PayPal Tip!

Payer Pui Yeung en utilisant Paypal.me

Allez sur paypal.me/entzyeung et entrez le montant. C’est plus sûr et plus sûr. Vous n’avez pas de compte PayPal? Aucun problème.

paypal.me

Votre soutien signifie l’univers pour moi et me permet de rester sur cette route solitaire d’exploration – continuez à expérimenter, à écrire des articles, à faire des tutoriels,…

Merci!

Publié via Vers l’IA



Source link

Related post