gte-small (33 MB int8 ONNX) embeds the 860 product_class
values from Wayfair’s WANDS dataset, then snaps whatever you type onto the nearest
legal one. No API call, no server. The model downloads once and your browser caches it.
All 468 WANDS queries carry a gold product_class. This encodes every one
of them here, live, and scores two arms: the raw query snapped directly, and a label
written by gemini‑3.5‑flash‑lite then snapped. The second arm is what a
server round-trip buys you.
| arm | acc@1 | acc@3 | measured |
|---|
Snapping the raw query is the whole classifier here, and that is the
finding rather than a shortcut. Asking a small local model to write the label first
makes it worse: Pleias Monad (57M) and Baguettotron (321M) score
0.425 and 0.400 acc@1 against this encoder’s baseline, because they echo the query
or drift into invented wording. What a cheap remote model adds is not reasoning
but a prior over how taxonomies name things — and that is the first thing a
shrinking model loses.
Shipping all 860 labels to a model and asking for a constrained choice scores 0.701, well above anything on this page. That is the honest ceiling. This pattern earns its place when the vocabulary will not fit in a prompt, hits a provider enum cap, or costs too much per call at volume.
Method, arms and artifacts: oaustegard/experiments/hypothetical-classification. Pattern after Doug Turnbull, “Don’t classify. Hallucinate!”