一文看懂推荐系统:排序05:排序模型的特征

一文看懂推荐系统:排序05:排序模型的特征

提示:最近系统性地学习推荐系统的课程。我们以小红书的场景为例,讲工业界的推荐系统。
我只讲工业界实际有用的技术。说实话,工业界的技术远远领先学术界,在公开渠道看到的书、论文跟工业界的实践有很大的gap,
看书学不到推荐系统的关键技术。
看书学不到推荐系统的关键技术。
看书学不到推荐系统的关键技术。

王树森娓娓道来**《小红书的推荐系统》**
GitHub资料连接:http://wangshusen.github.io/
B站视频合集:https://space.bilibili.com/1369507485/channel/seriesdetail?sid=2249610

基础知识:
【1】一文看懂推荐系统:概要01:推荐系统的基本概念
【2】一文看懂推荐系统:概要02:推荐系统的链路,从召回粗排,到精排,到重排,最终推荐展示给用户
【3】一文看懂推荐系统:召回01:基于物品的协同过滤(ItemCF),item-based Collaboration Filter的核心思想与推荐过程
【4】一文看懂推荐系统:召回02:Swing 模型,和itemCF很相似,区别在于计算相似度的方法不一样
【5】一文看懂推荐系统:召回03:基于用户的协同过滤(UserCF),要计算用户之间的相似度
【6】一文看懂推荐系统:召回04:离散特征处理,one-hot编码和embedding特征嵌入
【7】一文看懂推荐系统:召回05:矩阵补充、最近邻查找,工业界基本不用了,但是有助于理解双塔模型
【8】一文看懂推荐系统:召回06:双塔模型——模型结构、训练方法,召回模型是后期融合特征,排序模型是前期融合特征
【9】一文看懂推荐系统:召回07:双塔模型——正负样本的选择,召回的目的是区分感兴趣和不感兴趣的,精排是区分感兴趣和非常感兴趣的
【10】一文看懂推荐系统:召回08:双塔模型——线上服务需要离线存物品向量、模型更新分为全量更新和增量更新
【11】一文看懂推荐系统:召回09:地理位置召回、作者召回、缓存召回
【12】一文看懂推荐系统:排序01:多目标模型
【13】一文看懂推荐系统:排序02:Multi-gate Mixture-of-Experts (MMoE)
【14】一文看懂推荐系统:排序03:预估分数融合
【15】一文看懂推荐系统:排序04:视频播放建模


提示:文章目录


排序模型的特征

前面的文章讲解了排序模型的结构,
这节内容是排序模型用的特征

召回和排序的模型中都有用户属性,用户属性记录在用户画像中,
用户ID是排序中最重要的特征之一,
用户ID是排序模型用的特征,召回和排序都会对用户ID做embedding
通常用32维或者64维向量。
在这里插入图片描述

人口统计学属性包括性别、年龄等等,不同性别、不同年龄段的用户兴趣点差别很大,
用户的账号信息包括用户注册时间、活跃度、新用户和老用户、高或低活用户的行为区别很大。
模型需要专门针对新用户、低活用户做优化,
再就是用户感兴趣的类目、关键词、品牌,这些信息可以是用户自己填写的也可以。

算法自动提取这些用户兴趣的信息,对排序也是很有用的。

与用户画像相对的是物品画像
在这里插入图片描述

现在几乎所有的工业界推荐系统中都会使用用户画像和物品画像。

物品ID的重要性自然不用说,物品embedding在召回排序中的重要性非常高,
物品的发布时间,或者物品年龄也是非常重要的特征。
在小红书一篇笔记发表的时间越久,价值就越低,
尤其是明星出轨、电商打折之类的强时效性话题。热度只有几天时间,
笔记定位的geohash和所在城市都被召回了,
排序有用geohash是对经纬度的编码,表示地图上一个长方形的区域,
再就是笔记的内容,包括标题、类目、关键词、品牌等信息。
通常对这些离散的内容特征做embedding,变成向量
笔记字数、图片数、视频清晰度标签数。
这些都是笔记自带的属性,这些属性反映出笔记的质量,
笔记的点击和交互指标跟这些属性相关。
内容信息量图片美学是算法打的分数,
是先用人工标注的数据训练CV和LP模型,
当新笔记发布的时候,用模型给笔记打分,把内容、信息量、图片、美学这些分数写到物品画像中,
这些分数可以作为排序模型的特征。

除了用户画像和物品画像,排序模型还会用到用户统计特征和笔记统计特征。
在这里插入图片描述

比如系统会记录用户最近30天的点击率、点赞率、收藏率、转发率这类统计值,
类似的还会记录最近七天的、一天的、一小时的,
用各种时间粒度可以反映出用户的实时兴趣、短期兴趣,还有中长期兴趣。

