推荐相关题解

1. 了解推荐么,说说都知道啥
概念:推荐系统根据用户的信息需求、兴趣,将用户感兴趣的信息、产品等推荐给用户,帮助用户从海量的信息中快速寻找到自己想要的信息的一种工具。对于商家或企业而言能够提高公司产品与用户直接接触、购买等行为,提高用户粘性。
流程阶段:

召回的目的是获得用户期望的信息内容,但通常用户召回环节返回的数量太多,所以需要粗排环节,在保证一定精准的前提下,进一步减少往后传送的item数量。精排环节尽量精准地对物品进行个性化排序,而重排往往涉及已读、去重、打散等,进一步改善用户体验。
推荐系统架构中召回层与排序层是核心,召回层特点是:待计算的候选集合大、涉及的模型简单、特征较少,尽可能的使用户感兴趣的物品在这个阶段快速召回,即保证相关物品的召回率(多路召回、embedding召回);排序层特点是:首要目标得到精准的排序结果,需要处理的物料量级小,可以基于较多的特征使用复杂的模型处理。
系统评价指标:
(1)用户满意度:购买率、点击率、停留时间、转换率;
(2)预测准确度:评分:均方误差RMSE、平均绝对误差MAE;准确率、召回率;覆盖率:信息熵、基尼系数;多样性:推荐列表中所有物品之间的不相似性;新颖性:推荐用户之前没有看过的。
多路召回:
采用不同的策略、特征或简单模型,分别召回一部分候选集,然后把候选集混合在一起提供后续排序模型使用,是一种在计算速度和召回率之间进行平衡的结果。

Embedding召回:
在进行embedding召回时,可以把embedding间的相似度作为唯一的判断标准,可随意限定召回的候选集大小。主要包括

  • I2I:计算item间相似度,多用于相似推荐、相关推荐;
  • U2I:基于矩阵分解、协同过滤的结果,直接给用户推荐;
  • U2U2I:基于用户的协同过滤,先找相似用户,再推荐相似用户喜好的item;
  • U2I2I:基于物品的协同过滤,先统计用户喜好的物品,再推荐喜欢的物品;
  • U2TAG2I:基于标签的泛化推荐,先统计用户偏好的tag向量,然后匹配所有的item,tag一般是标签、分类、关键词等。

2. 请你说一下推荐系统中的几种排序
(1)LR
概念:LR即为logistic regress,是一种线性回归分析模型,常见应用于分类问题中,属于利用对数损失函数的判别式分类方法。
推导原理:考虑具有n个独立变量的向量

场景应用(以商业门店推荐为例,针对召回策略返回的数据,预估点击率进行精排处理):

  • x项可以理解为特征值,如用户的年龄,用户的性别,门店的类别,门店的价格等;w项是每个特征值的权重;计算结果介于0到1之间,越接近1,越可能被点中了,越接近0,被点击的概率越小
  • 对于已经存在的数据,特征值和结果有映射关系,要么是被点击的正样本,要么是没被点击的负样本,基于这些样本数据训练得到模型
  • 在进行预测时,对于新item,将其特征值输入,得到结果(是否被点击)作为排序的权重(正相关),结果值越大,排序权重越靠前,否则越小。

(2)FM:
概念:因子分解机(Factorization Machine)算法用于解决大规模稀疏数据下的特征组合问题,可视作带特征交叉的LR,常用于推荐、搜索的排序场景。
推导原理:以特征两两组合的二阶场景为例,FM模型表达式:
图片说明
其中vi表示第i特征的隐向量,<. , .>表示两个长度为k的向量的内积,计算公式为:
图片说明
参数因子化表示后,使得的参数与的参数不再相互独立,这样就可以在样本稀疏情况下相对合理的估计FM模型交叉项的参数。FM模型的复杂度为O(kn^2),但是通过等价转换,可以将FM的二次项化简,复杂度优化为O(kn),有:
图片说明
场景应用(电商场景为例):
图片说明

  • 对于某个用户,将属于这个用户子集合的特征,查询离线训练好的FM模型对应的特征embedding向量,然后将n个用户子集合的特征embedding向量累加,形成用户兴趣向量U,这个向量维度和每个特征的维度是相同的(物品对应子集合特征同理)。
  • 对于每个用户以及每个物品,将每个用户的兴趣向量离线算好,存入在线数据库,如redis、faiss。当用户登录或者刷新页面时,可以根据用户ID取出其对应的兴趣向量embedding,然后和存储的物料embedding做内积计算,按照得分由高到低返回得分top K的物料作为召回结果,提交后续排序。
  • 从优化的角度,可以引入用户在每一次刷新都可能需要重新捕获的场景上下文特征,得到更加完整高效的召回排序模型。

