深度推荐模型笔记05 DIN模型

2023-10-07 22:39
文章标签 推荐 笔记 深度 模型 05 din

本文主要是介绍深度推荐模型笔记05 DIN模型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

深度推荐模型笔记05 DIN模型

本篇预计阅读时间5分钟,开源学习内容来自:datawhale
另外补充一些文章里提到的关于注意力机制和注意力网络的内容:注意力机制

1. DIN模型的来源和发展

论文《Deep Interest Network for Click-Through Rate Prediction》提出深度兴趣网络Deep Interest Network,以下简称DIN模型。它是一种从真实用户场景出发的模型,基于客户历史行为数据帮助类似attention的网络进行学习。

1.1 基线模型

DIN模型包括embedding layer,pooling layer and Concat layer,MLP,Loss层。以下分层说明各自关系。
在这里插入图片描述

  • embedding layer:把高维稀疏的输入转成低维稠密向量,每个离散特征下面会对应着一个embedding词典,维度为D/K,D是隐向量的维度,K表示当前离散特征点的唯一取值个数
  • pooling layer and Concat layer:根据用户的历史行为进行特征拼接。
  • MLP :全连接层
  • **loss:**点击率预测任务,二分类的问题

与基准模型相比,DIN引入了与attention机制功能相似的Activation Unit用于根据候选广告计算历史行为的权重。如下图:
在这里插入图片描述

1.2 DIN 模型架构

在这里插入图片描述

2. DIN代码复现

具有框架可以参考上面提到的开源地址,tensorflow中其实可以安装deepctr来实现DIN模型,代码如下:

pip install deepctr[gpu]

在其 github 仓库中提供了一个 demo,其代码以及关键部分的注释如下:

import numpy as npfrom deepctr.models import DIN
from deepctr.feature_column import SparseFeat, VarLenSparseFeat, DenseFeat,get_feature_namesdef get_xy_fd():# 对基础特征进行 embeddingfeature_columns = [SparseFeat('user',vocabulary_size=3,embedding_dim=10),SparseFeat('gender', vocabulary_size=2,embedding_dim=4), SparseFeat('item_id', vocabulary_size=3,embedding_dim=8), SparseFeat('cate_id', vocabulary_size=2,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 应该在原来的基础上 + 1feature_columns += [VarLenSparseFeat(SparseFeat('hist_item_id', vocabulary_size=3 + 1,embedding_dim=8,embedding_name='item_id'), maxlen=4),VarLenSparseFeat(SparseFeat('hist_cate_id', 2 + 1,embedding_dim=2 + 1, embedding_name='cate_id'), maxlen=4)]# 基础特征数据uid = np.array([0, 1, 2])ugender = np.array([0, 1, 0])iid = np.array([1, 2, 3])cate_id = np.array([1, 2, 2]) pay_score = np.array([0.1, 0.2, 0.3])# 构造历史行为序列数据# 构造长度为 4 的 item_id 序列,不足的部分用0填充hist_iid = np.array([[1, 2, 3, 0], [3, 2, 1, 0], [1, 2, 0, 0]])# 构造长度为 4 的 cate_id 序列,不足的部分用0填充hist_cate_id = np.array([[1, 2, 2, 0], [2, 2, 1, 0], [1, 2, 0, 0]])# 构造实际的输入数据feature_dict = {'user': uid, 'gender': ugender, 'item_id': iid, 'cate_id': cate_id,'hist_item_id': hist_iid, 'hist_cate_id': hist_cate_id, 'pay_score': pay_score}x = {name:feature_dict[name] for name in get_feature_names(feature_columns)}y = np.array([1, 0, 1])return x, y, feature_columns, behavior_feature_listif __name__ == "__main__":x, y, feature_columns, behavior_feature_list = get_xy_fd()# 构造 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=10)

这篇关于深度推荐模型笔记05 DIN模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/160891

相关文章

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

Java MCP 的鉴权深度解析

《JavaMCP的鉴权深度解析》文章介绍JavaMCP鉴权的实现方式,指出客户端可通过queryString、header或env传递鉴权信息,服务器端支持工具单独鉴权、过滤器集中鉴权及启动时鉴权... 目录一、MCP Client 侧(负责传递,比较简单)(1)常见的 mcpServers json 配置

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

深度解析Python yfinance的核心功能和高级用法

《深度解析Pythonyfinance的核心功能和高级用法》yfinance是一个功能强大且易于使用的Python库,用于从YahooFinance获取金融数据,本教程将深入探讨yfinance的核... 目录yfinance 深度解析教程 (python)1. 简介与安装1.1 什么是 yfinance?

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

深度解析Spring Security 中的 SecurityFilterChain核心功能

《深度解析SpringSecurity中的SecurityFilterChain核心功能》SecurityFilterChain通过组件化配置、类型安全路径匹配、多链协同三大特性,重构了Spri... 目录Spring Security 中的SecurityFilterChain深度解析一、Security

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用