推荐广告系统中的特征

2022-08-01 21:49:36 浏览数 (1)

数据和特征的机器学习的基础,没有足够数量的正负样本和有效且适合模型的特征,即使模型再优秀,模型的效果也不好太好,相反数据量足够,设计出有效且适合模型的特征,即使使用最简单的模型也可能获得较好的效果,特征的重要性不言而喻,我们应该从哪些方面设计特征呢?文本中特征相关概念、人工特征工程、特征处理方式、特征工程和模型的结合等方面具体介绍下推荐广告系统中的特征。

推荐系统的特征:特征就是用户在对物品行为过程中相关信息的抽象表达。

代码语言:javascript复制
因为一个行为过程必须转换成某种数学形式才能被机器学习模型所学习,为了完成这种转换,我们就必须将这些行为过程中的信息以特征的形式抽取出来。但是,这种从具体行为信息转化成抽象特征的过程,往往会造成信息的损失。
    一是因为具体的推荐行为和场景中包含大量原始的场景、图片和状态信息,保存所有信息的存储空间过大,我们根本无法实现。
    二是因为具体的推荐场景中包含大量冗余的、无用的信息,把它们都考虑进来甚至会损害模型的泛化能力。 比如说,电影推荐中包含了大量的影片内容信息,我们有没有必要把影片的所有情节都当作特征放进推荐模型中去学习呢?其实没有必要,或者说收效甚微。

推荐系统的特征工程:特征工程就是利用工程手段从“用户信息”“物品信息”“场景信息”中提取特征的过程。

构建推荐系统特征工程的原则:尽可能地让特征工程抽取出的一组特征,能够保留推荐环境及用户行为过程中的所有“有用“信息,并且尽量摒弃冗余信息。

代码语言:javascript复制
什么样的特征是“坏特征”: 无用的特征( useless features),不会对模型的预估效果产生任何影响。 冗余的特征( redundant features),和已使用的特征很相似,没必要再使用一次。 难以理解的特征(hard to understand),特征和label的关系解释不通,难以用任何角度认为特征是有用的。
什么样的特征是“好特征”: 有区分性的特征(Informative),不同于已经使用的特征。 相互独立的特征(Independent),和别的特征不相似。 易于理解的特征(Simple),特征和label的关系可以从某种角度解释。

具体实践:构造特征是一定先思考用户在一次行为过程中,所有行为的依据是什么?

比如:用户历史经常点这个广告;用户历史经常点这种类型的广告,用户在这个广告位下经常点这个广告等。

广告推荐场景的特征从分布类型看,分为连续类型、离散类型(包含 ID 类型)、序列类型;从特征主体划分,可以分为 User 特征、Item 特征、Scene 特征、交叉特征

2、人工特征工程

User特征:用户属性、用户行为、用户关系

  • 用户属性:用户的人口学属性,比如:性别、年龄、职业、学历、薪资、颜值、感情状况、兴趣爱好等
  • 用户行为:
  • 用户在设备、APP、资源位、物品属性、物品上的时间行为和动作行为,比如:用户价值、用户生命周期、用户等级、用户贡献度、频次(活跃情况)、时长、使用时间段
  • 用户在产品上的各种操作,比如浏览、点击、播放、购买、搜索、收藏、点赞、转发、加购物车、甚至滑动、在某个位置的停留时长、快进等等一切操作行为。

用户行为数据(User Behavior Data)是推荐系统最常用,也是最关键的数据。用户的潜在兴趣、用户对物品的真实评价都包含在用户的行为历史中。 用户行为在推荐系统中一般分为显性反馈行为(Explicit Feedback)和隐性反馈行为(Implicit Feedback)。显式行为是直接表明用户兴趣的行为,比如点赞、评分等。 隐式行为虽不是直接表示用户的兴趣,但是该行为可以间接反馈用户的兴趣变化,只要不是用户直接评分、点赞的操作行为都算隐式反馈,包括浏览、点击、播放、收藏、评论、转发等等。 在不同的业务场景中,它们会以不同的形式体现。具体是怎么表现的呢? 不同业务场景下用户行为数据的例子对用户行为数据的使用往往涉及对业务的理解,不同的行为在抽取特征时的权重不同,而且一些跟业务特点强相关的用户行为需要推荐工程师通过自己的观察才能发现。 在当前的推荐系统特征工程中,隐性反馈行为越来越重要,主要原因是显性反馈行为的收集难度过大,数据量小。在深度学习模型对数据量的要求越来越大的背景下,仅用显性反馈的数据不足以支持推荐系统训练过程的最终收敛。所以,能够反映用户行为特点的隐性反馈是目前特征挖掘的重点。

