【主要推荐算法概览,包括召回与排序】

文章目录

  • 1、基于内容的推荐+协同过滤推荐两大类
  • 2、召回算法
    • 2.1、基于规则策略的召回
    • 2.2、5类基础召回算法
      • 2.2.1、关联规则召回算法
      • 2.2.2、聚类召回算法
      • 2.2.3、朴素贝叶斯召回算法
      • 2.2.4、协同过滤召回算法
      • 2.2.5、矩阵分解召回算法
    • 2.3、基于复杂算法的召回
      • 2.3.1、嵌入方法召回:item2vec方法
      • 2.3.2、YouTube深度学习召回算法
  • 3、排序算法
    • 3.1、规则策略排序算法
    • 3.2、简单排序算法:logistics回归、FM、GBDT
      • 3.2.1、logistics回归
      • 3.2.2、 FM排序算法
      • 3.2.3、GBDT排序算法
    • 3.3、复杂排序算法
      • 3.3.1、wide & deep排序算法
      • 3.3.2、YouTube深度学习排序算法
      • 3.3.3、MMOE(Multi-gate Mixture-of-Experts)
  • 4、DIN(Deep Interest Network)模型
    • 4.1、网络结构
    • 4.2、自适应正则化技术
  • 5、Transformer在推荐系统中的应用
  • 6、大模型简介以及用于推荐系统
    • 6.1、大模型
    • 6.2、大模型在推荐系统的应用
      • 6.2.1、大模型在推荐系统上的应用方法
  • 场景化提问

1、基于内容的推荐+协同过滤推荐两大类

  • 推荐系统的算法主要可以分为两大类,一类是基于内容的推荐,一类是协同过滤推荐

1)根据用户与物品交互的历史行为记录(例如点击率,浏览率,是否购买等等),来进行推荐,就是基于内容的推荐算法
在这里插入图片描述

2)利用“物以类聚,人以群分”的朴素思想:“人以群分”就是找到与用户兴趣相同的用户(有过类似的行为),将这些兴趣相同的用户浏览过物品推荐给用户,这就是基于用户的(user-based)协同过滤算法。“物以类聚”就是如果有很多用户都对某两个物品有相似的偏好, 说明这两个物品是“相似”的,我们可以通过推荐用户喜欢过的物品相似的物品这种方式为用户提供个性化推荐, 这就是基于物品的(item-based)协同过滤推荐算法。
在这里插入图片描述

  • 这两个算法最本质的差异是:基于内容的推荐算法只使用用户自身的行为(与别的用户无关)信息来为用户做推荐,而协同过滤需要利用群体的行为来为某个用户做推荐(这也是协同这个词的由来,协同代表的是群体的智慧)。

2、召回算法

  • 召回算法其实是一个初筛+降维的过程:通过召回算法将推荐候选集的规模限制在一个比较小的集合(一般几百到几千个),然后再用精准的排序算法对候选集进行精细排序。
  • 一般会用多种召回算法,而且召回算法不要过于复杂(太复杂的召回算法工程实现难度大,计算效率低),每个算法可以从不同的维度来将用户喜欢的物品筛选出来,类似集成学习
  • 常用的召回算法包括:基于规则策略的召回、基于简单算法的召回、基于复杂算法的召回

1)基于规则策略的召回:这类召回算法是基于具体的业务场景和产品运营策略来制定的。例如:基于热门进行召回(如各类排行榜),比如可以基于重点运营类目进行召回等(一般是运营人员来确定)
2)基于简单算法的召回:

  • 例如相似度计算的召回:例如根据用户历史行为,例如最近购买过的物品,计算相似度的高低进行初筛,可以基于物品本身信息的相似度,也可以利用高阶的嵌入算法,比如矩阵分解、item2vec等。
  • 根据用户画像和物品画像进行召回
  • 其他简单的召回策略: 协同过滤算法、矩阵分解算法、用户聚类算法、关联规则算法、朴素贝叶斯算法

3)基于复杂算法的召回:指采用深度学习、强化学习、迁移学习、半监督学习等较现代的算法来进行召回的方法。比如YouTube算法

2.1、基于规则策略的召回

  • 不同行业和业务场景下都不一样,这类方法非常简单,只需要利用一些业务经验和基础的统计计算就可以实现了
  • 以下是一些例子:

1)基于热门的召回:就是将大家都喜欢的物品作为召回。

  • 统计量(比如销售量、播放量、阅读量等),按照统计量降序排列就可以获得topN的物品
  • 在每个类目中统计topN,再将不同类目下的topN混编在一起作为最终的召回。
  • 热门召回除了作为一种召回策略外,也经常作为冷启动用户的备选推荐策略。

2)基于物品标签的召回:一是用于物品关联物品推荐,一是用于个性化推荐,

  • 物品关联物品的召回:物品X和Y的相似度可以用Jaccard相似系数,两个标签集合的相似度
  • 个性化推荐的召回:选择用户最近一段时间score较高的几个物品作为种子去召回,选择与种子相似度高的物品。例如信息流的推荐,召回刚刚看到的视频相似的

