您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

推荐系统概述和主流模型介绍

时间:2021-06-08 11:08:32  来源:  作者:自由技艺

Hello,大家好,欢迎来到“自由技艺”的知识小馆,今天我们来聊一聊推荐算法。

在广告、电商、信息流分发等业务场景中,推荐算法发挥着至关重要的作用,好的推荐算法能够把用户牢牢抓住,让用户的时间消耗在你推荐的内容上。当然,所推荐的内容有多少价值一般不是App所关注的,APP推荐的目的仅仅是留住用户。腾讯副总裁孙忠怀曾在公开场合说过:“现在短视频平台的个性化分发实在是太强大了,你喜欢‘猪食’,你看到的就全是‘猪食’”。

经典的推荐算法主要指协同过滤(CF),在深度学习火起来之后,基于神经网络的推荐模型层出不穷,比如 google Play 的 Wide & Deep、Youtube 的超大规模分类模型等。本文首先简单介绍下一个完整的推荐系统组成及算法流程,接着重点介绍下主流推荐模型的一些实现细节。

0 如何搭建一个完整的推荐系统

(1)推荐系统组成

标签系统:为了实现内容的精准推荐,首先需要用户画像。所谓用户画像,就是给用户贴上各式各样的标签,比如年龄、性别、兴趣、浏览历史等等,这些标签可以分为事实标签、模型标签、预测标签等,另一方面,又可以按它表示的范围分为一级标签、二级标签、三级标签等。这些标签需要从原子数据集中提取,然后再量化。原子数据集又是什么?它指的是用户浏览 APP 的痕迹以及一些注册信息等,通过消息中间件、存储模块(比如 kafka、Hbase)收集、存储。

推荐系统概述和主流模型介绍

自动化标签系统

算法库:标签系统生成了多维度、较丰富、较全面的用户标签,也就是特征,这些特征就是各种推荐算法或模型的输入数据。

离线训练:有了输入数据和推荐模型还不够,只有通过训练,才能获得最优的模型参数。为什么不用在线训练呢?一是没必要,二是会造成很大的性能开销。

A/B 测试:推荐模型训练好了之后,怎么评估推荐效果呢?这就用到了 A/B 测试,A/B 测试是一种常用的在线评估算法效果的方法。简单来说,就是按一定的规则将用户随机分成几组,并对不同组的用户采用不同的算法,然后通过统计不同组用户的各种评测指标,比如点击率、浏览率、购买率等,从而比较不同算法的好坏。

实时推荐:一旦选中了最好的推荐算法,就可以部署到线上了。

冷启动:推荐系统总体上来说,还是一种有监督的学习方法。有监督学习必然需要样本和标签,而在产品上线初期,系统对用户了解很少,这时只能通过专家知识进行推荐。当系统积累了一定量的数据或者拿到用户足够多的反馈后,就可以训练机器学习模型了。

(2)推荐算法流程

推荐服务的流程主要有 3 步:获取用户特征 -> (召回) -> 调用推荐模型 -> (粗排、精排)
在实际应用中,物品列表规模很大,如果对所有的物品都调用模型打分,在性能上是不可接受的,因为计算耗时过长从而影响用户体验。

所以,一种常见的做法是将推荐列表生成分为召回排序两步。召回的作用是从大量的候选物品中(例如上百万)筛选出一批用户较可能喜欢的候选集 (一般是几百)。排序又分为粗排和精排,粗排就是选出打分最高的那一部分物品。更进一步,对粗排得到的物品列表,可能需要人工调整,这就是精排。

1 CF(Collaborative Filtering,协同过滤)

好了,到这里我们已经对推荐系统有了宏观上的了解了。接下来就来看看推荐算法是怎么筛选出用户感兴趣的物品的,最经典的就是协同过滤算法,分为 UserCF 和 ItemCF,简单理解就是一句话:人以类聚,物以群分。这方面的文章很多了,这里就不展开讲了,下图给出了 UserCF 和 ItemCF 的优劣势对比的结果。

推荐系统概述和主流模型介绍

UserCF 和 ItemCF 对比

2 MF(Matrix Factorization,矩阵分解)

现在来考虑一个给用户推荐电影的简单场景:假设有 m 个用户,总的电影种类为 n. 例如,用户 1 看过电影 1 和电影 n,并给出了评分 1.0 和 0.5,如果用户看完电影没给评分,也没关系,可以用一个默认值代替。用户 2 看过电影 2,并打出了 3.7 分。推荐的目的就是把这个 m * n 的矩阵中(用 S 表示)缺失的值给补全,具体流程如下:

推荐系统概述和主流模型介绍

CF 矩阵

首先,我们假设矩阵 可以分解为矩阵 P 和 的乘积,

推荐系统概述和主流模型介绍

