← Ingénierie IA et IA agentique
Recherche d'information · évaluation hors ligne sur QASPER Code arrêté au 4 octobre 2026

RAG hybride pour des réponses citées sur des articles de recherche

Des réponses sur des articles de TAL qui citent le passage d'où elles viennent, et un audit de la façon dont je l'ai mesuré.

Période
février à octobre 2026
Statut
prototype de recherche, évalué hors ligne
Postes visés
AI Research Scientist · Applied Scientist · ML Engineer
0,829
Rappel des preuves
contre 0,485 · 150 questions · sans juge LLM
0,700
Preuves en tableau ou figure qui atteignent le modèle
contre 0,000 avant l'indexation des tableaux LaTeX
809 sur 888
Articles dont les tableaux ont été récupérés
3 259 légendes appariées sur 3 631
0,654
Précision des citations ALCE
exécution de référence du 2 septembre 2026, 128 réponses sur 150

En bref

  • Situation. Un chercheur qui interroge un article de traitement automatique des langues (TAL) a besoin d'une réponse qui cite le passage exact sur lequel elle repose. J'ai construit une chaîne de recherche sur le jeu de référence QASPER (Dasigi et coll., 2021), puis un code d'évaluation qui a fini plus volumineux que la chaîne qu'il teste.
  • Action. J'ai fusionné la recherche par mots-clés et la recherche sémantique, puis classé les passages avec ColBERT v2. Le grand modèle de langage (LLM) Llama-3.1-8B rédige ensuite des réponses courtes, avec une citation dans chaque phrase. Comme 40 % de mes questions de test demandaient un tableau ou une figure, j'ai extrait le corps des tableaux depuis la source LaTeX de chaque article sur arXiv.
  • Résultat. Sur 150 questions, vérifiées contre des preuves annotées par des humains et sans correcteur automatique, le rappel des preuves passe de 0,485 à 0,829. La part des preuves en tableau ou figure qui atteignent le modèle passe de 0,000 à 0,700.

L'énoncé du problème

Un modèle de langage peut répondre avec aisance à une question sur un article et citer quand même le mauvais passage. Lors de mes premières évaluations, 32 réponses sur 150 s'appuyaient sur des passages d'un autre article. Un chercheur ne fait confiance qu'à une réponse qu'il peut vérifier à la source.

Formulation technique. J'ai posé la tâche comme des questions-réponses sur un article connu. À partir d'une question et de l'identifiant QASPER de son article, le système retrouve des passages de cet article et rédige une réponse d'une ou deux phrases, en citant un passage sous la forme [Doc N] dans chaque phrase.

Dans le périmètre. Les 888 articles de la partie entraînement de QASPER, les questions à réponse libre, la recherche, la génération et le code d'évaluation lui-même.

Hors périmètre. Trouver le bon article parmi les 888, la comparaison avec le classement QASPER (je ne calcule pas encore son Answer-F1 officiel) et la mise en service. L'interface de discussion vit dans un dépôt séparé.

Critères de réussite.

  • Recherche : les preuves de référence atteignent le générateur, mesurées par le rappel des preuves (la part des passages justificatifs annotés qui atteignent le modèle) face aux annotations de QASPER.
  • Citations : chaque phrase de la réponse est étayée par ce qu'elle cite, mesurée par la précision et le rappel des citations ALCE.
  • Validité de la notation : les juges automatiques concordent avec une vérification indépendante, mesurée par le kappa de Cohen.
  • Couverture : chaque moyenne figure à côté du nombre de questions qui ont réellement reçu une réponse.

L'ingénierie des données

Source. QASPER (allenai/qasper sur Hugging Face) réunit 5 049 questions sur 1 585 articles de TAL. J'ai indexé les 888 articles de sa partie entraînement.

Premier constat. Sur mes 150 questions de test, 60 avaient un tableau ou une figure comme preuve de référence, et mon index ne contenait ni l'un ni l'autre. Pour les questions auxquelles seul un tableau ou une figure répond, le rappel du contexte valait 0,094, contre 0,494 pour les questions textuelles.

Figure 2. Type de preuve de référence dans les 150 questions de test
  • Texte seul 90 questions
  • Tableau ou figure seuls 26 questions
  • Tableau ou figure et texte 34 questions

Ce que j'ai fait.

  • Un QasperChunker sur mesure produit le résumé, les paragraphes en fragments de 500 jetons avec 10 % de recouvrement, et un fragment par légende de tableau ou de figure.
  • J'ai récupéré le corps des tableaux depuis la source LaTeX de chaque article sur arXiv, à raison d'une requête toutes les 3 secondes. La source existait pour 809 des 888 articles, et 3 259 des 3 631 légendes de tableau ont trouvé leur corps, stocké en Markdown.
  • Chaque fragment commence par « Title: <titre de l'article>. Section: <titre de section>. », pour que la notation par mots-clés et la notation dense sachent de quel article et de quelle section il vient.
  • Les vecteurs denses (SPECTER2, 768 dimensions) sont rangés dans un index FAISS plat à produit scalaire. Un index BM25 utilise des jetons NLTK, débarrassés des mots vides et racinisés par Porter.

