业务驱动的推荐系统:方法与实践
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.1 业务驱动下的推荐系统设计思想

传统的推荐系统一般只考虑解决人货匹配这一抽象的技术问题,而商业平台中的推荐引擎需要持续创造商业价值,因此要在设计上遵循业务驱动的思想。

不严谨地讲,传统的推荐系统只需要用于存储用户、内容相关数据的数据库,处理用户请求并筛选内容的打分排序引擎,以及用户反馈数据的回收系统,就可以完成任务了。

业务驱动下的推荐系统的设计思想,是要用动态、发展的眼光进行设计,要为业务的可持续发展、系统自身的可持续发展提供便利。更具体地,从“人货场”的业务模型切入,我们希望系统可以越来越精确、深入地理解我们的用户、内容以及业务场景,同时也能够充分理解三者之间的关系,最终通过沉淀的领域知识,结合人工智能与人工手段,提升场景效率,促进场景的可持续发展。

虽然业务驱动的思想要求我们根据业务目标对推荐系统进行定制化设计,但本书的主要目的仍然是把业务要素剥离出去,提供一种高度抽象的推荐系统模板,以便于读者理解。

2.1.1 业务无关的推荐系统抽象

无论电商还是数字内容消费,无论信息流推荐还是结构化推荐,所有的推荐业务场景或架构都具备一定的共性与区别,如图2-1所示。把共性的部分抽象出来,我们就可以得到一个通用的、可产品化的推荐系统整体设计方案。

图2-1 信息流推荐(左图)与结构化推荐(右图)

从业务驱动的角度讲,推荐系统可以被抽象为数据管道、核心引擎、运营平台和数据中心四大要素。把这些要素组合起来,就形成了一个抽象的通用推荐系统设计模板。

1.数据管道

第一个要素是数据管道,它存在于客户端和服务端的网络通信服务中。在客户端与服务端的信道中,一面是从服务端向客户端发送的个性化内容以及相关数据,另一面是从客户端向服务端发送的客户端实时采集到的各类信息。

数据是理解用户、内容、场景的关键,因此用户与系统之间的数据通路至关重要。我们的设计首先要利用简洁、轻量的数据传输协议和流量调度机制,降低网络延迟,提供流畅的体验。其次,要使数据管道具有灵活可扩展的数据采集能力,除了收集客户端、服务端系统的日常运行日志以外,还应该收集用户的交互反馈数据。这些反馈数据,是业务最宝贵的数据资产。最后,为了保障这些珍贵的数据,这条管道还要具备一定的网络安防能力。

2.核心引擎

第二个要素是核心引擎,用于支持各种用户请求的处理和业务策略、算法的开发迭代。将用户的请求转化成推荐结果过程中的所有复杂的计算逻辑、数据存取都在引擎内完成。市场的快速变化要求业务的运营具备灵活应变的能力。因此,从业务驱动出发,核心引擎的设计需要高度模块化,以便于场景请求处理能力的快速搭建和迭代。同时,核心引擎也要足够轻量化,方便低延迟接入各类产品化需求。最后,还需要支持敏捷迭代,以应对技术、市场的快速变化。

3.运营平台

第三个要素是运营平台。业务驱动的推荐系统需要结合人工智能和人工手段。一方面,这受限于当前人工智能技术的发展水平;另一方面,我们希望“人”可以在这个系统发挥更强的掌控力,引导业务的良性循环。

对于业务运营人员来讲,掌控力体现在推荐结果干预能力、数据资产管控能力、数据分析监控能力三大方面。推荐结果干预能力指人工生成的推荐内容可以覆盖或部分替代算法自动产生的推荐结果;数据资产管控能力包括对于用户数据、内容数据以及结构化的历史数据(例如知识图谱)进行增、删、改、查;数据分析监控能力是指对推荐系统的整体业务数据表现可以进行可视化的监控,并便于进行战略、战术分析。

4.数据中心

第四个要素是数据中心,方便对合法合规采集的用户交互行为数据、推荐内容的信息,以及常规迭代中各个场景、各个实验所产生的日志数据进行存储、解析和读写。随着平台的发展和规模的增长,推荐系统日积月累的数据量成了天文数字。因此,我们要求数据中心有超大规模存储和容灾的能力。同时,为了方便数据分析,我们也要求数据中心支持便捷快速的数据读写等数仓ETL(Extract-Transform-Load)能力。一个成熟的推荐系统会沉淀大量常态化、自动化的数据抽取、分析、计算的脚本,这也要求数据中心具备自动化调度、处理网状数据任务流的能力。

