推荐系统基本概念

时间:2024-02-20 21:09:47

基本概念

  • 推荐的传统方法: 矩阵分解;深度学习方法
  • 协同过滤: 基于交互历史估计用户接受item的可能性
    • 假定相似用户有相似偏好,根据用户历史行为算出用户相似度,并用相似度加权平均其他用户的评分来预测该用户未打分物体的评分
    • CF存在的缺点: 用户、物体矩阵存在稀疏性,用少量数据预测大量缺失的数据存在过拟合的风险。冷启动问题,难以解决新用户和新物品没有历史数据的情况
  • 一般为一个用户进行推荐(学习一个用户的偏好)被当作是一个学习任务
  • 一般假设用户偏好来自用户个人信息的组合,包括用户画像、用户交互记录、item描述
  • 推荐系统如何根据已有的用户画像和内容画像去推荐,涉及到两个关键问题: 召回和排序
    • 召回(match)指从全量信息集合中触发尽可能多的正确结果,并将结果返回给排序
    • 召回的方式有多种: 协同过滤、主题模型、内容召回和热点召回等,而排序(rank)则是对所有召回的内容进行打分排序,选出得分最高的几个结果推荐给用户
      • 基于内容匹配的召回: 将用户画像与内容画像进行匹配,包括标签匹配和知识匹配
      • 基于协同过滤的召回: 包括基于用户、基于item和基于模型的协同过滤;基于协同过滤的召回即建立用户和item间的行为矩阵,依据“相似性”进行分发
        • 基于用户: 假设相似的人有相同的喜好
        • 基于item: 假设喜欢一个item的用户会喜欢相似的item
        • 基于模型: 训练一个推荐模型
      • 召回策略的评估主要根据两个评价指标: 召回率和准确率
        • 召回率(recall)=系统检索到的相关内容 / 系统所有相关的内容总数
        • 准确率(precision)=系统检索到的相关内容 / 系统所有检索到的内容总数
  • 排序模型
    • 点击率和转化率预估都是经典的二分类问题
    • LR、FM(factorization machine, 数据稀疏/特征组合, 矩阵分解)[10]、FFM(field-aware factorization machine)[11]、GBDT、LR+GBDT等都是点击率预估任务中的经典模型
    • Wide&Deep[12] (记忆能力和泛化能力, 线性模型LR+前馈网络)(wide部分如用LR进行特征工程,通过深度网络生成高阶特征)、Deep & Cross Network (DCN)(替换wide部分)[13]和DeepFM(wide & deep, FM取代LR)[14]等深度模型
  • 粗排、精排
    • 粗排: 双塔内积
  • 用户的显式反馈信息(例如用户对商品的评分)来确切知道用户喜欢哪些商品,不喜欢哪些商品,绝大部分的数据都是用户的隐式反馈信息(例如用户消费过的商品记录)。对于隐式反馈来说,数据没有明确的标签,为了进行模型训练,我们一般假设用户交互过的商品都是正例,并通过采样的方式,从用户未交互过的商品集中选择一部分作为负例。从用户未交互商品集中基于一定策略进行负例选择的这一过程,就被称为负采样。在推荐系统负采样中,主要有三方面的研究方向:采样质量,采样偏差和采样效率
    • 采样质量主要是指采到的负例所包含的信息量。相比于低信息量的负例,采到信息量更高的负例将显著提升模型训练的效率,加速模型收敛
    • 采样偏差:在推荐系统负采样中,我们的基本假设是用户交互过的商品都是该用户的正例,未交互过的都是负例。但容易发现,这个假设还是比较强的,与真实场景存在一定偏差,例如用户未购买过的商品并不一定是不喜欢的,也有可能是用户在未来想要发生交互的商品,这一偏差可以被称为伪负例(False Negative)问题。这些采样中的偏差会对模型训练造成影响,因此缓解或消除采样中的偏差是该领域一个重要的研究方向
    • 采样效率: 在推荐场景中,用户的历史交互数据是比较稀疏的,一般来说,用户平均交互的商品数量不会超过整个商品集大小的10%。因此,对于负采样而言,需要在一个较大的采样池中进行采样,一旦采样过于复杂,会导致模型训练的开销增大,这也与实际工业场景下的要求不符。因此,采样算法的设计需要控制好复杂度,提升采样效率也是该领域一个有重要研究意义的方向
    • 可以将目前的负采样算法分为两大类:启发式负采样算法和基于模型的负采样算法
      • 启发式负采样算法:通过设定一些启发式的规则来设置采样分布,这类算法的特点就是开销较小,易于理解和实现,但在效果上会有一定的瓶颈。
        • 随机负采样RNS:平等地对待采样池内的每一个商品,按相等的概率进行采样。算法逻辑非常简单,在效率上有着很大的优势,同时也避免在采样过程中引入新的偏差,是一个被广泛使用的采样算法
        • 基于流行度的负采样PNS:以商品流行度作为采样权重对采样池内的商品进行带权采样,流行度越高的商品越容易被采到。这里的流行度有很多种定义方式,一种常见的定义方式该商品的历史交互次数,即商品被消费次数越多,其流行度就越高。这种算法相比于RNS,就是将均匀分布替换成一个基于流行度的采样分布,只需要在采样前计算出每个商品的流行度作为采样分布,然后就按照这个分布进行采样即可,在开销上没有增加特别多。相比于RNS, 按照流行度采样的目的是为了提高所采负例的信息量,提高采样质量。例如一个非常流行的商品,却出现在某个用户的未交互商品集中,那么这个商品就很大概率是用户不喜欢的商品,那么通过这个负例就可以很好的学习到用户的喜好;相反,一个大家都不喜欢的商品,将它作为负例进行学习,其实能够带给模型的信息量就很少了,很难学习到该用户的个性化特征。但PNS也有一定的局限性。首先,因为PNS的采样分布是提前计算好的,在模型训练过程中,采样分布不会变化。因此那些在训练初期能够提高更高信息量的负例,在经过多次训练后,其带来信息量可能会有所下降。其次,流行度的引入也可能会引入新的偏差,因为流行度的计算是全局的,而在用户中,不同用户类别之间的兴趣可能是有差异的,如果所给数据中的用户类别分布不均匀,就可能导致流行度的定义出现偏差
      • 基于模型的负采样算法: 更容易采到质量高的负例
        • 动态采样DNS: 在模型训练过程中,负例能够带给模型的信息量是会随着模型的训练情况不断变化的。DNS的思路就是根据模型当前的情况动态地改变采样分布,提升每一轮的采样质量。对于模型来说,我们最后希望的模型是能够给正例打更高的分,给负例打更低的分。因此,对于每一轮训练,那些会被模型打高分的采样池中的商品更应该被挑出来让模型进行学习,它们对于模型而言包含更多的信息量。基于这样的思路,DNS会在每次采样时使用当前模型作为一个采样模型,对样例进行打分,然后选择分数更高的样例来作为负例对当前模型进行训练,得到新一轮的模型,并这样迭代下去
        • 基于GAN的负采样算法:在模型训练过程中,模型的训练目标是将损失函数的值降低,而采样器的采样目标是将能使得模型损失函数的值增大的负例选出来,这就蕴含着一种对抗的思想。生成对抗网络(GAN)也就被运用到了负采样中。IRGAN[5]是信息检索负采样领域的一篇经典工作,它首次将GAN的思想运用到信息检索领域来进行负采样。具体来说,在IRGAN的设计中,它包含了两个推荐模型,一个作为判别器,一个作为生成器,基于对抗的思想进行训练。生成器的目的在于从负例池中选择负例混入正例中来迷惑判别器,而判别器则是要区分出正例和生成器混入的负例,并将反馈给予生成器。在这个框架中,原则上生成器和判别器可以是任意结构的推荐模型,最终生成器和判别器也都可以作为最后的推荐模型进行使用。而DNS可以理解为一种判别器和生成器是相同模型结构的,共享同一套参数的特殊的IRGAN。受到IRGAN的影响,后续也出现了很多基于GAN的负采样算法[6-7],他们从效率,性能等不同方面对IRGAN的结构进行了优化和改进
        • SRNS(Simplify and Robustify Negative Sampling)[8]:虽然前面提到的两种基于模型的采样算法通过模型学习的方法可以提升采样质量,获得强负例(Hard Negative),但也存在着两个关键问题:1)由于借助模型评分来选择负例,会加重采样时的伪负例(False Negative)问题。因为单从评分上来看,伪负例和强负例都会得到较高的分数,按照模型评分得到的分布进行采样会提升伪负例被采到的概率。2)这种基于模型的算法,特别是基于GAN的算法,会有很大的时间开销,影响模型的训练。针对这两个问题,[8]以观察到的统计学特征作为先验知识对伪负例和强负例进行区分,以增强模型的鲁棒性,并使用了类似DNS的结构进行采样,以保证采样质量。在时间复杂度的分析上,SRNS也优于GAN类型的方法。[8]将视角放在了采样去偏和采样效率优化,同时创新性地引入统计学指标来尝试区分伪负例和强负例