(3)Wide&Deep:
Wide&Deep模型最早由谷歌提出,并应用于Android手机应用商店上APP的推荐排序,该模型将传统模型和深度学习模型相结合。Wide部分(传统模型,如logistic回归)起记忆作用,即从历史数据中发现item或者特征之间的相关性,deep部分(深度学习模型)起泛化作用,即相关性的传递,发现在历史数据中很少或者没有出现的新的特征组合,寻找用户的新偏好。通过将这两个部分结合可以更好的在用户的历史兴趣和探索新的兴趣点之间做到平衡。
图片说明

(4)DeepFM:
DeepFM采取Wide & Deep的框架,差异在于将Wide部分的LR替换为了FM,从而自动构造二阶特征叉乘,而非手工设计叉乘。其中,DeepFM的输入可由连续型变量和类别型变量共同组成,且类别型变量需要进行One-Hot编码。而正由于One-Hot编码,导致了输入特征变得高维且稀疏。应对的措施是:针对高维稀疏的输入特征,采用word2vec的词嵌入方式,把高维稀疏的向量映射到相对低维且向量元素都不为零的空间向量中。由下面网络结构图可以看到,DeepFM 包括 FM和 DNN两部分,所以模型最终的输出也由这两部分组成:

3. 讲一下item-CF,怎么计算相似度,以及用什么优化

概念:item-cf是一种基于物品的协同过滤算法,通过用户对不同item的评分,来对不同item之间的相似性进行评测,再基于这些相似性做出推荐。也就是给用户推荐和他之前喜欢的物品相似的物品。
用户/物品 物品A 物品B 物品C
用户A
用户B
用户C 推荐

特点:item-cf主要是通过收集用户对商品的历史行为,计算项目之间的相似度而不是根据内容、属性以及标签方面上衡量项目的相似性,个性化方面非常明显,体现了用户对自己兴趣的传承,适用于项目基数要显著小于用户基数的系统之中。
算法步骤(包含如何计算相似度):

  • 统计系统里每一个被用户留下历史行为的商品用户数,即Item-User数据集,例如Goodsi{User1, User2, User3, … , User_N} i∈N+.

  • 遍历统计的数据,计算出同时喜欢两两商品的用户人数,放入共现矩阵R,例如,有N个人在喜欢商品i的同时又喜欢商品j,则记为R[i][j] = N。用户商品矩阵图如下所示:
    图片说明

  • 得到共现矩阵R后,通过余弦相似度公式计算项目之间的相似度,公式如下:
    图片说明
    该式子是为了避免推荐出热门物品的改进,惩罚了物品j的权重,从而减轻了热门物品和很多物品的相似性。w_ij表示项目i和项目j之间的相似度。对于需要个性化推荐物品的目标用户U,应该获得类似于之前感兴趣项目的项目集合,使用下式计算用户u对项目j的兴趣程度p(u, j),有: ,其中K表示通过数据集所计算出的类似项目的集合,S(j, K)表示与项目j最相似的K个项目的集合,N(u)是用户喜欢的项目集合,W_ij是衡量项目j和项目i之间相似性的大小,r_ui表示用户u对项目i感兴趣的度量值。公式表明了,当某个项目与用户之前感兴趣的项目在相似性上越强,则出现在用户推荐列表中的排名就越高,系统最后会根据计算的预测值由大到小从推荐列表里拿出对应的N个商品推荐给需求用户。
    优化相关:
    (1)基于时间权重的优化:
    由于用户的兴趣变化较快,在召回时更改时间权重可以使推荐系统更加关注于用户的当前兴趣,有: ,也就是在计算两个物品相似度时,增加一个权重表示用户选择商品i与选择商品j的时间差,核心思想为如果用户选择两个商品时的时间间隔越近,则两个商品的相关性越强。
    (2)基于用户session的优化:
    根据时间把用户的评分分成几个session,每个session中计算相似度:,也就是根据时间把用户的评分分为T个阶段,分阶段计算相似度最终求和。核心思想是认为用户在时间段内的行为具有一定的关联。
    (3)基于序列的单向相似性优化:
    假定用户的行为具有一定的序列意义,例如用户在购买手机后可能会追加购买相应型号的手机壳(正次序),但用户购买手机壳后往往不会购买手机(反次序)。其中一个方法是给反次序增加衰减因子:
    图片说明

