写点什么

“想你所想”之个性化推荐:实践与优化

2017 年 6 月 01 日

本文是大数据杂谈 5 月 5 日群分享内容整理。大家晚上好,非常感谢 infoq 提供的这次机会,分享下达观数据在过去的一年多时间在个性化推荐研发及效果优化方面的一些经验。先自我介绍下,我是达观数据联合创始人于敬,目前主要负责个性化推荐引擎的研发、架构设计和效果优化等工作。达观数据致力于为客户开发大数据系统,提升客户的经营业绩,已成功服务数百家著名企业。我们公司也获得了著名投资机构软银赛富、真格基金、方广资本等注资,是上海市大数据产业联盟和浦东软件园的杰出成员。达观数据入选 XTecher 中国人工智能企业 50 强。

下面正式开始今天的分享,其实个性化推荐对我们并不陌生,几乎到路随处可见的地步。

在当今 DT 时代,每天都在产生着海量的数据,移动互联网的兴起更是让我们体验到获取信息是如此的简单和方便。

同时,更多的选择也带来更多的困扰,面对层出不穷的信息和服务带来的困扰,使得个性推荐迅速崛起,并且大放异彩,在金融、电商、视频、资讯、直播、招聘、旅游等各个领域都能看到推荐系统的存在。

另外,想迅速了解并掌握推荐系统的同学,可以购买极客时间出品的『推荐系统三十六式』专栏,作者在推荐系统方面有 8 年的经验,为推荐系统学习者架构起整体的知识脉络,并在此基础上补充实践案例与经验,力图解决系统起步阶段 80% 的问题。

达观数据凭借多年在推荐系统方面的技术积累和优质的大数据服务,已经有数百家公司接入达观推荐系统,覆盖多个行业,实现企业经营业绩的大幅提升。本次分享结合达观数据个性化推荐引擎在各个行业的从业经验,围绕以下内容展开:

  1. 个性化推荐应用场景和价值
  2. 用户画像和个性化推荐算法
  3. 推荐系统优化方法

个性化推荐应用场景和价值

首先,我们先来说说个性化推荐应用场景和价值。

个性化推荐产生的初衷是为了解决信息过载和物品长尾的问题。信息过载是在信息时代信息过于丰富的一种现象,也就是人所接受的信息超过了个人所能接受、处理或有效利用的范围,导致的一种无所适从的问题。

同时,如此多样丰富的信息中,大部分是属于冷门而没有曝光的机会。对于处于移动互联网的今天,这些问题尤其突出。

对用户而言,每天面对海量的资讯、商品、视频、音乐等各种服务时,如何快速找到自己感兴趣的内容确实是件耗费时间和精力的事情,尤其是在没有明确意图的情况下。

而对于企业而言,手握海量资源,而只有一小部分曝光在用户面前,大部分都石沉大海,资源浪费的同时,还留不住用户。在当前各种产品同质化的今天,如何讨好并留住用户,挖掘数据中存在的价值,对企业也是一种极大的挑战。

越来越多的事实证明,个性化推荐系统是解决上述问题的有效工具。

美国最大的视频网站 YouTube 曾做过实验比较个性化推荐和热门视频的点击率,结果显示个性化推荐的点击率是后者的两倍。

美国著名视频网站 Netflix 曾举办过全球的推荐系统比赛,悬赏 100 万美元,希望参赛选手能将其推荐算法的预测准确度提升至少 10%。

号称“推荐系统之王”的电子商务网站亚马逊曾宣称,亚马逊有 35% 的销售来自于推荐系统。其最大优势就在于个性化推荐系统,该系统让每个用户都能有一个属于自己的在线商店,并且在商店中能招到自己最感兴趣的商品。

日常生活当中,当我们打开各种各样的 app 和网页,首先进入视野的很多都是个性化推荐。对于企业而言,推荐系统可以帮助让更多的资源得到曝光,也改善了用户体验、增加了用户的停留市场和粘性,最终也会提高转化。

最后总结下,推荐系统的核心价值主要包括:

  1. 描述物品的特点,并与用户的个性化偏好进行匹配,帮用户便捷的筛选出感兴趣的内容
  2. 进行有效的信息过滤以解决用户的过载问题,面对陌生领域时提供参考意见
  3. 根据用户反馈迅速捕捉用户的兴趣,以及兴趣的变化,需求不明确时,作用户的“贴心助手”
  4. 选择合适的场景、时机、表现方式进行推荐,满足用户的好奇心

