阿里CTR预估:用户行为长序列建模
本文将介绍Alibaba发表在KDD’19 的论文《Practice on Long Sequential User Behavior Modeling for Click-Through Rate Prediction》。文章针对长序列用户行为建模的问题从线上系统和算法两方面进行改进,已经成功部署在阿里巴巴的广告系统。
使用深度学习对用户兴趣建模在离线评估阶段带来了显著提升,但是在线部署时面对大量的流量请求难以实时推理,尤其是在对长序列用户行为数据,系统的延时和存储代价几乎是随着行为长度线性增长。为了解决长序列建模的挑战,作者从两个方面进行考虑:
1.从线上角度考虑,引入UIC(user interest center),从整个模型中分离出最消耗资源的。UIC依赖于用户的行为触发
2.从算法角度考虑,引入记忆架构,MIMN(Multi-channel user Interest Memory Network),捕捉长序列行为
Theoretically, the co-design solution of UIC and MIMN enables us to handle the user interest modeling with unlimited length of sequential behavior data.
无限长?带着怀疑又好奇态度拜读下这篇大作。
- UIC
首先为什么需要建模用户的长序列行为?下图是使用基础模型(DIN)在不同长度行为序列上实验的结果,可以看出当长度到达1000时AUC相比长度100时增加了0.6%。
图(A)是一个典型的CTR实时预估系统架构,主要由特征管理组件、模型管理组件和预测服务器组成。为了保证系统低延时和高吞吐量,用户的行为特征通常被存储在额外的存储系统,阿里使用的是自研TAIR。当新的流量请求到达时,特征更新到预测服务器参与实时推理计算,阿里使用DIEN实验发现,当行为序列长度达到150时,系统延时和吞吐量已经到达边缘了,更不用说1000的长度。
对用户长期行为建模有两个主要的限制:
1)存储限制
阿里拥有6亿用户,如果每个用户最大行为长度为150,至少需要1T的存储空间;长度到1000时,需要6T存储空间。更大的内存消耗,将会导致计算复杂度增加
2)延时限制
CTR预估模块根据输入的候选商品集合,输出对应的概率,这个过程通常需要在10ms内完成。DIEN在行为长度达到1000时,在500QPS延时达到了200ms,难以满足在线广告系统500QPS30ms的限制。
为了解决上述提到的长序列行为建模的问题,作者设计了UIC(user interest center)模块。图(B)是UIC模块的示意,(A)(B)的区别在于用户兴趣表示计算,在(B)中,UIC会为每个用户维持一个最新的兴趣表示,UIC的更新仅取决于用户的行为,不再是流量触发,可以做到无延时。实际应用证明,UIC+DIEN将1000长度的200ms减少到19ms在500QPS下。
- MIMN
从算法模型来看,建模长序列相当困难,RNN无法胜任,attention机制虽然可以更加有效的处理长序列,但是需要存储所有原始的用户行为序列,存储和计算代价太大。MIMN借鉴神经图灵机的思想,对长序列进行建模。下图是MIMN的架构
UIC存储MIMN的外部记忆,当用户产生新行为时进行更新。通过这种方式,UIC可以递增的从行为序列中捕获用户的兴趣,但是当存储资源有限时,固定维度的向量表达能力有限。作者提出了记忆利用正则化增加UIC单元的表示能力,同时提出了记忆归纳单元捕获高阶信息。
神经图灵机
神经图灵机使用一个记忆网络存储信息,通过读写控制器进行记忆读写。
记忆利用正则化
标准NTM存在记忆利用不平衡问题,导致记忆利用不充分。作者根据不同的记忆块,正则化写权重。
记忆归纳单元
记忆归纳单元将每个记忆块作为一个用户兴趣通道。在时间步t选择一个k个通道,对选中的通道更新
\[
S_t(i)=GRU(S_{t+1}(i),M_t(i),e_t)
\]
可以实现下面的结果
enen……,回家了有点懒,剩下的部分下次更新……
references:
[1] Alibaba. Practice on Long Sequential User Behavior Modeling for Click-Through Rate Prediction. KDD'19
阿里CTR预估:用户行为长序列建模的更多相关文章
- 0-3为变长序列建模modeling variable length sequences
在本节中,我们会讨论序列的长度是变化的,也是一个变量 we would like the length of sequence,n,to alse be a random variable 一个简单的 ...
- 主流CTR预估模型的演化及对比
https://zhuanlan.zhihu.com/p/35465875 学习和预测用户的反馈对于个性化推荐.信息检索和在线广告等领域都有着极其重要的作用.在这些领域,用户的反馈行为包括点击.收藏. ...
- 【项目】百度搜索广告CTR预估
-------倒叙查看本文. 6,用auc对测试的结果进行评估: auc代码如下: #!/usr/bin/env python import sys def auc(labels,predicted_ ...
- 【项目】搜索广告CTR预估(二)
项目介绍 给定查询和用户信息后预测广告点击率 搜索广告是近年来互联网的主流营收来源之一.在搜索广告背后,一个关键技术就是点击率预测-----pCTR(predict the click-through ...
- 闲聊DNN CTR预估模型
原文:http://www.52cs.org/?p=1046 闲聊DNN CTR预估模型 Written by b manongb 作者:Kintocai, 北京大学硕士, 现就职于腾讯. 伦敦大学张 ...
- 计算广告CTR预估系列(七)--Facebook经典模型LR+GBDT理论与实践
计算广告CTR预估系列(七)--Facebook经典模型LR+GBDT理论与实践 2018年06月13日 16:38:11 轻春 阅读数 6004更多 分类专栏: 机器学习 机器学习荐货情报局 版 ...
- 为什么要用深度学习来做个性化推荐 CTR 预估
欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:苏博览 深度学习应该这一两年计算机圈子里最热的一个词了.基于深度学习,工程师们在图像,语音,NLP等领域都取得了令人振奋的进展.而深 ...
- CTR预估算法之FM, FFM, DeepFM及实践
https://blog.csdn.net/john_xyz/article/details/78933253 目录目录CTR预估综述Factorization Machines(FM)算法原理代码实 ...
- 深度学习在CTR预估中的应用
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由鹅厂优文发表于云+社区专栏 一.前言 二.深度学习模型 1. Factorization-machine(FM) FM = LR+ e ...
随机推荐
- Activiti 工作流入门指南
概览 如我们的介绍部分所述,Activiti目前分为两大类: Activiti Core Activiti Cloud 如果你想上手Activiti的核心是否遵循了新的运行时API的入门指南:Acti ...
- 原生sql和 TP sql怎么关联?
整合后
- 如何学习Python的一些总结
https://mp.weixin.qq.com/s/w0NoDiYfvtTy8N3BVoIVpw 为什么选择Python 经常会有同学问我为什么选择Python.我很喜欢这门语言,因为它的简洁灵活, ...
- uni-app学习记录07-生命周期
<template> <view class="content"> 我是首页 </view> </template> <scr ...
- Codeforces Round #340 (Div. 2) B. Chocolate
题意:一段01串 分割成段 每段只能有一个1 问一段串有多少种分割方式 思路:两个1之间有一个0就有两种分割方式,然后根据分步乘法原理来做. (不过这里有一组0 1 0这种数据的话就不好直接处理,所以 ...
- Spring Data Jpa一对多单向映射
/** @author StormMaybin @date 2017-01-17 */ 生命不息,奋斗不止! 一对多映射关系 在JPA中,用@OneToMany来标识一对多的关系.实现一对多的单向关联 ...
- 基于 Laravel-Admin 在十分钟内搭建起功能齐全的后台模板
http://laravelacademy.org/post/6468.html 1.简介 为 Laravel 提供后台模板的项目越来越多,学院君已陆续为大家介绍过Laravel Angular Ad ...
- [转]分布式监控工具Ganglia 介绍 与 集群部署.
如果你目的很明确就是冲着标题来的,不爱看我唠叨,请直接进入第二个分割线之后的内容. 其实之前就是有做Swift监控平台的打算的,但是因为没什么硬性需求么,也不要紧的,就一直搁置了.最近实验室来了个大二 ...
- tf.squeeze()
转载自:https://www.cnblogs.com/mdumpling/p/8053376.html 原型 tf.squeeze(input, squeeze_dims=None, name=No ...
- linux 选择 ioctl 命令
在为 ioctl 编写代码之前, 你需要选择对应命令的数字. 许多程序员的第一个本能的反 应是选择一组小数从0或1 开始, 并且从此开始向上. 但是, 有充分的理由不这样做. ioctl 命令数字应当 ...