写点什么

基于 Spotlight 的电商推荐模型训练

  • 2025-09-04
    中国香港
  • 本文字数:3061 字

    阅读完需:约 10 分钟

基于Spotlight的电商推荐模型训练

1 概述

1.1 背景介绍

在互联网时代,推荐系统一直以来都是一个热门技术领域,也是智能技术在商业中最成功和最广泛的应用之一。它是根据用户的历史行为、社交关系、兴趣点等信息去判断用户当前需要或感兴趣的产品或者服务的一类应用。推荐系统本身是一种信息过滤的方法,与搜索和栏目导航组成三大主流的信息过滤方法。隐式反馈和显式反馈是推荐系统中常用的两种反馈信息类型。它们在数据来源、处理方式和应用场景等方面有所不同。 显式反馈是用户对物品的评分,如电影评分。隐式反馈是用户对物品的交互行为,如浏览,购买等,现实中绝大部分数据属于隐式反馈,可以从日志中获取。本案例主要内容是基于云主机使用 Spotlight 实现电商平台推荐系统,Spotlight 是一个面向推荐系统的 Python 库,它利用 PyTorch 的强大计算能力,构建了一系列深浅不一的推荐模型。这个项目不仅仅是代码的集合,更是一套全面的工具箱,涵盖了从损失函数设计到数据处理、再到多种模型实现的各个环节。通过 Spotlight,研究者和开发者可以快速实验新的推荐算法,从而推动推荐技术的边界。对于希望探索深度学习在推荐中的应用的企业和研究者,Spotlight 的深度推荐模型(如基于 BPR 损失的隐式模型)能够高效地针对隐式反馈场景提供个性化推荐。

1.2 适用对象

  • 企业 AI 开发部门

  • 个人 AI 方向开发者

  • 高校 AI 经验学生

1.3 案例时间

本案例总时长预计 60 分钟。

1.4 案例流程


说明:① 在 CodeArts IDE 中创建虚拟环境;② 从 Github 加载代码;③ 安装 Pytorch 等依赖;④ 编写代码;⑤ 模型训练;⑥ 模型测试。

基于Spotlight的电商推荐训练👈👈👈体验完整版案例,请点击这里。

2 操作步骤

2.1 配置 Python 远程依赖库

  1. 确认云主机已安装 Python 和依赖管理工具 pip,打开终端输入以下代码:


pip -V
复制代码


若显示如下版本信息则表示 Python 已正确安装。



2. 输入以下指令创建~/.pip/文件夹,并创建 pip.conf 配置文件:


mkdir ~/.pipcd ~/.pip/vim pip.conf
复制代码


  1. 按下“i”进入编辑模式,复制以下代码到 pip.conf 中,添加华为源。再按下“ESC”进入命令模式,输入“:wq”后保存退出。


[global]index-url=https://repo.huaweicloud.com/repository/pypi/simpletrusted-host=repo.huaweicloud.comtimeout=120
复制代码


  1. 在命令行中输入以下查看镜像源:


pip config list
复制代码


2.2 下载项目源码

  1. 在云主机桌面打开终端命令行工具,进入到桌面目录。


cd ~/Desktop/
复制代码


  1. 下载项目到桌面。


git clone https://github.com/maciejkula/spotlight.git
复制代码


  1. 使用 CodeArts IDE 打开项目:打开云主机桌面的 CodeArts IDE,点击文件->打开工程,选择桌面刚下载的项目文件夹打开。

  2. 点击创建默认虚拟环境:注:如果没有出现上图需执行下面命令,进入虚拟环境。安装 python3-venv 模块


sudo apt-get install python3-venv
复制代码



创建虚拟环境


python3 -m venv venv
复制代码


进入虚拟环境


source /home/developer/Desktop/spotlight/venv/bin/activate
复制代码



  1. 如果右下角出现这个提示直接点击关闭掉:

  2. 等待 1 分钟左右下图红框中的字样消失后点击“终端”界面右上角的 关闭集成终端后再重新点击“终端”打开新的终端界面,此步是为在终端中激活虚拟环境:

  3. 若出现“(venv)”字样则代表成功进入独立环境。

  4. 在集成终端中安装本项目需要的依赖,包括 torch、numpy 等。


pip install numpypip install torchpip install scikit-learnpip install h5pypip install requests
复制代码

2.3 加载数据集

在 CodedArts IDE 打开集成终端命令行,根据以下步骤在项目根目录下创建数据集文件夹,然后将数据集下载到本地。


  1. 创建文件夹


mkdir -p datasets
复制代码


  1. 进入该文件夹


cd datasets/
复制代码


  1. 下载数据集


wget https://github.com/maciejkula/recommender_datasets/releases/download/0.1.0/amazon_co_purchasing.hdf5
复制代码



