Diaspore

All documents · source file docs/reports/2026-11-09-extraction-use-report.md · changed 2026-11-10 · sha256 18818e00c868

What I did with 202,638 paper extractions after the model test failed

2026-11-09. Plan: docs/plans/2026-11-09-extraction-use-plan.md. Everything here ran on this machine, at no API cost, and nothing was pushed.

1. The short version

2. What I decided and why

OptionVerdictReason
Back up and load the dataDone firstUnblocks everything, costs nothing.
Search and profile tool (Science Lens)PrimaryIts value is retrieval and structure. Accuracy can be measured now. It ships whatever any backtest shows.
Company-stage model on past labelsCutEvery company label from 2016 to 2026-03 already chose v2, v3 and v4. A "win" there would be a search result, not evidence.
Freeze v4 + extraction for labsCutThe same features just failed for labs.
Forward test on the 2026-03-31 cohortsKept as upsideThe only labels nothing has used. Small, and it reads in 2028.
Post about the null aloneFolded in hereNobody uses a null. Section 6 reports it.

Success and the stop rule were written before any build step. The stop rule (claims supported below 80%) did not fire.

3. What I built

  1. A backup. data/backups/diaspore_extractions-2026-11-09.db.zst, 197 MB, verified. It is on the same disk as the original.
  2. The load. The extractions are now in each panel database's extractions table, with as_of_date = the paper's publication date: 43,551 rows (main, 2014 panel), 51,394 (2019), 96,240 (2021), 92,041 (live 2025). That is all 202,638 distinct papers. New columns as_of_date, output_type and source_id are added by db.migrate; db/schema.sql is untouched.
  3. The Science Lens (src/diaspore/lens.py). It answers three questions as of any date:
    • Search: which labs have work on a topic, with what evidence.
    • Lab profile: what one lab's extracted papers claim, in what model system, with what effect and what stated limits.
    • Company profile: the science of a company's founding labs. This is the "feed in a target" use.
    • It has a command line, three MCP tools (lens_search, lens_lab, lens_company) and a Markdown brief. Every dated row passes through diaspore.backtest.gate. Every output prints the extraction model, the prompt version, "no human has verified" and the measured accuracy.
  4. A forward test. docs/prospective/lens-ladder.frozen.json, with its pre-registration.

Try it:

PYTHONPATH=src ~/.venvs/diaspore-sk122/bin/python -m diaspore.lens brief "KRAS inhibitor" --as-of 2025-12-31 --types product

Three sample briefs are in data/processed/lens/. They are not committed, because they pair named PIs with name-matched companies and some of those matches are wrong.

4. Results, with baselines

Extraction accuracy (200 fresh papers, two AI readers, both must agree)

CheckShare correct95% intervalThreshold set in advance
Claim supported by the abstract97.9%93.6% to 99.3%≥ 95%, met
Paper type right96.9%92.2% to 98.8%≥ 85%, met
Model system right94.9%89.6% to 97.6%≥ 85%, met
Scale right97.4%92.9% to 99.1%none
Effect numbers supported98.6%92.1% to 99.8%none
Limitations supported93.1%85.4% to 96.8%none

Across all 202,638 extractions, 99.3% of the 637,539 quoted numbers appear verbatim in the source text. Detail: docs/methodology/lens-accuracy.md.

Search (20 queries fixed in advance, 347 blind judgments, one run)

ArmPrecision at 10Relevant labs in top 10
Titles only (what the database could do before)0.603.1
Title and abstract keyword search0.585.5
Lens: same search, product-directed papers only0.868.0

The Lens beat keyword search on 15 queries, tied on 4 and lost on none. One query ("wearable glucose biosensor") found nothing in any arm. Detail: docs/methodology/lens-search-eval.md.

Forward test (no result yet)

A fixed, unfitted "evidence ladder" score for companies with a known founding lab, frozen on the 2026-03-31 cohorts: 109 of 871 (S1), 231 of 783 (S2), 144 of 391 (S3) companies scored. It reads once, on or after 2028-09-30, against v4, random, the rubrics and the plain-LLM ranking on the same rows. I expect about 40 events, so only a large effect can show.

5. How a skeptical investor should attack this

  1. "AI graded AI." The extractor, the readers and the judge are all Claude models. They can share blind spots. A human spot check of 20 to 30 items is the cheapest fix and is on the owner queue.
  2. "The search test is partly circular." The judge counted a lab as relevant only if its work was product-directed, and the filter selects papers the extractor called product-directed. The result shows two models agree on reading abstracts. It does not show the labs are good investments.
  3. "Three abstracts is not a lab." Correct. The corpus is each lab's three most recent last-author papers at four year-ends, and 32% of papers had no abstract. A lab's key paper can be missing.
  4. "Your company links are name matches." Correct. Lab-to-company links come from officer names on SEC Form D filings. The first sample brief links a well-known immunology lab to an unrelated LLC. The Lens labels every link "possible" with its match confidence. This is the weakest part of the company profile.
  5. "Human evidence is mostly clinicians." Many "therapeutic candidate, human" papers are clinical studies of existing drugs, not spin-out science. The evidence level describes the paper, not its novelty.
  6. "It needs every query word." There are no synonyms. Odd phrasing finds nothing.
  7. "None of this predicts anything." Correct, and the report does not claim it does.

6. What failed

7. Checks by independent agents

8. What is left, and what needs you

9. Addendum, 2026-11-10: fixes after the owner read a brief

Search ranking and filters did not change, so the measured precision still describes the tool.

For the science pipeline session: call lens.search_labs, lens.lab_science and lens.company_science. New keys since the first version: freshness, evidence_caveat, linked_companies[].basis, papers[].meeting_abstract. Placeholder fields arrive as null.