RecTools
文档 | 示例 | 教程 | 贡献指南 | 版本发布 | 开发者看板
RecTools 是一个易于使用的 Python 库,它使构建推荐系统的过程比以往任何时候都更简单、更快速、更有结构。它包括用于数据处理和指标计算的内置工具包,各种推荐模型,一些已有流行算法实现的封装,以及模型选择框架。其目标是将现成的解决方案和最佳实践集中在一处,使创建第一个最小可行产品和将模型部署到生产环境的过程变得尽可能快速和简单。
快速开始
准备数据:
wget https://files.grouplens.org/datasets/movielens/ml-1m.zip
unzip ml-1m.zip
import pandas as pd
from implicit.nearest_neighbours import TFIDFRecommender
from rectools import Columns
from rectools.dataset import Dataset
from rectools.models import ImplicitItemKNNWrapperModel
# 读取数据
ratings = pd.read_csv(
"ml-1m/ratings.dat",
sep="::",
engine="python", # 因为使用了2字符分隔符
header=None,
names=[Columns.User, Columns.Item, Columns.Weight, Columns.Datetime],
)
# 创建数据集
dataset = Dataset.construct(ratings)
# 训练模型
model = ImplicitItemKNNWrapperModel(TFIDFRecommender(K=10))
model.fit(dataset)
# 生成推荐
recos = model.recommend(
users=ratings[Columns.User].unique(),
dataset=dataset,
k=10,
filter_viewed=True,
)
安装
RecTools 已在 PyPI 上发布,因此你可以使用 pip
来安装它。
pip install rectools
默认版本不包含所有依赖项,因为有些依赖项只在特定功能中需要。可用的用户扩展如下:
lightfm
:添加 LightFM 模型的封装torch
:添加基于神经网络的模型visuals
:添加可视化工具nmslib
:添加快速 ANN 推荐器
安装扩展:
pip install rectools[扩展名]
安装所有扩展:
pip install rectools[all]
推荐模型
下表列出了 RecTools 中可用的推荐模型。 有关我们支持的模型的理论和实践深入探讨,请参阅推荐基线扩展教程。
模型 | 类型 | 描述 (🎏 表示用户/物品特征,🔆 表示热启动推断,❄️ 表示冷启动推断支持) | 教程和基准测试 |
---|---|---|---|
implicit ALS 封装 | 矩阵分解 | rectools.models.ImplicitALSWrapperModel - 用于隐式反馈的交替最小二乘矩阵分解算法。🎏 | 📙 理论与实践 🚀 [使用用户和物品特征提升50%的指标](https://github.com/MobileTeleSystems/RecTools/blob/main/examples/5_benchmark_iALS_with_features.ipynb |
implicit ItemKNN 封装 | 最近邻 | rectools.models.ImplicitItemKNNWrapperModel - 使用用户-物品交互矩阵中物品向量之间的距离计算物品-物品相似度矩阵的算法 | 📙 理论与实践 |
LightFM 封装 | 矩阵分解 | rectools.models.LightFMWrapperModel - 混合矩阵分解算法,利用用户和物品特征,支持多种损失函数。🎏 🔆 ❄️ | 📙 理论与实践 🚀 [使用RecTools推断速度提升10-25倍](https://github.com/MobileTeleSystems/RecTools/blob/main/examples/6_benchmark_lightfm_inference.ipynb |
EASE | 线性自编码器 | rectools.models.EASEModel - 简单浅层自编码器实现,显式计算稠密的物品-物品相似度矩阵 | 📙 理论与实践 |
PureSVD | 矩阵分解 | rectools.models.PureSVDModel - 用户-物品交互矩阵的截断奇异值分解 | 📙 理论与实践 |
DSSM | 神经网络 | rectools.models.DSSMModel - 双塔神经网络模型,利用显式特征学习用户和物品嵌入,使用三元组损失进行学习。🎏 🔆 | - |
Popular | 启发式 | rectools.models.PopularModel - 经典基线,计算物品的流行度,还接受时间窗口和流行度计算类型等参数。❄️ | - |
Popular in Category | 启发式 | rectools.models.PopularInCategoryModel - 计算类别内流行度并应用混合策略以提高多样性的模型。❄️ | - |
Random | 启发式 | rectools.models.RandomModel - 简单随机算法,用于基准测试新颖性、覆盖率等。❄️ | - |
- 所有模型遵循相同的接口。无例外
- 无需手动创建稀疏矩阵或映射ID。准备模型数据简单如
dataset = Dataset.construct(interactions_df)
- 拟合任何模型都简单如
model.fit(dataset)
- 获取推荐时可使用
filter_viewed
和items_to_recommend
选项 - 对于物品到物品的推荐,使用
recommend_to_items
方法 - 要向模型提供用户/物品特征,只需在构建
Dataset
时指定数据框。[查看我们的教程](https://github.com/MobileTeleSystems/RecTools/blob/main/examples/4_dataset_with_features.ipynb - 对于热启动/冷启动推断,只需在
recommend
或recommend_to_items
方法的users
或target_items
参数中提供所有必需的ID,并确保数据集中有热启动用户/物品的特征。无需其他操作,一切都可开箱即用。
贡献
[贡献指南](https://github.com/MobileTeleSystems/RecTools/blob/main/CONTRIBUTING.rst
安装所有依赖项
- 你必须安装
python>=3.8
和poetry>=1.5.0
- 确保没有激活的虚拟环境(如适用,请停用conda
base
) - 运行
make install
自动格式化运行
make format
代码检查运行
make lint
运行测试
make test
运行覆盖率测试
make coverage
删除虚拟环境运行
make clean
RecTools 团队
- Emiliy Feldman [维护者]
- Daria Tikhonovich [维护者]
- Alexander Butenko
- Andrey Semenov
- Mike Sokolov
- Maya Spirina
- Grigoriy Gusarov
先前的贡献者:Ildar Safilo [前维护者],Daniil Potapov [前维护者],Igor Belkov,Artem Senin,Mikhail Khasykov,Julia Karamnova,Maxim Lukin,Yuri Ulianov,Egor Kratkov,Azat Sibagatulin