跳转到主要内容

未提供项目描述

项目描述

Transformers4Rec

PyPI LICENSE Documentation

Transformers4Rec 是一个灵活且高效的用于序列和基于会话推荐库,可以与 PyTorch 一起工作。

该库通过集成最受欢迎的自然语言处理(NLP)框架之一,即 Hugging Face Transformers(HF),作为自然语言处理(NLP)和推荐系统(RecSys)之间的桥梁。Transformers4Rec 使最先进的 Transformer 架构可用于 RecSys 研究人员和行业从业者。

以下图显示了库在推荐系统中的应用。输入数据通常是Web会话中浏览的项目或放入购物车的项目等交互序列。该库可以帮助您处理和建模交互,以便您可以为下一个项目输出更好的推荐。

Sequential and Session-based recommendation with Transformers4Rec

使用 Transformers4Rec 进行序列和基于会话的推荐

传统的推荐算法通常在尝试建模用户行为时忽略了时间动态和交互顺序。通常,下一个用户交互与用户之前选择序列相关。在某些情况下,可能是重复购买或歌曲播放。由于偏好可能会随时间变化,用户兴趣也可能受到兴趣漂移的影响。这些问题由序列推荐任务解决。

序列推荐的一个特殊用例是会话推荐任务,其中你只能访问当前会话中短暂的交互序列。这在电子商务、新闻和媒体门户等在线服务中非常常见,因为用户可能出于符合GDPR合规性而选择匿名浏览,GDPR合规性限制了收集cookie,或者因为用户是新用户。对于用户兴趣因用户背景或意图而随时间变化很大的场景,此任务也非常相关。在这种情况下,利用当前会话的交互比旧交互更有可能提供相关推荐。

为了处理序列和会话推荐,许多先前应用于机器学习和NLP研究的序列学习算法已被探索用于RecSys,基于k-Nearest Neighbors、频繁模式挖掘、隐马尔可夫模型、循环神经网络,以及最近使用自注意力机制和transformer架构的神经网络架构。与Transformers4Rec不同,这些框架仅接受项目ID序列作为输入,并且不提供模块化、可扩展的生产使用实现。

Transformers4Rec的好处

Transformers4Rec提供以下好处

  • 灵活性:Transformers4Rec提供模块化构建块,可配置且与标准PyTorch模块兼容。这种构建块设计使您能够创建具有多个塔、多个头/任务和损失的定制架构。

  • 访问HF Transformers:由于与Hugging Face Transformers的集成,可以使用超过64种不同的Transformer架构来评估您的序列和会话推荐任务。

  • 支持多个输入特征:HF Transformers仅支持token ID序列作为输入,因为它是为NLP设计的。由于RecSys数据集中的丰富功能,Transformers4Rec使您能够使用HF transformers以其他类型的顺序表格数据作为输入。Transformers4Rec使用模式配置输入特征,并基于目标自动创建必要的层,例如嵌入表、投影层和输出层,而无需更改代码以包括新特征。您可以以可配置的方式对交互和序列级输入特征进行归一化和组合。

  • 无缝预处理和特征工程:作为Merlin生态系统的一部分,Transformers4Rec与NVTabularTriton Inference Server集成。这些组件使您能够构建用于序列和会话推荐的完全GPU加速的管道。NVTabular为会话推荐提供常见的预处理操作并导出数据集模式。该模式与Transformers4Rec兼容,因此可以自动配置输入特征。您可以将训练好的模型导出到Triton Inference Server中,以单个管道提供服务,该管道包括在线特征预处理和模型推理。有关更多信息,请参阅使用NVIDIA Merlin的端到端管道

GPU-accelerated Sequential and Session-based recommendation

使用NVIDIA Merlin组件为序列和会话推荐提供GPU加速管道

Transformers4Rec成就