如图2-2所示,数据管道在辅助核心引擎处理用户的推荐请求的同时,为推荐业务采集大量的数据,交由数据中心处理、加工,形成高信息密度的业务数据并存储下来。同时,这些数据反哺核心引擎,助力引擎推荐算法不断优化。另外,这些业务数据也是方便业务运营人员理解业务、理解用户的基础。运营人员会根据数据和领域知识制定运营策略,通过运营平台对推荐系统的效果进行调控。运营平台也是一种数据的入口,用于人工引入其他途径获取的内容或业务相关的数据,例如人工打标数据等,并将这些数据沉淀至数据中心成为数据资产的一部分。

图2-2 信息流推荐(图左侧)与结构化推荐(图右侧)

从架构的落地实现上,我们可以把推荐引擎提炼并抽象为埋点及日志服务平台、数据中心、召回与排序模块、运营管控与作业模块、运维与实验平台,如图2-3所示。

图2-3 业务与算法视角下推荐系统的基础模块

2.1.2 推荐算法模块核心能力的建设

在基本服务框架下,优化用户体验的核心是内容质量和兴趣匹配。其中,内容质量与系统工程、算法无关,而兴趣的匹配程度取决于推荐系统算法模块。维持算法模块敏捷、有序迭代则主要基于以下几个重点能力的保障。

1.基础算法维护

基础算法维护指的是对于策略性算法进行日常维护与迭代,主要是面向召回与排序模块的算法策略、模型的维护。我们简单、抽象地将推荐算法模块拆分为海选(召回)和排序两部分。之所以这样拆分,是受到了当前常规计算服务器计算能力的限制。以电商场景为例,在理想状态下,如果我们可以在数十毫秒内完成一个用户和几十亿商品之间的兴趣匹配度计算,那么就没必要做这样的拆分了。

而现实情况是,在大多数有着成百上千QPS(Query Per Second,每秒请求数)的推荐场景中,在合理的、成本可控的服务器资源配置下,排序算法模型在数十毫秒内只能完成一个用户和几百个商品之间的兴趣匹配度计算。于是,推荐算法模块形成了今天的多级粗筛到精筛的流程设计。

2.数据精准高效采集

为了方便数据探查和优化迭代,需要有健全的埋点日志系统和算法实验平台。埋点是设置一种由用户交互行为、程序自主行为触发,按固定格式、特定发送规则,将收集到的信息向埋点日志系统发送数据并存储的机制。

对于算法开发而言,通过埋点日志,记录算法的核心信息,方便制作算法模型需要的样本和特征体系,进而完成模型的训练优化。同时,埋点日志也是重要的数据监控来源,通过解析重要的业务指标,形成实时和非实时指标监控,可以实现故障、异常报警机制,也可以用于分析用户行为、沉淀未来的迭代优化方向。

3.深度学习服务

顾名思义,深度学习服务就是提供深度学习模型的日常维护,具体可以拆分为在线能力和离线能力。在线能力包括深度学习模型自动化上线部署、模型调试、在线特征抽取、在线推断打分的能力。这些能力能够保证算法模型最基本的自动化在线预测、定时调度更新的功能(例如工业界常见的次日更新,也叫T+1更新)。在此基础上更进一步,推荐算法模块可以支持模型在线训练、模型在线学习的能力。离线能力包括大规模分布式模型训练能力,模型调度、存储、版本控制等日常维护能力。

4.自定义日志埋点

在常规埋点日志模板内,提供算法自定义字段记录、上报的能力。推荐算法工程师可以通过自定义接口实现对埋点字段的增、删、改,进而实现对特定业务逻辑下的数据监控、特征抽取等能力。

5.在线AB实验以及数据分析监控

在线AB实验以及数据分析监控是基于在线流量调度、流量识别、实时流数据分析等功能实现的算法日常维护的能力。推荐算法工程师在进行算法优化时,往往不能将改动直接全量发布到线上,这是因为新算法的长期表现往往很难预测,同时也潜藏着一些不易发现的问题。

一个合理的解决方法是进行小流量实验,这就要求推荐引擎有能力圈定规模相同但用户不同的流量,调用不同的在线服务代码,可以在相同时间区间内进行不同算法、策略的对照实验。对不同实验流量的业务指标数据进行定量分析,可以确定新老算法的优劣势,进而方便算法优化迭代。