3)基于用户画像的召回:根据用户的兴趣标签、自然属性、社会属性等等进行召回,例如,不同兴趣的,不同年龄的都可以由预先的初筛列表
4)基于地域的召回:美团外卖、滴滴打车等。对这类产品的用户进行召回时,必须要考虑到地理位置的限制
5)基于时间的召回:例如早餐晚餐的召回

2.2、5类基础召回算法

2.2.1、关联规则召回算法

  • 首先有如下定义,以用于计算两个物品item(也可以是两个物品集合)之间的支持度和置信度
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 召回流程如下:

1)给定用户已操作过的事务集。从输入样本中,找到所有满足一定支持度和置信度(支持度和置信度大于某个常数)的关联规则对应的物品
2)过滤掉用户已操作过的物品,并按置信度降序排序,输出TopN的物品

2.2.2、聚类召回算法

  • 基于用户聚类的召回

1)对所有用户聚类后,就可以将该用户所在类别的其他所有用户操作过的物品(但是该用户没有操作行为)作为该用户的召回。
2)例如,可以从是否为好友关系聚类,或者用户历史行为得到的向量进行聚类

  • 基于物品聚类的召回

1)如果有了物品的聚类,我们可以做物品关联物品的召回,具体做法是将物品A所在类别中的其他物品作为关联召回结果。
2)还可以利用物品聚类给用户进行个性化召回。具体做法是从用户历史行为中的物品所在的类别挑选用户没有操作行为的物品作为该用户的召回
3)可行的方法有利用物品的metadata信息,采用TF-IDF、LDA、Word2vec等方式获得物品的向量表示,再利用Kmeans聚类。另外,也可以基于用户的历史操作行为,获得物品的嵌入表示(矩阵分解、item2vec等算法),用户行为矩阵的列向量也是物品的一种向量表示。

2.2.3、朴素贝叶斯召回算法

  • 根据贝叶斯公式:给定用户对不同物品的评分集合,包括k个评分等级(于是可以看作k个类别);计算给定物品B,评分为A的概率。
    在这里插入图片描述

2.2.4、协同过滤召回算法

  • 简单来说如下,因此核心在于物品之间的相似度以及用户之间的相似度

基于用户的协同过滤:召回与该用户相似的用户所感兴趣的物品
基于物品的协同过滤:召回与该用户感兴趣的物品相似的物品

  • 具体来讲,可以构建用户行为矩阵:矩阵的某个元素代表某个用户对某个物品的评分,如果是隐式反馈例如点赞收藏等,值为1,如果某个用户对某个物品未产生行为,值为0。

行向量代表某个用户对所有物品的评分向量,列向量代表所有用户对某个物品的评分向量。
行向量之间的相似度就是用户之间的相似度,列向量之间的相似度就是物品之间的相似度。可以采用余弦相似度进行计算

  • 在真实业务场景中用户数和物品数一般都是很大的(用户数可能是百万、千万、亿级,物品可能是十万、百万、千万级),而每个用户只会操作过有限的物品,所以用户行为矩阵是稀疏矩阵,我们进行相似度计算及为用户做召回会更加简单。
    在这里插入图片描述
  • 接下来介绍基于用户和物品的协同过滤算法:

1)基于用户的协同过滤:用户u对物品s的喜爱度表示为用户u与用户ui的相似度(U可通过聚类算法获取)和用户ui与物品s的评分;计算用户对每个物品的评分,基于评分降序排列,就可以取评分最大的topN的物品作为该用户的召回了。
在这里插入图片描述

2)基于物品的协同过滤:用户u对物品s的喜爱度表示为用户u对物品si的评分(S也可通过聚类得到)和物品si和物品s的相似度;用户对每个物品的评分,基于评分降序排列,就可以取相似度最大的topN物品作为该用户的召回结果。
在这里插入图片描述

2.2.5、矩阵分解召回算法

  • 核心思想:矩阵分解算法是将用户评分矩阵分解为两个矩阵的乘积,分别表示用户特征矩阵和物品特征矩阵(相当于做了一个隐空间嵌入,维度为k)。
    在这里插入图片描述
  • 于是可以根据两个矩阵分别计算:用户对物品的评分;物品之间的相似度

1)用户对物品的评分:用户的特征向量与该物品的特征向量的乘积;从该评分中过滤掉用户已经操作过的物品,针对剩下的物品得分做降序排列取topN作为该用户的召回结果。
在这里插入图片描述
2)物品之间的相似度:要对第i个物品召回最相似的物品,就可以用物品特征矩阵的第i列与该矩阵相乘,得到跟物品i相似的所有物品的相似向量,然后剔除掉自身(即剔除掉第i个分量),对剩余的相似度进行降序排列就可以获得物品i最相似的topN个物品作为召回结果。
在这里插入图片描述

  • 在算法上,可以将矩阵分解问题转换为最优化问题,通过SGD或者ALS(Alternating Least Squares)求解
    在这里插入图片描述

