文章目录

  • 原理小结
  • deepctr实现DIN(基于df的数据格式)

原理小结


  • Candidate Ad

    • item,在这指广告特征。
  • User profile features

    • 代表用户的特征。
  • Context Features

    • 代表跟场景有关的特征,比如时间戳之类的。
  • User Behaviors

    • 代表着用户行为特征。
    • 主要就是过去用户明确表示感兴趣的item统统都打包起来,我们看一个人不是看他说什么,是看他做什么,所以这些特征要重点关照。
  • Activation Unit

    • 通常DNN网络抽取特征的高阶特征,减少人工特征组合,对用户历史行为数据进行处理时,需要把它们编码成一个固定长的向量,但是每个用户的历史点击个数是不相等的,通常的做法是对每个item embedding后,进入pooling层(求和或最大值)。DIN认为这样操作损失了大量的信息,故此引入attention机制,并提出了 Dice 激活函数,自适应正则,显著提升了模型性能与收敛速度。

    • 在Base Model里,这些用户行为特征在映射成embedding后直接一个sum/average pooling就算完事了,结果就是一个静态的embedding无法表征一个用户广泛的兴趣,所以在DIN中考虑加入Activation Unit,每个曾经的用户行为都跟Candidate Ad交互,交互的方法在上图的右上角也给出了,交互呢会交互出一个权重,代表着曾经的一个用户行为与Candidate Ad的相关性。比如你曾经买过篮球,买过毛衣针,那眼下有一个哈登同款保温杯,那我们肯定是更关注你以前买篮球的行为,那你买篮球的行为映射出的一个embedding的权重就大,买毛衣针的行为映射出的一个embedding的权重就小。有了这个权重,我们就可以在所有用户行为特征映射成embedding后做weighted sum pooling了。这样,针对每个不同的 Candidate Ad,每个用户行为特征在映射成embedding后经过weighted sum pooling后就会生成一个汇总的不同的embedding,这就是动态的embedding,动态的embedding就能表征出用户广泛的兴趣了。

关于DIN中,attention注意力机制、Dice激活函数、自适应正则详见:

注:链接文中Dice激活函数模块,PReLU的图是错的。

https://blog.csdn.net/Super_Json/article/details/105334936

参考自:

https://blog.csdn.net/Super_Json/article/details/105334936

https://blog.csdn.net/suspend2014/article/details/104377681

https://www.freesion.com/article/70981345211/

https://www.heywhale.com/mw/project/5d47d118c143cf002becca99

deepctr实现DIN(基于df的数据格式)

