以下内容根据神策数据架构师房东雨在神策 2018 数据驱动大会现场,题为《推荐的场景与实践》演讲内容整理所得。

本文主要内容包括:

推荐的概念与主要场景

推荐的流程

推荐的方法

推荐在很早之前就已经开始应用,场景非常广泛。近些年推荐也在发展,我的分享主要围绕常用和前沿的推荐方法,以及不同推荐方法之间的优缺点等内容。

一、推荐的概念与主要场景

推荐本质是让人们在海量信息找到他们需要的方法,它是信息爆炸时代下的产物。推荐与搜索不同,搜索是用户带着意愿,推荐则与之相反:我(用户)不知道要什么,此时你推荐的内容出现的话,我(用户)会眼前一亮。

推荐有三个作用,包括降低信息过载、发掘长尾、提高转化率。推荐分为个性化推荐和非个性化推荐。值得强调的是,个性化推荐只是推荐一种,是千人千面,精准到个人一面;非个性化推荐包括热门推荐、编辑精选、相似推荐等。只有当个性化推荐与个性化配合,才能达到比较好的效果。

这是知乎的两个主要的推荐场景,内容类主要是以这两个类型为主流。图 1 是用户登录后看到的内容,这些内容和用户查看的历史内容相类似。图 2 中的“相关问题”,这些内容和用户在读的文章内容是有关联的,这属于非个性化推荐。

图 1 知乎登录首页,来自于知乎

图 2 知乎相关问题,来自于知乎

场景一:Feed 图 3 Feed 推荐

这类是以信息流( Feed 流)的形式进行推荐。今日头条是最典型的代表,内容足够多也足够优质,推荐很好地提升了用户的使用时长。它的特点是,Feed 流会占据 APP 的主要空间,当用户浏览到最底端的时候,下面会持续出现 Feed,当用户进来后可以持续消费内容。

场景二:猜你喜欢 图 4 猜你喜欢

这是“猜你喜欢”场景,它和 Feed 推荐最核心的区别在于:“猜你喜欢”一般是占用页面的一部分,希望实现的是用户行为的延伸操作。

场景三:相关推荐 图 5 相关推荐

以上是“相关推荐”。比如用户浏览一个手机后,下面推荐了“相关手机”,阅读一篇文章后,下面推荐了“相关文章”,看了一部电影后,下面有“相关电影”,推荐内容和我们关注的内容相关。

二、推荐的流程

推荐目的之一是要建立人与物以及物物之间的关系,推荐的流程分为几步。

第一步:确定业务场景

要根据你的产品形态、现有数据、业务目标、产品运营方向来确定你做推荐所需要的数据源。这些数据源包括:

1、要推荐物品或内容的元数据,例如 ID、关键字、描述等;

2、系统用户的基本信息,例如 ID、性别、年龄等;

用户需要唯一识别的 ID,推荐系统有一个难点是 Web 端的统一用户识别,因为在手机端我们可以相对容易的来确定用户 ID,但在 Web 端,由于存在浏览器等各种差异,会导致用户 ID 差异。在此基础上,如果有性别、年龄等信息,那么用户画像会更加清晰,更方便做个性化推荐。

3、用户对物品或者信息的偏好,包括显式的用户反馈、隐式的用户反馈、负反馈。显式的用户反馈例如用户对物品的评分,或者对物品的评论;隐式的用户反馈,例如用户购买了某物品,用户查看了某物品的信息等。负反馈,例如用户点击不喜欢, 或展现了物品信息但是用户没有点击。

负反馈是大家容易忽略的,在机器学习系统里面如果只有正例,没有负例是不能工作的。那我们如何采集负例?比如用户点击了一个叫“我不喜欢”的按钮,这是用户的负反馈。这种负反馈的缺点往往是量级不够大,所以为了保证负反馈的足够量级,神策通常采集负反馈的方式之一是,当我展示十个物品时,用户点了第三个,可能因为不太喜欢第一、第二个物品,因而没有点击,那么前两个物品就是用户的负反馈,第三个商品就是用户的正反馈。

4、访问时的上下文信息,例如时间、请求页面的其他信息等。

比如,用户在公交车上与躺床上看的视频可能是不一样的,导致差异的因素可能是时间,也可能是网络环境等;家里的电视,虽然是同一个 ID,但是爸爸、妈妈、孩子观看的内容差异很大,如何在这种情况下做推荐?我们会尝试引入时间维度,因为小朋友看电视的时间比较固定,妈妈看连续剧的时间也相对固定,引入时间维度在一定程度上能缓解这件事情,这个尝试是很重要的。

