Fine-tuning vs RAG, ou comment améliorer la fiabilité des modèles de langage

Si vous utilisez des grands modèles de langage (LLM) depuis leurs débuts, vous vous souvenez probablement des hallucinations qu’ils pouvaient avoir. Ils pouvaient changer de langue en plein milieu d’une phrase, inventer des nombres ou d’autres données, et ainsi de suite. Aujourd’hui, utiliser un LLM semble beaucoup plus sûr, car ce type de comportement a largement diminué. Les LLM ne commettent plus d’erreurs faciles à repérer ; ils sont devenus très bons pour masquer leurs faiblesses. Pour les exploiter efficacement, il est donc essentiel de les rendre fiables afin d’éviter de devoir vérifier systématiquement leurs réponses ou pour pouvoir les intégrer à un processus automatisé.

L’amélioration de la qualité des prédictions des LLM a été une préoccupation depuis leur apparition. Malgré des entraînements de plus en plus poussés, il est impossible de produire un modèle qui sait tout et ne fait jamais d’erreur. Il existe plusieurs façons d’accroître la confiance que l’on peut avoir dans leurs réponses. Les deux solutions les plus connues sont le fine-tuning et la génération augmentée par récupération (RAG). Ces deux méthodes reposent sur l’ajout de données supplémentaires : le fine-tuning incorpore directement ces données dans le modèle, tandis que le RAG lui fournit les informations pertinentes au moment de l’inférence pour améliorer la qualité des réponses. Comme toujours en machine learning, la règle du « garbage in, garbage out » s’applique, quelle que soit la solution choisie. Examinons chacune d’elles plus en détail avant de répondre à la question de leur utilisation.

Fine-tuning d’un grand modèle de langage

Le fine-tuning consiste à poursuivre l’entraînement d’un LLM afin d’améliorer ses connaissances sur des domaines spécifiques, tout en conservant les acquis issus de son entraînement initial. Il permet par exemple de combler les lacunes d’un modèle sur des données médicales ou financières. Le fine-tuning peut aussi améliorer les performances sur des tâches précises comme la classification ou la réponse aux questions (Q&A). De plus, il permet de formater les réponses du modèle selon des exigences spécifiques (sous forme de listes à puces, par exemple). Enfin, il peut modifier l’alignement du modèle si celui-ci ne correspond pas aux attentes.

Cependant, le fine-tuning est une tâche complexe, bien qu’il soit plus simple que l’entraînement d’un modèle depuis zéro. Même s’il ne consiste souvent qu’à ajuster les dernières couches du modèle plutôt que l’ensemble de ses poids, il reste soumis aux mêmes risques qu’un entraînement classique. L’un des principaux dangers est le surapprentissage : si le jeu de données est trop petit, le modèle risque de le mémoriser au lieu d’en tirer des enseignements, ce qui compromet sa capacité à généraliser à de nouveaux exemples. Un autre risque est l’oubli catastrophique (catastrophic forgetting) : si le fine-tuning est trop agressif, il peut altérer les capacités initiales du modèle en modifiant trop fortement ses poids.

Le fine-tuning est un processus très puissant qui peut transformer en profondeur un modèle pré-entraîné, mais il est aussi coûteux en temps et en ressources. Sauf pour des modèles de petite taille, le fine-tuning peut prendre plusieurs jours. C’est pourquoi, lorsque l’objectif est simplement d’enrichir un modèle avec de nouvelles connaissances, beaucoup privilégient une approche basée sur le RAG.

Retrieval Augmented Generation (RAG)

Le RAG est une technique efficace pour améliorer la fiabilité des LLM. En leur fournissant un contexte pertinent juste avant qu’ils ne produisent une réponse, on réduit drastiquement leurs hallucinations et leurs erreurs.

