你在使用哪种编程语言?快来投票,亲手选出你心目中的编程语言之王 了解详情
写点什么

微信看一看:推荐系统用户画像构建指南

2020 年 12 月 13 日

微信看一看:推荐系统用户画像构建指南

一、背景


用户画像是推荐系统中非常重要的一环,用户画像刻画的是否精准直接影响后续召回和排序环节的效果。


用户画像包括用户的基础信息,如性别年龄地域等。此外还有用户的行为信息,比如通过用户历史浏览的文章视频,计算出的用户的兴趣标签。



如上图所示,推荐系统会根据用户的画像把可能感兴趣的文章推送给用户。比如一个对 NBA 感兴趣的用户,他画像中有“库里”的标签,那系统很大可能会给他曝光相应的文章。


用户画像建模其实就是给用户打上他感兴趣的标签。然后这些标签会作为特征,传给召回和排序,最终排序将用户最可能感兴趣的文章展现给用户。


那么为什么要做用户画像建模呢,直接把用户的历史统计数据给到召回和排序做特征不就可以了吗?


一方面是用户的历史行为可能有成千上万条,由于性能原因,不可能把这么多的行为都喂到线上的召回和排序模型中,所以需要一个能够从用户众多历史行为中选出最感兴趣的 top 特征。


另一方面一些冷启动用户或者行为不丰富的用户,也需要额外补充一些可能感兴趣的用户标签,这部分就需要用户画像模型具有用户兴趣预估的能力


从上图的画像建模模块中可以看出,在建模过程中,我们会收集用户的各种统计行为数据和基础信息作为特征,然后训练用户画像预估模型,然后对用户的行为候选和预估的候选进行排序,最终吐出去的标签作为用户的画像。


二、问题建模


在构建用户画像标签中,我们能拿到的就是用户的一些基础信息,还有用户的一些行为特征,比如用户历史点击过的标签,类目等,此外就是用户在系统中的点击曝光日志。我们需要训练一个模型可以输入用户的特征,然后可以对任意标签进行打分。


1. 建模成多分类任务而非点击率预估


我们知道 CTR 训练的方式是从底层开始喂进去各种用户和 item 的特征,然后通过模型去自动学习用户和 item 的特征交叉。但是对于画像预估来说,这种模式是性能不友好的。


因为 CTR 处理的是召回后的结果,量级在千级别。而画像需要对整个标签空间(百万量级的标签)进行打分,所以我们直接把标签放到 label 侧,然后建模成一个多分类的任务,可以大大加快训练和预测效率。



2. 用户侧的特征学习


这里由于特征输入只有用户侧特征,那么如何更好的学习一个用户特征表达至关重要。这里我们使用下面的模型进行用户特征学习:



主要包括两部分,一个是用户域内域间的特征融合,另一个是用户的特征交叉:


(1)基于层次化 attention 的特征融合


首先对每个域内的多个离散特征进行 attention 融合,每个特征域输出一个 embedding,然后多个特征域的 embedding 再通过一个 attention 进行融合最终输出融合好的 embedding。这里 attention 单元在融合多个特征时的结构如下图所示:



这里每个 attention 单元会有一个 query vector,这个向量是在模型学习中学出来的一个向量,用来衡量哪些特征对分类更有帮助。这里我们将不同域内和域间的 attention 单元的 query vector 共享,发现效果更好。我们猜想共享 query vector 可以让不同域的特征发生正向的相互影响。


此外,我们将设计多头 attention 机制,每个头都是一个完整的层次化 attention 机制,用来增加模型对多兴趣的学习能力。



以上图为例,对于域内的标签特征,可以看出不同头侧重的兴趣不同。第一个头侧重历史兴趣,第二个则是体育和养生兴趣。


(2)用户特征交叉


当融合好用户的域内域间特征后,我们设计了一个特征交叉的模块。这个特征交叉的模块其实一个建模在稠密特征向量上面的特征交叉。


我们知道稠密特征向量的每一维其实也代表一个不可解释的空间。我们对特征向量的任意两维做特征交叉,使用类似 FM 的交叉方法,如下面公式,任意 i 和 j 维特征的交叉结果是,他们俩的特征隐向量内积乘上他俩数值的乘积。



这里交叉后的特征和之前的线性特征各自归一化到同一量级,然后 concat 一起喂到下一层。这里我们对比了一些别的方法,比如 AFM,NFM 这种基于 FM 的特征交叉,以及 DCN 和 AUTOINT 这种基于迭代的交叉网络的方法。


最终还是我们设计的这个特征交叉的模块效果更好。相对于我们设计的方法,上面的特征交叉的方法并没有显式的计算并保留两两维度的特征交叉值。


3. 用户点击标签偏好


在处理用户点击展现文章的时候,每一篇文章可能有不止一个标签。传统的训练方式就是把用户点击过的文章的标签全作为正例,曝光没点击的标签全作为负例。那这样训练的方式则默认用户对点击过文章的所有标签都感兴趣,这个假设显然是片面的。



这里我们尝试过上面三种训练的方式:第一种就是传统的拆分训练的方式,将一篇文章的多个标签拆分成多个正负例子;第二种就是我们最终使用的,用户对文章中的标签感兴趣程度相加决定用户最终的点击情况,这样模型自己去学习哪些标签应该更感兴趣。第三种是加上一个 attention 机制,相当在假设二的基础上去学习一个不同标签在文章中的权重,我们发现这种方式虽然让拟合的 loss 更好,但是准确率不如第二种,分析可能是因为学习到的权重信息并不能作用到最终用户标签的预估上导致的。


