标签归档:operationalization

Recommenders-推荐系统的最佳实战教程

Recommenders现在在PyPI上,可以使用pip安装!此外,还有大量的错误修复和实用程序改进

您可以在此处找到PyPI页面:https://pypi.org/project/ms-recommenders/

您可以在此处找到软件包文档:https://microsoft-recommenders.readthedocs.io/en/latest/

引言

此存储库包含构建推荐系统的示例和最佳实践,以Jupyter笔记本形式提供。这些示例详细介绍了我们在五项关键任务上的学习:

中提供了几个实用程序reco_utils以支持常见任务,例如以不同算法预期的格式加载数据集、评估模型输出以及拆分训练/测试数据。其中包括几种最先进算法的实现,以便在您自己的应用程序中进行自学和自定义。请参阅reco_utils documentation

有关存储库的更详细概述,请参阅wiki page

快速入门

请参阅setup guide有关在本地设置计算机的更多详细信息,请访问data science virtual machine (DSVM)或打开Azure Databricks

推荐器软件包的安装已经过Python版本3.6和3.7的测试。建议在干净的环境中安装软件包及其依赖项(例如condavenv)

要在本地计算机上进行设置,请执行以下操作:

要安装核心实用程序、基于CPU的算法和相关性,请执行以下操作:

  1. 确保安装了编译所需的软件。在Linux上,可以通过添加构建基本依赖项来支持这一点:
sudo apt-get install -y build-essential

在Windows上,您需要Microsoft C++ Build Tools

  1. 从以下位置安装软件包PyPI
pip install --upgrade pip
pip install ms-recommenders[examples]
  1. 向Jupyter注册您的(CONDA或虚拟)环境:
python -m ipykernel install --user --name my_environment_name --display-name "Python (reco)"
  1. 启动Jupyter笔记本服务器
jupyter notebook
  1. 运行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_utilspapermill对于notebooks有关测试管道的更多信息,请参阅test documentation

DSVM构建状态

以下测试每天在Linux DSVM上运行。这些机器全天候运转。

构建类型 分支机构 状态 分支机构 状态
Linux CPU 主干道 试运行
Linux GPU 主干道 试运行
LINUX电光 主干道 试运行

相关项目

参考文献

  • 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

Computervision-recipes-计算机视觉的最佳实践、代码示例和文档

计算机视觉

近年来,我们看到了计算机视觉的非同寻常的增长,应用于人脸识别、图像理解、搜索、无人机、地图绘制、半自动和自动驾驶车辆。其中许多应用的关键部分是视觉识别任务,例如图像分类、目标检测和图像相似度

此存储库提供构建计算机视觉系统的示例和最佳实践指南。该存储库的目标是构建一套全面的工具和示例,以利用计算机视觉算法、神经体系结构和实现此类系统的最新进展。我们不是从头开始创建实现,而是利用现有的最先进的库,围绕加载图像数据、优化和评估模型以及向上扩展到云来构建额外的实用程序。此外,在此领域工作多年后,我们的目标是回答常见问题,指出经常观察到的陷阱,并展示如何使用云进行培训和部署

我们希望这些示例和实用程序可以通过按数量级简化从定义业务问题到开发解决方案的过程来显著缩短“上市时间”。此外,示例笔记本将作为指南,并以多种语言展示工具的最佳实践和用法

这些示例提供为Jupyter notebooks也很常见utility functions所有示例都使用PyTorch作为底层深度学习库

目标受众

我们这个存储库的目标受众包括具有不同计算机视觉知识水平的数据科学家和机器学习工程师,因为我们的内容是纯来源的,目标是自定义的机器学习建模。所提供的实用程序和示例旨在作为解决实际视觉问题的加速器

快速入门

要开始,请导航到Setup Guide,其中列出了有关如何设置计算环境和运行此Repo中的笔记本所需的依赖项的说明。设置环境后,请导航到Scenarios文件夹,开始浏览笔记本。我们建议从图像分类笔记本,因为这引入了其他场景也使用的概念(例如关于ImageNet的预培训)

或者,我们支持活页夹只需点击此链接,即可在网络浏览器中轻松试用我们的笔记本电脑。然而,Binder是免费的,因此只提供有限的CPU计算能力,并且没有GPU支持。预计笔记本的运行速度会非常慢(通过将图像分辨率降低到例如60像素,这在一定程度上有所改善,但代价是精确度较低)

