# DeepRec
DeepRec 是一个易用、易扩展、模块化的深度学习推荐算法项目,采用 `TensorFlow 2`实现
- 通过子类化`tf.keras.Model`来构建每一个算法模型
- 每个模型充分利用`tf.keras.Layer`的各种子类之间相互组合来实现对应的功能
- 使用`tf.data`API,轻松读取各种格式数据及预处理,从容应对海量样本
- 每次训练的模型、样本、训练参数均定义在`config/`文件夹下的一个配置文件中,运行`main/run.py`并传入配置文件路径即可开始训练
- 每个算法模型均使用公开数据集进行了验证
## 环境要求
* TensorFlow 2.6
* Python 3.8
## 数据集
- [淘宝展示广告点击率预估数据集](https://tianchi.aliyun.com/dataset/56)
- [Avazu数据集](https://www.kaggle.com/c/avazu-ctr-prediction/data?spm=a2c4g.11186623.0.0.46319507CFcyDY)
## 实现的模型
| 模型 | 描述 |
| ---- | ---- |
| [FM](https://www.csie.ntu.edu.tw/~b97053/paper/Rendle2010FM.pdf) | 在线性模型基础上进行了二阶特征交叉,且适用于高维稀疏特征样本 |
| [AFM](https://arxiv.org/pdf/1708.04617.pdf) | 在FM交叉特征中引入注意力机制,学习不同特征交叉的重要程度,降低无效特征交叉的权重 |
| [DeepFM](https://www.ijcai.org/proceedings/2017/0239.pdf) | 在wide侧使用FM进行二阶特征交叉,Deep侧使用多层神经网络 |
| TwoTowerDeepFM | 深度向量双塔模型,并把FM双塔化,实现了user塔与item塔的显示特征交叉 |
| [ESMM](https://arxiv.org/abs/1804.07931) | 通过预估CTR、CTCVR来间接预估CVR,缓解传统CVR预估的样本选择偏差、样本稀疏问题 |
| [DIN](https://arxiv.org/pdf/1706.06978.pdf) | 根据候选item对用户行为序列中的item加权 |
## 特征输入编码规则
特征编码为dict结构:
* key为特征名
* value为dict结构,包含两个kv元素:
* 第一个kv:
* key为"index"
* value为tensor,dtype支持int32、float32、string
* 第二个kv:
* key为"value"
* value为tensor,dtype支持float32
注意:
* 所有tensor必须为二维张量,形状为[batch_size, tag_size]
* batch_size:批量训练时批次大小
* tag_size:对于单一特征为1;序列特征为约定的一个大于1的固定值,每个序列特征的tag_size可不同
* 对于某一特定的特征,其index和value两个tensor的形状相同
示例:
```
{
'101': {
'index': <tf.Tensor: shape=(3, 1), dtype=int32>,
'value': <tf.Tensor: shape=(3, 1), dtype=float32
},
'901': {
'index': <tf.Tensor: shape=(3, 1), dtype=float32>,
'value': <tf.Tensor: shape=(3, 1), dtype=float32>
},
'109_14': {
'index': <tf.Tensor: shape=(3, 5), dtype=string>,
'value': <tf.Tensor: shape=(3, 5), dtype=float32>
}
}
```
## 配置文件
总共两个配置文件:
1. 第一个是样本配置文件,约定了从磁盘样本文件加载/转换到TensorFlow模型输入所要求格式
2. 第二个是模型训练过程中的配置文件
通过配置,能够方便地进行以下操作:
* 增加、删除特征
* 指定特征预处理方法
* 指定模型结构及其具体的参数,如DNN形状
* 指定优化器参数、损失函数、观测指标、正则方式等
### 样本配置文件
json格式
* train_input_path:样本文件所在磁盘路径
* data_config:样本参数
* input_type:磁盘中的样本文件格式,现仅支持CSV格式,即"CSVInput"
* input_attributes:有序字典,顺序为csv文件中的字段顺序
* key为特征或标签名称
* value为特征或标签的属性
* field_type:对于单一特征为SingleFeature;对于不带权重的序列特征为TagFeature;对于带权重的序列特征为WeightTagFeature
* index_type:支持int、float、string三种类型
* pad_num:序列特征截断或填充后的数量,序列特征必须填写
* label_fields:训练模型时所用到的label
* feature_fields:训练模型时所用到的feature
* batch_size:训练批次大小
* prefetch_size:提前读取一批样本到内存中,减少模型训练时读取数据延迟
示例:
```json
{
"train_input_path": "..\\data\\sample_test.csv",
"data_config": {
"label_fields": ["click", "conversion"],
"feature_fields": ["101", "901", "109_14", "210", "902", "903", "904"],
"input_attributes": {
"sample_id": {"field_type": "SingleFeature", "index_type": "int"},
"click": {"field_type": "ClassLabel"},
"conversion": {"field_type": "ClassLabel"},
"101": {"field_type": "SingleFeature", "index_type": "int"},
"901": {"field_type": "SingleFeature", "index_type": "float"},
"109_14": {"field_type": "WeightTagFeature", "index_type": "int", "pad_num": 5},
"210": {"field_type": "TagFeature", "index_type": "int", "pad_num": 5},
"902": {"field_type": "SingleFeature", "index_type": "string"},
"903": {"field_type": "WeightTagFeature", "index_type": "string", "pad_num": 5},
"904": {"field_type": "TagFeature", "index_type": "string", "pad_num": 5}
},
"batch_size":3,
"prefetch_size": 0,
"input_type": "CSVInput"
}
}
```
### 训练模型配置文件
json格式:
* model_config:模型参数
* model_type:模型类型,现支持ESMM、DIN、DeepFM、AFM、FM
* feature_groups:每个塔有一个特征簇
* key为特征簇名称
* value为特征名及其预处理方式(转换为从0开始的连续的自然数,作为后续embedding层的输入)
* input_names:特征名称,离散特征为单个特征值,连续特征为一个列表
* hash_bucket_size:类别特征hash。当index_type为int或string时可以使用此方法
* boundaries:连续特征分桶。当index_type为float时可以使用此方法
* int_vocab_list:int类别特征vocab
* str_vocab_list:string类别特征vocab
* embedding_dim:embedding维度
* deep_hidden_units:DNN形状
* l2_reg:l2正则系数
* train_config:训练参数
* epochs:训练轮次
* steps_per_epoch:每轮训练批次
* loss:损失函数
* metrics:评价指标
* optimizer:优化器
* name:优化器类型
* learning_rate:学习率
示例:
```json
{
"model_config": {
"model_type": "ESMM",
"feature_groups": {
"user": [
{"input_names": "101", "hash_bucket_size": 100000},
{"input_names": "901", "boundaries": [0.0, 0.2, 0.6, 1.0]},
{"input_names": "109_14", "hash_bucket_size": 10000},
{"input_names": "903", "hash_bucket_size": 10000}
],
"item": [
{"input_names": "210", "hash_bucket_size": 100000},
{"input_names": "902", "hash_bucket_size": 100000},
{"input_names": "904", "hash_bucket_size": 1000}
],
"cross": [
{"input_names": ["101", "902"], "hash_bucket_size": 100000}
]
},
"embedding_dim": 16,
"deep_hidden_units": [128, 64, 32, 8, 1],
"l2_reg": 0.0001
},
"train_config": {
"epochs": 2,
"steps_per_epoch":100,
"loss": ["binary_crossentropy", "binary_crossentropy"],
"metrics": ["AUC"],
"optimizer": {
"name": "adam",
"learning_rate": {
"schedule": "exponential_decay",
"initial_learning_rate": 0.0001,
"decay_steps": 10000,
"decay_rate": 0.5
}
}
}
}
```
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
该系统分为前台+后台的模式,功能需求分析可如下: 前台功能需求: (1)用户注册、登录:允许用户注册账号并登录系统。 (2)商品信息展示:展示各类商品信息,包括名称、价格、描述、图片等。 (3)商品在线购买:用户可将商品加入购物车,选择在线支付方式进行购买。 (4)商品排行榜显示:展示热门商品排行榜,根据销量或其他指标排序。 (5)商品推荐(深度学习推荐算法):基于用户行为数据和深度学习算法,向用户推荐可能感兴趣的商品。 (6)个性化推荐(关联规则推荐算法):根据用户历史数据和关联规则算法,为用户提供个性化推荐。 后台功能需求: (1)管理员管理:管理管理员账号,控制系统操作权限。 (2)用户注册管理:查看和管理用户注册信息。 (3)商品信息管理:实现商品信息的录入、编辑、删除功能;支持Excel批量导入商品信息。 (4)商品排行榜管理:管理商品排行榜数据,支持手动和自动排序功能。 (5)商品订单管理:管理用户的商品订单信息,处理退款、取消订单等操作。 (6)支付管理:管理交易支付信息,保证支付安全和及时性。 (7)商品推荐管理:配置和管理商品推荐策略,调整推荐算法参数。 (8)支付信息管理:查看、统计支付相关信息。 (9)营业额统计(图形化):生成营业额报表,支持图表展示,便于管理员监控业务状况。 用户需求: (1)用户资料修改:用户可查看和修改个人信息。 (2)我的订单、订单评价:用户可查看订单详情和评价商品、服务。 (3)我的支付信息:用户管理支付历史记录等支付信息。 完整前后端源码,部署后可正常运行! 环境说明 开发语言:python后端 python版本:3.7 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:pycharm
资源推荐
资源详情
资源评论






























收起资源包目录





































































































共 602 条
- 1
- 2
- 3
- 4
- 5
- 6
- 7
资源评论


大学生资源网
- 粉丝: 161
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 继电器在电气工程及自动化低压电器中的应用.docx
- 典型网络工程的案例分析.doc
- 全国计算机等考试二C笔试试卷.doc
- 大学计算机实验报告记录样本.doc
- 科大讯飞人工智能定义城市1.0版本发布.docx
- 软件学院软件工程硕士版培养方案终稿单证.doc
- 基于单片机的数字万用表研究设计.doc
- 集团公司大数据平台建设方案.docx
- 南京大学关于机器学习的 PPT 教学课件
- 热电厂建设项目管理控制研究.docx
- 项目管理的难点与对策.doc
- Oracle程序设计.docx
- 不依赖 sk-learn 库的纯 Python 机器学习算法实现
- 基于单片机的抢答器的方案设计书.doc
- 试论大数据环境下的企业财务管理改革路径.docx
- 初中英语教师基于网络平台的自主发展.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
