| name | e2rank-embedding-reranking |
| title | E2Rank: Text Embedding as Effective and Efficient Listwise Reranker |
| version | 0.0.2 |
| engine | skillxiv-v0.0.2-claude-opus-4.6 |
| license | MIT |
| url | https://arxiv.org/abs/2510.22733 |
| keywords | ["Reranking","Embeddings","Retrieval","Information Retrieval","Efficiency"] |
| description | Extends text embedding models to perform listwise reranking through continued training on ranking objectives. Constructs listwise prompts from queries and top-K candidates, leveraging pseudo-relevance feedback while maintaining embedding model efficiency. Unifies retrieval and reranking in single model. |
E2Rank: Unified Retrieval and Reranking with Embeddings
Text embeddings excel at retrieval but struggle with reranking. E2Rank extends embedding models using listwise training objectives, enabling them to perform both tasks efficiently from a single model.
By training on listwise ranking, embeddings learn to interpret similarity differently for reranking tasks while preserving retrieval capabilities.
Core Concept
Key insight: embed ranking information in how similarity is computed, not just in what the embeddings represent:
- Standard retrieval: cosine similarity between query and document embeddings
- Enhanced reranking: learned ranking layer interprets similarity for ranking context
- Listwise training: use top-K candidates as context for ranking decisions
- Efficiency: single embedding model for both retrieval and reranking
Architecture Overview
- Text embedding encoder (unchanged from standard models)
- Listwise ranking prompt construction from query and candidates
- Learned ranking interpretation layer
- Joint training on retrieval and ranking objectives
Implementation Steps
Create listwise ranking prompts that provide rich context for ranking decisions. The prompt includes query and top-K candidates:
class ListwisePromptConstructor:
def __init__(self, query_template=None):
self.query_template = query_template or (
"Query: {query}\n"
"Candidates:\n{candidates}\n"
"Rank candidates by relevance."
)
def construct_ranking_prompt(self, query, candidates, scores=None):
"""Build listwise context prompt for ranking."""
candidate_text = "\n".join([
f"{i+1}. {cand}" for i, cand in (candidates)
])
prompt = .query_template.(
query=query,
candidates=candidate_text
)
prompt
():
training_pairs = []
query, ranked_docs (queries, doc_rankings):
topk_docs = ranked_docs[:top_k]
prompt = .construct_ranking_prompt(query, topk_docs)
rank, doc (topk_docs):
training_pairs.append({
: query,
: doc,
: rank,
: prompt
})
training_pairs