推荐系统工具
项目描述
推荐器
更新内容(2021年2月4日)
我们有一个新的发布 Recommenders 2021.2!
它包含许多错误修复、优化和3个新算法:GeoIMC、标准VAE和多项式VAE。我们还添加了工具以方便使用微软新闻数据集(MIND)。此外,我们还发布了我们的KDD2020教程,在该教程中,我们使用微软学术图构建了一个COVID论文推荐器。
我们还更改了默认分支从master到main。现在当您下载存储库时,您将得到main分支。
查看NEWS.md中的过往公告。
简介
此存储库包含用于构建推荐系统的示例和最佳实践,以Jupyter笔记本的形式提供。这些示例详细说明了我们在五个关键任务上的学习成果
- 准备数据:为每个推荐算法准备和加载数据
- 模型:使用各种经典和深度学习推荐算法构建模型,例如交替最小二乘法(ALS)或极深因子分解机(xDeepFM)。
- 评估:使用离线指标评估算法
- 模型选择与优化:调整和优化推荐模型的超参数
- 部署:在Azure生产环境中部署模型
在 reco_utils 中提供了几个实用工具,以支持常见的任务,例如以不同算法期望的格式加载数据集、评估模型输出以及拆分训练/测试数据。还包含了一些最先进的算法的实现,用于自学和自定义您自己的应用程序。请参阅 reco_utils 文档。
有关存储库的更详细概述,请参阅 wiki 页面 上的文档。
入门指南
有关在本地计算机、数据科学虚拟机(DSVM) 或 Azure Databricks 上设置的详细信息,请参阅 设置指南。
在本地机器上设置
-
安装 Anaconda,Python 版本需 ≥ 3.6。Miniconda 是快速开始的方法。
-
克隆存储库
git clone https://github.com/Microsoft/Recommenders
- 运行生成 conda 文件的脚本以创建 conda 环境:(这是针对基本 python 环境,有关 PySpark 和 GPU 环境设置的详细信息,请参阅 SETUP.md)
cd Recommenders
python tools/generate_conda_file.py
conda env create -f reco_base.yaml
- 激活 conda 环境,并将其与 Jupyter 注册
conda activate reco_base
python -m ipykernel install --user --name reco_base --display-name "Python (reco)"
- 启动 Jupyter notebook 服务器
jupyter notebook
- 在
00_quick_start
文件夹下运行 SAR Python CPU MovieLens 笔记本。确保将内核更改为 "Python (reco)"。
注意 - 交替最小二乘法(ALS) 笔记本需要 PySpark 环境。请按照 设置指南 中的步骤在这些笔记本中运行 PySpark 环境。对于深度学习算法,建议使用 GPU 机器。
算法
下表列出了存储库中当前可用的推荐算法。当存在不同的实现时,在 "环境" 列下链接了笔记本。
算法 | 环境 | 类型 | 描述 |
---|---|---|---|
交替最小二乘法(ALS) | PySpark | 协同过滤 | 适用于大型数据集中显式或隐式反馈的矩阵分解算法,由 Spark MLLib 优化以提高可扩展性和分布式计算能力 |
注意力异步奇异值分解(A2SVD)* | Python CPU / Python GPU | 协同过滤 | 基于顺序的算法,旨在使用注意力机制捕捉长期和短期用户偏好 |
Cornac/贝叶斯个性化排序(BPR) | Python CPU | 协同过滤 | 用于预测项目排名的矩阵分解算法,具有隐式反馈 |
卷积序列嵌入推荐(Caser) | Python CPU / Python GPU | 协同过滤 | 基于卷积的算法,旨在捕捉用户的通用偏好和序列模式 |
深度知识感知网络(DKN)* | Python CPU / Python GPU | 基于内容的过滤 | 结合知识图和文章嵌入的深度学习算法,提供强大的新闻或文章推荐 |
极深因子分解机(xDeepFM)* | Python CPU / Python GPU | 混合 | 基于深度学习,用于隐式和显式反馈,并具有用户/项目特征 |
FastAI嵌入点偏差(FAST) | Python CPU / Python GPU | 协同过滤 | 具有用户和物品嵌入和偏差的通用算法 |
LightFM/混合矩阵分解 | Python CPU | 混合 | 适用于隐式和显式反馈的混合矩阵分解算法 |
LightGBM/梯度提升树* | Python CPU / PySpark | 基于内容的过滤 | 适用于内容问题的快速训练和低内存使用的梯度提升树算法 |
LightGCN | Python CPU / Python GPU | 协同过滤 | 深度学习算法,简化了GCN的设计,用于预测隐式反馈 |
GeoIMC | Python CPU | 混合 | 考虑用户和物品特征的矩阵补全算法,使用黎曼共轭梯度优化和几何方法。 |
GRU4Rec | Python CPU / Python GPU | 协同过滤 | 基于序列的算法,旨在使用循环神经网络捕捉长期和短期用户偏好 |
多项式VAE | Python CPU / Python GPU | 协同过滤 | 用于预测用户/物品交互的生成模型 |
具有长期和短期用户表示的神经推荐(LSTUR)* | Python CPU / Python GPU | 基于内容的过滤 | 具有长期和短期用户兴趣建模的神经推荐算法 |
具有注意力的多视图学习神经推荐(NAML)* | Python CPU / Python GPU | 基于内容的过滤 | 具有注意力的多视图学习神经推荐算法 |
神经协同过滤(NCF) | Python CPU / Python GPU | 协同过滤 | 针对隐式反馈具有增强性能的深度学习算法 |
具有个性化注意力的神经推荐(NPA)* | Python CPU / Python GPU | 基于内容的过滤 | 具有个性化注意力网络的神经推荐算法 |
具有多头自注意力的神经推荐(NRMS)* | Python CPU / Python GPU | 基于内容的过滤 | 具有多头自注意力的神经推荐算法 |
下一个项目推荐(NextItNet) | Python CPU / Python GPU | 协同过滤 | 基于扩张卷积和残差网络,旨在捕捉序列模式的算法 |
受限玻尔兹曼机(RBM) | Python CPU / Python GPU | 协同过滤 | 基于神经网络的算法,用于学习显式或隐式反馈的潜在概率分布 |
黎曼低秩矩阵补全(RLRMC)* | Python CPU | 协同过滤 | 使用黎曼共轭梯度优化和具有小内存消耗的矩阵分解算法。 |
简单推荐算法(SAR)* | Python CPU | 协同过滤 | 基于相似性的隐式反馈数据集算法 |
短期和长期偏好集成推荐器(SLi-Rec)* | Python CPU / Python GPU | 协同过滤 | 基于序列的算法,旨在使用注意力机制、时间感知控制器和内容感知控制器捕捉长期和短期用户偏好 |
标准VAE | Python CPU / Python GPU | 协同过滤 | 用于预测用户/物品交互的生成模型 |
Surprise/SVD | Python CPU | 协同过滤 | 用于预测数据集中显式评分反馈的矩阵分解算法 |
TF-IDF | Python CPU | 基于内容的过滤 | 基于相似性的内容推荐简单算法,适用于文本数据集 |
Vowpal Wabbit(VW)* | Python CPU(在线训练) | 基于内容的过滤 | 快速在线学习算法,非常适合用户特征/上下文不断变化的场景 |
宽度和深度 | Python CPU / Python GPU | 混合 | 可以记住特征交互并泛化用户特征的深度学习算法 |
xLearn/因子分解机(FM)& 字段感知FM(FFM) | Python CPU | 基于内容的过滤 | 快速且内存高效的算法,用于预测具有用户/物品特征的标签 |
注意: * 表示由微软发明/贡献的算法。
独立或孵化算法和实用程序是contrib文件夹的候选者。这将为可能不容易融入核心存储库或需要时间重构或成熟代码以及添加必要测试的贡献提供存放空间。
算法 | 环境 | 类型 | 描述 |
---|---|---|---|
SARplus * | PySpark | 协同过滤 | 为Spark优化的SAR实现 |
初步比较
我们提供了一个基准笔记本,以展示如何评估和比较不同的算法。在这个笔记本中,MovieLens数据集按照75/25的比例使用分层分割分成训练/测试集。使用以下协作过滤算法中的每一个训练推荐模型。我们使用了文献中报告的实证参数值在此处。对于排名度量,我们使用k=10
(推荐前10个项目)。我们在标准NC6s_v2 Azure DSVM(6个vCPU,112GB内存和1个P100 GPU)上运行比较。Spark ALS以本地独立模式运行。在这个表格中,我们展示了在MovieLens 100k上的结果,运行算法15个周期。
算法 | MAP | nDCG@k | Precision@k | Recall@k | RMSE | MAE | R2 | 解释方差 |
---|---|---|---|---|---|---|---|---|
ALS | 0.004732 | 0.044239 | 0.048462 | 0.017796 | 0.965038 | 0.753001 | 0.255647 | 0.251648 |
BPR | 0.105365 | 0.389948 | 0.349841 | 0.181807 | N/A | N/A | N/A | N/A |
FastAI | 0.025503 | 0.147866 | 0.130329 | 0.053824 | 0.943084 | 0.744337 | 0.285308 | 0.287671 |
LightGCN | 0.088526 | 0.419846 | 0.379626 | 0.144336 | N/A | N/A | N/A | N/A |
NCF | 0.107720 | 0.396118 | 0.347296 | 0.180775 | N/A | N/A | N/A | N/A |
SAR | 0.110591 | 0.382461 | 0.330753 | 0.176385 | 1.253805 | 1.048484 | -0.569363 | 0.030474 |
SVD | 0.012873 | 0.095930 | 0.091198 | 0.032783 | 0.938681 | 0.742690 | 0.291967 | 0.291971 |
贡献者
此项目欢迎贡献和建议。在贡献之前,请参阅我们的贡献指南。
构建状态
这些测试是夜间构建,它们计算烟雾和集成测试。 main
是我们的主要分支,而 staging
是我们的开发分支。我们使用 pytest
对 reco_utils 中的 Python 工具进行测试,并使用 papermill
对 notebooks 进行测试。有关测试管道的更多信息,请参阅测试文档。
DSVM构建状态
以下测试在Windows和Linux DSVM上每日运行。这些机器全天候运行。
构建类型 | 分支 | 状态 | 分支 | 状态 | |
---|---|---|---|---|---|
Linux CPU | main | staging | |||
Linux GPU | main | staging | |||
Linux Spark | main | staging |
相关项目
- Microsoft AI Github:在我们的中央存储库中查找其他最佳实践项目和Azure AI设计模式。
- NLP最佳实践:NLP的最佳实践和示例。
- 计算机视觉最佳实践:计算机视觉的最佳实践和示例。
- 预测最佳实践:时间序列预测的最佳实践和示例。
参考文献
- A. Argyriou,M. González-Fierro,和L. Zhang,"Microsoft Recommenders:为生产就绪推荐系统最佳实践",WWW 2020:国际万维网大会台北,2020。在线可用:https://dl.acm.org/doi/abs/10.1145/3366424.3382692
- L. Zhang,T. Wu,X. Xie,A. Argyriou,M. González-Fierro和J. Lian,"在规模上构建生产就绪推荐系统",ACM SIGKDD知识发现和数据挖掘会议2019(KDD 2019),2019。
- S. Graham,J.K. Min,T. Wu,"Microsoft recommenders:加速开发推荐系统的工具",RecSys '19:第13届ACM推荐系统会议论文集,2019。在线可用:https://dl.acm.org/doi/abs/10.1145/3298689.3346967
项目详细信息
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分布
构建分发
pre_reco_utils-2021.2.17.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1417e22c1b3b98ee7f07cce437b2013cbe4cd22ae8438263d794d880bc15d18c |
|
MD5 | 502e5c7a4507849dc9209ae6642827a7 |
|
BLAKE2b-256 | 3fa619e49672cf9fbfade0021286a87c4daeecf3f4e6051cb4f2ea4b4b3dc8e5 |
pre_reco_utils-2021.2.17-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c2405b689aefc07895ca3a073407f1b128b00e935fa4e38238e1a809fa074fed |
|
MD5 | b2c7efdf59608c49be6b9376a358bb29 |
|
BLAKE2b-256 | 84a4f1d43d1f74cf33aea6a9333dcfed20965636408e1ce7ba04a2956fe1028a |