Truth estimation and research search
An API that scores how likely a statement is to be true, using a research corpus, and shows its evidence.
- Organisation
- Spiritual Data / Neodocto (US nonprofit, remote)
- My role
- Senior Analytics Developer
- When
- 2023 to 2025
- Stack
- Python, NLP, Machine learning, Semantic search
Problem statement
The organisation's research lived in thousands of accounts and papers. Researchers needed to know what the evidence says about a claim, and find related work, without reading everything.
Objectives & goals
- Score a statement against the corpus
- Show which studies moved the score
- Classify incoming accounts and papers
- Recommend related research
Process
- DiscoverWorked with researchers on the questions they asked most.
- DefineEvidence weighting by study design, peer review and sample size.
- BuildIngestion and NLP classification pipeline, truth-estimation API, semantic search and recommendations, executive dashboards.
- ProveChecked scores against claims researchers had already assessed.
Who it's for
Checks a claim and reads the evidence.
Follows the research through dashboards.
Challenges
- A single case report shouldn't outweigh a large study
- Negated findings ("did not improve") flip the meaning
- When there's no evidence, the answer must say so
What I built
Log-odds from a 50% prior, weighted by design, peer review and sample size.
Every study's stance, relevance and contribution.
Find studies by meaning, not keywords.
Recommendations by similarity.
Flow
- Statement
- Retrieve studies
- Detect stance
- Weight by quality
- Combine log-odds
- Score + evidence
Output
{"statement": "Daily coffee intake improves long-term memory performance",
"probability": 0.04, "verdict": "Likely false",
"evidence": [{"id": "S6", "stance": "contradicts", "weight": 1.0, ...}]}Results
Tools & languages
The code
Retrieval, stance, evidence weighting and a JSON API on the standard library. 5 tests.
The repository is private. I'm happy to share it with a hiring team or walk you through it on a call.
Samples are written with synthetic data. No client code or client data is used.