Views
No views yet
rerank-gov-indic (cross-lingual, Indian government press releases)✅ First defensible number — 2026-08-25 · this checkpoint +88.7 %, three seeded draws span +62 % to +89 %
The re-run this card promised has landed. The previous banner said a run with validation and best-checkpoint selection was queued, and that until it landed no effectiveness number should be quoted. It has landed, seeded, three times.
draw seed Recall@1 delta 95 % CI (paired, B=2000) val loss (selection metric) 1 3001 0.1016 +0.0390 (+62.4 %) [+0.0271, +0.0519] 0.0768 3 — published here 3003 0.1180 +0.0555 (+88.7 %) [+0.0426, +0.0688] 0.0570 ← best 4 3004 0.1091 +0.0466 (+74.5 %) [+0.0333, +0.0590] 0.0764 Every interval excludes 0. All three ran on one evaluation — 2,254 cross-lingual queries, a 1,077-passage pool — with a first-stage baseline of 0.06255546 and a Recall@100 ceiling of 0.92590949, identical to eight decimals in all three. Those invariants are how you can tell the draws differ by seed and by nothing else.Read the range, not the headline. Retraining this procedure yourself should land somewhere in +62 % to +89 % (a 1.42× spread). From these weights, the delta in the table.A coincidence we are pointing at rather than hiding. The published checkpoint was chosen on validation loss — carved from training documents, never touching the evaluation set — and it also happens to be the highest test result. That will look like cherry-picking, so: at n=3 the two coinciding is about chance, and our siblingrerank-statute-enis the counter-example, where validation picked the third-best of four draws. Across all seven seeded draws in this family, validation loss shows no consistent relationship with test recall. The protocol is what makes the number honest, not the outcome of the protocol.What this fixes, and it is the reason the old numbers were void. The runners behind the two withdrawn figures seeded their split, their negative mining and their validation carve — and seeded nothing in training, so the shuffle order and the freshly-initialised ranking head came from OS entropy on every run, under an effective batch size of 1. That family was demonstrably bimodal: a second semi-hard draw on byte-identical mined negatives selected a checkpoint at chance (best val 1.9198 against ln 7 = 1.9459) where the first reached 0.0560. This runner callsrandom.seed,torch.manual_seedandtorch.cuda.manual_seed_allafter the split and mining and before the head is constructed. Three seeded draws produced no null, no sign change and nothing near chance.Neither withdrawn figure is corrected by this. +31.9 % was measured on a contaminated split and measures nothing; +97.2 % had a clean split but scored last-step weights. This is reported from zero, on its own split, and must not be differenced against either.Seeded is not bit-reproducible. No deterministic-algorithm flag is set and no same-seed re-run has been attempted. The draws differ by seed by design rather than by uncontrolled entropy; that re-running seed 3003 returns 0.1180 is not established and is not claimed.A fourth draw was attempted and did not complete. All three of its permitted launches wedged before writing a single byte — a pre-CUDA hang on this box that cannot be signalled — so it produced no number of any kind. Recorded because "one draw is missing" invites the suspicion that an inconvenient result was dropped: there was none to drop. Missing data, not a filtered set.The account of the original contamination and the two withdrawals follows, unchanged.The original figure was measured on a split built by a plain shuffle —random.shuffle(rows), first 1,200 rows to eval, the rest to train — with no exclusion of any kind. Replaying it showed 96.4 % of held-out queries came from a press release that was also in training and only 42 (3.5 %) were genuinely unseen. For a cross-lingual claim that is fatal: the model had already been shown almost every answer in another language.The re-measure holds out whole source documents (264 of 1,505), asserts before training that no held-out positive, query or document appears in training, and draws the candidate pool to 1,077 unique passages so it is comparable to the original run's 1,096. Training volume falls only from 10,269 rows to 9,200 (89.6 %) — this is the one figure in the family whose clean and contaminated versions are close to volume-matched, so the change is mostly the split and not the data budget.What changed, honestly. The relative gain went up and the absolute numbers collapsed, and both have the same cause: on press releases it has never seen, the first-stage retriever falls from 0.3083 to 0.0626. A reranker helps most when the first stage is weak, so a larger percentage over a much weaker baseline is not this model getting better. The number that deflates hardest is the one worth reading: of the queries whose answer is anywhere in the top-100, the reranker lifts 13.3 % to rank 1, against the 42.9 % this card used to claim.What is unchanged. The weights, and the corpus fact underneath the curve: the retriever's top ranks really are dense with near-duplicate releases about the same event, and that is now measured rather than asserted (see Training). What is NOT unchanged, corrected 2026-08-23: the negative-hardness ordering does not survive. An earlier version of this paragraph said it did, on the grounds that the three arms were measured identically against each other. They were — but each was measured once, and training in these runs was never seeded. Re-running the shipped arm on the same split with byte-identical mined negatives returned −68.8 % where the first run returned +106.4 %: non-overlapping intervals, opposite signs. The spread within that one arm is 95.7 % of the spread between the best and worst arms, so an arm effect is not separable from a run-to-run effect here. No percentage on this card is withdrawn by that — what is withdrawn is the ordering they were arranged into.A correction of record: an earlier internal notice attributed this defect to the shared fine-tuning pipeline's split filter. That was wrong — this script never used that pipeline. The defect here was its own, and simpler.
intfloat/multilingual-e5-small
(MIT) with a single-logit ranking head (max_length 256), trained to score a
(query, passage) pair jointly.It is a reranker, not a retriever. It does not produce embeddings and cannot be searched with cosine similarity. It takes a query and a shortlist of candidate passages (produced by a bi-encoder such asembed-gov-indic) and re-scores each pair, moving the right passage up the list. Use it on top of a retriever, never instead of one.
embed-gov-indic as
the first-stage retriever (the reranker was trained and evaluated against that retriever's
own candidate lists).embed-gov-indic top-100); this cross-encoder re-scores each (query,
passage) pair and re-ranks. It improves the rank of the correct passage; it does not change
what is retrievable — if the retriever misses a passage entirely, the reranker cannot
recover it.embed-gov-indic adapter (empty prefixes, its serving regime). Recall@1 = the
correct passage ranked first. 95 % CIs are paired bootstrap (B=2,000, seeded) — the
retriever and reranker share queries, so the delta is bootstrapped paired. Measured on
CUDA.| Recall@1 | 95 % CI | |
|---|---|---|
embed-gov-indic retriever (first stage) | 0.0626 | [0.0528, 0.0728] |
+ rerank-gov-indic (this model) | 0.1233 | [0.1096, 0.1375] |
Note on the first-stage figure. Theembed-gov-indicRecall@1 shown here (0.0626) is measured under this evaluation's regime — empty prefixes, a 1,077-passage pool, this specific 2,254-query cross-lingual sample, and a document-isolated split. It is not the same slice as the headline Recall@1 on theembed-gov-indiccard (0.2518 on its own clean split) and will differ from it. The retriever adapter itself was trained on a contaminated split; scoring it on held-out documents is what produces the low figure here.
We report disjoint / excludes-0 confidence intervals, and deliberately avoid the phrase "statistically significant."
| Revision | Trained on | Has a valid score? |
|---|---|---|
main / tag v1.1.0 (default, since 2026-08-25) | 8,216 rows, document-isolated, seeded | ✅ Yes — +88.7 %, CI [+0.0426, +0.0688]. Draw 3 of three seeded draws spanning +62 % to +89 %; selected on validation loss, never on its test result. Use this one. |
pre-spread-2026-08-24 | 10,269 rows from the shuffled split | ❌ No. It trained on the evaluation documents, so its +31.9 % is withdrawn and nothing has replaced it for these weights. This was the default until 2026-08-25. |
clean-2026-08-21 | 9,200 rows, document-isolated | ❌ No. Its split was clean, but the run saved last-step weights with no validation slice, so its +97.2 % is withdrawn (2026-08-23). |
CrossEncoder("quanfire-ai/rerank-gov-indic", max_length=256) # main == v1.1.0, the scored weightsmain served weights trained on the evaluation documents, and this section explained why we
would not swap it: doing so would have traded a possibly-stronger model for a measurable one on
no evidence the trade was good. That argument is spent — the new default is both
document-isolated and scored, so there is nothing left to trade. The previous default is
preserved at tag pre-spread-2026-08-24 so every claim on this card stays checkable.pre-spread-2026-08-24 trained on 11.6 % more data
and may still be the stronger model on press releases neither checkpoint has seen. Nothing here
settles that; what it settles is which weights have a number you can trust.| Validated? | |
|---|---|
Reranking a cross-lingual government-press-release shortlist (16 Indian languages), on top of embed-gov-indic | ⚠️ Directionally yes, but currently unquantified. Both measured figures are withdrawn (+31.9 % contaminated split, +97.2 % last-step checkpoint), so there is no defensible number as of 2026-08-23. The task itself is validated as genuinely cross-lingual and the reranker demonstrably reorders; the size of the gain is unmeasured pending a re-run. |
| Other domains (legal, finance, news, conversational, product) | ❌ Not validated — this is a government-press-release specialist |
| Use as a standalone retriever / embedding model | ❌ No — it is a cross-encoder; it has no embedding output |
Reranking on top of a different retriever than embed-gov-indic | ⚠️ Untested — it was trained against this retriever's candidate distribution |
| Per-language reranker gains | ⚠️ Not separately reported — the validated claim is the aggregate cross-lingual Recall@1; a per-language breakdown is future work |
1from sentence_transformers import CrossEncoder
2
3# 1) First stage: retrieve a shortlist with embed-gov-indic (see that model's card).
4# shortlist = top-100 passages for `query` from your gov corpus.
5
6# 2) Rerank the shortlist with this cross-encoder.
7reranker = CrossEncoder("quanfire-ai/rerank-gov-indic", max_length=256)
8scores = reranker.predict([(query, passage) for passage in shortlist])
9ranked = [p for _, p in sorted(zip(scores, shortlist), key=lambda x: -x[0])]
10# ranked[0] is the reranker's top pick.embed-gov-indic serving
regime it was trained against). Feed raw query and passage text.intfloat/multilingual-e5-small (MIT), full fine-tune with a single-logit
sequence-classification head; max_length 256; 2 epochs, lr 2e-5 (bf16, CUDA).
Data seeding only, corrected 2026-08-23. This line previously read seed 0. That is
true of the split, the negative mining and the bootstrap — a re-run reproduced the mining
ledger byte-for-byte — and false of training, which is what the phrase implies here.
The training order uses an unseeded global RNG and the ranking head is randomly
initialised, so these weights are one draw and are not bit-reproducible.embed-gov-indic.main holds the contaminated-split
weights and clean-2026-08-21 holds the last-step weights; both of their numbers are
withdrawn. The only checkpoint that ever produced a defensible number was never uploaded.
This is stated plainly so nobody has to infer it from the strikethroughs above.1@software{quanfire_rerank_gov_indic,
2 title = {rerank-gov-indic: a cross-lingual reranker for Indian government press releases},
3 author = {Quanfire},
4 year = {2026},
5 url = {https://huggingface.co/quanfire-ai/rerank-gov-indic}
6}