Comment GraphEval détecte les hallucinations dans les LLMs ?

GraphEval détecte les hallucinations LLM en transformant une réponse en triplets, puis en vérifiant chaque fait avec un modèle NLI. L’intérêt est simple : ne pas juste dire qu’une réponse est douteuse, mais pointer précisément le morceau qui décroche.

Pourquoi les LLM hallucinent-ils ?

Les LLM hallucinent parce qu’ils peuvent produire une réponse plausible sans que chaque affirmation soit réellement soutenue par le contexte fourni. C’est aussi simple que ça. Le modèle ne “ment” pas au sens humain, il complète, il généralise, il choisit la suite de mots qui semble la plus probable. Et parfois, ça donne une phrase très propre, très crédible, mais fausse.

Dans un usage perso, ce n’est pas toujours grave. Dans un workflow business, ça change tout. Si votre chatbot RAG répond à un client, prépare un résumé juridique, extrait des conditions contractuelles ou aide un support interne, une réponse jolie mais fausse peut créer un vrai problème. J’ai déjà vu ça chez un client avec un assistant branché sur une base documentaire RH. Le modèle avait ajouté une condition d’éligibilité qui n’existait dans aucun document. La phrase était parfaite. Le ton était sûr. Le problème, c’est qu’elle était inventée.

Une hallucination, ce n’est pas forcément une énorme absurdité visible. Souvent, c’est plus discret, et c’est justement ça qui la rend dangereuse.

  • Une relation inventée entre deux éléments.
  • Une condition ajoutée alors qu’elle n’est pas dans la source.
  • Une exigence technique présentée comme obligatoire.
  • Un chiffre ou une date donnés avec trop d’assurance.
  • Une conclusion correcte en apparence, mais non prouvée par le contexte.

La relecture humaine au cas par cas aide, mais elle ne suffit pas. On ne peut pas auditer sérieusement un système RAG avec trois prompts testés à la main avant la mise en prod. RAG veut dire “Retrieval Augmented Generation” : le modèle récupère des documents, puis génère une réponse à partir de ces documents. Le point critique, c’est de vérifier si la réponse reste bien attachée à ce qui a été récupéré.

GraphEval s’inscrit exactement dans cette logique. Au lieu de juger la réponse comme un bloc, il la découpe en faits vérifiables. Chaque affirmation devient quelque chose qu’on peut contrôler. Est-ce que ce fait est soutenu par le contexte ? Est-ce qu’il ajoute une information absente ? Est-ce qu’il transforme une hypothèse en certitude ?

C’est cette granularité qui change tout. On ne demande plus “Est-ce que la réponse a l’air bonne ?”. On demande “Quelles affirmations sont réellement prouvées par les sources ?”. Pour moi, c’est la bonne manière d’auditer un chatbot métier, surtout quand il commence à être utilisé ailleurs que dans une démo.

Comment GraphEval fonctionne-t-il ?

GraphEval fonctionne en deux temps, d’abord il extrait des triplets Sujet Relation Objet depuis la réponse du LLM, puis il vérifie chaque triplet avec un modèle NLI par rapport au contexte de référence.

C’est assez simple dans l’idée, et c’est justement ce que j’aime bien dans cette approche. Au lieu de regarder une réponse générée comme un gros bloc de texte difficile à juger, GraphEval la découpe en petites affirmations vérifiables.

La première étape consiste à construire un graphe de connaissances depuis la sortie du modèle. Un graphe de connaissances, c’est une façon de représenter des faits avec des entités et des relations. Chaque fait devient un triplet, avec un sujet, une relation et un objet.

Par exemple, si le LLM écrit que GraphEval est un framework d’évaluation, on peut obtenir un triplet comme GraphEval is evaluation framework. Si le texte dit que GraphEval utilise des graphes de connaissances, on peut obtenir GraphEval uses Knowledge Graphs.

Ce découpage rend la réponse beaucoup plus inspectable. On ne lit plus seulement un paragraphe fluide qui “sonne juste”. On voit les briques factuelles une par une. Les entités, les relations, les objets. Et franchement, quand on audite des réponses de LLM en entreprise, c’est souvent là que tout se joue. Une réponse peut être globalement bien écrite, mais contenir deux ou trois affirmations inventées au milieu.

