本
文
摘
要
分享嘉宾:于敬 达观数据 技术科学家
内容来源:DataFun AI Talk《达观数据个性化推荐系统实践》
出品平台:DataFunTalk
导读:本次分享将从以下四个方面介绍个性化推荐系统的构建:
智能推荐系统概述;常见推荐算法和应用场景;开发推荐系统的难点分析;达观推荐架构实践和效果优化。--
01 智能推荐系统概述
推荐系统已经成为市面上数据型产品的标准配置,如淘宝、天猫为不同用户推荐的不同首页的商品,网易云为不同用户推荐不同歌曲,今日头条依据每个用户不同兴趣推荐的相应视频、资讯等。手机应用中的“推荐”按钮,这种模式都是个性化推荐模式,除此之外在文章、视频详细页都有一个相关推荐,或者百分之多少的用户买了这种商品还买了其他商品等都是推荐系统中的一个场景,叫关联推荐。第三种就是热点推荐,比如今日头条的“热点”频道等,这就是推荐系统常见的三种形式。
推荐系统对于用户的价值而言,它与搜索有点差异,是一种沉浸式的融入体验模式设计,对于用户不明确自己需求时提供的一种个性化推荐。推荐系统可以依据用户的偏好进行不断的信息挖掘,捕捉到用户的兴趣爱好后做个性化推荐,在下拉刷新后依据你的行为实时反馈,如点击、实时收藏等行为,个性化推荐你感兴趣的东西。
个性化推荐对于企业而言,也带来了很大的价值。如电商巨头亚马逊据说有超过30%的收益来自个性化推荐引擎,而对于全球最大的视频网站YouTube,依靠推荐算法,每年视频点击增幅达50%,而目前很多推荐算法都是从YouTube公开论文或算法加以应用的。LinkedIn也提供机器学习,为公司带来数十倍的稳定增长。
个性化推荐就是一种个性化的感知,架起用户与内容间的桥梁,能让用户找到自己感兴趣的东西,同时能让物品能有更多的曝光机会。对于企业和APP来说能够增加流量、增加用户粘性。推荐系统产生主要是解决量大问题:
信息过载,就是在一个场景中信息超过你的选择时,很难找到自己感兴趣的东西;长尾问题,很多产品,如视频文章很多都是缺少曝光机会。推荐系统设计目标主要有三点:
功能:功能上要全面些,包括相关推荐、个性化推荐、热门推荐等还包括混合推荐,如一个详情页会出现无限下拉的过程,其实在这种相关推荐做了个性化推荐;效果:效果在不同领域有差异,如在直播领域关注送礼物、打赏收入等,而资讯行业较关注人均点击数量、用户停留时长等;性能:性能在不同领域也是有差异的,但是必须是快速、稳定的,不允许出现推荐位置的留白,也就是你的推荐系统可以效果不好但是不能空白,在高并发时要求性能稳定快速。其实在实际业务场景中这三者是相互影响,权衡利弊的。--
02 常见的推荐算法和应用场景
首先,从排行榜说起,这里其实还有简单的人工运营,就是人工每天筛选一部分优质信息进行展示,这种虽然千篇一律,但是排行榜很容易广为人知,主要是满足了很多用户的从众心理,这种方式技术比较简单,运维也比较方便,只需通过简单的SQL语句就能进行Ranking。这种方式存在的问题就是结果比较单一,缺乏个性化,但是这种方式确实带来了不少的收益,不少用户确实希望看到高质量和热门的东西。
再进一步优化时可以进行item内容分析,这里面包含很多信息,如文章有标题、分类、标签、作者、发布者等很多有用的信息,因此可以依据这些物品信息做一些基于内容的推荐。然而仅仅基于文本内容的推荐效果也会打折扣,因此还有其他一些信息的提取需要依靠自然语言处理技术来进行处理。与NLP部门结合,除了自身待推荐物品的信息之外,还会做文本聚类分析,包括本体、内容打上不同的主题,做内容方面的召回。当看到一篇文章或视频后,基于内容的推荐可以提高相关性,这种推荐思想比较直观。接下来更进一步基于用户模型的推荐,主要是做用户画像,如果需要做更精准的个性化推荐首先需要对用户做一个全面的用户画像,对用户打各种各样的标签,对用户模型做更加精细的刻画。
协同过滤是推荐算法中必不可少的算法。协同过滤一种是基于用户的,一种是基于物品的。基于用户的协同过滤主要是基于群体智慧,如想看电影的时候,会去咨询下朋友或者去豆瓣看看电影评价。其过程是首先找到与你兴趣相似的用户,基于相似用户喜欢什么再给你做推荐。基于物品的协同过滤就是基于用户行为过滤做协同过滤,如1000个人看了A视频或商品,同时1000个人又看了B,很明显A和B是有关联性的,将样本扩大就能找到相似物品,基于这种关联规则的挖掘就可以得到相似物品进行召回就可以做预测,基于距离的相似度计算在实际应用中有很多变形,比如基于点击行为、购买行为等,也要考虑物品的冷热不均等。
在我们实验中,一般情况下引入协同过滤比单纯基于内容推荐的推荐效果会高出一倍以上。其算法本质上是基于群体智慧,用户不断地下拉及相关行为其实是对算法的结果进行选择,机器算法能够学习到这种选择。这种方式能够挖掘潜在的相关性,如购买了手机后还会买一个手机配件,通过用户购买记录可以推荐给用户更好地选择。实现过程就是首先要生成用户的行为矩阵,然后生成用户与item关系矩阵,然后计算用户与用户的相似度、item与item相似度,对个性化推荐结果进行预测。
除了基于相似度的协同过滤,还有一种效果很好的隐语义模型。这是完全基于算法来实现的,每个用户都有自己的评分,形成用户评分矩阵,通过矩阵分解,将最初用户行为矩阵的空白处填补起来,并将预测的评分从高到低排序取topN,生成推荐结果。这种算法虽然推荐效果比较好,但实际应用并不是很多,主要问题是可解释性比较差。该算法在在实际效果调优中除了单纯的评分,还有很多其它因素考虑的,比如当用户评分的时候,会存在用户和items本身bias的影响,比如用户有的倾向于打高分有的倾向于打低分,有的物品倾向于得高分,有的物品倾向于得低分,需要将两者结合进行效果调优。
在此基础上还可以做进一步的优化,如考虑到年龄、性别等特征,做特征的交叉组合,进一步的提升效果,而对于模型求解的过程就转化成一个最优化问题。
--
03 开发推荐系统的难点分析
达观数据为众多不同的行业提供推荐服务,包括媒体、视频、直播、电商等,客户行业不同,数据量巨大,同时需要兼顾性能和效果,在此也遇到一些挑战,接下来跟大家分享下:
首先的难点就是用户信息量比较大,实际中用户场景变化也是比较大,如在做母婴电商时,开始比较关注于奶粉这一块,接着可能会买一个小推车。用户的信息是在不断变化的,尤其是在用户量信息比较大的情况下,还有用户的兴趣也是随着时间不断变化的(如欧冠开始的时候关注欧冠的新闻,西甲开始的时候关注西甲),这就对用户画像提出了更高的要求。再就是用户画像的多样性,如内容数据、好友关联数据、更丰富多样的行为数据,这就对构建用户兴趣化模型提出更高的要求。还有就是基于各种算法的召回,不同模型对用户兴趣开发的不同粒度如何去生成结果,对几十万的用户画像推荐的结果如何进行个性化的处理。
其次就是冷启动的问题,这是推荐系统中比较难的问题。主要就是一个新用户到来之后如何生成推荐结果,尤其在当下对于很多公司引入新用户的成本是非常高的,如何能让用户快速的停留下来并进行转化是需要重点关注的。还有就是对于新物品来说缺乏曝光机会,质量是参差不齐的,如在发布的众多视频中如何让好的视频能够快速呈现出来,再自动的逐渐过滤掉和筛选,这对算法来说有很大的挑战。因此冷启动是推荐系统中比较核心的问题。
然后就是推荐结果的单调性和重复性问题,比如“回声效应”,我喜欢体育然后推荐的全部是体育方面的内容。在APP首页呈现的是推荐系统推荐的东西,有可能不是你喜欢的东西,如果推荐系统不知道你喜欢什么,那么你永远看不到你喜欢的东西。
最后就是性能方面,首先数据量非常大,面对不同行业的不同客户,用户差别大,又有海量数据需要分析挖掘,并实时精准得进行个性化推荐,性能压力可想而知。第二个就是数据量变化比较快,如短视频每天产生的数据有几十万。还有一个就是服务器性能,需要几十毫秒返回推荐结果,对于算法模型也有更高要求。另外就是对于我们服务的客户,首先会有一个A/B 测试环节,进行很多PK达到客户的要求,然后才会买单,这比单纯的搭建一个推荐系统的要求要高很多。
--
04 达观推荐架构实践和效果优化
上面是系统层次结构图。
基础层,对于服务多家客户来说首先是基础运算平台,全部基于Hadoop和Spark。基础存储平台是基于HBase、MySQL、Redis、HDFS等,传输平台是DgIO,主要基于消息队列的方式。
在组件层有各种各样的组件和算法库,实现多个产品服务都可以复用。对于这些组件也有相应的研发团队进行升级和维护,如文本分类、标签、语义理解都是由文本组处理,对于搜索引擎性能、相关性等的优化升级是由搜索组完成,组件都是共同使用共同维护。
组件层有一系列小的组件,基于组件可以做一些模型层的事情,比如推荐相关的做用户画像,因为对于不同行业的用户画像有不同的标准,我们拿到的就是用户id和行为数据,刻画用户画像主要基于向量方式。物品画像主要解决流向,就是物品来了如何及时曝光,这时就需要依据其初始信息进行预估打分,对于已经曝光的物品会记录一段时间的收益情况(点击率、收藏数据等)形成物品画像做一些过滤信息。趋势分析主要是物品曝光后接下来是怎么样的,用户关系主要是基于用户行为分析的,主要做社交关系的推荐。物品关系主要是做算法方面的处理。
算法层主要是包括基于内容的推荐、矩阵分解、协同过滤、深度学习等。基于内容推荐如标签召回、热门召回、内容召回,深度学习各行业都在使用。
接下来就是一个组合层,对各种单一推荐算法的召回结果,使用机器学习的方式进行融合,以达到推荐效果的最优化。
最上面是应用层,目前提供三种推荐,同时还有推荐理由,就是可解释性。
目前个性化推荐引擎提供以下几种服务:
数据管理模块:包括数据采集、预处理;语义分析:推荐系统很多与语义理解是分不开的,主要依赖于NLP基础组件的服务,如标签的提取、分类,还包括情感分析;推荐算法:包括基于内容的、标签的、深度学习的,还有CLUB冷启动推荐算法;用户画像:会有群体画像、个体画像,服务化接口和可视化配置平台:对于大型客户而言他们有自己的产品人员、运营人员,使推荐平台不是一个黑盒子方式,提供一个配置让产品、运营参与进来干预推荐结果。任何一个推荐系统数据是第一位的,需要拿到足够丰富的数据。包括前期数据采集,再做效果调优时需要各种各样的行为数据,推荐一个东西展示出来如何实现一步步的转化需要数据采集做到非常精细准确。第二块就是语义分析,除了直播外如视频、文章等都有各种各样的文本信息、标签、内容,这都可以做很多语义方面的处理。文本处理方面主要是做NLP处理,如拿到一个文本可以做标签的召回、提取,直播领域中的弹幕、评论与主播的内容以及客户流失是有很大关系的,标签和标题都是动态变化的,分词会产生很多无用的分词,如果做简单的召回是不符合实际的,效果也很差。
用户画像主要是用于推荐服务的,主要是基于行为数据、属性等进行深入的分析挖掘,得到用户不同维度的多种信息,比如使用机器学习模型进行预测(高价值用户、价格敏感型等),同时画像信息可以做沉睡用户分析、流失用户分析等,同时企业也可以做流失预警、沉睡唤醒等服务。
冷启动问题,我们的解决方案首先是基于物品画像,主要基于物品属性来做预测,通过机器学习来进行初始打分,接着就是CLUB构建探索再利用机制,将用户划分为不同群体,当新物品来到实时提供曝光机会,会有一个收益指标来评估变化,收益预期是否达到要求,通过自动调优的方式来决定是否增大或者减少曝光。还有会通过用户来选择一些感兴趣的标签来解决冷启动,以及基于本身用户属性信息(性别、地域、年龄)来作为冷启动的依据,通过反馈不断学习提高精准度。
在优化过程中相似度计算的时候,置信度是需要考虑的,优化方法是对同类型用户计算相似度在进行聚类,还可以进行用户分类,如专家用户,专家喜好会影响大家的喜好。还有Item-based CF是对物品与物品之间先做一次聚类,先区分相似物品再对相似物品使用协同过滤,这种效果有很大提升。
Embedding处理主要是做内容多样性,不同内容可能会带来单一结果,可以用标签扩展的机制,如喜欢C罗的用户当C罗新闻过少时,可以推荐尤文图斯相关新闻或者欧冠或者梅西相关的新闻。还有就是类别扩展,当用户喜欢体育类的文章,尝试推荐科技类或者军事类的文章,这样就可以解决多样性问题。再一个是item embedding,我们用word2vec,将用行为的历史数据做一个队列,形成标签扩展得到相似的item,这主要通过深度学习实现实现相似item的召回。第三种就是特征工程,人工特征组合有很多局限,通过特征组合形成特征向量放入机器学习模型,能够很好地实现模型泛化。
模型处理分为离线、近线、在线,算法方面分为召回、粗排、精排。涉及的算法有重量级的算法(机器学习、协同过滤等),利用大数据集群,响应时间在小时级,数据结果在千级。轻量级算法主要针对于粗排,基于机器学习做ctr预估,主要是在内存里面计算,有时会和mysql进行交互,运算时间在秒级。接下来就是精排,主要是基于业务规则,运算时间在毫秒级,很多时基于内存或者redis,得到的结果在十条量级。
在排序模型方面很多基于LR模型,现在很多都是基于深度学习来做,不同模型都有不同的应用场景,并不是单一使用一种场景。LR模型利用人工特征工程,相对于深度学习的优点是可以感知的,是可以debug的。LR模型对于特征处理是线性的,利用Xgboost+LR或者GBDT+LR由线性向非线性转化,能够做到多特征组合,对推荐效果也有不同程度的提升,目前还有利用Wide&Deep,可以从特征工程中解放出来,在特征选取方面不需要做很多工作,但是在调参方面工作量比较大。
达观数据推荐系统平台提供的是推荐技术服务,通过数据上报接口的方式拿到客户数据,然后通过推荐接口服务提供给客户推荐结果,完完全全将客户解放出来。
--
05 结束语
最后心得体会就是做推荐优化时要依据用户行为出发,避免过多的客户干预。避免本末倒置;搭建一个推荐系统不难,难在如何持之以恒的提升效果;没有坏的方法,只有坏的用法,需要依据合适的场景应用模型。
今天的分享就到这里,谢谢大家。
添加小助手链接,免费领取资料:
1.免费资料领取:点击上方链接添加小助手回复【大数据合集】免费领取《大数据典藏版合集》
回复【算法合集】免费领取《互联网核心算法合集》
2.添加交流群:点击上方链接添加小助手回复【大数据交流群】加入“大数据交流群”
回复【算法交流群】加入“算法交流群”
分享嘉宾:
关于我们:
DataFun:专注于大数据、人工智能技术应用的分享与交流。发起于2017年,在北京、上海、深圳、杭州等城市举办超过100+线下和100+线上沙龙、论坛及峰会,已邀请近1000位专家和学者参与分享。注:欢迎转载,转载请留言或私信。