RAG, bases de données vectorielles et IA Gen

Dans cet épisode nous allons parler de RAG, de bases de données vectorielles et d’IA générative.

On commence à en avoir marre de l’IA générative et de la place que cela prend partout. Chacun y va de son couplet et vas-y que les emplois sont menacés, vas-y que la productivité va être bouleversée, j’en passe et des meilleures.

Voilà donc tout le problème, on en parle beaucoup mais est-ce qu’on creuse suffisamment ses principes techniques pour mieux saisir comment ça marche ?

Or, si l’on veut en effet appréhender la portée tout en appréciant à leur juste mesure les limites du sujet, il faut le faire. C’est un préalable.

En ce sens, une des configurations usuelles en la matière c’est ce qu’on appelle le RAG. On va expliquer ce à quoi cela sert et ce dont il s’agit. Alors, RAG, bases de données vectorielles et IA gen, c’est quoi l’histoire ?

On sait que les robots conversationnels sont plein de biais et parfois même ils hallucinent carrément, c’est-à-dire qu’ils inventent des réalités qui n’existent pas.

Juste pour illustrer, les tests réalisés par OpenAi lui-même (Wei J & al, 2024) montrent qu’aucun LLM – les leurs avec OpenAi o1-preview ou Claude 3.5 Sonnet d’Anthropic – ne fait mieux que 45% de bonnes réponses. Mais c’est un autre sujet.

Une des réponses classiques pour faire bien mieux c’est ce qu’on appelle le RAG. Encore un joli acronyme inventé par le monde du digital. RAG cela veut dire « Retrieval Augmented Generation ».

En clair, tu cherches la réponse à ta question non pas ce sur quoi le robot a été entraîné mais dans une base documentaire que tu connais. Au moins, tu sais d’où cela vient et cela réduit les taux d’erreur à quelques pourcents.

En vrai, d’ailleurs, ce n’est plus de l’IA gen mais une utilisation de l’IA gen en plus sur une technique plus traditionnelle mais redoutablement efficace. Il y a deux grands trucs là-dedans à comprendre.

1. La base documentaire et comment on l’interroge d’une part et 2 la place de l’IA générative avec son LLM comme Claude, GPT ou Mistral d’autre part.

D’un côté donc une base documentaire c’est-à-dire un ensemble de documents. Une collection de fichier Word par exemple. Pour pouvoir interroger ces documents, ils vont être indexés et mis dans une base de données.

La particularité c’est qu’ici on fait appel à ce qui s’appelle une base de données vectorielles. En gros, cela ne consiste pas à prendre un document et mettre son contenu dans un champ de base de données classique.

On transforme d’abord ces documents en vecteurs et ce sont ces vecteurs qui seront stockés dans la base. Ce qui offrira ensuite, on le verra, des possibilités de recherche bien plus intéressantes.

Un vecteur c’est quoi ? Si je te dis rouge vif c’est aussi 255, 0, 0 en code RVB ou rouge, vert bleu. Alors que bleu vif c’est 0, 0, 255 etc. En d’autres termes c’est une liste de nombres qui codifie ou représente le contenu.

Pour réussir à faire cela, il y a des étapes. La première c’est de découper, notamment les textes, en petits bouts, c’est ce qu’on appelle la « tokenisation ». Par exemple la phrase « les chats sont adorables » peut se découper en 4 tokens : les-chats-sont-adorables.

Je n’aime pas les chats. Alors reviens à nos moutons.

Mais on peut découper plus. « adorables » se découpe peut-être en ador-ables. Puis, une fois que tu as tous tes petits bouts, ces fameux tokens, alors tu passes à la deuxième étape : traduire chaque petit bout en nombre. La couleur, rappelle-toi on l’a tokenisée en RVB. Maintenant il faut mettre les valeurs. Combien à R, à V et à B.

On aura alors une sorte de dictionnaire entre des tokens d’un côté et les nombres pour les identifier de l’autre. On peut alors passer à la troisième et dernière étape qui consiste ensuite à vectoriser c’est-à-dire faire de ta phrase « les chats sont adorables » les vecteurs numériques correspondants.

On utilise pour cela un modèle – on appelle cela un modèle d’embedding (comme Word2Vec, FastText ou BERT par exemple) qui transforme cette séquence en un vecteur de nombres qui capture en quelque sorte le sens du texte.

Donc, en gros on démarre avec un saucisson. Etape 1 on coupe le saucisson en rondelles, étape 2 on donne une valeur à chaque rondelle, étape 3 on refabrique le saucisson avec la valeur de ses rondelles et on stocke dans la base vectorielle un saucisson en valeurs de rondelles et non pas un saucisson.

Exactement, donc on voit toute l’importance de la taille des rondelles mais c’est un autre sujet. La force du truc c’est que, lorsque tu vas faire une recherche en langage naturel, on va appliquer le même procédé à ta question.

La question sera découpée en bouts de question puis vectorisée de la même manière avec le même modèle. Comme cela les petits vecteurs pourront se reconnaître entre eux. On s’approche alors de la notion de sens.

Quand tu demanderas « qui sont les animaux gentils et câlins » les vecteurs feront le lien avec adorables et le chat qui est un animal. Sans les vecteurs, tu n’aurais pas pu car dans ta question, il n’y a aucun des mots de la phrase « les chats sont adorables ».

Mais puisque je te dis que je n’aime pas les chats, enfin ! Reviens aux moutons.

Les moutons, c’est nous quand on croit abusivement que tout cela ce sont les miracles de l’IA générative. En l’occurrence, on ne la fait intervenir qu’avant ou après.

Avant pour améliorer ta question, genre corriger tes fautes d’orthographes ou mieux la formuler. C’est bien de demander « c’est quoi le machin pour fendre du bois et ça marche comment ce truc » l’IA gen et son LLM transformera peut-être ta question en « quels sont les outils pour fendre du bois et comment fonctionnent-ils ? ».

Et surtout après. Pour mettre en forme la réponse issue de la base de données vectorielles, c’est-à-dire rédiger le texte brut pour faire des phrases dignes de ce nom, réorganiser les résultats selon des instructions données en contexte ou synthétiser par exemple.

Au lieu de te répondre merlin, coins ce qui est un peu sec il te dira peut-être ce que vous appelez machin est un outil qu’on dénomme « merlin » et qu’on utilise avec des coins.

Chaque chose à sa place donc, en fonction de ce qu’elle fait bien. Ce qui est drôle c’est qu’on ne parle que de GPT et autres LLM du genre. Or, en vrai, les bases de données vectorielles cela date des années 1970-1980.

Une époque où on a commencé à développer des techniques de recherche par similarité en s’appuyant sur les travaux mathématiques des années 1950-60 sur les espaces vectoriels et la mesure de distance.

Dès les années 2000, Google les utilisait pour de la recherche d’images et le modèle d’embedding dont on a parlé, à savoir Word2Vec date de 2003.

Mais c’est sûr que l’accélération de tout cela et la généralisation de ce que l’on a décrit est plus récente, avec le modèle « transformer » de Google en 2017 puis l’explosion très récente du modèle RAG.

En résumé, le RAG est une technique qui consiste à utiliser la puissance de stockage et de recherche par similarité en langage naturel des bases de données vectorielles combinée aux facultés de langage des LLM pour formuler la question et/ou mettre en forme les résultats.

J’ai bon chef ?

Oui tu as bon mais on ne va pas en faire toute une histoire.