4. 请你说说youtube召回模型
概念:youtube是世界上最大的生产、分享、发现视频内容的平台。2016年,YouTube用深度神经网络完成了工业级的视频推荐系统,帮助了 用户从不断增大的视频集中发现个性化的视频内容。
解决了什么问题:

  • 大规模,在其他问题表现比较好的算法模型拿过来无法使用,因为youtube用户基数和语料库特别大,需要分布式算法和高效的线上服务系统来解决;
  • 新鲜度,youtube语料库中每秒中都会有较长的视频更新进来,那么推荐系统应该能够基于新上传的视频和用户最新的行为来推荐,因此需要平衡新上传内容和之前已经入库的视频;
  • 数据噪声,视频标签难以获取,youtube上的历史用户行为本来就是难以预测的,因为用户行为具有稀疏性和很多观察不到的外部因子,很难得到用户满意度的ground truth,只能去建模具有噪音的用户隐式反馈信号。

基本结构:

上图是youtube视频推荐的系统架构图,首先对大规模物料库使用简单算法召回、策略召回、深度模型召回等方式,得到一定数量的候选集,然后排序模型对候选集中每个物料进行打分,最终返回top N展现给用户。
召回模型:
(1)召回算法
为了生成候选集,需要从视频语料库中选出与用户相关的视频,可以将其看成一个极多分类问题。基于特定的用户U和上下文C,在时刻t将指定的视频W_t准确的划分到第i类中,其中V表示视频语料库,如下式所示:

(j ∈ V)
其中,用户向量u是由用户观看和搜索视频记录进行embedding,再和上下文以及用户的其他特征组合而成的一个向量。vju表示第j个视频的embedding向量,这里每个视频都embedding成一个向量。假设存在百万个类别,训练这样的极多分类问题会非常困难,需要对softmax多分类问题进行优化加速,采用了负采样方法,通过采样找到数千个负类,将多分类问题转变为二分类问题。
(2)网络结构
在Word2vec语言模型中,将各个词embedding编码到一个向量,并将词的embedding向量喂给前馈神经网络进行学习,基于此,youtube召回模型将每个视频都映射到一个向量,并且将视频的embedding向量喂给神经网络,其中神经网络的输入需要为固定大小的向量。另外,视频的embedding向量也可以通过正常的梯度下降反向传播更新与所有其他模型参数一起学习。网络结构如下图所示:

  • 输入层
    输入数据都是一些异构数据,包括用户观看视频序列ID:对视频ID的embedding向量进行累计并求平均值,得到观看向量(watch vector);用户搜索视频序列ID:对视频ID的embedding向量进行累计并求平均值,得到搜索向量;用户地理特征和用户设备特征:均为一些离散特征,可以采用embedding方法或者one-hot方法,得到用户的地理向量和设备向量;人口属性特征:可以进行归一化处理,提供丰富的先验信息,实现比较好的对新用户的推荐效果。
  • 中间层(两层神经网络,每一层的激活函数为relu)
  • 输出层:维度和视频ID的embedding维度一致,最终得到用户向量u。
    通过该网络结构的学习,最终可以得到所有视频的Embedding向量V,其维度为pool_size×k,其中pool_size为训练集视频资源池大小,k为Embedding的维度。还可以得到所有用户的输出向量u,其中每个用户向量的维度是k维,和物品的Embedding维度一致。
    在线服务阶段,通过视频向量V和用户向量u,进行相似度计算,采用最近邻查询,取得Top相似视频作为召回候选集。

(3)特征处理:

  • 视频ID向量化:基于此向量,可以得到用户的曝光视频向量、观看视频向量、搜索视频向量等(得到用户的各种视频行为向量)。
  • 用户画像特征归一化处理:如地理位置、设备、性别、年龄、登录状态等连续或离散特征都被归一化为[0, 1],并和用户视频行为向量做连接(concat)。
  • 视频生命周期特征:该特征表示视频被上传之后的时间,在youtube上,每秒都有大量视频被上传,推荐这些最新样本对于youtube非常重要,通过持续观察,可以知道用户更倾向于被推荐那些尽管相关度不高却最新的视频。模型策略为将视频生命周期特征作为一个特征拼接到DNN的输入向量,在训练时,时间窗口越靠后,该值越接近于0或者一个绝对值小的负数。