CF 矩阵分解

这样做的物理含义就是:每个用户或者每部电影都可以用一个长度为 k 的向量表示。

模型 一:NCF(Neural CF)

推荐系统概述和主流模型介绍

NCF 模型

上述模型中,输入层(Input Layer)需要对用户(User)和物品(Item)进行独热编码(one-hot),矩阵 P 和 矩阵 Q 是模型中的参数。输出层(Output Layer)是 softmax 层,神经元个数是 1. 当输出 为 1 时,表示用户 u 和 物品 是相关的,也就是说,物品 可以推荐给用户 u;当输出为 0 时,表示用户 u 和 物品 i 是无关的,也就是说,物品 i 不建议推荐给用户 u.

模型二:DCF(Deep CF)

下面要介绍的这个矩阵分解模型特别简单粗暴,把用户和物品的隐向量直接当作神经网络中的参数去求解,而输出层根据余弦相似度的结果去判断用户 和物品 j 的相似度。

推荐系统概述和主流模型介绍

DCF 模型

3 FM(Factorization machine,因子分解机)

上一章中的模型一和模型二是比较标准的 MF 模型,然而它有很多缺点:首先,每遇到一个新的业务,都需要重新搭建模型,如推导出新的参数学习算法,并在学习参数过程中调节各种参数,不能很好地复用。其次,MF 模型不能很好地利用特征工程法( feature engineering)来完成学习任务

模型一:FM

一般来说做推荐 CTR(Click Through Rate)预估时最简单的思路就是将特征做线性组合(LR),传入 sigmoid 得到一个概率值,本质上这就是一个线性模型,因为 sigmoid 是单调增函数不会改变里面的线性模型的 CTR 预测顺序,因此 LR 模型效果会比较差。也就是 LR 的缺点:

  • 是一个线性模型
  • 每个特征对最终输出结果独立,需要手动特征交叉(xi*xj),比较麻烦
推荐系统概述和主流模型介绍

LR 目标函数


推荐系统概述和主流模型介绍

LR 目标函数改良版

上式是 LR 目标函数的一个简单改良版,但是还是存在问题:只有当 xi 与 xj 均不为 0 时,二阶交叉项才会生效,后面这个特征交叉项本质是和多项式核 SVM(Support Vector Machine,支持张量机)等价的。为了解决这个问题,FM 模型应运而生!

推荐系统概述和主流模型介绍

FM 目标函数

从公式来看,FM 模型就是 LR - 线性组合加上交叉项 - 特征组合。所以,从模型表达能力上来看,FM 肯定是要强于 LR 的,至少它不会比 LR 弱,当交叉项参数wij全为0的时候,整个模型就退化为普通的 LR 模型。对于有 n 个特征的模型,经过两两特征组合之后,维度自然而然就高了。

模型二:GBDT + FM

GBDT,全称 Gradient Boosting Decision Tree(梯度提升决策树),它是一个集成模型,使用多棵决策树,每棵树去拟合前一棵树的残差来得到很好的拟合效果。

由于 GBDT 是不支持高维稀疏的特征,所以设计了 GBDT + FM 的模型如图所示:

推荐系统概述和主流模型介绍

GBDT + FM 模型

4 Wide & Deep

谷歌在 2016年发表了一篇论文“Wide & Deep Learning for Recommender Systems”,业务场景是 Google Play 基于用户 query,推荐合适的 item,文章很短,只有 4 页,却产生了很大的影响。

推荐系统概述和主流模型介绍

Wide & Deep 模型

上图模型分为两部分:分别是左边的 Deep 和右边的 Wide。

模型的输入数据包含连续特征(连续值),如年龄、已安装的 APP 数量、已连接的会话数等和类别特征,如用户画像、设备类型、已安装的 APP 和用户可能感兴趣的 APP。

Wide 模型中,将用户已安装的 APP 和可能感兴趣的 APP 做叉积运算,然后连接到 softmax 层。

Deep 模型中,由于输入特征维度很大,先经过嵌入层(Embedding)降维处理,然后特征聚合,经过全联接层,最后一层也是 softmax 层。

Wide 是一个 LR(Logistic Regression)模型,它是一个线性模型,利用了交叉特征(AND),显然具备较强的记忆能力(memorization)。

而 Deep 是一个 DNN 模型,它可以通过针对稀疏特征学习的低维密集嵌入更好地推广到看不见的特征组合,因此几乎不需要人工特征工程,具备较强的泛化能力(generalization)。但是当交互信息较少时,它会过拟合(overfit),学习到一些本来不存在的关联。

5 超大规模分类问题