具体构造用户行为特征的时候,可以从以下6个维度挖掘用户的长短期兴趣:

  • 用户粒度
    • 单个用户(用户ID)
    • 一群用户(用户属性):比如相同年龄段、同性别、同地域、安装了同款app的人群。基于人群的统计,对于新用户冷启意义重大
  • 时间粒度
    • 最近、过去x小时、过去1天、过去1周、过去1月、从用户首次使用app至今、...太长的时间粒度(e.g.,首次使用至今)在统计的时候,会考虑时间衰减
    • 长期历史的统计,会通过离线批量任务(hadoop/spark)的形式完成
    • 短期历史的统计,会直接访问线上缓存(redis)
  • 物料粒度
    • 单个物品(item id)
    • 一群物品(物品属性)item上的属性,比如一二级分类、标签、关键词、...
  • 动作类型
    • 正向:点击、有效观看、完整观看、点赞、转发、评论、...
    • 负向:忽略(曝光未点击)、短播、踩、...
  • 统计对象
    • 次数、时长、金额、...
  • 统计方法
    • 收集成列表、计算XTR、计算占比、...

总结就是可以用用户粒度&时间粒度&物料粒度&动作类型&统计对象&统计方法做交叉。

通过以上6个维度的交叉,我们可以构造出一系列特征来描述用户的长期(e.g., 首次使用app至今)、短期(e.g. 过去1天)、超短期(e.g., 刚刚观看的x个视频)的兴趣。比如:

  • 用户A,在过去1天,对tag="坦克"的CTR(i.e., 系统在过去1天,给该用户推了10篇带tag="坦克"的文章,该用户点击了6篇,ctr=0.6)
  • 用户A,在过去1天,对tag=“坦克”的点击占比(i.e., 在过去1天,用户一共点击了10文章,其中6篇带tag="坦克",点击占比=0.6)
  • 用户A,在过去1天,对tag=“坦克”的时长占比(i.e., 在过去1天,用户一共播放了100分钟,其中60分钟消费在带tag="坦克"的物料上,时长占比=0.6)
  • 用户A,在最近1小时,点击的文章列表
  • 用户A,在过去1天,忽略(隐式负反馈)category=“时尚”的item个数
  • 用户A,自首次使用app至今,对tag='坦克'的CTR(统计时,曝光数与点击数都要经过时间衰减)
  • 男性用户,在过去1月,对tag="坦克"的文章的CTR

以上6个维度只是为我们手工挖掘用户兴趣提供了一个框架,使我们添加特征时更有章法。至于具体要离线挖掘哪些特征,也要根据算力和收益,综合考虑;

这些手工挖掘的用户兴趣信号,可以作为DIN/DIEN/SIM挖掘出来的用户兴趣的补充。而在召回/粗排这种计算压力大的环节,由于可以离线挖掘而节省线上耗时,以上这些手工挖掘出的用户长短期兴趣可以(局部)代替DIxN/SIM这些“强但重”的复杂模型。

用户关系:通过用户关系建立关系图,生成Embedding。

使用 Graph Embedding 的方法生成用户和物品的 Embedding;还可以直接利用关系数据,通过“好友”的特征为用户添加新的属性特征;甚至可以利用用户关系数据直接建立社会化推荐系统。

参考:

如何构建用户标签体系? | 人人都是产品经理

用户标签实践:如何建立标签体系实现精准营销? | 人人都是产品经理

Item特征:物品属性、被用户行为

  • 物品属性:物品ID、物品所有者、物品包含的信息,对于视频来说,出品方、导演、演职员、主演、国别、年代、语言、是否获奖、剧情、海报图等等都是视频的元数据。对于电商商品来说,品类、用途、价格、产地、品牌等等也是非常重要的属性。
  • 物品被用户的行为:被曝光、点击、付费、完播率等

在User特征中,我们认为最重要的是用户行为特征,因为它直接反映了用户到底是对哪类物品感兴趣,同理,在Item特征中最重要的就是物品被用户的行为,这些行为直接反映了用户对这些物品的喜爱程度。