Le principe de RAG est d’associer au modèle au moins une base de données qu’il peut ou doit interroger avant de répondre. Il est possible d’utiliser une base unique couvrant l’ensemble des connaissances nécessaires ou d’organiser les informations sous forme de bases spécifiques à différents domaines afin d’accélérer la récupération des données.

À l’origine, RAG reposait sur des bases de données vectorielles. On y stocke toutes les informations que l’on souhaite rendre accessibles au modèle en utilisant ses embeddings. Lorsqu’une requête est formulée, le modèle génère un vecteur, puis recherche les données les plus pertinentes à inclure dans sa réponse. Les informations sont généralement stockées sous forme de documents qu’il faut découper en petits segments de texte avant de calculer les embeddings. De nombreux outils permettent de mettre en place un système RAG facilement.

Le RAG classique a ensuite évolué vers le graph-RAG, qui exploite un knowledge graph (graphe de connaissances) comme base de données. Cette approche améliore considérablement les réponses des LLM, car les informations ne sont plus simplement stockées sous forme de texte, mais organisées autour d’entités et de relations. Interroger un graphe de connaissances permet ainsi d’obtenir des réponses plus complètes. En effectuant une requête sur une entité et en récupérant son voisinage immédiat ou étendu, le modèle peut bâtir une réponse plus pertinente. Plusieurs stratégies existent pour interroger un graphe : on peut utiliser des embeddings pour identifier les entités pertinentes avant de formuler une requête, ou bien interroger directement le graphe. Les LLM modernes comprennent plusieurs langages de requêtes de graphes comme Cypher ou NGQL, et même si un langage est peu courant, on peut toujours apprendre au modèle à formuler des requêtes adaptées.

La création d’un knowledge graph peut sembler fastidieuse, mais heureusement, les LLM peuvent faciliter cette tâche. Ils excellent dans l’extraction d’entités et de relations à partir de textes, et ils savent aussi générer des requêtes pour construire et mettre à jour un graphe de connaissances.

Que l’on utilise un graph-RAG ou une approche RAG plus classique, cette technique est précieuse pour améliorer les performances des LLM. Elle réduit les hallucinations et renforce la confiance des utilisateurs dans les réponses du modèle. De plus, il est beaucoup plus simple de maintenir et de mettre à jour une base de données qu’un modèle fine-tuné : on peut ajouter ou supprimer des informations à tout moment, ce qui permet de garder le modèle à jour de manière bien plus flexible et sécurisée.

Fine-tuning ou RAG ?

Finalement, la réponse à cette question n’est pas si difficile à trouver. Fine-tuning et RAG ne répondent pas aux mêmes besoins et n’apportent pas les mêmes avantages. Il convient de se demander : « Le fine-tuning est-il adapté à mon cas ? », « Le RAG convient-il pour mon problème ? ». Il existe plusieurs combinaisons possibles de réponses : certains cas nécessitent du fine-tuning, d’autres seulement du RAG, d’autres encore une combinaison des deux, et certains n’ont besoin d’aucune de ces solutions.

Une bonne compréhension de ces techniques et de leurs apports permet de faire le choix adéquat en fonction du problème posé, des données disponibles et du budget alloué.

Les LLM ne doivent pas être utilisés tels quels sans précaution. Pour obtenir des réponses fiables, il est toujours préférable de leur fournir davantage de données plutôt que de se contenter d’une reformulation de la question posée. Le RAG est une solution relativement simple et peu coûteuse qui garantit que les bonnes informations seront prises en compte avant la génération de la réponse.

Le fine-tuning, en revanche, est une solution plus lourde et coûteuse, mais qui offre des possibilités bien plus poussées. Il ne se limite pas à l’ajout de connaissances : il permet aussi de modifier en profondeur la manière dont un modèle répond, d’intégrer des éléments comme l’analyse de sentiment ou encore de modifier de façon permanente son ton et son style. De plus, un modèle fine-tuné est plus rapide en inférence, car il n’a pas besoin d’effectuer une requête et d’attendre une réponse d’une base de données.