Beginner Lecturer Research Grant 2026 · TRL 3 · proof of concept
The evidence on palliative drug side effects is already in the literature.It is the form it takes that cannot be used.
Scattered across thousands of articles, written as free-running prose, never arranged so a nurse can read it while drawing up a care plan. This model reads them one at a time and assembles a map that is measurable and traceable back to the sentence it came from.
The Simulation page runs that model for real — not a recording, not an animation. Upload one article and every stage opens with its own numbers.
0
articles in
palliative oncology PDFs
0
passed the relevance filter
142 dropped: not about palliative care or drug side effects
0
operational
precision 0.94
0
candidate
precision 0.43
01 What gets thrown away first
This model rejected 1,223 sentences and accepted 919
Nearly every demonstration of machine learning opens with its results. This one opens with its discard pile, because that is where the largest number is. Each red dot is one sentence the meaning filters refused — a sentence naming a drug and a side effect side by side, examined, and then not used.
1,223 · 919
1,223 dots · one dot, one rejected sentence
02 Why they went
Four reasons, recorded by the pipeline itself
Rejection is not one decision but four separate checks. The largest is sentences that name both without stating any cause at all; next are sentences naming the effect as the reason the drug was given.
NO_CAUSAL_SIGNAL 334 · NON_ADVERSE_CONTEXT 321 · DEPENDENCY_NOT_FOUND_FALLBACK_USED 290 · DISTANCE_EXCEEDED 278
NO_CAUSAL_SIGNAL334NON_ADVERSE_CONTEXT321DEPENDENCY_NOT_FOUND_FALLBACK_USED290DISTANCE_EXCEEDED278- All four counts are recorded against sentences, not against drug–effect pairs. So no relation on the map can be pointed to as the casualty of any one code.
03 What survived
The remainder, beside what was discarded
Two fields at the same scale. Left, rejected; right, accepted by the advanced path. The baseline path — no meaning filters — accepts 1,782 pairs, and that gap is the study's subject: precision 0.94 against 0.43.
1,782 ‖ 919
Rejected
1,223
Accepted by the advanced path
919
04 Back a step — where the sentences came from
137,906 sentences, 92,713 of them carrying a causal signal
The 1,223 and the 919 came from here. The whole corpus was cut into sentences, then filtered for those carrying a marker of cause. The field beside this does not draw all of them — it cannot, and pretending otherwise would be an unnecessary lie.
137,906 → 92,713
1 dot = 100 sentences · blue = carries a causal signal
05 Back again — where the sentences began
405 articles, 263 through the domain filter
It began simply: a pile of PDFs. The domain filter looks for terms of cancer, opioids, adverse effects and palliative care, then drops the 142 articles that do not qualify. What is measured is topical relevance, not the quality of the research.
405 → 263 · 142
263 kept · 142 dropped · grey means dropped
06 Forward — two branches, not one funnel
The 76 operational and the 160 candidates come from different paths
This is where the pipeline forks, and its two outputs must not be read as the same thing. The advanced branch filters sentence meaning and then requires a pair to appear at least twice — that is what produces the 76. The baseline branch filters no meaning at all; what it leaves is kept as candidates for expert review. The two sets share not a single pair.
151 → 76 ‖ 236 → 160
Advanced branch — meaning filtered
The frequency gate of ≥2 cuts 151 down to 76.
Baseline branch — no meaning filter
160 is what remains once the 76 operational are taken out — still holding clinically inverted relations, such as naloxone with respiratory depression when naloxone is the antidote.
The 160 stays on screen because the contrast between two levels of evidence is the argument. What is withheld is which candidate pairs they are, not how many.
07 The map — and its error
76 relations, and how often this model is wrong
Nineteen drugs, eighteen side effects, seventy-six lines. Then, unasked, its confidence interval. Almost every demonstration hides this part; putting it at the end of the story is why this site is a research instrument and not a brochure.
76 · 19 · 18
Measured against human annotation
F1 0.821
0.66795% confidence interval0.939
Precision 0.941 · recall 0.727
The four cells that produced that figure
- Found, correctly
- 16
- Found, wrongly
- 1
- Missed
- 6
- Correctly left alone
- 37
F1 is computed from 23 observations — the first three cells. The fourth, 37 correct rejections, contributes nothing to F1 at all.
The unit is a sentence-level annotation decision, not a drug–effect pair: the gold set samples sentences, and the notebook scores this row per sentence. The scope is adverse drug effects, which is what this pipeline claims — not everything in the corpus.
The core argument
Why two numbers, not one
Operational — 76 pairs
Already through the sentence-meaning filters and evaluated against a pharmacist's annotations. Precision 0.94 within the drug side-effect scope.
Candidate — 160 pairs
Raw co-occurrence, unfiltered. Precision 0.43. It still contains relations that are clinically inverted — naloxone with respiratory depression, when naloxone is the antidote. Kept precisely so that an expert can review them.
That gap, 0.94 against 0.43, is why the two are reported separately, and why the identities of the candidate pairs are not published on this site before an expert has judged them.
Without uploading anything
Six sentences that show how the model decides
Each one a real corpus sentence, run beforehand through the same pipeline. The number on the left is the result without meaning filters, the one on the right is after them — the gap between them is the point.
A relation that is accepted
3 baseline3 advanced
The effect belongs to another drug
3 baseline1 advanced
The drug is the treatment
1 baseline0 advanced
A sentence that denies it
1 baseline1 advanced
A table flattened into prose
25 baseline0 advanced
Appearing together without stating a cause
2 baseline0 advanced