推荐系统的发展演进历史和模型的目标及优缺点

推荐系统发展历程

梳理推荐系统的模型进化历程,明白模型改进了什么,有什么缺点。做到心中有一副big picture,才能明白未来模型的趋势。



前言

前期已经详细展示了各种推荐模型的原理和详解。本次按照时间线把各个模型串联起来。


一、模型进化历程

  • 1、90年代,推荐算法主要是协同过滤算法,产生了基于用户(UserCF)、基于物品(ItermCF)的协同过滤算法。

    • 优点:模型最简单,计算快。
    • 模型缺点:行为数据非常稀疏,模型欠拟合
  • 2、2006年,产生了基于矩阵分解的协同过滤算法

    • 优点:有点embedding的意思,但是没有明确提出embedding技术。改善了模型数据的稀疏性,可以为没有行为数据的物品和用户做推荐,
    • 实践:利用MF协同过滤算法,为校园BBS论坛推荐用户关心的top10热点帖子。
    • 缺点:只能用到行为数据一个特征,没有充分利用其他信息。
  • 3 、LR模型:针对协同过滤只能用一个特征的缺点,那时传统机器学习大行其道,很自然就能想到最简单的线性回归模型LR。以及一些树决策树模型,比如GBDT、randomforest等。其中以线性回归LR为代表。

    • 优点:能利用多维度特征数据 ,计算速度快,目前仍有召回层采用此方法。
    • 缺点:
      • 1、模型过于简单,表达力不强
      • 2、特征之间相互独立,未能充分挖掘特征组合的特性。
  • 3、2010年,产生FM模型,针对LR模型未充分挖掘特征之间的相关性,引入了特征交叉的概念,借鉴了二阶多项式模型,引入了特征之间的二阶交叉项。在这里插入图片描述
    然后利用矩阵分解等优化手段,最终优化后表达式
    在这里插入图片描述
    让FM可以达到线性时间的训练和预测,精度高于LR。FM
    后面再2017年,台湾人提出了对FM的改进模型FFM,引入了field的概念,FFM把相同性质的特征归于同一个field,有点特征降维和特征正交化的意思。FFM 由于引入了场,使得每两组特征交叉的隐向量都是独立的,可以取得更好的组合效果。

  • 2013年,谷歌提出Word2vec模型,提出了embedding概念,开启了全新是视角,后被广泛应用到推荐系统,后续产生了Iterm2vec等一系列算法,为后续模型的发展,奠定了基础。

    • 优点:全新视角,用稠密向量表示物品,让计算物品间的相似性成为可能。
    • 缺点:只能处理类似时序性的序列,有些没有很强时序性,比如人际关系网这种图型结构,表达能力有限。
  • 2014年,进一步在Word2vec embedding基础上,产生了Graph Embedding算法,比如DeepWalk,采用随机游走的方式,去捕获关联物品间的机构化信息。

    • 优点:对图结构有了表达能力
    • 缺点: 仅仅考虑了图节点间的链接权重,未进一步挖掘图结构的结构信息,比如中兴节点,周围节点。
    • 后续2016年斯坦福大学提出了Node2vec,通过调整随机游走的权重,从而体现网络的同质性(DFS)和结构性(BFS)。
  • 同年2014年,Facebook提出了GBDT+LR模型,开启了组合模型的概念,充分利用各个模型的优点,进行强强联合,从而达到当个模型更好的准确率,性能提升3%。此时的GBDT决策树有点特征自动组合交叉的意思。GBDT+LR在当时比赛中也常见。

    • 优点:在当时算是传统机器学习中最好的模型。2014年中国人陈天奇发明的XGboost算法,目前应该是决策树模型的天花板,至今在各个数据比赛中依然常见,用XGboost+LR模型结合,模型的精度还是会比单个XGboost更好,我的cdsn论文中有描述。
    • 实践:实习时,采用此模型做了一个网上鲜花店的顾客兴趣商品top10推荐。效果不错。
    • 缺点:传统学习算法到达了性能瓶颈,再优化很难,未能充分挖掘物品之间的内在联系信息。
  • 2016年,谷歌提出了wide&deep模型正式把深度神经网络引入到推荐系统,运用在了app推荐场景中。也成了后续改进模型的baseModle。整体有点集成学习的思想,wide部分是一个线性模型,利用了线性模型的记忆功能,deep部分是个3层的神经网络,对稠密后的特征向量进行自动特征提取,因此具有泛化能力,最后集成wide和deep部分,联合训练,得到最终的结果。

    • 优点:实现了对记忆和泛化能力的统一建模,提供了一种很好的思想,为后续模型改进提供了思路。
    • 缺点:Wide部分还是需要人为的特征工程,人工地设计特征叉乘。
  • 2017年,华为提出了DeepFM,也就是用FM替换了Wide&deep中的LR部分,这也是很容易想到的对LR模型是升级部分,但FM模型的特征交叉仅限于二阶交叉,因此此模型的创新性不大。

    • 优点:升级了Wide&Deep模型
    • 缺点:特征交叉仅限二阶,特征提取还不够充分。
  • 2017年,微软提出了DCN模型,尝试告别人工做特征交叉,提出了一种用cross network替换wide&deep模型的LR部分,cross network有点类似残差网络的结构,下一层元素等本层元素乘以第一层元素,然后再加上本次元素,因此,cross network设计多少层,就能做到多少阶的特征交叉。此外,相比于wide@Deep,DCN的cross部分和deep部分的输入是相同的,实验表明,cross部分能帮助deep部分收敛。

    • 模型优点:cross network自动做特征交叉。
    • 模型缺点:这种特征交叉是bit(位)界别的,不是向量级别的。特征向量作为一个整体才更能表达一个特征维度,拆分成bit,可能会失去向量整体的意思表达。
  • 2017年,新加坡国立大学提出了NeutralCF,也就是著名的双塔结构,即采用神经网络来优化最初的协同过滤算法。优化点有两个:1、基于矩阵分解的协同过滤算法,最后用点积计算相似度,点积计算相似度还是太简单了,把点积替换成了MLP,2、MLP可以下推分别放置在物品侧和用户侧,最后模型就成著名的双塔结构,塔顶的输出就是物品侧和用户侧的embedding向量,存储起来,线上服务时,直接取embedding相似性作为推荐结果。

    • 模型优点:对传统协同过滤进行了升级,且易于部署。
    • 缺点:模型还是过于简单,特征利用率低,
    • 只能使用一个特征,而 NeutralCF可以在矩阵分解得到的向量后,追加其他特征,最后送进MLP中,这个模型待求证。
  • 2017年,阿里巴巴提出DIN模型,场景的出发点是觉得把用户的embedding向量固定成一个,很难发现用户和目标商品的相关性,如果用户embedding向量能跟着待推荐商品的变化而变化,就更能精准的把握用户的兴趣向量,也就能推荐的越准确,baseModel就是把用户embedding,历史物品的平均池化embedding,和待推荐的目标物品embedding,加上场景信息embedding,concate成一个长长的向量,然后送进MLP进行学习训练,DIN的创新点在于引入了激活单元,也就是历史物品和待推荐物品的相关性,因为用户的历史物品和目标物品的关联性不同,权重自然就应该不同,因此单纯用average pooling会损失一些信息,所以我们先用一个激活单元,先算的目标商品和历史商品之间的权重,然后再用权重进行pooling,有效的抽取到用户的兴趣。

    • 优点:引入了用户向量随商品变动的机制,用户向量更加灵活,兴趣更能提取。
    • 缺点: 没有抓取用户历史物品的时序特性,同时,模型存在冷启动问题。
  • 2018年,针对冷启动问题,阿里提出了EGES,也就是在deepwalk生成graph embedding时,加入了补充信息,即side information,很好的解决了冷启动问题,工程实践很很强,因为物品除了id类属性,还有自身固有属性,比如所属商品分类等,也是重要信息,全新的商品加入时,用KNN选出最近邻的N个商品,做average pooling,就能很好的表示出新商品的embedding,当然,阿里的EGES还引入了注意力机制,因为每个属性的重要程度不一样,所以把每个属性的权重,也加入到模型进行训练,最后的到根据权重相加的embedding。

    • 优点:很好的解决冷启动问题,工程实践强,graph embedding方法主流就有Deepwalk、Node2vec、EGES。
    • 缺点:目前没有发现明显缺点。
  • 2019年,阿里巴巴对DIN未抽取时序特性进行了升级,得到DIEN,其实很好理解,对于时序性特征,最常见的处理手段是通过RNN、LSTM、GRU的专门处理时序的模型,其中以GRU最常见,因为模型最简单,门控信号就只有更新门和重置门,而效果上和具有 遗忘门、输入门、输出门的3门LSTM效果相差不大。但阿里的创新点在于在GRU的基础上添加了注意力attention机制,相当于在GRU中多添加了一个门叫attention门,最终输出用的是历史商品embedding是这个带attention的GRU的输出,达到了即抓住了用户历史序列特性,有抓住了历史物品和目标物品的相关性。可以模拟用户兴趣随时间的变化,所以叫兴趣进化网络。

    • 优点:改进DIN无法抽取时序性特征的弱点。
    • 缺点: 把历史序列当成一个大集合,没有进行细分,也就是没有考虑用户兴趣变迁的过程。
  • 干货来了。推荐系统一直都在借用NPL中的算法,包括Word2vec,现在NPL也在快速发展,已经没有人用Word2vec了,因为Word2vec无论是CBOW还是skip-gram,都仅仅是按词频提取了局部信息,无法获取语境,比如apple,可以表示苹果,也可以代表一个公司,Word2vec把词用一个embedding向量表示,就无法根据上下语境来推测具体含义,因此,我们需要以更宏观、全局的角度去获取语境信息。

    • 于是有了Seq2Seq模型,首次引入了encoder和decoder,编码器和解码器的概念,是基于RNN模型的序列输入序列输出模型,比Word2vec有10%的效果提升。但是RNN天生的缺点是会遗忘,原始的RNN记忆能力更差,具有输入门、输出门、遗忘门的LSTM会把记忆大致分成长期记忆和短期记忆,效果会好点,简化的更新门和重置门的GRU计算量会稍微好点,当遗忘特性依然存在,后来有了双向RNN,都是在改进遗忘特性。
    • 另外RNN是串行模型,无法并行计算,所以计算效率也是短板。
    • 接着,人们摒弃了RNN,发现了attention和self-attention,现在NPL已经没人用RNN了,attention的优点是不会遗忘,并且可以并行计算。每次计算都会和之前的状态计算相关性,然后把之前状态按权重累加,做到了: 全局浏览、重点关注,所以叫attention注意力机制。当然计算量也会比Seq2Seq高,有三个权重矩阵需要训练,分别为 W K W_K WK, W Q W_Q WQ, W V W_V WV,计算复杂度是encoder和decoder维度乘积。如果全局使用一个 W K W_K WK, W Q W_Q WQ, W V W_V WV叫单头attention,如果使用多个 W K W_K WK, W Q W_Q WQ, W V W_V WV矩阵,类似于卷积神经网络中的不用卷积核去提取信息,得到不同的结果。最后把不同的attention结果拼接起来,则叫多头attention。多头attention可以理解为叠加多次单头attention的结果。
    • 接着,模型进一步演化成了Transformer,现在,Transformer才是NPL领域的标准,Transformer利用6层attention和selfattention,配合全连接层来搭建encoder和decoder,摒弃了RNN结构,比seq2seq效果提升了5%。然后发展了bert,bert主要是用来预训练transformer的encoder模块,主要思想是随机遮挡单词进行预测,以及随机拼接句子进行是否相邻的判断。目前,NPL最好的模型就是bert。
    • 但是bert也有缺点:1、模型复杂,训练非常耗时,2、bert无法准确捕获序列时序位置信息。
    • 2021年的AAAI论文中,很多就是基于bert进行进一步简化和改进,比如fastBert、lightBert、miniBert等等。另外还有对位置信息的捕获改进,比较出名的就是图形分类的Ait模型,直接把位置信息加入到了bert最后得到的向量中,一起训练,目前Ait模型性能已经超过最好的基于深度CNN模型的Alxnet。这一点也给我了一些启发,后面详细说下。
    • 介绍了NPL,对推荐系统有什么改进呢?
  • 2019年,阿里巴巴对DIEN进一步优化,得到了DSIN,重点是引入了session的概率和引入attention机制,因为用户的兴趣,在一段时间内可能会重点关注同一类物品,也就是一个session内是物品基本相似的,同质的,而在不同的时间段也就是不同session内是有较大差距的,也就是异构的,显然之前的模型一股脑把历史行为序列杂糅在一起,没有准确抓住这种兴趣随时间变迁的规律。session最初出现在Airbnd模型中,也不是阿里原创,DSEN处理过程为:1、把历史行为数据按时间段,比如30分钟,拆分成一个个session,2、每个session提取一个 兴趣向量, 3、每个session的兴趣向量用attention机制,获得每个兴趣向量在全局中的embedding向量。4、attention的缺点是无法准确捕获时序性和位置信息,自然会想到用处理时序新的LSTM、GRU等模型处理,这里创新点在于于用了BI-LSTM,也就是双向(前向和后向都进行LSTM,然后进行拼接),这样更能发现序列间的内在相关性。5、最后把历史session兴趣向量和目标商品进行权重计算,得到相关性,最后累加一起,得到最终商品的embedding向量。

    • 优点:引入了attention机制和session处理,对用户历史序列进行了更细粒度处理,当然能挖掘到更多规律。
    • 缺点: 模型复杂,时效性差。因为BI-LSTM也是串行模型,无法高效的并行计算。
    • 个人可优化DSIN的点:
      • 1.直接去掉BI-LSTM,因为BI-LSTM部分主要用来弥补attention获得的embedding向量无法包含位置信息的缺点,那为何不直接把位置信息叠加进attention后的embedding向量,一起训练,这样模型直接学习到位置信息,还可以并行计算。这里可参照ViT模型的处理技巧,Vit是首次把Transformer运用在图片分类中,于2021年发表,ViT模型在大数据上已经超越了基于CNN的ResNet等模型,在ViT模型中,把位置信息直接编码,然后叠加到attention得到的向量上,这种方法被检验有效。另外BI-LSTM本身用在推荐模型在某些顺序时序性场景就有点不切合,比如用户买了笔记本电脑,大概率会买无线鼠标来配合使用电脑,这种先后顺序很好理解,而反方向LSTM则会理解为,用户先买了鼠标,然后为了配合鼠标使用,买了电脑,这明细不合适。给买了笔记本电脑的用户推荐鼠标,CVR会较高,而给买了鼠标的用户推荐笔记本电脑,CVR未必高。
      • 2.session的划分,按照时间窗口,难免会产生边界效应或者叫兴趣割裂,用户浏览一个兴趣商品的时间可长可短,用固定时间窗去分割,明显不是最佳方式。我们重要的是抓住用户兴趣变化的点。我想到的办法是用近期物品的embedding和以前一个时间窗中所有物品做相关性计算,如果近期的几个物品和以往物品相关性小于某个阀值,则可以切分为不用的session。
      • 3、降噪处理,根据步骤二中那近期物品和历史物品进行相关性计算,还可以发现噪声,比如用户无意间点击了一下广告,然后又回到主兴趣上来,此时用户无意点击的广告信息,就可以当做噪音进行丢弃处理,或者当做第二兴趣特征,平行训练,这个需要依据依据业务特点进行确定。
      • 目前正在模型的改进和验证中,可考虑在国内期刊投稿。
  • 重点介绍工程性很强的YoutubeNet及升级方式:

    • 2016年,YoutubeNet因为极强的工程落地性,成了经典模型,目前知乎、山烛视频等知名互联网都在使用,模型设计也很巧妙,用来预测用户对视频的播放时长。很能切合实际的业务场景。
    • 实践:上市公司信息推荐app中,业务目标是:1、让用户对公司信息能深入阅读,防范风险,2、让用户能接触到更多用户感兴趣的上市公司,从而投资时能把资金分散到各个上市公司,避免鸡蛋放在一个篮子里,从而降低投资风险。
    • 商业模式:收取交易手续费,提高用户投资金额就能获得更多手续费。但更重要的是让用户能充分了解投资目标的基本面情况,降低投资风险。
    • 技术解读:预测对上市公司信息的阅读时长,越长表示用户越感兴趣。
    • 选型:业务场景和YouTube模型契合,和阿里的DIN、DIEN、DSIN不契合。
    • YouTubeNet 创新点:
      • 离线得到用户embedding和物品embedding的设计很巧妙,先用用户历史序列embedding做avg-pooling,然后结合用户的属性信息,送进3层神经网络,最后softmax预测目标视频,巧在把最后softmax层对应的权重向量作为物品最终的embedding向量,而把softmax前一层的神经元输出作为用户embedding,这样确保了用户和物品embedding向量在同一个向量空间。

      • 召回层直接用局部敏感哈希或者用Facebook开源的Faiss库来快速召回物品。在这里插入图片描述

      • 其次,线上模型部分,训练时加权逻辑回归作为最终输出,预测时用指数进行输出,经过公式的推导和近似处理,发现指数输出刚好是目标视频的观看时长。

在这里插入图片描述

  • YouTubeNet模型的改进:实际中我们对模型进行了改进,用阿里EGES计算历史物品的embedding向量,这样很好的解决了冷启动问题,同时加入了物品更多的补充信息side information,物品的embedding向量也更准确。

二、常见问题

1.EGES是单独训练还是联合训练?


总结

提示:这里对文章进行总结:
本文主要多推荐算法常见模型进行一个简单的梳理,里面很多细节都可以拿出来问。彻底搞懂一个很重要。

  • 7
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值