wiki-query
PApaperclipai/paperclip102k近 7 天新增 3,122 个 star
Score an OpenMed clinical or biomedical NER model against a user-supplied gold corpus with entity-level precision, recall, and F1, then break errors down per label. Use when the user wants a seqeval-style scorecard, strict vs partial (relaxed) span matching, a per-label confusion matrix, false-negative / false-positive examples, or to debug why a model misses entities. Trigger on "evaluate NER", "entity-level F1", "seqeval", "precision recall F1", "confusion matrix", "error analysis", "strict vs partial match", or "score against gold" in an OpenMed context. The gold corpus is user-supplied; OpenMed bundles no i2b2/n2c2/MIMIC data.
This skill produces an honest entity-level scorecard for an OpenMed NER model: precision / recall / F1 plus a per-label error breakdown. It scores spans, not tokens, because clinical entities are multi-token ("type 2 diabetes mellitus") and token-level accuracy hides boundary errors. Reported numbers are entity-level in the seqeval tradition (CoNLL-2000 / SemEval-2013 families).
For PHI de-id specifically, gate on leakage with evaluating-with-leakage-gates
instead of (or in addition to) F1.
| Mode | Counts a hit when… | Use for |
|---|---|---|
| Strict / exact | predicted span boundaries and label match gold exactly | release scoring, boundary-sensitive tasks |
| Partial / relaxed | predicted span overlaps gold with the right label | recall-oriented triage, tokenizer-mismatch tolerance |
OpenMed exposes both: compute_exact_span_f1 (strict) and
compute_relaxed_span_f1 (partial), with the full bundle in
compute_metrics_bundle.
Run a model over a user-supplied gold fixtures file and print a scorecard:
from openmed.eval import run_suite, error_report
# Fixtures: JSON list of {"id", "text", "gold_spans": [{start, end, label}, ...]}
report = run_suite(
"eval/gold/clinical_ner.json", # YOUR gold corpus, not bundled
suite="golden",
model_name="OpenMed/Disease-Detection",
device="cpu",
)
m = report.metrics
print("exact F1 :", m["exact_span_f1"]["f1"]) # strict
print("relaxed F1:", m["relaxed_span_f1"]["f1"]) # partial
print("recall by label:", m["recall_slices"]["by_label"])
# Per-label confusion matrix + capped, no-PHI error examples.
errors = error_report(
"OpenMed/Disease-Detection",
"eval/gold/clinical_ner.json",
suite_name="clinical_ner",
example_cap=5,
)
print(errors.to_markdown()) # confusion matrix + FN/FP tables
errors.write_json("eval/out/error_analysis.json")
Need just the metrics on spans you already have? Call the metric functions directly:
from openmed.eval import compute_exact_span_f1, compute_relaxed_span_f1
strict = compute_exact_span_f1(gold_spans, predicted_spans)
partial = compute_relaxed_span_f1(gold_spans, predicted_spans)
text + gold_spans of
{start, end, label} character offsets. (CoNLL → offsets; BRAT .ann is
already character offsets.)run_suite / run_benchmark to get a BenchmarkReport.error_report for the per-label confusion matrix and capped
examples. MISSED = false negatives (recall problem); SPURIOUS = false
positives (precision problem); off-diagonal = label confusion.extracting-clinical-entities (openmed.analyze_text): the model and
predictions you score here come from the NER pipeline.evaluating-with-leakage-gates: for de-id models, F1 is necessary but
not sufficient — pass the same fixtures through the release gates.authoring-model-cards: drop error_report confusion matrices and
per-label F1 straight into the model card's quantitative-analysis section.building-gold-corpus (supplies the fixtures) and
auditing-subgroup-fairness (slices the same run by demographic group).compute_exact_span_f1 / compute_relaxed_span_f1), not token accuracy.ErrorSpanExample stores offsets,
context windows, and sha256: text hashes — never plaintext. Keep it that way.openmed/eval/metrics.py,
openmed/eval/error_analysis.py, openmed/eval/harness.py.PApaperclipai/paperclip102k近 7 天新增 3,122 个 star
NEnexu-io/open-design101k近 7 天新增 1,146 个 star
BYbytedance/deer-flow84k近 7 天新增 389 个 star
BYbytedance/deer-flow84k近 7 天新增 389 个 star
COcoreyhaines31/marketingskills55k近 7 天新增 1,019 个 star
IMImbad0202/academic-research-skills52k近 7 天新增 1,065 个 star