沙龙回顾 | 推荐系统 唯快不破

作者介绍:雷小平,腾讯神盾推荐系统负责人,带领神盾团队多次获得公司级各种奖项。

本次分享是神盾推荐系统中针对快数据应用场景的架构介绍,分为数据计算和数据分发两个部分。

第一部分:综述

QQ大数据团队服务于QQ生态里种类繁多的产品,在这些产品中存在大量的个性化推荐场景。以下图左边的页面为例,在手Q安卓某版本上有超过600个类似这样的页面可以做个性化推荐;除此之外,腾讯云还对接了非常多的企业客户,而这些客户也有大量的个性化推荐的诉求。

基于这样的背景,团队以通用和开放的出发点打造了神盾通用开放推荐系统。它的目标是让业务工程人员可以更快的接入推荐系统,让业务算法人员可以更快进行新算法/特征的迭代。

下面是一些典型接入产品的效果展示

本文主要介绍的是神盾推荐上快数据计算的实现。

那什么是快数据计算呢?我们最近在孵化一个短视频的产品,相信有同学也有听过:微视。比如小明在微视上看了一个小鲜肉土豪在撒钱的视频,这个对推荐系统来说意味着什么?首先,这个视频不能再推给小明了,其次小明可能会喜欢类似的视频,这个响应需要是秒级的。如果这个视频之前不在推荐列表里面,可以把这个视频添加到推荐列表里面,另外这个视频也可以推给类似兴趣的用户,这个响应需要是分钟级别的。这些场景都是快数据计算中的应用场景。

所以快数据计算在推荐系统中,就是实时推荐 + 近线推荐。因为在架构设计中,很多的服务都可以共用,所以把这两块放到了一起,统称快数据计算。

下面是两个快数据计算应用的效果展示:

第二部分:快数据计算平台

神盾推荐的数据训练模式由于是周期性,对于数据和模型的更新都没法满足实时性。

所以针对快数据应用的场景,设计并开发了quicksilver系统。下面这张图是快数据计算的架构图,按照数据的流转流程把整个计算分成了“收,算,存,用”四个子的模块。

最左边的是“收”,它主要考虑的是协议标准化,这样可以自动化的做很多事情,比如自动构建特征,甚至是模型。其次是数据的复用,如果是要做多件事情,比如既要做实时训练,又要曝光衰减,都由它统一转化,数据始终只有一份。

往右边走的第二个模块是“算”,这个也是整个快数据计算中最核心的模块,算指的是从原始数据流到有效数据的处理过程,大致可以分为三种类型,第一种是推荐池子的计算,也可以说是召回层,现在的推荐产品一般比较复杂,可供推荐的物品也会比较多,所以需要通过召回做一层初筛,这里面有很多种策略,比如通过用户行为,搜索关键字,热度,相似度等等。第二种是对特征的实时计算,一般分为行为类的特征和统计型的特征,而为了让系统的灵活性更高,这里也可以支持规则引擎,对特征生成的规则做自定义。只要把输入输出的格式规定好,这里可以做得非常灵活。第三种就是训练的实时化,这块下面我会详细介绍。

第三个模块是“存”,我们把一些读写频率稍低,并且数据大小非常大的数据类型存在远程的KV,比如redis这种系统,而把一些size不太大,并且数据相对比较小的数据类型放到计算机器的本地cache。这套系统的设计还有一个好处,就是通过存这个模块,把计算和应用接耦合,相互之间可以灵活替换。

最右边的就是“用”了,在召回,精排和重排中,都会应用起来。

最后,最下面还有一个管理系统的模块,整套快数据的交互都可以通过一个可视化的页面来操作,降低用户的使用门槛。

讲完整个快数据计算的架构,接下来会给大家介绍最重要的一个模块,实时训练。实时训练主要包含三个流程:simpleserver负责样本的处理,joinserver负责特征的拼接,生成训练所需要的输入数据,给到trainningserver训练,然后训练结果给到模型评估,当评估结果达到上线标准,再将模型输入到线上。

实时训练中的,首先要解决的是采样,这里选用了lex/yacc作为规则引擎,用于自定义样本生产规则,方便灵活扩展。

在正负样本选取上面有三个trick。在样本存储之后,将存储结果拆分成有三个单元的滑动窗口,分别负责样本判断,样本输出和模型评估;而样本输出的时候,需要控制速度匀速。

第二步是特征拼接,将用户,物品和特征链接起来。

特征拼接方面做了两个主要的优化,分别针对同一个场景有多个模型训练,以及同一个用户多次拼接。

