CTR---DIN原理,及deepctr组网实现DIN

文章目录

  • 原理小结
  • 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)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/63372.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第02章 PyTorch基础知识

文章目录 第02章 Pytorch基础知识2.1 张量2.2 自动求导2.3 并行计算简介2.3.1 为什么要做并行计算2.3.2 CUDA是个啥2.3.3 做并行的方法 补充:通过股票数据感受张量概念。 本图文是Datawhale组队学习Pytorch的学习笔记,主要内容包括张量的概念&#xff08…

大胆预测NBA2011-2012季后赛形势

以下都是我个人的看法,纯属猜测。希望大家不喜勿喷,有相同喜好的爱好者也可以把自己的想法写在评论上,大家一起讨论哦哈哈 NBA季后赛第一轮正在如火如荼的进行当中,除了雷霆已经以4:0的大比分淘汰了卫冕冠军小牛队之外,其他14支球队的争夺也已经到了最后的阶段了,现在先…

通过KNN算法预测数据所属NBA球员——Python实现

项目介绍 通过得分,篮板,助攻,出场时间四个数据来预测属于哪位球员。 选取了LeBron James,Chris Paul,James Harden,Kevin Love,Dwight Howard五位球员单场数据。 数据来源 本文使用数据全部来自于科赛网 ,字段解释如下&#xff1…

java的后撤建_后撤步难学?做好这几点,你的后撤步也能像哈登一样强!

原标题:后撤步难学?做好这几点,你的后撤步也能像哈登一样强! 后撤步投篮的一些要点, 可得好好学学, 没有一招拿得出手的后撤步, 如何在球场上立足。 中国孔子说"性相近也,习相远…

利用Python从数据分析的角度告诉你NBA2018-2019常规赛季为什么字母哥比哈登强?

目录 基于NBA2018-2019赛季常规赛球员数据进行数据挖掘 1. 挖掘背景与目标 1.1 挖掘背景 1.2 挖掘目标 2. 分析方法与过程 2.1 分析方法(主成分分析) 2.1 分析过程 3. 获取数据 4. 数据探索性分析与预处理 4.1探索性分析 4.1.1 条形图分析 4…

AI篮球裁判火了,走步算得特别准,就问哈登慌不慌

Alex 发自 凹非寺量子位 | 公众号 QbitAI 打篮球的友友们应该知道,走步是比赛中最常见的违规之一。 为了更好地监测篮球比赛中球员是否出现走步行为,一位网名叫Ayush Pai的小哥(我们就叫他AP哥吧)搞出了一个AI裁判。 如你所见&…

预测2019-2020赛季常规赛MVP

受新冠肺炎影响,2019-2020赛季NBA已经处于停摆状态,是否以及何时能复赛还不清楚。相关的各项评选如常规赛MVP、最佳阵容、最佳防守等也由于疫情暂停了。按照往年的赛程节奏,此时也应该进入常规赛收官阶段了。本文利用历史数据和本赛季常规赛已…

今天nba预测分析_焰神体育【NBA】赛事推荐预测分析:1月15日《开拓者》vs《步行者》...

波特兰开拓者(主) VS 印第安纳步行者 比赛时间:2021 1月15日 11:00 印第安纳步行者队 周四的大新闻是詹姆斯哈登在连续几周表现不佳后终于如愿以获,被交易到布鲁克林篮网队。 印第安纳步行者队用奥拉迪波交换莱弗里特到火箭。 凯文-普理查德可以说是今天…

前端图片显示不出来

原来的代码是 <img src"Release/warn.png">给路径加上 / 就可以了 <img src"/Release/warn.png"> 然后就正常显示了

页面加载微信聊天记录图片不显示问题

今天在做微信客服功能的时候页面通过异步请求微信的聊天记录&#xff0c;并把获取的结果appendchild页面中&#xff0c;发现微信的图片无权加载。如下图&#xff1a; 经过查阅资料得知&#xff0c;因为微信加载图片是通过一个地址请求然后返回的真是的图片地址&#xff0c;在请…

为什么计算机没有桌面显示不出来,​为什么电脑图片显示不出来

