新闻资讯
一文带你掌握推荐系统
如题,本文的主要内容是推荐系统相关的东西,会涵盖推荐系统相关的大部分知识点,对于非技术人员应该是能基本了解推荐系统了。
本文主要包括推荐系统的相关概念、推荐系统的架构和流程、常见的推荐算法、挖掘、召回、排序、评估和总结这几部分。
概念部分会简述推荐系统相关的理论知识,架构和流程主要是介绍推荐系统的通用架构和常规的推荐流程。
算法部分主要是一些常见的推荐算法介绍,挖掘——召回——排序主要是基于推荐流程的详细展开。
评估部分指的是如何评估一个推荐系统的好坏,总结部分主要是整体内容的回顾,以及一个真实推荐系统的案例。
可以按照个人兴趣直接跳至对应的小节浏览,也可以按照顺序进行阅读,遇到看不懂的部分建议先跳过,遇到读不下去的情况,建议先Mark。
以下,开始正文部分。
一、推荐系统的相关概念
在正式展开文章之前,我们先简单的了解下推荐系统相关的理论知识。
1. 什么是推荐系统
先来看下Wiki的定义:一种信息过滤系统,用来预测用户对物品的行为和偏好。
按照字面意思理解下来,就是帮助过滤信息,预测用户对物品的行为和偏好。
在今日头条曹欢欢博士的一次分享中提到了这样一个定义:
资讯推荐系统本质上要解决用户,资讯和环境的匹配,y=F(Xi,Xu,Xc)。
感觉把这个定义延伸到其他推荐系统上也是成立的,那就是推荐系统本质上要解决用户,物品和环境的匹配问题,帮助建立用户和物品之间的连接。
回到定义本身,理论上说能实现这个功能的系统都可以称之为推荐系统。
2. 为什么要有推荐系统
先来回顾一下互联网诞生到目前为止,我们寻找信息方式的变化历程。
最早期的时候,信息是比较稀缺的,那个时候信息比较分散,寻找的效率较低,主要是人找信息。
后来信息逐渐丰富起来了,有些人或者公司专门把各种信息聚集在一个地方,人们可以通过类目导航进行查找,典型的公司是三大门户。
再后来信息量越来越大,人工添加的类目已经不能覆盖所有信息了,于是诞生了另外一种信息获取方式——搜索,典型的公司是Google、百度。
再再后来,人与信息的关系从单向的人找信息演变成了现在的双向关系,人在海量的信息中找着自己需要的东西,同时海量的信息也在找合适的人。
从这个演化过程中,我们可以看到推荐系统的出现有两个重要的前提:一个是信息过载,一个是需求不明确。
数量有限的情况下根本不需要推荐,用户自己就能浏览完所有的物品;再往后发展,数量级不大的情况下,人工干预就可以解决,当人工干预也无法解决时,这个时候就需要推荐系统了。
当用户需求比较明确的时候,用户会倾向于使用搜索,需求不太明确时,基于用户历史的一些行为和偏好给用户推荐一些东西能让用户先留下来,在逛的过程中可能就产生了一些新的诉求。
从以上的部分可以看到推荐系统是一个多方共赢的存在:
对用户而言,能够发现自己感兴趣的东西,提升用户体验;对物品而言,能够发掘长尾物品的利用效率,盘活整体资源;对平台而言,能够获取用户价值和商业价值。推荐系统典型的应用场景比如电商类的买了又买、看了又看,社交产品中你可能感兴趣的人,音乐电影中的猜你喜欢,以及一些信息流产品等。
3. 你需要推荐系统么
既然推荐系统那么好,要不在产品中加一个呗?
在决定如何加一个推荐系统之前,先确定要不要做,以及投入产出比是否合适。
首先对于不同业务模式,不同阶段的业务需要关注的侧重点是不同的,比如一个工具型产品需要推荐系统么,一个资讯App的早期需要推荐系统么。
其次推荐系统短期内的价值容易被高估,而且搭建起来也是比较费时费力费钱的。
虽然用一些简单的算法就可以有一定的效果,想进一步提升效果,则需要很大的投入。
事情都是相对而言的,具体是否需要搭建推荐系统,需结合业务模式、时间点、战略需求、团队能力等多方面因素综合考虑。
二、推荐系统的架构和流程
这部分主要是关于推荐系统整体的架构以及如何实现推荐流程的。
1. 通用推荐架构
这部分内容主要分为整体技术框架,推荐系统架构、推荐引擎架构这几部分。
它们依次为包含关系,推荐系统是整体技术框架中的一环,推荐引擎又是推荐系统的一环。
整体技术框架:
下图为推荐系统的整体技术框架:
从下往上依次为数据的生产、存储、候选集触发,融合过滤重排序。
重排序之后就是输出的推荐结果,然后再供各业务调用,比如猜你喜欢,看了又看,买了又买。
推荐系统架构:
整个推荐系统可以看作是一个加工厂,输入用户和物品数据,输出用户可能会感兴趣的物品清单,然后从物品清单中取前若干个作为推荐结果给到用户。
在这个过程中还需要做一些过滤、排序工作,输出结果的时候最好能让用户知道为什么推荐这个东西,这样用户的接受度会高一些。
比如已经产生了一个用户可能感兴趣物品的Top100,之后需要把用户已经买过的东西过滤掉。
然后再基于用户的一些历史行为进行排序,比如经常看的东西权重高一些,很久之前看的东西权重低一些,最终排一个名次,再按照排序名次取前10个展示给用户。
要实现这个效果,就需要依赖于很多推荐引擎,简单理解就是会很多个推荐人,各自负责推荐一些候选结果。
推荐引擎架构:
单个推荐引擎和整体推荐架构没什么特别大的差异,无非是推荐引擎先自己走一遍推荐流程,把输出的推荐结果作为新的输入部分,再走一遍推荐流程。
推荐引擎整体可以分为四部分,分别是用户特征、物品候选集、用户-物品匹配、过滤、融合和排序。
用户特征部分做的事情主要是将用户的行为数据(点击、浏览、购买等)和属性数据(人口属性、用户关系、兴趣爱好等)转化为对应的特征,供用户-物品匹配部分利用。
物品候选集就是需要给用户匹配的物品,通常也需要转化为对应的物品特征。
有了物品特征和用户特征之后,需要做的就是生成用户-物品的初始化推荐列表。
再之后就是基于初始推荐列表的一些处理,过滤掉一些东西,按照用户的行为反馈、物品属性和一些产品策略再进行列表顺序的调整,生成最终的推荐结果。
2. 通用推荐流程
上面主要是一些架构相关的东西,这部分主要是如何生成推荐结果。
理论上推荐流程可以分为挖掘——召回——排序这几部分。
挖掘就是上面说的用户特征和物品特征的生成部分,这部分做好了,后面的推荐结果才会有好的效果。
召回就是从原始的数据集中基于种种策略先挑选一部分物品,这部分需要尽可能全的覆盖用户需求,通常会把十万甚至百万级的候选集过滤到数百量级。
排序就是针对召回的数百个物品进行更深层次的加工,优先选择若干个结果推荐给用户,通常数量在数十级。
以上是理论上的流程,然而实际上每个部分都比较复杂,而且也不仅仅只有一个模型,通常情况下都会有N多模型,不同的模型用到的可能是不同的算法和策略。
回复列表