Add SYSTEM_INSPIRATIONS.md — concrete adoption plan: what to steal, what to adapt, what to learn from
Browse files- SYSTEM_INSPIRATIONS.md +810 -0
SYSTEM_INSPIRATIONS.md
ADDED
|
@@ -0,0 +1,810 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# PhD Research OS — System Inspirations
|
| 2 |
+
## What to Steal, What to Adapt, and What to Learn From
|
| 3 |
+
|
| 4 |
+
**Date**: 2026-04-23
|
| 5 |
+
**Status**: ACTIONABLE — Every item maps to a specific layer, priority, and source system
|
| 6 |
+
**Written for**: Anyone with a high school education
|
| 7 |
+
**Purpose**: Turn the Prior Art Analysis into concrete things we should actually DO
|
| 8 |
+
|
| 9 |
+
---
|
| 10 |
+
|
| 11 |
+
## What Is This Document?
|
| 12 |
+
|
| 13 |
+
The [PRIOR_ART_ANALYSIS.md](PRIOR_ART_ANALYSIS.md) tells you WHO has built what. This document tells you WHAT we should do about it. Every item here is either:
|
| 14 |
+
|
| 15 |
+
- **🔵 DIRECT ADOPTION** — Use this system/tool/dataset exactly as-is, plugged into our pipeline
|
| 16 |
+
- **🟣 ADAPTATION** — Take the idea or technique and rebuild it to fit our specific needs
|
| 17 |
+
- **🟤 INDIRECT INSPIRATION** — Learn from their approach without copying their code
|
| 18 |
+
|
| 19 |
+
Think of it like cooking. Direct adoption = buying a jar of pasta sauce. Adaptation = taking someone's recipe but adjusting the spices. Inspiration = visiting a great restaurant and getting ideas for your own menu.
|
| 20 |
+
|
| 21 |
+
---
|
| 22 |
+
|
| 23 |
+
## Table of Contents
|
| 24 |
+
|
| 25 |
+
1. [Direct Adoptions — Plug These In](#1-direct-adoptions)
|
| 26 |
+
2. [Adaptations — Rebuild These for Our Needs](#2-adaptations)
|
| 27 |
+
3. [Indirect Inspirations — Learn From These Approaches](#3-indirect-inspirations)
|
| 28 |
+
4. [New Features Inspired by Prior Art](#4-new-features)
|
| 29 |
+
5. [Integration Map — Where Each Inspiration Fits](#5-integration-map)
|
| 30 |
+
6. [Priority Execution Order](#6-priority-order)
|
| 31 |
+
|
| 32 |
+
---
|
| 33 |
+
|
| 34 |
+
## 1. Direct Adoptions — Plug These In {#1-direct-adoptions}
|
| 35 |
+
|
| 36 |
+
These are tools, datasets, and models that we should use EXACTLY as they are. No modification needed. Just install and connect.
|
| 37 |
+
|
| 38 |
+
---
|
| 39 |
+
|
| 40 |
+
### 🔵 DA-1: SPECTER2 for Claim Embeddings (Layer 3: Deduplication)
|
| 41 |
+
|
| 42 |
+
**Source system**: AllenAI / Semantic Scholar
|
| 43 |
+
**What to adopt**: [`allenai/specter2_base`](https://huggingface.co/allenai/specter2_base) with the proximity adapter
|
| 44 |
+
|
| 45 |
+
**The problem we have**: Our deduplication system uses Jaccard word overlap. "The LOD was 0.8 fM" and "A detection limit of 800 attomolar was achieved" share almost no words but mean the SAME thing. Our current system thinks they're different. That's like a librarian who thinks "dog" and "canine" are different animals.
|
| 46 |
+
|
| 47 |
+
**The fix**: SPECTER2 converts any scientific sentence into a list of 768 numbers (an "embedding"). Sentences that mean the same thing get similar numbers, even if they use completely different words. It was trained on millions of scientific papers, so it actually understands scientific vocabulary.
|
| 48 |
+
|
| 49 |
+
**How to plug it in**:
|
| 50 |
+
```python
|
| 51 |
+
# Replace word-overlap deduplication with embedding-based similarity
|
| 52 |
+
from transformers import AutoTokenizer
|
| 53 |
+
from adapters import AutoAdapterModel
|
| 54 |
+
import torch
|
| 55 |
+
|
| 56 |
+
# Load once at startup
|
| 57 |
+
tokenizer = AutoTokenizer.from_pretrained('allenai/specter2_base')
|
| 58 |
+
model = AutoAdapterModel.from_pretrained('allenai/specter2_base')
|
| 59 |
+
model.load_adapter("allenai/specter2", source="hf", set_active=True)
|
| 60 |
+
|
| 61 |
+
def embed_claim(text: str) -> list[float]:
|
| 62 |
+
"""Convert a claim into a 768-dimensional vector."""
|
| 63 |
+
inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=512)
|
| 64 |
+
with torch.no_grad():
|
| 65 |
+
output = model(**inputs)
|
| 66 |
+
return output.last_hidden_state[:, 0, :].squeeze().tolist()
|
| 67 |
+
|
| 68 |
+
def are_duplicates(claim_a: str, claim_b: str, threshold: float = 0.85) -> bool:
|
| 69 |
+
"""Check if two claims are semantically duplicate."""
|
| 70 |
+
emb_a = embed_claim(claim_a)
|
| 71 |
+
emb_b = embed_claim(claim_b)
|
| 72 |
+
cosine_sim = sum(a*b for a,b in zip(emb_a, emb_b)) / (
|
| 73 |
+
sum(a**2 for a in emb_a)**0.5 * sum(b**2 for b in emb_b)**0.5
|
| 74 |
+
)
|
| 75 |
+
return cosine_sim > threshold
|
| 76 |
+
```
|
| 77 |
+
|
| 78 |
+
**Analogy**: This is like upgrading from a librarian who only matches exact book titles to a librarian who actually reads the books and knows which ones are about the same topic.
|
| 79 |
+
|
| 80 |
+
**Layer affected**: Layer 3 (Canonicalization)
|
| 81 |
+
**Priority**: 🔴 Critical — do this first
|
| 82 |
+
**Effort**: 1-2 days (model download + integration)
|
| 83 |
+
|
| 84 |
+
---
|
| 85 |
+
|
| 86 |
+
### 🔵 DA-2: SciFact as Our Evaluation Benchmark (Layer 6: Evaluation)
|
| 87 |
+
|
| 88 |
+
**Source system**: AllenAI
|
| 89 |
+
**What to adopt**: [`bigbio/scifact`](https://huggingface.co/datasets/bigbio/scifact)
|
| 90 |
+
|
| 91 |
+
**The problem we have**: We have 143 tests that check if the code runs. Zero tests that check if the SCIENCE is right. That's like testing a calculator by checking if the buttons click, but never checking if 2+2 actually equals 4.
|
| 92 |
+
|
| 93 |
+
**The fix**: SciFact contains 1,400 scientific claims with expert labels (SUPPORTS / REFUTES / NOINFO) and rationale sentences. Feed our extraction pipeline the same claims and check if our labels match the expert labels. Instant quality measurement.
|
| 94 |
+
|
| 95 |
+
**How to plug it in**:
|
| 96 |
+
```python
|
| 97 |
+
from datasets import load_dataset
|
| 98 |
+
|
| 99 |
+
# Load SciFact benchmark
|
| 100 |
+
scifact = load_dataset("bigbio/scifact")
|
| 101 |
+
|
| 102 |
+
# For each claim in the test set:
|
| 103 |
+
for example in scifact["test"]:
|
| 104 |
+
claim_text = example["text_1"] # The scientific claim
|
| 105 |
+
evidence_text = example["text_2"] # The abstract/evidence
|
| 106 |
+
expert_label = example["label"] # SUPPORTS, REFUTES, or NOINFO
|
| 107 |
+
|
| 108 |
+
# Run our pipeline on the same inputs
|
| 109 |
+
our_label = our_pipeline.extract_and_classify(claim_text, evidence_text)
|
| 110 |
+
|
| 111 |
+
# Compare: do we agree with the expert?
|
| 112 |
+
correct = (our_label == expert_label)
|
| 113 |
+
```
|
| 114 |
+
|
| 115 |
+
**Analogy**: SciFact is like the answer key for a standardized test. We can't know how well our system works until we check it against the answer key.
|
| 116 |
+
|
| 117 |
+
**Layer affected**: Layer 6 (Evaluation)
|
| 118 |
+
**Priority**: 🔴 Critical — do this alongside SPECTER2
|
| 119 |
+
**Effort**: 1 day (dataset download + evaluation script)
|
| 120 |
+
|
| 121 |
+
---
|
| 122 |
+
|
| 123 |
+
### 🔵 DA-3: SciRIFF for Training Data (Training Pipeline)
|
| 124 |
+
|
| 125 |
+
**Source system**: AllenAI
|
| 126 |
+
**What to adopt**: [`allenai/SciRIFF`](https://huggingface.co/datasets/allenai/SciRIFF)
|
| 127 |
+
|
| 128 |
+
**The problem we have**: Our training data is 1,900 examples generated by a Python template script. SciRIFF has 137,000 examples written by human experts across 54 scientific tasks. That's 72× more data, and it's real human expertise, not computer-generated patterns.
|
| 129 |
+
|
| 130 |
+
**The fix**: Use SciRIFF as supplementary training data alongside our existing dataset. The SciRIFF paper specifically found that expert-written examples outperform GPT-4-generated examples — confirming that our synthetic data is a weakness.
|
| 131 |
+
|
| 132 |
+
**Key tasks from SciRIFF that map to our pipeline**:
|
| 133 |
+
| SciRIFF Task | Our Pipeline Layer | How It Helps |
|
| 134 |
+
|-------------|-------------------|-------------|
|
| 135 |
+
| Claim verification (from SciFact) | Layer 2 + Layer 4 | Teaches claim extraction + supports/refutes labeling |
|
| 136 |
+
| Information extraction (from SciERC) | Layer 2 | Teaches entity + relation extraction from papers |
|
| 137 |
+
| NER (from various sources) | Layer 1 | Teaches entity recognition |
|
| 138 |
+
| Summarization | Layer 2 | Teaches faithful text compression |
|
| 139 |
+
| Question answering (from QASPER) | Cross-cutting | Teaches reading comprehension of full papers |
|
| 140 |
+
|
| 141 |
+
**Analogy**: We're currently training our student using a workbook where all the practice problems were invented by a computer. SciRIFF is like getting 137,000 practice problems written by real teachers. The student will learn much better.
|
| 142 |
+
|
| 143 |
+
**Layer affected**: Training pipeline (all stages)
|
| 144 |
+
**Priority**: 🔴 Critical — do this before next training run
|
| 145 |
+
**Effort**: 2-3 days (dataset conversion to our format + integration)
|
| 146 |
+
|
| 147 |
+
---
|
| 148 |
+
|
| 149 |
+
### 🔵 DA-4: Nougat for Equation Parsing (Layer 0: Ingestion)
|
| 150 |
+
|
| 151 |
+
**Source system**: Meta/Facebook Research
|
| 152 |
+
**What to adopt**: [`facebook/nougat-base`](https://huggingface.co/facebook/nougat-base)
|
| 153 |
+
|
| 154 |
+
**The problem we have**: Our parser turns equations into garbage. A paper that says "E = mc²" gets turned into "E mc 2" or worse. For papers in physics, chemistry, and engineering, equations ARE the findings.
|
| 155 |
+
|
| 156 |
+
**The fix**: Nougat was specifically trained to convert scientific PDFs into markdown WITH proper LaTeX equations. It reads the visual layout of the PDF and outputs structured text that preserves math symbols, subscripts, superscripts, and equation structure.
|
| 157 |
+
|
| 158 |
+
**Analogy**: Our current parser is like a translator who speaks English but not math. Nougat speaks both fluently.
|
| 159 |
+
|
| 160 |
+
**Layer affected**: Layer 0 (Structural Ingestion)
|
| 161 |
+
**Priority**: 🔴 Critical — already in our design, needs actual integration
|
| 162 |
+
**Effort**: 2-3 days (model integration + routing logic for equation regions)
|
| 163 |
+
|
| 164 |
+
---
|
| 165 |
+
|
| 166 |
+
### 🔵 DA-5: SciBERT-NLI as a Fast Contradiction Pre-Filter (Layer 4: Knowledge Graph)
|
| 167 |
+
|
| 168 |
+
**Source system**: AllenAI (base) + Gabriele Sarti (NLI fine-tuning)
|
| 169 |
+
**What to adopt**: [`gsarti/scibert-nli`](https://huggingface.co/gsarti/scibert-nli)
|
| 170 |
+
|
| 171 |
+
**The problem we have**: Our conflict detection checks all claim pairs using expensive LLM calls. With 1,000 claims, that's 499,500 pairs. Even checking only the top 500 claims is slow.
|
| 172 |
+
|
| 173 |
+
**The fix**: SciBERT-NLI is a small, fast model specifically trained to detect entailment and contradiction in scientific text. Use it as a pre-filter: run all pairs through SciBERT-NLI (fast, cheap), then only send the pairs flagged as potential contradictions to the expensive main model.
|
| 174 |
+
|
| 175 |
+
**Analogy**: Instead of having a doctor examine every person in a city (expensive), first have nurses do quick screenings (cheap), then only send people with concerning results to the doctor.
|
| 176 |
+
|
| 177 |
+
**Layer affected**: Layer 4 (Knowledge Graph — conflict detection)
|
| 178 |
+
**Priority**: 🟠 High — significant speed improvement
|
| 179 |
+
**Effort**: 1-2 days (model download + pre-filter pipeline)
|
| 180 |
+
|
| 181 |
+
---
|
| 182 |
+
|
| 183 |
+
## 2. Adaptations — Rebuild These for Our Needs {#2-adaptations}
|
| 184 |
+
|
| 185 |
+
These are techniques and patterns from other systems that we should adapt and rebuild, not copy directly.
|
| 186 |
+
|
| 187 |
+
---
|
| 188 |
+
|
| 189 |
+
### 🟣 AD-1: PaperQA2's RCS Pattern → Our "Pre-Extraction Filter"
|
| 190 |
+
|
| 191 |
+
**Source system**: PaperQA2 (FutureHouse)
|
| 192 |
+
**Paper**: [arxiv:2409.13740](https://arxiv.org/abs/2409.13740)
|
| 193 |
+
|
| 194 |
+
**What they do**: Before generating an answer, PaperQA2 runs **RCS (Rerank + Contextual Summarize)**:
|
| 195 |
+
1. Retrieve many text chunks from papers
|
| 196 |
+
2. Have the AI rerank them by relevance (throw away the irrelevant ones)
|
| 197 |
+
3. Have the AI write a contextual summary of each remaining chunk
|
| 198 |
+
4. Generate the final answer using ONLY the summaries
|
| 199 |
+
|
| 200 |
+
**Why this matters**: PaperQA2 found that the RCS step is the single biggest contributor to answer quality. Without it, the model drowns in irrelevant text. With it, the model sees only the information that matters.
|
| 201 |
+
|
| 202 |
+
**How we adapt it**: Before our AI Council processes a paper section, add a pre-filtering step:
|
| 203 |
+
1. After Layer 0 parsing, get all text chunks from a section
|
| 204 |
+
2. Have a lightweight model (SciBERT) score each chunk for "claim density" — how many extractable findings does this chunk contain?
|
| 205 |
+
3. Only send high-density chunks to the expensive Council extraction
|
| 206 |
+
4. Low-density chunks (boilerplate methodology, acknowledgments, generic intro text) get a lightweight extraction or skip
|
| 207 |
+
|
| 208 |
+
**The analogy**: When studying for an exam, you don't re-read the entire textbook. You first skim to find the important sections, highlight them, then study the highlights deeply. RCS is the highlighting step.
|
| 209 |
+
|
| 210 |
+
**Our adaptation vs. their original**: PaperQA2 uses RCS for question-answering. We adapt it for claim extraction. Different task, same principle — filter before you analyze.
|
| 211 |
+
|
| 212 |
+
**Layer affected**: Layer 2 (Qualified Extraction — pre-processing step)
|
| 213 |
+
**Priority**: 🟠 High — significant quality improvement
|
| 214 |
+
**Effort**: 1 week
|
| 215 |
+
|
| 216 |
+
---
|
| 217 |
+
|
| 218 |
+
### 🟣 AD-2: FactReview's Dual Evidence Pattern → Our "Cross-Reference Verification"
|
| 219 |
+
|
| 220 |
+
**Source system**: FactReview
|
| 221 |
+
**Paper**: [arxiv:2604.04074](https://arxiv.org/abs/2604.04074)
|
| 222 |
+
|
| 223 |
+
**What they do**: For every claim in a paper, FactReview checks it against TWO sources:
|
| 224 |
+
1. The paper's own evidence (does the data in the paper actually support this claim?)
|
| 225 |
+
2. External literature (do other papers agree or disagree?)
|
| 226 |
+
|
| 227 |
+
**Why this matters**: A claim might look strong within its own paper but be contradicted by 10 other papers. Or a claim might look weak in isolation but be supported by a mountain of external evidence. You need both perspectives.
|
| 228 |
+
|
| 229 |
+
**How we adapt it**: After Layer 2 extraction produces claims from a single paper, add a cross-reference step before Layer 4 scoring:
|
| 230 |
+
1. For each extracted claim, check: does the claim's evidence (source quote, table reference, figure reference) actually support what the claim says? (Internal check)
|
| 231 |
+
2. Then check: does the claim align with or contradict the existing knowledge graph? (External check)
|
| 232 |
+
3. If internal and external evidence disagree, flag for human review
|
| 233 |
+
|
| 234 |
+
**The analogy**: FactReview is like a detective who interviews both the suspect (the paper) AND the witnesses (other papers). We should do the same — don't trust what a paper says about itself without checking the neighbors.
|
| 235 |
+
|
| 236 |
+
**Layer affected**: Between Layer 2 and Layer 4 (new verification step)
|
| 237 |
+
**Priority**: 🟠 High — reduces hallucination
|
| 238 |
+
**Effort**: 1-2 weeks
|
| 239 |
+
|
| 240 |
+
---
|
| 241 |
+
|
| 242 |
+
### 🟣 AD-3: KGX3's Deterministic Language Filters → Our "Epistemic Trigger Words"
|
| 243 |
+
|
| 244 |
+
**Source system**: KGX3 / iKuhn
|
| 245 |
+
**Paper**: [arxiv:2002.03531](https://arxiv.org/abs/2002.03531)
|
| 246 |
+
|
| 247 |
+
**What they do**: KGX3 doesn't ask an AI "is this a confirmation or a challenge?" Instead, they have **specific word patterns** (called "language-game filters") that detect each epistemic category:
|
| 248 |
+
- "consistent with previous findings" → Confirms
|
| 249 |
+
- "contrary to expectations" → Challenges
|
| 250 |
+
- "first time that" → Novel
|
| 251 |
+
- "replication of" → Confirms
|
| 252 |
+
|
| 253 |
+
Each filter has a fixed activation threshold (θ=0.7), validated across multiple scientific disciplines.
|
| 254 |
+
|
| 255 |
+
**Why this matters**: Rules-based classification is deterministic — it gives the same answer every time, and you can audit exactly WHY a claim was classified a certain way. AI-based classification is stochastic — it might give different answers on different runs, and you can't fully explain why.
|
| 256 |
+
|
| 257 |
+
**How we adapt it**: Build a set of "epistemic trigger word" dictionaries for our three categories:
|
| 258 |
+
|
| 259 |
+
```python
|
| 260 |
+
FACT_TRIGGERS = {
|
| 261 |
+
"strong": ["demonstrated", "measured", "observed", "detected", "confirmed",
|
| 262 |
+
"showed that", "resulted in", "was found to be", "achieved"],
|
| 263 |
+
"moderate": ["correlated with", "associated with", "was consistent with"],
|
| 264 |
+
}
|
| 265 |
+
|
| 266 |
+
INTERPRETATION_TRIGGERS = {
|
| 267 |
+
"strong": ["suggests that", "indicates that", "implies", "may be attributed to",
|
| 268 |
+
"could be explained by", "appears to", "is likely due to"],
|
| 269 |
+
"moderate": ["consistent with", "in line with", "supports the hypothesis"],
|
| 270 |
+
}
|
| 271 |
+
|
| 272 |
+
HYPOTHESIS_TRIGGERS = {
|
| 273 |
+
"strong": ["may", "might", "could potentially", "we hypothesize",
|
| 274 |
+
"it is possible that", "remains to be determined", "future work"],
|
| 275 |
+
"moderate": ["we propose", "we speculate", "it is conceivable"],
|
| 276 |
+
}
|
| 277 |
+
|
| 278 |
+
def compute_epistemic_trigger_score(claim_text: str, source_section: str) -> dict:
|
| 279 |
+
"""
|
| 280 |
+
Code-computed epistemic classification based on trigger words.
|
| 281 |
+
This runs ALONGSIDE the AI classification as a validator.
|
| 282 |
+
If the AI says 'Fact' but the trigger words say 'Hypothesis',
|
| 283 |
+
flag for human review.
|
| 284 |
+
"""
|
| 285 |
+
scores = {"Fact": 0, "Interpretation": 0, "Hypothesis": 0}
|
| 286 |
+
text_lower = claim_text.lower()
|
| 287 |
+
|
| 288 |
+
for trigger in FACT_TRIGGERS["strong"]:
|
| 289 |
+
if trigger in text_lower:
|
| 290 |
+
scores["Fact"] += 0.3
|
| 291 |
+
for trigger in FACT_TRIGGERS["moderate"]:
|
| 292 |
+
if trigger in text_lower:
|
| 293 |
+
scores["Fact"] += 0.15
|
| 294 |
+
# ... same for Interpretation and Hypothesis
|
| 295 |
+
|
| 296 |
+
# Section modifier (from Epistemic Separation Engine)
|
| 297 |
+
if source_section == "abstract":
|
| 298 |
+
scores["Interpretation"] += 0.2 # Bias toward Interpretation for abstracts
|
| 299 |
+
elif source_section == "results":
|
| 300 |
+
scores["Fact"] += 0.2 # Bias toward Fact for results
|
| 301 |
+
|
| 302 |
+
# Return the highest-scoring category
|
| 303 |
+
return max(scores, key=scores.get), scores
|
| 304 |
+
```
|
| 305 |
+
|
| 306 |
+
Use this as a **validator** — if the AI Council says "Fact" but the trigger analysis says "Hypothesis," the disagreement IS the signal. Flag it for human review.
|
| 307 |
+
|
| 308 |
+
**The analogy**: KGX3's approach is like a grammar checker — it uses specific rules to flag errors. Our AI Council is like a writing tutor — it uses judgment. We should use BOTH. The grammar checker catches things the tutor misses, and vice versa.
|
| 309 |
+
|
| 310 |
+
**Layer affected**: Layer 2 (Qualified Extraction — validation step) + Layer 5 (Scoring)
|
| 311 |
+
**Priority**: 🟠 High — improves epistemic accuracy
|
| 312 |
+
**Effort**: 1 week
|
| 313 |
+
|
| 314 |
+
---
|
| 315 |
+
|
| 316 |
+
### 🟣 AD-4: Paper Circle's Coverage Checker → Our "Completeness Auditor"
|
| 317 |
+
|
| 318 |
+
**Source system**: Paper Circle
|
| 319 |
+
**Paper**: [arxiv:2604.06170](https://arxiv.org/abs/2604.06170)
|
| 320 |
+
|
| 321 |
+
**What they do**: After all extraction agents have finished, a "Coverage Checker" agent reviews the results and asks: "Did we miss anything? Are there figures without linked concepts? Are there methods in the text that we didn't extract? Are there experimental results that nobody captured?"
|
| 322 |
+
|
| 323 |
+
**Why this matters**: The most dangerous failure in any extraction system is **silent omission** — the system looks like it's done, but it actually missed the most important finding in the paper. Without a coverage check, you'd never know.
|
| 324 |
+
|
| 325 |
+
**How we adapt it**: After the AI Council finishes extraction (end of Layer 2), add a completeness audit:
|
| 326 |
+
|
| 327 |
+
1. **Section coverage**: Did we extract at least one claim from every Results subsection? If not, why not? Flag unextracted sections.
|
| 328 |
+
2. **Figure/table coverage**: Every figure and table should be referenced by at least one claim. Orphaned figures/tables suggest missed findings.
|
| 329 |
+
3. **Statistical coverage**: If the paper reports N, p-values, effect sizes, or confidence intervals, at least one claim should capture them. Unreferenced statistics suggest missed quantitative findings.
|
| 330 |
+
4. **Citation coverage**: Claims that cite other papers should be tagged as inherited citations. Untagged citations suggest the system confused someone else's finding for this paper's finding.
|
| 331 |
+
|
| 332 |
+
**The analogy**: After a team of movers loads a truck, a supervisor walks through the house checking every room. "Did we get the bedroom? Kitchen? Garage? Anything left behind?" The Coverage Checker is that supervisor.
|
| 333 |
+
|
| 334 |
+
**Layer affected**: Layer 2 (Qualified Extraction — post-processing step)
|
| 335 |
+
**Priority**: 🟡 Medium — prevents silent omission
|
| 336 |
+
**Effort**: 1 week
|
| 337 |
+
|
| 338 |
+
---
|
| 339 |
+
|
| 340 |
+
### 🟣 AD-5: PaperQA2's "Refuse to Answer" → Our "Low Confidence Quarantine"
|
| 341 |
+
|
| 342 |
+
**Source system**: PaperQA2 (FutureHouse)
|
| 343 |
+
**Paper**: [arxiv:2409.13740](https://arxiv.org/abs/2409.13740)
|
| 344 |
+
|
| 345 |
+
**What they do**: When PaperQA2 doesn't have enough evidence to answer a question, it says "I cannot answer this question with the available evidence." It literally refuses rather than making something up.
|
| 346 |
+
|
| 347 |
+
**Why this matters**: A truth-seeking system that ALWAYS produces output is lying. Real scientists say "I don't know" constantly — it's the most honest and most important thing they say. Our system should too.
|
| 348 |
+
|
| 349 |
+
**How we adapt it**: Add a confidence quarantine zone:
|
| 350 |
+
|
| 351 |
+
1. **At extraction time**: If the AI Council's composite confidence for a claim is below 0.3, the claim goes into a "Low Confidence Quarantine" queue instead of the main knowledge graph.
|
| 352 |
+
2. **In the UI**: Quarantined claims are visible in a separate tab labeled "⚠️ Uncertain — Needs Evidence." They are NOT shown in the main dashboard.
|
| 353 |
+
3. **In exports**: Quarantined claims are excluded from Obsidian exports, CSV downloads, and BibTeX files by default. A user can manually include them with a checkbox: "☐ Include uncertain claims (confidence < 0.3)."
|
| 354 |
+
4. **In the knowledge graph**: Quarantined claims are NOT connected to other claims via supports/refutes edges. They exist as isolated nodes in a "pending" state.
|
| 355 |
+
|
| 356 |
+
**The analogy**: A weather forecaster who says "it might rain tomorrow" is more honest than one who says "it WILL rain tomorrow" when they're not sure. Our system should be the honest forecaster.
|
| 357 |
+
|
| 358 |
+
**Layer affected**: Layer 2, Layer 4, Layer 7 (cross-cutting)
|
| 359 |
+
**Priority**: 🟠 High — prevents false confidence
|
| 360 |
+
**Effort**: 3-5 days
|
| 361 |
+
|
| 362 |
+
---
|
| 363 |
+
|
| 364 |
+
### 🟣 AD-6: CLAIRE's Agentic Contradiction Loop → Our "Conflict Investigation Protocol"
|
| 365 |
+
|
| 366 |
+
**Source system**: CLAIRE (Stanford)
|
| 367 |
+
**Paper**: [arxiv:2509.23233](https://arxiv.org/abs/2509.23233)
|
| 368 |
+
|
| 369 |
+
**What they do**: Instead of just comparing two claims and saying "these contradict," CLAIRE runs an investigation:
|
| 370 |
+
1. Extract a claim
|
| 371 |
+
2. Search the entire corpus for related claims
|
| 372 |
+
3. For each related claim, use AI reasoning to determine: agree, disagree, or unrelated?
|
| 373 |
+
4. If disagree, retrieve MORE evidence from surrounding context to confirm the contradiction isn't just a misunderstanding
|
| 374 |
+
5. Only then flag it as a real contradiction
|
| 375 |
+
|
| 376 |
+
**How we adapt it**: Upgrade our conflict detection from simple pairwise comparison to an investigation protocol:
|
| 377 |
+
|
| 378 |
+
1. **Pre-filter** (DA-5: SciBERT-NLI): Quick check — do these two claims even potentially disagree?
|
| 379 |
+
2. **Context retrieval**: For both claims, retrieve the full paragraph they came from (not just the claim text)
|
| 380 |
+
3. **Method check**: Do both claims use comparable methods? (Our existing method-compatibility layer)
|
| 381 |
+
4. **Evidence deepening**: Search for other claims in the knowledge graph that relate to EITHER claim. Do they provide additional evidence for or against the contradiction?
|
| 382 |
+
5. **Confidence assessment**: How confident are we that this is a REAL contradiction vs. a difference in methods, definitions, or scope?
|
| 383 |
+
6. **Output**: A conflict report with evidence from multiple sources, not just two isolated claims
|
| 384 |
+
|
| 385 |
+
**The analogy**: CLAIRE's approach is like a detective who doesn't just interview two witnesses separately — they interview 10 witnesses, check the physical evidence, review the security footage, and THEN decide if there's a real disagreement. We should be that thorough.
|
| 386 |
+
|
| 387 |
+
**Layer affected**: Layer 4 (Knowledge Graph — conflict detection upgrade)
|
| 388 |
+
**Priority**: 🟡 Medium — significant quality improvement for contradiction detection
|
| 389 |
+
**Effort**: 2-3 weeks
|
| 390 |
+
|
| 391 |
+
---
|
| 392 |
+
|
| 393 |
+
### 🟣 AD-7: CritiCal's Critique-Based Calibration → Our "Confidence Explanation Engine"
|
| 394 |
+
|
| 395 |
+
**Source system**: CritiCal
|
| 396 |
+
**Paper**: [arxiv:2510.24505](https://arxiv.org/abs/2510.24505)
|
| 397 |
+
|
| 398 |
+
**What they do**: Instead of just asking an AI "how confident are you?", CritiCal asks the AI to WRITE a critique of its own answer first, then derives confidence from the critique. An AI that writes "I'm not sure about the denominator" naturally produces a lower confidence than one that writes "this is clearly supported by Figure 3."
|
| 399 |
+
|
| 400 |
+
**Why this matters**: Their key finding is that the ACT of critiquing improves calibration. The AI becomes more honest about uncertainty when forced to articulate where the uncertainty comes from.
|
| 401 |
+
|
| 402 |
+
**How we adapt it**: Add a critique step to our AI Council's workflow:
|
| 403 |
+
|
| 404 |
+
After the Extractor produces a claim, but BEFORE the Critic evaluates it, require the Extractor to write a brief self-critique:
|
| 405 |
+
|
| 406 |
+
```
|
| 407 |
+
Claim: "The LOD was 0.8 fM"
|
| 408 |
+
Self-critique: "I am confident about the value (0.8 fM) because it appears
|
| 409 |
+
in Table 2 with clear units. I am less confident about whether this is a
|
| 410 |
+
universal or condition-specific finding — the paper says 'in 10 mM PBS'
|
| 411 |
+
which I've preserved as a qualifier."
|
| 412 |
+
```
|
| 413 |
+
|
| 414 |
+
This self-critique serves two purposes:
|
| 415 |
+
1. It makes the Extractor's uncertainty **explicit and auditable** (the researcher can read WHY the AI is uncertain)
|
| 416 |
+
2. It provides **structured input** for our confidence formula (the self-critique mentions preserved qualifiers, which maps to our qualifier_strength score)
|
| 417 |
+
|
| 418 |
+
**The analogy**: A student who writes "I think this is right but I'm not sure about step 3" is a BETTER student than one who just writes the answer. The self-doubt IS the learning signal.
|
| 419 |
+
|
| 420 |
+
**Layer affected**: Layer 2 (Qualified Extraction — council workflow) + Layer 5 (Scoring input)
|
| 421 |
+
**Priority**: 🟡 Medium — improves calibration
|
| 422 |
+
**Effort**: 1 week
|
| 423 |
+
|
| 424 |
+
---
|
| 425 |
+
|
| 426 |
+
## 3. Indirect Inspirations — Learn From These Approaches {#3-indirect-inspirations}
|
| 427 |
+
|
| 428 |
+
These aren't things we should build directly. They're philosophical and architectural lessons.
|
| 429 |
+
|
| 430 |
+
---
|
| 431 |
+
|
| 432 |
+
### 🟤 IN-1: PaperQA2's "Superhuman Benchmark" Philosophy
|
| 433 |
+
|
| 434 |
+
**Lesson**: PaperQA2 didn't just build a system — they proved it beats humans on specific, measurable tasks. They created the LitQA2 benchmark, ran their system against PhD-level scientists, and published the numbers.
|
| 435 |
+
|
| 436 |
+
**What we should learn**: We need to define OUR equivalent of LitQA2 — a specific task where we can measure: "Does our epistemic classification match expert human classification?" This requires:
|
| 437 |
+
1. 20-30 papers annotated by domain experts
|
| 438 |
+
2. Every claim labeled (Fact / Interpretation / Hypothesis) by at least 2 experts
|
| 439 |
+
3. Inter-annotator agreement measured
|
| 440 |
+
4. Our system evaluated against the same papers
|
| 441 |
+
|
| 442 |
+
**The goal isn't to beat humans** — it's to know WHERE we agree with humans and WHERE we disagree. The disagreements are the most interesting findings.
|
| 443 |
+
|
| 444 |
+
---
|
| 445 |
+
|
| 446 |
+
### 🟤 IN-2: KGX3's "Code Over AI" Philosophy
|
| 447 |
+
|
| 448 |
+
**Lesson**: KGX3 deliberately chose deterministic rules over stochastic AI for epistemic classification. Their paper argues that epistemic decisions should be REPRODUCIBLE — the same paper should always get the same classification. They achieved this by defining specific linguistic triggers with fixed activation thresholds.
|
| 449 |
+
|
| 450 |
+
**What we should learn**: We already share this philosophy ("AI provides components, code computes scores"). But we should go further. Every epistemic decision in our system should be decomposable into:
|
| 451 |
+
1. **AI-provided inputs** (what the model observed)
|
| 452 |
+
2. **Code-computed outputs** (what the formula calculated)
|
| 453 |
+
3. **Auditable reasoning** (why the formula gave this result)
|
| 454 |
+
|
| 455 |
+
If a researcher asks "why is this claim labeled Interpretation?", the answer should never be "because the AI said so." It should be: "Because the claim appeared in the Discussion section (0.75× modifier), contains the qualifier 'suggests' (-0.1 penalty), and the trigger-word analysis scored Interpretation at 0.6 vs Fact at 0.3."
|
| 456 |
+
|
| 457 |
+
---
|
| 458 |
+
|
| 459 |
+
### 🟤 IN-3: AgentSLR's "Speed × Quality" Proof of Concept
|
| 460 |
+
|
| 461 |
+
**Lesson**: AgentSLR proved that AI can do literature reviews at human quality with 58× speedup. This isn't theoretical — they applied it to 9 WHO-priority pathogens and published the comparison.
|
| 462 |
+
|
| 463 |
+
**What we should learn**: Speed matters for adoption. If our system takes 10 hours to process 100 papers, few researchers will use it. If it takes 20 minutes, everyone will. The architecture decisions we make now (local model size, batch processing, caching) directly affect adoption.
|
| 464 |
+
|
| 465 |
+
**Specific implication**: Consider processing papers in two passes:
|
| 466 |
+
- **Fast pass** (minutes): Lightweight extraction using trigger words + SciBERT. Gives researchers immediate, approximate results.
|
| 467 |
+
- **Deep pass** (hours): Full AI Council extraction with confidence scoring. Refines the fast-pass results.
|
| 468 |
+
|
| 469 |
+
This way, researchers get SOMETHING useful immediately and the system keeps improving in the background.
|
| 470 |
+
|
| 471 |
+
---
|
| 472 |
+
|
| 473 |
+
### 🟤 IN-4: Paper Circle's "Multi-Agent Specialization" Pattern
|
| 474 |
+
|
| 475 |
+
**Lesson**: Paper Circle assigns different agent roles based on CONTENT TYPE — one agent for concepts, one for methods, one for experiments. Our Council assigns roles based on FUNCTION — planner, extractor, critic, chairman. Both patterns work.
|
| 476 |
+
|
| 477 |
+
**What we should learn**: We should combine both. Our Council should have function-specialized roles (planner, extractor, critic, chairman) AND content-specialized routing (text goes to the language model, figures go to the VLM, tables go to the structured parser, equations go to Nougat).
|
| 478 |
+
|
| 479 |
+
The content router decides WHO processes each chunk. The Council decides HOW to interpret the results.
|
| 480 |
+
|
| 481 |
+
---
|
| 482 |
+
|
| 483 |
+
### 🟤 IN-5: FactReview's "Execution as Evidence" Insight
|
| 484 |
+
|
| 485 |
+
**Lesson**: FactReview verifies empirical claims by RUNNING CODE. If a paper says "our model achieves 95% accuracy," FactReview actually executes the code to check. This is a profound epistemic innovation — it adds a non-AI evidence source that grounds claims in physical reality.
|
| 486 |
+
|
| 487 |
+
**What we should learn**: Not all evidence is text. For papers that include code, data, or computational results, we should consider:
|
| 488 |
+
1. **Code availability check**: Does the paper link to a working repository? (Our Layer 1 already plans this)
|
| 489 |
+
2. **Reproducibility flag**: Has anyone replicated the results? (CrossRef + Semantic Scholar APIs)
|
| 490 |
+
3. **Data availability check**: Is the underlying data accessible? (Zenodo, Figshare, Dryad checks)
|
| 491 |
+
|
| 492 |
+
We can't execute arbitrary code (too dangerous), but we CAN check whether the infrastructure for verification EXISTS. A paper whose code is on GitHub, whose data is on Zenodo, and whose results have been replicated gets a higher evidence_quality score than a paper with none of these.
|
| 493 |
+
|
| 494 |
+
---
|
| 495 |
+
|
| 496 |
+
### 🟤 IN-6: ORKG's "Human + Machine" Knowledge Graph
|
| 497 |
+
|
| 498 |
+
**Lesson**: ORKG (Open Research Knowledge Graph) at orkg.org takes a different approach than every AI system. Instead of having AI build the knowledge graph, they have HUMAN RESEARCHERS create structured comparison tables. The result is smaller but much more reliable than any AI-generated graph.
|
| 499 |
+
|
| 500 |
+
**What we should learn**: Our "human support" philosophy should include a mechanism for researchers to contribute structured knowledge BACK to the system:
|
| 501 |
+
1. When a researcher corrects a claim label → that correction becomes training data
|
| 502 |
+
2. When a researcher manually adds a graph edge → that edge has maximum provenance (human-verified)
|
| 503 |
+
3. When a researcher creates a comparison table → that table becomes structured input for future claims
|
| 504 |
+
|
| 505 |
+
ORKG proves that human-contributed knowledge, even in small amounts, dramatically improves graph quality. Our system already has the proposal mechanism (agents propose, humans approve). We should extend this so that human corrections flow back into both the knowledge graph AND the training pipeline.
|
| 506 |
+
|
| 507 |
+
---
|
| 508 |
+
|
| 509 |
+
### 🟤 IN-7: CLUE's "Explain the Uncertainty" Philosophy
|
| 510 |
+
|
| 511 |
+
**Source system**: CLUE
|
| 512 |
+
**Paper**: [arxiv:2505.17855](https://arxiv.org/abs/2505.17855)
|
| 513 |
+
|
| 514 |
+
**Lesson**: CLUE doesn't just say "confidence: 0.6". It explains WHERE the uncertainty comes from: "There are 3 supporting papers and 1 contradicting paper. The contradiction is about the dosage (0.5mg vs 1.0mg), not about the overall finding." This is dramatically more useful than a bare number.
|
| 515 |
+
|
| 516 |
+
**What we should learn**: Our 3-score system (evidence quality, truth likelihood, qualifier strength) is already a form of uncertainty decomposition. But we should go further and generate a **plain-English explanation** for every composite score:
|
| 517 |
+
|
| 518 |
+
```
|
| 519 |
+
Confidence: 0.72
|
| 520 |
+
WHY: Evidence is strong (0.90) — the paper reports n=12 with p<0.001
|
| 521 |
+
and clear methodology. But one other paper in the knowledge graph
|
| 522 |
+
contradicts this finding using a different method (truth likelihood: 0.65).
|
| 523 |
+
Also, the claim uses hedging language ("may reduce") suggesting the
|
| 524 |
+
authors themselves aren't fully certain (qualifier strength: 0.60).
|
| 525 |
+
```
|
| 526 |
+
|
| 527 |
+
This explanation should be auto-generated from the scoring formula's components. No extra AI calls needed — just template the decomposition.
|
| 528 |
+
|
| 529 |
+
---
|
| 530 |
+
|
| 531 |
+
## 4. New Features Inspired by Prior Art {#4-new-features}
|
| 532 |
+
|
| 533 |
+
These are entirely new capabilities that don't exist in our current design, directly inspired by what we learned from other systems.
|
| 534 |
+
|
| 535 |
+
---
|
| 536 |
+
|
| 537 |
+
### 🆕 NF-1: Epistemic Velocity Tracking
|
| 538 |
+
|
| 539 |
+
**Inspired by**: CLAIRE's temporal analysis + PaperQA2's contradiction tracking
|
| 540 |
+
|
| 541 |
+
**What it is**: For every claim in the knowledge graph, track how its confidence has changed over time. Display this as a trend:
|
| 542 |
+
|
| 543 |
+
```
|
| 544 |
+
Claim: "Graphene FETs achieve LOD < 1 fM"
|
| 545 |
+
|
| 546 |
+
Confidence over time:
|
| 547 |
+
2022 ──── 0.50 ──── First reported, single paper
|
| 548 |
+
2023 ──── 0.65 ──── Replicated by 2 more labs
|
| 549 |
+
2024 ──── 0.80 ──── Meta-analysis confirms
|
| 550 |
+
2025 ──── 0.72 ──── One lab reports contradictory results
|
| 551 |
+
2026 ──── 0.75 ──── Contradiction explained by method difference
|
| 552 |
+
|
| 553 |
+
Status: STABLE (±0.05 over last 12 months)
|
| 554 |
+
Trend: Rising (0.50 → 0.75 over 4 years)
|
| 555 |
+
```
|
| 556 |
+
|
| 557 |
+
**Why it matters for truth-seeking**: A claim that has been steadily gaining confidence for 4 years is very different from a claim that keeps bouncing between 0.4 and 0.8. The TREND tells you more than the current number. Rising claims are being confirmed. Falling claims are being challenged. Volatile claims are actively contested — and therefore the most interesting for research.
|
| 558 |
+
|
| 559 |
+
**Implementation**: We already store timestamps on every claim and version history on canonical claims. Computing the velocity is just a query:
|
| 560 |
+
|
| 561 |
+
```python
|
| 562 |
+
def compute_epistemic_velocity(canonical_claim_id: str) -> dict:
|
| 563 |
+
versions = db.get_version_history(canonical_claim_id)
|
| 564 |
+
if len(versions) < 2:
|
| 565 |
+
return {"trend": "insufficient_data", "stability": "unknown"}
|
| 566 |
+
|
| 567 |
+
# Compute trend: slope of confidence over time
|
| 568 |
+
times = [(v["date"] - versions[0]["date"]).days for v in versions]
|
| 569 |
+
confidences = [v["confidence"] for v in versions]
|
| 570 |
+
slope = compute_linear_slope(times, confidences)
|
| 571 |
+
|
| 572 |
+
# Compute stability: standard deviation of last 3 versions
|
| 573 |
+
recent = confidences[-3:]
|
| 574 |
+
stability = compute_std(recent)
|
| 575 |
+
|
| 576 |
+
return {
|
| 577 |
+
"trend": "rising" if slope > 0.01 else "falling" if slope < -0.01 else "stable",
|
| 578 |
+
"stability": "stable" if stability < 0.05 else "volatile",
|
| 579 |
+
"current": confidences[-1],
|
| 580 |
+
"history": list(zip([v["date"] for v in versions], confidences)),
|
| 581 |
+
}
|
| 582 |
+
```
|
| 583 |
+
|
| 584 |
+
**Layer affected**: Layer 5 (Scoring — new temporal dimension)
|
| 585 |
+
**Priority**: 🟡 Medium — high value, low effort
|
| 586 |
+
**Effort**: 3-5 days
|
| 587 |
+
|
| 588 |
+
---
|
| 589 |
+
|
| 590 |
+
### 🆕 NF-2: Devil's Advocate Mode
|
| 591 |
+
|
| 592 |
+
**Inspired by**: CLAIRE's agentic contradiction detection + KGX3's challenge detection
|
| 593 |
+
|
| 594 |
+
**What it is**: A UI mode that actively CHALLENGES high-confidence claims:
|
| 595 |
+
|
| 596 |
+
For every claim with confidence > 0.8, the system automatically:
|
| 597 |
+
1. Searches the knowledge graph for the **strongest counter-evidence**
|
| 598 |
+
2. Finds the **nearest alternative explanation** (different epistemic label that could fit the same data)
|
| 599 |
+
3. Identifies what would need to be true **for the claim to be wrong**
|
| 600 |
+
|
| 601 |
+
Display:
|
| 602 |
+
```
|
| 603 |
+
📋 Claim: "Graphene FETs achieve LOD < 1 fM" (Confidence: 0.88)
|
| 604 |
+
|
| 605 |
+
😈 Devil's Advocate:
|
| 606 |
+
Counter-evidence: Park 2024 reports LOD of 5 fM using identical
|
| 607 |
+
materials but different buffer conditions (comparability: 0.6)
|
| 608 |
+
|
| 609 |
+
Alternative label: This could be an INTERPRETATION rather than a FACT
|
| 610 |
+
if the LOD calculation method (3σ/slope) is disputed — two papers in
|
| 611 |
+
the graph use different LOD calculation methods.
|
| 612 |
+
|
| 613 |
+
What would make this wrong: If the buffer conditions (10 mM PBS) are
|
| 614 |
+
critical to the result, the claim should have the qualifier
|
| 615 |
+
"in 10 mM PBS only" — which would reduce qualifier_strength by 0.1.
|
| 616 |
+
```
|
| 617 |
+
|
| 618 |
+
**Why it matters for truth-seeking**: The most dangerous state for a researcher is high confidence with hidden weaknesses. Devil's Advocate mode forces the system to ACTIVELY LOOK for reasons to doubt its own outputs. This is the essence of scientific skepticism.
|
| 619 |
+
|
| 620 |
+
**Layer affected**: Cross-cutting (UI + Layer 4 + Layer 5)
|
| 621 |
+
**Priority**: 🟡 Medium — high value for truth-seeking
|
| 622 |
+
**Effort**: 1-2 weeks
|
| 623 |
+
|
| 624 |
+
---
|
| 625 |
+
|
| 626 |
+
### 🆕 NF-3: Epistemic Provenance Levels (Human Verification Tracking)
|
| 627 |
+
|
| 628 |
+
**Inspired by**: ORKG's human contribution model + Paper Circle's verification status
|
| 629 |
+
|
| 630 |
+
**What it is**: Every claim in the knowledge graph gets a human-verification level:
|
| 631 |
+
|
| 632 |
+
| Level | Icon | Meaning | How It Happens |
|
| 633 |
+
|-------|------|---------|---------------|
|
| 634 |
+
| 0 | 🤖 | Machine-extracted, unreviewed | Default when claim is first extracted |
|
| 635 |
+
| 1 | 🟡 | Machine-extracted, human-spot-checked | Researcher saw it in the dashboard, didn't flag an error |
|
| 636 |
+
| 2 | 🟢 | Human-verified claim text AND label | Researcher explicitly confirmed text + Fact/Interpretation/Hypothesis |
|
| 637 |
+
| 3 | ⭐ | Expert-verified with domain knowledge | Domain expert reviewed with full context |
|
| 638 |
+
| 4 | 📄 | Published / peer-reviewed | Claim appears in a peer-reviewed paper's verified dataset |
|
| 639 |
+
|
| 640 |
+
**Rules**:
|
| 641 |
+
- Level 0 claims CANNOT be cited in exports without a warning banner
|
| 642 |
+
- Level 0 claims CANNOT generate "supports" edges in the knowledge graph (they can only be the TARGET of edges, not the SOURCE)
|
| 643 |
+
- Level 2+ claims can be used as training data for the next model version
|
| 644 |
+
- Level 3+ claims become part of the gold standard evaluation dataset
|
| 645 |
+
|
| 646 |
+
**Why it matters for truth-seeking**: A system that tells you "this claim was extracted 30 seconds ago and no human has looked at it" is much more honest than one that presents all claims with equal visual weight. The verification level IS the epistemic honesty.
|
| 647 |
+
|
| 648 |
+
**Layer affected**: Cross-cutting (all layers + UI)
|
| 649 |
+
**Priority**: 🟡 Medium — fundamental for trust
|
| 650 |
+
**Effort**: 1 week
|
| 651 |
+
|
| 652 |
+
---
|
| 653 |
+
|
| 654 |
+
### 🆕 NF-4: Confidence Decomposition Display
|
| 655 |
+
|
| 656 |
+
**Inspired by**: CLUE's uncertainty explanation + our own 3-score system
|
| 657 |
+
|
| 658 |
+
**What it is**: When showing a claim's confidence, display the full decomposition visually:
|
| 659 |
+
|
| 660 |
+
```
|
| 661 |
+
Claim: "The treatment reduced tumor size by 40%"
|
| 662 |
+
Epistemic Tag: Fact
|
| 663 |
+
Composite Confidence: 0.72
|
| 664 |
+
|
| 665 |
+
Evidence Quality: 0.90 ████████████████████░░
|
| 666 |
+
(n=12, p<0.001, Results section, T1 journal)
|
| 667 |
+
|
| 668 |
+
Truth Likelihood: 0.65 █████████████████░░░░░
|
| 669 |
+
(one contradicting study: Kim 2024 found only 15% reduction)
|
| 670 |
+
|
| 671 |
+
Qualifier Strength: 0.60 ████████████████░░░░░░
|
| 672 |
+
(hedged: "in the murine model", "under these conditions")
|
| 673 |
+
────────────────────────────
|
| 674 |
+
Composite: 0.72 ████████████████████░░
|
| 675 |
+
|
| 676 |
+
⚠️ The truth likelihood is dragged down by Kim 2024.
|
| 677 |
+
Click to see the conflict in the Courtroom UI.
|
| 678 |
+
```
|
| 679 |
+
|
| 680 |
+
**Why it matters for truth-seeking**: The number 0.72 by itself is meaningless. The decomposition tells the researcher WHAT to investigate: "The evidence is strong, but there's a contradicting study, and the authors used hedging language." Each dimension points to a different action.
|
| 681 |
+
|
| 682 |
+
**Layer affected**: Layer 7 (UI — Obsidian export + Gradio display)
|
| 683 |
+
**Priority**: 🟡 Medium — already in our design, needs implementation
|
| 684 |
+
**Effort**: 3-5 days (UI components)
|
| 685 |
+
|
| 686 |
+
---
|
| 687 |
+
|
| 688 |
+
## 5. Integration Map — Where Each Inspiration Fits {#5-integration-map}
|
| 689 |
+
|
| 690 |
+
```
|
| 691 |
+
PDF Bundle arrives
|
| 692 |
+
│
|
| 693 |
+
▼
|
| 694 |
+
LAYER 0: Structural Ingestion
|
| 695 |
+
├── 🔵 DA-4: Nougat for equations
|
| 696 |
+
├── (Marker + GROBID already planned)
|
| 697 |
+
└── Output: structured regions with bbox
|
| 698 |
+
│
|
| 699 |
+
▼
|
| 700 |
+
LAYER 1: Entity Resolution
|
| 701 |
+
├── 🟤 IN-5: FactReview's code/data availability checks
|
| 702 |
+
└── (existing citation + retraction checks)
|
| 703 |
+
│
|
| 704 |
+
▼
|
| 705 |
+
LAYER 2: Qualified Extraction
|
| 706 |
+
├── 🟣 AD-1: PaperQA2's RCS → Pre-Extraction Filter (before Council)
|
| 707 |
+
├── 🟣 AD-7: CritiCal's Critique → Self-Critique step (during Council)
|
| 708 |
+
├── 🟣 AD-3: KGX3's Language Filters → Epistemic Trigger Words (validation)
|
| 709 |
+
├── 🟣 AD-4: Paper Circle's Coverage Checker → Completeness Auditor (after Council)
|
| 710 |
+
├── 🟣 AD-5: PaperQA2's Refuse → Low Confidence Quarantine (output filtering)
|
| 711 |
+
└── 🆕 NF-3: Epistemic Provenance Levels (applied to every claim)
|
| 712 |
+
│
|
| 713 |
+
▼
|
| 714 |
+
LAYER 3: Canonicalization
|
| 715 |
+
├── 🔵 DA-1: SPECTER2 for claim embeddings (replaces word overlap)
|
| 716 |
+
└── (existing temporal versioning)
|
| 717 |
+
│
|
| 718 |
+
▼
|
| 719 |
+
LAYER 4: Knowledge Graph
|
| 720 |
+
├── 🔵 DA-5: SciBERT-NLI as fast contradiction pre-filter
|
| 721 |
+
├── 🟣 AD-2: FactReview's Dual Evidence → Cross-Reference Verification
|
| 722 |
+
├── 🟣 AD-6: CLAIRE's Investigation Loop → Conflict Investigation Protocol
|
| 723 |
+
└── 🆕 NF-2: Devil's Advocate Mode (cross-cutting with UI)
|
| 724 |
+
│
|
| 725 |
+
▼
|
| 726 |
+
LAYER 5: Calibrated Scoring
|
| 727 |
+
├── 🆕 NF-1: Epistemic Velocity Tracking (temporal confidence trends)
|
| 728 |
+
├── 🆕 NF-4: Confidence Decomposition Display
|
| 729 |
+
└── 🟤 IN-7: CLUE's uncertainty explanation → auto-generated score explanations
|
| 730 |
+
│
|
| 731 |
+
▼
|
| 732 |
+
LAYER 6: Evaluation
|
| 733 |
+
├── 🔵 DA-2: SciFact as evaluation benchmark
|
| 734 |
+
├── 🔵 DA-3: SciRIFF for training data
|
| 735 |
+
└── 🟤 IN-1: PaperQA2's superhuman benchmark philosophy → build our own epistemic benchmark
|
| 736 |
+
│
|
| 737 |
+
▼
|
| 738 |
+
LAYER 7: Provenance & Export
|
| 739 |
+
└── 🟤 IN-6: ORKG's human contribution model → corrections flow back to training
|
| 740 |
+
```
|
| 741 |
+
|
| 742 |
+
---
|
| 743 |
+
|
| 744 |
+
## 6. Priority Execution Order {#6-priority-order}
|
| 745 |
+
|
| 746 |
+
### Phase I: Foundations (Do These First — Everything Else Depends on Them)
|
| 747 |
+
|
| 748 |
+
| # | Item | Type | Source System | Effort | Impact |
|
| 749 |
+
|---|------|------|---------------|--------|--------|
|
| 750 |
+
| 1 | DA-1: SPECTER2 for embeddings | 🔵 Direct | AllenAI | 1-2 days | Fixes deduplication completely |
|
| 751 |
+
| 2 | DA-2: SciFact benchmark | 🔵 Direct | AllenAI | 1 day | Gives us quality measurement |
|
| 752 |
+
| 3 | DA-3: SciRIFF training data | 🔵 Direct | AllenAI | 2-3 days | 72× more training examples |
|
| 753 |
+
| 4 | DA-4: Nougat integration | 🔵 Direct | Meta | 2-3 days | Fixes equation parsing |
|
| 754 |
+
|
| 755 |
+
### Phase II: Quality Improvements (Build These Next)
|
| 756 |
+
|
| 757 |
+
| # | Item | Type | Source System | Effort | Impact |
|
| 758 |
+
|---|------|------|---------------|--------|--------|
|
| 759 |
+
| 5 | DA-5: SciBERT-NLI pre-filter | 🔵 Direct | AllenAI + Sarti | 1-2 days | Speeds up conflict detection 100× |
|
| 760 |
+
| 6 | AD-1: Pre-Extraction Filter (RCS) | 🟣 Adapt | PaperQA2 | 1 week | Reduces noise in extraction |
|
| 761 |
+
| 7 | AD-3: Epistemic Trigger Words | 🟣 Adapt | KGX3 | 1 week | Code-based epistemic validation |
|
| 762 |
+
| 8 | AD-5: Low Confidence Quarantine | 🟣 Adapt | PaperQA2 | 3-5 days | Prevents false confidence |
|
| 763 |
+
|
| 764 |
+
### Phase III: Deep Improvements (Build These When Core Is Stable)
|
| 765 |
+
|
| 766 |
+
| # | Item | Type | Source System | Effort | Impact |
|
| 767 |
+
|---|------|------|---------------|--------|--------|
|
| 768 |
+
| 9 | AD-2: Cross-Reference Verification | 🟣 Adapt | FactReview | 1-2 weeks | Reduces hallucination |
|
| 769 |
+
| 10 | AD-4: Completeness Auditor | 🟣 Adapt | Paper Circle | 1 week | Prevents silent omission |
|
| 770 |
+
| 11 | AD-7: Self-Critique step | 🟣 Adapt | CritiCal | 1 week | Improves calibration |
|
| 771 |
+
| 12 | NF-3: Epistemic Provenance Levels | 🆕 New | ORKG + Paper Circle | 1 week | Human verification tracking |
|
| 772 |
+
|
| 773 |
+
### Phase IV: Advanced Features (Build These for PhD Year 2+)
|
| 774 |
+
|
| 775 |
+
| # | Item | Type | Source System | Effort | Impact |
|
| 776 |
+
|---|------|------|---------------|--------|--------|
|
| 777 |
+
| 13 | AD-6: Conflict Investigation Protocol | 🟣 Adapt | CLAIRE | 2-3 weeks | Thorough contradiction analysis |
|
| 778 |
+
| 14 | NF-1: Epistemic Velocity | 🆕 New | CLAIRE + PaperQA2 | 3-5 days | Temporal confidence trends |
|
| 779 |
+
| 15 | NF-2: Devil's Advocate Mode | 🆕 New | CLAIRE + KGX3 | 1-2 weeks | Active skepticism |
|
| 780 |
+
| 16 | NF-4: Confidence Decomposition Display | 🆕 New | CLUE | 3-5 days | Transparent scoring |
|
| 781 |
+
|
| 782 |
+
### Total Estimated Effort: ~12-16 weeks (spread across PhD timeline)
|
| 783 |
+
|
| 784 |
+
---
|
| 785 |
+
|
| 786 |
+
## Summary: The Steal Sheet
|
| 787 |
+
|
| 788 |
+
| What We're Stealing | From Whom | Why It's Fair |
|
| 789 |
+
|---------------------|-----------|---------------|
|
| 790 |
+
| SPECTER2 embeddings | AllenAI | Open-source, Apache 2.0 |
|
| 791 |
+
| SciFact benchmark | AllenAI | Open-source, CC-BY |
|
| 792 |
+
| SciRIFF training data | AllenAI | Open-source, ODC-BY |
|
| 793 |
+
| Nougat PDF parser | Meta Research | Open-source, MIT |
|
| 794 |
+
| SciBERT-NLI model | Gabriele Sarti | Open-source |
|
| 795 |
+
| RCS pattern | PaperQA2 | Published technique, not code |
|
| 796 |
+
| Language filter approach | KGX3 | Published methodology |
|
| 797 |
+
| Coverage checker pattern | Paper Circle | Published architecture |
|
| 798 |
+
| Refuse-to-answer pattern | PaperQA2 | Published behavior |
|
| 799 |
+
| Investigation loop pattern | CLAIRE | Published methodology |
|
| 800 |
+
| Critique calibration technique | CritiCal | Published technique |
|
| 801 |
+
| Human contribution philosophy | ORKG | Published approach |
|
| 802 |
+
| Uncertainty explanation approach | CLUE | Published philosophy |
|
| 803 |
+
|
| 804 |
+
**Every adoption is either open-source with permissive licensing or a published technique (not code).** We're standing on the shoulders of giants — and giving them credit.
|
| 805 |
+
|
| 806 |
+
---
|
| 807 |
+
|
| 808 |
+
*Document compiled 2026-04-23.*
|
| 809 |
+
*All source systems, papers, and resources have been verified as available.*
|
| 810 |
+
*This document is a living roadmap — update as new systems appear.*
|