常用术语

  • PV(page view, 浏览量):页面访客数
  • UV(unique visitor, 访客量):独立访客数
  • post-view
  • CTR(click-through rate, 点击率),pCTR(predicted)
    • 用公式来表达的话就是click / impression,这里的click也就是发生的总点击数,分母的impression也就是曝光的数量。两者的商就是点击率
  • CVR(conversion rate, 转化率),pCVR(predicted)
  • CTCVR
  • CAR(加购率)
  • PPC(pay per click, 单次点击成本)
  • LTR(learning to rank): 排序学习
  • GMV(gross merchandise volume): 商品交易总额
  • DAU:日活跃用户
  • WAU:周活跃用户
  • MAU:月活跃用户
  • 客单价:每一位顾客平均购买商品金额

特征

多值特征

  • 如论文的关键字描述信息;商品信息的描述;网站关键词
  • 常见处理
    • count: 计算多值特征中有多少个值
    • LabelEncoder(将一列文本数据转化成数值): 如果特征存在明显的聚集效应,很多多值特征组合在一起就是一个有意义的信息,例如,文章关键词里面的:SVM|监督学习;商品里面的,女生|连衣裙;等等,这些词组合在一起就是很有意义的一类信息,可以直接LabelEncoder进行编码
    • Multi One-Hot: 每个不同的值对应一列特征,出现了就是1没出现就是0
    • CounterVector: 统计了每个词在当前文本下的出现次数,如果每个关键词在当前的Multi-Value特征中都是唯一的值的时候,那么CounterVector就和One-Hot等价
    • TfidfVectorizer: 可以认为是CounterVector的扩展,它还考虑了在上下文中文本的出现次数
    • Word2Vec: 得到每个词的词向量,再基于词向量做统计特征
    • 基础Multi-Value Embedding: 对多值每个值进行emebdding之后,然后取对应的统计值进行concat得到最终的Multi-Value的表示
    • 加权Multi-Value Embedding: 和基础的直接取均值最大最小值等统计特征不一样,此处我们自动学习每个embedding对应的权重,然后再进行加权得到最终的emebdding

