SASRec 模型在亚马逊数据集上的应用

在当今的电子商务领域, 推荐系统扮演着越来越重要的角色。它能够帮助用户快速发现感兴趣的商品, 提升用户体验; 同时也能够帮助平台提高销售转化率, 增加收入。本文将介绍一种先进的序列推荐模型 SASRec, 并展示其在亚马逊数据集上的应用实例。

SASRec 模型简介

SASRec(Self-Attentive Sequential Recommendation) 是一种基于自注意力机制的序列推荐模型。它由 Kang 等人于 2018 年提出, 能够有效捕捉用户的长期和短期兴趣, 在多个数据集上取得了优异的性能。

SASRec 模型的核心思想是:

  1. 将用户的历史行为序列作为输入
  2. 使用自注意力机制来学习不同行为之间的关系
  3. 预测用户下一个可能的行为

相比传统的 RNN 或 CNN 模型,SASRec 具有以下优势:

  • 可以同时建模长期和短期依赖关系
  • 计算效率高, 易于并行化
  • 模型可解释性强

在亚马逊数据集上的应用

接下来, 我们将展示如何使用 Microsoft Recommenders 库在亚马逊电子产品数据集上应用 SASRec 模型。

环境准备

首先, 我们需要安装必要的依赖包:

!pip install --upgrade recommenders

然后导入所需的库:

import sys
import os
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from recommenders.models.sasrec.sasrec_tf import SASRec
from recommenders.datasets.amazon_reviews import download_and_extract, data_preprocessing
from recommenders.evaluation.python_evaluation import (
    map_at_k,
    ndcg_at_k,
    precision_at_k,
    recall_at_k,
)
from recommenders.utils.timer import Timer
from recommenders.utils.constants import SEED

print("System version: {}".format(sys.version))
print("Recommenders version: {}".format(recommenders.__version__))

数据准备

我们使用亚马逊电子产品数据集。首先下载并解压数据:

data_path = download_and_extract(r'https://recommenders.blob.core.windows.net/datasets/amazon_reviews_electronics_5core.json')

然后对数据进行预处理:

data = data_preprocessing(data_path, threshold=5, col_names=['userID', 'itemID', 'rating', 'timestamp'])

将数据集分为训练集和测试集:

train, test = data.random_split(0.75)

模型训练

接下来, 我们创建 SASRec 模型实例并进行训练:

model = SASRec(
    item_num=data['item_num'],
    max_seq_length=50,
    num_blocks=2,
    embedding_dim=100,
    attention_dim=100,
    learning_rate=0.001,
    batch_size=128,
    num_epochs=100,
    seed=SEED
)

model.fit(train)

模型评估

训练完成后, 我们使用多个指标对模型进行评估:

k = 10
eval_metrics = {
    "MAP": map_at_k,
    "NDCG": ndcg_at_k,
    "Precision": precision_at_k,
    "Recall": recall_at_k
}

with Timer() as test_time:
    predictions = model.predict(test)

print("Took {} seconds for prediction.".format(test_time.interval))

for metric_name, metric_func in eval_metrics.items():
    score = metric_func(test, predictions, k=k)
    print("{:<11} @ {}: {:.4f}".format(metric_name, k, score))

结果分析

通过上述步骤, 我们成功地在亚马逊电子产品数据集上应用了 SASRec 模型。模型的性能可以通过 MAP 、 NDCG 、准确率和召回率等指标来评估。这些指标反映了模型在不同方面的推荐质量。

例如,NDCG@10 的值反映了模型在前 10 个推荐结果中的排序质量。 MAP@10 则衡量了模型检索相关项目的能力。准确率和召回率分别反映了推荐结果的精确性和完整性。

通过分析这些指标, 我们可以对 SASRec 模型在亚马逊电子产品数据集上的表现有一个全面的了解。如果需要进一步提升模型性能, 可以考虑调整模型参数, 如嵌入维度、注意力层数等, 或者尝试更复杂的模型结构。

结论

SASRec 模型作为一种先进的序列推荐算法, 在亚马逊电子产品数据集上展现出了良好的性能。它能够有效捕捉用户的长期和短期兴趣, 为用户提供个性化的推荐。通过 Microsoft Recommenders 库, 我们可以方便地实现和评估 SASRec 模型, 为推荐系统的研究和应用提供了有力的工具支持。

在实际应用中, 还需要考虑模型的效率、可解释性以及商业目标等因素。未来的研究方向可以包括将 SASRec 与其他模型进行集成, 探索更有效的特征表示方法, 以及在更大规模的数据集上进行验证。

