<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
  <title>Blog · DAH Labs</title>
  <subtitle>Ce que la communauté apprend, construit et partage — écrit par et pour les praticiens data &amp; IA.</subtitle>
  <link href="https://dah-projects-and-innovations.github.io/dah-labs-site/fr/feed.xml" rel="self"/>
  <link href="https://dah-projects-and-innovations.github.io/dah-labs-site/fr/blog/"/>
  <id>https://dah-projects-and-innovations.github.io/dah-labs-site/fr/blog/</id>
  <icon>https://dah-projects-and-innovations.github.io/dah-labs-site/favicon-32.png</icon>
  <updated>2026-10-12T00:00:00.000Z</updated>
  <entry xml:lang="fr">
    <title>TranslatePsy-AfriSLM testé en wolof et en yoruba : quand un petit modèle fait mieux qu&#39;un grand</title>
    <link href="https://dah-projects-and-innovations.github.io/dah-labs-site/fr/blog/translatepsy-afrislm/"/>
    <id>https://dah-projects-and-innovations.github.io/dah-labs-site/fr/blog/translatepsy-afrislm/</id>
    <published>2026-10-12T00:00:00.000Z</published>
    <updated>2026-10-12T00:00:00.000Z</updated>
    <author><name>Pôle Vulgarisation &amp; Veille</name></author>
    <category term="africa" label="Data &amp; Afrique"/>
    <summary>Un modèle de traduction de 0,8 milliard de paramètres devance des systèmes 30 à 150 fois plus gros sur 19 langues africaines. Nous l&#39;avons testé en wolof et en yoruba, avec des locuteurs natifs.</summary>
    <content type="html">&lt;p&gt;Les assistants d&#39;intelligence artificielle maîtrisent l&#39;anglais et le français, mais qu&#39;en est-il des langues africaines comme le yoruba, le haoussa ou le wolof ? Une équipe de recherche a récemment montré qu&#39;un modèle minuscule peut, sur ces langues peu dotées en données, faire mieux que des systèmes bien plus gros. Nous avons voulu le vérifier nous-mêmes.&lt;/p&gt;