2.3、基于复杂算法的召回

2.3.1、嵌入方法召回:item2vec方法

  • 简单来说,嵌入方法召回,是指将用户或者物品嵌入到一个低维的稠密向量空间,然后基于向量的相似度来计算用户与物品(或者物品与物品)的相似度来进行召回的方法。矩阵分解就是一种简单的额Embedding方法
  • 最经典的是item2vec方法,是Word2Vec算法的推广。
  • Word2Vec有两种实现方法:CBOW和Skip-Gram,CBOW是基于前后的单词预测中间单词的出现概率,而Skip-Gram是基于中间单词来预测它前后单词的出现概率,具体如下面图1。实践经验表面Skip-Gram效果更好,只讲解Skip-Gram算法。
    在这里插入图片描述

1)网络结构可以理解为一个浅层的神经网络,求解的目标函数如下:即计算每个word的上下文窗口(窗口大小为c)内的词的概率的交叉熵损失函数
在这里插入图片描述
ui就是word的嵌入向量,即输入层到隐藏层的权重向量。在这里插入图片描述
2)
在这里插入图片描述
在这里插入图片描述
3)直接优化,计算量过大,因此可以通过负采样(Negative Sampling)来减少计算量

  • item2vec的原理:可以将用户操作过的物品作为一个序列集合,由于并没有上下文关系,因此修改目标函数如下:窗口的大小就是用户操作过的物品集合的大小(这个假设是想说明用户行为序列中任何两个物品之间都是有一定的关联关系的)
    在这里插入图片描述
  • item2vec的召回流程:

1)物品关联物品召回:用item2vec获得了每个物品的嵌入向量表示,那么就可以为每个物品通过向量相似(如cosine余弦相似度)计算与它最相似的topN的物品作为召回就可以了。
2)个性化召回:一般在信息流推荐中,用户最近操作过的物品是非常重要的,代表了用户的短期兴趣。那么可以将用户最近操作过(代表了用户有兴趣)的几个物品作为种子物品,就可以采用前面一节提到的物品关联物品召回的方式来为该用户进行个性化召回。或者,基于行为列表计算用户嵌入然后召回

2.3.2、YouTube深度学习召回算法

  • 整个推荐流程分为两个阶段:候选集生成(召回)和候选集排序(排序)
    在这里插入图片描述
  • 该算法实际上是将推荐问题看成一个多分类问题(类别的数量等于视频个数):1)将用户的所有点击过的视频的嵌入向量求平均,获得用户播放行为的综合嵌入表示(即下图的watch vector)。同样的道理,可以将用户的搜索词做嵌入,获得用户综合的搜素行为嵌入向量(即下图的search vector)。同时跟用户的其他非视频播放特征(地理位置、性别等)拼接为最终灌入深度学习模型的输入向量,2)再通过三层全连接的ReLU层,最终通过输出层(输出层的维度就是视频个数)的softmax激活函数获得输出,3)利用交叉熵损失函数来训练模型最终求解最优的深度学习模型。
    在这里插入图片描述
  • 按照上述算法,输出层的概率为N维向量,表示用户对N个视频的点击概率预测,那么给用户U的召回结果就是Y向量中概率最大的topK的视频。
  • 然而,由于模型比较复杂,计算速度会比较慢,影响线上服务性能。如果YouTube深度学习模型训练好后,我们可以获得从隐藏层最后一层到输出层的矩阵 W 512 × N W_{512\times N} W512×N,这个矩阵的列向量表示的是视频的嵌入向量,有了视频的嵌入向量,那么我们就可以计算视频关联视频的相似召回了
    在这里插入图片描述

3、排序算法

  • 排序算法是采用某种机器学习算法来对召回阶段的结果(推荐系统一般会使用多种召回算法,召回结果一般不会很多,几十个到几百个)进行二次打分排序,获得对召回结果的统一评价。
  • 这里的评价是指某种业务指标,比如评分、点击率、播放时长等,不同的产品,不同的业务形态关注的业务指标都是不一样的。业务指标一般是排序算法的目标函数
  • 特征的丰富程度及有效性决定了模型的质量,所以一般排序算法可以使用各种类型的特征,包括

用户相关的特征(比如年龄、性别、收入、用户id等)
行为相关的特征(点击、浏览、播放、购买、收藏、点赞、评论等)
物品相关的特征(标题、标签、价格、尺寸、产地等)
场景相关的特征(时间、地域、位置、天气、心情等)
交叉特征(前面几类特征之间的交叉或者同一类特征之间的交叉)等5大类特征。

在这里插入图片描述

  • 推荐系统常用pointwise方法来做排序:x1,x2,… 代表的是训练样本1,2,… 的特征,y1,y12,s1,… 等是训练集的label(目标函数值)。pointwise学习单个样本,如果最终预测目标是一个实数值,就是回归问题,如果目标是概率预测,就是一个分类问题,例如CTR预估(点击率:Click-Through Rate)。
  • 因此,分类或者回归预测的算法都可以用来作为排序算法。常用的排序算法包括规则策略排序算法、简单排序算法和高阶排序算法3个部分