三、画像指标


在推荐系统中除了常用的点击率和时长之外,我们还需要考虑到画像的相关指标。这里我们主要使用画像有点数和画像有点率来衡量画像的线上准确率和覆盖情况。



四、实验


我们上面提到的特性进行实验,使用的是我们自己的数据和公开数据集 movielens 构造的数据。在域内域间融合上我们做了下面的实验:


1. attention 特征融合实验



对比的是 youtube-dnn 模型,UTPM 是我们的画像模型(包含是否共享 query vector;使用单头还是多头 attention)。


2. 特征交叉实验



将我们模型的特征交叉模块替换成 AFM,NFM,DCN 和 AUTOINT,在两个数据集上进行离线指标测试。


3. 拆分训练和联合训练的效果对比



其中 base 是拆分训练,joint-loss 是联合文章中的多个标签一起训练的结果。


4. 线上 ab 实验



模型改进(特征融合和特征交叉)和 loss 的改进对有点数(QC)和有点率(DCTR)都有正向提升。


五、思考和展望


用户画像建模非常核心的问题是如何学习好用户特征,这里其实还有非常多的有意思的工作我们正在做。比如当用户特征覆盖多个不同领域,模型如何更好的去学习不同领域的特征。


此外还有用户对文章的点击怎么样反应着用户对文章中的标签了、类目、公众号等属性的偏好,这里也值得更加深入的研究。


参考资料:


[1] Learning to Build User-tag Profile in Recommendation System:https://dl.acm.org/doi/abs/10.1145/3340531.3412719



头图:Unsplash

作者:闫肃

原文微信看一看:推荐系统用户画像构建指南

来源:云加社区 - 微信公众号 [ID:QcloudCommunity]

转载:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


2020 年 12 月 13 日 21:452115
用户头像
云加社区 腾讯云官方开发者社区

发布了 223 篇内容, 共 28.4 次阅读, 收获喜欢 157 次。

关注

评论

发布
暂无评论
发现更多内容

特权访问管理(PAM)即服务

龙归科技

canvas小球绕斜椭圆轨迹运动

空城机

JavaScript 前端 canvas 4月日更

一份完美的阿里开源Java面试宝典,Github上star数已30K+

Java架构师迁哥

只要你不敢以MySQL专家自诩,又岂敢错过这本神书?

Java架构师迁哥

IPFS矿机配置要求有哪些?IPFS矿机有哪些好的品牌?

投资矿机v:IPFS1234

IPFS矿机有哪些好的品牌 IPFS矿机配置要求有哪些

架构实战营 - 模块 2- 作业

carl

架构实战营

如果以这样的方式,你愿参与到碳普惠行动中吗?

CECBC区块链专委会

区块链

全国沿海港口首个区块链木材业务服务平台上线试运行,“区块链+港口”撬动数千万元“福利”

CECBC区块链专委会

港口

剖析6个MySQL死锁案例的原因以及死锁预防策略

北游学Java

Java MySQL 数据库 死锁

阿里巴巴架构师王小瑞“墙裂”推荐:RocketMQ核心实战原理

Java架构师迁哥

我从外包辞职了,10000小时后,走进阿里巴巴拿了offer

神奇小汤圆

Java 编程 程序员 架构 面试

每天学一个 Linux 命令(2):shutdown

民工哥

Linux 程序员 运维

合约跟单交易系统开发搭建

薇電13O25249123

数字货币

自学Java走进阿里,仅用了六个月,他是怎么做到的?

Java架构师迁哥

工业互联网的脖子被卡死了?

浪潮云

工业互联网

代码回现 | 如何实现交易反欺诈?

VoltDB

数据分析 金融科技 VoltDB

一战到底!终于有阿里大牛把对标阿里P7的Java学习路线与架构进阶宝典整理成册全网开源了!

程序员小毕

Java 程序员 架构 面试 分布式

portal认证-上线流程

箭上有毒

每天一个 Linux 命令(1):cd

民工哥

Linux 运维

小程序支持MQTT协议

风翱

小程序 websocket mqtt 4月日更

每天学一个 Linux 命令(3):ls

民工哥

程序员 linux运维

每天学一个 Linux 命令:dnf

Machine Gun

Linux 网络安全 渗透测试 WEB安全

阿里总结出Java九大核心专题,1159页内容,吃透后我上个月砍下5个大厂Offer!

Java架构追梦

Java 阿里巴巴 架构 面试 九大核心专题

python列表转字符串

ベ布小禅

四月日更

每天学一个 Linux 命令(4):useradd/userdel

民工哥

Linux 程序员 运维

每天学一个 Linux 命令(6):cp

民工哥

Linux 程序员 运维

IPFS挖矿是不是合法的?IPFS有什么投资价值?

投资矿机v:IPFS1234

IPFS挖矿是不是合法的 IPFS有什么投资价值

云上接单不空跑 京东云助力“佬司机”为货运物流业降本增效

CECBC区块链专委会

京东云

当造车成为风潮,谁帮助“造车党”连接未来?

脑极体

每天学一个 Linux 命令(5):passwd

民工哥

Linux 程序员 运维 后端

面试官:聊一聊SpringBoot服务监控机制

AI乔治

Java spring 架构 微服务 springboot

围绕“三个问题”开展的网易云音乐数据基础建设

围绕“三个问题”开展的网易云音乐数据基础建设

微信看一看:推荐系统用户画像构建指南-InfoQ