数值特征

图片名称
  • 常用方法:如上图所示
    • Normalization: 用一个低维embedding来表示这个Field, 并对Field内的特征做归一化(Max-Min归一化/Z-score归一化),则每个特征最终的embedding表示为:归一化后的值*Field embedding,具体的可以看下图:
      图片名称
    • Categorization:直接对数值特征做离散化,可以把单个数值特征直接作为一个离散特征
    • Discretization:可以等频/等距分桶,每个桶内用一个值表示;或者根据一些专家知识来定义,比如把年龄在[18, 40]当作青年,把[41, 65]的当作中年
  • 自动离散数值字段中的特征[2],并以端到端的方式来优化CTR模型

任务

CTR点击率预估/显式反馈

  • 点击预测是给定用户对物体的点击情况,并不能显式地反应出用户偏好,因此称为隐式反馈(Implicit feedback),隐式反馈收集难度更低,因此真实线上环境中常用Implicit feedback
  • 在排序模型中,用户的隐式反馈譬如浏览、点击等被广泛地应用在训练深度排序网络模型中。但是用户的隐式反馈是有bias偏差的,最明显的就是position bias,很多时候用户点击某个商品并不是因为真的最喜欢这个商品,而仅仅只是因为其排序的位置比较靠前;另外一种常见的bias就是user bias,不同用户的点击偏好不同,有些用户就是具有较高的点击率,而另一些用户本身就偏爱浏览而不爱点击。因此我们排序模型需要去移除这种bias(使用bias net),打破这种越来越偏的循环
  • 点击率预估中的特征交互是至关重要的,各种Deep CTR模型(例如Wide&Deep, Deepfm, xDeepfm...)基本都遵循着Embedding & Feature Interaction的范式(Input层 -> Embedding层 -> Interaction层 -> Output层),具体的,首先把输入的离散特征映射为一个低维的embedding表示,然后再进行复杂的特征交互,最后输出预测值,如下图所示[1]:
    图片名称
  • 如何设计复杂的交互模型:
    • 基于FM,FwFM等的低阶交互
    • 基于MLP的隐式高阶交互
    • DeepCross, xDeepFM中的显式高阶交互等
  • 基于 Attention 机制(target attention), 对用户历史行为进行加权来表示用户兴趣, 其中权重参数是通过候选广告和历史行为交互来进行学习的[1]: 如下图所示,其中激活单元以序列中的item表示、候选item表示以及这两个表示的内积的连接为输入,经线性层输出权重
    图片名称
  • Attention+RNN[15]
  • Attention: 除了目标item和用户行为序列,还需要考虑用户画像和上下文信息与目标item的关系[16]
    • 网络包含一个多交互层(MIL),由三个局部交互模块和一个全局交互模块组成
      • 第一个局部模块是Item-Behaviors交互模块(IBIM):使用Pre-LN Transformer
      • 第二个局部模块是tem-User交互模块(IUIM)
      • 第三个局部模块是Item-Context交互模块(ICIM)
      • 全局交互模块(GIM):学习来自嵌入层的低阶特征和来自三个局部模块的高阶特征之间的影响
  • 一般将模型的预测输出层分解为两部分:学习CTR的Main Net,以及学习selection bias的Bias Net,Bias Net输出的偏置项会加到Main Net最终输出的logit上

