Data And Datasets
RecDistillery trains and evaluates recommendation models from interaction
splits stored under data/<dataset>/. Dataset preprocessing is based on
DataRec, while the training pipeline consumes encoded PyTorch-ready interaction
objects from recdistill.data.
Dataset Layout
Each dataset is expected to expose the canonical split files:
The example dataset configs live in:
Preparation Scripts
Dataset-specific preparation entry points are stored in
scripts/data_preparation/:
scripts/data_preparation/amazon_cd_2014.py
scripts/data_preparation/bookcrossing.py
scripts/data_preparation/citeulike.py
These scripts prepare the split files consumed by the training and evaluation loaders. They are intended as examples, while the framework can be extended to any dataset either directly available in DataRec or loaded through its multi-format data interfaces.
Runtime Data Objects
InteractionBatch
dataclass
Source code in recdistill/data/batch.py
users: torch.Tensor
instance-attribute
pos_items: torch.Tensor
instance-attribute
neg_items: torch.Tensor
instance-attribute
unique_users: torch.Tensor
property
unique_items: torch.Tensor
property
__init__(users: torch.Tensor, pos_items: torch.Tensor, neg_items: torch.Tensor) -> None
RRDAuxBatch
dataclass
Source code in recdistill/data/batch.py
users: torch.Tensor
instance-attribute
interesting_items: torch.Tensor
instance-attribute
uninteresting_items: torch.Tensor
instance-attribute
__init__(users: torch.Tensor, interesting_items: torch.Tensor, uninteresting_items: torch.Tensor) -> None
UnKDAuxBatch
dataclass
Source code in recdistill/data/batch.py
users: torch.Tensor
instance-attribute
pos_items: torch.Tensor
instance-attribute
neg_items: torch.Tensor
instance-attribute
__init__(users: torch.Tensor, pos_items: torch.Tensor, neg_items: torch.Tensor) -> None
InteractionDataset
dataclass
Source code in recdistill/data/interactions.py
num_users: int
instance-attribute
num_items: int
instance-attribute
train_dict: dict[int, set[int]]
instance-attribute
interactions: list[tuple[int, int]]
instance-attribute
__init__(num_users: int, num_items: int, train_dict: dict[int, set[int]], interactions: list[tuple[int, int]]) -> None
from_train_dict(train_dict: dict[int, set[int]] | dict[int, list[int]], num_users: int, num_items: int) -> 'InteractionDataset'
classmethod
Source code in recdistill/data/interactions.py
DataRec Loading
USER_COLUMNS = ('user', 'userId', 'user_id', 'uid', 0)
module-attribute
ITEM_COLUMNS = ('item', 'itemId', 'item_id', 'iid', 1)
module-attribute
RATING_COLUMNS = ('rating', 'ratings', 'score', 2)
module-attribute
TIMESTAMP_COLUMNS = ('timestamp', 'time', 'ts', 3)
module-attribute
SPLIT_ORDER = ('train', 'val', 'test')
module-attribute
LoadedSplit
dataclass
Source code in recdistill/data/datarec_loader.py
name: str
instance-attribute
path: Path
instance-attribute
frame: pd.DataFrame
instance-attribute
backend: str
instance-attribute
__init__(name: str, path: Path, frame: pd.DataFrame, backend: str) -> None
EncodedDataset
dataclass
Source code in recdistill/data/datarec_loader.py
frames: dict[str, pd.DataFrame]
instance-attribute
num_users: int
instance-attribute
num_items: int
instance-attribute
backend: str
instance-attribute
__init__(frames: dict[str, pd.DataFrame], num_users: int, num_items: int, backend: str) -> None
datarec_available() -> bool
load_split_frame(dataset_name: str, split_name: str, *, repo_root: Path | str = '.', use_datarec: bool = True) -> LoadedSplit
Load one dataset split through DataRec, falling back to pandas if unavailable.
Source code in recdistill/data/datarec_loader.py
load_frame_from_path(path: Path | str, *, dataset_name: str, split_name: str, columns: list[str] | None = None, use_datarec: bool = True) -> LoadedSplit
Source code in recdistill/data/datarec_loader.py
load_train_dataset(dataset_name: str, teacher_num_users: int, teacher_num_items: int, user_mapping: dict[int, int] | dict[str, int] | None = None, item_mapping: dict[int, int] | dict[str, int] | None = None, id_space: str | None = None) -> tuple[InteractionDataset, int]
Source code in recdistill/data/datarec_loader.py
load_eval_split(dataset_name: str, split_name: str, teacher_num_users: int, teacher_num_items: int, user_mapping: dict[int, int] | dict[str, int] | None = None, item_mapping: dict[int, int] | dict[str, int] | None = None, id_space: str | None = None) -> tuple[dict[int, set[int]], int]
Source code in recdistill/data/datarec_loader.py
load_interaction_dataset(dataset_name: str, user_mapping: dict[int, int] | dict[str, int] | None = None, item_mapping: dict[int, int] | dict[str, int] | None = None, num_users: int | None = None, num_items: int | None = None, id_space: str | None = None) -> InteractionDataset
Source code in recdistill/data/datarec_loader.py
resolve_teacher_dataset_mappings(metadata: dict[str, Any] | None, *, dataset_name: str) -> tuple[dict[int, int] | dict[str, int] | None, dict[int, int] | dict[str, int] | None, str]
Source code in recdistill/data/datarec_loader.py
load_ground_truth_split(dataset_name: str, split_name: str, num_users: int | None = None, num_items: int | None = None, user_mapping: dict[int, int] | dict[str, int] | None = None, item_mapping: dict[int, int] | dict[str, int] | None = None, id_space: str | None = None) -> tuple[dict[int, set[int]], int]
Source code in recdistill/data/datarec_loader.py
load_encoded_dataset(dataset_name: str, *, repo_root: Path | str = '.') -> EncodedDataset
Load all splits and apply one shared DataRec user/item encoding.