参考文献

  1. Kang, W. C., & McAuley, J. (2018). Self-attentive sequential recommendation. In 2018 IEEE International Conference on Data Mining (ICDM) (pp. 197-206). IEEE.
  2. Microsoft Recommenders. (n.d.). GitHub repository. https://github.com/recommenders-team/recommenders

SASRec 模型在亚马逊数据集上的应用

在当今互联网时代,推荐系统已经成为各大电商平台必不可少的一部分。亚马逊作为全球最大的电商平台之一,如何通过先进的推荐系统为用户提供个性化的购物体验,成为其竞争力的重要来源之一。本文将介绍一种最新的推荐系统模型——SASRec,并探讨它在亚马逊数据集上的应用。

什么是 SASRec?

SASRec,全称为 Self-Attentive Sequential Recommendation,是一种基于自注意力机制的序列推荐模型。该模型通过捕捉用户行为序列中的复杂模式,来预测用户未来可能感兴趣的商品。

模型结构

SASRec 的核心在于其自注意力机制。自注意力机制可以理解为一种加权平均的计算方法,它能够根据序列中的各个元素之间的关系来调整它们的权重。具体来说,SASRec 模型主要由以下几部分组成:

  1. Embedding 层:将用户和商品的 ID 映射到一个低维度的向量空间。
  2. 自注意力层:通过多头自注意力机制来捕捉用户行为序列中的模式。
  3. 位置编码:加入位置编码信息,帮助模型理解序列中的顺序信息。
  4. 输出层:将自注意力层的输出进行处理,最终预测用户的下一次行为。