第二步:建立评价体系

建立推荐系统之前,要想好如何进行评估。评价体系的方法包括离线评估和在线评估两种方式。

离线评估包括人工评估、AUC、DCG。人工评估很好理解,比如我们评估一个用户很喜欢动画片,并进行一些推荐,我们可以直接去观察所推荐的内容中用户播放动画片的比例是否比较大;同时 AUC、DCG 也是常用的模型离线评价指标,但是这些数据指标可能会存在比较大的偏差,所以我们一般不会拿此指标来直接评价效果,而只是将它作为参照指标。在线评估的标准,包括 CTR、平均阅读时长、转化率、留存等。

要进行科学的评估,可以重点注意以下几个问题:

第一,通过 A/B Test 进行评估;大家应该非常了解 A/B Test,我要强调的是,分组的用户应该是正交的,如果分组是安卓渠道和 iOS 渠道,那这两组用户本身的行为就会存在偏差,因为两个渠道是有各自的特点的,这样做并不是科学的方式。

第二,使用对比指标而不是绝对值指标;如果你关注 CTR 指标,追求的目标并非将目标达到 5% 就 OK,我们关注的指标应该是相对值,也就是对比基线策略提升了多少。因为绝对值会被产品形态和具体业务场景影响,比如产品首页上只有这一个按钮肯定点击率很高。也就是说,在所有因子不变的情况下,只修改策略和方法后的对比指标才有意义。

第三,不管是机器学习还是推荐系统,追求的都是整体效果提升,而无法具体到优化每个个体的效果。推荐系统能优化的也是整体效果,是无法优化到个人,对个人优化时,我们一般只会处理那些 Bad Case。

第三步:选择 Feature 与 Label

这个过程包括特征选取、数据清洗、特征工程、正例与负例。

第四步:模型训练和工程化

这个过程包括数据流建立、训练和优化模型、推荐服务。

第五步:实验与迭代

综上所述,推荐系统是一个流程:海量 Item——候选集合——排序列表——推荐结果。 图 6 推荐系统流程

在推荐系统中,海量物品组成的可推荐池子中,对所有的数据进行一定的处理,才能保证在百毫秒内召回需要推荐的物品,并对物品进行排序,按照排序列表进行推荐,这个还需要配合非常多的工程上的方法。

三、推荐的方法

我们看一个优惠券推送的场景,这跟推荐场景非常一致。你可以通过用户分群来做,不过这样你可能会陷入无穷尽的规则添加中,直到失控。不过这种方式类似老中医诊脉,依赖前人经验,有点不太靠谱。 图 7 基于画像、标签的推荐(图片来源于网络)

如图所示,左边所谓的基于人口统计学推荐,右边是基于内容标签的推荐。

(一)内容标签

1、分类与来源

基于标签的推荐,要了解优质内容的标签,以及内容标签的分类,你需要花费大量的精力来整理标签的体系。同时你也需要了解标签的来源,包括运营产生标签、用户产生标签、机器自动产生标签。这三种标签方法优缺点都很明显。

运营产生标签的优点:质量较好、符合产品调性;缺点:存在运营人员自己的偏见、人力成本高、效率低。

用户产生标签的优点:数量大、节省成本、能产生意想不到的内容;缺点:需要产品形态支持、质量较差、需要进行审核。

机器自动产生标签的优点:可自动运行;缺点:技术难度大、效果不可控。

如果将三种标签方式结合后产生标签的方法有时会更有价值。我们看下面这张图,生成的第一个内容标签是“偷拍成功”,第二个是“学霸养成中”,第三个词是“完美侧颜”,这三个标签都是经过运营、用户、机器三者的结合后打的标签,这个标签经过了图像识别,然后由客户选择了运营之前写好的标签,这样能产生更有意思的结果,但是这个确实比较难,需要你们的产品能够支持这种模式。 图 8 图片与标签场景

2、内容标签推荐的优缺点

标签推荐的优点是简单易行,可以理解。缺点包括以下几个方面:

第一,受标签质量影响大。如果标签质量太差,标签粒度很粗,那就没有什么价值。

第二,受标签产生者个人偏差大。标签产生者受自身知识体系所限,所设标签和用户真实应用场景不一致。

第三,采用基于规则方法时规则量化不准确。比如优惠券为什么设为 1000 元,而不是 1500 元?这个数据是拍脑袋决定的。

第四,缺乏探索性和扩展性。你只能选择被标签化的内容,比如一部动画片中有很多舞蹈,包括街舞、宅舞等。如果没有“宅舞”这个标签,这类内容你只能将其分到其他标签中,比如“广场舞”标签中,因此内容标签推荐受限于完整的分类体系。