La deuxième étape utilise un modèle NLI. NLI veut dire Natural Language Inference, ou inférence en langage naturel. Son rôle est de comparer chaque triplet avec le contexte source, c’est-à-dire les documents ou passages censés servir de référence.

Pour chaque triplet, le modèle peut répondre de trois façons :

  • Soutenu : Le contexte confirme l’affirmation.
  • Contradictoire : Le contexte dit autre chose.
  • Neutre : Le contexte ne permet pas de vérifier l’affirmation.

Les triplets qui ne sont pas soutenus par le contexte sont signalés comme hallucinations potentielles. Le vrai intérêt, c’est la localisation. GraphEval ne dit pas juste “la réponse est fausse”. Il pointe le triplet précis qui pose problème. Et ça change tout pour corriger, expliquer, ou automatiser un contrôle qualité.

Extraction des triplets GraphEval transforme la réponse du LLM en petites unités factuelles Sujet Relation Objet.
Évaluation NLI Chaque triplet est comparé au contexte source pour savoir s’il est soutenu, contradictoire ou neutre.
Signalement des hallucinations Les triplets non soutenus sont marqués comme hallucinations potentielles, avec une localisation précise.

Que vérifie le contexte de vérité ?

Le contexte de vérité vérifie si les affirmations extraites de la réponse sont réellement appuyées par les informations disponibles. Ce contexte peut être une base documentaire, un extrait fourni au LLM, ou une source interne qu’on considère comme fiable pendant le test.

Dans GraphEval, l’idée est simple. On ne demande pas au système si la réponse “sonne bien”. On lui demande si chaque fait annoncé tient debout par rapport à une source de référence. C’est plus froid, plus localisé, et souvent beaucoup plus utile.

Contexte source fiable GraphEval est un cadre d’évaluation des hallucinations. GraphEval utilise des graphes de connaissances, aussi appelés Knowledge Graphs, pour structurer les faits et leurs relations. GraphEval utilise aussi un modèle NLI, pour Natural Language Inference, qui vérifie si une affirmation est soutenue, contredite ou non couverte par le contexte.
Sortie LLM à évaluer GraphEval is a framework for evaluating hallucinations in LLM outputs. It uses Knowledge Graphs to represent entities and relationships. GraphEval requires expensive enterprise server farm.

Dans cet exemple simulé, les deux premières affirmations passent bien. Le contexte dit que GraphEval sert à évaluer les hallucinations, et il dit aussi qu’il utilise des Knowledge Graphs pour représenter des faits et des relations. Jusque-là, rien d’étrange.

La troisième affirmation est volontairement fausse : GraphEval requires expensive enterprise server farm. Je l’ai mise ici pour montrer le mécanisme. Le contexte ne dit jamais que GraphEval nécessite une ferme de serveurs d’entreprise coûteuse. Cette affirmation n’est pas soutenue par la source, donc GraphEval doit la marquer comme hallucination, ou au minimum comme non vérifiable selon le paramétrage.

C’est un point important. GraphEval ne juge pas le style, la fluidité, ni le côté convaincant de la réponse. Une phrase peut être très bien écrite et pourtant fausse. À l’inverse, une phrase un peu maladroite peut être factuellement correcte. GraphEval regarde des faits localisés, un par un, puis les compare au contexte de vérité.

Dans les projets que je vois, le vrai point dur n’est pas seulement le modèle. C’est souvent la qualité du contexte de vérité. Si la base est floue, périmée ou incomplète, l’évaluation devient fragile elle aussi. On croit mesurer les hallucinations du LLM, alors qu’on mesure parfois les trous de sa propre documentation.

Comment l’illustrer en code ?

On peut illustrer GraphEval avec un exemple Python allégé qui simule l’extraction des triplets et l’évaluation NLI, sans lancer de calcul lourd. Le but ici, c’est de comprendre le flux. Pas de fournir une version production, ni de faire tourner un vrai pipeline d’évaluation complet.

Les dépendances à installer sont celles qu’on utiliserait dans une version un peu plus réaliste, même si ici je garde volontairement la logique simulée.

python -m pip install transformers networkx matplotlib torch

