Back to Blog
AI/ML

Knowledge Graphs and Scientific Discovery: Connecting the Dots in Research

What a knowledge graph of research papers can and cannot do, what ours actually holds, and why its hypotheses come without a confidence score.

Ankita Choudhary
December 12, 2025
18 min read

Nobody is reading it all

PubMed took in 1,567,478 citations in fiscal 2023, according to the National Library of Medicine's own production statistics. That is roughly 4,300 a day, every day, in biomedicine alone. Annual intake has sat between about 1.5 and 1.75 million since 2020.

Put a number on what that means for a person. A researcher who read one paper an hour, eight hours a day, without weekends or holidays, would finish about 2,900 in a year. That is under two tenths of one percent of a single year's additions to a single database.

So the familiar complaint that "you can't keep up with the literature" is not a complaint about effort or time management. Keeping up has been arithmetically impossible for a long time, and the interesting question is what you build once you accept that.

This creates a paradox. We have more knowledge than ever, and it is increasingly difficult to find relevant information and make connections across disciplines.

PubMed FY20201,514,199PubMed FY20211,733,089PubMed FY20221,714,780PubMed FY20231,567,478One reader2,920Citations added per fiscal year, from NLM's MEDLINE/PubMed production statistics. A researcher typically readsabout 250 papers a year.
PubMed's annual intake against what one person can read

What is a Knowledge Graph?

A knowledge graph represents information as a network of entities (nodes) and relationships (edges). Unlike traditional databases, knowledge graphs capture semantic meaning and enable complex queries across interconnected data.

encodesassociated_withinteracts_withinvolved_intreated_bytargetsparticipates_inBRCA1GeneBRCA1ProteinBreast cancerDiseaseRAD51ProteinOlaparibDrugDNA repairProcessPARP1Protein
A small biomedical knowledge graph around BRCA1, as an illustration

What our graph actually holds

The graph behind BioAgents is narrower than that picture, and it is worth being exact about it. It is a store of published papers. Each paper is one named graph in an Oxigraph triple store, named by the paper's DOI, and holds its title, abstract, date, venue, authors, keywords, subject terms and sections. The vocabulary is bibliographic, from Dublin Core, schema.org, FOAF and the SPAR ontologies FaBiO, CiTO and DEO. The papers arrive as curated JSON-LD records, one per DOI.

It has no gene, protein, disease or drug nodes, and no edges between entities. Nothing extracts triples from the papers researchers upload. A paper registered on the platform goes into a separate knowledge base instead, where it is chunked and embedded for similarity search, and its record is filled in from the graph when its DOI is there.

SourcesGraph (Oxigraph)Access through the APIJSON-LD paper recordsone file per DOILoaderJSON-LD to N-Quadsone named graph per DOIPaper graphsdcterms, schema.org, foafHypothesis graphgenerated, with sourcesSPARQL + Graph Storequery and insert endpointstyped queries onlyTyped searchesconcept, author, DOIQuestion pipeline/bioagents/kg/askPaper enrichmentregistered papers by DOI
How the knowledge graph is built and reached

Asking it

Nobody writes SPARQL against the graph. The API offers typed searches, and the plugin builds every query from those typed inputs, so nothing a caller types becomes query text.

bash
curl "https://api.ekayana.io/api/bioagents/kg/papers?concepts=crispr,neurodegeneration&limit=8&order=recent" \
  -H "Authorization: Bearer $TOKEN"

A concept matches a paper's subject terms, keywords, title or abstract, and an author search matches on the surname. For a question in plain English, POST /api/bioagents/kg/ask lets the agent's text model plan the searches and write a synthesis that cites the papers it used.

The one place the platform does resolve a biological name to an identifier is protein structure. GET /api/bioagents/structure/resolve?q=BRCA1&taxon=9606 returns the top reviewed UniProt entry for the name, P38398 for human BRCA1, and the structure routes take that accession on to AlphaFold DB, AlphaMissense and 3D-Beacons.