用户画像和个性化推荐算法

接下来,我们说说个性化推荐的两个关键点:用户画像和个性化推荐算法。

在开始这个话题之前,先来聊聊目前普遍存在的两种个性化推荐结果生成方法。一是依靠人工编辑进行推荐,这种方式不仅需要大量的人力成本,费时费力,最终推荐出来的结果是千篇一律,并没有考虑到用户个性化的差异,也没有考虑用户反馈。

二是通过一定逻辑生成的热门榜单。这种方式极易导致马太效应,一些热门物品会会一直霸占榜单,也容易造成刷单,毕竟占据着更好的流量入口,需要引入反作弊机制才能保证推荐结果的公平公正。

高质量的个性化推荐系统其实包括三大部分:

  1. 基于海量用户行为数据,挖掘多种多样的高质量推荐候选集
  2. 对用户实时兴趣进行精准定位,秒级更新结果满足个性化需求
  3. 基于高性能分布式计算框架,快速迭代算法生成多维度用户画像进行千人千面的推荐

个性化推荐精准性的非常至关重要的影响因素是用户画像的生成。

用户画像通过对海量的用户行为数据进行深入的分析和挖掘,从多个维度来描述用户的基础属性、标签及兴趣点等,清晰并且准确地勾勒出用户的轮廓概貌。这些数据帮助应用方更好了解用户行为路径,明确用户流失情况和原因,为应用方的产品功能优化决策提供可靠参考依据。

下图是一个小说类客户的用户画像生成流程。

通过多种方式收集到用户数据,包括用户各种行为数据,结合书籍、用户、作者等基础数据,首先进行数据预处理和用户归一化处理,然后进行数据统计与特征抽取,最后基于机器学习中的分类、聚类等方法进行智能挖掘分析,形成了用户各个维度的属性信息。

有了用户画像之后,接下来就交给个性化推荐算法了,这里主要聊下基于内容的推荐和血统过滤。

1)基于内容的推荐。

这个算法适合于待推荐物品带有丰富语义信息的场景,如标题、标签、类别、作者等信息。但是想直播这个行业,直播内容是和主播当前的播放状态紧密相关的,而且内容变化也较频繁,就不适宜使用此算法。在资讯媒体、视频等行业效果还是客观的。

基于内容的推荐主要过程是将推荐物品的信息特征和待推荐对象的特征相匹配的过程,从而得到待推荐的物品集合。匹配算法很多是借鉴了信息检索领域中的技术,如 K 最近邻 KNN 和 Rocchio 的相关性反馈方法。主要是以含有相同标签的其它物品、同类别的其它物品等形式出现。

这种方法能保证推荐内容的相关性,并且根据内容特征可以解释推荐结果。缺点是由于内容高度匹配,导致推荐结果的惊喜度较差,另外用户的反馈数据也没有使用。

2)协同过滤算法

主要思想是基于群体智慧,利用已有大量用户群过去行为数据来预测当前用户最可能感兴趣的东西。这种方法克服了基于内容方法的一些弊端,最重要的是可以挖掘物品之间隐含的相关性,推荐一些内容上差异较大但又是用户感兴趣的物品。

对于基于用户的协同过滤,首先计算用户之间的距离,得到与当前用户距离最近的 N 个用户,将这些用户喜欢的 item 进行合并和评分预测,得到推荐结果。基于物品的协同过滤则是计算物品间的距离进行评分预测得到推荐结果

基于领域的方法重点关注物品之间的关系或者用户之间的关系,基于物品的方法是根据用户对和他感兴趣的物品相似的物品评分,来对该用户的偏好物品建立模型。

隐语义模型采用的是另外一种方法,把物品和用户映射到相同的隐语义空间。这个空间试图通过描述物品和用户两种实体在潜在因子上的特征来解释评分,而这些因子是根据用户的反馈自动判断出来的。

用隐语义模型来进行协同过滤的目标是揭示隐藏的特征,这些特征能解释观测到的评分。该模型包括 pLSA(Probability Latent Semantic Analysis)模型、神经网络模型、LDA(Latent Dirichlet Allocation)模型,以及由用户 - 物品评分矩阵的因子分解推导出的模型(也叫基于 SVD 的模型,Singular Value Decomposition)。

计算用户 - 用户距离和物品 - 物品距离有很多方法,在实际业务中会有很多的变形,比如对热门物品的降权,不然会引入一些噪声数据,因为相对一些不那么热门的物品更能表征用户的偏好信息

