Source code for corerec.reranking.base
"""
Base classes for reranking stage.
Rerankers modify the ranked list to satisfy constraints beyond
pure relevance: diversity, fairness, business rules, etc.
"""
from abc import ABC, abstractmethod
from typing import Any, Dict, List, Optional, Union
from corerec.ranking.base import RankedCandidate, RankingResult
[docs]
class BaseReranker(ABC):
"""
Abstract base class for all rerankers.
A reranker takes a ranked list and modifies it to satisfy
additional constraints. Unlike rankers which focus on relevance,
rerankers balance relevance with other objectives.
Common reranking objectives:
- Diversity: avoid showing too-similar items
- Fairness: ensure exposure across item groups
- Freshness: boost recently added items
- Business: promote certain items, apply filters
"""
def __init__(self, name: Optional[str] = None):
self.name = name or self.__class__.__name__
[docs]
@abstractmethod
def rerank(
self,
ranked: Union[List[RankedCandidate], RankingResult],
context: Optional[Dict[str, Any]] = None,
**kwargs
) -> RankingResult:
"""
Rerank the candidates.
Args:
ranked: ranked candidates from Stage 2
context: user context, constraints, etc.
**kwargs: reranker-specific parameters
Returns:
RankingResult with reranked candidates
"""
pass
def _to_list(
self,
ranked: Union[List[RankedCandidate], RankingResult]
) -> List[RankedCandidate]:
"""Convert input to list."""
if isinstance(ranked, RankingResult):
return list(ranked.candidates)
return list(ranked)
def __repr__(self) -> str:
return f"{self.__class__.__name__}(name={self.name})"