cd /news/natural-language-processing/spider-2-0-deleted-a-claim-i-made-th… · home topics natural-language-processing article
[ARTICLE · art-128071] src=dev.to ↗ pub= topic=natural-language-processing verified=true sentiment=· neutral

Spider 2.0 deleted a claim I made this morning

A developer found that swapping a hashed vectoriser for a sentence-transformer in a schema retriever produced a strict recall-at-10 gain from 82.6% to 88.1% on a pooled Spider 1.0 catalog (n=1,034), but the effect disappeared on Spider 2.0-lite, where hashed and sentence-model recall were statistically indistinguishable at 82.9% and 82.3% (n=158, a one-question difference). The developer attributes the discrepancy to Spider 2.0's real table descriptions, which let lexical scoring close the vocabulary gap that embeddings were compensating for on Spider 1.0, and labels the explanation a hypothesis fitted to two data points.

by read6 min views3 publishedSep 13, 2026

This morning I wrote that swapping the hashed vectoriser in my schema

retriever for a sentence-transformer was a consistent win. I had numbers:

on a pooled Spider 1.0 catalog, strict recall at k=10 went from 82.6% to

88.1%. Consistent, I said. Larger than my own benchmarks suggested.

This evening I ran the same comparison on Spider 2.0 and the effect vanished.

Not shrank — vanished, and if anything went the other way.

What follows is the run, what I think happened, and the experiment that would

actually settle it, which I have not done yet.

Spider 1.0's databases have a median of three tables. That is why my

per-database numbers there are 100% and worthless: returning the entire schema

also scores 100%. I had to invent a pooled variant — every database merged into

one 876-table catalog — to make the task resemble retrieval at all, and an

invented variant is exactly the kind of thing a reader is right to discount.

Spider 2.0-lite needs no such construction. Measured from the distribution:

162 databases, 7,892 tables, a median of 15 tables per database and a maximum

of 785, drawn from real BigQuery and Snowflake warehouses. The databases are

already big.

Table recall, 158 questions across 103 databases. spider2-lite ships 547

examples in total, so this is a subset of the benchmark rather than the whole

of it — I'll publish the harness and say exactly which subset when I push it:

top_k all gold tables present per-table recall
5 70.9% 81.7%
10 82.9% 88.5%
20 86.1% 90.5%

Nothing was tuned for this. I downloaded it, pointed the same code at it, and

those are the numbers.

With the caveat the sample size demands. n=158 gives a 95% confidence

interval of roughly [63.4, 77.4] on that 70.9%, and [76.3, 88.0] on the 82.9%.

So the honest comparison with my Spider 1.0 pooled figures is not "within a

point or two" — the intervals are too wide to resolve a point or two. It is

that the two are indistinguishable at this sample size, on databases an order

of magnitude larger and questions written to be hard. That is still the

interesting result. It is just a weaker sentence than the one I wanted to

write.

k=10, strict recall hashed sentence model
Spider 1.0 pooled (n=1,034) 82.6% 88.1%
Spider 2.0-lite (n=158) 82.9% 82.3%

And immediately, the discipline I failed to apply to my own good news this

morning: 82.9% and 82.3% differ by one question. 131 versus 130. I cannot

claim the embedder is "slightly worse" from that, any more than I could have

claimed it was better. The correct statement is that there is no measurable difference at n=158.

That still kills "consistent win," which is what I said and what was wrong.

The Spider 1.0 effect, meanwhile, is real: at n=1,034 the intervals around

82.6% and 88.1% do not overlap. So the finding is not "the embedder does

nothing." It is measurably useful on one benchmark and unmeasurable on the other, and the reason matters.

Spider 2.0's tables carry real descriptions, harvested from the warehouses'

own data dictionaries. Spider 1.0's tables carry none — just identifiers.

When a table has prose describing it, lexical scoring over that prose already

closes the gap between the words a user types and the words a schema uses. A

question about "revenue" finds a table whose description says revenue, without

any embedding involved. The sentence model was earning its keep on Spider 1.0

by compensating for the absence of that text. Give the corpus the text and

there is less left to compensate for.

This is a hypothesis fitted to two data points and I am labelling it as such.

A few days ago I wrote up the opposite-looking result: adding LLM-generated

table descriptions to a 1,245-object schema made retrieval worse, because

generated prose inflated the document frequency of the domain's own nouns until

"contact" scored an IDF of 0.15 and the contacts table fell out of the top 40.

Those two results look unrelated. They are the same axis:

The value of any semantic layer — a learned encoder, or generated

descriptions — depends on how much prose the schema already has. Where prose

exists, lexical scoring over it does most of the work. Where it doesn't, you

need something to bridge the vocabulary gap. And if you add prose to the same

field as the identifiers, you damage the identifiers.

Which gives a practical rule I can actually stand behind:

Two benchmarks differing in everything is a correlation, not a mechanism. The

controlled version is one line of setup: strip the descriptions out of Spider

2.0 and re-run the same comparison on the same questions and the same

databases.

Spider 2.0-lite, k=10 hashed sentence model
with data-dictionary prose 82.9% 82.3%
descriptions removed ? ?

If the encoder's advantage reappears once the prose is gone, the hypothesis is

confirmed inside one corpus with everything else held constant. If it doesn't,

the explanation is something else — dialect, question style, table size — and I

should stop telling this story.

I'll run it and post the row either way.

Spider 2.0 carries description as a list for some tables. That crashed

indexing with:

TypeError: sequence item 2: expected str instance, list found

Naming neither the object nor the field. A catalog of 800 tables was

unindexable because one of them described itself in a list instead of a string.

Fixed at the boundary rather than defensively at each reader — ObjectDoc

normalises description, hint and column comments once on construction,

and None stays None.

That bug would have hit anyone pointing this at a real data dictionary. It did

not show up across six schemas I wrote myself, 445 tests, or a live run against

a 127-object Oracle database, because I built all of those and I would never

have thought to put a list there. It took ninety seconds to find on someone

else's data.

Which is the actual argument for running public benchmarks, more than any

number in the tables above. They are not there to prove you are good. They are

there to be data you did not shape.

The library is schemagate, Apache-2.0. The benchmark scripts are in benchmarks/ and the data comes from the original sources; the whole suite reruns in about three minutes. The Spider 2.0 numbers and the corrected embedder row are not on main yet — BENCHMARKS.md still shows the Spider 1.0 figures alone as I write this. It gets the correction, and I'd rather say that here than have you click and find the flattering version.

── more in #natural-language-processing 4 stories · sorted by recency
── more on @spider 1.0 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/spider-2-0-deleted-a…] indexed:0 read:6min 2026-09-13 ·