RePlay 是一个先进的框架,旨在促进推荐系统的开发和评估。它提供了一套强大的工具,涵盖了推荐系统管道的整个生命周期:
🚀 特性:
- 数据预处理和拆分: 简化推荐系统的数据准备过程,确保数据结构和格式最优,以便高效处理。
- 广泛的推荐模型: 支持从最先进到常用基线的推荐模型的构建,并评估它们的性能和质量。
- 超参数优化: 提供工具来微调模型参数,以实现最佳性能,降低优化过程的复杂性。
- 全面的评估指标: 包含广泛的评估指标,用于评估推荐模型的准确性和有效性。
- 模型集成和混合: 支持结合多个模型的预测并创建两级(集成)模型,以提高推荐质量。
- 无缝模式转换: 方便从离线实验到在线生产环境的轻松过渡,确保可扩展性和灵活性。
💻 硬件和环境兼容性:
- 多样化硬件支持: 兼容各种硬件配置,包括 CPU、GPU、多 GPU。
- 集群计算集成: 与 PySpark 集成以实现分布式计算,为大规模推荐系统提供可扩展性。
📖 文档可在此处获取。
目录
🔧 安装
默认推荐通过 pip
包管理器进行安装:
pip install replay-rec
这种情况下,将安装不包含 PySpark
和 PyTorch
依赖的 core
包。
同时 experimental
子模块也不会被安装。
要安装 experimental
子模块,请指定带有 rc0
后缀的版本。
例如:
pip install replay-rec==XX.YY.ZZrc0
附加功能
除了核心包之外,还提供了几个附加功能,包括:
[spark]
:安装 PySpark 功能[torch]
:安装 PyTorch 和 Lightning 功能[all]
:[spark]
[torch]
示例:
# 安装带有 PySpark 依赖的核心包
pip install replay-rec[spark]
# 安装带有实验子模块和 PySpark 依赖的包
pip install replay-rec[spark]==XX.YY.ZZrc0
要从源代码构建 RePlay,请使用此说明。
如果在安装 RePlay 过程中遇到错误,请查看故障排除指南。
📈 快速入门(基于 PySpark)
from rs_datasets import MovieLens
from replay.data import Dataset, FeatureHint, FeatureInfo, FeatureSchema, FeatureType
from replay.data.dataset_utils import DatasetLabelEncoder
from replay.metrics import HitRate, NDCG, Experiment
from replay.models import ItemKNN
from replay.utils.spark_utils import convert2spark
from replay.utils.session_handler import State
from replay.splitters import RatioSplitter
spark = State().session
ml_1m = MovieLens("1m")
K=10
# 数据预处理
interactions = convert2spark(ml_1m.ratings)
# 数据拆分
splitter = RatioSplitter(
test_size=0.3,
divide_column="user_id",
query_column="user_id",
item_column="item_id",
timestamp_column="timestamp",
drop_cold_items=True,
drop_cold_users=True,
)
train, test = splitter.split(interactions)
# 数据集创建
feature_schema = FeatureSchema(
[
FeatureInfo(
column="user_id",
feature_type=FeatureType.CATEGORICAL,
feature_hint=FeatureHint.QUERY_ID,
),
FeatureInfo(
column="item_id",
feature_type=FeatureType.CATEGORICAL,
feature_hint=FeatureHint.ITEM_ID,
),
FeatureInfo(
column="rating",
feature_type=FeatureType.NUMERICAL,
feature_hint=FeatureHint.RATING,
),
FeatureInfo(
column="timestamp",
feature_type=FeatureType.NUMERICAL,
feature_hint=FeatureHint.TIMESTAMP,
),
]
)
train_dataset = Dataset(
feature_schema=feature_schema,
interactions=train,
)
test_dataset = Dataset(
feature_schema=feature_schema,
interactions=test,
)
# 数据编码
encoder = DatasetLabelEncoder()
train_dataset = encoder.fit_transform(train_dataset)
test_dataset = encoder.transform(test_dataset)
# 模型训练
model = ItemKNN()
model.fit(train_dataset)
# 模型推理
encoded_recs = model.predict(
dataset=train_dataset,
k=K,
queries=test_dataset.query_ids,
filter_seen_items=True,
)
recs = encoder.query_and_item_id_encoder.inverse_transform(encoded_recs)
# 模型评估
metrics = Experiment(
[NDCG(K), HitRate(K)],
test,
query_column="user_id",
item_column="item_id",
rating_column="rating",
)
metrics.add_result("ItemKNN", recs)
print(metrics.results)
📑 资源
使用示例
- 01_replay_basics.ipynb - RePlay 入门。
- 02_models_comparison.ipynb - 在 MovieLens-1M 数据集 上可重现的模型比较。
- 03_features_preprocessing_and_lightFM.ipynb - 使用 pyspark 进行特征预处理的 LightFM 示例。
- 04_splitters.ipynb - RePlay 数据分割器的使用示例。
- 05_feature_generators.ipynb - 使用 RePlay 进行特征生成。
- 06_item2item_recommendations.ipynb - 物品到物品推荐示例。
- 07_filters.ipynb - 过滤器的使用示例。
- 08_recommending_for_categories.ipynb - 产品类别推荐示例。
- 09_sasrec_example.ipynb - 使用变换器生成推荐的示例。
视频和论文
-
视频指南:
-
研究论文:
- 将糟粕变成黄金损失:BERT4Rec 真的比 SASRec 更好吗? Anton Klenitskiy, Alexey Vasilev. 发表于第 17 届 ACM 推荐系统会议 (RecSys '23)
- 上下文的长尾:它存在吗?重要吗? Konstantin Bauman, Alexey Vasilev, Alexander Tuzhilin. 发表于上下文感知推荐系统研讨会 (CARS) (RecSys '22)
- 基于强化学习的推荐系统的多目标评估 Alexey Grishanov, Anastasia Ianina, Konstantin Vorontsov. 发表于第 16 届 ACM 推荐系统会议 (RecSys '22)
- 推荐系统中的质量指标:我们是否一致地计算指标? Yan-Martin Tamm, Rinchin Damdinov, Alexey Vasilev. 发表于第 15 届 ACM 推荐系统会议 (RecSys '21)
💡 为 RePlay 做贡献
我们欢迎社区贡献。详情请查看我们的贡献指南。