トリプルは事実ではなく主張である 画像:AI生成

Wikidataの沈黙


Wikidataにはこんなトリプルがある:

(tomato, instance_of, vegetable) — rank: preferred
(tomato, instance_of, fruit)     — rank: normal

誰がpreferredを決めたのか?なぜpreferredなのか?どのコンテキストでpreferredなのか?

Wikidataはこれらの問いに沈黙する。編集者が決定し、システムがその決定を保存する。それだけだ。

しかし、トマトが野菜か果物かは物理定数ではない。シェフに聞けば——野菜だ。植物学者に聞けば——果物だ。アメリカ最高裁に聞けば——野菜だ(1893年、Nix v. Hedden)。同じ問いに三つの答え、そしてどれも間違いではない。

ナレッジグラフのトリプルは事実ではない。それは主張である。


主張には論証が必要

主張を保存するには構造が必要だ。Toulminの論証モデルがその構造を提供する。

要素役割トマトの例
Claim主張「トマトは野菜である」
Ground直接的証拠「料理分類学で野菜に分類されている」
Backing出典・権威「Le Guide Culinaire (1903)」
Qualifier適用範囲「料理のコンテキストにおいて」(confidence 0.8)
Rebuttal反駁条件「植物学のコンテキストでは果物——子房構造」
Warrant接続論理「伝統的な食材分類は料理用途に基づく」

トリプルごとに単一の真理値を強制するのではなく、トリプルを論証の対象に昇格させる。主張があり、証拠があり、反駁条件があり、出典がある。そして判定は——保存時ではなく、クエリ時に行われる。

このアイデア自体は新しくない。学術界ではDungの抽象的論証フレームワーク(1995)、ASPIC+(2010)、nanopublicationがナレッジグラフ上の論証に取り組んできた。違いは一つ——我々はこれを論文ではなく実行可能なコードとして提供する。go installでインストールし、ルールをGo関数として書き、今すぐ実行できる。


コンテキストが真理を決める

保存は論証構造。判定はランタイム。

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)

同じグラフ、同じ論証構造、同じコード。変わったのはコンテキストだけ。料理のコンテキストでクエリ:+0.8(野菜)。植物学のコンテキストでクエリ:-0.9(果物)。verdictはコンテキストに従う。

これがWikidataの静的なrankとの決定的な違いだ。編集者がpreferredを決めるのではない——クエリする側のコンテキストが判定を生み出す。


冥王星は惑星か?

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)

2006年以前に小学校に通った人にとって、冥王星は惑星だ。IAUにとって、冥王星は矮小惑星だ。どちらにも証拠があり、どちらにも出典がある。システムの仕事は一つを選ぶことではない——両方を保存し、コンテキストに従って判定することだ。


出典が攻撃される場合

学術的議論では、出典そのものが頻繁に攻撃される。

// 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)

Smithの論文はNEJMに掲載された。権威ある出典だ。しかし資金源が明らかになると、その論文に基づく主張全体が弱まる。counterは主張を直接反駁する。undercutterは主張の証拠基盤を弱める。どちらも主張を攻撃するが、方法が異なる。h-Categoriserがこれらの攻撃の強度を統合し、最終的なverdictを算出する。

真理は光の速度で消える。残るのは主張だけだ。システムは主張を管理するのであって、真理を宣言するのではない。


すべてのトリプルに論証が必要か?

いいえ。

(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.

基準はシンプルだ:同じ主語+述語に対して複数のオブジェクトが存在する、またはrankが分岐している、または参照が矛盾している——それは争点のあるトリプルだ。残りは単純なトリプルのままでよい。

水の化学式に論証を付けるのは無駄だ。エルサレムの首都としての地位に論証を付けないのは嘘だ。


判定エンジン:h-Categoriser

論証グラフはAmgoudのh-Categoriserによって判定される。各ノードに対して[-1, +1]スケールの受容性スコアを計算する——攻撃者の受容性が高いほど、攻撃されるノードのスコアは下がる。収束するまで再帰的に反復する。

パフォーマンス:10万件の争点トリプルがそれぞれ独自の論証グラフを持っていても、クエリはそのトリプルのグラフだけを評価する。ナレッジグラフ全体のサイズには依存しない。

Triple lookup:        milliseconds (existing index)
Argumentation eval:   milliseconds (h-Categoriser)
Verdict trace:        milliseconds (graph traversal)

モデルをスケールするな。論証をスケールせよ。


Wikidata Rankとの対応

Wikidatatoulmin拡張
preferred rankverdict > +0.5(現在のコンテキストで)
normal rank0 < verdict ≤ +0.5
deprecated rankverdict ≤ 0
referenceBacking
qualifierQualifier + コンテキスト関数の条件

違い:Wikidataのrankは静的——編集者が決める。Toulminのverdictは動的——コンテキストと論証構造が決める。


より大きな視点

このシステムはドメイン固有ではない。

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?

同じエンジン。同じ構造。異なるドメイン。ルールはGo関数、例外はdefeatsグラフ、判定はh-Categoriser。DSLなし。


なぜこれが重要か

LLMは知識を重みに溶かす。質問すれば答えが返る。しかし、その答えがどのコンテキストで真であり、どの出典に基づき、反駁が存在するかを構造的に追跡することはできない。ハルシネーションはこの構造的欠如から生まれる。

このシステムがすべてのハルシネーションを防げるわけではない。LLMはオープンエンドな出力を生成し、あらゆる可能な主張を事前登録することは不可能だ。しかし論証グラフに既に登録された主張については、LLMの生成した回答をグラフと比較し、信頼性を評価できる。「この主張のBackingは何か?そのBackingを攻撃するCounterはあるか?現在のコンテキストでverdictは正か?」

万能の真理オラクルではない。蓄積された論証に基づいて動作する信頼性評価システムだ。

事実を保存するシステムではなく、主張を管理するシステム。真理を宣言するシステムではなく、判定を追跡するシステム。これがナレッジグラフの次のステップだ。


関連記事

コード:github.com/park-jun-woo/toulmin

go install github.com/park-jun-woo/toulmin@latest

本記事のコード例はtoulminライブラリの現行APIに基づく設計ビジョンを示している。ナレッジグラフ拡張(TripleSpec、コンテキストベース評価)は現在活発に開発中。コア判定エンジン(h-Categoriser、defeatsグラフ、Rule/Counter)は今日動作する。


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.