我们可以从下5个维度的交叉构造物品被用户的行为特征。

  • 时间粒度
    • 最近、过去x小时、过去1天、过去1周、过去1月、从用户首次使用app至今、...
    • 太长的时间粒度(e.g.,首次使用至今)在统计的时候,会考虑时间衰减
    • 长期历史的统计,会通过离线批量任务(hadoop/spark)的形式完成
    • 短期历史的统计,会直接访问线上缓存(redis)
  • 物料粒度
    • 单个物品(item id)
    • 一群物品(物品属性)item上的属性,比如一二级分类、标签、关键词、...
  • 动作类型
    • 正向:点击、有效观看、完整观看、点赞、转发、评论、...
    • 负向:忽略(曝光未点击)、短播、踩、...
  • 统计对象
    • 次数、时长、金额、...
  • 统计方法
    • 收集成列表、计算XTR、计算占比、...

比如:某文章在过去6小时的CTR,某文章在过去1天的平均播放时长、......

但是也要谨记,

  • 这些统计数据肯定是有偏的,一个item的后验指标好,只能说明推荐系统把它推荐给了对的人,并不意味着把它推给任何人都能取得这么好的效果。
  • 其实这个问题其实也不大,毕竟交给精排模型打分的都已经通过了召回 粗排的筛选,多多少少是和当前用户相关的,之前的统计数据还是有参考意义。
  • 利用这些后验统计数据做特征,多少有些纵容马太效应,之前后验数据好的item可能会被排得更靠前,不利于新item的冷启。
  • 那么新item没有后验证数据怎么办?填写成0岂不是太受歧视了?其实有一个办法就是建立一个模型,根据物料的静态信息(e.g., 作者、时长、内容理解打得各种标签等基本稳定不变的信息)来预测它们的后验数据

另外再介绍一个由用户给物料反向打标签的trick。

  • 一般画像的流程,都是先有物料标签,再将用户消费过的物料的标签积累在用户身上,形成用户画像。
  • 反向打标签是指,将消费过这个物料的用户身上的标签积累到这个物料身上。比如:一篇关于某足球明星八卦绯闻的文章,由于该明星的名字出现频繁,NLP可能会将其归为“体育新闻”,但是后验数据显示,带“体育”标签的用户不太喜欢这篇文章,反而带“娱乐”标签的用户更喜欢,显然这篇文章也应该被打上“娱乐”的标签。
  • 类似的,给物料打上“小资文青喜欢的top10电影之一”,或者“在京日本人光顾最多的日料店”等,都是由用户消费反向给物料打上的极其重要的标签。

Scene特征:设备场景、时间场景、地点场景、设备使用习惯

  • 网络信息:上网时长、上网时段、网络环境
  • 设备信息:平台、设备类型、物品所在的上下文
  • 时间信息:是否是周天、是否是节假日、月份、季节、小时、请求时间
  • 地点信息:城市、城市等级
  • 设备使用习惯:常用设备类型、频次(活跃情况)、时长、使用时间段

它是描述推荐行为产生的场景的信息。最常用的上下文信息是“时间”和通过 GPS、IP 地址获得的“地点”信息。根据推荐场景的不同,上下文信息的范围极广,除了我们上面提到的时间和地点,还包括“当前所处推荐页面”“季节”“月份”“是否节假日”“天气”“空气质量”“社会大事件”等等。

交叉特征:用户属性物品属性交叉特征(用户1对多,物品1对多的情况下使用交叉特征)

显式交叉特征:

  1. 交叉特征上的统计数据,比如<男性,20~30岁,内容标签是‘二战’>上的点击率、分享率、平均时长。
  2. 计算用户与物料在某个维度上的相似度。以“标签”维度举例:
  • 某用户过去7天在“标签”维度上的画像,可以写成一个稀疏向量,u={‘坦克’:0.8, ‘足球’:0.4, '二战':0.6, '台球':-0.3}。每个标签后面的分数是由第2节的方法统计出的用户在某个标签上的兴趣强度(可以根据xtr/时长等指标计算出);
  • 某篇文章的标签,可以写成一个稀疏向量,d={'坦克':1, '二战':0.5, '一战':0.8}。每个标签后面的分数是NLP在打这个标签时的置信度;
  • 拿这两个稀疏向量做点积,u x d={‘坦克’:0.8, ‘足球’:0.4, '二战':0.6, '台球':-0.3} x {'坦克':1, '二战':0.5, '一战':0.8}=0.8*1 0.5*0.6=1.3,就可以表示这个用户对这篇文章在“标签”维度上的匹配程度。

隐式交叉特征:

1、DSSM等双塔模型

https://zhuanlan.zhihu.com/p/358779957

2、GNN:

https://zhuanlan.zhihu.com/p/375942054