(二)协同过滤

协同过滤是非常有效的推荐方法,最早应用协同过滤系统的设计是解决 Xerox 公司在 Palo Alto 的研究中心资讯过载的问题。协同过滤简单来说是利用某兴趣相投、拥有共同经验之群体的喜好来推荐用户感兴趣的信息,考虑的是“共现”,基础是物以类聚、人以群分的思想。

协同过滤在推荐效果上有明显的提升,他的优点在于:

第一,利用其他人的智慧,能学习出难以表述的概念(如个人品味,文章的质量等)。利用了群体智慧来帮助构建推荐系统,比如用户看完 A 视频后,去看了 B 视频,用户这种潜意识的行为会帮你建立 AB 视频的联系。

所以例如品位是一个很难量化且无法标签化的东西,但通过协同过滤这种共现的方法,是可以学习到品味这种概念。

第二,不需要预先建立标签体系,你不需要花人力来做大量标签的标注。

第三,可以根据数据和反馈自动训练。这个模型是在不断变化的,它会使用最新的数据来去训练模型,而不需要你的运营人员反复看“我的标签体系是不是要变了,是不是要重新打标签了”。

第四,更好的规则变化,有更大的探索性扩展性。因为所有的值都是机器学习出来的,而不是去拍脑袋“拍”的,会更加客观,并且具有更大的探索和扩展性,很多你不知道的概念会被机器学习到。

同时,缺点也很明显,一是冷启动的问题,因为协同过滤应用的是人和物的关系,如果物是一个新的人或者是一个新的物品,就很难解决;二是稀疏性问题: 系统历史数据过少,系统无法进行训练,难以进行精确的模式查找匹配推荐;三是不具备可解释性。

(三)推荐系统中的深度学习

对比协同过滤,深度学习召回模型更有优势:

第一,更全面的行为表达。在模型中结合点击、收藏、搜索等多种行为,能更全面地表示用户行为偏好,而在协同过滤中是不能这么做的。

第二,可添加画像特征,可加入性别、地域等用户画像相关的特征。如果你有额外的一些标签或发生的信息,这个模型是可以兼容的,它可以把所有信息糅杂在同一模型里面去做,而在协同过滤模型里面是完全无法引入的。

第三,考虑用户的行为顺序。比如用户通常的行为顺序是,先买一个手机,然后再去买一个手机壳;买了一个汽车后可能会买个汽车坐垫。如果推荐顺序是:用户买了个手机壳后被推荐了一款手机,这样的逻辑明显是错误的。

协同过滤是不具备序列关系的学习能力的,它将所有的行为都看成一个完全平等的关系,而深度学习是可以学习顺序,在整体模型的表达的能力和调优方面都非常前沿。 图 9 神策数据某电视推荐场景

这个是神策在一个客户上做推荐的结果。一个用户刚看完《小猪佩奇》第二季第一集,如果基于协同过滤可以推出《小猪佩奇》其他集,但是如果基于深度学习召回模型是可以连续推出《小猪佩奇》第二季第二集、第三集等。

第四,组合复杂特征。神经网络可以进行更复杂的特征组合,挖掘更深层次的关联关系。

(四)排序方法

在排序方面,这些年有很大的发展。随着数据量增多以及业务模式的复杂性,我们可以选择更复杂的模型来解决问题。当然这需要推荐的点击数据要和展现数据实现比较好的整合,这也是要重视展现数据的主要原因。 图 10 神策数据推荐排序场景

这里是我们在做排序数据的时候,Level 列的数字是 01010,意思就是有没有点击,所有点击的展现全都写在一张表里,如此才可以训练排序模型。

四、综述

综上所述,推荐是一个系统,不是一个简简单单的模型,推荐包含了大量的数据收集和业务理解的工作,同时还需要对应的全套工程架构的支持。最后有几句话想和大家分享下:

第一句是“数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已”。如果你的数据根基没有做好,那所有的工作都是徒劳的。

第二句是“世界上最遥远的距离,是我们的算法一样, 但训练数据不同”。每家公司的模型搭建都大同小异,但是模型落地在业务的时候,真正差距在于你的数据是不是对的,是不是干净,是不是及时的,这才是决定整个推荐系统最终效果的重要因素。如果你不能从数据治理开始,空中楼阁般的搭了一套算法框架的话,你会发现你的产品落地还是很远。

总之,推荐的关键是数据,数据是一切算法的根基, 是一切迭代的依据。

更多干货和案例,可以关注“神策数据”和“用户行为洞察研究院”公众号了解~