多领域学习[8]

  • 需要对多领域作CTR预测

    • 现有工作
      • 直接混合训练数据训练一个共享参数的CTR模型
      • 每个领域训练一个模型:存在问题1)一些领域训练数据不足;2)维护太多模型成本过高
    • 不同领域有重叠的用户和item(存在共性);特定用户不同且用户行为在特定领域内会改变(有较大不同),不同领域有特定的数据分布
  • 星型拓扑自适应推荐器(STAR):输入是(x,y,p),x是各个领域共有的特征,如用户行为序列、用户画像、商品特征、上下文特征……,y表示是否点击,p表示领域标识

    • 共享中心参数:学习共性
    • 特定领域参数:学习区别
    • 具体模型结构如下图所示:
      • 采样一个领域p,再采样B个样本:\((\vec{x}_1,p),(\vec{x}_2,p),...,(\vec{x}_B,p)\)
      • 池化和连接:获得B个固定长度的嵌入
      • 进入PN(partitioned normalization):BN假设样本都是来自同一分布,这里要求BN中的参数在不同领域中是不同的
      • 进入星型拓扑FCN(多个FCN,一个共享参数的FCN,多个对应不同领域的FCN)
      • p直接映射成嵌入(即将领域的指示直接作为ID特征输入),和其他特征的嵌入进行连接然后进入一个辅助网络(两层全连接网络,输出维度为1),输出和FCN的输出(输出维度为1)合并(相加并通过sigmoid)作为最终的输出。这是由于如果只让模型自己去学习不同领域的差异是困难的,可显示地把领域信息加到模型
        图片名称
  • 和多任务是完全不同的,多域问题是解决不同域的同一个问题,比如预测不同域的点击率。而多任务优化目标是多个的,比如同时优化点击率和转化率。现有的多任务学习框架都是共享底层,不同的任务用不同的输出层,对于多域问题,并不能充分挖掘不同域之间的关系