https://www.techbeat.net/article-info?id=2320

3、特征处理方式

  • 离散型特征:onehot、multihot、embedding
  • 连续型特征:分桶、标准化、归一化、log变换、平滑
  • 序列型特征:pooling、CNN、RNN、GNN、attention、transformer、bert

离散和连续判断的依据为:文字一定是离散,数字含义是编码则为离散,是大小则为连续。

连续型特征:分桶、标准化、归一化、log变换、平滑

连续型特征的数据具有实际统计意义,由于数据分布不均匀,通常需要对连续型的特征做数值变换,再加入到模型中。

  • 分桶(bucketized_column):我们经常会用分桶的方式来解决特征值分布极不均匀的问题。所谓“分桶(Bucketing)”,就是将样本按照某特征的值从高到低排序,然后按照桶的数量找到分位数,将样本分到各自的桶中,再用桶 ID 作为特征值。

分桶方法: 等距分桶。每个桶的宽度是固定的,即值域范围是固定的,比如是 0-99,100-199,200-299等;这种适合样本分布比较均匀的情况,避免出现有的桶的数量很少,而有的桶数量过多的情况; 等频分桶,也称为分位数分桶。也就是每个桶有一样多的样本,但可能出现数值相差太大的样本放在同个桶的情况; 模型分桶。使用模型找到最佳分桶,比如聚类,将特征分成多个类别,或者树模型,这种非线性模型天生具有对连续型特征切分的能力,利用特征分割点进行离散化。 其中:通过GBDT分桶效果最好,好于等频分桶;等频分桶好于等距分桶和熵分桶。 分桶原则: 要使得桶内的属性取值变化对样本标签的影响基本在一个不大的范围,即不能出现单个分桶的内部,样本标签输出变化很大的情况; 要使每个桶内都有足够的样本,如果桶内样本太少,则随机性太大,不具有统计意义上的说服力; 每个桶内的样本尽量分布均匀。 分桶的好处有: 分桶后得到的稀疏向量,内积乘法运算速度更快,计算结果更方便存储; 对异常数据有很强的鲁棒性。

  • 取log:归一化和标准化需要模型单独保留两个参数(归一化需要保存每个特征的 max 和 min,标准化需要保存每个特征的均值和方差)。但是每次模型训练的数据集中统计的这几个参数都是不同的,这样会导致每次更新模型都会有比较大的波动(比如今天没有突然有大 R 付费,那付费特征的 max 就会飙升,导致模型不稳定)。
  • 归一化和标准化只能解决分布方差大的问题,不能解决偏态严重的问题
  • 截断的方法损失了大量信息,损失了这部分特殊用户的区分度

为了解决这些问题,我们针对部分需要进行预处理的特征,采用如下公式进行转换:

这样做的目的是尽可能不损失区分度的情况下,对该特征进行压缩,避免模型无法收敛的情况。由于对于不同日期的数据,不论其分布如何,都统一采取同样的预处理方式,所以不会出现模型更新后,分布不稳定的情况。经过多次离线实验,采用该变换公式解决收敛性和稳定性问题的同时,并未导致 AUC 降低,真是一个好办法!

  • 平滑:

常用的行为次数与曝光次数比值类的特征,由于数据的稀疏性,这种计算方式得到的统计量通常具有较大的偏差,需要做平滑处理,比如广告点击率常用的贝叶斯平滑技术。而在我们推荐场景中,也会用到很多统计类特征、比率特征。如果直接使用,比如由于不同 item 的下发量是不同的,这会让推荐偏向热门的类目,使得越推越窄,无法发现用户的个体差异,也不利于多样性的探索。我们可以把曝光量进行分段,同一个曝光量级的指标进行比较,也可以用该 item 所属类目统计量的平均值进行平滑处理。对于离群值较多的数据,我们会使用更加健壮的处理方法,比如使用中位数而不是均值,基于分位数而不是方差。而在短视频业务上较短或较长的视频在播放完成度上存在天然的差距,我们按视频本身长度离散,观看时长做分位数处理,同时做威尔逊置信区间平滑,使得各视频时长段播放完成度相对可比,避免出现打分因视频长度严重倾斜的情况。以及短视频 app 的投稿数量大,对于长尾的视频和类目都是需要做平滑处理的。下面介绍两种较为常用的平滑技术。

  • 贝叶斯平滑