YouTube 在2016年发表的论文《Deep Neural Networks for YouTube Recommendations》中提出了基于深度学习的一个超大规模分类模型(Candidate Generation,类似 skip-gram,采用方法:hierarchical softmax 和 negative sample),它把召回阶段建模为一个分类模型,其目标是根据上下文 C,用户 U,从集合 V 中找到时刻 t 最可能被观看的视频 Wt

推荐系统概述和主流模型介绍

Youtube 超大规模多分类模型

u 代表用户和 context 的 embedding,v 代表 video 的 embedding。深度学习的任务是从用户观看的历史数据和当前上下文中学习用户的 embedding.

用户的观看历史是一个系数的、变长的视频id序列;

用户画像特征:如地理位置、设备、性别、年龄、登录状态等连续或离散特征都被归一化为[0,1],和 watch vector 以及 search vector 做拼接(concat);

example age:该特征表示视频被上传之后的时间;

目标函数是
watch_minutes_per_impression,而不是 ctr 的函数,主要避免 click-bait 问题

6 基于图的随机游走算法

二分图模型的代表是 Personal Rank 和 Page Rank 算法,其核心思想是:建立用户和物品之间的二分图,如果样本中某个用户关联了某个物品,那么该用户点和物品点之间建立一条边;对于图中的每个点,以一定的概率 a 停留在原地,以概率 1 - 走向与它相邻的节点,这是一个马尔可夫过程,经过多轮迭代之后,最终每个点的到达概率都会收敛到某个值。

推荐系统概述和主流模型介绍

二分图模型

总结

回过头来重新审视下推荐系统,它通常可分为两部分:召回排序

协同过滤属于召回的算法,目的是得到一个比较小的推荐列表,代表算法就是 MF 和基于神经网络的超大规模分类模型。

而从小的推荐列表中筛选出最终的推荐列表,就需要排序。排序的前提是要给某种环境下的用户和物品之间的匹配度打分,通常是 0 到 1 之间的一个小数。然后再取排名靠前的物品作为最终要推荐的物品,这一过程又叫做 CTR 预估。常见的排序模型有 LR、GBDT、FM 等。

一个好的推荐系统中一般存在多个模型,而每个模型的最佳效果需要工程师在实践中摸索调试出来的,每个基础模型又有很多改良版本,针对不同的问题效果也可能不同。所以,后续文章中,我们将继续深入研究模型细节,并深入理解模型背后的设计思想,也欢迎读者关注我的头条号“自由技艺”。



