GEO /

Stop Fine-Tuning Embeddings

Parsec

TLDR: Vertical AI teams are spending engineer-months fine-tuning embeddings for ~10 percentage points of Recall@10. The encoder isn't the ceiling. Wrap the same model in a different retrieval architecture and NDCG@10 lifts 30–90 percentage points in under 5 ms. Run the A/B before the next fine-tune sprint. Three before-and-after rescue cards: Qwen2 59 to 98, E5 0 to 91, Jina v3 23 to 96, each on a different corpus. Encoder fine-tuning is the default move when a vertical AI team needs more recall. The recipe never changes: a couple of GPUs for a day, synthetic query-document pairs, MultipleNegativesRankingLoss, train, measure ~10 percentage points on Recall@10, ship. It works. Atlassian famously walked Recall@60 from 0.75 to 0.95 with this exact method. It's also the wrong lever for the size of the problem. The architecture sitting next to the encoder buys 30 to 90 percentage points on the same NDCG@10, on the same encoder, with no fine-tune. The rescue effect: Pick an embedding model. Don't fine-tune it. Wrap the model in a different retrieval architecture and measure. Qwen2-7B on Natural Questions: NDCG@10 lifts from 59% encoder alone to 98% encoder plus Dasein. Average rank of the right answer goes from 46 to 1.6. Added overhead is under 5 ms per query. E5 on Natural Questions: NDCG@10 goes from 0% to 91%. The starting score isn't a typo — E5's geometry breaks on NQ on its own. The same E5 model wrapped in the architecture lands at 91%, with average rank going from 37 to 1.1. Jina v3 on FEVER: NDCG@10 goes from 23% to 96%. Average rank goes from 79 to 2.34. Three encoder families, three different BEIR corpora, the same pattern. Average rank before and after on Qwen2, E5, and Jina v3, log scale. Why this works: The mechanism is boring once you see it. A dense encoder produces a similarity-ranked candidate set. The ranking inside that set comes from cosine similarity in the encoder's learned space. On a lexical query — a statute number, a drug name, a CUSIP, a GRI taxonomy code — the right document is usually in the dense candidate set but mis-ranked inside it. Right answer at rank 5 in dense, rank 1 in BM25. Per-query α prediction reads the query and picks the dense/BM25 fusion weight for that query. Lexical query, lower α, lean BM25, pull the right document to rank 1. Semantic query, α near 1.0, stay dense and get out of the way. That's where most of the rescue-effect lift comes from. The compressed index keeps the fusion geometry tractable at scale. Per-query top-K trims the reader's read budget on queries where the top-1 is already confident. None of this touches the encoder. The encoder keeps doing the encoder job. The architecture does a job the encoder was never built to do. A fine-tuned encoder and the architecture work on different layers. The fine-tune lifts the candidate set the encoder produces. Per-query α and per-query K work on that candidate set, not on the encoder weights. They don't conflict. A fine-tuned encoder is a perfectly fine encoder to wrap the architecture around. Multiple encoders feeding into one Dasein architecture layer — pick your encoder, the architecture covers the recall gap. What this changes about your roadmap: The strategic question shifts. Old question: Which encoder gets us two more points of recall? That's the fine-tune question. Answer: a quarter of ML engineer time for ~10 percentage points on Recall@10. New question: Which encoder is right for our domain and our operational constraints? Pick clinical-BERT for clinical text. Pick a finance-tuned encoder for filings. Pick text-embedding-3-large if your CISO standardized there. Trust the architecture to cover the gap. The rescue numbers above suggest 30–90 percentage points from the architecture, which is three to nine times what a typical fine-tune buys. Three knock-on consequences. Encoder switches become cheap. A new state-of-the-art encoder ships every six to eight weeks. If your recall ceiling depends on a custom fine-tuned model, you've built yourself a switching cost that blocks adopting the next better encoder. You can pick the encoder your CISO approves. Vendor policy, data residency, on-prem requirements — these constraints often eliminate the encoders that fine-tune best. The architecture takes that constraint off the table. You reclaim a quarter of ML engineer time that was scheduled for marginal recall gains. What to do with the reclaimed engineer-months: Two pieces of work generate more leverage than another fine-tune. First, a domain-specific eval harness. A thousand of your real customer queries with ground-truth labels, run against your stack on every change. Most vertical AI teams find they don't have this when they go to look. Without it, every improvement is a guess. With it, every change is an experiment. Second, cite-back UX. The product surface that shows the cited passage, the citation count, the source linkage, the chain of how the agent got to its answer. Your customers verify every claim because their work depends on the answer being right. Cite-back is what renewal is built on. The test before you decide: Pick the encoder you ship today — the fine-tuned one if you have it. Pick 100 queries your product missed last quarter. Log what your current stack returned: dense top-K, what the reranker promoted, where the right document landed. Now run the same 100 queries through Dasein wrapped around the same encoder. The portable variant is an afternoon of wiring. Same encoder, same index, same BM25. Measure NDCG@10 and average rank. If the lift lands on the rescue pattern, the next fine-tune sprint comes off the roadmap and the engineer-months go where they actually move the product.