Skip to content

Latest commit

 

History

History
 
 

youtube_dnn

Youtebe-DNN

以下是本例的简要目录结构及说明:

├── data #样例数据
	├── train
		├── data.txt
    ├── test
		├── data.txt
├── generate_ramdom_data.py # 随机训练数据生成文件
├── __init__.py
├── README.md # 文档
├── model.py #模型文件
├── config.yaml #配置文件
├── data_prepare.sh #一键数据处理脚本
├── reader.py #reader
├── infer.py # 预测程序

注:在阅读该示例前,建议您先了解以下内容:

paddlerec入门教程


内容

模型简介

《Deep Neural Networks for YouTube Recommendations》 这篇论文是google的YouTube团队在推荐系统上DNN方面的尝试,是经典的向量化召回模型,主要通过模型来学习用户和物品的兴趣向量,并通过内积来计算用户和物品之间的相似性,从而得到最终的候选集。YouTube采取了两层深度网络完成整个推荐过程:

1.第一层是Candidate Generation Model完成候选视频的快速筛选,这一步候选视频集合由百万降低到了百的量级。

2.第二层是用Ranking Model完成几百个候选视频的精排。

本项目在paddlepaddle上完成YouTube dnn的召回部分Candidate Generation Model,分别获得用户和物品的向量表示,从而后续可以通过其他方法(如用户和物品的余弦相似度)给用户推荐物品。

由于原论文没有开源数据集,本项目随机构造数据验证网络的正确性。

本项目支持功能

训练:单机CPU、单机单卡GPU、本地模拟参数服务器训练、增量训练,配置请参考 启动训练

预测:单机CPU、单机单卡GPU;配置请参考PaddleRec 离线预测

数据处理

调用python generate_ramdom_data.py生成随机训练数据,每行数据格式如下:

#watch_vec;search_vec;other_feat;label
0.01,0.02,...,0.09;0.01,0.02,...,0.09;0.01,0.02,...,0.09;20

方便起见,我们提供了一键式数据生成脚本:

sh data_prepare.sh

运行环境

PaddlePaddle>=1.7.2

python 2.7/3.5/3.6/3.7

PaddleRec >=0.1

os : windows/linux/macos

快速开始

单机训练

mode: [cpu_single_train]

runner:
- name: cpu_single_train
  class: train
  device: cpu   # if use_gpu, set it to gpu
  epochs: 20
  save_checkpoint_interval: 1
  save_inference_interval: 1
  save_checkpoint_path: "increment_youtubednn"
  save_inference_path: "inference_youtubednn"
  save_inference_feed_varnames: ["watch_vec", "search_vec", "other_feat"] # feed vars of save inference
  save_inference_fetch_varnames: ["l3.tmp_2"]
  print_interval: 1

单机预测

通过计算每个用户和每个物品的余弦相似度,给每个用户推荐topk视频:

cpu infer:

python infer.py --test_epoch 19 --inference_model_dir ./inference_youtubednn --increment_model_dir ./increment_youtubednn --watch_vec_size 64 --search_vec_size 64 --other_feat_size 64 --topk 5

gpu infer:

python infer.py --use_gpu 1 --test_epoch 19 --inference_model_dir ./inference_youtubednn --increment_model_dir ./increment_youtubednn --watch_vec_size 64 --search_vec_size 64 --other_feat_size 64 --topk 5

运行

python -m paddlerec.run -m models/recall/youtube_dnn/config.yaml

结果展示

样例数据训练结果展示:

Running SingleStartup.
Running SingleRunner.
batch: 1, acc: [0.03125]
batch: 2, acc: [0.0625]
batch: 3, acc: [0.]
...
epoch 0 done, use time: 0.0605320930481, global metrics: acc=[0.]
...
epoch 19 done, use time: 0.33447098732, global metrics: acc=[0.]

样例数据预测结果展示:

user:0, top K videos:[40, 31, 4, 33, 93]
user:1, top K videos:[35, 57, 58, 40, 17]
user:2, top K videos:[35, 17, 88, 40, 9]
user:3, top K videos:[73, 35, 39, 58, 38]
user:4, top K videos:[40, 31, 57, 4, 73]
user:5, top K videos:[38, 9, 7, 88, 22]
user:6, top K videos:[35, 73, 14, 58, 28]
user:7, top K videos:[35, 73, 58, 38, 56]
user:8, top K videos:[38, 40, 9, 35, 99]
user:9, top K videos:[88, 73, 9, 35, 28]
user:10, top K videos:[35, 52, 28, 54, 73]

进阶使用

FAQ