电商领域中经常需要计算或预测一些转化率指标,比如 CTR。这些转化率可以是模型的预测值,也可以作为模型的特征使用。以商品点击率预测为例,CTR 的值等于点击量除以曝光量。理想情况下,例如某个广告点击量是 10000 次,转化量是 100 次,那转化率就是 1%。但有时,例如某个广告点击量是 2 次,转化量是 1 次,这样算来转化率为 50%。但此时这个指标在数学上是无效的。因为大数定律告诉我们,在试验不变的条件下,重复试验多次,随机事件的频率近似于它的概率。后者点击量只有 2 次,不满足“重复试验多次”的条件。如果对于一个新上线的商品,其曝光为 0,点击量也为 0,此时这件商品的 CTR 应该设为 0 还是赋一个初始值?初始值设 0 是可以的,但不太合理。当 CTR 作为特征使用时,表示这个商品完全没有点击,不太符合日常推断,通常是赋一个大于 0 的初始值。

以上两个问题可以使用平滑技术来解决。贝叶斯平滑的思想是给 CTR 预设一个经验初始值,再通过当前的点击量和曝光量来修正这个初始值。如果某商品的点击量和曝光量都是 0,那么该商品的 CTR 就是这个经验初始值;如果商品 A 和商品 B 的曝光量差别很大,那么可以通过这个经验初始值来修正。贝叶斯平滑就是确定这个经验值的过程。贝叶斯平滑是基于贝叶斯统计推断的,因此经验值计算的过程依赖于数据的分布情况。对于一件商品或一条广告,对于某次曝光,用户要么点击,要么没点击,这符合二项分布。因此对于点击率类的贝叶斯平滑,都可以基于以下假设:对于某件商品或广告,其是否被点击是一个伯努利分布。伯努利分布的共轭分布就是 Beta 分布,也就是说,点击率服从 Beta 分布。而所有的数据有一个自身的点击率分布,这个分布可以用不同的 beta 分布来拟合。beta 分布可以看做是对点击率的一个先验知识,我们可以根据观测来修改我们的先验,所以贝叶斯平滑就是估计 Beta 分布中的参数 α 和 β,其中 C 和 I 是点击次数和曝光量。实际应用时根据历史数据得到的 α 和 β 可以帮助确定平滑参数的大致范围,防止设置参数时偏离过大。

转化率之贝叶斯平滑

贝叶斯平滑

  • 威尔逊区间平滑

在现实生活中我们会接触到很多评分系统,如豆瓣书评、YouTube 影评,在这些评分中有 1 个共同问题是每个 item 的评分人数是不同的,比如 10000 个人打了 90 分似乎比只有 10 个人打了 90 分更能被相信该 item 是 90 分的。威尔逊区间法常用来解决此类问题,是一种基于二项分布的计算方法,综合考虑评论数与好评率,平滑样本量对评价的影响,我们画像兴趣分上也用到了威尔逊区间平滑。

假设 u 表示正例数(好评),n 表示实例总数(评论总数),那么好评率 p 就等于 u/n。p 越大,表示这个 item 的好评比例越高,越应该排在前面。但是,p 的可信性,取决于有多少人,如果样本太小,p 就不可信。我们已知 p 是二项分布中某个事件的发生概率,因此我们可以计算出 p 的置信区间。置信区间实际就是进行可信度的修正,弥补样本量过小的影响。如果样本多,就说明比较可信,不需要很大的修正,所以置信区间会比较窄,下限值会比较大;如果样本少,就说明不一定可信,必须进行较大的修正,所以置信区间会比较宽,下限值会比较小。威尔逊区间就是一个很好的修正公式,在小样本上也具有很强的鲁棒性。

在下面的公式中, p 表示样本的好评率,n 表示样本的大小,z 表示对应某个置信水平的 z 统计量,是一个常数。一般情况下,在 95%的置信水平下,z 统计量的值为 1.96。可以看到,当 n 的值足够大时,这个下限值会趋向 p 。如果 n 非常小,这个下限值会远小于 p,起到了降低好评率的作用,使得该 item 的打分变低、排名下降。

参考:

王多鱼:广告点击率CTR修正-Wilson CTR

离散型特征:onehot、multihot(multi-hot编码原理)、哈希分桶

  • onehot(multihot)(categorical_column_with_vocabulary_list):对于处理包含类别少的文字或数字类别的特征,本质是一种 Multi-hot 编码。
  • 哈希分桶(categorical_column_with_hash_bucket):对于处理包含类别多的文字或数字类别的特征时可使用hash的方式,这能快速地建立对应的对照表,缺点则是会有哈希冲突的问题,hash_bucket_size的大小一般设置为总类别数的2-5倍,该函数适用于不能确定所有类别样式的类别变量。