1)规则策略排序算法:利用人工的经验(一般是基于对业务理解的经验)来对各种召回的结果按照某种规则或者策略来进行排序的过程
2)简单排序算法:logistics回归、分解机(FM)、树模型(如GBDT)
3)高阶排序算法:wide & deep、deepFM、MMOE、YouTube深度学习排序

3.1、规则策略排序算法

  • 多种召回随机打散:k个召回结果合并,构成一个召回结果的合集,然后随机打散,取前面的topN作为最终的排序结果推荐给最终的用户,具有多样性,因为每次都不一样
  • 按照某种优先级排列:对k个召回结果按照一定的优先级排序,并依次逐个选择,直到选择的数量凑足N个就完成了
  • 召回得分归一化排序:先在每个召回算法内部将排序得分归一化到0到1之间,基于这个排序就可以选择归一化得分的topN作为最终的排序结果推荐给用户

3.2、简单排序算法:logistics回归、FM、GBDT

3.2.1、logistics回归

  • 对于推荐系统来说,输入特征就是各类特征(用户维度特征、物品维度特征、用户行为特征、上下文特征等),而预测值 就是该用户对物品的点击概率。那么最终的推荐排序就是先计算该用户对每个物品(这些物品是召回阶段的物品)的点击概率,然后基于点击概率降序排列,再取topN作为最终的推荐结果。
    在这里插入图片描述
  • logistics回归模型的特征之间是彼此独立的,无法拟合特征之间的非线性关系,而现实生活中往往特征之间不是独立的而是存在一定的内在联系。

3.2.2、 FM排序算法

  • 因子分解机FM考虑了特征间的交叉,对所有特征变量交互进行建模(类似于SVM中的核函数),因此在推荐系统和计算广告领域关注的点击率CTR(Click-Through Rate)和转化率CVR(ConVersion Rate)两项指标上有着良好的表现。
  • 在logistic回归的基础上可以直接加入二阶特征组合,也可以增加特征交互,增强非线性,但是实际应用上,往往存在大规模稀疏特征的预测问题,导致模型优化不充分而不准确,最终影响模型的效果。
    在这里插入图片描述
  • 于是,可以采用FM算法,其实借助了矩阵分解的思路,对二阶交叉特征的系数进行调整,让系数不在是独立无关的,从而减少模型独立系数的数量,解决由于数据稀疏导致无法训练出参数的问题:即系数由原本的 n 2 n^2 n2减少到 k n kn kn。分解机的系数个数是n的线性函数,n非常大时,训练分解机模型在存储空间及迭代速度上是非常有优势的。
    在这里插入图片描述
    在这里插入图片描述
  • 需要处理所有特征交叉,所以计算复杂度是 O ( n 2 ) O(n^2) O(n2)。但是我们可以通过适当的公式变换与数学计算,将模型复杂度降低到 O ( k n ) O(kn) O(kn),变成线性复杂度的预测模型,具体推导过程如下:由于稀疏特征,因此只需要对非零的x求和
    在这里插入图片描述

3.2.3、GBDT排序算法

  • GBDT(Gradient Boosting Decision Tree)是基于决策树的Boosting的集成学习算法,是基于提升树算法做了修改,提升树算法是每次迭代中决策树拟合的是上一次迭代模型的残差,GBDT拟合的是上一次迭代的损失函数的负梯度。
  • 使用负梯度的原因:因为负梯度能够更普遍地适用于各种不同的损失函数,并且能够确保在每次迭代中损失函数的减少,满足Boosting算法的基本要求。
    在这里插入图片描述
  • GBDT是可以用于预测用户对物品的评分及预测用户对物品的点击概率的(二分类问题)。工程化实现:XGBoost

3.3、复杂排序算法

3.3.1、wide & deep排序算法

  • wide & deep模型分为wide和deep两部分。

1)wide部分是一个线性模型,学习特征间的简单交互,能够“记忆”用户的行为,为用户推荐感兴趣的内容,但是需要大量耗时费力的人工特征工作。
2)deep部分是一个前馈深度神经网络模型,通过稀疏特征的低维嵌入,可以学习到训练样本中不可见的特征之间的复杂交叉组合,因此可以提升模型的泛化能力,并且也可以有效避免复杂的人工特征工程。
3)通过将这两部分结合,联合训练,最终获得记忆和泛化两个优点。

  • wide部分一般是线性层,输入为原始特征和交叉特征。deep部分是一个前馈神经网络模型,稀疏特征先嵌入到低维向量空间(几十上百维)转化为稠密向量,再经过前馈层。最终wide和deep部分的输出部分需要加起来进行logistic变换,利用交叉熵损失函数进行联合训练。
    在这里插入图片描述
  • 借助wide & deep模型这种将简单模型跟深度学习模型联合训练,最终获得浅层模型的记忆特性及深度模型的泛化特性两大优点。例如,deepFM将分解机与深度学习进行结合,部分解决了wide & deep模型中wide部分还是需要做很多人工特征工程(主要是交叉特征)的问题。
    在这里插入图片描述
    在这里插入图片描述

