您可以在此处找到PyPI页面:https://pypi.org/project/ms-recommenders/
您可以在此处找到软件包文档:https://microsoft-recommenders.readthedocs.io/en/latest/
引言
此存储库包含构建推荐系统的示例和最佳实践,以Jupyter笔记本形式提供。这些示例详细介绍了我们在五项关键任务上的学习:
- Prepare Data:为每个推荐器算法准备和加载数据
- Model:使用各种经典和深度学习推荐算法建立模型,如交替最小二乘(ALS)或极深因式分解机器(xDeepFM)
- Evaluate:使用离线指标评估算法
- Model Select and Optimize:调整和优化推荐器模型的超参数
- Operationalize:在Azure上的生产环境中操作模型
中提供了几个实用程序reco_utils以支持常见任务,例如以不同算法预期的格式加载数据集、评估模型输出以及拆分训练/测试数据。其中包括几种最先进算法的实现,以便在您自己的应用程序中进行自学和自定义。请参阅reco_utils documentation
有关存储库的更详细概述,请参阅wiki page
快速入门
请参阅setup guide有关在本地设置计算机的更多详细信息,请访问data science virtual machine (DSVM)或打开Azure Databricks
推荐器软件包的安装已经过Python版本3.6和3.7的测试。建议在干净的环境中安装软件包及其依赖项(例如conda或venv)
要在本地计算机上进行设置,请执行以下操作:
要安装核心实用程序、基于CPU的算法和相关性,请执行以下操作:
- 确保安装了编译所需的软件。在Linux上,可以通过添加构建基本依赖项来支持这一点:
sudo apt-get install -y build-essential
在Windows上,您需要Microsoft C++ Build Tools
- 从以下位置安装软件包PyPI:
pip install --upgrade pip
pip install ms-recommenders[examples]
- 向Jupyter注册您的(CONDA或虚拟)环境:
python -m ipykernel install --user --name my_environment_name --display-name "Python (reco)"
- 启动Jupyter笔记本服务器
jupyter notebook
- 运行SAR Python CPU MovieLens笔记本在下面
00_quick_start
文件夹。确保将内核更改为“Python(Reco)”
有关安装软件包的其他选项(支持图形处理器、电光等)看见this guide
注意事项-TheAlternating Least Squares (ALS)笔记本电脑需要PySpark环境才能运行。请按照中的步骤操作setup guide在PySpark环境中运行这些笔记本。对于深度学习算法,建议使用GPU机器,并遵循setup guide要设置NVIDIA库,请执行以下操作
算法
下表列出了存储库中当前可用的推荐算法。当有不同的实施可用时,笔记本将链接在环境列下
算法 | 环境 | 类型 | 描述 |
---|---|---|---|
交替最小二乘(ALS) | PySpark | 协同过滤 | 大数据集中显式或隐式反馈的矩阵分解算法,电光MLLib针对可扩展性和分布式计算能力进行了优化 |
关注异步奇异值分解(A2SVD)* | Python CPU / Python GPU | 协同过滤 | 一种基于顺序的算法,旨在利用注意力机制捕获长期和短期用户偏好 |
CONAC/贝叶斯个性化排名(BPR) | Python CPU | 协同过滤 | 隐式反馈预测项目排序的矩阵分解算法 |
角/双边变分自动编码器(BiVAE) | Python CPU / Python GPU | 协同过滤 | 二元数据的生成模型(例如,用户-项目交互) |
卷积序列嵌入推荐(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 | 基于内容的过滤 | 基于内容问题的快速训练和低内存占用的梯度Boosting树算法 |
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 | 协同过滤 | 基于扩张卷积和残差网络的序列模式捕获算法 |
受限Boltzmann机器(RBM) | Python CPU / Python GPU | 协同过滤 | 基于神经网络的显式或隐式反馈潜在概率分布学习算法 |
黎曼低秩矩阵完成(RLRMC)* | Python CPU | 协同过滤 | 基于黎曼共轭梯度优化的小内存矩阵分解算法 |
简单推荐算法(SAR)* | Python CPU | 协同过滤 | 基于相似度的隐式反馈数据集算法 |
短期和长期偏好综合推荐(SLI-REC)* | Python CPU / Python GPU | 协同过滤 | 基于顺序的算法,旨在使用注意机制、时间感知控制器和内容感知控制器捕获长期和短期用户偏好 |
多兴趣感知的序贯用户建模(SUM)* | Python CPU / Python GPU | 协同过滤 | 一种旨在捕捉用户多兴趣的增强型记忆网络顺序用户模型 |
标准VAE | Python CPU / Python GPU | 协同过滤 | 预测用户/项目交互的产生式模型 |
奇异值分解(SVD) | Python CPU | 协同过滤 | 预测不是很大数据集中显式评级反馈的矩阵分解算法 |
术语频率-文档频率反转(TF-IDF) | Python CPU | 基于内容的过滤 | 一种简单的基于相似度的文本数据内容推荐算法 |
Vowpal Wabbit(大众)* | Python CPU (online training) | 基于内容的过滤 | 快速在线学习算法,非常适合用户功能/上下文不断变化的场景 |
宽而深 | Python CPU / Python GPU | 混血儿 | 一种可记忆特征交互和泛化用户特征的深度学习算法 |
xLearch/factorization Machine(FM)&场感知FM(FFM) | Python CPU | 混血儿 | 利用用户/项目特征预测标签的快速高效内存算法 |
注意事项:*指示由Microsoft发明/贡献的算法
独立的或正在孵化的算法和实用程序是contrib文件夹。这将包含可能不容易放入核心存储库的贡献,或者需要时间来重构或成熟代码并添加必要的测试
算法 | 环境 | 类型 | 描述 |
---|---|---|---|
SARplus* | PySpark | 协同过滤 | 电光合成孔径雷达的优化实现 |
初步比较
我们提供一个benchmark notebook以说明如何评估和比较不同的算法。在本笔记本中,使用分层拆分将MovieLens数据集按75/25的比率拆分成训练/测试集。使用下面的每个协同过滤算法来训练推荐模型。我们利用文献中报道的经验参数值。here在对指标进行排名时,我们使用k=10
(前十大推荐项目)。我们在标准NC6S_v2上运行比较Azure DSVM(6个vCPU、112 GB内存和1个P100 GPU)。电光肌萎缩侧索硬化症在本地独立模式下运行。在此表中,我们显示了在Movielens 100k上运行15个时期的算法的结果
算法 | 地图 | nDCG@k | 精度@k | Recall@k | RMSE | Mae | R2个 | 解释的差异 |
---|---|---|---|---|---|---|---|---|
ALS | 0.004732 | 0.044239 | 0.048462 | 0.017796 | 0.965038 | 0.753001 | 0.255647 | 0.251648 |
BiVAE | 0.146126 | 0.475077 | 0.411771 | 0.219145 | 不适用 | 不适用 | 不适用 | 不适用 |
BPR | 0.132478 | 0.441997 | 0.388229 | 0.212522 | 不适用 | 不适用 | 不适用 | 不适用 |
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 | 不适用 | 不适用 | 不适用 | 不适用 |
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 |
SVD | 0.012873 | 0.095930 | 0.091198 | 0.032783 | 0.938681 | 0.742690 | 0.291967 | 0.291971 |
行为规范
本项目坚持Microsoft’s Open Source Code of Conduct为了给所有人营造一个欢迎和鼓舞人心的社区
贡献
这个项目欢迎大家提供意见和建议。在投稿之前,请查看我们的contribution guidelines
生成状态
这些测试是夜间构建,用于计算冒烟和集成测试。main
是我们的主要分支机构staging
是我们的发展分部。我们使用pytest
中测试python实用程序reco_utils和papermill
对于notebooks有关测试管道的更多信息,请参阅test documentation
DSVM构建状态
以下测试每天在Linux DSVM上运行。这些机器全天候运转。
构建类型 | 分支机构 | 状态 | 分支机构 | 状态 | |
---|---|---|---|---|---|
Linux CPU | 主干道 | 试运行 | |||
Linux GPU | 主干道 | 试运行 | |||
LINUX电光 | 主干道 | 试运行 |
相关项目
- Microsoft AI Github:在我们的中央存储库中查找其他最佳实践项目和Azure AI设计模式
- NLP best practices:关于NLP的最佳实践和示例
- Computer vision best practices:计算机视觉方面的最佳实践和示例
- Forecasting best practices:关于时间序列预测的最佳做法和实例
参考文献
- A.Argyriou、M.González-Fierro和L.Zhang,“Microsoft推荐器:可投入生产的推荐系统的最佳实践(Best Practices for Production-Ready Recommendation Systems)”,万维网2020:台北国际万维网大会,2020年。在线提供:https://dl.acm.org/doi/abs/10.1145/3366424.3382692
- 张立,吴涛,谢,A.Argyriou,M.González-Fierro,J.Lian,“建立规模化的可生产推荐系统”,ACM SIGKDD 2019年知识发现和数据挖掘大会(KDD 2019),2019年
- S.Graham,J.K.Min,T.Wu,“微软推荐器:加速开发推荐器系统的工具”,RecSys‘19:第13届ACM推荐系统会议论文集,2019年。在线提供:https://dl.acm.org/doi/10.1145/3298689.3346967