由于矩阵因子分解技术在线上业务的准确性和稳定性的突出表现,已经成为协同过滤算法的首选。

首先,对于 user-item 关系矩阵,也叫评分矩阵,表示用户对每个 item 的评分,比如 1 表示 1 分,5 表示 5 分,分数越高就表示越喜欢。

通过用户的操作行为数据我们就得了这样一个矩阵,通过矩阵分解的方式就得到了两个矩阵,分别是物品 - 潜在因子矩阵和潜在因子 - 用户矩阵,我们的目标是预测用户对未打分的物品的喜好程度,也就是图中除了黄色格子之外的数据。

对于未知的评分,可以使用分解后两个矩阵相乘,就得到图中空白处的评分数据,进行排序和过滤,最终就可以得到用户对物品的喜好程度,也就得到最终的推荐结果。

原始的 SVD 并没有考虑到用户和物品自身的差异(bias),进行升级,我们来看看 SVD++ 是怎么的形式。

相对于之前的方式这里引入了 b ui,也就是用户本身的 bias 和物品本身的 bias。对于用户的 bias,有的用户倾向于打高分,有的倾向于打低分。物品的 bias,比如有的电影出自于大导演、大公司等倾向于得到高分,有的比较小众容易得低分。在计算中,这些 bias 信息都需要包含进来

通过对算法的升级,就可以使用各种各样的用户、物品的 bias 信息,包括用户和物品的 profile,同时各种属性也可以进行组合,如用户性别、年龄信息。

最终的模型求解问题就转化为求解最优化问题,这个最小二乘法问题可以通过随机梯度下降算法有效地解决。

这里是达观数据推荐系统的架构图,从基础层的数据传输、存储和运算,到模型层的用户画像、物品画像等的挖掘生成,然后到多种推荐算法的计算得到部分初选的推荐候选集,最后交由融合层的机器学习模型进行重排序,生成最终的推荐结果返回给用户。整个流程在数十家客户上都取得了卓越的推荐效果,覆盖资讯、视频、直播、电商等多个行业。

接下来,聊聊个性化推荐的优化,当然推荐系统的优化方法有很多种,今天挑选了三个,都和当前火热的深度学习有或多或少的关系,分别是用于性能和效果的优化。

推荐系统优化方法

达观数据接入了数百家客户,数据量的规模之大是可想而知,对于性能的要求非常高,尤其在高并发的推荐场景中。基于硬件成本和性能的综合考虑,达观个性化推荐引擎除了使用内存和 redis 作为缓存之外,也引入了 LevelDB。

LevelDB 是 Google 的两位大神 Jeff Dean 和 Sanjay Ghemawat 发起的开源项目,简而言之,LevelDb 是能够处理十亿级别规模 Key-Value 型数据持久性存储的 C++ 程序库。LevelDb 是一个持久化存储的 KV 系统,和 Redis 这种内存型的 KV 系统不同,LevelDb 不会像 Redis 一样狂吃内存,而是将大部分数据存储到磁盘上。

LevelDB 在随机写,顺序读 / 写方面具有很高的性能,但是随机读的性能很一般。换句话说,LevelDB 很适合应用在查询较少,而写很多的场景。

个性化推荐引擎需要尽可能快的响应用户的每一次操作,以适应用户短期兴趣的变化,进而提高推荐效果的精准性。各种推荐算法生成候选集、多算法融合、返回结果的时候,牵涉到频繁的读取操作。

在高并发量的场景下,当内存或者 redis 不足以完全支撑线上业务时,使用 LevelDB 将会对性能有不错的提升。毕竟 LevelDb 在写的时候对内存要求不高,读的时候则根据性能要求的不同需要对应的内存。

谈到效果优化,业界都达成了一个共识:case-by-case 查看推荐结果,也就是说需要具体问题具体分析。只有通过这种方式发现问题,才能更好地优化推荐效果。

下面分析几个常见的优化方法:

1)推荐结果多样化的优化。

在实际的推荐场景中,抓住了用户的喜好,但推荐出来满屏的“相似”结果会带来极差的用户体验。如何在保证用户兴趣的前提下又能让推荐结果的多样性更好呢?

物品信息中很重要的一个特征是标签。好的推荐系统不仅体现在精准性,还有多样性和惊喜度方面的要求。对物品信息进行深层度的挖掘分析,进而对标签进行拓展,也是一种实现上述要求行之有效的方法。

其实使用 word2vec 就可以解决这类问题。