Where DIDs come in

Graph nodes are not DIDs. Provenance inside the graph is the named graph, so every statement is filed under the DOI of the paper it came from. DIDs come in at the edge. A paper a researcher registers gets a DID, and the platform's record ties that DID to the file's CID and to the paper's DOI. The DOI is the join, so an answer's citations lead back through the DOI to a registered record and the file behind it.

Hypothesis generation, and what we shipped

The obvious next move is to stop using the graph for retrieval and start using it to propose things nobody has written down. Find entities two or three hops apart with no direct edge between them, and surface the gap as a candidate.

The idea is not ours and it is not new. Don Swanson did it by hand in 1986, reading two literatures that had essentially no citations between them, one on Raynaud's syndrome and one on dietary fish oil, and noticing that fish oil was reported to lower blood viscosity, reduce platelet aggregability and inhibit vascular reactivity, while Raynaud's patients were independently characterised by exactly those three things. Nobody had put the two halves together because nobody was reading both.

A double blind trial three years later found fish oil did improve cold tolerance in patients with primary Raynaud's, though not in secondary cases. The field that grew out of this is now called literature based discovery, and its standard formalisation, where A relates to B in one literature, B to C in another, and A to C is proposed and untested, is a direct description of what Swanson did by reading.

What has not happened is a version of it that works reliably. The difficulty is not finding candidate gaps. A graph query does that in milliseconds and returns far too many. The difficulty is that "these two things are not connected in the literature" has many boring explanations. Nobody has looked, or the connection is obvious to practitioners and therefore unpublished, the two fields use different words for the same object, or one of the extracted edges was simply wrong. Ranking by "novelty" mostly surfaces extraction errors, because a spurious edge is by construction novel.

What we shipped is deliberately modest. When a question asks for one, the question pipeline hands the model up to twelve of the papers it retrieved, each as a title and the start of its abstract, and the model proposes a single connection with its rationale and a way to test it. Only DOIs the model was actually shown are kept as sources. The hypothesis is stored in a graph of its own, and GET /api/bioagents/kg/hypotheses lists it later. There is no confidence score and no ranking by novelty, because neither would mean anything. A stored hypothesis is a prompt for a researcher, attached to the papers that suggested it.

Where the graph earns its keep today is narrower and duller. It finds the papers that mention the concepts you give it, which is retrieval, and which works.

(Swanson, "Fish Oil, Raynaud's Syndrome, and Undiscovered Public Knowledge", Perspectives in Biology and Medicine 30(1):7-18, 1986. DiGiacomo, Kremer & Shah, American Journal of Medicine 86(2):158-164, 1989.)

Where this leaves us

A knowledge graph does not discover anything. It makes certain questions cheap that were previously expensive. Which papers connect these two proteins, what does this compound touch three hops out, and has anyone linked this gene to that phenotype. Cheap questions get asked more often. That is the entire mechanism, and it is worth stating in those terms rather than as acceleration of scientific progress.

The part that decides whether any of it is usable is provenance. An extracted edge is a claim made by a model about a sentence in a paper, and it is sometimes wrong. A graph that records which paper each edge came from, and which extraction run produced it, lets a reader check the claim and lets its maintainers retract edges when a model turns out to have been systematically confused. A graph that records only the edges is a pile of assertions with no way to audit them, which is worse than useless when the assertions are biomedical. Ours avoids the problem by holding no extracted edges at all, and by filing every statement under the DOI it came from.

That is the argument for pinning entities to resolvable identifiers and extractions to content addressed inputs. Not that it makes discovery trustworthy. It makes disagreement possible, which is a lower bar and a much more useful one.


Further reading: Oxigraph, SPAR Ontologies, SPARQL Query Language

Ready to Get Started?

Explore our documentation to learn how to integrate Ekayana into your research workflow.