(4)样本选择
训练样本是从youtube的全部观看记录中产生的,而不仅包括推荐系统生成的观看记录,便于加入对新视频的测试,防止对推荐者的观看记录过度利用;同时用户通过其他途径的观看行为也容易被推荐系统采集到,从而可以通过CF快速传播用户行为。另外,对每一个用户所产生的观看记录生成固定数量的训练样本,使得每个用户在损失函数中的权重都是相等的,防止一小部分超级活跃用户影响损失函数的公平性。

(5)上下文选择
用户观看视频时,遵循的是一种非对称模式,即在初始的观看序列中,范围会比较广泛;在后期的观看序列中,范围会逐渐集中。按照顺序预测用户观看的下一个视频,会比随机挑选某一个视频并根据该视频的上下文来预测该视频本身的性能要好。大部分协同过滤算法在推荐时,往往利用的是用户的全量观看历史,从用户的观看历史序列中,随机选择一个视频作为label,将该视频的上下文作为输入,通过该上下文输入来预测label,但是这种情况会出现label提前泄漏的问题。相比之下,在输入时只选择label发生之前的视频,就可以避免这个问题。

5. 请你说说deepfm模型
概念:Deepfm(Deep Factorization Machine)即深度因子分解机,是华为的研究者2017年提出,基于wide&deep架构的改进你和优化的分类模型。因为对于wide&deep模型,仍然无法在工作中摆脱人工特征工程的辅助,且wide部分无法进行自动特征交叉,故deepfm方法应运而生。Deepfm可以看做是对wide&deep模型wide部分的改进,使用因子分解机模型代替传统的逻辑回归模型,这样可以直接通过对模型端到端的训练,无需人工设计组合特征,就可以实现模型自动提取二阶组合特征的效果。
构成:模型整体结构图如下所示:

Deepfm包含两个部分,因子分解机和神经网络两个模块,分别负责提取低阶组合特征和高阶非线性特征。FM部分主要用来学习一阶特征和二阶组合特征,如下式所示:
其中,w_ij为二阶组合特征的权重,w_i为一阶特征的权重,w_0为线性模型中的偏置项,n为特征维度,x_i表示为训练样本第i维特征值。
由于二项组合特征权重系数的存在,需要引入大量参数进行训练,为降低模型训练复杂度,利用二阶组合特征权重矩阵的对称性质对矩阵进行分解,即w_ij=w_ji,和其稀疏性质,即大部分组合特征值是无意义的,权重系数w_ij实际为0,。K的取值远远小于n,使得需要训练的参数数量大大减少,在上述矩阵分解后可以将因子分解机部分重写为下式形式:

其中 .
FM部分通过隐向量内积的形式学习二阶组合特征,即使训练数据中很少出现或未出现的特征交互形式,也可以哦通过FM被更好的学习,并且不会引入过大的权重参数矩阵。
Deep部分同wide&deep模型的deep部分相同,是一个多层前馈神经网络,用来学习高阶组合特征,特有之处在于:
(1)原始特征数据需要做嵌入层embedding表示,不管经过one-hot编码的原始稀疏向量的维度是多少,都是具有相同维度的嵌入层向量;
(2)作为在FM中的二阶组合特征权重被学习的隐向量,可用来将原始稀疏特征压缩为低维稠密向量,完成嵌入层表示:

最后再融合FM部分和Deep部分的模型训练结果,使用sigmoid函数激活后输出预测结果,如下式所示

Deep FM 模型的训练过程包含了因子分解机部分,不需要使用因子分解机模型提前做预训练来获得嵌入层向量,可实现以端到端的方式来联合训练整体模型,可以同时学习低阶组合特征和高阶组合特征,不需要人工设计组合特征,FM部分和Deep 部分可共享嵌入层输入,不再需要额外的特征处理。

全部评论

相关推荐

10-16 15:48
算法工程师
点赞 评论 收藏
分享
丿南烟丶:黑白模板吧,不要这样花哨的。 主要成就太空了,和获奖融在一起,写一两行就行了。 职业技能不要这样排,就传统的掌握精通什么什么然后举例补充的一些重要技术点。 自我介绍说实话也没啥用,可以删了。 把自己的两个项目方案细节补充上去,为什么这样设计,怎么设计,成果是什么按star法则来写 你要引导面试官来问你的技能和项目,你的获奖和自我介绍别人可能看都不看一眼或者不太在乎,重要的是展示你能干活的能力
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务