Image : générée par IA
Le silence de Wikidata
Wikidata contient un triplet comme celui-ci :
(tomato, instance_of, vegetable) — rank: preferred
(tomato, instance_of, fruit) — rank: normal
Qui a décidé preferred ? Pourquoi preferred ? Dans quel contexte preferred ?
Wikidata reste silencieux sur ces questions. Un éditeur décide, le système enregistre la décision. Rien de plus.
Mais savoir si une tomate est un légume ou un fruit n’est pas une constante physique. Demandez à un chef — c’est un légume. Demandez à un botaniste — c’est un fruit. Demandez à la Cour suprême des États-Unis — c’est un légume (1893, Nix v. Hedden). Trois réponses à la même question, et aucune n’est fausse.
Les triplets dans un graphe de connaissances ne sont pas des faits. Ce sont des affirmations.
Les affirmations nécessitent une argumentation
Pour stocker des affirmations, il faut une structure. Le modèle d’argumentation de Toulmin fournit cette structure.
| Élément | Rôle | Exemple de la tomate |
|---|---|---|
| Claim | Assertion | « La tomate est un légume » |
| Ground | Preuve directe | « Classée comme légume dans la taxonomie culinaire » |
| Backing | Source/autorité | « Le Guide Culinaire (1903) » |
| Qualifier | Portée | « Dans un contexte culinaire » (confidence 0.8) |
| Rebuttal | Condition de réfutation | « Dans un contexte botanique, c’est un fruit — structure de l’ovaire » |
| Warrant | Logique de connexion | « La classification traditionnelle des ingrédients est basée sur l’usage culinaire » |
Au lieu de forcer une valeur de vérité unique par triplet, élevez le triplet au rang de sujet d’argumentation. Il y a une affirmation, il y a une preuve, il y a une condition de réfutation, il y a une source. Et le jugement se fait — non pas au moment du stockage, mais au moment de la requête.
Cette idée n’est pas nouvelle en soi. Dans le monde académique, les cadres d’argumentation abstraits de Dung (1995), ASPIC+ (2010) et les nanopublications ont abordé l’argumentation sur les graphes de connaissances. La différence tient à une chose — nous le livrons sous forme de code exécutable, pas d’articles. Installez avec go install, écrivez les règles comme des fonctions Go, exécutez maintenant.
Le contexte détermine la vérité
Le stockage est la structure d’argumentation. Le jugement est à l’exécution.
ctx.Set("domain", "cooking")
results, _ := g.Evaluate(ctx)
// verdict: +0.8 → vegetable
ctx.Set("domain", "botany")
results, _ = g.Evaluate(ctx)
// verdict: -0.9 → not a vegetable (fruit)
Même graphe, même structure d’argumentation, même code. Seul le contexte a changé. Requête dans un contexte culinaire : +0.8 (légume). Requête dans un contexte botanique : -0.9 (fruit). Le verdict suit le contexte.
C’est la différence décisive avec le rank statique de Wikidata. Ce n’est pas un éditeur qui décide preferred — c’est le contexte du demandeur qui produit le jugement.
Pluton est-elle une planète ?
Triple: (Pluto, instance_of, planet)
Claim:
Ground: "Solar orbit, spherical, sufficient mass"
Backing: IAU 1930 classification resolution
Rebuttal:
Ground: "Orbit-clearing criterion not met"
Backing: IAU 2006 Resolution 5A
Exception to rebuttal:
Ground: "Still taught as a planet in education curricula"
Backing: NASA Education Resources 2024
ctx.Set("domain", "astronomy_formal")
// verdict: -0.8 (not a planet)
ctx.Set("domain", "education")
// verdict: +0.3 (can be treated as planet in context)
Pour quelqu’un qui est allé à l’école primaire avant 2006, Pluton est une planète. Pour l’UAI, Pluton est une planète naine. Les deux ont des preuves, les deux ont des sources. Le rôle du système n’est pas d’en choisir un — c’est de stocker les deux et de juger selon le contexte.
Quand les sources sont attaquées
Dans le débat académique, les sources elles-mêmes sont fréquemment attaquées.
// Claim: Drug X is effective
claim := g.Rule(drugXEffective).
With(&TripleSpec{
Ground: "Significant effect in Phase 3 clinical trial",
Backing: "Smith et al. (2020), NEJM",
})
// Rebuttal: Independent replication failed
counter := g.Counter(replicationFailed).
With(&TripleSpec{
Ground: "Effect not confirmed in independent replication",
Backing: "Jones et al. (2022), Lancet",
})
counter.Attacks(claim)
// Undercutter: conflict of interest
undercutter := g.Counter(conflictOfInterest).
With(&TripleSpec{
Ground: "Smith's funding came from the pharmaceutical company",
Backing: "Retraction Watch (2023)",
})
undercutter.Attacks(claim)
L’article de Smith a été publié dans le NEJM. Une source faisant autorité. Mais lorsque la source de financement est révélée, l’ensemble de l’affirmation basée sur cet article s’affaiblit. Le counter réfute directement l’affirmation ; l’undercutter affaiblit la base probatoire de l’affirmation. Les deux attaquent l’affirmation, mais de manières différentes. Le h-Categoriser synthétise la force de ces attaques pour calculer le verdict final.
La vérité s’évanouit à la vitesse de la lumière ; seules les affirmations demeurent. Le système gère des affirmations, il ne déclare pas la vérité.
Chaque triplet nécessite-t-il une argumentation ?
Non.
(water, chemical_formula, H2O) — Settled. No argumentation needed.
(tomato, instance_of, ?) — Contested. Attach argumentation.
(Pluto, instance_of, ?) — Contested. Attach argumentation.
(Jerusalem, capital_of, ?) — Contested. Attach argumentation.
Le critère est simple : si plusieurs objets existent pour la même paire sujet + prédicat, ou si les ranks divergent, ou si les références sont contradictoires — c’est un triplet contesté. Le reste demeure en triplets simples.
Attacher une argumentation à la formule chimique de l’eau est du gaspillage. Ne pas attacher d’argumentation au statut de capitale de Jérusalem est un mensonge.
Le moteur de jugement : h-Categoriser
Le graphe d’argumentation est jugé par le h-Categoriser d’Amgoud. Il calcule un score d’acceptabilité sur une échelle [-1, +1] pour chaque noeud — plus l’acceptabilité d’un attaquant est élevée, plus le score du noeud attaqué baisse. Itération récursive jusqu’à convergence.
Performance : même avec 100 000 triplets contestés portant chacun leur propre graphe d’argumentation, une requête n’évalue que le graphe de ce triplet. Indépendamment de la taille totale du graphe de connaissances.
Triple lookup: milliseconds (existing index)
Argumentation eval: milliseconds (h-Categoriser)
Verdict trace: milliseconds (graph traversal)
Ne faites pas passer le modèle à l’échelle. Faites passer l’argumentation à l’échelle.
Correspondance avec les ranks Wikidata
| Wikidata | extension toulmin |
|---|---|
| preferred rank | verdict > +0.5 (dans le contexte actuel) |
| normal rank | 0 < verdict ≤ +0.5 |
| deprecated rank | verdict ≤ 0 |
| reference | Backing |
| qualifier | Qualifier + conditions de la fonction de contexte |
La différence : le rank de Wikidata est statique — les éditeurs décident. Le verdict de Toulmin est dynamique — le contexte et la structure d’argumentation décident.
La vue d’ensemble
Ce système n’est pas spécifique à un domaine.
AI Prefrontal Cortex (feature selection):
triple = (feature, should_include_in, app_type)
context = current project's app tags
verdict = should this feature be included?
Knowledge graph general:
triple = (subject, predicate, object)
context = querier's domain/perspective
verdict = is this triple true in current context?
Même moteur. Même structure. Domaine différent. Les règles sont des fonctions Go, les exceptions sont des graphes defeats, le jugement est le h-Categoriser. Pas de DSL.
Pourquoi c’est important
Les LLM dissolvent les connaissances dans des poids. Posez une question, obtenez une réponse. Mais vous ne pouvez pas tracer structurellement si cette réponse est vraie dans quel contexte, sur quelle source elle se base, et si des réfutations existent. L’hallucination naît de cette absence structurelle.
Ce système ne peut pas prévenir toutes les hallucinations. Les LLM produisent des sorties ouvertes, et on ne peut pas pré-enregistrer chaque affirmation possible. Mais pour les affirmations déjà enregistrées dans le graphe d’argumentation, on peut comparer la réponse générée par un LLM au graphe et évaluer la crédibilité. « Quel est le Backing de cette affirmation ? Y a-t-il un Counter attaquant ce Backing ? Le verdict est-il positif dans le contexte actuel ? »
Pas un oracle universel de vérité. Un système d’évaluation de crédibilité qui opère sur l’argumentation accumulée.
Pas un système qui stocke des faits, mais qui gère des affirmations. Pas un système qui déclare la vérité, mais qui trace le jugement. C’est la prochaine étape pour les graphes de connaissances.
Articles liés
- toulmin — Go Rule Engine — Moteur de règles basé sur le modèle d’argumentation de Toulmin. Le moteur de jugement derrière cet article.
- Ratchet Pattern — Vérification déterministe et verrouillage ratchet.
Code : github.com/park-jun-woo/toulmin
go install github.com/park-jun-woo/toulmin@latest
Les exemples de code dans cet article représentent une vision de conception basée sur l’API actuelle de la bibliothèque toulmin. L’extension graphe de connaissances (TripleSpec, évaluation basée sur le contexte) est en développement actif. Le moteur de jugement central (h-Categoriser, graphe defeats, Rule/Counter) fonctionne aujourd’hui.
References
- Toulmin, S. (1958). The Uses of Argument. Cambridge University Press.
- Dung, P.M. (1995). “On the Acceptability of Arguments and its Fundamental Role in Nonmonotonic Reasoning, Logic Programming and n-Person Games.” Artificial Intelligence, 77(2), 321–357.
- Amgoud, L. & Ben-Naim, J. (2013). “Ranking-based semantics for argumentation frameworks.” SUM 2013, LNCS 8078, 134–147.
- Modgil, S. & Prakken, H. (2014). “The ASPIC+ framework for structured argumentation: a tutorial.” Argument & Computation, 5(1), 31–62.
- Groth, P. et al. (2010). “Anatomy of a Nanopublication.” Information Services & Use, 30(1-2), 51–56.
- Nix v. Hedden, 149 U.S. 304 (1893). United States Supreme Court.