ExCoR
ExCoR · Exact Coalitions for Rankers

Why is this document ranked above that one?

ExCoR explains the order of a dense retriever's whole ranked list. It groups the passages of the ranked documents into named topics and measures how much each topic holds the order together. Every masking is scored exactly from cached vectors, without re-encoding.

Scroll to follow one real query, step by step ↓
How it works

One real query, from ranking to explanation

Scroll through the seven steps of the pipeline. Every number on the right comes from a real explanation: .

Step 1 · Input

A query and its ranked list

The ranker returns the best documents for the query. We show the first . ExCoR explains this order: the whole list, not one document at a time.

Step 2 · Chunk & encode

Chunks, encoded once

Each document is cut into non-overlapping chunks of tokens, each encoded independently and cached.

With MaxP, a document's score is the similarity of its best chunk (outlined) to the query.

Hover a chunk to read it.

Step 3 · Group & name

Topics shared across documents

k-means clusters the chunks of the documents into k = groups, local to this query and shared across documents. An LLM names each group from its most central chunks.

In colour: the groups that turn out most important. In grey: the other groups.

Step 4 · Coalition

Remove groups, rescore exactly

A coalition is the set of groups we keep. Here we drop and rescore each document from its remaining chunks.

Since chunks are encoded independently, deleting text is the same as dropping cached vectors. The new scores are exact, with no re-encoding, and the list reorders.

Step 5 · Value

How much of the order survives?

The value v(S) of a coalition is the NDCG of the new order against the original one: 1 when the order is intact.

Without these two groups, v(S) = . With no group at all, every document is empty and tied: v(∅) = .

Step 6 · Attribute

100,000 coalitions, one Shapley value per group

Each coalition costs a few vector operations, so ExCoR scores 100,000 random coalitions per query. KernelSHAP turns them into a Shapley value φ per group: its average contribution to keeping the order.

The values add up: v(∅) + Σφ = v(full) = 1. This explanation took s on one GPU.

Step 7 · Explain

Read the explanation

The groups with the largest φ explain the order of the list. A pairwise question, , is read from the same attributions: compare the groups present in one document and absent from the other.

A reading of the listwise attributions, not a separate pairwise method.

Query
v(S) = NDCG( new order | original order )
0coalitions scored
Results

Fast, stable and coherent

Figures from the paper's experiments. Each one gives its source.

0.3s / query
to explain a top-50 list with 100,000 coalitions, against 168–411 s for ChunkGroupSHAP (re-run, 5,000 coalitions): about three orders of magnitude faster.
E5-small, one H100 · AILA, FinQA, FinanceBench
0.93–0.95
Kendall τ between attributions from 100,000 coalitions and a 1,000,000-coalition reference, against 0.72–0.79 at the 5,000 coalitions of ChunkGroupSHAP.
10 encoders, mean and MaxP · RQ3
78–91%
of groups pass the intruder test (an LLM spots a foreign chunk among four of the group), against 18–23% for random groups. Chance is 20%.
MaxP, k = 100, 10 encoders · RQ4
0re-encodings
per coalition: documents are rescored from cached chunk vectors. Exact for rankers that average or max-pool independently encoded chunks.
10 embedders · 4 long-document benchmarks

Faithfulness and cost of listwise explanations

Fidelityb (higher is better) and seconds per query on one H100, for the E5-small ranker. Reported rows come from the ChunkGroupSHAP paper, whose times were measured on other hardware and are not shown. ExCoR: mean over three explanation seeds.
MethodAILAFinQAFinanceBenchTime (s)
ChunkGroupSHAP, k = 500 (reported)0.2320.3220.421–
ChunkGroupSHAP, k = 500 (re-run, variant)0.1400.3230.403168–395
ExCoR (mean)0.3840.3750.4430.3
ExCoR (MaxP)0.2570.3640.4100.3

See explanations for real queries

4 long-document benchmarks, 10 encoders, selected example queries with their named groups, documents and pairwise readings.

Explore examples