博客

  • Recommenders 库简介及使用指南

    Recommenders 是一个旨在帮助研究人员、开发者和爱好者快速构建和部署各种推荐系统的项目。该项目隶属于 Linux Foundation of AI and Data,提供了丰富的 Jupyter Notebook 示例和最佳实践,涵盖了推荐系统的五个关键任务:数据准备、模型构建、算法评估、模型选择与优化,以及模型的生产化部署。

    最新动态(2024年5月)

    我们发布了新版本 Recommenders 1.2.0。此次更新包含大量改进,如对 Python 3.8 至 3.11 的全面测试(大约 1800 个测试)、多种算法性能的提升、笔记本的审查和许多其他改进。

    项目简介

    Recommenders 项目提供了构建推荐系统的示例和最佳实践,主要通过 Jupyter Notebooks 详细展示了以下五个关键任务:

    1. 数据准备:为每个推荐算法准备和加载数据。
    2. 模型构建:使用多种经典和深度学习推荐算法构建模型,如交替最小二乘法(ALS)或极限深度因子分解机(xDeepFM)。
    3. 算法评估:使用离线指标评估算法。
    4. 模型选择与优化:调优和优化推荐模型的超参数。
    5. 模型生产化部署:在 Azure 上将模型部署到生产环境。

    此外,Recommenders 库还提供了多种实用工具,支持常见任务如加载数据集、评估模型输出和分割训练/测试数据。库中还包含了一些最先进的算法实现,供学习和在实际应用中定制。

    快速开始

    我们推荐使用 conda 进行环境管理,并使用 VS Code 进行开发。以下是在 Linux/WSL 上安装 Recommenders 包并运行示例笔记本的步骤:

    # 1. 安装 gcc(如果尚未安装)。在 Ubuntu 上,可以使用以下命令:
    # sudo apt install gcc
    
    # 2. 创建并激活新的 conda 环境
    conda create -n <environment_name> python=3.9
    conda activate <environment_name>
    
    # 3. 安装 Recommenders 核心包。它可以运行所有 CPU 笔记本。
    pip install recommenders
    
    # 4. 创建一个 Jupyter 内核
    python -m ipykernel install --user --name <environment_name> --display-name <kernel_name>
    
    # 5. 在 VSCode 中或使用命令行克隆此仓库:
    git clone https://github.com/recommenders-team/recommenders.git
    
    # 6. 在 VSCode 中:
    #   a. 打开一个笔记本,例如 examples/00_quick_start/sar_movielens.ipynb;
    #   b. 选择 Jupyter 内核 <kernel_name>;
    #   c. 运行笔记本。

    关于在其他平台(如 Windows 和 macOS)上的安装和不同配置(如 GPU、Spark 和实验特性)的更多信息,请参阅 Setup Guide

    除了核心包,Recommenders 还提供了几个额外的包,包括:

    • [gpu]:用于运行 GPU 模型。
    • [spark]:用于运行 Spark 模型。
    • [dev]:用于仓库开发。
    • [all]:包含 [gpu][spark][dev]
    • [experimental]:包含未经过充分测试和/或可能需要额外安装步骤的模型。

    支持的算法

    Recommenders 库目前支持多种推荐算法,以下是部分算法的简介及其示例:

    算法类型描述示例
    交替最小二乘法 (ALS)协同过滤针对显式或隐式反馈的大规模数据集的矩阵分解算法,适用于 PySpark 环境。快速开始 / 深入探讨
    ——-——————
    注意力异步奇异值分解 (A2SVD)协同过滤基于序列的算法,使用注意力机制捕捉用户的长短期偏好,适用于 CPU/GPU 环境。快速开始
    Cornac/Bayesian Personalized Ranking (BPR)协同过滤用于预测隐式反馈的矩阵分解算法,适用于 CPU 环境。深入探讨
    Cornac/Bilateral Variational Autoencoder (BiVAE)协同过滤用于二元数据(如用户-物品交互)的生成模型,适用于 CPU/GPU 环境。深入探讨
    卷积序列嵌入推荐 (Caser)协同过滤基于卷积的算法,旨在捕捉用户的总体偏好和序列模式,适用于 CPU/GPU 环境。快速开始
    深度知识感知网络 (DKN)内容过滤结合知识图谱和文章嵌入的深度学习算法,用于新闻或文章推荐,适用于 CPU/GPU 环境。快速开始 / 深入探讨
    极限深度因子分解机 (xDeepFM)协同过滤用于隐式和显式反馈的深度学习算法,适用于 CPU/GPU 环境。快速开始
    FastAI 嵌入点偏差 (FAST)协同过滤通用算法,使用用户和物品的嵌入和偏差,适用于 CPU/GPU 环境。快速开始
    LightFM/因子分解机协同过滤适用于隐式和显式反馈的因子分解机算法,适用于 CPU 环境。快速开始
    LightGBM/梯度提升树内容过滤适用于内容过滤问题的梯度提升树算法,具有快速训练和低内存使用的特点,适用于 CPU/GPU/PySpark 环境。CPU 快速开始 / PySpark 深入探讨
    LightGCN协同过滤简化的图卷积网络设计,用于预测隐式反馈,适用于 CPU/GPU 环境。深入探讨
    GeoIMC协同过滤利用黎曼共轭梯度优化的几何方法进行矩阵补全算法,适用于 CPU 环境。快速开始
    GRU协同过滤基于序列的算法,使用递归神经网络捕捉用户的长短期偏好,适用于 CPU/GPU 环境。快速开始
    多项式 VAE协同过滤用于预测用户/物品交互的生成模型,适用于 CPU/GPU 环境。深入探讨

    结束语

    Recommenders 库为开发推荐系统提供了丰富的资源和工具,无论是初学者还是有经验的开发者都能从中受益。通过详细的文档和多种示例,你可以快速上手并在不同的应用场景中实现推荐系统。如果你对推荐系统感兴趣,建议你深入探索 Recommenders 库中的各个示例,并根据自己的需求进行定制和扩展。

    进一步学习和支持

    文档和资源

    Recommenders 提供了详细的文档和资源,帮助你更好地理解和使用该库:

    • 官方文档:详细介绍了库的安装、使用方法和各个算法的具体实现。
    • Wiki 页面:包含项目相关的文档和演示文稿。
    • 实际应用场景:展示了推荐系统在各种实际场景中的应用实例。

    社区和支持

    Recommenders 项目由一个活跃的社区支持,你可以通过以下方式获取帮助或参与贡献:

    • 加入 Slack 社区:与其他用户和开发者交流,获取实时帮助。
    • GitHub 讨论:在项目的讨论区提出问题、分享经验或讨论改进建议。
    • 贡献代码:如果你有兴趣为项目做出贡献,可以查看贡献指南,了解如何提交代码、报告问题或改进文档。

    安装和环境配置

    为了方便开发和环境管理,Recommenders 推荐使用 conda。以下是关于环境配置的一些重要提示:

    • 核心包pip install recommenders 安装核心包,适用于大多数 CPU 环境。
    • 额外包
    • [gpu]pip install recommenders[gpu],适用于需要 GPU 支持的模型。
    • [spark]pip install recommenders[spark],适用于需要 Spark 支持的模型。
    • [dev]pip install recommenders[dev],适用于开发和测试。
    • [all]pip install recommenders[all],包含以上所有额外功能。
    • [experimental]pip install recommenders[experimental],包含实验性模型和功能。

    示例运行

    以下是一个快速示例,展示如何使用 Recommenders 运行一个 Jupyter Notebook:

    1. 安装依赖# 安装 gcc(如果尚未安装) sudo apt install gcc # 创建并激活新的 conda 环境 conda create -n recommenders_env python=3.9 conda activate recommenders_env # 安装 Recommenders 核心包 pip install recommenders # 创建 Jupyter 内核 python -m ipykernel install --user --name recommenders_env --display-name "Recommenders Env"
    2. 克隆仓库git clone https://github.com/recommenders-team/recommenders.git
    3. 运行 Jupyter Notebook
      • 打开 VS Code,加载克隆的仓库。
      • 选择一个示例笔记本,如 examples/00_quick_start/sar_movielens.ipynb
      • 选择 Jupyter 内核 “Recommenders Env”。
      • 运行笔记本,体验推荐系统的构建过程。

    通过这些步骤,你可以轻松上手 Recommenders 库,开始构建和优化自己的推荐系统。希望这篇文章能帮助你更好地理解和使用 Recommenders 库,祝你在推荐系统的探索之旅中取得成功!

  • XGBoost 与 GPU 强强联手,打造高效排序模型

    在信息爆炸的时代,如何从海量数据中快速准确地找到所需信息成为了一个亟待解决的问题。无论是搜索引擎、电商平台还是社交媒体,排序算法都扮演着至关重要的角色。本文将介绍一种基于 XGBoost 和 GPU 加速的学习排序(Learning to Rank,LETOR)方法,该方法能够高效地训练排序模型,提升信息检索的效率和准确性。

    XGBoost 与 学习排序

    XGBoost 是一种广泛应用的机器学习库,它采用梯度提升技术,通过组合多个弱模型来逐步构建更强大的模型。弱模型的生成是通过使用目标函数计算梯度下降来实现的。学习排序(LETOR)就是其中一种目标函数,它主要应用于信息检索领域,其目标是对相关文档进行排序,以返回最佳结果。

    以典型的搜索引擎为例,它通常索引了数十亿个文档。如何根据用户查询从索引文档集中筛选出相关文档并进行排序是搜索引擎的核心任务之一。为了实现这一目标,搜索引擎通常会根据用户查询的相关性、领域、子领域等对文档进行分组,并在每个组内进行排序。

    排序方法

    目前,常用的排序方法主要有以下三种:

    • Pointwise(单点排序): 在学习过程中,只使用单个实例进行训练,并仅使用该实例计算梯度。这种方法没有考虑训练实例在文档列表中的位置,因此可能会导致不相关的实例被赋予过高的重要性。
    • Pairwise(两两排序): 在学习过程中,为每个训练实例选择一个实例对,并根据它们之间的相对顺序计算梯度。
    • Listwise(列表排序): 选择多个实例,并根据这些实例集计算梯度。

    XGBoost 使用 LambdaMART 排序算法(用于提升树),该算法采用两两排序方法,通过对多个实例对进行采样来最小化两两损失。

    XGBoost 中的 LETOR

    在 XGBoost 中进行训练通常包括以下几个高级步骤,而与排序相关的更改发生在图1所示训练过程中的“获取梯度”步骤。

    图1:LETOR 训练流程图

    ![LETOR 训练流程图][]

    XGBoost 支持三种用于梯度提升的 LETOR 排序目标函数:pairwise、ndcg 和 map。其中,ndcg 和 map 目标函数通过调整所选实例对的权重来进一步优化两两损失,从而提高排序质量。它们通过交换所选实例对的位置并计算 NDCG 或 MAP 排序指标,然后根据计算出的指标调整实例的权重来实现这一点。

    GPU 加速 LETOR

    为了充分利用 GPU 的强大计算能力,我们需要尽可能并行地处理训练实例。与典型的训练数据集不同,LETOR 数据集是根据查询、域等进行分组的,因此排序必须在每个组内进行。为了获得更好的性能,需要尽可能并行化组内实例之间的排序。

    然而,在 GPU 上进行排序也面临着一些挑战:

    • 分组排序: 由于 LETOR 数据集是分组的,因此需要在每个组内进行排序,这与传统的排序算法有所不同。
    • 内存限制: GPU 的内存有限,无法一次性加载所有数据,因此需要对数据进行分块处理。

    为了解决这些挑战,NVIDIA 的工程师提出了一种基于排序算法的解决方案。该方案的核心思想是:

    1. 创建位置索引和分段索引: 为所有训练实例创建位置索引,并创建分段索引以区分不同的组。
    2. 排序标签和预测值: 使用 GPU 的并行计算能力对标签和预测值进行排序,并同时移动位置索引。
    3. 收集分段索引并排序: 根据排序后的位置索引收集分段索引,并对分段索引进行排序,以便将同一组的标签放在一起。
    4. 组内排序: 根据排序后的位置索引,将同一组的标签放在一起进行排序。

    通过这种方式,可以高效地在 GPU 上对 LETOR 数据集进行排序,并利用 GPU 的并行计算能力加速梯度计算,从而提高训练速度。

    性能测试

    为了评估 GPU 加速 LETOR 的性能,NVIDIA 的工程师使用微软的 LETOR 基准数据集进行了测试。测试结果表明,GPU 加速 LETOR 可以显著提高训练速度,尤其是在处理大型数据集时,其优势更加明显。

    图2:不同排序算法的排名时间

    算法CPU 时间 (秒)GPU 时间 (秒)加速比
    pairwise177.318.49.6倍
    ndcg432.644.19.8倍
    map433.744.29.8倍

    图3:不同排序算法的排名和训练时间

    算法CPU 训练时间 (秒)GPU 训练时间 (秒)加速比
    pairwise212.8543.9倍
    ndcg468.179.55.9倍
    map469.279.65.9倍

    总结

    XGBoost 与 GPU 加速的 LETOR 方法为信息检索领域提供了一种高效的排序模型训练方案。通过利用 GPU 的强大计算能力,可以显著提高训练速度,缩短模型训练时间,从而更快地将模型部署到实际应用中。

    参考文献

人生梦想 - 关注前沿的计算机技术 acejoy.com 🐾 步子哥の博客 🐾 背多分论坛 🐾 借一步网
Page Stats: PV: 1 | UV: 1
Last updated: 2025-07-09 14:45:30
沪ICP备2024052574号-1