Google 于 2013 年开源推出了一个用于获取 word vector 的工具包 word2vec,它包含了对两种模型的训练,如下图。在训练每种模型的时候又分 HS 和 NEG 两种方法。(具体的数学原理可以参考相关论文)

在 Word2Vec 的训练过程中,每个 word vectors 都被要求为相邻上下文中的 word 的出现作预测,所以即使随机初始化 Word vectors,但是这些 vectors 最终仍然能通过预测行为捕获到 word 之间的语义关系,从而训练到较好的 word vectors。

这是仅有一个词的 CBOW 模型。Word2Vec 尽量让具有相同上下文的 word 的向量相似,从而获得较好的 vector representation 的相似性。这种相似性有时候是线性的,临近的结果会与相似,即 Word2vec 可以学习到词与词之间语义上的联系。

另外,由于 Word2Vec 采用了非常多的方法简化网络结构,简化训练流程,导致 Word2Vec 可以很轻易的训练超大的训练集。一个优化后的单机实现版的 Word2Vec 算法可以在一天时间内训练 100 bililion words。

word2vec 可以把对文本内容的处理简化为向量空间中的向量运算,计算出向量空间上的相似度,来表示文本语义上的相似度。基于得到的向量,也就得到了可以扩展的词。

从图中可以看出,基于 word2vec 训练好的模型,输入“美食”,返回了相似程度最高的十个词及相似权重,从结果上看都是和美食相关的。基于这些相似词召回相关推荐结果,不仅可以保证语义上的相关性,也可以大大改善推荐结果的多样性。

2)item embedding

20 16 年 Oren Barkan 以及 Noam Koenigstein 借鉴 word2vec 的思想,提出 item2vec,通过浅层的神经网络结合 SGNS(skip-gram with negative sampling) 训练之后,将 item 映射到固定维度的向量空间中,通过向量的运算来衡量 item 之间的相似性。

词的上下文即为邻近词的序列,很容易想到,词的序列其实等价于一系列连续操作的 item 序列,因此,训练语料只需将句子改为连续操作的 item 序列即可,item 间的共现为正样本,并按照 item 的频率分布进行负样本采样。

Oren Barkan and Noam Koenigstein 以 SVD 作为 baseline,SVD 的隐类以及 item2vec 的维度都取 40,用 Microsoft Xbox Music service 收集的 user-artists 数据集,对结果进行聚类,同一个颜色的节点表示相同类型的音乐人。

图 a 是 item2vec 的聚合效果,图 b 是 SVD 分解的聚合效果,很显然 item2vec 的聚合效果更胜一筹。

由于时间有限,以上就是这次分享的全部内容,感谢大家的参与,有兴趣的话后续继续交流,谢谢。

答疑环节

Q1:对于新用户如何进行推荐,有哪些方式方法?

于敬:冷启动方法有很多,比如主动采集的方法,比如让用户主动填写喜好信息或者选择兴趣标签,也可以提供一些物品展示,让用户打分。也可以有一些被动的方法,比如推荐内容保持尽可能多的多样性,来探测用户兴趣。用户一旦和系统交互,就可以逐渐把握用户兴趣,进行更精准的推荐。

Q2:推荐系统中 推荐算法的分布式实现 算法实时化的实现?

于敬:目前我们公司是单机、并行共存的方法,比如基于 spark mllib 里的算法。也有基于单机的深度学习算法。

Q3:用户行为日志与用户信息库在数据清洗阶段融合推荐阶段怎样优化跨系统和计算量大的问题?

于敬:跨系统的数据在采集前,首先需要设计好后续处理的各种场景。比如大关数据现在的用户行为表接口,就可以是和各种终端、各个行业的数据。如直播、资讯、视频等。会有个通过适配接口进行处理。 关于大数据量的问题,可以综合考虑产出和成本的问题,可以在 hadoop 集群上处理,也前期可以适当对数据进行抽样,在优化推荐效果的基础上,不断放大数据量。

Q4:于老师,您好!做推荐系统之前,应做好用户画像,用户画像数据除了人口属性之外,其他如兴趣爱好,社交关系这两部分数据,除了内部系统产生的相关数据之外,有没有采集外部数据?如果有,外部数据哪里来?这些外部数据主要做何处理?会做情感分析吧(这涉及到用户兴趣爱好,性格方面的标签),采用哪些算法?还涉及到图像处理,又采用哪些算法?就问这么多吧。

