我们发布了新版本 Recommenders 1.2.0!
自上次发布以来发生了很多变化。我们对 Python 3.8 到 3.11 进行了全面测试(大约 1800 次测试),升级了许多算法的性能,审查了笔记本,并进行了更多改进。
推荐者的目标是帮助研究人员、开发人员和爱好者制作一系列经典和最先进的推荐系统的原型、进行实验并将其投入生产。
Recommenders 是 Linux 人工智能和数据基金会下的一个项目。
该存储库包含构建推荐系统的示例和最佳实践,以 Jupyter 笔记本的形式提供。这些示例详细介绍了我们对五个关键任务的了解:
推荐器中提供了多个实用程序来支持常见任务,例如以不同算法期望的格式加载数据集、评估模型输出以及分割训练/测试数据。其中包括多种最先进算法的实现,供您在自己的应用程序中自学和定制。请参阅推荐器文档。
有关存储库的更详细概述,请参阅 wiki 页面上的文档。
推荐系统的一些实际应用场景,请参见场景。
我们推荐使用 conda 进行环境管理,使用 VS Code 进行开发。要安装推荐程序包并在 Linux/WSL 上运行示例笔记本:
# 1. Install gcc if it is not installed already. On Ubuntu, this could done by using the command
# sudo apt install gcc
# 2. Create and activate a new conda environment
conda create -n < environment_name > python=3.9
conda activate < environment_name >
# 3. Install the core recommenders package. It can run all the CPU notebooks.
pip install recommenders
# 4. create a Jupyter kernel
python -m ipykernel install --user --name < environment_name > --display-name < kernel_name >
# 5. Clone this repo within VSCode or using command line:
git clone https://github.com/recommenders-team/recommenders.git
# 6. Within VSCode:
# a. Open a notebook, e.g., examples/00_quick_start/sar_movielens.ipynb;
# b. Select Jupyter kernel <kernel_name>;
# c. Run the notebook.
有关其他平台(例如 Windows 和 macOS)上的设置和不同配置(例如 GPU、Spark 和实验功能)的更多信息,请参阅设置指南。
除了核心包之外,还提供了一些附加功能,包括:
[gpu]
:运行 GPU 模型所需。[spark]
:运行 Spark 模型所需。[dev]
:回购库开发所需。[all]
: [gpu]
| [spark]
| [dev]
[experimental]
:未经过彻底测试和/或可能需要额外安装步骤的型号。 下表列出了存储库中当前可用的推荐算法。笔记本在“示例”列下链接为“快速入门”,展示了易于运行的算法示例,或者“深入探讨”,详细解释了算法的数学和实现。
算法 | 类型 | 描述 | 例子 |
---|---|---|---|
交替最小二乘法 (ALS) | 协同过滤 | 用于大型数据集中显式或隐式反馈的矩阵分解算法,针对可扩展性和分布式计算能力进行了优化。它在 PySpark 环境中运行。 | 快速入门/深入研究 |
注意力异步奇异值分解 (A2SVD) * | 协同过滤 | 基于顺序的算法,旨在使用注意力机制捕获长期和短期用户偏好。它工作在CPU/GPU环境中。 | 快速启动 |
Cornac/贝叶斯个性化排名(BPR) | 协同过滤 | 用于通过隐式反馈预测项目排名的矩阵分解算法。它工作在CPU环境中。 | 深潜 |
Cornac/双边变分自动编码器 (BiVAE) | 协同过滤 | 二元数据的生成模型(例如,用户-项目交互)。它工作在CPU/GPU环境中。 | 深潜 |
卷积序列嵌入推荐(Caser) | 协同过滤 | 基于卷积的算法,旨在捕获用户的一般偏好和顺序模式。它工作在CPU/GPU环境中。 | 快速启动 |
深度知识感知网络 (DKN) * | 基于内容的过滤 | 深度学习算法结合了知识图和文章嵌入,用于提供新闻或文章推荐。它工作在CPU/GPU环境中。 | 快速入门/深入研究 |
极限深度分解机 (xDeepFM) * | 协同过滤 | 基于深度学习的算法,用于具有用户/项目特征的隐式和显式反馈。它工作在CPU/GPU环境中。 | 快速启动 |
FastAI 嵌入点偏差 (FAST) | 协同过滤 | 具有用户和项目的嵌入和偏差的通用算法。它工作在CPU/GPU环境中。 | 快速启动 |
LightFM/分解机 | 协同过滤 | 用于隐式和显式反馈的分解机算法。它工作在CPU环境中。 | 快速启动 |
LightGBM/梯度提升树* | 基于内容的过滤 | 梯度提升树算法,用于基于内容的问题中的快速训练和低内存使用。它适用于 CPU/GPU/PySpark 环境。 | CPU 快速入门 / PySpark 深入研究 |
光GCN | 协同过滤 | 深度学习算法简化了用于预测隐式反馈的 GCN 的设计。它工作在CPU/GPU环境中。 | 深潜 |
地理信息管理委员会* | 协同过滤 | 矩阵完成算法,使用黎曼共轭梯度优化考虑用户和项目特征,并遵循几何方法。它工作在CPU环境中。 | 快速启动 |
格鲁乌 | 协同过滤 | 基于序列的算法,旨在使用循环神经网络捕获长期和短期用户偏好。它工作在CPU/GPU环境中。 | 快速启动 |
多项式VAE | 协同过滤 | 用于预测用户/项目交互的生成模型。它工作在CPU/GPU环境中。 | 深潜 |
具有长期和短期用户表示的神经推荐 (LSTUR) * | 基于内容的过滤 | 用于通过长期和短期用户兴趣建模推荐新闻文章的神经推荐算法。它工作在CPU/GPU环境中。 | 快速启动 |
具有专注多视图学习的神经推荐 (NAML) * | 基于内容的过滤 | 通过多视图学习来推荐新闻文章的神经推荐算法。它工作在CPU/GPU环境中。 | 快速启动 |
神经协同过滤 (NCF) | 协同过滤 | 具有增强的用户/项目隐式反馈性能的深度学习算法。它工作在CPU/GPU环境中。 | 快速入门/深入研究 |
具有个性化注意力的神经推荐(NPA) * | 基于内容的过滤 | 利用个性化注意力网络推荐新闻文章的神经推荐算法。它工作在CPU/GPU环境中。 | 快速启动 |
具有多头自注意力 (NRMS) 的神经推荐* | 基于内容的过滤 | 用于推荐具有多头自注意力的新闻文章的神经推荐算法。它工作在CPU/GPU环境中。 | 快速启动 |
下一个项目推荐 (NextItNet) | 协同过滤 | 基于扩张卷积和残差网络的算法,旨在捕获顺序模式。它考虑用户/项目交互和功能。它工作在CPU/GPU环境中。 | 快速启动 |
受限玻尔兹曼机 (RBM) | 协同过滤 | 基于神经网络的算法,用于学习显式或隐式用户/项目反馈的潜在概率分布。它工作在CPU/GPU环境中。 | 快速入门/深入研究 |
黎曼低秩矩阵补全 (RLRMC) * | 协同过滤 | 使用黎曼共轭梯度优化的矩阵分解算法以较小的内存消耗来预测用户/项目交互。它工作在CPU环境中。 | 快速启动 |
简单推荐算法 (SAR) * | 协同过滤 | 基于相似性的隐式用户/项目反馈算法。它工作在CPU环境中。 | 快速入门/深入研究 |
自注意力顺序推荐 (SASRec) | 协同过滤 | 基于 Transformer 的顺序推荐算法。它工作在CPU/GPU环境中。 | 快速启动 |
短期和长期偏好综合推荐器(SLi-Rec) * | 协同过滤 | 基于顺序的算法,旨在使用注意力机制、时间感知控制器和内容感知控制器来捕获长期和短期用户偏好。它工作在CPU/GPU环境中。 | 快速启动 |
多兴趣感知顺序用户建模 (SUM) * | 协同过滤 | 一种基于增强记忆网络的顺序用户模型,旨在捕获用户的多种兴趣。它工作在CPU/GPU环境中。 | 快速启动 |
通过个性化变压器(SSEPT)的顺序推荐 | 协同过滤 | 基于 Transformer 的算法,用于具有用户嵌入的顺序推荐。它工作在CPU/GPU环境中。 | 快速启动 |
标准VAE | 协同过滤 | 用于预测用户/项目交互的生成模型。它工作在CPU/GPU环境中。 | 深潜 |
惊奇/奇异值分解 (SVD) | 协同过滤 | 用于预测小数据集中显式评分反馈的矩阵分解算法。它工作在CPU/GPU环境中。 | 深潜 |
词频 - 逆文档频率 (TF-IDF) | 基于内容的过滤 | 使用文本数据集进行基于内容的推荐的简单的基于相似性的算法。它工作在CPU环境中。 | 快速启动 |
Vowpal Wabbit (大众) * | 基于内容的过滤 | 快速的在线学习算法,非常适合用户特征/上下文不断变化的场景。它使用CPU进行在线学习。 | 深潜 |
宽而深 | 协同过滤 | 深度学习算法,可以记忆特征交互并概括用户特征。它工作在CPU/GPU环境中。 | 快速启动 |
xLearn/因式分解机 (FM) 和现场感知 FM (FFM) | 协同过滤 | 快速且内存高效的算法可预测具有用户/项目特征的标签。它工作在CPU/GPU环境中。 | 深潜 |
注意: *表示由 Microsoft 发明/贡献的算法。
独立或正在孵化的算法和实用程序是 contrib 文件夹的候选者。这将容纳可能不容易融入核心存储库的贡献,或者需要时间来重构或成熟代码并添加必要的测试。
算法 | 类型 | 描述 | 例子 |
---|---|---|---|
SARplus * | 协同过滤 | Spark SAR 的优化实现 | 快速启动 |
我们提供了一个基准笔记本来说明如何评估和比较不同的算法。在此笔记本中,MovieLens 数据集使用分层分割以 75/25 的比例分割为训练/测试集。使用下面的每种协同过滤算法来训练推荐模型。我们利用此处文献中报告的经验参数值。对于排名指标,我们使用k=10
(前 10 个推荐项目)。我们在标准 NC6s_v2 Azure DSVM(6 个 vCPU、112 GB 内存和 1 个 P100 GPU)上运行比较。 Spark ALS 以本地独立模式运行。在此表中,我们显示了在 Movielens 100k 上运行算法 15 个周期的结果。
算法 | 地图 | nDCG@k | 精度@k | 回忆@k | 均方根误差 | MAE | R 2 | 解释方差 |
---|---|---|---|---|---|---|---|---|
肌萎缩侧索硬化症 | 0.004732 | 0.044239 | 0.048462 | 0.017796 | 0.965038 | 0.753001 | 0.255647 | 0.251648 |
比VAE | 0.146126 | 0.475077 | 0.411771 | 0.219145 | 不适用 | 不适用 | 不适用 | 不适用 |
业务流程再造 | 0.132478 | 0.441997 | 0.388229 | 0.212522 | 不适用 | 不适用 | 不适用 | 不适用 |
快速人工智能 | 0.025503 | 0.147866 | 0.130329 | 0.053824 | 0.943084 | 0.744337 | 0.285308 | 0.287671 |
光GCN | 0.088526 | 0.419846 | 0.379626 | 0.144336 | 不适用 | 不适用 | 不适用 | 不适用 |
NCF | 0.107720 | 0.396118 | 0.347296 | 0.180775 | 不适用 | 不适用 | 不适用 | 不适用 |
SAR | 0.110591 | 0.382461 | 0.330753 | 0.176385 | 1.253805 | 1.048484 | -0.569363 | 0.030474 |
奇异值分解 | 0.012873 | 0.095930 | 0.091198 | 0.032783 | 0.938681 | 0.742690 | 0.291967 | 0.291971 |
该项目欢迎贡献和建议。在贡献之前,请参阅我们的贡献指南。
该项目遵守本行为准则,以便为所有人营造一个热情好客、鼓舞人心的社区。
这些测试是夜间构建,用于计算异步测试。 main
是我们的主要分支, staging
是我们的开发分支。我们使用 pytest 来测试推荐器中的 python 实用程序以及笔记本的推荐器笔记本执行器。
有关测试管道的更多信息,请参阅测试文档。
每晚构建测试每天在 AzureML 上运行。
构建类型 | 分支 | 地位 | 分支 | 地位 | |
---|---|---|---|---|---|
Linux中央处理器 | 主要的 | 分期 | |||
Linux GPU | 主要的 | 分期 | |||
Linux 火花 | 主要的 | 分期 |