# coding:utf-8
import os, warnings, time, sys
import pickle
import matplotlib.pyplot as plt
import pandas as pd, numpy as np
from sklearn.utils import shuffle
from sklearn.metrics import f1_score, accuracy_score, roc_curve, precision_score, recall_score, roc_auc_score
from sklearn import metrics
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler, OneHotEncoder
# from sklearn.preprocessing import LabelEncoder as LEncoder     # 重写LabelEncoder
from sklearn.preprocessing import LabelEncoder
from deepctr.models import DeepFM, xDeepFM, MLR, DeepFEFM, DIN, DIEN, AFM
from deepctr.feature_column import SparseFeat, DenseFeat, get_feature_names
from deepctr.layers import custom_objects
from tensorflow.keras.models import save_model, load_model
from tensorflow.keras.models import model_from_yaml
import tensorflow as tf
from tensorflow.python.ops import array_ops
import tensorflow.keras.backend as K
from sklearn import datasets
from keras.models import Sequential
from keras.layers import Dense
from keras.utils import to_categorical
from keras.models import model_from_json
from tensorflow.keras.callbacks import *
from tensorflow.keras.models import *
from tensorflow.keras.layers import *
from tensorflow.keras.optimizers import *
from keras.preprocessing.sequence import pad_sequences
from keras.preprocessing.text import one_hot
from keras.layers.embeddings import Embedding
from deepctr.feature_column import SparseFeat, VarLenSparseFeat, DenseFeat, get_feature_namesfrom toolsnn import *
import settingsdef get_xy_fd2():data = pd.DataFrame({# 基础特征数据'user': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],'gender': [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20],'item_id': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],'cate_id': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],'pay_score': [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.10, 0.11],# 构造历史行为序列数据# 构造长度为 4 的 item_id 序列,不足的部分用0填充'hist_item_id': [np.array([1, 2, 3, 10]), np.array([6, 1, 0, 0]), np.array([3, 2, 1, 0]), np.array([1, 2, 10, 0]), np.array([1, 3, 0, 0]), np.array([3, 2, 0, 0]), np.array([5, 2, 0, 0]), np.array([10, 6, 0, 0]), np.array([1, 2, 10, 0]), np.array([3, 2, 10, 0]), np.array([9, 2, 10, 0])],# 构造长度为 4 的 cate_id 序列,不足的部分用0填充'hist_cate_id': [np.array([1, 2, 3, 10]), np.array([6, 1, 0, 0]), np.array([3, 2, 1, 0]), np.array([1, 2, 10, 0]), np.array([1, 3, 0, 0]), np.array([3, 2, 0, 0]), np.array([5, 2, 0, 0]), np.array([10, 6, 0, 0]), np.array([1, 2, 10, 0]), np.array([3, 2, 10, 0]), np.array([9, 2, 10, 0])],'y': [1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0]})print(data)print(data.dtypes)dcols = len(data.columns)# 对基础特征进行 embeddingbise_feature = [SparseFeat('user', vocabulary_size=int(data['user'].max())+1, embedding_dim=4),SparseFeat('gender', vocabulary_size=int(data['gender'].max())+1, embedding_dim=4),SparseFeat('item_id', vocabulary_size=int(data['item_id'].max())+1, embedding_dim=4),SparseFeat('cate_id', vocabulary_size=int(data['cate_id'].max())+1, embedding_dim=4),DenseFeat('pay_score', 1)]# 指定历史行为序列对应的特征behavior_feature_list = ["item_id", "cate_id"]# 构造 ['item_id', 'cate_id'] 这两个属性历史序列数据的数据结构: hist_item_id, hist_cate_id# 由于历史行为是不定长数据序列,需要用 VarLenSparseFeat 封装起来,并指定序列的最大长度为 4# 注意,对于长度不足4的部分会用0来填充,因此 vocabulary_size 应该在原来的基础上 + 1behavior_feature = [VarLenSparseFeat(SparseFeat('hist_item_id', vocabulary_size=int(data['item_id'].max())+1, embedding_dim=4, embedding_name='item_id'), maxlen=4),VarLenSparseFeat(SparseFeat('hist_cate_id', vocabulary_size=int(data['cate_id'].max())+1, embedding_dim=4, embedding_name='cate_id'), maxlen=4)]feature_columns = bise_feature + behavior_featurefeature_names = get_feature_names(bise_feature + behavior_feature)print(feature_names)x = {}for name in feature_names:if name not in ['hist_item_id', 'hist_cate_id']:x[name] = data[name].valuesprint(name, type(data[name].values))else:tmp = [t for t in data[name].values]x[name] = np.array(tmp)print(name, type(x[name]))y = data['y'].valuesprint(x)print(y)print(feature_columns)print(behavior_feature_list)return x, y, feature_columns, behavior_feature_listif __name__ == "__main__":x, y, feature_columns, behavior_feature_list = get_xy_fd2()# 构造 DIN 模型model = DIN(dnn_feature_columns=feature_columns, history_feature_list=behavior_feature_list)model.compile('adam', 'binary_crossentropy',metrics=['binary_crossentropy'])history = model.fit(x, y, verbose=1, epochs=3)

CTR---DIN原理,及deepctr组网实现DIN相关推荐

  1. MLR原理及deepctr组网实现MLR

    文章目录 MLR deepctr实现MLR MLR https://zhuanlan.zhihu.com/p/100532677 https://blog.csdn.net/fyneru_xiaohu ...

  2. 推荐系统之DIN原理与实现学习

    在学习今天的模型之前,可以先回顾一下前面学到的一些模型.事实上,之前学习的一些模型都有一些共同点,首先就是都将特征分为稠密和稀疏两部分分别处理,对于稀疏特征一般都会进行embedding.随后稠密的特 ...

  3. CTR预估模型演进史 · DeepCross、DIN、ESMM

    CTR预估模型演进史 · Deep&Cross.DIN.ESMM 1.Deep&Cross 1.1 cross_layer 2.DIN 2.1 Dice激活函数 2.2 Attenti ...

  4. CTR预估系列:DeepCTR 一个基于深度学习的CTR模型包

    在计算广告和推荐系统中,CTR预估一直是一个核心问题.无论在工业界还是学术界都是一个热点研究问题,近年来也有若干相关的算法竞赛.本文介绍一个基于深度学习的CTR模型包DeepCTR,具有简洁易用.模块 ...

  5. CTR --- FNN原理,及tf2实现

    文章目录 提出动机 解决方案 结构 作用 优缺点 tf2实现 提出动机 解决方案 结构 作用 优缺点 tf2实现 # coding:utf-8 # @Time: 2022/1/4 3:26 下午 # ...

  6. CTR深度学习模型之 DIN(Deep Interest Network) 的理解与例子

    在电商领域,每个用户都有丰富的历史行为数据,这些数据具有如下特点: 多样性(Diversity):用户可能对多种商品感兴趣,例如手机.衣服. 局部激活(Local Activation):用户是否点击 ...

  7. 深度推荐模型-DIN

    DIN 1.背景     Deep Interest Network(DIIN)是2018年阿里巴巴提出来的模型,该模型基于业务的观察,从实际应用的角度进行改进,相比于之前很多"学术风&qu ...

  8. 深度学习推荐模型-DIN

    深度学习推荐模型-DIN 本文参考链接,仅供个人学习: https://github.com/datawhalechina/team-learning-rs/tree/master/DeepRecom ...

  9. 推荐系统9---AFM与DIN模型(推荐系统遇上注意力机制)

    1,前言 AFM(Attentional Factorization Machines):FM模型的增强变体,这个其实算是NFM的一个延伸,在NFM模型的特征交叉层与池化层中间加了一个注意力网络,对于 ...

最新文章

  1. 树莓派悄悄放了个微软“后门”,系统加入微软源却未告知,用户怒了
  2. 软件架构设计之常用架构模式
  3. 【Scratch】青少年蓝桥杯_每日一题_7.01_正五边形组成的美丽春花
  4. gh-ost 原理剖析
  5. java重载与重写的区别+重写父类equals方法的完美实现
  6. 组建实验室仅3年,团队人均26岁,这位85后女博导成果登上Nature!
  7. 【Python】django模型models的外键关联使用
  8. JavaScript学习——判断数据类型总结(转)
  9. nginx 默认网站根目录在哪里
  10. 一个本科毕业生的Java学习之路
  11. css+javascript模拟OneNote2007Tab标签
  12. dellR230服务器如何进PE系统,戴尔服务器怎么进入u盘启动模式 选择oneshotbios
  13. deepin更新依赖错误_Ubuntu安装deepin-wine解决依赖问题
  14. cmd中通过winsat命令测试硬盘、CPU、内存、3d性能等
  15. 请问java如何跟isapi通讯,代码怎么实现?
  16. 深入理解 Linux 内存子系统
  17. 为什么在马云成功前就有那么多影像留下来?
  18. sql 求和并且将求和条件作为查询条件
  19. CC00033.bigdatajava——|Java方法封装.V15|——|Java.v15|费氏数列.v01|递归实现|
  20. Stata:今天你 “table” 了吗?图片版

热门文章

  1. 哈工大李治军老师操作系统笔记【27】:从生磁盘到文件(Learning OS Concepts By Coding Them !)
  2. 清华非全日制计算机硕士,2021年清华大学硕士招生分析,专硕非全日制占比高达67%...
  3. Ubuntu 10.04 安装声卡驱动
  4. 小学生加减乘除法做题系统,代码为纯c语言
  5. LAB002 -Oracle数据库手工冷备份(归档模式)
  6. NIOS 外存 SDRAM(华邦 W9864G6KH)
  7. 公司产品移动端网页-前端网页设计技术精美网站源码HTML+CSS+JS
  8. HTML5期末大作业:京东网站设计——仿2016版京东首页(1页) HTML+CSS+JavaScript 大学生网页作品 电商网页设计作业模板 学生网页制作源代码下载
  9. 【Microsoft Azure 的1024种玩法】七十四.五分钟在Azure Virtual Machines中快速部署一套软件项目管理及自动构建工具
  10. 任正非在荣耀送别会上的讲话(泪奔)