除此之外,还要分同统计各种指标。
比如小红书的笔记可以分为图文笔记和视频笔记,这两类对两类笔记分开做统计。

比如最近七天,该用户对图文笔记点击率、对视频笔记的点击率,
对图文和视频分别做统计,可以反映出用户对两类笔记的偏好。

类似的还会按照笔记类目做分头,比如最近30天用户对美妆笔记的点击率,
对美食笔记的点击率,对科技数码笔记的点击率,
这些统计量可以反映出用户对哪些类目更感兴趣。

如果一个用户对美食笔记的点击数、点击率等指标都偏高,说明这个用户对美食类目感兴趣。

刚才讨论了用户的统计特征,下面看一下笔记的统计特征,跟用户特征类似,
在这里插入图片描述

系统会记录每篇笔记最近的曝光数、点击数、点赞数、收藏数等指标,
时间粒度有30天、七天、一天、一小时,这些统计量反映出笔记的受欢迎程度,
如果点击率、点赞率等指标都很高,说明笔记质量高,算法应该给这样的笔记更多的流量。

使用不同的时间粒度也是有道理的。
有些笔记的时效性强,30天指标很高,
但是最近一天的指标很差,说明这样的笔记已经过时了,不应该给更多流量,

还会按照笔记的受众做分桶,比如把受众分成男女两个桶,
分别计算男性的点击率和女性的点击率。
这样的统计量可以反映出笔记是更受男性欢迎,还是更受女性欢迎。

比如一篇笔记是对粉色键盘的测评,笔记的总体点击、点赞指标都很高。
但是来自男性用户的点击率很低,这说明不应该把这款粉色键盘推荐给男性用户,

除了性别分红,还有年龄、分红、地域分红等等,用途也是类似的。

再就是作者的统计特征,比如作者发布的笔记数,
作者的粉丝数,还有消费指标,包括曝光数、点击数、点赞数、收藏数等等,
这些特征反映了作者的受欢迎程度以及他作品的平均品质。
很显然,如果一个作者已有作品的品质普遍很高,
他新发布的作品的品质,大概率也会很高。

最后一类特征是场景特征,他们是随着推荐请求传来的,
在这里插入图片描述

不用从用户画像以及画像的数据库中获取
用户当前定位的经纬度定位的城市属于场景特征,
当用户登录小红书的时候,如果用户给小红书权限允许使用用户的地理定位,
那么小红书的服务器就会知道用户的经纬度。如所在城市,
这些信息对召回的排序都有用,因为用户可能对自己附近发生的事儿感兴趣。

当前的时刻也属于场景特征,对推荐很有用。
一个人在同一天不同时刻的兴趣可能有所区别,
在上班路上、在办公室或者晚上睡觉以前,
用户想看的东西可能不一样。

还有其他的场景特征,比如是否是周末,是否是节假日,周末和节假日的时候用户。
可能对特定的话题感兴趣,

再就是设备信息,比如手机品牌,手机型号、操作系统。
我也不知道为什么安卓用户和苹果用户的点击率、点赞率这些指标差异非常显著,
所以设备信息也是有用的特征。

最后简单讨论一下特征处理,离散特征的处理很简单,就是做embedding
离散特征有很多种,
在这里插入图片描述

用户ID embedding
作者ID的数量都非常巨大,都是几千万、几亿的级别。
消耗内存很大,像类目、关键词、城市、手机品牌,这样的离散特征处理起来很容易,
比方说笔记的类目也就几百个,关键词也就几百万个,给他们做embedding,比较容易,消耗内存不多,

连续特征有不同的处理方法。
第一种方法是做分头,把连续特征变成离散特征,像年龄以及字数、视频长度之类的连续特征都可以这么处理。

当初把连续的年龄变成十个年龄段,做one-hot编码或者做embedding连续特征,
还有其他不同的处理方式,

曝光数、点击数、点赞数这些指标都是长尾分布。
以曝光数为例,大多数笔记只有几百次曝光而已,
而极少数的笔记能有上百万次曝光。
假如直接把曝光数作为特征输入,模型一旦出现几十万、几百万这种特别大的数值,计算会出现异常,
比如训练的时候梯度会很离谱,做推理的时候预估值会很奇怪。

对应的连续特征通常是做log一加X变换,这样会解决异常值的问题。

除此之外,还可以把曝光数、点击数、点赞数这样的指标变成点击率、点赞率。
这里还需要做一下平滑,去掉偶然性造成的波动。
在我们实际的推荐系统中,两种变换之后的连续特征都作为模型的输入,
比如LOG1加曝光数,Log一加点击数会被用到,
平滑之后的点击率、点赞率也会被用到。

小结一下,前面的内容排序需要用到这几类特征,
在这里插入图片描述

用户画像特征,笔记画像特征、用户统计特征,笔记统计特征还有场景特征。