Tags:推荐系统   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
2021 年,字节跳动旗下产品总 MAU 已超过 19 亿。在以抖音、今日头条、西瓜视频等为代表的产品业务背景下,强大的推荐系统显得尤为重要。Flink 提供了非常强大的 SQL 模块和有状态计算模块。目前在字节推荐场景,实时简单...【详细内容】
2021-10-25  Tags: 推荐系统  点击:(29)  评论:(0)  加入收藏
今天,要和大家推荐一个Go 编写的开源推荐系统——Gorse。 Gorse 旨在成为一个通用的开源推荐系统,可以快速引入各种在线服务。通过将商品、用户和交互数据导入 Gors...【详细内容】
2021-08-02  Tags: 推荐系统  点击:(104)  评论:(0)  加入收藏
Hello,大家好,欢迎来到“自由技艺”的知识小馆,今天我们来聊一聊推荐算法。在广告、电商、信息流分发等业务场景中,推荐算法发挥着至关重要的作用,好的推荐算法能够把用户牢牢抓...【详细内容】
2021-06-08  Tags: 推荐系统  点击:(135)  评论:(0)  加入收藏
推荐系统自诞生之日起就是为解决海量物料如何高效分发给海量用户,一套高效的算法流程就是推荐系统的核心。如今火热的各类机器学习、深度学习、强化学习等都可以在推荐系统中...【详细内容】
2021-04-27  Tags: 推荐系统  点击:(250)  评论:(0)  加入收藏
推荐系统是一种信息过滤技术,通过从用户行为中挖掘用户兴趣偏好,为用户提供个性化的信息,减少用户的找寻时间,降低用户的决策成本,让用户更加被动地消费信息。推荐系统是随着互...【详细内容】
2021-04-09  Tags: 推荐系统  点击:(319)  评论:(0)  加入收藏
有幸参与了几个业务推荐系统搭建的全流程,本文将从实际经验出发,为大家解构如何从从零搭建推荐系统,希望跟大家能够相互交流,如有错误之处烦请指正。...【详细内容】
2020-09-30  Tags: 推荐系统  点击:(67)  评论:(0)  加入收藏
电影推荐系统 demo 界面推荐系统[1](Recommender System,RS)能够根据用户的偏好主动为用户推荐商品或项目。它通过用户的历史数据来发掘用户兴趣偏好,从而将用户可能感兴趣的物...【详细内容】
2020-09-18  Tags: 推荐系统  点击:(127)  评论:(0)  加入收藏
推荐系统介绍自从1992年施乐的科学家为了解决信息负载的问题,第一次提出协同过滤算法,个性化推荐已经经过了二十几年的发展。1998年,林登和他的同事申请了“item-to-item”协同...【详细内容】
2020-09-15  Tags: 推荐系统  点击:(177)  评论:(0)  加入收藏
在数字化革命和AI赋能的大背景下,推荐场景逻辑越来越复杂,推荐细分场景越来越丰富,对业务迭代和效果优化的效率有了更高的要求。推荐系统业务和技术在传统架构支撑下自然堆砌,变...【详细内容】
2020-09-07  Tags: 推荐系统  点击:(85)  评论:(0)  加入收藏
用户画像往往是大型网站的重要模块,基于用户画像不仅可以实现个性化推荐,还可以实现用户分群、精准推送、精准营销以及用户行为预测、商业化转化分析等,为商业决策提供数据支持...【详细内容】
2020-09-02  Tags: 推荐系统  点击:(121)  评论:(0)  加入收藏
▌简易百科推荐
为了构建高并发、高可用的系统架构,压测、容量预估必不可少,在发现系统瓶颈后,需要有针对性地扩容、优化。结合楼主的经验和知识,本文做一个简单的总结,欢迎探讨。1、QPS保障目标...【详细内容】
2021-12-27  大数据架构师    Tags:架构   点击:(3)  评论:(0)  加入收藏
前言 单片机开发中,我们往往首先接触裸机系统,然后到RTOS,那么它们的软件架构是什么?这是我们开发人员必须认真考虑的问题。在实际项目中,首先选择软件架构是非常重要的,接下来我...【详细内容】
2021-12-23  正点原子原子哥    Tags:架构   点击:(7)  评论:(0)  加入收藏
现有数据架构难以支撑现代化应用的实现。 随着云计算产业的快速崛起,带动着各行各业开始自己的基于云的业务创新和信息架构现代化,云计算的可靠性、灵活性、按需计费的高性价...【详细内容】
2021-12-22    CSDN  Tags:数据架构   点击:(10)  评论:(0)  加入收藏
▶ 企业级项目结构封装释义 如果你刚毕业,作为Java新手程序员进入一家企业,拿到代码之后,你有什么感觉呢?如果你没有听过多模块、分布式这类的概念,那么多半会傻眼。为什么一个项...【详细内容】
2021-12-20  蜗牛学苑    Tags:微服务   点击:(8)  评论:(0)  加入收藏
我是一名程序员关注我们吧,我们会多多分享技术和资源。进来的朋友,可以多了解下青锋的产品,已开源多个产品的架构版本。Thymeleaf版(开源)1、采用技术: springboot、layui、Thymel...【详细内容】
2021-12-14  青锋爱编程    Tags:后台架构   点击:(20)  评论:(0)  加入收藏
在了解连接池之前,我们需要对长、短链接建立初步认识。我们都知道,网络通信大部分都是基于TCP/IP协议,数据传输之前,双方通过“三次握手”建立连接,当数据传输完成之后,又通过“四次挥手”释放连接,以下是“三次握手”与“四...【详细内容】
2021-12-14  架构即人生    Tags:连接池   点击:(16)  评论:(0)  加入收藏
随着移动互联网技术的快速发展,在新业务、新领域、新场景的驱动下,基于传统大型机的服务部署方式,不仅难以适应快速增长的业务需求,而且持续耗费高昂的成本,从而使得各大生产厂商...【详细内容】
2021-12-08  架构驿站    Tags:分布式系统   点击:(23)  评论:(0)  加入收藏
本系列为 Netty 学习笔记,本篇介绍总结Java NIO 网络编程。Netty 作为一个异步的、事件驱动的网络应用程序框架,也是基于NIO的客户、服务器端的编程框架。其对 Java NIO 底层...【详细内容】
2021-12-07  大数据架构师    Tags:Netty   点击:(16)  评论:(0)  加入收藏
前面谈过很多关于数字化转型,云原生,微服务方面的文章。虽然自己一直做大集团的SOA集成平台咨询规划和建设项目,但是当前传统企业数字化转型,国产化和自主可控,云原生,微服务是不...【详细内容】
2021-12-06  人月聊IT    Tags:架构   点击:(23)  评论:(0)  加入收藏
微服务看似是完美的解决方案。从理论上来说,微服务提高了开发速度,而且还可以单独扩展应用的某个部分。但实际上,微服务带有一定的隐形成本。我认为,没有亲自动手构建微服务的经历,就无法真正了解其复杂性。...【详细内容】
2021-11-26  GreekDataGuy  CSDN  Tags:单体应用   点击:(35)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条