数据准备好了之后,第三步就是训练。选用的是常用的FTRL作为优化器,除了基本的训练流程之外,在结果上线之前还增加了一个模型评估的模块,尽量不让坏模型对线上造成影响。

针对原始的FTRL,我们做了一些优化,首先是保证模型有更好的稀疏性:

其次是解决模型启动时收敛过慢,以及模型抖动的问题:

还有增加新样本对模型影响的权重:

最后还有一些训练时的trick,比如增加正样本的权重等。

实时的模型还可以用在重排层,比如多臂老虎机以及强化学习等场景

另外,还尝试了FTRL作为DNN的输入的方式,对效果也有一定的提升

第三部分:快数据分发SSM

快数据分发主要指的是大小在K到M级别的一些计算过程中需要使用的数据,而且访问频次非常高,不适合放到远程的nosql,所以针对这个场景实现了一个快数据分发系统SSM。解决5个主要的问题:

(1) 满足高频读写的需求

(2) 数据格式不一致兼容

(3) 数据快速下发

(4) 计算节点中数据版本的一致性

(5) 模型回滚

整个系统的架构图如下:所有数据存在HDFS中;将更新任务的元数据存储在一个分布式的mysql系统CDB中;由server集群负责所有数据更新任务的调起;每个计算节点上有一个数据同步的AGENT,负责从server接受数据,最后把数据放到本地共享内存,供模型计算进程使用。Server跟agent都是无状态的,可以任意重启,所以整个系统没有单点,比较好的解决了上面遇到的这些问题。

以上是神盾在快数据处理上的经验和沉淀,希望未来得到更多的建议,帮助我们更好改进工作。

原文发布于微信公众号 - 腾讯QQ大数据(qq_bigdata)

原文发表时间:2018-07-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏技术翻译

关于TensorFlow你应该知道的9件事

TensorFlow是一个机器学习框架。如果你有大量的数据或你在人工智能中追求的最先进的东西,那么这个框架可能是你最好的选择:深度学习。

11300
来自专栏机器之心

想轻松复现深度强化学习论文?看这篇经验之谈

选自Amid Fish 作者:Matthew Rahtz 机器之心编译 近期深度强化学习领域日新月异,其中最酷的一件事情莫过于 OpenAI 和 DeepMin...

34860
来自专栏机器学习原理

实例(2)——音乐文件特征工程的提取音乐便签分类

22130
来自专栏机器人网

机器人控制的基本方法

机器人的控制方法,根据控制量、控制算法的不同分为多种类型。下面分别针对不同的类型,介绍常用的机器人控制方法。 一、根据控制量分类 按照控制量所处空间的不同,...

45140
来自专栏机器学习AI算法工程

Python实现基于SVM的股票预测

核心 因为是分类算法,因此不像ARIMA一样预测的是时序。分类就要有东西可分,因此将当日涨记为1,跌记为0,作为分类的依据。使用历史数据作为训练数据。 处理数据...

80260
来自专栏新智元

【深度】基于论文,对谷歌 TPU 的最全分析和专业评价

【新智元导读】本文以 Google 最新公开的 TPU 论文《在数据中心中对张量处理器进行性能分析》的译本为基础,对该论文及 TPU 进行了评价。 源起 2...

59640
来自专栏新智元

Andrej Karpathy:神经网络是“软件2.0”,而非机器学习的一种工具

【新智元导读】深度学习和计算机视觉专家、特斯拉人工智能部门主管Andrej Karpathy最近提出将神经网络视为Software 2.0,而非“机器学习中的一...

45280
来自专栏AI研习社

2018 最新机器学习 API 推荐清单,快给 APP 加点智能

本篇基于 2017 年的推荐清单做了一些改进——去除了一些不再进行维护的 API,并且更新了一些新的 API。主要覆盖如下方向:

18430
来自专栏思影科技

PNAS:婴儿早期记忆能力比我们想象的要高

近日来自意大利帕多瓦大学的Silvia Benavides-Varela教授在美国国家科学院院刊(PNAS)上发表了一篇关于婴儿早期记忆的研究,这一工作使用近红...

385130
来自专栏SDNLAB

基于无尺度网络模型的启发——一种新型数据中心架构的设想

无尺度网络(Scale Free Network),在网络理论中指的是一类有特定特征的网络。无尺度网络所具有的特征是:大部分节点只有极少的边连接,只有极小一部分...

340110

扫码关注云+社区

领取腾讯云代金券