2017 年 3 月 25 日,又拍云在广州举行了 Open Talk 唯品会专场“如何打造高性能高可用的电商平台”。


唯品会资深开发工程师吴官林带来了《个性化推荐系统的演变》的精彩演讲,分享在唯品会产业链下,个性化推荐系统的演进过程。


Clipboard Image.png

一、个性化推荐的价值

个性化推荐是根据用户的兴趣和行为,向用户展示他感兴趣的信息和商品。亚马逊公布的数据显示,它 30% 的收入是来自个性化推荐。

1. 实时推荐的挑战和技术难点 

唯品会作为一家电商平台,一方面拥有海量商品,如果没有推荐用户很难在数百万在售商品中找到喜欢的商品下单。另一方面唯品会拥有海量用户群,希望有一个完整的推荐体系,完成人和货的匹配。


而构造一个完整的推荐系统,要从算法、数据和系统三方面考虑。举例来说,建设推荐系统就像做面包,数据相当于面粉和水,系统相当于各种锅碗瓢盆即厨具,算法相当于面包的配方或厨师的灵感,三者缺一不可。


推荐系统的技术难点在于很短时间内做高并发实时预测,每天大约完成千亿次计算,为数千亿次的计算需接入1T+的日志数据,针对日志数据要做千亿次的指标统计和查询量。


二、唯品会精准推荐架构的演进

1. 精准推荐第一代架构 

特征 

  • 离线文件传输

  • 批量暴力计算

  • 实时匹配查询

Clipboard Image.png


上图所示,通过业务系统把所有的用户信息和商品信息通过接口的方式同步到离线平台,进行离线暴力式地批量计算,把结果推荐到实时查询引擎上去提供对外服务。


但精准推荐第一代架构存在数据时延高、人群聚类粗、扩展性差的问题。


2. 精准推荐第二代架构 

特征

  • 实时数据传输

  • 在线实时计算

Clipboard Image.png

精准推荐第二代架构,增加了实时接入,利用 API 或提供接入的工具,把数据实时回炉到系统,并引入流式计算。比如感知广州市某一个 20-30 岁用户在 5 分钟之前对哪些东西进行了点击,就把它写到缓存,完成数据的实时接入。


此外,精准推荐第二代架构还开发了在线推荐的计算引擎,完成部分规则和匹配算法的实时计算,整套架构基本上完成了数据的接入和数据消费的耦合,并把从 15 分钟到做到秒级的提升。


精准推荐第二代架构的优点是秒级延迟,模块边界相对清楚,低耦合和易扩展。

3. 精准推荐第三代架构 


Clipboard Image.png


但随着数据量变大,精准推荐系统第二代架构会出现数据不对齐和数据丢失情况,性能会受到挑战,而且随着产品越来越多,流程越来越复杂,推荐引擎为了某个业务定制的维护成本很高。


对此唯品会精准推荐系统第三代架构引入采用 VDProcess 版本的流式计算,推荐引擎也进行了升级,整个架构变成离线方式,变成半实时和实时预测的综合体。

三、推荐引擎设计与实现

1.  唯品会个性化推荐系统的核心技术挑战:

  •  “数亿用户和数百万实时变化商品”的相关度计算非常复杂

  • 100 ms 内完成

  • 特卖会每天执行数十亿次这样的预测


如何在 100 ms 的时间内, 面对数千万活跃用户中的任意一人,预测他在未来下一秒内,最可能购买上万个档期中所包括的数百万个商品中的哪一批?在业务流程上既要保证高可用,又能够保证一定的效果,如何解决这样的问题?唯品会的思路是降维,引入四个模块:检索、初选、预测和重排。


第一个模块是检索,利用分类模块完成人和货最初的匹配,比如查看女性连衣裙就只有两个条件:女性和连衣裙,女性所需要购买的东西和连衣裙所代表的商品有限的,就可以从百万的商品降维到 1 万的商品,然后在 1 万的商品里面再筛选对这个用户来说合适的商品。


