AI agents

Confidence From Span Scores: Citing Versus Escalating

Antonio Evans9 min read

A horizontal score axis from 0 to 1 with two vertical cut points drawn on it, dividing the axis into three labeled zones: the low zone routes to a human reviewer, the middle zone attaches a source link to the answer.
Key points

Key points

  1. 1A span score measures how well the exact answer words are backed by text in the retrieved source, so it works as a router rather than a quality badge.
  2. 2Sort scored answers on a labeled sample and cut twice: one high point to ship unchanged, one middle band to ship with the span linked, one low point to escalate.
  3. 3Set the escalation cut so weekly escalations fit what reviewers can actually clear, then accept the accuracy that capacity buys.
  4. 4Re-derive both cut points after any change to the retriever, verifier or corpus, because scores are only comparable within one fixed pipeline.

What a span score actually measures

An extractive answer is a set of tokens lifted from a source passage, not a paraphrase. Extractive question answering, in the formal sense, selects the start and end positions of the answer inside a given context, or a set of discontiguous spans for multi-part answers (Lee et al. on recurrent span representations, MultiSpanQA). That property is the reason extractive pipelines are preferred where traceability matters: the answer can be pointed at in the source (Ontotext's overview of extractive QA).

A verification pass adds a number on top. It checks the span, meaning the exact words returned, against the evidence and produces a support score. In RAG terms this is a faithfulness check: every claim in the answer must be supported by the retrieved context, which makes faithfulness the most important generation metric in retrieval-grounded systems (Evidently AI's RAG evaluation guide, Anyscale's RAG evaluation docs).

The distinction that matters operationally: a span score is a confidence estimator, and confidence estimators are exactly what selective prediction is built on. A selective predictor combines a prediction function with a selector that decides whether to answer or abstain, trading coverage (the fraction of inputs answered) against risk (error on answered inputs) (Neeraj Varshney on selective prediction). Your span score is that selector's input. Single-threshold abstention is the simplest version, and it is usually the wrong shape for an extractive product, because it throws away the option that costs almost nothing: showing the answer with its source attached.

One warning before any threshold work. Scores from different systems are not on the same scale, and even reasonable evaluation setups can produce poorly calibrated confidence: an evidence-calibrated RAG study on SQuAD 2.0 reports an AUROC of 0.5475 and expected calibration error of 0.1144 for its sufficiency calibration, which is close to chance discrimination (the evidence-calibrated RAG paper). Read that as a design instruction: do not trust the absolute number, trust the ranking on your own labeled sample.

Reading the score distribution before choosing cut points

Collect a labeled sample of real traffic, not a synthetic set. Synthetic question-answer pairs help bootstrap, but they carry limitations that make them a weak basis for production thresholds (Evidently AI, Anyscale). Pull a few hundred to a few thousand logged questions, capture the answer, the span, the source chunk and the score, then hand-label each answer into one of four buckets:

LabelMeaningWhat the rule should do
Correct and fully supportedAnswer words match the question and the span proves itShip
Correct but thin supportRight words, weak or partial span supportShip with source link
Wrong but plausibleFluent, on topic, not the answerEscalate
Wrong because evidence is missingRetriever never fetched the passageEscalate, and log as a retrieval failure

That fourth row is the one teams skip. Retrieval quality sets the ceiling on final answer quality, and a retriever that misses the passage cannot be rescued by a better verifier (Anyscale). If your low-score bucket is dominated by missing-evidence cases, a threshold change will not help; fix retrieval first.

Then plot the label mix by score decile. What you are looking for is where the composition flips. A worked example with illustrative numbers:

  • Deciles 9 and 10: about 97 percent correct and supported.
  • Deciles 6 to 8: about 88 percent correct, but only about half with a clean span match.
  • Deciles 3 to 5: about 60 percent correct, and most correct ones are short factoids.
  • Deciles 1 and 2: under 25 percent correct, with many "no evidence retrieved" cases.

The first three figures suggest a high cut around the boundary of decile 8 (ship unchanged), a middle band across deciles 3 to 7 (ship with the span quoted and linked), and escalation below decile 3. The exact numbers are yours to find; the shape is the reusable part.

Two measurement notes. Answer length matters: a large-scale analysis of distilBERT on SQuAD found an inverse correlation between answer length and performance (Farea and Emmert-Streib in JAIR), so a long multi-span answer with a respectable score is riskier than a two-word one with the same score. And exact match is not one metric: different definitions of exact match differ by amounts comparable to reported system improvements, so two reviewers labeling "correct" may disagree more than you expect (JAIR). Write the labeling rubric down before the first batch.

Why two cut points beat one

A single threshold gives you two outcomes: answer or abstain. A two-cut rule gives you three, and the middle outcome is nearly free. Quoting the supporting span and linking the source lets a reader verify a claim in seconds. It is the same contract as a search engine that highlights the answer passage with its evidence (Ontotext). For an extractive system the span is already in hand; attaching it costs a rendering change, not a model call.

The routing rule, stated plainly:

ship                 if span_score >= high_cut
ship_with_source     if low_cut <= span_score < high_cut
escalate_to_human    if span_score < low_cut

Choosing the two points is a coverage-risk decision at each boundary, and the two boundaries have different costs. Above high_cut you accept the residual error rate in that band. Between the cuts you accept a smaller risk because the reader can check. Below low_cut you pay a human.

The decision rule most teams miss: set high_cut where the answered-band error rate matches what the product tolerates without a source, and set low_cut from reviewer capacity, not from accuracy. Accuracy maximization would send far more answers to people than anyone can process; the queue then becomes the real product, and stale escalations are worse than a linked answer.

A second rule: move the cuts, do not add a fourth band. Three states map to three UI behaviors and three operational owners. Every extra band multiplies the cases your QA team has to reason about when something goes wrong.

Keeping escalation inside reviewer capacity

Escalation volume is a budget line. Compute it directly from the score distribution: the share of traffic below low_cut times weekly query volume gives weekly escalations. If your labeled sample says 4 percent of traffic falls below the low cut and you serve 50,000 queries a week, that is 2,000 escalations. At a generous 30 seconds of reviewer time each, that is about 17 reviewer hours, or roughly half a full-time reviewer at 35 productive hours. Those numbers are arithmetic on your own inputs, not benchmarks.

Then decide what to do when the budget is exceeded, because it will be:

SituationWrong reflexBetter move
Escalations exceed capacity for a weekLower low_cut quietlyQueue with an explicit "answered with source pending" state
A document set change spikes low scoresRetune the verifier promptCheck retrieval first, then re-score the sample
Reviewers disagree on the same answersAdd reviewer headcountFix the labeling rubric, then re-measure agreement
Product wants fewer linked answersRaise high_cutShow the linked band's error rate; let the product own the trade
Low scores mostly "evidence missing"Lower low_cutFix retrieval, since calibration cannot outrun coverage

Note the shape of the middle row. When the retriever or corpus shifts, do not assume the verifier broke. The SQuAD 2.0 study found that retrieval coverage alone is insufficient to prevent unsupported answers and called for stronger evidence calibration (the evidence-calibrated RAG paper). Both layers need checking, in that order.

A capacity-safety detail: if the queue backs up, prefer showing the linked answer with a clear "unverified" marker over silent delay. A linked span that a reader can check is a defensible degraded mode. A blocked question is not.

Re-checking the rule after any pipeline change

Span scores are only comparable inside one pipeline. Change the retriever's top-k, swap the embedding model, edit the chunking, upgrade the verifier, or re-index the corpus, and the distribution moves. Cut points derived on the old pipeline no longer mean what they meant.

Practical protocol after each change:

  1. Freeze a fixed evaluation set of questions with hand-scored answers, separate from the tuning sample. Reuse it across versions so movement is comparable.
  2. Re-score the frozen set through the new pipeline and re-plot the label mix by score decile.
  3. Recompute weekly escalation volume from the new distribution against current traffic.
  4. Compare the three band error rates against the previous run. If the linked band's error rate rose past tolerance, raise high_cut before touching low_cut.
  5. Hand-score a fresh slice of live answers, not just the frozen set, to catch drift the frozen set cannot see.

Sentence window retrieval is a good example of why step 2 is not optional: retrieving a sentence but passing surrounding sentences as context improves the generator's view while the matched unit stays small (Guillaume Laforge on sentence window retrieval). That change alters what the verifier sees and how spans align to sources, so scores shift even though nothing about the question set changed.

The same discipline applies to retrieval fusion. Reciprocal rank fusion merges ranked lists by position rather than raw score, because BM25 scores are unbounded and cosine similarities sit in a bounded range, so the raw numbers are not comparable (OpenSearch's RRF introduction, Abhishek Thakur's RRF explainer). Hybrid retrieval measurably changes what reaches the verifier (a hybrid search reference with benchmark figures, pgEdge on hybrid search in PostgreSQL). The governing principle is identical: never compare numbers across scales, so never reuse a cut point across pipelines.

Rerankers deserve the same caution. A reranker improves ordering, not recall, and rerankers differ widely in cost, latency and quality, so adding or swapping one moves the score distribution even when the underlying verifier is untouched (Thinking Loop's reranker comparison).

Implementing the router

The router itself is small. What matters is that every routing decision is logged with the score, both cuts, the pipeline version and the outcome label once a human has judged it. That log is your next tuning sample.

def route(answer, span, score, cfg):
    if score >= cfg.high_cut:
        return "ship", answer
    if score >= cfg.low_cut:
        return "ship_with_source", answer, span, cfg.source_url
    return "escalate", answer, span, cfg.queue

Two operational rules for the implementation. Version the cut points alongside the pipeline, so an answer served last month can be explained by the rule that was live then. And record the middle band separately in analytics: if linked answers get clicked and then flagged, the linked band's error rate is higher than your sample estimated, and high_cut needs to rise.

For teams running multiple model types behind a verification pass (text verifier, a cross-encoder reranker, an embedding model for the retrieval side), running them through one API keeps the pipeline versioning simple: Quanta Inference exposes text, embedding and reranking-style workloads behind one OpenAI-compatible key, which makes it practical to re-score a frozen evaluation set after every change instead of deferring it.

Worked example: from scores to a shipped rule

Put the pieces together with illustrative numbers. A support knowledge base answers with extracted procedures. A labeled sample of 1,000 logged answers yields:

Band (illustrative)Share of trafficCorrect and supportedDecision
Score at or above high cut62 percent96 percentShip unchanged
Between the cuts31 percent88 percent, span match weakerShip with source linked
Below low cut7 percent41 percentEscalate

Check the capacity arithmetic. At 40,000 queries a week, 7 percent is 2,800 escalations. At 30 seconds each that is about 23 reviewer hours weekly, which fits one reviewer with headroom. The linked band's 12 percent error rate sounds alarming until you check the outcome: those are answers the reader can verify against the quoted span in seconds, so the residual risk is bounded by how easy the source is to read. The shipped band's 4 percent error rate is the one to argue about with the product owner, and high_cut is the lever for that conversation.

Now the decision rule in one sentence: if you can only move one cut, move high_cut when the product cares about unverified wrong answers, and move low_cut when reviewers are drowning, but never move either without re-checking the frozen set.

If the escalation queue needs real throughput rather than a shared inbox, Quanta Experts is a way to route low-score cases to an agent that reads the context and returns a finished, reviewed deliverable, which changes the capacity math in the table above.

FAQ

FAQ

What is a span score?

A span score is a number produced by a verification pass that expresses how well the supporting text in the source backs the exact words of an extractive answer. Because extractive answers are lifted verbatim from the source, the score can be checked against the precise answer span rather than against a paraphrased claim (Ontotext).

Why use two cut points instead of one?

One cut point forces a binary choice between answering and abstaining. A middle band where the answer ships with its supporting span linked or quoted gives readers a way to verify cheaply, at the cost of a small rendering change rather than another model call. That is the coverage-risk tradeoff made finer-grained, which is the point of selective prediction (Neeraj Varshney).

How do I set the escalation cut point?

Set it from reviewer capacity, not from accuracy. Compute the share of traffic below a candidate cut, multiply by weekly volume, and convert to reviewer hours. If the queue exceeds capacity, the threshold is too low regardless of what it would do to accuracy, because a stale escalation is worse than a linked answer a reader can check.

Why do cut points need re-deriving after a retriever or corpus change?

Scores are only comparable within one pipeline, and retrieval quality sets the ceiling on final answer quality (Anyscale). Changing retrieval, chunking, the verifier or the corpus moves the score distribution, so a cut point tuned on the old pipeline will misroute traffic. Re-score a frozen hand-labeled set after every change.

How do I know the rule is still working in production?

Hand-score a fresh slice of live answers regularly and track the three band error rates separately, especially the middle band, since its errors appear as reader flags on linked answers. Retrieval coverage alone does not prevent unsupported answers, so monitor evidence coverage alongside the scores (the evidence-calibrated RAG paper).

Sources

Sources

  1. Learning Recurrent Span Representations for Extractive ...
  2. MultiSpanQA: A Dataset for Multi-Span Question Answering
  3. What Is Extractive Question Answering?
  4. A complete guide to RAG evaluation: metrics, testing and ...
  5. RAG evaluation
  6. Selective Prediction in Natural Language Processing
  7. Evidence-Calibrated RAG for Unanswerable Question ...
  8. Experimental Design of Extractive Question-Answering ...
  9. Advanced RAG, Sentence Window Retrieval
  10. Introducing reciprocal rank fusion for hybrid search
  11. What is reciprocal rank fusion in hybrid search?
  12. Hybrid Search: BM25, Vector & Reranking Reference 2026
  13. BM25, Sparse Vectors, and Reciprocal Rank Fusion
  14. 12 Vector Rerankers Compared: Cost vs Quality
About the author

About the author

Antonio Evans
Antonio Evans

Antonio Evans is the founder of Quanta Intelligence and a fractional CTO who builds HIPAA-ready AI systems for health and life-science companies. Before that he was technical co-founder of FriendsEAT for twenty years, CEO of Socialdraft, and a data engineer at IBM. Antonio lives with his dog Santino in Lisbon, Portugal.

All articles