于敬:目前达观也在通过一些渠道采集外部数据,这些外部数据主要用于用户兴趣偏好的分析,以进行更加精准的推荐。由于用户兴趣的变化实际上是不断变化的,所以用户的实时行为数据往往是比较重要的。图像处理目前是不做的,但我们有合作的第三方公司。

Q5:个性化推荐经常遇到已购买推荐被吐槽的情况,但是从点击率预估来说,确实不进行过滤效果会更好,如何解决和避免刚刚买的商品\品类被推荐的情况呢?

于敬:在实际业务场景中,推荐效果的衡量往往是各方面的一个这种。对于推荐结果的过滤,一方面可以对推荐结果进行后处理,采取降权等方法。也可以基于时间窗口的过滤处理。

Q6:老师您好,请问深度学习哪些算法能与推荐系统结合?

于敬:目前我们公司在用的有 word2vec、item2vec、DNN 等深度学习相关的。

Q7:对推荐结果 reranking 阶段,是选用回归模型,还是分类模型。

于敬:目前我们公司用到的模型有 LR、SVM、RBM、GBDT 等,会根据不同行业不同的业务场景进行使用。

Q8:达观作为第三方数据服务公司,对于公司来讲与雇佣一批算法工程师团队来做有什么优势,希望从模型以及数据隐私来讲讲。

于敬:推荐系统技术层面是很多技术如 NLP、机器学习、数据挖掘等的复杂融合,需要慢慢的技术积累,好的推荐系统也是慢慢打磨出来的。雇佣一批算法工程师本身人力成本是一方面,主要是技术实力还是需要长时间效果评估的,这本身对于公司的快速发展就是一个极大成本。数据隐私上来说,提供给第三方之前可以进行脱敏处理的,当然还有很多其他方法可以保证数据隐私。

作者介绍

于敬,达观数据联合创始人,首席数据官联盟成员,中国计算机学会(CCF)会员,第 23 届 ACM CIKM Competition 竞赛国际冠军,同济大学计算机应用技术专业硕士,达观数据个性化推荐组总负责人,工作包括推荐系统的架构设计和开发、推荐效果优化等。承担公司重大紧急项目的架构设计和个性化推荐研发管理工作,所开发的个性化推荐系统曾创造了上线后效果提升 300% 的记录。先后在盛大创新院和盛大文学数据中心从事用户行为建模、个性化推荐、大数据处理、数据挖掘和分析、文本智能审核、反作弊和广告投放引擎相关工作,对智能推荐、数据挖掘、大数据技术和广告引擎有较深入的理解和多年实践经验。


感谢杜小芳对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017 年 6 月 01 日 17:293168

评论

发布
暂无评论
发现更多内容

2020.10.26-2020.11.01 学习总结

icydolphin

极客大学架构师训练营

week2-作业1

Mr_No爱学习

第六周作业总结

Geek_ce484f

极客大学架构师训练营

第六周作业2

Yangjing

极客大学架构师训练营

极客时间架构 1 期:第 6 周 技术选型(二) - 命题作业

Null

2周 总结

水浴清风

Architecture Phase1 Week6:Summarize

phylony-lu

极客大学架构师训练营

架构师训练营第六周学习总结

Gosling

极客大学架构师训练营

架构师训练营第六周作业

四夕晖

【第六周】课后作业

云龙

架构师 01 期,第六周课后作业

子文

架构师训练营第六周作业

xs-geek

极客大学架构师训练营

第二周-学习总结

ray-arch

极客大学架构师训练营

第二周作业

Hjh

week2-作业

Mr_No爱学习

周练习 6

何毅曦

LeetCode题解:90. 子集 II,回溯+哈希表去重,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

架构师训练营 Week6 - 课后作业

极客大学架构师训练营

第六周作业

Geek_ce484f

极客大学架构师训练营

架构师训练营第二期 Week 2 作业

bigxiang

极客大学架构师训练营

极客时间 - 架构训练营 第一周总结 - 设计原则

思考 - 从传统雪崩到K8S

东风微鸣

k8s

第六周作业

Meow

第六周作业1

Yangjing

极客大学架构师训练营

极客时间架构 1 期:第6周 技术选型(二) - 学习总结

Null

打工人必会算法—快速幂算法讲解

bigsai

架构师课程第二周作业

文江

学习笔记:架构师训练营-第六周

四夕晖

Architecture Phase1 Week6:HomeWork

phylony-lu

极客大学架构师训练营

第2周作业

Rocky·Chen

学习总结 -week2

Mr_No爱学习

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

“想你所想”之个性化推荐:实践与优化-InfoQ