序列型特征:pooling、CNN、RNN、GNN、attention、transformer、bert

4、特征工程和模型的结合

  • LR
  • GBDT
  • Embedding MLP
  • 双路并行

LR:LR的本质是评分卡模型,适合高维稀疏特征,对于离散型特征:类别多的使用哈希分桶(哈希大小为2~5),类别少的直接mutlihot(onthot);对于连续特征:对于分布基本均匀的使用log,不是很均匀的使用等频分桶。

GBDT:GBDT的基础决策树,GBDT是适合处理高维稀疏特征,对于离散型特征:类别多的特征基本不用,类别少的直接labelencoder处理;对于连续特征:使用等频分桶或者直接使用原值。

Embedding MLP:本质是DNN,使用方式同LR

双路并行:

wide ,wide侧负责记忆,因此要将“根据人工经验、业务背景,将我们认为(i.e.,先验)有价值的、显而易见的特征及特征组合,喂入Wide侧”。

deep 部分是一个前馈神经网络。通常情况下这部分特征使用的是用户行为特征,用于学习历史数据中不存在的特征组合。deep侧用于泛化,适合输入非组合特征,包括离散特征和连续特征,用于泛化那些未曾出现过或者低频的特征组合。总结就是:deep全用。

4.5 特征使用经验

重要特征加得浅

其实这种思路并不新鲜,就是经典的Wide & Deep,

Logit_{final}=Logit_{wide} Logit_{deep}。wide侧就是一个LR,或者条件再放宽一些,就是一个非常浅的小dnn,加入wide侧的特征离最终目标也近,避免自dnn底部层层传递带来的信息损失,更有机会将我们的先验知识贯彻到“顶”

公式容易写,问题是哪些特征要进wide侧,哪些特征要进deep侧?在我之前的文章《看Google如何实现Wide & Deep模型》就指出过,wide侧负责记忆,因此要将“根据人工经验、业务背景,将我们认为(i.e.,先验)有价值的、显而易见的特征及特征组合,喂入Wide侧”。具体在推荐领域,比如:

  • 特征及特征对上的统计数据,e.g., <男性,20~30岁,内容标签是‘二战’>上的点击率、分享率、平均时长等;
  • 我们已经发现了(i.e., 先验)非常明显的用户分层,比如登录用户 vs. 未登录用户、不同国家的用户、......,用户行为完全不同。为了提升模型对“用户是否登录”、“用户地域”这样强bias特征的敏感度,这些特征也加入wide侧。
  • 与用户分层类似,在multi-domain的推荐场景下(比如:首页推荐与猜你喜欢,混合训练),淘宝的STAR《One Model to Serve All: Star Topology Adaptive Recommender for Multi-Domain CTR Prediction》也是将domain-id这样的强bias特征,喂入一个非常简单的dnn,得到的logit再叠加到主模型的logit上,算是wide&deep的一个变种。文中还强调,“the auxiliary network is much simpler ...... The simple architecture makes the domain features directly influence the final prediction”

重要特征当裁判

对于一些强bias特征(e.g., 用户是否登录、用户所在国家),除了将它们加浅一些,离loss近一些,还有一种方法能够增强它们的作用,避免其信息在dnn中被损失掉,就是采用SENet或LHUC(Learn Hidden Unit Contribution)这样的结构。

  • 强bias特征作为LHUC的输入,经过sigmiod激活函数后,输出是一个N维度向量,N是所有fileld的个数
  • N维向量就是各field的重要性,将其按位乘到各field的embedding上,起到增强或削弱的作用
  • 加权后的各field embedding再拼接起来,喂入上层DNN

这种结构,将一些先验认为重要的强bias的特征,放到裁判的位置,决定其他特征的重要性。比如,如果产品设计不允许未登录用户转发或评论,那么显然“用户未登录”这个特征值,就“应该”(suppose)将转发、评论相关特征的权重置为0,因为它们不能代表用户的真实意图。

这样做,相比于将所有特征“一视同仁”、一古脑地喂入DNN最底层等候上层dnn筛选,更能发挥重要特征的作用,将“先验知识”(e.g., 产品设计限制)深入贯彻。

参考:

wide&deep模型中如何确定哪些特征适用于wide侧哪些特征适用于deep侧?

石塔西:先入为主:将先验知识注入推荐模型

石塔西:刀功:谈推荐系统特征工程中的几个高级技巧

0 人点赞