推荐系统发展历程

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


文章目录

  • 推荐系统发展历程
  • 前言
  • 一、模型进化历程
  • 二、常见问题
    • 1.EGES是单独训练还是联合训练?
  • 总结

前言

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


一、模型进化历程

  • 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高,有三个权重矩阵需要训练,分别为WKW_KWK,WQW_QWQ,WVW_VWV,计算复杂度是encoder和decoder维度乘积。如果全局使用一个WKW_KWK,WQW_QWQ,WVW_VWV叫单头attention,如果使用多个WKW_KWK,WQW_QWQ,WVW_VWV矩阵,类似于卷积神经网络中的不用卷积核去提取信息,得到不同的结果。最后把不同的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是单独训练还是联合训练?


总结

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

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

  1. 干货 | Elasticsearch Java 客户端演进历史和选型指南

    1.Elasticsearch java 客户端为什么要选型? Elasticsearch 官方提供了很多版本的 Java 客户端,包含但不限于: Transport 客户端 Java REST 客户 ...

  2. Hadoop YARN学习之Hadoop框架演进历史简述

    Hadoop YARN学习之Hadoop框架演进历史简述(1) 1. Hadoop在其发展的过程中经历了多个阶段: 阶段0:Ad Hoc集群时代 标志着Hadoop的起源,集群以Ad Hoc.单用户方 ...

  3. 中医发展历程与底层模型

    我的认知 我认为西医不是对中医的毁灭性攻击,而且帮助中医不断强大.)拓宽数据维度->优化模型) 我认为,从中医发展历程来看,我觉得在阴阳五行理论基础上,不断拓宽数据维度的基础上,进而逐步修补优化 ...

  4. 重读经典 | 亚马逊“一键下单”的背后——个性化推荐系统的发展历程

    一般都认为,亚马逊的成功要归功于它鼎鼎大名的"一键下单"功能,但"一键下单"的背后,还需要一个成单量极高的智能推荐系统,来驱动消费者不停地在亚马逊上" ...

  5. 1. oracle学习入门系列之一 数据库发展与历史

    oracle学习入门系列之一 数据库发展与历史 这个oracle学习入门系列是根据本人工作中的一些笔记.项目进行回忆.整理.一方面是自己知识积累,便于技能提升:另一方面是和小伙伴们共进退互通有无,做一 ...

  6. 搜索引擎发展的历史过程与发展现状

    1搜索引擎的发展的历史 1990年以前,没有任何人能搜索互联网.所有搜索引擎的祖先,是1990年由Montreal的McGill University学生Alan Emtage,Peter Deuts ...

  7. 搜索引擎发展的历史过程与发展现状 zhuan

    搜索引擎发展的历史过程与发展现状 1搜索引擎的发展的历史 1990年以前,没有任何人能搜索互联网.所有搜索引擎的祖先,是1990年由Montreal的McGill University学生Alan E ...

  8. 嘉年华回顾丨Eygle带你领略数据库技术和生态的发展演进

    2020年数据技术嘉年华倒计时2个月,相信大家期待值也越来越高.数据技术嘉年华组委会在此精心为大家准备了"嘉年华回顾",挑选往届大会中热门的演讲.从本期开始,小编带大家回顾往届的高 ...

  9. 第五章 资本主义发展的历史进程

    资本主义发展的历史进程 第一节 从自由竞争资本主义到垄断资本主义 自由竞争--生产集中--垄断 资本主义的发展阶段:自由竞争到垄断 自由竞争资本主义--垄断资本主义(19世纪末20世纪初) 垄断产生的 ...

最新文章

  1. 《众妙之门——Web用户体验设计与可用性测试》一2.3 总结
  2. c语言超长编程程序,全国青少年软件编程等级考试C语言经典程序题10道五
  3. T-SQL中的GROUP BY GROUPING SETS
  4. 匿名内部类可以访问private_内部类一篇文章搞定
  5. 申请Let's Encrypt的证书
  6. LeetCode 240. 搜索二维矩阵 II(二分查找 分治)
  7. Unity(四):使用场景Ⅰ:建立类型映射
  8. YOLO,VOC数据集标注格式解析
  9. android 返回图标布局,Android 开发BottomNavigationView学习
  10. asp.net中使用#include语法将文件添加到页面
  11. 转--linux开启FrameBuffer
  12. #读取json某一节点数据_06596.2.0Hive处理JSON格式数据
  13. 小程序毕设作品之微信校园二手书交易小程序毕业设计成品(6)开题答辩PPT
  14. 2022年软考网络工程师考试备考指南
  15. 苹果cms如何添加广告代码
  16. Unity3D 5.0软件安装教程
  17. GeoServer 自定义字体 符号化渲染点
  18. 思维题:三个箱子,一个只装苹果,一个只装橙,另一个装苹果和橙,请问?
  19. 使用visual studio 2019 创建简单的MFC窗口「使用C++」
  20. 关闭游戏功能界面,导致游戏闪退

热门文章

  1. 微型计算机kong控制技术,AT89C2051单片机在步进电机控制中的应用
  2. java 根据经纬度计算多边形的面积_强基初中数学amp;学Python——第二十九课 根据海伦秦九韶公式编程计算三角形面积...
  3. mysql创建数据库时候同时创建表空间_mysql::创建多个表空间添加记录数据会添加到哪个表空间中?...
  4. mysql 崩溃恢复_超详细的MySQL数据库InnoDB崩溃恢复机制总结
  5. 查数估获近千万元融资 ,用科技为金融赋能
  6. vue2.0 仿手机新闻站(七)过滤器、动画效果
  7. Angular定义服务-Learn By Doing
  8. hadoop中job.setOutputFormatClass(PartitionByCoun...
  9. Apache配置(转载)
  10. http 使用curl发起https请求