特征覆盖率

前面我逐一解释了为什么这些特征有用,在做特征工程的时候,需要关注一下特征覆盖率,
在理想的情况下,每个特征都能覆盖100%的样本,也就是说不存在特征缺失的问题。

但实际上大多数特征都有缺失,覆盖率达不到100%。
在这里插入图片描述

比如很多用户注册的时候不填写年龄,所以用户年龄特征的覆盖率远小于100%。
再比如很多用户设置了隐私权限,使得APP不能获得用户的地理定位,因此场景特征有缺失。
做特征工程的时候,要分析特征的覆盖率,可以想各种办法提高特征覆盖率,
如果一个特征很重要,提高它的覆盖率肯定可以显著提升模型的表现。

除了特征覆盖率,做特征工程的时候,还要考虑一下当特征缺失的时候要用什么作为默认值。

配件系统拥有三个数据源,包括用户画像、物品画像,还有统计数据。
在这里插入图片描述

三个数据源都存储在内存数据库中,
在线上服务的时候,排序服务器会从三个数据源取回所需的数据,
然后把读取的数据做处理作为特征位给模型,
模型就能预估出点击率、点赞率等指标。

最后,我粗略介绍,一下线上服务的系统架构,我做了很多简化,
实际上的系统会比我讲的要复杂很多。
在这里插入图片描述

当用户刷小红书的时候,用户请求会被发送到推荐系统的主服务器上,
主服务器会把请求发送到召回服务器上,做完召回之后,
召回服务器会把几十路召回的结果做规定,把几千篇笔记的ID返回给主服务器。

召回需要调用用户画像,这里我就不展开讲了。

我们把重点放在排序上,主服务器把笔记ID、用户ID还有场景特征发送给排序服务器,
这里有一个用户ID和几千个笔记ID。
笔记ID是召回的结果。
用户ID和场景特征都是从用户请求中获取的,场景特征包括当前的时刻、用户所在的地点以及手机的型号和操作系统。

接下来,排序服务器要从多个数据源中取回排序所需的特征,
主要是这三个数据源,用户画像、物品画像,还有统计数据取回的特征,
分别是用户特征、物品特征、统计特征、

用户画像数据库线上压力比较小,因为每次只读一个用户的特征,
而物品画像数据库压力非常大,粗牌要给几千篇笔记做排序,读取几千篇笔记的特征。
同样的道理,纯用户统计值的数据库压力小。
在这里插入图片描述

物品统计时的数据库压力很大,在工程实践的时候,用户画像里面存什么都可以,特征可以很多很大,
但尽量不要往物品画像里塞很大的向量,否则物品画像会承受过大的压力。

用户画像较为静态,像性别、年龄这样的属性几乎不会发生变化,
用户活跃度、兴趣标签这些属性通常也就是天级别的刷新,变化很慢,

物品画像的变化更少,可以认为是完全静态的。
物品自身的属性还有算法给物品打的标签,在很长一段时间内不会发生任何变化。

对于用户画像和物品画像,最重要的是读取速度快,而不太需要考虑时效性
因为他们都是静态的,
有时候甚至可以把用户画像和物品画像缓存在排序服务器本地,让读取变得更快,
但是不能把统计数据在本地缓存,统计数据是动态变化的,时效性很强。
数据是动态变化的,时效性很强。

比如用户刷新小红书,往下刷了30篇笔记,点击了五篇,点赞了一篇,
那么这个用户的曝光、点击、点赞的统计量都发生了变化,要尽快刷新数据库,
在这里插入图片描述

在收集到排序所需的特征之后,排序服务器把特征打包传递给tf serving
会给笔记打分,把分数返回给排序服务器,
排序服务器会用融合的分数、多样性分数
还有业务规则给笔记做排序。

把排名最高的几十篇笔记返回给主服务器,
这些就是最终给用户曝光的笔记。

哦了,这节讲了排序所需的特征,包括用户画像、物品画像、统计特征,还有场景特征。
工业界基本上都是这么做的,只在特征的选择和处理上会贴近各自的业务场景。


总结

提示:如何系统地学习推荐系统,本系列文章可以帮到你

(1)找工作投简历的话,你要将招聘单位的岗位需求和你的研究方向和工作内容对应起来,这样才能契合公司招聘需求,否则它直接把简历给你挂了
(2)你到底是要进公司做推荐系统方向?还是纯cv方向?还是NLP方向?还是语音方向?还是深度学习机器学习技术中台?还是硬件?还是前端开发?后端开发?测试开发?产品?人力?行政?这些你不可能啥都会,你需要找准一个方向,自己有积累,才能去投递,否则面试官跟你聊什么呢?
(3)今日推荐系统学习经验:用户画像、物品画像、统计特征,还有场景特征

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰露可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值