最近几个月有很多人咨询作者怎么从零开始搭建工业级推荐系统,有做音视频的、有做新闻资讯的、有做在线教育的,不一而足。大家最大的困惑是不知道怎么下手,也不知道用什么算法合适,对为什么做推荐以及对推荐算法价值的预期也没有明确的想法和概念。总之,对产品是否需要搭建一套推荐系统、需要注意什么都比较迷茫,更不知道怎么为产品快速搭建一套有效的、具备商业价值的推荐系统。
随着大数据、云计算和AI技术的发展,目前有很多云服务厂商(如阿里云、百度云等)和一些做toB生意的AI创业公司(如神策数据等)都提供了推荐系统的SAAS或者PAAS服务。部分传统的外包公司在大数据与人工智能大背景下,也拓展了业务范围,开始提供搭建推荐系统方面的外包服务。因此,我们构建推荐系统就有三种主要方法:
自建推荐系统最大的优势是整个系统的建设掌握在自己手上,可控性好,方便业务调整和快速迭代,另外算法可以更贴合自己产品的特质做定制化开发,部分开发资源也可以跟后端团队共享。自建最大的问题是需要自己公司招聘推荐系统相关专业人员,因此有更多的固定人力成本。目前对推荐系统比较精通的人才是非常少的,价格也相对很高,小的创业公司也很难吸引优秀的人才,因此组建推荐团队难度高。
将公司推荐业务范围和目标定义好,外包给第三方团队来开发是另外一个可行的方案。这种方案的优点是相对轻资产,不需要自己搭建团队。但是最大的问题是,第三方可能对你的业务不熟悉,理解不够深刻,责任心也没那么强,无法做出非常贴合业务及产品特色的推荐系统。外包代码一般注释少,代码结构不清晰,因此后续的维护、迭代等等也是大问题。更大的问题是,外包团队离职率高,等你的系统需要优化了,可能对接的是另外一批人,这批人根本不熟悉原来的系统,怎么能优化得好呢?
利用第三方云服务公司或者toB的AI创业公司提供的成熟的推荐服务也是一个不错的选择。该方案最大的优势是接入流程相对完善、标准化,可以快速构建一套可用的推荐服务。云服务最大的问题是采用的推荐算法是行业通用的解决方案,模型、数据无法完美匹配自己公司的业务,而我们只能适配云服务厂商提供的规范,比较死板,因此算法效果也不一定有他们鼓吹的那么好。云计算一般提供标准化服务,因此,很难、甚至无法对推荐系统进行个性化的调整和裁剪。有些toB创业公司提供PAAS的私有化部署,甚至将代码给你,可以进行二次开发。这种方式可控性会更好,也可以在代码基础上进行微调,更好适应公司当前业务。由于要在原来的框架下进行修改或者调整,因此修改和调整是有限的。另外,对第三方框架的熟悉度不高,二次开发难度也比较大,做不到自建那样的灵活性。云服务厂商提供的产品和服务如果出现问题,需要提工单,反馈可能不会及时,特别对于创业公司这样的小客户,在云服务厂商那里的优先级是比较低的,响应度自然不会高。
关于怎么搭建推荐系统,下面给出作者的建议。如果公司将推荐系统作为产品的核心功能点,甚至是公司的核心竞争力的话,那么一定要自建推荐系统,这是自己可以完全控制的,核心竞争力一定要掌握在自己手上。如果是期望产品具备推荐的能力,没有将所有希望奇托于推荐系统,推荐只是作为人工运营的一个补充,可以采用云服务的方式。作者最不建议的是外包的方式,风险太大。
到底采用哪种方式,还与公司所处阶段、产品定位、公司发展目标、当前的人力、财力、资源等因素有关,所以需要事先评估清楚再决策,这种决策一定是公司高层的事情,只有老板想清楚了,自上而下达成一致,目标明确,才能做好推荐系统。当然,也不是一种方式一成不变,先采用云服务的方式,等招聘到合适的推荐系统人才或者产品更稳定了再自己搭建也是可行的方案。
产品的生命周期一般会经历起步期、成长期、成熟期、衰退期、消亡期等五个阶段。一般建议在产品的起步阶段和成长阶段来构建推荐系统,这样可以更早地利用AI技术的红利,发挥推荐算法的优势,提升内容的分发效率,提高用户的参与度和粘性,最终让产品更快地成长、获得更多的用户。
越早想清楚推荐的价值,趁早做,可以尽快验证推荐对产品的贡献,及时决策调整,所谓船小好调头。早做的另一个好处是,可以更好地巩固推荐系统在产品中的主导地位。如果在后期做推荐,整个产品运营体系都很成熟了,很难让推荐在产品中占得一席之地,因为不同模块运营人员之间会存在“权力斗争”,大家互相争夺地盘,抢核心位置的运营权,其结果可能会让推荐系统难以落地,最终变得可有可与,无法发挥应有的价值。
推荐系统主要有排行榜推荐、相似推荐、个性化推荐、流式推荐等几种主流的核心产品形态。那么我们的产品应该选择哪几类推荐系统产品形态呢?
一般来说个性化推荐与相似推荐是两类最重要的推荐产品形态,如果你打算在你的产品中引入推荐技术的话,相似推荐和个性化推荐是强烈建议采用的。这是因为这两个推荐形态是用户触点多的路径(所谓用户触点多,就是用户大概率必经的路径),这样用户就可以更方便、更频繁地接触到推荐了,才有机会让推荐系统真正发挥价值。
在产品中位置是非常重要的,要做好推荐,必须放到核心位置(不一定是一开始就放到核心位置,可以通过AB测试评估,当效果足够好了就有资格这样放了)。古语说的“酒香不怕巷子深”这句真理在当今的产品中是不适用的,因为酒是有气味的,不能看到也能闻到,而推荐产品只有用户看到了才知道它的存在。
相似推荐一般部署在详情页中,通过不同的特征维度构建推荐算法,在标的物的详情页中关联一组有相关关系的标的物作为推荐列表。详情页是任何一个标的物都有的,所以是一个非常核心的用户触点多的位置。
而个性化推荐可以安置在首页等核心位置为用户提供个性化的推荐服务(个性化推荐的标的物数量、排放位置是可以根据场景、产品阶段做动态调整的)。个性化推荐可以做成实时推荐的形式,即所谓的信息流推荐,这样可以给用户实时反馈,让用户获得所见即所得的效果,从而提升用户体验,同时让更多的标的物曝光(实时推荐提升了标的物的流转效率,当然会让更多的标的物曝光),这对平台方及标的物提供方都是非常有价值的,实时个性化推荐也是未来的发展趋势。像新闻资讯、短视频等“快消类”产品(用户“消费”完标的物的时间短,这类产品一般会占据用户的碎片化时间)是非常适合做实时个性化推荐的,就连淘宝、天猫的首页也切换到了信息流推荐。首页是用户打开产品就能第一个看的的页面,所以一定是用户触点多的核心位置。
排行榜推荐是一类非个性化推荐,可以根据最新、最热、购买量、播放量等统计维度来构建排行榜,实际计算非常简单。由于人类普遍具有从众效应,排行榜类推荐实际效果还是可以的。即使我们的产品不提供排行榜这类推荐形态,排行榜推荐一般也可以作为个性化推荐的默认推荐(当个性化推荐数量不足时用排行榜填充,或者当个性化推荐接口出问题时,用排行榜推荐替代)。
从零开始搭建推荐系统,个人建议尽量快速让新的推荐业务上线,再逐步优化,提升算法效果。在如今竞争非常激烈的大环境下,快是第一位的。不要想着一开始就做出一个非常完美的、效果非常好的推荐系统,期望系统一上线就可以大大提升标的物的分发与转化,这种想法是不切实际的。在没有上线之前,我们只能根据离线评估或者个人经验来判断算法是否有效,个人经验判断往往是有误的,另外离线评估效果好的算法在真实业务场景中不一定就能提升商业化指标,也就是说离线评估和在线评估(商业化指标)可能不是正相关的。
对于早期阶段的产品,由于用户很少,数据量不多,计算成本不大,我们甚至可以利用单台服务器、单进程部署一个推荐系统,而不用考虑后面当用户多了之后的分布式计算,这样算法可以先快速上线。当用户足够多,单机算不过来了可以再考虑利用Spark等分布式计算平台重构现有业务逻辑。
下面我们根据产品所在不同阶段来说明搭建什么类型的推荐系统及怎么搭建,给大家提供一份切实可行的参考指南。
在产品的起步阶段,由于用户规模小,用户行为数据少,没有足够多的行为数据来训练协同过滤推荐算法,这时比较适合基于内容的推荐算法,该类方法可以有效地缓解冷启动问题。基于内容的推荐算法也是比较简单的一类算法,开发简单、容易部署上线。我们下面根据不同的产品形态来说说怎么搭建基于内容的推荐算法。
长视频
a 基于标签
b 基于结构化的metadata信息
短视频
对于成熟阶段的产品,用户规模会比较大,也有足够多的行为数据,这时可供我们选择的算法会非常多,除了上面介绍的基于内容的推荐算法,常用的协同过滤算法,如item-based协同过滤、矩阵分解、分解机等都是不错的选择,有资源、有条件的公司还可以选择深度学习等更复杂的模型。一般来说,协同过滤算法的效果好于基于内容的推荐算法,建议有条件可以在这一阶段适当采用协同过滤相关算法。具体怎么实施协同过滤算法,可以参考《协同过滤推荐算法》、《矩阵分解推荐算法》、《因子分解机》、《嵌入方法在推荐系统中的应用》以及《深度学习在推荐系统中的应用》这几篇文章。
上面我们只列举了新闻资讯、视频类、电商类的产品在不同阶段怎么做推荐,对于其他产品需要根据产品特性、已有的数据形式等采用类似的策略,这里不再赘述。
做任何一件事情都是需要资源投入的,特别是做好一件事情更需要投入足够多的时间和精力,对于构建推荐系统也不例外。在本节我们来讲讲从零开始构工业级建推荐系统需要哪些资源投入,让还没有太多相关经验、但是想了解怎么从零构建推荐系统的读者有一个初步认知,并且作者会基于自己多年经验给出一些建议。
对于推荐系统的资源投入主要有两类,一类是人力投入,一类是计算资源(如服务器)资源。下面分别对这两类投入进行细致分析。
推荐系统的人力投入主要是从数据收集到推荐算法上线提供推荐服务整个过程中的人力投入。包括日志打点、数据收集、数据存储、特征工程、模型训练、推断预测、前端接口开发、UI交互、产品设计、项目跟踪等等。日志打点、数据收集、数据存储这些可以复用大数据相关技术栈和人力(一般互联网公司都会有相关的大数据分析团队),前端推荐接口开发可以复用后端人力,UI交互、产品设计、项目管理这些也是可以复用的资源(当产品规模足够大,公司会专门招聘算法类产品经理)。所以构建推荐系统最核心的人力资源就是特征工程、模型训练、模型推断预测这几个算法核心工作需要的人力,这也是推荐系统最重要、最有技术含量的部分。如果不是采用外包或者直接利用云厂商的SAAS/PAAS服务的话,是需要相关专业人才进行开发的。那么这个人是内部选拔还是重新招聘呢?下面给出作者的建议。
如果团队人力比较充足,短期内也很难招聘到合适的有经验的推荐开发人员,是可以先借调一些人力通过自学一些相关知识,快速开发一个推荐系统的原型并上线的。不过为了避免走很多弯路,技术负责人是需要全程参与把关的,并且最好能够咨询一些外部有经验的推荐系统专家的建议。如果有条件的话,是可以招聘一个有经验的专业的推荐开发人员来做的,招聘的原则也是希望以前做过或者了解过推荐系统全流程的开发人员,这样可以更好地把握推荐系统建设的方方面面。
构建推荐系统是一个数据密集型、计算密集型工程技术,因此是需要一些软硬件资源来支撑推荐服务的构建的。目前云计算已经非常成熟,这些资源都可以从云平台购买,而不是自己搭建。作者公司是从12年开始做大数据和推荐的,当时国内云计算还不成熟(阿里云09年才成立,12年还没有相关大数据云服务产品),因此自始至终都是自己搭建数据平台与计算中心的,这中间由于人力、资源不足,也没有专门的大数据基础架构资深专家进行较底层的开发与维护,中间遇到很多坑,对整个推荐系统的开发速度和推荐系统的稳定性是有一定的负面影响的,因此作者强烈建议采用购买云服务的形式构建大数据的存储与计算中心。
前面我们也讲过,在产品早期,用户规模相对小,我们没必要构建大数据平台,单机单线程就可以跑出一个推荐系统。当用户足够多、数据量足够大时,再投入资源构建大数据平台。因此,为了节省公司成本,一切资源的投入需要遵从从简原则。
我们构建推荐系统,一定是对推荐系统抱有期望的。那么推荐系统对产品、对公司到底有什么价值呢?概括来说推荐系统的价值主要体现在如下4个方面:
个性化推荐可以做到千人千面、实时推荐用户感兴趣的内容,更容易击中用户的兴趣点,当然可以让用户更好地留存下来,也更容易让用户跟产品互动(在抖音你只要简单滑动,就有源源不断的新视频出现在你面前),增加用户的使用时长,最终也提升了用户体验。
节省人力成本应该很好理解,有了个性化推荐,就不需要那么多人工运营的工作,甚至不需要那么多人工运营人员了。这里“标的物”的变现,如果“标的物”中包含广告(如视频的前贴片广告)或者“标的物”就是广告(如信息流广告),那么就是促进广告的曝光与点击,如果标的物包含会员内容(推荐付费的会员视频),那么就是促进会员转化,如果标的物本身就是商品(如淘宝上的各种商品),那么就是促进商品的售卖。
推荐系统完全是程序化自动完成内容分发的,可以做到实时、全天候无人管控的推荐,分发效率自然高。推荐系统根据用户的兴趣来分发内容,长尾内容一定有喜欢它的用户,推荐系统可以很好地发挥从“标的物”找人这个逆向功能。头部内容毕竟是少量的,长尾内容才是常态,这无疑让推荐系统发挥了无可比拟的作用。
这个价值可能不太好理解,如果你的产品是像淘宝这类做平台的,那么借助推荐系统可以将优质商家的优质商品推荐出去,而不好的商家的商品由于质量不行,没有太多的购买量,用户评价也不高,推荐系统的协同效应就会降低它的权重,让这些品质不太好的东西很难被推荐出去。这里推荐算法起到了择优筛选的作用,自然可以促进平台上的商家生态越来越健康。
我们不光要知道推荐系统的价值,更应该提前思考清楚哪些价值是自己产品追求的、哪些是当前阶段最重要的,想清楚了这个问题,我们就需要量化这些维度的价值。我们需要根据产品发展阶段和公司整体运营策略确定核心指标,有了核心指标,我们还要确定具体的KPI或者KR(Key Results,OKR方法中的关键结果)。关于这一块的详细讨论,读者可以参考文章《推荐系统的商业价值》进行深入学习了解。
前面对从零开始搭建一套可行的工业级推荐系统的各个方面进行了介绍,那在搭建推荐系统中什么是最重要的呢?基于作者个人经验,我觉得一个可用的、有商业价值的工业级推荐系统必须需要建设下面3个功能点。
1.新闻资讯、短视频类产品建议采用基于内容、标签的算法
2.提供“快消”类标的物的产品建议采用流式推荐
3.尽量使用简单的推荐算法快速上线,快是核心竞争力
4.构建推荐系统业务闭环比什么都重要
5.推荐系统专人负责制
本文转载自公众号:大数据与人工智能,作者gongyouliu
推荐阅读
使用Python复现SIGKDD2017的PAMAE算法(并行k-medoids算法)
【Github】BERT-NER-Pytorch:三种不同模式的BERT中文NER实验
AINLP-DBC GPU 云服务器租用平台建立,价格足够便宜
我们建了一个免费的知识星球:AINLP芝麻街,欢迎来玩,期待一个高质量的NLP问答社区
关于AINLP
AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLP君微信(id:AINLP2),备注工作/研究方向+加群目的。