rating评分预估/隐式反馈

  • 评分预测是给定用户对物体的打分,可以直接地反应用户喜好程度,因此称为显式反馈(Explicit feedback)

多任务

  • 相对于单任务学习,多任务学习通过使用共享的表示学习一组相关任务之间的普遍特征,引入正则化效果提升泛化能力,模型架构更紧凑和高效。挑战是:强迫所有任务共享相同的隐含空间,削弱表达能力
  • 多任务学习模型:如下图所示
    • Shared-Bottom网络
    • cross-stitch网络[18]
    • MMOE
    • SNR[19]
    • PLE[20]
      图片名称
图片名称
  • MMOE[3]

    • Shared-Bottom多任务模型: 输入-->Shared-Bottom网络-->K个塔网络-->K个输出对应于K个任务
    • 原始MoE模型(One-gate MoE模型): 输入-->n个专家网络-->引入一个门网络来计算专家的概率从而集成-->K个塔网络-->K个输出对应于K个任务
    • Multi-gate MoE模型: 输入-->n个专家网络-->引入K个门网络分别来计算专家的概率从而集成-->K个塔网络-->K个输出对应于K个任务
      • 专家网络和塔网络: 两个线性层的叠加
      • 门网络: 一个线性层+softmax
  • Sparsely-Gated MoE[17]: 如下图所示

    • 不同于Softmax门控网络,Sparsely-Gated MoE采用Noisy Top-K Gating的稀疏门控结构
    • Noisy Top-K Gating:向Softmax门控网络加入两个成分,sparsity和noise,即\(G(x)=Softmax(KeepTopK(H(x),k))\),加入高斯噪声并保持top k个值,其余设置为\(-\infty\)(会使对应的门值等于0)。其中\(H(x)_i= (x·W_g)_i+StandardNormal()·Softplus((x·W_{noise})_i)\)\(KeepTopK(v,k)_i=\begin{cases} v_i, & \mbox{if }v_i\mbox{ is in the top }k \mbox{ elements of }v\\ -\infty, & \mbox{otherwise} \end{cases}\)
    • 当Top K= experts数目时,稀疏门控结构等效于Softmax门控网络;当Top K= 1时,每一个实例只会激活其中的一个expert。控制TopK的数量,可以实现对样本空间的划分
    • 门网络倾向于收敛到一个状态,总是为相同的几个专家产生大权重。采用软约束方法:定义每一个专家的重要性,关联一批训练数据,即\(Importance(X)=\sum_{x\in X}G(x)\)。定义一个额外的损失加到总体损失上,即\(L_{importance}(X)=w_{importance}·CV(Importance(X))^2\),为重要性值集合上方差系数的平方。这样的损失鼓励所有专家有相同的重要性
      图片名称
  • ESMM[4]

    • 利用用户动作的序列模式
    • 主任务: CVR(Post-click CVR),引入两个辅助任务: CTR(post-view click-through rate)和CTCVR(post-view click-through&conversion rate)
    • CTR任务特征-->嵌入层-->分域池化层-->连接-->MLP-->pCTR
    • CVR任务特征-->嵌入层-->分域池化层-->连接-->MLP-->pCVR
    • pCTCVR=pCTR x pCVR
  • 实际应用中一般可结合MMOE和ESMM两个模型,考虑特征包括用户画像、用户行为序列、目标item特征以及上下文特征

用户兴趣建模