3.3.2、YouTube深度学习排序算法

  • 候选集排序阶段:利用加权logistics回归作为输出层进行训练,然后在预测阶段利用指数函数 e W x + b e^{Wx+b} eWx+b进行预测,可以很好地匹配视频的播放时长这个业务指标。
  • 具体来讲:通过整合用户更多维度的特征(原文中有很多特征处理的思想和策略),通过特征拼接获得最终的模型输入向量,输入三层的全连接MLP神经网络,通过一个加权的logistic回归输出层获得对用户点击概率(即当做二分类问题)的预测,同样采用交叉熵作为损失函数。
    在这里插入图片描述
  • 加权logistics回归:对于正样本,利用样本的播放时长T来进行加权,那么上面的损失函数就是 l o s s = − l o g ( T ∗ y i ) loss = -log(T*y_i) loss=log(Tyi),T越大,损失越小,说明越“奖励”这样的正样本。由于负样本的加权参数为1,损失不变,还是 l o s s = − l o g ( 1 − y i ) loss = -log(1-y_i) loss=log(1yi)
  • e W x + b e^{Wx+b} eWx+b预测的是视频的期望观看时长:将上述的加权logistics回归函数进行推导,可得如下,pi表示视频点击率,Ti为视频播放时长,pi概率比较小,因此可转换为视频的期望播放时长,也就等于 e W x + b e^{Wx+b} eWx+b
    在这里插入图片描述

3.3.3、MMOE(Multi-gate Mixture-of-Experts)

  • 推荐系统中往往希望优化多种不同的指标,例如:电商推荐领域:不仅希望用户更多对商品点击浏览,还希望用户看完商品后进行付费,点击率和转化率
  • MMOE是多任务学习的经典模型,多任务模型有三种经典的分类:

1)hard parameter sharing:这是非常经典的一种方式,底层是共享的网络,学习各个任务的共同模式,上层用一些特定的网络学习特定任务模式
2)soft parameter sharing:这个范式对应是从MOE->MMOE->PLE等。即底层不是使用共享的一个shared bottom,而是有多个tower,称为多个专家,然后往往再有一个gating netwokrs在多任务学习时,给不同的tower分配不同的权重
3)任务序列依赖关系建模:这种适合于不同任务之间有一定的序列依赖关系。比如电商场景里面的ctr和cvr,其中cvr这个行为只有在点击之后才会发生。
在这里插入图片描述

  • MOE是混合专家模型,如(b)所示,引入多个专家,并加入了一个门控单元,控制不同专家的权重
  • MMOE是多门控的混合专家模型,如©所示,对于每个任务都会涉及一个门控网络,这样,对于每个特定的任务,都能有一组对应的专家组合去进行预测。同时参数量还不会太多。多门控做到了针对各个任务在专家组合选择上的解耦

4、DIN(Deep Interest Network)模型

  • DIN的核心思想是把attention机制引入了到用户兴趣建模上
  • 当前推荐算法存在的问题:

1) 很多推荐系统模型,都是以 Embedding & MLP 的方法结合,这种方法相对传统机器学习有较好的效果提升,但是存在一些缺点:有限的向量维度与用户多样化的兴趣和历史行为之间的矛盾不需要将用户的所有兴趣都压缩到同一个向量中,而且还是以同样的重要程度(比如用户购买了泳镜并不是因为上周购买了鞋子,而是因为之前购买了泳衣)
2)训练具有大规模稀疏特征网络时面临非常大的挑战,加上 L2 正则化后其计算量会非常大,因为每个 Mini-Batch 都需要计算所有参数的 L2 范数

  • 在embedding阶段,所有的离散特征都要被映射成一个固定长度的低维稠密向量。

1)离散特征一般有单值特征和多值特征,单值特征直接映射成embedding向量即可,
2)而对于多值特征,比如:用户点击过的item序列,通常的操作都是每个item映射成一个embedding向量,然后做一个sum或者average pooling或做时序建模,最终得到一个embedding向量。
在这里插入图片描述

  • 直接求sum或者pooling,每个item的重要性是一样的,所以最好的方式是给每个item一个权重,每个item的权重应该由目标广告(商品)与该item之间的相关性

4.1、网络结构

  • 在embedding层与MLP(全连接层)之间加入了activation unit
    在这里插入图片描述
  • activation unit的核心思想是计算每个用户行为向量的权重,之后再进行相应的级联

1)该unit采用了全连接层预测对应的权重值:例如,求用户行为向量与候选item向量的差以及相乘+用户行为向量+候选item向量级联到一起输入到全连接层中,并作归一化
2)那么预测的每个权重就是用户行为向量与候选item向量之间的相关性