&lt;h2 id=&quot;ce-que-propose-le-papier&quot;&gt;Ce que propose le papier&lt;/h2&gt;
&lt;p&gt;L&#39;équipe Tether AI Research (Milan Gritta, Patrik Lambert, Jihye Back et Amril Nazir) a publié sur arXiv &lt;strong&gt;TranslatePsy-AfriSLM&lt;/strong&gt;, un ensemble de ressources ouvertes de traduction automatique pour &lt;strong&gt;19 langues d&#39;Afrique subsaharienne&lt;/strong&gt;, dont le wolof, le yoruba, le haoussa, l&#39;igbo, le swahili et l&#39;amharique. Le projet comprend des données parallèles filtrées, des données synthétiques et trois petits modèles (0,8, 2 et 4 milliards de paramètres), tous disponibles sur Hugging Face.&lt;/p&gt;
&lt;p&gt;Le résultat qui attire l&#39;attention : le plus petit modèle, avec 0,8 milliard de paramètres, devance sur les trois benchmarks testés (Flores-200, BOUQuET et Smol) des modèles bien plus gros, dont &lt;strong&gt;TranslateGemma-27B&lt;/strong&gt; et &lt;strong&gt;Qwen3.5-122B-A10B&lt;/strong&gt;, selon le score SSA-COMET, une métrique conçue pour évaluer les langues africaines.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://arxiv.org/html/2608.18655v2/figures/size_vs_performance_bouquet.png&quot; alt=&quot;Graphique : score SSA-COMET en fonction de la taille du modèle. Les trois modèles TranslatePsy-AfriSLM (0,8B, 2B et 4B) sont en haut à gauche, au-dessus de modèles bien plus gros comme TranslateGemma-27B et Qwen3.5-122B.&quot;&gt;
&lt;em&gt;Fig. 1. Qualité de traduction (SSA-COMET, benchmark BOUQuET) selon la taille du modèle : les modèles TranslatePsy-AfriSLM (points verts) devancent des modèles jusqu&#39;à 150 fois plus gros. Source : Gritta et al. (2026), Figure 1, licence CC BY 4.0.&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;la-qualite-des-donnees-avant-la-taille&quot;&gt;La qualité des données avant la taille&lt;/h3&gt;
&lt;p&gt;Comment un modèle aussi petit fait-il mieux ? Les auteurs l&#39;attribuent au &lt;strong&gt;tri des données d&#39;entraînement&lt;/strong&gt;. Chaque paire de phrases (une phrase et sa traduction) reçoit une note de qualité calculée par trois outils d&#39;évaluation automatique, et seules les meilleures sont gardées.&lt;/p&gt;
&lt;p&gt;L&#39;effet est spectaculaire : entraîné sur toutes les données ouvertes brutes (près de 45 milliards de tokens), un modèle obtient le même score qu&#39;avec seulement 1,76 milliard de tokens bien choisis. Le filtrage écarte ainsi &lt;strong&gt;jusqu&#39;à 96 % des données sans perte de qualité&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://arxiv.org/html/2608.18655v2/figures/pareto_frontier_ssa_vs_tokens__bouquet.png&quot; alt=&quot;Graphique : score SSA-COMET en fonction du nombre de tokens d&#39;entraînement. Le modèle entraîné sur les données brutes, en bas à droite, utilise près de 45 milliards de tokens pour un score plus faible que de nombreuses configurations filtrées bien plus économes.&quot;&gt;
&lt;em&gt;Fig. 2. Chaque forme est un modèle entraîné sur un mélange de données différent. Le modèle « Open-source (Unfiltered) », en bas à droite, utilise le plus de données pour l&#39;un des scores les plus faibles. Source : Gritta et al. (2026), Figure 4, licence CC BY 4.0.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;notre-test&quot;&gt;Notre test&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Modèle :&lt;/strong&gt; &lt;a href=&quot;https://huggingface.co/qvac/TranslatePsy-AfriSLM-0.8B&quot;&gt;qvac/TranslatePsy-AfriSLM-0.8B&lt;/a&gt;, le plus petit des trois.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Langues :&lt;/strong&gt; wolof et yoruba.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Directions :&lt;/strong&gt; anglais ↔ wolof et anglais ↔ yoruba, dans les deux sens.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Phrases :&lt;/strong&gt; 15 phrases de la vie courante.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Évaluation :&lt;/strong&gt; chaque traduction a été relue par un locuteur du wolof ou du yoruba, qui a jugé sa qualité et sa fidélité au sens d&#39;origine.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nous n&#39;avons pas réussi à faire tourner le modèle sur nos ordinateurs : le test a été réalisé sur Google Colab.&lt;/p&gt;
&lt;h2 id=&quot;resultats&quot;&gt;Résultats&lt;/h2&gt;
&lt;p&gt;Sur 15 phrases, &lt;strong&gt;14 ont été jugées bonnes&lt;/strong&gt; par nos relecteurs natifs, et une seule moyenne.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Direction&lt;/th&gt;
&lt;th&gt;Phrases&lt;/th&gt;
&lt;th&gt;Bonne&lt;/th&gt;
&lt;th&gt;Moyenne&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Wolof → anglais&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anglais → wolof&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anglais → yoruba&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Yoruba → anglais&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Quelques exemples représentatifs :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Phrase de départ&lt;/th&gt;
&lt;th&gt;Direction&lt;/th&gt;
&lt;th&gt;Traduction obtenue&lt;/th&gt;
&lt;th&gt;Avis du relecteur&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Senegal, dëkk bu am téranga la&lt;/td&gt;
&lt;td&gt;Wolof → anglais&lt;/td&gt;
&lt;td&gt;Senegal is a very teranga city.&lt;/td&gt;
&lt;td&gt;Bonne&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;I&#39;m heading to work, I&#39;ll be back late&lt;/td&gt;
&lt;td&gt;Anglais → wolof&lt;/td&gt;
&lt;td&gt;Maa ngi dem liggéey, dinaa dellu lu yàgg.&lt;/td&gt;
&lt;td&gt;Bonne&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Man ngi dem daara&lt;/td&gt;
&lt;td&gt;Wolof → anglais&lt;/td&gt;
&lt;td&gt;I&#39;m going to bed.&lt;/td&gt;
&lt;td&gt;Moyenne : « daara » (l&#39;école coranique) est mal traduit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Could you please tell me how I can get to the train station from here?&lt;/td&gt;
&lt;td&gt;Anglais → yoruba&lt;/td&gt;
&lt;td&gt;Jọ̀wọ́ sọ fún mi bí mo ṣe lè dé ibùdókọ̀ ojú irin láti ibí yìí?&lt;/td&gt;
&lt;td&gt;Bonne&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mo sábà máa ń tètè jí láàárọ̀, mo sì máa ń mu ife kọfí kí n tó bẹ̀rẹ̀ ọjọ́ mi.&lt;/td&gt;
&lt;td&gt;Yoruba → anglais&lt;/td&gt;
&lt;td&gt;I usually wake up early in the morning and have a cup of coffee before I start my day&lt;/td&gt;
&lt;td&gt;Bonne, avec une petite nuance&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;La dernière ligne est un &lt;strong&gt;aller-retour&lt;/strong&gt; : la phrase yoruba est la traduction produite par le modèle à partir de « I usually wake up early in the morning and start my day with a cup of coffee ». Le sens revient presque intact. Seule nuance : le café passe &lt;em&gt;avant&lt;/em&gt; le début de la journée, alors que la phrase d&#39;origine commence la journée &lt;em&gt;avec&lt;/em&gt; un café.&lt;/p&gt;
&lt;p&gt;Le temps de traitement allait de 19 à 60 secondes par phrase sur Colab, avec un cas isolé à 120 secondes.&lt;/p&gt;
&lt;p&gt;Ces résultats rejoignent ceux du papier. Sur le benchmark BOUQuET, le fine-tuning fait nettement progresser le wolof comme le yoruba par rapport au modèle de base :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://arxiv.org/html/2608.18655v2/figures/africa_iid_bouquet_per_language.png&quot; alt=&quot;Quatre graphiques en barres, un par métrique (COMET-22, SSA-COMET, MetricX, chrF++), pour 19 langues africaines, avant (Qwen3.5-2B, en gris) et après fine-tuning (TranslatePsy-AfriSLM-2B, en vert). En SSA-COMET, le score progresse de 0,355 pour le yoruba et de 0,262 pour le wolof.&quot;&gt;
&lt;em&gt;Fig. 3. Scores par langue sur quatre métriques, avant (gris) et après (vert) fine-tuning, pour le modèle 2B. Dans le deuxième graphique (SSA-COMET), le wolof (wol) et le yoruba (yor) passent d&#39;environ 0,3 à plus de 0,6. Source : Gritta et al. (2026), Figure 11, licence CC BY 4.0.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Le papier montre aussi que le wolof reste une langue difficile : sur MetricX (troisième graphique, où un score bas est meilleur), c&#39;est la langue où le modèle 2B obtient le moins bon score des 19.&lt;/p&gt;
&lt;h2 id=&quot;ce-que-le-test-nous-a-appris&quot;&gt;Ce que le test nous a appris&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Le modèle ne part que de l&#39;anglais.&lt;/strong&gt; Nous avons aussi essayé de traduire du français vers le wolof et vers le yoruba : le modèle a renvoyé les phrases telles quelles. Ce n&#39;est pas étonnant : il a été entraîné sur des paires anglais ↔ langue africaine, et les auteurs ne testent pas le français comme langue de départ.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;L&#39;orthographe compte.&lt;/strong&gt; Le modèle est sensible à l&#39;orthographe, aux accents et aux caractères propres à chaque langue (ë, ñ, ŋ, à, é, ó, ọ, ṣ…). Une phrase écrite dans la graphie standard est bien mieux comprise qu&#39;un texte tapé à la volée. Ce type de test demande donc un bon locuteur, capable d&#39;écrire correctement et de juger la traduction obtenue.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Quinze phrases ne font pas un benchmark.&lt;/strong&gt; Notre test est un premier contact, pas une évaluation complète : il dit si le modèle est utilisable sur des phrases simples, pas comment il se comporte sur des textes longs, techniques ou très idiomatiques.&lt;/p&gt;
&lt;h2 id=&quot;impact-pour-l-afrique&quot;&gt;Impact pour l&#39;Afrique&lt;/h2&gt;
&lt;p&gt;Ce qui rend ce travail intéressant pour nous ne tient pas qu&#39;à la performance : c&#39;est la taille. Un modèle de 0,8 milliard de paramètres coûte beaucoup moins cher à faire tourner qu&#39;un modèle de 27 ou 122 milliards, un écart qui compte directement là où la connectivité est limitée et où chaque heure de calcul se négocie. Ce n&#39;est pas encore un modèle qui tourne hors ligne sur un téléphone d&#39;entrée de gamme (nous ne l&#39;avons même pas fait tourner sur un ordinateur), mais c&#39;est une direction : la preuve qu&#39;on peut viser la sobriété sans sacrifier la qualité.&lt;/p&gt;
&lt;p&gt;L&#39;autre apport, moins visible mais tout aussi important, est le jeu de données lui-même : 19 langues africaines, avec des ressources ouvertes et documentées. C&#39;est exactement le type de brique sur laquelle un projet comme AfriVoice peut s&#39;appuyer, et un rappel que la qualité des données compte souvent plus que la taille du modèle, un principe qui vaut aussi pour nos propres travaux.&lt;/p&gt;
&lt;p&gt;Enfin, l&#39;erreur sur « daara » est un bon rappel : un score de benchmark ne dit pas tout. Seule une relecture par un locuteur natif révèle ce genre de nuance culturelle et linguistique. Les auteurs le reconnaissent eux-mêmes : leur papier se termine sur la nécessité d&#39;une évaluation humaine pour mesurer la qualité réelle des traductions en langues africaines. C&#39;est exactement ce que notre démarche de veille testée cherche à faire : confronter un chiffre impressionnant à l&#39;usage réel plutôt que de le relayer tel quel.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;À retenir&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Un modèle de 0,8 milliard de paramètres, entraîné sur des données soigneusement triées, traduit mieux le wolof et le yoruba que des modèles 30 à 150 fois plus gros. Notre test confirme qu&#39;il est utilisable sur des phrases courantes, à condition de partir de l&#39;anglais et d&#39;écrire dans la graphie standard.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;references&quot;&gt;Références&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Gritta, M., Lambert, P., Back, J., &amp;amp; Nazir, A. (2026). &lt;em&gt;TranslatePsy-AfriSLM: High-Quality Data Scaling For Low-Resource Machine Translation&lt;/em&gt;. Tether AI Research. &lt;a href=&quot;https://arxiv.org/abs/2608.18655&quot;&gt;arXiv:2608.18655&lt;/a&gt;, licence CC BY 4.0.&lt;/li&gt;
&lt;li&gt;Modèles et données sur Hugging Face : &lt;a href=&quot;https://huggingface.co/collections/qvac/translatepsy-afrislm&quot;&gt;collection qvac/translatepsy-afrislm&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</content>
  </entry>
  <entry xml:lang="fr">
    <title>Construire son premier assistant RAG avec LangChain</title>
    <link href="https://dah-projects-and-innovations.github.io/dah-labs-site/fr/blog/rag-langchain/"/>
    <id>https://dah-projects-and-innovations.github.io/dah-labs-site/fr/blog/rag-langchain/</id>
    <published>2026-09-28T00:00:00.000Z</published>
    <updated>2026-09-28T00:00:00.000Z</updated>
    <author><name>Équipe DAH Labs</name></author>
    <category term="tuto" label="Tutoriel"/>
    <summary>De l&#39;indexation des documents à la première réponse : les étapes clés pour créer un assistant qui s&#39;appuie sur vos propres données.</summary>
    <content type="html">&lt;p&gt;Un modèle de langage ne connaît que ce qu&#39;il a vu pendant son entraînement. Il ignore vos rapports internes, vos jeux de données ou la documentation de votre projet — et quand on l&#39;interroge dessus, il peut inventer une réponse avec aplomb.&lt;/p&gt;
&lt;p&gt;Le RAG (Retrieval-Augmented Generation) comble ce manque. Avant de répondre, l&#39;assistant va chercher les passages utiles dans vos propres documents, puis s&#39;en sert comme contexte pour construire sa réponse. Cet article présente les quatre briques d&#39;un pipeline RAG et une première implémentation en Python.&lt;/p&gt;
&lt;h2 id=&quot;pourquoi-le-rag&quot;&gt;Pourquoi le RAG ?&lt;/h2&gt;
&lt;p&gt;Réentraîner un modèle sur vos données coûte cher et devient vite obsolète. Avec le RAG, vos documents restent séparés du modèle : il suffit de les mettre à jour pour que l&#39;assistant en tienne compte dès la question suivante. Autre avantage, la traçabilité — chaque réponse peut indiquer les passages dont elle est tirée, ce qui la rend vérifiable.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;À retenir&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Le RAG ne rend pas le modèle plus intelligent : il lui donne le bon contexte au bon moment. La qualité des réponses dépend d&#39;abord de la qualité de vos documents et de leur découpage.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;les-quatre-etapes-d-un-pipeline-rag&quot;&gt;Les quatre étapes d&#39;un pipeline RAG&lt;/h2&gt;
&lt;p&gt;Quel que soit l&#39;outil, un système RAG a deux phases. L&#39;indexation a lieu une fois, quand les documents sont ajoutés. L&#39;interrogation a lieu à chaque question.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dah-projects-and-innovations.github.io/dah-labs-site/media/articles/rag-pipeline-fr.svg&quot; alt=&quot;Schéma d&#39;un pipeline RAG : les documents sont découpés en passages, vectorisés et stockés ; chaque question récupère les passages les plus proches, transmis au modèle de langage pour produire la réponse.&quot;&gt;
&lt;em&gt;Fig. 1. Un pipeline RAG. Les documents sont indexés une fois ; chaque question récupère les passages les plus proches avant la génération.&lt;/em&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Charger&lt;/strong&gt; — lire les documents sources (PDF, pages web, fichiers texte).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Découper&lt;/strong&gt; — les diviser en passages courts, qui se chevauchent légèrement pour ne pas perdre le contexte aux frontières.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Indexer&lt;/strong&gt; — transformer chaque passage en vecteur (un embedding) et le ranger dans une base vectorielle.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interroger&lt;/strong&gt; — à chaque question, retrouver les passages les plus proches et les transmettre au modèle avec la question.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;choisir-la-taille-des-passages&quot;&gt;Choisir la taille des passages&lt;/h3&gt;
&lt;p&gt;Des passages trop longs diluent l&#39;information utile ; trop courts, ils perdent leur contexte. Un point de départ courant est un &lt;code&gt;chunk_size&lt;/code&gt; de quelques centaines à mille caractères, avec un &lt;code&gt;chunk_overlap&lt;/code&gt; de 10 à 20 % — puis on ajuste en testant sur de vraies questions.&lt;/p&gt;
&lt;h3 id=&quot;mesurer-la-similarite&quot;&gt;Mesurer la similarité&lt;/h3&gt;
&lt;p&gt;Pour trouver les passages les plus proches d&#39;une question, les deux sont transformés en vecteurs puis comparés. La mesure la plus courante est la similarité cosinus : elle regarde l&#39;angle entre les deux vecteurs plutôt que leur longueur.&lt;/p&gt;
&lt;div class=&quot;math-block&quot;&gt;&#92;text{sim}(q, d) = &#92;frac{q &#92;cdot d}{&#92;lVert q &#92;rVert &#92;, &#92;lVert d &#92;rVert}
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;Similarité cosinus entre le vecteur de la question q et celui d&#39;un passage d.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;un-premier-pipeline-en-python&quot;&gt;Un premier pipeline en Python&lt;/h2&gt;
&lt;p&gt;Voici le squelette des quatre étapes avec LangChain. Le modèle d&#39;embeddings est laissé au choix : un modèle open source en local ou une API.&lt;/p&gt;
&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; langchain_community&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;document_loaders &lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; PyPDFLoader
&lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; langchain_text_splitters &lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; RecursiveCharacterTextSplitter
&lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; langchain_community&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;vectorstores &lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; FAISS

&lt;span class=&quot;token comment&quot;&gt;# 1. Charger&lt;/span&gt;
docs &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; PyPDFLoader&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;guide_nutrition.pdf&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;load&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;# 2. Découper&lt;/span&gt;
splitter &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; RecursiveCharacterTextSplitter&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;chunk_size&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;800&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; chunk_overlap&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
chunks &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; splitter&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;split_documents&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;docs&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;# 3. Indexer&lt;/span&gt;
embeddings &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;  &lt;span class=&quot;token comment&quot;&gt;# le modèle d&#39;embeddings de votre choix&lt;/span&gt;
vectorstore &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; FAISS&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;from_documents&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;chunks&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; embeddings&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;# 4. Interroger&lt;/span&gt;
retriever &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; vectorstore&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;as_retriever&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;search_kwargs&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;dict&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;k&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
passages &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; retriever&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;invoke&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Quels aliments locaux sont riches en fer ?&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Le retriever renvoie les quatre passages les plus pertinents pour la question posée. Il ne reste plus qu&#39;à les insérer dans le prompt envoyé au modèle de langage, avec la consigne de répondre uniquement à partir de ce contexte — et de le dire quand la réponse n&#39;y est pas.&lt;/p&gt;
&lt;h2 id=&quot;pour-aller-plus-loin&quot;&gt;Pour aller plus loin&lt;/h2&gt;
&lt;p&gt;Une fois ce socle en place, les vrais gains viennent généralement de trois leviers :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Évaluer les réponses sur un jeu de questions test, pour mesurer chaque changement.&lt;/li&gt;
&lt;li&gt;Essayer différents modèles d&#39;embeddings, en particulier pour le français et les langues locales.&lt;/li&gt;
&lt;li&gt;Combiner la recherche vectorielle avec une recherche par mots-clés pour les noms, codes et sigles.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;references&quot;&gt;Références&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Lewis, P., Perez, E., Piktus, A., et al. (2020). &lt;em&gt;Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks&lt;/em&gt;. NeurIPS 2020. &lt;a href=&quot;https://arxiv.org/abs/2005.11401&quot;&gt;arXiv:2005.11401&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Johnson, J., Douze, M., &amp;amp; Jégou, H. (2017). &lt;em&gt;Billion-scale similarity search with GPUs&lt;/em&gt;. &lt;a href=&quot;https://arxiv.org/abs/1702.08734&quot;&gt;arXiv:1702.08734&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Documentation LangChain. &lt;a href=&quot;https://python.langchain.com&quot;&gt;python.langchain.com&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</content>
  </entry>
</feed>
