Image: AI generated
Keheningan Wikidata
Di Wikidata ada triple seperti ini:
(tomato, instance_of, vegetable) — rank: preferred
(tomato, instance_of, fruit) — rank: normal
Siapa yang memutuskan preferred? Mengapa preferred? Dalam konteks apa preferred?
Wikidata membisu terhadap pertanyaan-pertanyaan ini. Editor yang memutuskan; sistem hanya menyimpan keputusan.
Tapi apakah tomat itu sayur atau buah bukanlah konstanta fisika. Tanya seorang koki, itu sayur. Tanya seorang ahli botani, itu buah. Tanya Mahkamah Agung AS, itu sayur (1893, Nix v. Hedden). Pertanyaan yang sama punya tiga jawaban, dan ketiganya tidak salah.
Triple dalam knowledge graph bukan fakta. Mereka adalah klaim.
Klaim membutuhkan argumentasi
Untuk menyimpan klaim, dibutuhkan struktur. Model argumentasi Toulmin menyediakan struktur tersebut.
| Elemen | Peran | Contoh tomat |
|---|---|---|
| Claim | Klaim | “Tomat adalah sayur” |
| Ground | Bukti langsung | “Diklasifikasikan sebagai sayur dalam taksonomi kuliner” |
| Backing | Sumber/otoritas | “Le Guide Culinaire (1903)” |
| Qualifier | Cakupan penerapan | “Dalam konteks kuliner” (kepercayaan 0.8) |
| Rebuttal | Kondisi sanggahan | “Dalam konteks botani adalah buah — struktur ovarium” |
| Warrant | Logika penghubung | “Klasifikasi bahan tradisional berdasarkan penggunaan kuliner” |
Alih-alih memaksakan satu truth value pada sebuah triple, kita mengangkat triple menjadi objek argumentasi. Ada klaim, ada bukti, ada kondisi sanggahan, ada sumber. Dan penilaian — tidak terjadi saat penyimpanan, melainkan saat query.
Ide ini sendiri bukan hal baru. Di dunia akademis, framework argumentasi abstrak Dung (1995), ASPIC+ (2010), nanopublication, dan lainnya telah membahas argumentasi di atas knowledge graph. Bedanya hanya satu — kami menyediakan kode yang dapat dieksekusi, bukan paper. Dipasang dengan go install, aturan ditulis sebagai fungsi Go, dan bisa dijalankan sekarang juga.
Konteks menentukan kebenaran
Penyimpanan adalah struktur argumentasi. Penilaian terjadi saat runtime.
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)
Graph yang sama, struktur argumentasi yang sama, kode yang sama. Hanya konteks yang berubah. Query dalam konteks kuliner menghasilkan +0.8 (sayur); dalam konteks botani menghasilkan -0.9 (buah). Verdict mengikuti konteks.
Inilah perbedaan fundamental dengan rank statis Wikidata. Bukan editor yang menentukan preferred, melainkan konteks penanya yang menghasilkan penilaian.
Apakah Pluto sebuah planet?
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)
Bagi yang bersekolah dasar sebelum 2006, Pluto adalah planet. Bagi IAU, Pluto adalah planet kerdil. Keduanya punya bukti, keduanya punya sumber. Yang harus dilakukan sistem bukan memilih salah satu, melainkan menyimpan keduanya dan menilai sesuai konteks.
Ketika sumber diserang
Dalam perdebatan akademis, sumber itu sendiri yang diserang adalah hal biasa.
// 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)
Paper Smith diterbitkan di NEJM. Sumber yang otoritatif. Tapi ketika sumber pendanaan terungkap, semua klaim yang didasarkan pada paper tersebut melemah. counter menyangkal klaim secara langsung; undercutter melemahkan bukti itu sendiri. Keduanya menyerang klaim, tapi dengan cara berbeda. h-Categoriser mensintesis intensitas serangan-serangan ini untuk menghitung verdict akhir.
Kebenaran menghilang dengan kecepatan cahaya; hanya klaim yang tersisa. Sistem mengelola klaim, bukan mendeklarasikan kebenaran.
Apakah semua triple membutuhkan argumentasi?
Tidak.
(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.
Kriterianya sederhana: jika untuk subject + predicate yang sama terdapat beberapa object, atau rank berbeda, atau reference saling bertentangan — itu triple yang diperdebatkan. Sisanya dibiarkan sebagai triple biasa.
Menambahkan argumentasi pada rumus kimia air adalah pemborosan. Tidak menambahkan argumentasi pada status ibu kota Yerusalem adalah kebohongan.
Mesin penilaian: h-Categoriser
Penilaian graph argumentasi dilakukan oleh h-Categoriser milik Amgoud. Menghitung untuk setiap node derajat akseptabilitas pada skala [-1, +1]: semakin tinggi akseptabilitas penyerang, semakin rendah akseptabilitas yang diserang. Iterasi rekursif hingga konvergen.
Performa: meskipun 100.000 triple yang diperdebatkan masing-masing memiliki graph argumentasi, saat query hanya graph triple yang bersangkutan yang dievaluasi. Independen dari ukuran total knowledge graph.
Triple lookup: milliseconds (existing index)
Argumentation eval: milliseconds (h-Categoriser)
Verdict trace: milliseconds (graph traversal)
Yang diperbesar bukan modelnya, melainkan argumentasinya.
Korespondensi dengan rank Wikidata
| Wikidata | toulmin extension |
|---|---|
| preferred rank | verdict > +0.5 (in current context) |
| normal rank | 0 < verdict ≤ +0.5 |
| deprecated rank | verdict ≤ 0 |
| reference | Backing |
| qualifier | Qualifier + context function conditions |
Perbedaan: rank Wikidata bersifat statis. Ditentukan oleh editor. Verdict toulmin bersifat dinamis. Ditentukan oleh konteks dan struktur argumentasi.
Gambaran lebih besar
Sistem ini tidak terikat pada domain tertentu.
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?
Mesin yang sama. Struktur yang sama. Domain berbeda. Aturan adalah fungsi Go, pengecualian adalah graph defeats, penilaian adalah h-Categoriser. Tanpa DSL.
Mengapa ini dibutuhkan
LLM melarutkan pengetahuan ke dalam bobot. Bertanya, keluar jawaban. Tapi dalam konteks apa jawaban itu benar, berdasarkan sumber apa, apakah ada sanggahan — tidak bisa dilacak secara struktural. Halusinasi lahir dari ketiadaan struktur ini.
Sistem ini tidak bisa mencegah semua halusinasi. LLM menghasilkan output terbuka, dan tidak mungkin mendaftarkan semua klaim yang mungkin terlebih dahulu. Tapi untuk klaim yang sudah terdaftar dalam graph argumentasi, jawaban yang dihasilkan LLM bisa dibandingkan dan kredibilitasnya bisa dinilai. “Apa Backing dari klaim ini? Adakah Counter yang menyerang Backing tersebut? Apakah verdict dalam konteks saat ini positif?”
Ini bukan penilai kebenaran universal. Melainkan sistem evaluasi kredibilitas yang bekerja di atas argumentasi yang telah terakumulasi.
Bukan sistem yang menyimpan fakta, melainkan yang mengelola klaim. Bukan mendeklarasikan kebenaran, melainkan melacak penilaian. Inilah langkah selanjutnya untuk knowledge graph.
Related
- toulmin — Go Rule Engine — Mesin aturan berbasis model argumentasi Toulmin. Mesin penilaian di balik artikel ini.
- Ratchet Pattern — Verifikasi deterministik dan penguncian ratchet.
Code: github.com/park-jun-woo/toulmin
go install github.com/park-jun-woo/toulmin@latest
The code examples in this article represent a design vision based on the toulmin library’s current API. The knowledge graph extension (TripleSpec, context-based evaluation) is under active development. The core judgment engine (h-Categoriser, defeats graph, Rule/Counter) works today.
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.