4.2、自适应正则化技术

  • 不用L2正则化的原因一来是计算复杂度相对较高,二来是在广告/推荐领域中导致过拟合的主要原因是数据的长尾分布导致的即稀疏特征,很多特征值在整个数据集出现的频率非常低。
    在这里插入图片描述在这里插入图片描述
  • DIN则是对出现频率高的特征给予较小的惩罚,因为高频率的特征对于用户兴趣的刻画更加准确。
  • GAUC是对AUC的一个改进,GAUC细化到每个用户维度,假设有n 个用户,则GAUC的公式:
    在这里插入图片描述
    在这里插入图片描述

5、Transformer在推荐系统中的应用

  • 例如,可通过如下方式建模用户行为序列,进行短期兴趣精排和长期兴趣精排

1)用户的视频播放历史作为行为序列:候选的序列有用户长播历史序列 短播历史序列 用户点击历史序列等 ,包含用户观看视频id 作者id 视频时长 视频tag 视频观看时长 视频观看时间等内容 完整描述用户的观看历史。
2)对视频观看距今时间做log变换代替position embedding
3)输入到transformer模型中进行embedding,后续可采用MMOE的多任务模型

在这里插入图片描述

6、大模型简介以及用于推荐系统

6.1、大模型

  • 大模型相关的特点:预训练技术、指令微调、对齐微调
  • 预训练技术:

给定一个无监督的token语料库,以当前的语料之前的语料作为输入,最大化当前语料的概率,因此这种⽣成式模型可以根据之前的样本的概率分布⽣成下⼀个词,⽣成式模型预测时会存在⼀定的随机性
在这里插入图片描述
在这里插入图片描述
其中k是上下文窗口的大小,条件概率P使用多层Transformer建模
不需要标注数据的,直接用海量的文本训练样本进行训练,这个过程就是预训练,这种预训练的方式也就赋予了LLM的能力。因此,预训练语料库的规模和质量对于LLM获得强大的能力至关重要,对数据进行各种预处理工作,还需要精心设计模型架构、模型加速方法和优化技术

  • 微调(Adaptation)技术

经过预训练,LLM可以获得解决各种任务的一般能力,但是为了在特定问题或者领域有更好的表现,需要对预训练模型进行微调,微调过程是监督学习任务。

  • 指令微调(Instruction Tuning)

首先需要收集或构造满足指令格式的样本。然后,我们使用这些格式化的样本以监督学习的方式对LLM进行微调(例如,使用序列到序列loss进行训练)

  • 对齐微调(Alignment Tuning)

大模型不可避免的会生成一些虚假信息有害信息等,按照不同的标准规范LLM行为(例如,有用、诚实和无害)
例如:从人类反馈中强化学习(RLHF,Reinforcement Learning from Human Feedback)

  • LoRA微调方法(低秩自适应微调)

简单来说,左侧在训练期间被冻结,不接受梯度更新;增加了右侧的“旁支”,也就是先用一个Linear层A,将数据从 d维降到r,再用第二个Linear层B,将数据从r变回d维。最后再将左右两部分的结果相加融合,得到输出的hidden_state。

在这里插入图片描述

6.2、大模型在推荐系统的应用

  • 大模型基于海量文本中token序列中下一个token出现的概率进行统计建模,即学习在给定语言片段后出现下一个token的概率来解决下游任务
  • 用户过往的操作行为其实就是一个有序的序列,每个用户的操作序列类似于一篇文本,所有用户的操作行为序列类似于大模型的训练语料库。那么预测用户下一个操作行为就类似于预测词序列的下一个token
  • 当然,推荐系统的数据还会涉及到很多多模态的数据,大模型其实还无法很好的处理,也是问题和挑战

6.2.1、大模型在推荐系统上的应用方法

  • 数据处理端侧

将用户或者物品的结构化数据构成文本输入大模型进行微调,微调后的模型就可以基于一定的策略来生成新样本了,对于数据量不足的推荐场景是一个比较好的补充
将各类信息(物品标题、标签、描述文本等)进行嵌入获得嵌入向量作为其它推荐模型(可以是大模型,也可以是传统的推荐模型)的输入特征。

  • 大模型用于召回、排序

有3种最主要的使用方式,分别是:利用推荐系统的数据进行预训练再进行推断(即下面的预训练范式)、利用预训练好的大模型进行微调再进行推断(即下面的预训练、微调范式)、利用预训练好的大模型通过prompt进行推断(即下面的预训练、提示范式)。
在这里插入图片描述

  • 预训练范式:利用推荐系统相关数据来预训练大模型,然后让大模型直接进行推荐召回、排序

1)BERT4Rec基于Transformer和BERT架构来学习一个双向的神经网络大模型,采用完形填空(Cloze)目标函数进行训练,也就是随机遮盖(mask)序列中的某个token,通过模型来预测该遮盖的token的概率来建模
2)序列推荐的这种场景下,输入包括对应的用户集、物品集,用户与物品交互序列,即对用户u的所有可能的交互物品的概率进行序列化建模
在这里插入图片描述

  • 预训练、微调(fine-tuning)范式:

UniSRec,它应用线性层来变换来自不同领域的物品的BERT表示,然后应用自适应组合策略来获得通用物品表示同时,考虑到从多个特定领域的行为模式中学习可能会出现冲突的现象,UniSRec在预训练阶段提出了序列-物品和序列-序列对比任务以生成通用序列表示。这种方法只需要对模型参数的一小部分进行微调,就能使模型快速适应冷启动或新物品的未知领域
对于物品表示,采用了物品的文本表示输入,然后利用预先训练的语言模型来学习文本嵌入,采用了MMOE的策略将文本语义转换为适合推荐任务的通用形式
对于序列表示,简单地混合来自多个领域的交互序列进行预训练可能效果不佳,因为可能会有一些冲突,引入序列-物品和序列-序列两种对比学习任务联合优化序列-物品对比损失函数和序列-序列对比损失函数
因为学习的是通用的物品和序列表示,可以固定主要架构的参数,只需微调MoE增强适配器的一小部分参数,只做微调在这里插入图片描述

  • 预训练、提示(prompting)范式:设计特定的prompt和模板来让大模型完成推荐任务。这类推荐的效果主要由大模型自身的通用能力及prompt的独特设计决定

场景化提问

  • 给定一个推荐场景:在快手短视频中,根据用户一段时间内浏览过的短视频,输出接下来的个性化推荐列表,设计一个召回,可以使用什么算法

1)最简单的方式计算短播历史视频序列中与候选的视频集计算相似度,做topN的召回
2)构建用户行为矩阵,通过矩阵分解或者协同过滤算法来实现个性化推荐或者物品关联物品的推荐(构建用户行为矩阵,需要定义用户的点赞、收藏等动作对应的评分值。)
3)Embedding+MLP的方式,例如item2vec、YoutubeDNN等

相关链接:
推荐系统召回算法介绍
召回算法之规则策略方法
召回算法之5类基础召回算法
召回算法之嵌入召回算法和深度学习召回算法
推荐系统排序算法介绍
推荐系统排序算法之规则策略方法
推荐系统排序算法之logistics回归、FM、GBDT
推荐系统排序算法之wide & deep、YouTube深度学习排序
阿里深度兴趣网络(一):DIN模型
chatGPT、大模型在推荐系统中的应用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/26718.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot+vue3前后端项目-部署Docker详解

一、后端yml环境配置 mysql和redis的连接之前是localhost。现在我们需要修改成容器之间的调用,如何知道mysql和redis的连接地址呢?docker compose就帮我们解决了这个问题,我们可以使用镜像容器的服务名称来表示链接。比如docker-compose.yml…

龙芯+RT-Thread+LVGL实战笔记(36)——密码锁完善

【写在前面】不知不觉中,又临近学期末了。这个学期,因为一些特殊原因,一直没怎么更新本教程,而且不得已上调了本教程的价格,在此笔者深表歉意。另一方面,自己带的学生发挥不佳,很遗憾未能闯进国赛,为此笔者也郁闷了相当长一段时间。事已至此,也只能慢慢释然,来年再战…

每日一练:攻防世界:Misc文件类型

给了一个txt文本文件,因为题目是文件类型,我先开始一直在想关于文件头的知识。 这串数据看着像十六进制数据,我就直接把他转ASCII了 反转一下就是base64,因为base64没有_,所以去掉46ESAB_,base64解码Hex试…

汇聚荣科技有限公司在拼多多评价上好不好?

汇聚荣科技有限公司在拼多多平台的评价如何,这是很多消费者在选择购买该公司产品时会关心的问题。通过深入分析,我们可以从多个维度来探讨这一问题。 一、产品质量 对于任何公司而言,产品的质量是其生存和发展的根本。根据用户反馈和相关评价…

联邦学习权重聚合,联邦学习权重更新

