Logo LeBonLLM
Carnet de code et de réflexions autour de l’IA générative à la française
codecorpuscontributionsconversationscurationlexiquefaqrecherche
Communauté

Pour échanger, demandez l’accès au :

Infolettre

Nous avons le projet d’une infolettre, seriez-vous intéressé ?

Misc
XLinkedInMentions légales
Contact
falcon

Ré-entraîner un grand modèle de langue, Falcon


Depuis quelques mois, ChatGPT est concurrencé par un écosystème de grands modèles de langue (LLM) en accès ouvert. LLaMa, MPT, Falcon, Pythia : les alternatives fleurissent chaque semaine avec une grande diversité de taille (de 38 millions de paramètres à 65 milliards), de corpus (principalement en anglais ou multilingues) ou de licences d'utilisation (de l'usage de recherche à l'open source).

Opsci et Datactivist ont la joie de travailler avec des services de l'État, la Direction Interministérielle du numérique (DINUM) et la Direction Interministérielle de la Transformation Publique (DITP), sur la construction d'un assistant numérique pour aider les agents à identifier les meilleures informations pour les citoyens. Dans le cadre de ces travaux, nous avons été amenés à développer tout un ensemble de ressources, de jeux de données, de recommandations et de bonnes pratiques pour le ré-entraînement de grands modèles de langue ouverts.

Nous publions l'un des premiers carnets de code documenté en français pour ré-entraîner un grand modèle de langue, Falcon. Falcon a été entraîné sur un corpus assez divers (Refined Web) avec de nombreuses ressources en français. Il est aujourd’hui disponible sur une licence complètement ouverte (à la différence de la première version de Llama, mis à disposition par Meta pour des usages de recherche non commerciale). Ce carnet de code fait partie du projet FabriqueLLM, une compilation inédite de ressources pédagogiques en français pour entraîner des LLM ouverts.

La version de Falcon que nous utilisons (Falcon-Instruct-4-bit) est suffisamment "compacte" pour être utilisée dans la version gratuite de Google Colab. Concrètement, vous pouvez dès aujourd'hui entraîner un LLM sur un corpus de votre choix, sous réserve de le préparer en amont : des questions-réponses dans un domaine précis, de la littérature, de l'assistance d'écriture, de la communication ou, pourquoi pas, de l'astrologie (historiquement l'une des premières formes textuelles à avoir été générée à grande échelle - Pierre-Carl Langlais, “C’est arrivé demain. Copiers-collers astraux : quand les robots vous disent l’avenir”, dans Fake News et viralité avant Internet, Éditions du CNRS, 2020). Pour vous aider dans votre choix, nous mettons à disposition un corpus d’instruction déjà utilisable pour entraîner des modèles en français, FRinstruct.

Comment ça marche ?

Le ré-entraînement s'effectue sur un corpus d'instruction. En comparaison des immenses corpus utilisés pour créer les LLM (plusieurs centaines de millions de mots), ces corpus sont de taille très réduites : environ 58 000 échanges de questions-réponses pour Alpaca (la référence originelle), 15 000 pour Databricks et seulement 1 000 pour Lima. C'est que nous cherchons avant tout à ajuster le style et l'aptitude conversationnelle du modèle. Notre prototype de modèle littéraire entraîné en une seule epochs sur un corpus de roman du 17e siècle assimile l’orthographe, le style, et même les références culturelles de la période.

instruction-novel-17

Par comparaison, ChatGPT ne parvient pas à générer qu’une forme de français standard avec quelques références historiques pas forcément bienvenues :

chatgpt-novel-17

Sur des usages très spécifiques, les modèles ouverts peuvent ainsi donner de meilleurs résultats que ChatGPT avec un temps d’entraînement relativement réduit.

Les corpus d'instruction ont une forme très simple développée par Stanford pour le projet Alpaca : une instruction (généralement une question posée ou un ordre donné), une réponse (output) que le modèle doit s'attacher à reproduire et optionnellement un exemple de texte (input) fourni à titre complémentaire. La forme est peut-être d'ailleurs un peu trop simple : les métadonnées élémentaires (langue, identifiant pérenne, catégorisation) font généralement défaut. Pour un autre projet, nous sommes en train de compiler l'ensemble des instructions aujourd'hui disponibles pour des langues européennes hors anglais.

exemple-instruction

Google Colab fournit gratuitement une infrastructure permettant d'exécuter ou d'entraîner des modèles en deep learning (GPU) mais uniquement dans une certaine limite. Avec le jeu de données et les paramètres par défaut, le fine-tuning prend environ 1h15 ce qui ne devrait pas poser de difficultés. Il n'est effectué que sur une epoch, qui correspond en quelque sorte à un cycle de ré-entraînement. Normalement, les fine-tuning s'effectuent plutôt sur trois epochs, mais c'est déjà une durée suffisante pour réaliser de premiers tests et constater que le modèle s'est bien imprégné du style des instructions.

Le fine-tuning proprement dit est effectué à partir de cette instruction un peu verbeuse :

!falcontune finetune --model=falcon-7b-instruct-4bit --weights=gptq_model-4bit-64g.safetensors --dataset=./instruction_fr_wikipedia_oracle.json --data_type=alpaca --lora_out_dir=./falcon-7b-sample-4bit/ --mbatch_size=1 --batch_size=2 --epochs=1 --lr=3e-4 --cutoff_len=256 --lora_r=8 --lora_alpha=16 --lora_dropout=0.05 --warmup_steps=5 --save_steps=50 --save_total_limit=3 --logging_steps=5 --target_modules='["query_key_value"]'

Si tout se passe bien, vous verrez alors défiler le processus d'entraînement avec trois indicateurs régulièrement réactualisés :

  • Le loss, c'est en quelque sorte le taux d'erreur du modèle : plus cette mesure est basse et plus le modèle parvient à prédire des textes assez approchants de ceux qui sont présents dans le corpus d'instruction.

  • Le learning rate (taux d'apprentissage), c'est la capacité du modèle à mémoriser de nouveaux éléments mais aussi à en oublier des anciens. Cet indicateur va constamment baisser au fur et à mesure de l'apprentissage.

  • L'epoch, c'est le cycle d'apprentissage. Comme nous n'avons défini qu'une epoch cela correspondra à des pourcentages (de 0 à 0.99 à la fin de l'entraînement).

La mise à disposition par Opsci d’un carnet de code réutilisable est un point d'entrée à la découverte d’un écosystème émergent mais déjà très riche...