4. 此时可以在工程的目录中看到下载的数据集文件:



5. 在项目根目录下找到 spotlight 文件夹,找到并进入 datasets 文件夹,打开 amazon.py:6. 在_download_amazon()函数下修改代码:


  • 首先确保在该代码文件已有 import os,没有的话请添加在程序的开头位置;


import os
复制代码



  • 使用以下代码替换原 path 变量代码,原来的代码可按 CTRL+/注释掉也可删除,注意红框以外的代码不要更改:(由于网速等原因网络加载会经常失败,此步是将原先网络加载数据更改为本地加载方式)


path = os.path.abspath(os.path.dirname(__file__))path = os.path.join(path,os.pardir,os.pardir)path = path + "/datasets/amazon_co_purchasing{}".format(extension)
复制代码


2.4 项目构建

以上步骤准备好数据集后,下面准备项目参数训练模型。


  1. 在项目根目录下找到 examples 文件夹,打开 bloom_embeddings 下的 example.py;

  2. 在代码文件最顶部的 import 块中,如图加入以下代码:


import syssys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)),os.pardir,os.pardir))
复制代码


如图所示:



3. 往下找到 if _name_ == '_main_' 代码块,修改参数:首先注释掉下图中所示代码,然后在下面添加以下两行代码。


datas = 'amazon'model ='sequence'
复制代码


在上面完成之后,在如图第一个 if 处修改条件为:datas == 'movielens'第二个 if 处修改条件为:model == 'sequence'



4. 完成上面之后,在下图所示代码处更改两个变量为 datas, model


2.5 训练模型

  1. 打开集成终端,回到根目录下。


cd ~/Desktop/spotlight
复制代码


  1. 输入命令启动训练


python ./examples/bloom_embeddings/example.py
复制代码


注意:自己的终端里有没有下方红框标识的信息,确保当前进入了 venv 环境下。



如果训练控制台输出有”skipping……”等信息,可以根据下面 2.6 步骤修改结果文件后,再次启动训练命令训练。3. 可以根据自己需要调整一些超参数,比较重要的有以下三个:


  • NUM_SAMPLES = 50; 这个值是 50 次样本训练,可以调整。

  • N_ITER = list(range(1, 20)); 这里 20 表示是每一次样本训练迭代轮次,自己可调整。

  • compression_ratios = (np.arange(1, 10) / 10).tolist();这里 10 表示压缩 10 次,自己可调整。自己可以进入 example.py 文件内根据以下图红框所示处修改。

2.6 模型测试结果

  1. 在目录 examples/bloom_embeddings/下找到 amazon_sequence_results.txt 此文件后打开查看,其中显示的是每次训练之后的指标参数信息,通过这些数据可以了解训练的模型的拟合好坏。这个文件每一行表示一次训练,字段说明如下:


  • n_iter 字段:表示这次训练迭代的轮次

  • loss 字段:表示本次训练使用了的损失算法

  • learning_rate 字段:表示学习率

  • l2 字段:表示正则比率超参

  • embedding_dim 字段:表示编码维度

  • batch_size 字段:表示每次梯度下降的损失训练数据批大

  • compression_ratio 字段:表示稀疏矩阵的压缩比率

  • test_mrr 字段:表示模型在测试数据集上的平均倒数排名

  • validation_mrr 字段:表示在验证集上的平均倒数排名

  • elapsed 字段:表示这次训练的耗时

  • hash 字段:表示此次训练哈希值以区分其他训练模型结果


  1. 此文件初始已经存在训练好的结果,可以全部或部分删除内容,重新进行训练,查看 mrr 指标的变化。MRR(Mean Reciprocal Rank)是推荐系统中的一个评价指标,主要用于衡量推荐系统在寻址类或问答类检索中的表现。MRR 通过计算标准答案在推荐系统结果中的排序的倒数,并对其求平均值来评估系统的性能。具体来说,MRR 的值越高,表示推荐系统的性能越好。此案例基于某网站用户数据集训练的模型,可用于该网站这些用户的商品推荐,同类电商产品可以基于自己的用户数据训练此模型,使用训练好的模型应用于系统内从而在平台达到一个较好的用户推荐性能。


本次对于推荐模型的训练就已完成,开发者可以通过这个训练体验深度学习算法进行模型的创建、训练以及测试的过程是怎样的,也可以学习到推荐领域算法模型的基本架构逻辑与训练过程及其评价指标原理。


用户头像

提供全面深入的云计算技术干货 2020-07-14 加入

生于云,长于云,让开发者成为决定性力量

评论

发布
暂无评论
基于Spotlight的电商推荐模型训练_Python_华为云开发者联盟_InfoQ写作社区