我们日常使用的电脑中&#xff0c;往往会有一些图片保存下来&#xff0c;用户想要打开自己需要的图片时&#xff0c;也可以通过显示的缩略图来查找&#xff0c;然而最近有用户的电脑桌面上的图片总是不显示出来&#xff0c;这让我们需要一张一张的进行查看&#xff0c;那么为什…

为什么html中图片显示不出来,网页图片不能显示 网页图片显示不出来的解决办法...

很多朋友上网遇到这样一种情况在浏览网页的时候发现网页中德图片不显示&#xff0c;(电脑百事网)一般现象是要门图像位置是空白&#xff0c;要么图像位置显示一个红叉&#xff0c;如下图所示&#xff0c;一般来说网页图片不显示主要影响页面美观&#xff0c;对我们影响相对不大…

在html中图片不显示不出来,网页图片显示不出来

很多小伙伴在打开网页的时候&#xff0c;发现网页的图片加载不出来&#xff0c;显示一个的标志&#xff0c;这是怎么一回事呢?可能是你的网速过低&#xff0c;等待一会就可以了&#xff0c;也可能是设置里面没有把显示图片打勾&#xff0c;具体的解决方法下面一起来看看吧。 显…

为什么html中图片显示不出来,网页图片显示不出来是什么原因?

原标题&#xff1a;网页图片显示不出来是什么原因&#xff1f; 在平时生活上网的过程&#xff0c;我们常常会遇到网页虽然是正常打开了&#xff0c;但网页上的图片却无法显示出来&#xff0c;无论怎么刷新也无法显示呢&#xff1f;一个网页打开正常与否&#xff0c;其实由很多因…

html浏览器图片不显示图片,教你网页图片显示不出来怎么办

网页是构成网站的基本元素&#xff0c;是一个包含HTML标签的纯文本文件&#xff0c;而文字与图片是构成一个网页的最基本的元素。今天&#xff0c;小编就给大家介绍一下网页图片显示不出来的解决方法&#xff0c;有需要就来了解一下吧 在查看网页的时候最重要的就是图片&#x…

流利阅读 2019.2.27 How sky-high rents forced people into imaginative alternatives

下载 笔记版/无笔记版 pdf资料&#xff1a; GitHub - zhbink/LiuLiYueDu: 流利阅读pdf汇总 本文内容全部来源于流利阅读。流利阅读对每期内容均有很好的文章讲解&#xff0c;向您推荐。 您可以关注微信公众号&#xff1a;流利阅读 了解详情。 How sky-high rents forced people…

V-Net 《Multi-Passage Machine Reading Comprehension with Cross-Passage Answer Verification》阅读理解笔记

V-Net 《Multi-Passage Machine Reading Comprehension with Cross-Passage Answer Verification》 这篇文章是发表在2018年ACL上的&#xff0c;是抽取式的。在微软发布的MS MARCO数据集和百度发布的中文数据集DuReader上得到了SOTA效果。 分以下四部分介绍&#xff1a; Mot…

掌握这15个可视化图表,小白也能轻松玩转数据分析

大数据时代&#xff0c;数据驱动决策。处理不好庞大、复杂的数据&#xff0c;其价值将大打折扣。 那如何缩短数据与用户的距离&#xff1f;让用户一眼Get到重点&#xff1f;让老板为你的汇报方案鼓掌&#xff1f; 本文通过连环15关&#xff0c;层层深入&#xff0c;传你数据匹…

几种可视化数据分析图表的使用

图表简洁大方、一目了然&#xff0c;利用图表工具就能轻松实现&#xff0c;是数据分析中常采用的方式。今天利用在雀书无代码平台搭建的图表来介绍几种常见数据分析图表的使用。 1. 柱状图 柱状图可以显示一段时间内的数据变化或显示各项之间的比较情况&#xff0c;主要使用颜…

数据分析——可视化图表

1、柱状图 展示多个分类的数据变化和同类别各变量之间的比较情况。 适用&#xff1a;对比分类数据&#xff08;比较不同的数值&#xff09;。 局限&#xff1a;分类过多则无法展示数据特点。 相似图表&#xff1a; 1&#xff09;堆积柱状图。比较同类别各变量和不同类别变量…