Le principe est simple. Je pars d’un contexte source, je prends une réponse générée par un LLM, j’extrais des triplets sujet-relation-objet, puis je vérifie chaque triplet avec une étape NLI. NLI veut dire Natural Language Inference. En clair, le modèle regarde si une affirmation est supportée par le contexte, contredite, ou impossible à prouver.

import torch
import networkx as nx
import matplotlib.pyplot as plt
from transformers import AutoTokenizer, AutoModelForSequenceClassification

source_context = """
GraphEval is an evaluation framework for detecting hallucinations in LLM outputs.
It represents claims as Knowledge Graphs and compares them against source content.
"""

llm_output = """
GraphEval is an evaluation framework.
GraphEval uses Knowledge Graphs.
GraphEval requires expensive enterprise server farm.
"""

def extract_triplets(text):
    # Simulated extraction.
    return [
        ("GraphEval", "is", "evaluation framework"),
        ("GraphEval", "uses", "Knowledge Graphs"),
        ("GraphEval", "requires", "expensive enterprise server farm"),
    ]

def evaluate_triplet_with_nli(triplet, context):
    # Simulated NLI evaluation.
    supported_triplets = [
        ("GraphEval", "is", "evaluation framework"),
        ("GraphEval", "uses", "Knowledge Graphs"),
    ]

    if triplet in supported_triplets:
        return "supported"

    return "hallucination"

triplets = extract_triplets(llm_output)

graph = nx.DiGraph()
flagged_triplets = []

for subject, relation, obj in triplets:
    label = evaluate_triplet_with_nli((subject, relation, obj), source_context)

    graph.add_edge(subject, obj, relation=relation, status=label)

    if label == "hallucination":
        flagged_triplets.append((subject, relation, obj))

print("Triplets signalés comme hallucinations :")

for triplet in flagged_triplets:
    print(f"- {triplet[0]} {triplet[1]} {triplet[2]}")

pos = nx.spring_layout(graph)
edge_labels = nx.get_edge_attributes(graph, "relation")

nx.draw(graph, pos, with_labels=True, node_color="lightblue", node_size=2500)
nx.draw_networkx_edge_labels(graph, pos, edge_labels=edge_labels)

plt.show()

Dans une vraie implémentation, je ne coderais évidemment pas les triplets à la main. L’extraction pourrait être faite par un LLM, ou par un extracteur d’information spécialisé. L’évaluation pourrait ensuite passer par un modèle NLI, capable de comparer chaque affirmation au contexte source.

Ici, je simule tout ça pour éviter le coût computationnel et garder l’exemple lisible. C’est souvent comme ça que je le présente à un client au début. On valide d’abord la mécanique, puis seulement après on branche les vrais modèles.

Que gagne-t-on en production ?

En production, je gagne surtout en explicabilité. GraphEval m’aide à voir quelle affirmation précise pose problème dans une réponse de LLM. C’est très différent d’un score global du type 72/100, qui dit “ça va à peu près” ou “ça ne va pas”, mais qui ne dit pas quoi corriger.

Concrètement, GraphEval découpe la réponse en triplets, c’est-à-dire des petites affirmations structurées du type sujet, relation, objet. Par exemple “Le contrat”, “expire le”, “31 décembre 2025”. Ensuite, il compare ces triplets au contexte de référence, souvent les documents utilisés dans un système RAG. RAG veut dire Retrieval Augmented Generation, c’est le cas classique où le modèle répond à partir de documents récupérés dans une base.

Pour une équipe data ou IA, c’est utile parce qu’on peut enfin auditer les réponses avec un niveau de détail exploitable. On ne regarde plus seulement si la réponse “semble bonne”. On repère les affirmations inventées, les contradictions avec la source, les zones où le modèle extrapole un peu trop. J’ai déjà vu ce cas chez un client : le chatbot donnait une réponse globalement correcte, mais ajoutait une condition commerciale qui n’existait dans aucun document. Un score global l’aurait probablement laissé passer.

