Reference — every metric, model and dataset in this repo, and where each one comes from¶
A single index for the five worked examples. Nothing here is a summary of results; it is
the glossary, so that reading an example does not require already knowing what
rougeLsum recall or nDCG@10 is, or which weights gemma_m actually loads.
Every row links to the primary source: the HuggingFace repo for a model or dataset, the paper or specification for a metric.
- Metrics — what each number means, how it is computed here, and what it cannot see
- Success criteria per experiment — what "good" meant, and why
- Models — every arm, with the exact weights or upstream model id
- Datasets — every corpus, its licence, and its download recipe
- Statistical tests — how separation is decided
- Terminology — the canonical name for every experiment, arm and term
papers/— every cited work with the redistribution licence read from the publisher's page, and a fetcher for the twelve that permit it
Metrics¶
Each example declares PRIMARY_METRIC (the one thing arms are ranked by) and
METRIC_KINDS, which splits everything else into quality (a claim about how good the
output is) and descriptive (a diagnostic that must never be ranked). The split is
enforced in code, not convention: harness/scripts/leaderboard.py will not rank a
descriptive metric.
Summarisation — continuous overlap¶
| metric | kind | what it is |
|---|---|---|
coverage ← primary |
quality | ROUGE-Lsum recall against the human reference, after clipping the output to a word budget. "How much of what a human thought mattered did it get?" |
concision |
quality | ROUGE-Lsum precision over the whole output. "What share of what it wrote earned its place." Padding is punished here exactly as much as raw recall rewards it. |
rouge1 |
quality | Unigram overlap — ROUGE in its simplest form. Reported because it is what most papers quote. |
rougeLsum |
quality | Longest-common-subsequence overlap, computed per sentence and unioned. Rewards preserving order, unlike rouge1. |
grounding |
quality | Ours, ~20 lines, not comparable to anyone else's number. Share of the summary's bigrams that also appear in the article. High = extractive and safe; low = abstractive, which is either a good paraphrase or a fabrication. It cannot tell those apart — but it can tell you the model left the source behind, which ROUGE cannot. |
compression, length_vs_reference |
descriptive | Output length relative to article and to the human reference. ROUGE rises with length, so this is how a verbose winner gets caught. |
fmt_bullets, fmt_markdown, fmt_narration, fmt_label, fmt_paragraphs, fmt_overlong |
descriptive | Format compliance. A model that answers with a markdown heading is not wrong about the content, and this keeps that out of the quality number. |
What ROUGE cannot see: it is n-gram overlap. A factually wrong summary that reuses the article's wording scores well; a correct paraphrase scores badly. Read
groundingbeside it, never instead of it. ROUGE is the standard because it is cheap and reproducible, not because it is right — see Kryscinski et al., Neural Text Summarisation: A Critical Evaluation.
Implementation: google-research/rouge via the rouge-score package.
Classification — binary per item¶
| metric | kind | what it is |
|---|---|---|
correct ← primary |
quality | 1 if the predicted label equals the gold label, else 0. Its mean is accuracy. |
parsed |
quality | Whether the output could be read as a label at all. Quality, not descriptive: an arm that cannot be parsed cannot be deployed, whatever it knows. |
correct_after_repair |
descriptive | Whether a lenient re-parse would have rescued it. The gap between this and correct is what the parser is worth — 8.6 accuracy points to one arm. |
confidence |
descriptive | The model's own probability for its answer. Only the local ML arms supply it; no hosted arm does, because logprobs were never requested. |
answer_words, fmt_verbose, fmt_markdown |
descriptive | Did it answer with one word, or a paragraph containing one. |
Macro-F1 is not here, and that is deliberate. Macro-F1 needs a confusion matrix over
the whole run — there is no per-item number whose mean is macro-F1. It lives in
harness/scripts/classification_report.py instead. See
scikit-learn's explanation of micro vs macro averaging.
Extraction (NER) — a set vs a set¶
| metric | kind | what it is |
|---|---|---|
f1 ← primary |
quality | Harmonic mean of precision and recall over the entity set for one item, matched one-to-one after normalisation. Type must match — one of Few-NERD's 8 coarse types (person, location, organization, …). |
precision, recall |
quality | Of what it found, how much was right; of what was there, how much it found. |
untyped_f1 |
quality | The same, ignoring the type label. The pair is the point: f1 asks "did it label it right", untyped_f1 asks "did it find it at all". |
type_penalty |
descriptive | untyped_f1 − f1. Credit lost purely to mislabelling something it did find. A type-confusion problem is fixed differently from a detection problem, and this says which you have. |
tp/fp/fn (+ untyped) |
descriptive | Raw counts, so a report script can pool them into a corpus micro-F1 — a different number from the mean of per-item F1s, answering a different question. |
parsed |
quality | Could the output be read as a set. An unreadable answer scores 0, not "found nothing" — those are different, and conflating them once paid a non-answer 1.0. |
Background: CoNLL-2003 shared task defines the standard exact-match entity F1 this follows.
Retrieval — a ranked list vs a set¶
| metric | kind | what it is |
|---|---|---|
ndcg_10 ← primary |
quality | Normalised Discounted Cumulative Gain at rank 10. Position-weighted: a relevant document at rank 1 is worth more than at rank 10, discounted by 1/log2(rank+1). Normalised by the best possible ordering, so 1.0 is perfect. |
recall_10, recall_100 |
quality | Share of relevant documents appearing in the top 10 / top 100. recall_100 is what a two-stage pipeline depends on — a reranker cannot retrieve what the first stage never returned. |
mrr_10 |
quality | Mean Reciprocal Rank — 1/rank of the first relevant document, 0 if outside the top 10. |
unknown_ids |
descriptive | Document ids the model named that are not in the corpus. Hallucinated ids keep their slot in the ranking — dropping them would slide real documents up and make invention a scoring strategy. |
duplicate_ids |
descriptive | Ids repeated in one answer. Collapsed, not counted, or one document could fill the whole top-10. |
rank_of_first, found_any, n_returned, n_relevant |
descriptive | rank_of_first is never ranked: 0 means "never found", which would sort as the best possible position. |
Gain function is 2^rel − 1, matching
pytrec_eval and BEIR.
On SciFact every judgment is binary, so this is indistinguishable from linear gain — it is
declared anyway, because a metric that silently changes meaning between corpora is worse
than one that is merely wrong.
Shared across all examples¶
| metric | kind | what it is |
|---|---|---|
cost_usd |
descriptive | What the provider billed (usage.cost), not a price table. See REPORT_RETRIEVAL §7 for why that distinction cost four reports a correction. |
latency_ms |
descriptive | Per item, excluding warm-up. Index builds and model loads are reported separately as warmup_ms. A local arm's first one to three items still pay a one-off initialisation cost the load does not cover, so prefer the median for local arms (KNOWN_ISSUES.md). Figures from different machines are not comparable: see harness/data/runs-linux/. |
truncated |
descriptive | The provider stopped at max_tokens. Distinguishes "the model is bad" from "the budget was too small". |
reasoning_tokens |
descriptive | Tokens spent on hidden reasoning. All examples run reasoning: {enabled: false}; this verifies it took. |
Success criteria per experiment¶
"Which arm is best" is decided by exactly one metric per example, fixed before any arm ran. Everything else is read after the ranking, to understand it rather than to change it.
| Experiment | Ranked by | Floors (non-model arms, checked first) | Read after ranking |
|---|---|---|---|
| Summarisation · CNN/DM | coverage |
lead3 — the first three sentences. A model below it has not earned its inference cost. |
grounding (did it leave the source?), length_vs_reference (did it win by padding?), concision |
| Classification · AG News | correct |
constant (always one class, ≈0.25) and keyword (~20 regex rules) |
parsed and correct_after_repair — the parser is part of the system; macro-F1 for concentrated blind spots; confidence calibration |
| Classification · DBpedia | correct |
same two | same, plus the label-noise pass — on a saturated task the field's consensus errors are the ceiling |
| Extraction · Few-NERD | f1 |
nothing (predicts the empty set; must score exactly the empty-gold rate) and capitalized (every capitalised run) |
untyped_f1 and type_penalty — detection vs labelling; per-type breakdown; consensus type disagreements |
| Retrieval · SciFact | ndcg_10 |
random (must score ≈ k/N) and first_k (corpus order) |
recall_100 — the pipeline ceiling; the oracle reordering; unknown_ids for invention |
Why each example has floors that are not models. A floor is any non-model arm — a
rule, a constant or a random draw. Most also have scores predictable in advance (nothing,
random, constant, first_k), and those are calibration checks on the scorer before
they are baselines on the task: if nothing does not score exactly the empty-gold rate,
no other row in the table can be trusted. On Few-NERD this caught a gold entity that the
normaliser deleted (the currency symbol £), which moved the floor by 1/280.
Models¶
Hosted — 24 arms, 8 vendors × 3 price tiers¶
Every example runs the same 24, at temperature 0 with reasoning disabled, so a difference
between examples is the task and not the configuration. Measured through a
LiteLLM proxy routing to OpenRouter; a
rerun can go to OpenRouter directly with one key, through the same alias table
(examples/models.json, Reproduce it).
Arm names are <vendor>_<tier>: _l / _m / _s = the vendor's large / medium / small
price tier.
| arm | alias (examples/models.json) | upstream model (OpenRouter) | weights · licence |
|---|---|---|---|
anthropic_l |
eval-opus-5 |
anthropic/claude-opus-5 | proprietary |
anthropic_m |
eval-claude-sonnet |
anthropic/claude-sonnet-5 | proprietary |
anthropic_s |
eval-claude-haiku |
anthropic/claude-haiku-4.5 | proprietary |
openai_l |
eval-gpt-6sol |
openai/gpt-6-sol | proprietary |
openai_m |
eval-gpt-55 |
openai/gpt-5.5 | proprietary |
openai_s |
eval-gpt-mini |
openai/gpt-5.4-mini | proprietary |
deepseek_l |
eval-deepseek-pro |
deepseek/deepseek-v4-pro | open · MIT |
deepseek_m |
eval-deepseek-41flash |
deepseek/deepseek-v4.1-flash | open · MIT |
deepseek_s |
eval-deepseek-flash |
deepseek/deepseek-v4-flash | open · MIT |
gemma_l |
eval-gemma-31b |
google/gemma-4-31b-it | open · Apache-2.0 |
gemma_m |
eval-gemma-26b |
google/gemma-4-26b-a4b-it | open · Apache-2.0 |
gemma_s |
eval-gemma-3-27b |
google/gemma-3-27b-it | open · Gemma, gated |
llama_l |
eval-llama-maverick |
meta-llama/llama-4-maverick | open · Llama, gated |
llama_m |
eval-llama-70b |
meta-llama/llama-3.3-70b-instruct | open · Llama 3.3, gated |
llama_s |
eval-llama-scout |
meta-llama/llama-4-scout | open · Llama, gated |
mistral_l |
eval-mistral-large |
mistralai/mistral-large-2512 | open · Apache-2.0 |
mistral_m |
eval-mistral-medium |
mistralai/mistral-medium-3.1 | proprietary |
mistral_s |
eval-mistral-small |
mistralai/mistral-small-3.2-24b-instruct | open · Apache-2.0 |
qwen_l |
eval-qwen-3max |
qwen/qwen3-max | proprietary |
qwen_m |
eval-qwen-37plus |
qwen/qwen3.7-plus | proprietary |
qwen_s |
eval-qwen-flash |
qwen/qwen3.8-flash | proprietary |
glm_l |
eval-glm-5 |
z-ai/glm-5 | open · MIT |
glm_m |
eval-glm-46 |
z-ai/glm-4.6 | open · MIT |
glm_s |
eval-glm-45-air |
z-ai/glm-4.5-air | open · MIT |
14 of these 24 have downloadable weights and could be self-hosted. Verified on 2026-09-29 against the HuggingFace API. Ten are unrestricted (MIT / Apache-2.0); four are gated behind licence acceptance and carry use conditions. An earlier version said 13 and inferred openness from OpenRouter's endpoint count — one provider implies closed — which is not a valid test:
mistral_lis served only by Mistral and its weights are on HuggingFace under Apache-2.0. What that is worth is measured inREPORT_SYNTHESIS.md§0 — no proprietary model separated from the best open-weight model in any of the five experiments.A hosted model has no verifiable identity. The fingerprint records
identity_declared: trueandrevision_source: unavailable— we record the alias we asked for, not proof of what answered. A provider can change weights behind a name without notice. This is the single largest unverifiable assumption in the repo, and it is why the local arms record arevisionand a weight-file size and the hosted ones cannot.
Local — downloaded weights, pinned by revision¶
Every one is loaded from HuggingFace. For the first ten, the
commit SHA and model.safetensors byte size are recorded in the run fingerprint, so a
silent upstream change is detectable. For five of the last six they are not (all but
bert_base_ta): their runs record revision: null and no weight files (two snapshots in the cache — see
KNOWN_ISSUES.md), so the revisions below were read from
the cache by hand and are a record, not a fingerprint.
| arm | HuggingFace model | weights size | revision (HF commit) | role |
|---|---|---|---|---|
bart_l |
facebook/bart-large-cnn |
1.6 GB | 37f520fa929c |
BART fine-tuned on CNN/DailyMail — the in-distribution summariser |
bart_mnli |
facebook/bart-large-mnli |
1.6 GB | d7645e127eaf |
Zero-shot classification by NLI entailment — no training on the task |
bert_mini |
mrm8488/bert-mini-finetuned-age_news-classification |
44 MB | e94b474cce6f |
Fine-tuned on AG News. The 44 MB model that beat 24 LLMs |
span_marker |
guishe/span-marker-generic-ner-v1-fewnerd-fine-super |
499 MB | f836dfa9b6b0 |
SpanMarker fine-tuned on Few-NERD, predicting the 66 fine types mapped down to 8 |
gliner |
urchade/gliner_medium-v2.1 |
781 MB | 40ec419335d0 |
GLiNER — zero-shot NER where the caller supplies the label set. The matched control for span_marker |
minilm |
sentence-transformers/all-MiniLM-L6-v2 |
91 MB | 1110a243fdf4 |
General sentence-similarity encoder, symmetric, no prefix |
mpnet |
sentence-transformers/all-mpnet-base-v2 |
438 MB | e8c3b32edf54 |
The larger general encoder. Same recipe as MiniLM, so the pair isolates size |
bge_small |
BAAI/bge-small-en-v1.5 |
133 MB | 5c38ec7c405e |
Trained for retrieval, with an asymmetric query instruction. Pairs with MiniLM to isolate training objective |
e5_base |
intfloat/e5-base-v2 |
438 MB | f52bf8ec8c71 |
Retrieval-trained, asymmetric on both sides (query: / passage:) |
bart_m |
sshleifer/distilbart-cnn-12-6 |
1.2 GB | a4f8f3ea906e |
BART-large-CNN distilled to 12 encoder / 6 decoder layers |
bart_s |
sshleifer/distilbart-cnn-6-6 |
460 MB | d2fde4ca965b |
Distilled to 6 / 6 layers |
bart_l_xsum |
facebook/bart-large-xsum |
1.6 GB | 2179ab81d3f1 |
BART-large fine-tuned on XSum — same task, another corpus. The out-of-distribution control for bart_l |
bert_base_ta |
textattack/bert-base-uncased-ag-news |
438 MB | fe417ad660b1 |
BERT-base fine-tuned on AG News (TextAttack; card reports 0.9514) |
bert_base_fy (AG) |
fabriceyhc/bert-base-uncased-ag_news |
438 MB | c14e3b32fe1f |
BERT-base fine-tuned on AG News by a second author — a check on the first |
bert_base_fy (DBpedia) |
fabriceyhc/bert-base-uncased-dbpedia_14 |
438 MB | 1fbfc3deaa28 |
BERT-base fine-tuned on DBpedia-14 |
The last six need torch ≥ 2.6, and ran on 2026-09-30 on Linux. Their main branches
ship only pytorch_model.bin, which transformers refuses to torch.load below torch 2.6
(CVE-2025-32434); x86_64 macOS has no
torch above 2.2.2. The revisions above are the main commits the runs loaded — read from
the local cache, because these runs' fingerprints record revision: null (see
KNOWN_ISSUES.md). Each also has a safetensors conversion
PR on the Hub — refs/pr/29 (12-6), refs/pr/2 (6-6), refs/pr/9 (xsum) and refs/pr/1
for the three BERTs. On torch 2.2.2, through each arm's own adapter
(evidence/conversion_pr_check.py, results in
conversion_pr_check.json), five of the six reproduce the recorded outputs byte for
byte: the three BERTs on every item (200, 200, 280) and bart_m and bart_l_xsum on 20
of 20. bart_s does not run: its PR is fp16, as its pickle is, and torch 2.2.2 has no
fp16 LayerNorm on CPU. Cast to fp32 it matches 19 of 20, but that is a different
computation from the recorded run, which ran at fp16.
Non-model arms¶
The floors. Each is first a check on the scorer — its score can be stated before it
runs, so a mismatch indicts the scorer, not a model — and only then a bar for models to
clear. bm25 is the exception: a real retrieval baseline, listed here because it uses no
model weights.
| arm | what it does | expected score |
|---|---|---|
lead3 |
first three sentences of the article | the extractive floor for summarisation |
constant |
always the same class | ≈ 1/num_classes |
keyword |
~20 hand-written regex rules | whatever rules alone are worth |
nothing |
predicts the empty set | exactly the empty-gold rate |
capitalized |
every capitalised run, minus a stoplist | high untyped recall, near-random types |
random |
a seeded permutation of the corpus | ≈ k/N for recall@k |
first_k |
the corpus in id order | ≈ 0 |
bm25 |
Okapi BM25 via rank_bm25 |
no fixed prediction — a strong baseline that beats weak dense models on SciFact (calibrated: 0.6523 vs BEIR's 0.665) |
Datasets¶
What of each is in this repository, what it asks of you, and what the committed run outputs contain: Data and licences.
None is committed. Each example ships a fetch.py download recipe; the slice lands on
your machine and is gitignored. Dataset identity travels as items_sha256 (and
corpus_sha256 for retrieval), not as bytes in the repo.
| Dataset | Source | Licence | Used for |
|---|---|---|---|
| CNN/DailyMail | abisee/cnn_dailymail |
Apache-2.0 | cnn_dailymail_200: the first 200 test articles — all from CNN (the split puts CNN's 9% first; 91% of it is DailyMail). cnn_dailymail_dm200: 200 DailyMail test articles, seeded random. Human highlights as gold. Corpus from Hermann et al. 2015; adapted for summarisation by Nallapati et al. 2016 |
| AG News | fancyzhx/ag_news |
unknown on the card; the corpus description says non-commercial research use |
200 snippets, 4 topics (paper) |
| DBpedia-14 | fancyzhx/dbpedia_14 |
CC-BY-SA 3.0 + GFDL, inherited from Wikipedia | 280 abstracts, 14 ontology classes |
| Few-NERD | DFKI-SLT/few-nerd |
CC BY-SA 4.0 — the cleanest of the five | 280 sentences, 8 coarse entity types (paper) |
| BEIR SciFact | BeIR/scifact + BeIR/scifact-qrels |
CC BY-SA 4.0 | 200 claims over a 5,183-abstract corpus (BEIR, SciFact) |
Licence is a selection criterion here, not a footnote. Few-NERD was chosen over WNUT-2017 — which is closer to noisy podcast speech, the actual application — purely because WNUT is licensed
other. That is relevance given up for a clean grant, and the NER report says so.
Statistical tests¶
Ranking arms by a mean is not a result until you know which gaps survive noise.
| Tool | What it answers | Method |
|---|---|---|
family_test.py |
Is arm A better than each of a pre-declared family? | Sign-flip permutation on paired per-item scores, then Holm step-down over the whole family. The family is declared before p-values are read — otherwise you are choosing the comparison after seeing the answer. |
holdout_significance.py |
Does the ordering hold on items a smaller slice never contained? | Friedman-style permutation on within-item ranks, plus a Nemenyi critical difference. |
rank_stability.py |
How many items before the leaderboard stops moving? | Two disjoint halves, ranked independently, correlated by Spearman's ρ with midranks for ties. Neither half is treated as truth. |
bootstrap_test.py |
Confidence interval for macro-F1, which has no per-item value | Paired percentile bootstrap. Documented as anti-conservative — 11 separations against the exact test's 8. |
rescore.py |
What would this look like under a different scorer? | Recomputes from stored outputs. No API calls, no money. This is why a scorer bug costs nothing to fix. |
Why Holm and not Bonferroni: Holm is uniformly more powerful and controls the same
family-wise error rate. Why permutation and not a t-test: these per-item scores are not
normal — correct is Bernoulli, ndcg_10 on a single-relevant query takes one of eleven
values — and permutation assumes only exchangeability under the null.
Further reading¶
- BEIR — the benchmark design this repo's retrieval example borrows from
- HELM — multi-metric, multi-scenario LLM evaluation at scale
- A Careful Examination of Large Language Model Performance on Grade School Arithmetic — builds a fresh GSM8k-equivalent to measure how much of a benchmark score is overfitting to the benchmark. The reason this repo freezes slices and records
items_sha256 ../research/NOTES.md— this repo's own append-only journal, including every retraction
Terminology¶
Fixed names, used the same way in every document here. Where a table's first column is
"experiment", every cell in it reads Task · Dataset — mixing a task name in one row
with a dataset name in the next is what this convention exists to stop.
| canonical label | task | dataset | report |
|---|---|---|---|
| Summarisation · CNN/DM | summarisation | CNN/DailyMail | REPORT_SUMMARIZATION |
| Classification · AG News | classification | AG News | REPORT_CLASSIFICATION |
| Classification · DBpedia | classification | DBpedia-14 | REPORT_CLASSIFICATION |
| Extraction · Few-NERD | extraction (NER) | Few-NERD | REPORT_NER |
| Retrieval · SciFact | retrieval | BEIR SciFact | REPORT_RETRIEVAL |
Two experiments share the classification task and differ only in dataset, which is why the dataset is never optional in these labels.
Other fixed terms¶
| term | means | instead of |
|---|---|---|
| arm | one configuration under test — a model plus its prompt, parameters and parsing | "model", which is only part of an arm |
| experiment | one task on one dataset, with its own report section | "dataset" or "task" alone |
| dev slice / measurement slice | the small tuning set / the frozen set results are reported on | "train/test", which implies we trained something |
| floor | a non-model arm (rule, constant or random: lead3, keyword, constant, nothing, capitalized, random, first_k); those with a score predictable in advance double as scorer calibration checks |
"baseline" — the predictable ones are scorer checks first |
| separated | the difference survives Holm step-down at α = 0.05 | "better", which only needs a point estimate |
| billed | what the provider charged (usage.cost) |
"cost", which used to mean a price-table estimate |
| local ML / open-weight / proprietary | the three tiers in REPORT_SYNTHESIS §0 | "free vs paid", which conflates tiers 1 and 2 |
Spelling¶
Prose uses British -isation (summarisation, normalisation, normaliser) — the
majority form across this repo. Identifiers keep whatever they were named, because
renaming them breaks paths and hashes: REPORT_SUMMARIZATION.md,
examples/summarization-cnn-dailymail/, normalizer_sha256, normalize(). The two
spellings coexisting in one sentence is expected when one of them is code.
Credits¶
Everything below is somebody else's work. Versions are the ones actually recorded in the run fingerprints, not the ones a lockfile would prefer.
Datasets¶
| Dataset | Authors | Licence |
|---|---|---|
| CNN/DailyMail | Hermann et al. (2015); summarisation framing by Nallapati et al. (2016); split by See et al. (2017) | Apache-2.0 |
| AG News | Zhang, Zhao & LeCun (2015); corpus by ComeToMyHead | card says unknown; corpus states non-commercial research use |
| DBpedia-14 | Lehmann et al., DBpedia; split by Zhang et al. (2015) | CC-BY-SA 3.0 + GFDL |
| Few-NERD | Ding et al. (2021) | CC BY-SA 4.0 |
| BEIR SciFact | Wadden et al. (2020); BEIR by Thakur et al. (2021) | CC BY-SA 4.0 |
Models¶
Licences below were read from the HuggingFace API on 2026-09-29, not assumed. Two state no licence at all, which is a reuse blocker rather than a permission — follow each link and check before reusing any of them commercially.
| model | licence |
|---|---|
facebook/bart-large-cnn |
MIT |
facebook/bart-large-mnli |
MIT |
facebook/bart-large-xsum |
MIT |
BAAI/bge-small-en-v1.5 |
MIT |
intfloat/e5-base-v2 |
MIT |
sentence-transformers/all-MiniLM-L6-v2 |
Apache-2.0 |
sentence-transformers/all-mpnet-base-v2 |
Apache-2.0 |
urchade/gliner_medium-v2.1 |
Apache-2.0 |
sshleifer/distilbart-cnn-12-6 |
Apache-2.0 |
sshleifer/distilbart-cnn-6-6 |
Apache-2.0 |
fabriceyhc/bert-base-uncased-ag_news |
Apache-2.0 |
fabriceyhc/bert-base-uncased-dbpedia_14 |
Apache-2.0 |
guishe/span-marker-generic-ner-v1-fewnerd-fine-super |
CC-BY-SA-4.0 |
mrm8488/bert-mini-finetuned-age_news-classification |
none stated |
textattack/bert-base-uncased-ag-news |
none stated |
An earlier version of this line claimed the set was "variously MIT, Apache-2.0 and CC-BY-NC-4.0". No model here is CC-BY-NC-4.0; one is CC-BY-SA-4.0 and two state nothing. That was asserted rather than checked, and it is the same error the paper citations had.
facebook/bart-large-cnn ·
facebook/bart-large-mnli ·
mrm8488/bert-mini-finetuned-age_news-classification ·
guishe/span-marker-generic-ner-v1-fewnerd-fine-super ·
urchade/gliner_medium-v2.1 ·
sentence-transformers/all-MiniLM-L6-v2 ·
sentence-transformers/all-mpnet-base-v2 ·
BAAI/bge-small-en-v1.5 ·
intfloat/e5-base-v2
Underlying architectures: BART, BERT, MPNet, DeBERTa-v3 (GLiNER's encoder), Sentence-BERT, E5, BGE, in C-Pack, GLiNER, SpanMarker.
Software¶
| Package | Version recorded | Licence |
|---|---|---|
| transformers | 4.55.4 | Apache-2.0 |
| torch | 2.2.2 (macOS runs) · 2.14.0 (Linux runs) | BSD-3-Clause |
| sentence-transformers | 3.4.1 | Apache-2.0 |
| datasets | 5.0.1 | Apache-2.0 |
| rouge-score | 0.1.2 | Apache-2.0 |
| rank_bm25 | — (not recorded; lockfile has 0.2.2) | Apache-2.0 |
| gliner | — (not recorded; requires ≥ 0.2.13) | Apache-2.0 |
| span-marker | — (not recorded; requires ≥ 1.5) | Apache-2.0 |
| scikit-learn | 1.9.1 | BSD-3-Clause |
| numpy | 1.26.4 or 2.4.6, varies by run | BSD-3-Clause |
| openai (client only) | 2.48.0 – 3.20.0, varies by run | Apache-2.0 |
| LiteLLM (proxy, not a library) | — (not recorded) | MIT |
| uv (environment manager) | — (not recorded) | Apache-2.0 / MIT |
Infrastructure¶
Hosted inference is routed through OpenRouter, which resells capacity from Anthropic, OpenAI, Google, Meta, Mistral, DeepSeek, Alibaba (Qwen), Z.ai and their serving partners (Novita, DeepInfra, Nebius, Parasail and others). Dataset slices are fetched through the HuggingFace datasets-server.
Method¶
The statistical approach follows standard practice rather than inventing any: Holm step-down (Holm 1979 (A Simple Sequentially Rejective Multiple Test Procedure, Scandinavian Journal of Statistics 6(2):65–70)), Friedman and Nemenyi for multiple classifiers over multiple datasets (Demšar 2006), and permutation tests as described in Dror et al., The Hitchhiker's Guide to Testing Statistical Significance in NLP.
No corpus, no model weight, no paper and no provider output is redistributed by this
repository. Every example ships a download recipe instead, and
papers/README.md records the licence of each cited work — twelve of
the twenty-four may be mirrored, twelve may not, and the split follows publisher policy
rather than importance.
Every citation above was verified on 2026-09-29 by fetching it and comparing the real title to the claim made about it. That check found four errors in the first draft: a fabricated paper title, a GitHub advisory ID pointing at an unrelated NuGet CVE, a dataset credited to the wrong authors, and a moved repository. One citation — Holm (1979) — could not be verified programmatically and is therefore given as a full text reference rather than a link.