Skip to content

Commit 28713b4

Browse files
authored
Merge pull request #408 from 123malin/tree-based-model
test=develop, add tdm
2 parents 713a120 + 95de130 commit 28713b4

File tree

15 files changed

+2171
-19
lines changed

15 files changed

+2171
-19
lines changed

models/treebased/README.md

Lines changed: 47 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,56 @@
1-
# Paddle-TDM
1+
# Paddle TDM系列模型解决方案
22

3-
TDM召回方法来源于阿里妈妈团队在`KDD2018`发表的论文[Learning Tree-based Deep Model for Recommender Systems](https://arxiv.org/pdf/1801.02294.pdf)本示例代码提供了基于PaddlePaddle实现的TreeBased推荐搜索算法,主要包含以下组成:
3+
本示例代码提供了基于PaddlePaddle实现的树模型推荐搜索算法,包括[TDM](https://arxiv.org/pdf/1801.02294.pdf)[JTM](https://arxiv.org/pdf/1902.07565.pdf)。树模型是为大规模推荐系统设计的、能承载任意先进模型来高效检索用户兴趣的推荐算法解决方案。该方案基于树结构,提出了一套对用户兴趣度量进行层次化建模与检索的方法论,使得系统能直接利高级深度学习模型在全库范围内检索用户兴趣。其基本原理是使用树结构对全库item进行索引,然后训练深度模型以支持树上的逐层检索,从而将大规模推荐中全库检索的复杂度由O(n)(n为所有item的量级)下降至O(log n)。
44

5-
- 基于fake数据集,适用于快速调试的paddle-tdm模型。主要用于理解paddle-tdm的设计原理,高效上手设计适合您的使用场景的模型。
65

7-
以上内容将随paddle版本迭代不断更新,欢迎您关注该代码库。
6+
## 快速开始
87

9-
## TDM设计思路
8+
基于demo数据集,快速上手TDM系列模型,为您后续设计适合特定使用场景的模型做准备。
109

11-
### 基本概念
12-
TDM是为大规模推荐系统设计的、能承载任意先进模型来高效检索用户兴趣的推荐算法解决方案。TDM基于树结构,提出了一套对用户兴趣度量进行层次化建模与检索的方法论,使得系统能直接利高级深度学习模型在全库范围内检索用户兴趣。其基本原理是使用树结构对全库item进行索引,然后训练深度模型以支持树上的逐层检索,从而将大规模推荐中全库检索的复杂度由O(n)(n为所有item的量级)下降至O(log n)。
10+
假定您PaddleRec所在目录为${PaddleRec_Home}。
1311

14-
### 核心问题
12+
- Step1: 进入tree-based模型库文件夹下,完成demo数据集的切分、建树等准备工作。
1513

16-
1. 如何构建树结构?
17-
2. 如何基于树结构做深度学习模型的训练?
18-
3. 如何基于树及模型进行高效检索?
14+
```shell
15+
cd ${PaddleRec_Home}/models/treebased/
16+
./data_prepare.sh demo
17+
```
18+
demo数据集预处理一键命令为 `./data_prepare.sh demo` 。若对具体的数据处理、建树细节感兴趣,请查看 `data_prepare.sh` 脚本。这一步完成后,您会在 `${PaddleRec_Home}/models/treebased/` 目录下得到一个名为 `demo_data`的目录,该目录结构如下:
1919

20-
### PaddlePaddle的TDM方案
20+
```
21+
├── treebased
22+
├── demo_data
23+
| ├── samples JTM Tree-Learning算法所需,
24+
| | ├── samples_{item_id}.json 记录了所有和item_id相关的训练集样本。
25+
| ├── train_data 训练集目录
26+
| ├── test_data 测试集目录
27+
| ├── ItemCate.txt 记录所有item的类别信息,用于初始化建树。
28+
| ├── Stat.txt 记录所有item在训练集中出现的频次信息,用于采样。
29+
| ├── tree.pb 预处理后,生成的初始化树文件
30+
```
2131

22-
1. 树结构的数据,来源于各个业务的实际场景,构造方式各有不同,paddle-TDM一期暂不提供统一的树的构造流程,但会统一树构造好之后,输入paddle网络的数据组织形式。业务方可以使用任意工具构造自己的树,生成指定的数据格式,参与tdm网络训练。
23-
2. 网络训练中,有三个核心问题:
24-
25-
- 如何组网?答:paddle封装了大量的深度学习OP,用户可以根据需求设计自己的网络结构。
26-
- 训练数据如何组织?答:tdm的训练数据主要为:`user/query emb``item`的正样本,`item`需要映射到树的某个叶子节点。用户只需准备符合该构成的数据即可。负样本的生成,会基于用户提供的树结构,以及paddle提供的`tdm-sampler op`完成高效的负采样,并自动添加相应的label,参与tdm中深度学习模型的训练。
27-
- 大规模的数据与模型训练如何实现?答:基于paddle优秀的大规模参数服务器分布式能力,可以实现高效的分布式训练。基于paddle-fleet api,学习门槛极低,且可以灵活的支持增量训练,流式训练等业务需求。
28-
3. 训练好模型后,可以基于paddle,将检索与打分等流程都融入paddle的组网中,生成inference_model与参数文件,基于PaddlePaddle的预测库或者PaddleLite进行快速部署与高效检索。
32+
- Step2: 训练。config.yaml中配置了模型训练所有的超参,运行方式同PaddleRec其他模型静态图运行方式。当前树模型暂不支持动态图运行模式。
33+
34+
```shell
35+
python -u ../../../tools/static_trainer.py -m config.yaml
36+
```
37+
38+
- Step3: 预测,命令如下所示。其中第一个参数为训练config.yaml位置,第二个参数为预测模型地址。
39+
40+
```
41+
python infer.py config.yaml ./output_model_tdm_demo/0/
42+
```
43+
44+
- Step4: 提取Item(叶子节点)的Embedding,用于重新建树,开始下一轮训练。命令如下所示,其中第一个参数为训练config.yaml位置,第二个参数模型地址,第三个参数为输出文件名称。
45+
46+
```
47+
python get_leaf_embedding.py config.yaml ./output_model_tdm_demo/0/ epoch_0_item_embedding.txt
48+
```
49+
50+
- Step5: 基于Step4得到的Item的Embedding,重新建树。命令如下所示。
51+
52+
```
53+
cd ../builder && python tree_index_builder.py --mode by_kmeans --input epoch_0_item_embedding.txt --output new_tree.pb
54+
```
55+
56+
- Step6: 修改config.yaml中tree文件的路径为最新tree.pb,返回Step2,开始新一轮的训练。
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved.
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.

0 commit comments

Comments
 (0)