目录 联邦学习权重聚合 model.state_dict() 保存模型参数 加载模型参数 注意事项 联邦学习权重更新 联邦学习权重聚合 model.state_dict() 在PyTorch框架中,model.state_dict() 是一个非常重要的方法,它用于获取模型的参数(即权重和偏置)作为一个有序字典(Order…

基础-01-计算机网络概论

一. 计算机网络的发展与分类 1.计算机网络的形成与发展 计算机网络:计算机技术与通信技术的结合 ICTITCT 2.计算机网络标准阶段 3.计算机网络分类1:通信子网和资源子网 通信子网:通信节点(集线器、交换机、路由器等)和通信链路(电话线、同轴电缆、无线电线路、卫…

VMware安装Debian,Debian分区,虚拟机使用NAT模式联网,Linux设置静态IP

官网 https://www.debian.org/download stable是稳定版 win下amd64就行,macOs装arm架构的 安装Debian虚拟机 教程里没有的只管往下点就完了 哪个都行 选镜像 选安装位置 别超过宿主机内核就行 看你需求 NAT模式 虚拟 看你需求 其他的也检查一下 图形安装 选中文 继…

swift5 在当前控制器先dismiss后pop

如下图需要在present当前控制器时用全局变量firmwareUpgradePresentingVC先引用上一个控制器(下面的代码亲测有效) func dismissAndPop() {self.dismiss(animated: false) {firmwareUpgradePresentingVC.navigationController!.popViewController(animat…

书生·浦语大模型实战营第二期作业一

书生葡语大模型实战营介绍,第二期课程内容: 通用大模型成为人工智能发展趋势: 书生浦语大模型开源历程: 书生浦语大模型体系: 书生葡语大模型2.0提供不同尺寸和类型的模型,支持多语言和多模态任务&#xff…

【LeetCode滑动窗口算法】长度最小的子数组 难度:中等

我们先看一下题目描述&#xff1a; 解法一&#xff1a;暴力枚举 时间复杂度&#xff1a;o(n^3) class Solution { public:int minSubArrayLen(int target, vector<int>& nums){int i 0, j 0;vector<int> v;for (;i < nums.size();i){int sum nums[i];fo…

人工智能革命:2024年指数报告揭示AI行业十大趋势

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;正逐渐渗透到我们生活的方方面面。斯坦福大学李飞飞教授领导的斯坦福以人为本人工智能研究所&#xff08;HAI&#xff09;发布的《2024年人工智能指数报告》为我们揭示了AI行业的最新趋势和未来的发展方向。以…

【外汇天眼】交易智慧:遵循趋势,稳中求胜

在交易中&#xff0c;新手往往因对未来走势的不确定性感到恐惧&#xff0c;从而不断要求对市场进行全面分析。这种需求反映了他们在投机心理幼稚期缺乏安全感的表现。有些勤奋的交易者甚至在做单前、持仓时和寻找出局理由时都在不断分析行情。然而&#xff0c;这种过度分析真的…

搜维尔科技:Movella旗下的Xsens在人形机器人开发中得到广泛应用

人形机器人的发展正在全球范围内受到广泛关注。作为机器人领域的重要分支&#xff0c;人形机器人因其具备高度仿真的外观和动作&#xff0c;以及更贴近人类的行为模式&#xff0c;有望逐渐成为人们日常生活和工业生产中的得力助手。在中国&#xff0c;这一领域的发展尤为引人注…

C++ 30 之 new 和 delete 关键字

#include <iostream> #include <string.h> using namespace std;class Students08{ public:Students08(){cout << "students08的默认构造函数"<< endl;}Students08(int a){cout << "students08的有参构造函数"<< endl…

Mac vscode could not import github.com/gin-gonic/gin

问题背景&#xff1a; 第一次导入一个go的项目就报红 问题分析&#xff1a; 其实就是之前没有下载和导入gin这个web框架包 gin是一个golang的微框架&#xff0c;封装比较优雅&#xff0c;API友好&#xff0c;源码注释比较明确。 问题解决&#xff1a; 依次输入以下命令。通…

nest : 无法加载文件 C:\Users\admin\AppData\Roaming\npm\nest.ps1,因为在此系统上禁止运行脚本。

完整报错&#xff1a; nest : 无法加载文件 C:\Users\admin\AppData\Roaming\npm\nest.ps1&#xff0c;因为在此系统上禁止运行脚本。有关详细信息&#xff0c;请参阅 https:/go.microsoft.com/fwlink/?LinkI D135170 中的 about_Execution_Policies。 问题原因&#xff1a; …

多校园跑腿小程序源码系统 帮取+代拿+外卖配送 功能超多 带完整的安装代码包+搭建部署教程

系统概述 多校园跑腿小程序源码系统 是一款基于微信小程序平台开发的全功能校园服务应用。该系统采用先进的前后端分离架构&#xff0c;结合云服务技术&#xff0c;确保了系统的高可用性、可扩展性和安全性。系统设计之初就充分考虑到了多校园环境的特殊性&#xff0c;支持多校…

分享一份 .NET Core 简单的自带日志系统配置,平时做一些测试或个人代码研究,用它就可以了

前言 实际上&#xff0c;.NET Core 内部也内置了一套日志系统&#xff0c;它是一个轻量级的日志框架&#xff0c;用于记录应用程序的日志信息。 它提供了 ILogger 接口和 ILoggerProvider 接口&#xff0c;以及一组内置的日志提供程序&#xff08;如 Console、Debug、EventSo…

QtScrcpy最出色的C++开源手机投屏控制软件

QtScrcpy是一款开源的跨平台屏幕录制和投屏工具 基本概述&#xff1a; 它基于Android的ADB&#xff08;Android Debug Bridge&#xff09;和Electron框架&#xff0c;为用户提供了简洁且功能强大的用户界面。 支持平台&#xff1a; QtScrcpy支持Windows、macOS和Linux三大…

Spring Boot + Mybatis Plus实现登录注册

Spring Boot 实现登录注册 1. 注册 业务逻辑 客户端输入注册时需要的用户参数&#xff0c;比如&#xff1a;账户名、密码、确认密码、其他服务端接收到客户端的请求参数进行校验&#xff0c;然后判断是否有误&#xff0c;有误的地方就将错误信息抛出将密码进行加密之后存储到…