【开发者空间实践指导】基于Spotlight的电商推荐模型训练
一、案例介绍
在互联网时代,推荐系统一直以来都是一个热门技术领域,也是智能技术在商业中最成功和最广泛的应用之一。它是根据用户的历史行为、社交关系、兴趣点等信息去判断用户当前需要或感兴趣的产品或者服务的一类应用。推荐系统本身是一种信息过滤的方法,与搜索和栏目导航组成三大主流的信息过滤方法。
隐式反馈和显式反馈是推荐系统中常用的两种反馈信息类型。它们在数据来源、处理方式和应用场景等方面有所不同。 显式反馈是用户对物品的评分,如电影评分。隐式反馈是用户对物品的交互行为,如浏览,购买等,现实中绝大部分数据属于隐式反馈,可以从日志中获取。
本案例主要内容是基于云主机使用Spotlight实现电商平台推荐系统,Spotlight是一个面向推荐系统的Python库,它利用PyTorch的强大计算能力,构建了一系列深浅不一的推荐模型。这个项目不仅仅是代码的集合,更是一套全面的工具箱,涵盖了从损失函数设计到数据处理、再到多种模型实现的各个环节。通过Spotlight,研究者和开发者可以快速实验新的推荐算法,从而推动推荐技术的边界。对于希望探索深度学习在推荐中的应用的企业和研究者,Spotlight的深度推荐模型(如基于BPR损失的隐式模型)能够高效地针对隐式反馈场景提供个性化推荐。
通过本案例,可以掌握如何使用云主机并运用配套的开发环境工具进行项目加载与构建,数据准备,模型训练和测试等,从而体验到推荐类模型的训练过程和方式。
二、免费领取云主机
如您还没有云主机,可点击链接 ,根据领取指南进行操作。
如您已领取云主机,可直接开始实验。
三、实验流程
说明:
- 在CodeArts IDE中创建虚拟环境;
- 从Github加载代码;
- 安装Pytorch等依赖;
- 编写代码;
- 模型训练;
- 模型测试。
四、实验资源
云资源 |
消耗/时 |
时长 |
开发者空间-云主机 |
免费 |
60分钟 |
CodeArts IDE for Python |
免费 |
60分钟 |
合计:0元
五、实验步骤
5.1 配置Python运程依赖库
1. 确认云主机已安装Python和依赖管理工具pip,打开终端输入以下代码:
pip -V
若显示如下版本信息则表示Python已正确安装
2. 输入以下指令创建~/.pip/文件夹,并创建pip.conf配置文件:
mkdir ~/.pip
cd ~/.pip/
vim pip.conf
3. 按下“i”进入编辑模式,复制以下代码到pip.conf中,添加华为源。再按下“ESC”进入命令模式,输入“:wq”后保存退出。
[global]
index-url=https://repo.huaweicloud.com/repository/pypi/simple
trusted-host=repo.huaweicloud.com
timeout=120
4. 在命令行中输入以下查看镜像源:
pip config list
5.2 下载项目源码
1. 在云主机桌面打开终端命令行工具,进入到桌面目录。
cd ~/Desktop/
2. 下载项目到桌面。
git clone https://github.com/maciejkula/spotlight.git
3. 使用CodeArts IDE打开项目:
打开云主机桌面的CodeArts IDE,点击文件打开工程,选择桌面刚下载的项目文件夹打开。
4. 点击创建默认虚拟环境:
5. 如果右下角出现这个提示直接点击关闭掉:
6. 等待1分钟左右下图红框中的字样消失后点击“终端”界面右上角的关闭集成终端后再重新点击“终端”打开新的终端界面,此步是为在终端中激活虚拟环境:
7. 若出现“(venv)”字样则代表成功进入独立环境。
8. 在集成终端中安装本项目需要的依赖,包括torch、numpy等
pip install numpy
pip install torch
pip install scikit-learn
pip install h5py
pip install requests
5.3 加载数据集
在CodedArts IDE打开集成终端命令行,根据以下步骤在项目根目录下创建数据集文件夹,然后将数据集下载到本地。
1. 创建文件夹
mkdir -p datasets
2. 进入该文件夹
cd datasets/
3. 下载数据集
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,没有添加在上面;
- 使用以下代码替换原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)
5.4 项目构建
以上步骤准备好数据集后,下面准备项目参数训练模型。
1. 在项目根目录下找到examples文件夹,打开bloom_embeddings下的example.py;
2. 在代码文件最顶部的import块中,如图加入以下代码:
import sys
sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)),os.pardir,os.pardir))
如图所示
3. 往下找到if __name__ == '__main__' 代码块,修改参数:
4. 首先注释掉下图中所示代码,然后在下面添加以下两行代码。
datas = 'amazon'
model ='sequence'
5. 在上面完成之后,在如图在第一个if 处修改条件为:datas == 'movielens'
6. 第二个if 处修改条件为:model == 'sequence'
7. 完成上面之后,在下图所示代码处更改两个变量为 datas, model
5.5 训练模型
1. 打开集成终端,回到根目录下。
cd ~/Desktop/spotlight
2. 输入命令启动训练
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 文件内根据以下图红框所示处修改。
5.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字段:表示此次训练哈希值以区分其他训练模型结果
2. 此文件初始已经存在训练好的结果,可以全部或部分删除内容,重新进行训练,查看mrr指标的变化。
MRR(Mean Reciprocal Rank)是推荐系统中的一个评价指标,主要用于衡量推荐系统在寻址类或问答类检索中的表现。MRR通过计算标准答案在推荐系统结果中的排序的倒数,并对其求平均值来评估系统的性能。具体来说,MRR的值越高,表示推荐系统的性能越好。
此案例基于某网站用户数据集训练的模型,可用于该网站这些用户的商品推荐,同类电商产品可以基于自己的用户数据训练此模型,使用训练好的模型应用于系统内从而在平台达到一个较好的用户推荐性能。
本次对于推荐模型的训练实验就已完成,开发者可以通过这个训练实验体验深度学习算法进行模型的创建、训练以及测试的过程是怎样的,也可以学习到推荐领域算法模型的基本架构逻辑与训练过程及其评价指标原理。
- 点赞
- 收藏
- 关注作者
评论(0)