Une version antérieure, en texte seul, comptait environ 47 800 fragments. Je n'ai pas consigné la taille de l'index actuel avec tableaux.

L'architecture

Point de départ. Ma première chaîne passait au modèle les 10 meilleurs passages ColBERT dans l'ordre des scores. Une étape CRAG supprimait les passages sous un seuil, et l'index ne contenait que du texte. Rappel des preuves : 0,485.

La conception en quatre étapes.

  1. Recherche hybride : recherche dense SPECTER2 et BM25, réunies par fusion de rang réciproque (RRF, k=60), jusqu'à 100 candidats dans l'article.
  2. Classement : ColBERT v2 note chaque candidat par interaction tardive (MaxSim sur les plongements de jetons).
  3. Contrôle CRAG (Yan et coll., 2024) : chaque passage reçoit une étiquette Correct, Ambiguous ou Incorrect.
  4. Génération : les 20 meilleurs passages partent vers Llama-3.1-8B-Instruct sur vLLM, dans leur ordre au sein de l'article, avec un budget de 6 000 jetons. L'instruction générative demande un bref raisonnement, puis une réponse finale citée.

Ce qui décide de la réponse en pratique. La plupart des articles comptent 100 fragments ou moins, donc l'étape 1 renvoie l'article entier pour 94 % d'entre eux. La réponse dépend alors du classement ColBERT et de l'ordre propre à l'article. L'expansion de requête HyDE ne tourne que si elle peut changer les candidats. Je garde la conception complète pour les ablations et pour l'usage en domaine ouvert, où l'étape 1 doit chercher entre les articles.

Mon arbitrage sur CRAG. Sur les 39 questions sur 150 où la suppression s'est déclenchée, les preuves textuelles de référence ont atteint le modèle dans 42 % des cas, contre 85 % ailleurs. Des questions plus difficiles expliquent une partie de cet écart. CRAG suppose aussi une source extérieure pour remplacer ce qu'il retire, et cette chaîne n'en a aucune. CRAG étiquette donc les passages et n'en supprime plus aucun.

Choix testés puis écartés. La RRF comme classement final abaissait le rappel du texte sur le nouvel index : elle reste optionnelle. Le raffinement CRAG par segments obtenait 0,4 à 1,1 point de moins en rappel des preuves que le mode qui se contente d'étiqueter.

Tous les modèles de ce projet sont préentraînés. Je n'en ai entraîné aucun.

L'évaluation et les résultats

Recherche, sans juge LLM (150 questions, preuves de référence issues des annotateurs de QASPER)
Configuration Rappel des preuves Preuve textuelle trouvée Tableau ou figure trouvé
Référence : ancienne sélection, index en texte seul 0,485 0,766 0,000
Nouvelle sélection du contexte, index en texte seul 0,646 0,944 0,000
Nouvelle sélection, index avec tableaux (par défaut) 0,829 0,944 0,700

Le premier saut vient de la sélection du contexte. Les tableaux ont apporté le second. Le taux nul de la référence pour les tableaux et figures tient à sa construction : cet index ne contenait aucun tableau. Un tableau compte comme trouvé quand sa légende atteint le modèle.

Niveau de la réponse, exécution de référence du 2 septembre 2026 (notée avant les changements d'octobre, 128 réponses sur 150)
Métrique Moyenne
Précision des citations ALCE 0,654
Rappel des citations ALCE 0,674
Exactitude de la réponse (grille Prometheus 2) 0,467, soit environ 0,40 si les questions sans réponse comptent comme fausses

Une exécution complète sur la chaîne actuelle reste à faire. La dernière tentative a manqué de mémoire le 4 octobre 2026, et j'en ai corrigé la cause.

Corrections de mesure, séparées des gains du modèle. Quatre bogues dans mon code de notation ont fait bouger les métriques alors que le système restait le même :

  • Une coupe à 500 caractères sur chaque passage masquait la preuve dans 64 % des fragments, et le rappel du contexte affichait 0,0616.
  • Une instruction du juge plaçait l'affirmation là où va la réponse notée, et ALCE tombait à environ 0,012.
  • Précision et rappel partageaient un même dénominateur, donc ils coïncidaient sur les 128 lignes notées.
  • Le rappel du contexte ne lisait que 6 des 10 passages reçus par le modèle.

Je présente chaque correction comme une correction de l'instrument de mesure.

Là où la chaîne échoue encore. BM25 écarte les jetons numériques, sur un jeu de référence rempli de chiffres. Avec 20 passages, le modèle en citait 4 à 5 par phrase. Une modification de l'instruction a ramené la médiane à 2 par réponse, sur un contrôle de 12 questions.

Portée. Le modèle ne peut citer que ce qui lui parvient, donc le rappel des preuves plafonne la qualité des réponses. Statut : prototype de recherche, évalué hors ligne.

Liens

  • SPECTER2
  • BM25
  • FAISS
  • RRF
  • ColBERT v2
  • RAGatouille
  • CRAG
  • Llama-3.1-8B-Instruct
  • vLLM
  • Prometheus 2
  • MiniCheck
  • ALCE
  • QASPER
  • SLURM