场景

以下是此存储库中涵盖的常用计算机视觉场景的摘要。对于每个主要场景(“基础”),我们都会提供工具来有效地构建您自己的模型。这包括在您自己的数据上微调您自己的模型等简单任务,以及硬性否定挖掘甚至模型部署等更复杂的任务

场景 支持 描述
Classification 基地 图像分类是一种有监督的机器学习技术,用于学习和预测给定图像的类别
Similarity 基地 图像相似度是一种计算给定一对图像的相似度分数的方法。在给定图像的情况下,它允许您识别给定数据集中最相似的图像
Detection 基地 对象检测是一种允许您检测图像中对象的边界框的技术
Keypoints 基地 关键点检测可用于检测对象上的特定点。提供了一种预先训练的模型来检测人体关节,以进行人体姿态估计。
Segmentation 基地 图像分割为图像中的每个像素分配类别
Action recognition 基地 动作识别,用于在视频/网络摄像机镜头中识别执行的动作(例如,“运行”、“打开瓶子”)以及各自的开始/结束时间。我们还实现了可以在(Contrib)[contrib]下找到的动作识别的i3D实现
Tracking 基地 跟踪允许随时间检测和跟踪视频序列中的多个对象
Crowd counting Contrrib 统计低人群密度(如10人以下)和高人群密度(如数千人)场景下的人数

我们将支持的CV方案分为两个位置:(I)基地:“utils_cv”和“Scenario”文件夹中的代码和笔记本遵循严格的编码准则,经过良好的测试和维护;(Ii)Contrrib:“contrib”文件夹中的代码和其他资源,主要介绍使用尖端技术的不太常见的CV场景。“contrib”中的代码没有定期测试或维护

计算机视觉在蔚蓝上的应用

请注意,对于某些计算机视觉问题,您可能不需要构建自己的模型。取而代之的是,Azure上存在预先构建的或可轻松定制的解决方案,不需要任何自定义编码或机器学习专业知识。我们强烈建议您评估这些方法是否足以解决您的问题。如果这些解决方案不适用,或者这些解决方案的准确性不够,则可能需要求助于更复杂、更耗时的自定义方法

以下Microsoft服务提供了解决常见计算机视觉任务的简单解决方案:

  • Vision Services是一组经过预先训练的睡觉API,可以调用它们来进行图像标记、人脸识别、光学字符识别、视频分析等。这些API开箱即用,只需要极少的机器学习专业知识,但定制功能有限。查看各种可用的演示以体验该功能(例如Computer Vision)。该服务可通过API调用或通过SDK(以.NET、Python、Java、Node和Go语言提供)使用
  • Custom Vision是一项SaaS服务,用于在给定用户提供的培训集的情况下将模型训练和部署为睡觉应用编程接口。所有步骤,包括图像上传、注释和模型部署,都可以使用直观的UI或通过SDK(.Net、Python、Java、Node和Go语言)执行。训练图像分类或目标检测模型可以用最少的机器学习专业知识来实现。与使用预先培训的认知服务API相比,Custom Vision提供了更大的灵活性,但需要用户自带数据并对其进行注释

如果您需要培训您自己的模型,以下服务和链接提供了可能有用的附加信息

  • Azure Machine Learning service (AzureML)是一项帮助用户加速训练和部署机器学习模型的服务。虽然AzureML Python SDK不特定于计算机视觉工作负载,但它可以用于可伸缩且可靠的培训,并将机器学习解决方案部署到云中。我们在此存储库中的几个笔记本中利用Azure机器学习(例如deployment to Azure Kubernetes Service)
  • Azure AI Reference architectures提供一组示例(由代码支持),说明如何构建利用多个云组件的常见面向AI的工作负载。虽然不是特定于计算机视觉的,但这些参考体系结构涵盖了几个机器学习工作负载,例如模型部署或批处理评分

生成状态

AzureML测试

构建类型 分支机构 状态 分支机构 状态
Linux GPU 师傅 试运行
Linux CPU 师傅 试运行
笔记本电脑单元GPU 师傅 试运行

贡献

这个项目欢迎大家提供意见和建议。请参阅我们的contribution guidelines