Transformers4Rec最近赢得了两个基于会话的推荐竞赛:Booking.com组织的WSDM WebTour Workshop Challenge 2021([点击查看详情](https://developer.nvidia.com/blog/how-to-build-a-winning-deep-learning-powered-recommender-system-part-3/))和Coveo组织的SIGIR eCommerce Workshop Data Challenge 2021([点击查看详情](https://medium.com/nvidia-merlin/winning-the-sigir-ecommerce-challenge-on-session-based-recommendation-with-transformers-v2-793f6fac2994))。该库在会话推荐方面提供了比基线算法更高的准确率,我们对准确性进行了广泛的实证分析。这些观察结果发表在我们的ACM RecSys'21论文中。

示例代码:定义和训练模型

使用Transformers4Rec训练模型通常需要执行以下高级步骤

  1. 提供模式并构建一个输入模块。

    如果您遇到基于会话的推荐问题,通常希望使用TabularSequenceFeatures类,因为它将上下文特征与序列特征合并。

  2. 提供预测任务。

    开箱即用的任务可以从我们的API文档中获取。

  3. 构建一个Transformer主体,并将其转换为模型。

以下代码示例展示了如何使用PyTorch定义和训练一个用于下一项预测任务的XLNet模型

from transformers4rec import torch as tr
from transformers4rec.torch.ranking_metric import NDCGAt, RecallAt

# Create a schema or read one from disk: tr.Schema().from_json(SCHEMA_PATH).
schema: tr.Schema = tr.data.tabular_sequence_testing_data.schema

max_sequence_length, d_model = 20, 64

# Define the input module to process the tabular input features.
input_module = tr.TabularSequenceFeatures.from_schema(
    schema,
    max_sequence_length=max_sequence_length,
    continuous_projection=d_model,
    aggregation="concat",
    masking="causal",
)

# Define a transformer-config like the XLNet architecture.
transformer_config = tr.XLNetConfig.build(
    d_model=d_model, n_head=4, n_layer=2, total_seq_length=max_sequence_length
)

# Define the model block including: inputs, masking, projection and transformer block.
body = tr.SequentialBlock(
    input_module,
    tr.MLPBlock([d_model]),
    tr.TransformerBlock(transformer_config, masking=input_module.masking)
)

# Define the evaluation top-N metrics and the cut-offs
metrics = [NDCGAt(top_ks=[20, 40], labels_onehot=True),
           RecallAt(top_ks=[20, 40], labels_onehot=True)]

# Define a head with NextItemPredictionTask.
head = tr.Head(
    body,
    tr.NextItemPredictionTask(weight_tying=True, metrics=metrics),
    inputs=input_module,
)

# Get the end-to-end Model class.
model = tr.Model(head)

您可以将前面的代码修改为执行二进制分类。输入模块中的掩码可以设置为None而不是causal。当您定义头部时,可以将NextItemPredictionTask替换为BinaryClassificationTask的实例。请参阅API文档中的示例代码。

安装

您可以使用Pip、Conda或运行Docker容器安装Transformers4Rec。

使用Pip安装Transformers4Rec

您可以使用带有GPU加速Merlin数据加载器的功能安装Transformers4Rec。建议使用数据加载器安装,以获得更好的性能。这些组件可以作为pip install命令的可选参数安装。

要使用Pip安装Transformers4Rec,请运行以下命令

pip install transformers4rec[nvtabular]

-> 注意,使用pip安装Transformers4Rec不会自动安装RAPIDS cuDF。 -> cuDF是NVTabular转换的GPU加速版本和Merlin数据加载器所必需的。

有关使用pip安装cuDF的说明,请参阅此处:[https://docs.rapids.ai/install#pip-install](https://docs.rapids.ai/install#pip-install)

pip install cudf-cu11 dask-cudf-cu11 --extra-index-url=https://pypi.nvidia.com

使用Conda安装Transformers4Rec

要使用Conda安装Transformers4Rec,请使用condamamba运行以下命令以创建新环境。

mamba create -n transformers4rec-23.04 -c nvidia -c rapidsai -c pytorch -c conda-forge \
    transformers4rec=23.04 `# NVIDIA Merlin` \
    nvtabular=23.04 `# NVIDIA Merlin - Used in example notebooks` \
    python=3.10 `# Compatible Python environment` \
    cudf=23.02 `# RAPIDS cuDF - GPU accelerated DataFrame` \
    cudatoolkit=11.8 pytorch-cuda=11.8 `# NVIDIA CUDA version`

使用Docker安装Transformers4Rec

Transformers4Rec预安装在可从NVIDIA GPU Cloud (NGC)目录中获取的merlin-pytorch容器中。

有关Merlin容器名称、目录中容器映像的URL和关键Merlin组件的信息,请参阅Merlin容器文档页面。

笔记本示例和教程

使用NVIDIA Merlin的端到端管道页面展示了如何使用Transformers4Rec和其他Merlin库(如NVTabular)构建完整的推荐系统。

我们有一些示例笔记本,可以帮助您构建推荐系统或将Transformers4Rec集成到您的系统中。

  • 一个入门示例,包括使用XLNET Transformer架构训练基于会话的模型。
  • 一个端到端示例,用于训练模型并在 Triton Inference Server 上进行推理。
  • 另一个端到端示例,在 RNN 上训练和评估会话模型,并使用 Triton Inference Server 进行推理。
  • 一个笔记本和脚本,用于重现 RecSys 2021 论文中展示的实验。

反馈和支持

如果您想直接为 Transformers4Rec 做贡献,请参阅 为 Transformers4Rec 做贡献。我们特别关注对我们特征工程和预处理操作的贡献或功能请求。为了进一步推进我们的 Merlin 路线图,我们鼓励您通过访问 https://developer.nvidia.com/merlin-devzone-survey 分享您推荐系统管道的所有细节。

如果您想了解更多关于 Transformers4Rec 的工作原理,请参阅我们的 Transformers4Rec 文档。我们还有 API 文档,概述了 Transformers4Rec 中可用模块和类的具体细节。

项目详情


下载文件

下载适合您平台的应用程序。如果您不确定选择哪个,请了解更多关于 安装软件包 的信息。

源分发

transformers4rec-23.12.0.tar.gz (1.1 MB 查看散列值)

上传时间

由以下组织支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页