项目用到的技术如下: 语言:
Python3
Java
Web端:
Layui
,Flask
,Nginx
,Gevent
,Flask_Cache
模型训练:
PaddleRec
,PaddlePaddle
深度学习模型:
DSSM
,DeepFM
向量召回:
milvus
数据存储:
Redis
模型推理:
PaddleServing
模块通信:gRPC
,protobuf
Python3、PaddlePaddle2.2.2、PaddleServing、milvus1.0、redis、nginx、Gevent
PaddlePaddle安装参考 :PaddlePaddle飞桨安装
Milvus的安装请参考:Milvus安装
Milvus的python驱动和PaddleServing安装
python3 -m pip install redis pymilvus==1.0.1 paddle_serving_app==0.3.1
gevent模块安装
pip install gevent
Flask_Cache模块安装
pip install Flask-Cache
当你安装以上依赖后,保证Redis和Milvus处于运行状态
1.向Redis中存储用户和商品数据
python to_redis.py
2.向Milvus中存储商品向量数据
python to_milvus.py
3.启动用户服务
python um.py
4.启动内容服务
python cm.py
5.启动召回服务
python recall.py
6.启动排序服务
python rank.py
7.启动应用服务
python as.py
8.启动Web应用
python controller.py
python controller2.py
到这里就可以使用系统了,在浏览器访问 http://localhost:5000
和http://localhost:5001
即可体验使用
如果还需要进行负载均衡可以运行Nginx,该项目中的Nginx配置内容请参考Nginx配置
如果您配置了Nginx,则在浏览器中访问 http://loclhost:5158
使用本系统
本项目中内置了一个跨平台演示Demo在ECRS_jav_demo
文件夹下,直接运行该文件夹下Client.java
文件,即可体验使用Java访问python编写的推荐服务模块,如果需要定制访问其他服务请参考跨平台访问
(1)登录。 系统的默认起始页,所有用户第一次访问系统时,都将访问该页面,同时该页面还承担着请求流量承载的功能。 (2)用户服务/商品服务。 将实验用的数据集进行拆分,用户数据和商品数据各一份,数据经过解析保存到非关系型数据库 Redis 中,外部传入用户和商品的唯一id 作为 key 到 Redis 中查找对应的 value 并以二进制流的形式将结果返回到相应的模块。 (3)召回服务。 召回服务主要有三个任务,当系统中有新用户使用时,上述的用户信息库中无法查询该用户的信息。系统可以利用原有的用户信息训练的模型拟合新增用户,新用户会通过这个用户模型得到该用户的特征向量;为了完成召回任务,需要提前将所有商品信息通过商品模型转换成商品特征向量并导入 Milvus 中,同理, 当有新商品上架时,需要预执行上述步骤以便新商品可以及时地被推荐;最后把用户向量和商品向量在Milvus 中做向量近似搜索,返回只包含商品id信息的候选集列表。 (4)排序服务。 召回阶段得到的候选集商品 id 列表通过商品服务查询商品的详细信息,然后与用户向量结合作为排序服务的输入,排序模型通过打分把所有候 选待推荐的商品按分数从高到低排序,最后返回这个含有详细商品信息的推荐列表。 (5)接口服务。 后台每个功能模块通过gRPC框架划分为微服务模块,每个服务拥有独立的通信端口channel,开发者可以根据需要向指定的模块的channel发送请求参数,模块接受到参数处理后返回结果。
您也可以查看系统的演示视频Bilibili在线演示
受限于文件大小,本项目并未上传模型和数据文件。 如需要请到以下链接获取 模型:链接:https://pan.baidu.com/s/1qZoFnWGLWkzrUKLHbE_c6g 提取码:t2bb 数据:https://aistudio.baidu.com/aistudio/datasetdetail/6458
在训练本项目的模型文件时,做了二分类和逻辑回归两种实验条件下的训练,模型最终在测试集上的结果如下:
二分类
模型 | Total | Correct | ACC | AUC |
---|---|---|---|---|
DSSM(user) | 1373344 | 857725 | 0.62455 | 0.7312 |
DSSM(item) | 1373344 | 857725 | 0.62455 | 0.7306 |
DeepFM | 1373344 | 858895 | 0.6254 | 0.73428 |
逻辑回归
模型 | Total | Correct | ACC | MAE |
---|---|---|---|---|
DSSM(user) | 1373344 | 797789 | 0.58090 | 2.57662 |
DSSM(item) | 1373344 | 798387 | 0.58134 | 2.56567 |
DeepFM | 1373344 | 765238 | 0.55720 | 2.43759 |
DSSM模型的ACC最高提升了7.5%,DeepFM模型的ACC最高提升了12.24%。
如果您需要训练自己的模型文件,可以参考官方项目或我的项目自己训练获取模型或者完成一个新的推荐系统,或者私信我获取本项目缺少的模型和对应的数据文件
项目遵守Apache License 2.0协议,将代码更改的部分已作说明非常感谢PaddleRec的demo,本项目大部分是基于该项目部分改动得到的。 感谢京东2019用户对品类下店铺的购买预测竞赛数据集 感谢PaddleServing、Redis、milvus对项目部署的支持; 感谢Protobuf和gRPC,实现了本项目的服务模块分布式部署和通信。