用户兴趣的多峰分布建模[9]

  • 由于向量维度有限,使用多个向量表示用户
  • 兴趣可看成是相似商品的集合:聚类;将无监督的聚类过程结合到有监督的分类模型
  • 使用胶囊网络:每个胶囊表示一个向量,以向量输入,以向量输出,且输出可看成是输入的某种聚类结果
    • 信息从下层胶囊\(\vec{c}_{i}\)传递到上层胶囊\(\vec{c}_{j}\):计算路由系数\(b_{ij}=\vec{c}_{j}^TS_{ij}\vec{c}_{i}\),其中\(S_{ij}\)是双线性映射矩阵,为每个上层胶囊生成不同的映射空间,达到表征不同属性的目的
    • softmax函数归一化路由系数得到\(w_{ij}\)
    • 得到上层胶囊的输入:\(\vec{z}_{j}=\sum_{i=1}^mw_{ij}S_{ij}\vec{c}_{i}\)
    • 得到上层胶囊的输出(由于上层胶囊向量的长度用于代表该胶囊的激活程度, 可使用非线性的激活函数 squash 将上层胶囊的输入向量进行压缩得到上层胶囊的输出):\(\vec{c}_{j}=squash(\vec{z}_{j})\)
  • 动态路由:路由系数\(b_{ij}\)的计算需要使用到上层胶囊的输出\(\vec{c}_{j}\),而\(\vec{c}_{j}\)的计算反过来又需要用到\(b_{ij}\)。虽然无法直接得到解析解,但是通过迭代法,从一个初始的估计出发逐步得到一系列近似解,我们可以逼近这个最优数值。动态路由就是从一个初始给定的全0\(b_{ij}\),一步步地迭代得到\(b_{ij}^k\),最终得到上层胶囊的输出

参考文献

  • [1] 2018 | KDD | Deep Interest Network for Click-Through Rate Prediction | Guorui Zhou et al.
  • [2] 2020 | AAAI | AutoDis: Automatic Discretization for Embedding Numerical Features in CTR Prediction | Huifeng Guo et al.
  • [3] 2018 | KDD | Modeling Task Relationships in Multi-task Learning with Multi-gate Mixture-of-Experts | Jiaqi Ma et al.
  • [4] 2018 | SIGIR | Entire Space Multi-Task Model: An Effective Approach for Estimating Post-Click Conversion Rate | Xiao Ma et al.
  • [5] 2017 | SIGIR | IRGAN: A Minimax Game for Unifying Generative and Discriminative Information Retrieval Models | Jun Wang et al.
  • [6] 2019 | WWW | Adversarial Sampling and Training for Semi-Supervised Information Retrieval | Dae Hoon Park and Yi Chang
  • [7] 2019 | IJCAI | Reinforced negative sampling for recommendation with exposure data | Jingtao Ding et al.
  • [8] 2021 | One Model to Serve All: Star Topology Adaptive Recommender for Multi-Domain CTR Prediction | Xiang-Rong Sheng et al.
  • [9] 2019 | Multi-Interest Network with Dynamic Routing for Recommendation at Tmall | Chao Li et al.
  • [10] 2010 | ICDM | Factorization machines | Steffen Rendle
  • [11] 2016 | RecSys | Field-aware factorization machines for CTR prediction | Yuchin Juan et al.
  • [12] 2016 | Wide & deep learning for recommender systems | Heng-Tze Cheng et al.
  • [13] 2017 | KDD | Deep & cross network for ad click predictions | Ruoxi Wang et al.
  • [14] 2017 | DeepFM: a factorization-machine based neural network for CTR prediction | Huifeng Guo et al.
  • [15] 2019 | AAAI | Deep interest evolution network for click-through rate prediction | Guorui Zhou et al.
  • [16] 2021 | WSDM | Multi-Interactive Attention Network for Fine-grained Feature Learning in CTR Prediction | Kai Zhang et al.
  • [17] 2017 | ICLR | Outrageously large neural networks: The sparsely-gated mixture-of-experts layer | Noam Shazeer et al.
  • [18] 2016 | CVPR | Cross-stitch networks for multi-task learning | Ishan Misra et al.
  • [19] 2019 | AAAI | Snr: Sub-network routing for flexible parameter sharing in multi-task learning | Jiaqi Ma et al.
  • [20] 2020 | RecSys | Progressive Layered Extraction (PLE): A Novel Multi-Task Learning (MTL) Model for Personalized Recommendations | Hongyan Tang et al.