第二个模块是初选,作为优质商品筛选的过程,也会引入很多策略,比如某个用户近期的一些品牌或品类的偏好,据此筛选出 1000 个产品。


第三个模块是预测,在 1000 个商品中,把转化目标和转化率分成三个模型,相应的预测过程根据这三个模型来进行打分,但会有人为影响的因素存在。


第四个模块是重排,引入重排引擎把机器排完的结果再进行小幅度的个性化调整。


最后展示合适的商品,这个流程都是在推荐引擎上实现的。


2. VRE 一代架构


核心需求:

  • 海量+实时:计算复杂响应时耗要求高;

  • 大规模分布式系统流量、算法和数据管理。


主要痛点:

  • 扩展难;

  • 静态路由,关联系统各自为政;

  • 可运营性差。

Clipboard Image.png

VRE 一代架构采用分层架构,每层的路由信息在上一层中注册,逻辑层加载影响的数据和算法。逻辑层 server 中内置 MR 分拆合并功能,如果计算任务量大,可以通过 MR 将任务拆分成多个子任务到 task 层 server 中做实时计算。


VRE 一代架构存在的问题是,每一层扩容或缩容都需要被上一层所理解,导致扩展难;且各关联系统各自为政,可运营性较差。


3. VRE 二代架构


主要优点:

  • 易扩展;

  • 动态智能路由;

  • 集群透明。


Clipboard Image.png

为解决上一代架构存在扩展难的问题,唯品会 VRE 二代架构把各自为正的系统完全打散,每一个系统都定义为一个子系统,所有的子系统通过中间环节做打通,所有信息都通过中间环节做交互。


而关于静态路由很难控制的问题,第二代架构在服务器上建立了动态路由器进行交互,演变成一个中心节点的结构,整个环节变得可动态扩展,集群的状态也能加透明,能清楚知道正在进行的任务,或者需要下一步需要处理的事情。


4. VRE 算法管理


核心需求:

  • 针对不同流量建模

  • 支持 100+ 在线,实验算法效果调优,频繁更新,上下架

  • 支持多种业务流程


特色功能:

  • 插件式管理

  • 支持动态上下架

  • 算法作为系统调度的路由依据

  • 接口解耦,状态机分离

  • 配置驱动流程调度


Clipboard Image.png


同一算法在不同的场景所表现出来的效果会不一样,算法需根据业务场景进行参数的调整,对此唯品会的解决方案是把算法写成动态命令库控制路由信息,再通过路由选择相应的算法做计算。路由系统将算法和 set 之前对应关系维护起来,根据请求配置选择响应的机器处理,并且根据配置完成算法间的多种融合或者并行计算。


5. VRE 数据更新


核心需求:

  •  保证算法模型一致性

  • 支持 100+ 在线实验算法模型数据推送

  • 每 15 分钟粒度定期推送到线上几百台服务器

  • 保证关键性数据查询命中


特色功能:

  • 文件 Pipeline 任务调度

  • 100 MB 文件,10 S 内发送到集群所有集群上

  • 实时流数据毫秒级更新到 server 缓存

  • 数据快照,支持计算节点快速恢复


Clipboard Image.png


数据更新方面,唯品会把整个集群构造成一个推送链,由一台机器顺势往后面做推送,然后再把所有的机器做同时加载,达到集群一致性的状态,该推送链支持 100+ 在线实验算法模型数据推送。如何在 10 秒内把 100 M 的文件在 100 台机器里生效,是唯品会解决的技术难点。


唯品会精准推荐系统运营会考虑多地容灾问题,采用部署同城多核的方式,在算法上线之前,进行功能的验证,然后到预发布的环境,做体验性的校验,校验之后才会上新到线网流量里面。

唯品会未来希望能把系统做到更加实时,引入更多标签体系和深度学习深度学习机制,让用户画像更精准,且系统能更加通用。