公式上,SASRec 的自注意力机制可以表示为:
[ \text{Attention}(Q, K, V. = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V ]
其中,(Q. 、 (K) 和 (V) 分别代表查询矩阵、键矩阵和值矩阵,(d_k) 是矩阵的维度。

SASRec 在亚马逊数据集上的应用

亚马逊数据集包含了用户的购买记录、浏览历史、商品评价等丰富的信息,这为 SASRec 模型的训练提供了良好的数据基础。

数据预处理

在实际应用中,首先需要对亚马逊的数据进行预处理。具体步骤如下:

  1. 数据清洗:去除缺失值和异常值,确保数据的质量。
  2. 数据分割:将数据划分为训练集、验证集和测试集,以便模型的训练和评估。
  3. 序列生成:将每个用户的行为记录按照时间顺序排列,生成用户行为序列。

模型训练

在完成数据预处理后,可以开始训练 SASRec 模型。在训练过程中,需要设置一些超参数,例如学习率、批量大小、嵌入维度等。此外,还需要选择适当的优化器 (如 Adam) 来加速模型的收敛。

模型评估

为了评估 SASRec 模型的性能,可以使用多个评价指标,例如精确率 (Precision) 、召回率 (Recall) 和 F1-Score 等。这些指标可以帮助我们全面了解模型的推荐效果。

实验结果

在亚马逊数据集上进行实验,SASRec 模型展示了其强大的推荐能力。与传统的协同过滤方法相比,SASRec 在多个评价指标上均取得了显著的提升。例如,在 Top-N 推荐任务中,SASRec 的 Precision 和 Recall 都明显优于基线模型。

结论

SASRec 模型通过引入自注意力机制,有效地捕捉了用户行为序列中的复杂模式,从而提高了推荐系统的性能。通过在亚马逊数据集上的实际应用,我们可以看到 SASRec 在推荐任务中的巨大潜力。未来,随着更多数据和更强计算能力的加入,SASRec 有望在电商平台上发挥更大的作用。

参考文献

  1. Kang, W. -C., & McAuley, J. (2018). Self-Attentive Sequential Recommendation. arXiv preprint arXiv:1808.09781.
  2. He, X. , Liao, L., Zhang, H., Nie, L., Hu, X., & Chua, T.-S. (2017). Neural Collaborative Filtering. In Proceedings of the 26th International Conference on World Wide Web (pp. 173-182).

SASRec 模型在亚马逊数据集上的应用

简介

在当今快速发展的电子商务平台上,推荐系统已经成为提升用户体验的重要工具。本文将介绍一种基于 Transformer 的序列推荐模型——SASRec,并探讨其在亚马逊数据集上的应用。

SASRec 模型简介

SASRec,全称为 Self-Attentive Sequential Recommendation,是一种基于自注意力机制的序列推荐模型。与传统的 CNN(如 Caser) 或 RNN(如 GRU 、 SLI-Rec) 不同,SASRec 依赖于 Transformer 编码器来生成用户行为序列的新表示。

模型变体

在本文中,我们将介绍两种基于 Transformer 的推荐模型:

  1. SASRec:基于 vanilla Transformer,仅建模商品序列。
  2. SSE-PT:基于 Stochastic Shared Embedding 的个性化 Transformer,既建模用户也建模商品。

数据预处理

亚马逊的电子产品数据集包含用户的购买记录。我们将对这些数据进行预处理,以便输入到 SASRec 模型中。数据集需要经过以下步骤的预处理:

  1. 下载并读取数据:获取亚马逊电子产品的用户评论数据。
  2. 过滤数据:过滤掉交互次数少于 10 次的用户和商品。
  3. 编码用户和商品:将用户 ID 和商品 ID 转换为从 1 开始的整数。
  4. 排序和分割:按用户 ID 和时间排序,并将数据划分为训练集、验证集和测试集。

数据示例

预处理后的数据格式如下所示:

userID  itemID
30449   2771
30449   61842
30449   60293
30449   30047
30449   63296
30449   22042
30449   6717
30449   75780

模型训练

模型参数

在训练模型之前,需要设置一些模型参数:

  • num_epochs:训练轮数
  • batch_size:批量大小
  • lr:学习率
  • maxlen:序列的最大长度
  • num_blocks:Transformer 块的数量
  • hidden_units:注意力计算的隐藏单元数量
  • num_heads:注意力头的数量
  • dropout_rate:dropout 率
  • l2_emb:L2 正则化系数
  • num_neg_test:每个正样本的负样本数量

模型构建

根据选择的模型 (SASRec 或 SSE-PT),可以构建相应的模型:

if model_name == 'sasrec':
    model = SASREC(item_num=data.itemnum,
                   seq_max_len=maxlen,
                   num_blocks=num_blocks,
                   embedding_dim=hidden_units,
                   attention_dim=hidden_units,
                   attention_num_heads=num_heads,
                   dropout_rate=dropout_rate,
                   conv_dims=[100, 100],
                   l2_reg=l2_emb,
                   num_neg_test=num_neg_test
    )
elif model_name == "ssept":
    model = SSEPT(item_num=data.itemnum,
                  user_num=data.usernum,
                  seq_max_len=maxlen,
                  num_blocks=num_blocks,
                  user_embedding_dim=10,
                  item_embedding_dim=hidden_units,
                  attention_dim=hidden_units,
                  attention_num_heads=num_heads,
                  dropout_rate=dropout_rate,
                  conv_dims=[110, 110],
                  l2_reg=l2_emb,
                  num_neg_test=num_neg_test
    )
else:
    print(f"Model-{model_name} not found")

采样器

采样器用于在每个批次中从训练数据中创建负样本:

sampler = WarpSampler(data.user_train, data.usernum, data.itemnum, batch_size=batch_size, maxlen=maxlen, n_workers=3)

训练步骤

定义损失函数并进行模型训练:

with Timer() as train_time:
    t_test = model.train(data, sampler, num_epochs=num_epochs, batch_size=batch_size, lr=lr, val_epoch=6)

print('Time cost for training is {0:.2f} mins'.format(train_time.interval/60.0))

评估结果

训练完成后,评估模型在测试集上的性能:

res_syn = {"ndcg@10": t_test[0], "Hit@10": t_test[1]}
print(res_syn)

结论

通过在亚马逊数据集上的实验,我们看到 SASRec 模型在推荐任务中表现出色。其基于自注意力机制的设计,使其能够有效地捕捉用户行为序列中的复杂模式,从而提高推荐准确性。未来,可以通过结合更多数据和优化算法,进一步提升模型性能。

参考文献

  1. Wang-Cheng Kang, Julian McAuley: Self-Attentive Sequential Recommendation, arXiv preprint arXiv:1808.09781 (2018)
  2. Ashish Vaswani, et al. Attention is all you need. In Advances in Neural Information Processing Systems.
  3. Jiaxi Tang, Ke Wang. Personalized top-n sequential recommendation via convolutional sequence embedding.
  4. Kyunghyun Cho, et al. Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation.
  5. Zeping Yu, et al. Adaptive User Modeling with Long and Short-Term Preferences for Personalized Recommendation.
  6. Liwei Wu, et al. SSE-PT: Sequential Recommendation Via Personalized Transformer.

发表评论