Les gains les plus concrets sont assez simples :

  • Auditer les réponses LLM avec des preuves plus fines.
  • Contrôler la qualité des sorties RAG avant mise en production.
  • Repérer les affirmations inventées ou mal appuyées par les sources.
  • Améliorer les prompts en voyant où le modèle décroche.
  • Comparer plusieurs versions d’un pipeline, d’un prompt ou d’un modèle.

Il faut quand même rester lucide. GraphEval dépend de la qualité de l’extraction des triplets. Si les triplets sont mal extraits, l’évaluation devient fragile. Il dépend aussi de la qualité du contexte de référence. Si la bonne information n’est pas dans les documents, GraphEval ne peut pas l’inventer. Et il dépend du modèle NLI, qui sert à dire si une affirmation est soutenue, contradictoire ou neutre. NLI veut dire Natural Language Inference, c’est l’inférence logique entre deux textes.

Un triplet neutre n’est pas toujours une hallucination certaine. Ça veut parfois juste dire que le contexte ne permet pas de trancher. Et ça, en production, c’est une nuance importante.

Situation Ce que ça veut dire Ce que l’équipe peut faire
Triplet soutenu L’affirmation est confirmée par le contexte de référence. Garder la réponse, renforcer les tests avec ce cas comme exemple valide.
Triplet contradictoire L’affirmation contredit une information présente dans les sources. Corriger le prompt, vérifier le retrieval, bloquer ou signaler la réponse.
Triplet neutre Le contexte ne permet pas de confirmer ni de réfuter l’affirmation. Vérifier les documents, enrichir le contexte, demander au modèle de s’abstenir.

Et si on arrêtait de noter les réponses au feeling ?

GraphEval apporte une idée simple et assez saine : découper une réponse LLM en faits, puis vérifier chaque fait contre un contexte de vérité. Ça ne règle pas toute la question des hallucinations, et ça dépend clairement de la qualité du contexte, de l’extraction des triplets et du modèle NLI. Mais ça change déjà beaucoup de choses. On passe d’un jugement global, souvent flou, à une analyse localisée. Pour moi, c’est exactement le genre d’approche qu’il faut quand on veut mettre de l’IA dans un vrai process business. Le bénéfice pour vous : mieux contrôler, mieux expliquer, mieux corriger.

FAQ

  • Qu’est-ce que GraphEval ?
    GraphEval est une méthode d’évaluation des hallucinations LLM. Elle transforme une réponse en triplets Sujet Relation Objet, puis vérifie chaque triplet par rapport à un contexte de référence avec un modèle NLI.
  • Pourquoi utiliser des graphes de connaissances pour détecter les hallucinations ?
    Les graphes rendent les affirmations plus faciles à inspecter. Au lieu de juger un texte entier, on regarde chaque relation factuelle séparément. C’est plus pratique pour localiser précisément l’incohérence.
  • Quel est le rôle du modèle NLI dans GraphEval ?
    Le modèle NLI compare un triplet au contexte de vérité. Il aide à savoir si l’affirmation est soutenue, contradictoire ou non démontrée par le contexte. Les triplets non soutenus sont signalés comme hallucinations potentielles.
  • Un triplet neutre est-il forcément une hallucination ?
    Pas forcément. Un triplet neutre peut simplement vouloir dire que le contexte ne permet pas de confirmer l’information. Dans une évaluation stricte, on le signale quand même, parce qu’une réponse fiable doit rester appuyée par la base de vérité.
  • GraphEval peut-il être utilisé en production ?
    Oui, surtout comme brique d’audit et de contrôle qualité pour des systèmes LLM ou RAG. Il faut quand même surveiller trois points : la qualité du contexte de référence, l’extraction des triplets et la fiabilité du modèle NLI.

 

 

A propos de l’auteur

Je suis Franck Scandolera, expert et formateur en tracking avancé server-side, Analytics Engineering, automatisation No/Low Code avec n8n, intégration de l’IA en entreprise et SEO/GEO. J’accompagne des équipes qui veulent fiabiliser leurs données, leurs automatisations et leurs usages IA, avec des références comme Logis Hôtel, Yelloh Village, BazarChic, la Fédération Française de Football ou Texdecor. Je dirige l’agence webAnalyste et l’organisme Formations Analytics. Si vous voulez cadrer ou auditer vos projets IA et data, contactez-moi.

Retour en haut
AIgenierie