全标题 专访百分点刘译璟:创业公司是否是技术天才的理想国
百分点作为国内大数据技术与应用服务商,希望每一个普通用户都能拥有使用大数据的能力,这种“赋能”也让其成功为2000家互联网企业和实体企业提供服务。刘译璟博士从北大毕业后,在百分点创业开始便加入了该公司,成为公司第一个技术人员,一路携手,互相成就,如今百分点已然是行业翘楚,而刘译璟博士也成为公司的技术副总裁/首席架构师。InfoQ采访了刘译璟博士,借此了解他的个人经历,以及探询百分点的技术和文化。
InfoQ:请讲讲您的背景和个人经历,您如何和大数据结缘?
刘译璟:我是85年出生,山西人。2001年上本科,就读于南京邮电大学应用数理系。2005年到2011年间在北京大学数学学院硕博连读,跟随裘宗燕老师做形式化方法、程序语义和验证方面的研究。
读博期间,我主要的工作集中在如何用逻辑(我自己发明的OO Separation Logic)的方法描述Java程序的需求(Specification),以及用一系列数学证明过程验证程序的编写是否符合需求。这是一个非常数学和非常理论的研究领域,在这个领域中接受的训练和研究工作让我受益匪浅,让我具备了严谨的思维,学会了高度抽象的思考方式,以及刨根问底的追究精神,我认为它们是我工作和生活中最好的伙伴。
另外,在北大数学院的六年中,我还学习了许多计算理论、编译原理、人工智能、模式识别以及科学哲学方面的知识,这些知识对我后续的工作起到了巨大的作用,让我看清楚了很多大数据方面的问题和发展方向。
接触大数据是我到百分点以后的事。我是在2009年7月2日加入百分点的,是公司成立的第二天,加入百分点完全是机缘巧合。在研究生阶段,每到假期我都会找一些兼职赚赚外快,做过一些的Web和桌面类型的应用,也有自然语言和机器学习方面的项目。2009年暑假,我在北大未名上看到了我们董事长发的百分点的招聘帖,简单电话面试后我就上船了,成为了百分点第一个技术人员,负责了第一代推荐引擎的研发工作,算是正式从事大数据方面的工作。后来,随着公司业务的扩展和深入,我对大数据的思考越来越深入,逐渐形成了自己的一套理念和方法论,包括什么是大数据、大数据的核心技术、大数据在信息化体系中的位置、如何运用大数据解决业务问题等等。
在我看来,大数据最核心观点的是要利用数据化的理念和技术对现实世界建模,构建一个数据世界,基于这个数据世界再去构建相应的业务系统,从而实现智能化的应用。这也是IT时代与DT时代最大的差异,如下图所示:
简单来说,将一切转化为数据和数学模型,就是大数据要做的事。这是我对大数据的认识,更多这方面的话题我们后续再谈。
InfoQ:能介绍下百分点科技产品线发展历程是怎么样的吗?各不同产品之间是否有使用共同的技术?
刘译璟:2009年公司刚成立时,我们唯一的产品是基于SaaS的个性化推荐引擎,主要面向的客户是电商网站。据我所知,百分点是国内最早做第三方推荐引擎的企业,并且我们的产品从一开始就强调实时性。实时性体现在两个方面:第一,任何一个网站接入我们的引擎后,几秒钟后就会有推荐产生,而不需要提前准备数据让我们分析;第二,网站上的用户行为会被实时处理,反应到后端的模型和下一次推荐结果中。实时性让我们的推荐引擎能更及时准确的把握消费者偏好,作出令人满意的推荐。能做到实时的原因是我们从一开始就采取了流式计算和批量计算混合的Lambda架构(这个词是2013年LinkedIn提出的,意思是“人字形”的架构),并且我们用把大多数的推荐算法改造成了增量计算的方式。即使是7年后的今天,很多企业的推荐引擎还没能做到实时性。
到了2011年,我们的推荐引擎不只是服务电商,而是拓展到了媒体、团购和导航等业务和行业。我们发现,仅仅依靠一系列的推荐算法很难进一步提升推荐效果,也很难做到多元化的推荐。因此,我们对推荐引擎做了一次大升级,改造成了如下图的四位一体架构:
在这个架构里:场景引擎用来计算消费者所处的业务场景,我们要分析出消费者处于哪个阶段,好有针对性的进行推荐,它就像是部队中的侦察兵;算法引擎可以比喻为部队中的后勤,它的主要任务是不停歇的处理各种商品、用户和行为数据,计算出用户的偏好标签、用户间的相关性、产品间的相关性、用户对产品的评分、各种类型的排行榜等等;规则引擎是业务的核心,它的任务是根据网站的业务目标和用户场景,选择合适的算法结果,并拼装成最终的推荐结果;展示引擎可以看作是进攻部队,它以合适的方式将推荐结果展示在消费者面前。
在这个阶段,我们开始引入用户画像、商品画像、抓取系统等技术,这些技术后来都转化成了我们的产品。
到了2012年,我们推出了百分点分析引擎,它是一款BI类型的产品,可以电商分析产品、类目、品牌、订单和用户等核心运营主题,帮助电商提升数据化运营能力。
2013年底,随着互联网的冲击和O2O的崛起,越来越多传统企业开始重视经营用户和全渠道经营,一部分走在前面的企业急切的期望具备大数据的能力,例如王府井百货、长虹等等,于是他们找到了百分点。在这样的背景下,我们将自己内部用到的方法论和技术一点点封装成产品,提供给企业,目前我们的产品体系如下图:
(点击放大图像)
可以看出,我们将大数据能力分成了三层:
- 技术层。它负责提供数据的采集、存储、整合、加工和对外接口等基础能力,就好比工厂中的厂房、水电、设备一样。我们将自己用到的所有的大数据底层技术整合到了百分点大数据操作系统(BD-OS)这款产品中;
- 管理层。它类似于工厂中的流水线、管理制度。在管理层,我们为企业提供了生产用户画像和商品画像的完整流程和工具,让企业很容易做到用数据来描述自身业务的方方面面;
- 应用层。这是最终的数据产品。我们有三大类应用供业务人员使用,分别是服务型的推荐系统及其衍生品,营销类的营销管家,以及分析类的舆情管家、数据洞察系统。
与推荐引擎一样,所有这些产品都基于经典的Lambda架构,它实际上也是BD-OS的核心架构,如下图所示:
(点击放大图像)
另外,在这些产品中我们大量使用了机器学习和深度学习、分布式高可用、负载均衡等技术。
InfoQ:百分点科技曾在2015年发布了全球首款企业级大数据操作系统,能讲讲为什么会有这样的一个操作系统吗?是为了解决什么问题,具有什么样的特性?
刘译璟:首先我需要说明或者强调一下,我们的BD-OS是一款“大数据”的操作系统,而不是计算机或者手机的操作系统,有一些朋友问过我“你们的操作系统是一个定制版的Linux的吗?”,说明他把BD-OS理解成了计算机的操作系统了。
我们之所以要开发BD-OS,是在实践中看到现有的大数据技术离实际应用还很远,一些企业即使部署了Hadoop这样的框架,还是不知道如何应用它来为自己的业务服务。这一点特别像计算机刚刚诞生时的情况,即使有各式各样的硬件,如果没有方便的计算机操作系统的话,计算机还是很难应用到实践中。当前的大数据技术就面临这样的问题,业界从不同的应用和角度出发提出了许多存储、计算和算法技术,而且新的技术还在层出不穷。但对大多数企业,特别是传统企业来说,如何从这些五花八门的技术中挑选出适合自己的,并且运用它们产生价值,始终是一个难题。BD-OS的提出就是为了帮助企业解决这样的问题,如下图。
BD-OS之所以称为大数据的操作系统,也是借鉴了计算机操作系统的概念。计算机操作系统是沟通用户与硬件设备的桥梁,它至少应该具备设备管理、资源管理、文件管理、作业管理和拥护管理等几方面。在我们的设想中,一个良好的大数据操作系统应该是沟通用户和大数据(数据以及技术)的桥梁,它必须具备存储管理、资源管理、任务管理、人机交互和数据生命周期管理五个特征,如下图所示:
- 存储管理,管理各式各样的数据存储服务。目前BD-OS整合了HDFS、HBase、Kafka、MongoDB、Redis、ElasticSearch、Zookeeper和MySQL这些存储服务,并且提供了统一的配置和使用接口;
- 资源管理,管理数据加工过程中涉及到的的内存和CPU资源,以及针对这些资源的各种权限、配额等等。BD-OS整合了Hadoop MR、Spark和Storm三种计算框架,并通过Yarn来进行统一管理;
- 任务管理,管理数据加工过程中的各类计算任务。BD-OS被设计成一站式的数据加工平台,用户可以在BD-OS上进行数据架构设计、程序(Shell、Python、R、Hive)开发、数据流编排、工作流调度以及监控;
- 人机交互,提供简洁方便的界面供用户使用。BD-OS是基于B/S架构的,而且大多数操作通过可视化操作即可完成,大大降低了大数据技术的使用门槛;
- 数据生命周期管理,这是我认为最重要的一点,也是大多数用户最无所适从的方面。我们在7年的实践中总结出数据应用至少需要有接入、整合、加工和消费四个阶段,每个阶段又可以进一步细分,而且需要一些特定的工具支持。BD-OS整合了百分点在实践中使用的一整套工具,包括实时数据采集、抓取系统、数据清洗工具、建模工具、数据服务REST API、数据JDBC接口等等。用户根据这些流程,使用相应工具即可高效的完成数据处理和应用工作。
可以看出,我们基于对大数据操作系统的理论指导下自上而下设计BD-OS的。并且在设计研发中,我们一直贯彻可视化、智能化、系统化和协同化的原则,目的是让企业中的数据人员可以非常轻松的使用大数据技术完成业务目标。
InfoQ:百分点的数据来源应该含有第三方数据和自有数据,这两者现在所占数据源的比例如何?对于第三方数据,比起自有数据,总会有点受限,在数据分析时是否带来影响?百分点如何减少两者差异?
刘译璟:我们一般从数据所有权角度出发,将数据分成第一二三方,大致的定义如下:
- 第一方数据,是指企业完全拥有权限的数据,即数据的产生和使用全部由企业决定。例如企业业务系统中的数据,就是企业的第一方数据;
- 第二方数据,是指企业和合作伙伴共同拥有的数据。例如我在天猫开个店,这些订单数据到底是我的还是天猫的?按我们的理解,这就是典型的双方共有的数据,所有权如何分配是商谈出来的。在使用这些数据时,也要遵循双方共同的利益;
- 第三方数据,就是所有权不归企业,但是可以通过某些途径获取到的数据。例如互联网上公开的网页数据。它们的分析和应用一般遵循互联网的公开协议或版权;
按照这个定义,百分点大部分原始数据是第二方的,是合作伙伴为了使用我们的服务主动提交给我们的。并且,在我们与合作伙伴的协议中会明确规定好数据的使用方式和范围。
我们在业务中确实需要很多第三方数据,比如我们需要国家行政区数据和天气数据,以便支持各类业务规则。
百分点的第一方数据主要是我们挖掘出各类语义信息、商品分类、商品画像和用户画像等等,它们是提供各类数据服务的基础,也是我们数据集中规模最大的部分。
总的来说,不同所有权的数据获取和使用方式都有差异,我们要做的就是在权限规定的范围内尽可能的挖掘数据价值并使用它们。
InfoQ:现在似乎是人人都在讲大数据营销,如何能在众多大数据营销产品中做到脱颖而出?
刘译璟:正如前面说过的,大数据是对现实世界建模。大数据营销显然是对营销业务的方方面面建模,要做到脱颖而出,无非就是模型建的好不好,是不是很好的反映了现实。
我们知道,营销业务中需要考虑的因素很多,例如:
- 广告主:企业形象、知名度、行业特点、营销的目标、预算情况等;
- 广告:品牌广告还是效果广告、展现形式、素材情况、引流目的地等;
- 受众:年龄、地域、职业、学历、消费力、兴趣偏好、上网特征等
- 渠道:户外大屏、电视广告、搜索引擎、DSP、移动DSP、EDM等;
- 活动阶段:预热、放量、持续、收尾等;
- 其它因素:政策环境、市场环境、竞争对手等等。
上述每一个因素还可能进一步展开成更多的子因素。一个好的大数据营销产品,要尽可能的将所有这些因素考虑到,并反映到数据模型或业务规则中,只有这样才能切切实实的服务好客户。
我们的产品“百分点营销管家”就是基于这样的思路设计研发的。百分点营销管家利用了百分点的全网用户画像,很好的反映了受众的各种特征;从广告主的角度出发设计了多种营销方式、营销场景和业务目标,允许广告主进行多种规则设定,这是对营销业务的有效建模;最后,营销管家还包含了人群扩散、渠道评价、点击率预估和效果归因等算法和模型,它们能在具体的营销环节中进行分析和预测。所有这些的组合,是我认为百分点营销管家脱颖而出的原因。
InfoQ:如何评断推荐引擎效果,百分点科技采用的是什么检验方法,百分点还会从哪些方面提升效果 ?
刘译璟:这是一个非常好的问题,也是一个非常复杂的问题。很多朋友都会问类似的问题:“你们的推荐准不准啊?效果好不好啊?”,感觉上应该很简单吧,但是大家想没想过,什么叫做“准”,什么叫“好”呢?
我先讲一些通用的概念。如之前所述,推荐引擎其实是对现实中推荐业务的数学建模。对于一个数据模型,我们评估它的好坏,本质是看它是否与现实相吻合。这个吻合包含两个方面:第一是模型是否反映了现实,就是模型做出的判断在现实中是否真的存在,一般我们称之为准确度;第二是现实是不是都在模型中有反应,就是说现实中发生的事是不是都被模型捕捉到了,一般我们称之为覆盖度。准确度和覆盖度在不同的领域中有不同的叫法,例如在逻辑中一般称为可靠性和完全性,在搜索中叫查准率和查全率,在机器学习中叫准确率和召回率,但本质上它们是一个意思。这样,我们就能看出,“准”和“好”是两个不同的概念,“准”一般是指准确度,而“好”是结合准确度和完全度的一个综合评价。
再来看推荐系统,从学术上来讲,我们可以把把推荐引擎简化为输出“用户喜欢的产品列表”的模型,这时:
- “准确”就是“推荐的产品列表”是不是用户真的喜欢。这一点一般是可以评估的,实践中我们可以利用点击率或购买率来代表它;
- “覆盖”是指用户喜欢的产品是不是真的出现在“推荐的产品列表”中。这一点实践中基本上无法衡量,因为我们根本不知道用户喜欢哪些东西!
所以,在学术上,准确度是来衡量推荐系统好坏的主要指标。另外,从用户体验角度出发,学者们来提出了“多样性”(推荐列表中产品类型是否多样)和“新颖性”(推荐列表中的产品是否远离用户的偏好)等指标,用来衡量推荐系统的好坏。
但是!学术归学术,实践中要复杂很多。推荐引擎最终服务的是企业客户,而不是终端用户。推荐是为了帮助企业达成业务目标,而不(只)是服务好消费者!虽然企业的业务目标和用户的目标有很大关联,但这两者之间并不是相等的。例如,利润高的产品往往并不是用户喜欢的。从这个角度来说,学术上的“准确性”、“多样性”和“新颖性”等很难指导推荐引擎的实践,因为这些指标完全没有考虑企业的需求。
在百分点的推荐引擎中,我们有若干种业务指标,例如“点击率”、“下单率”、“客单价”、“购买件数”、“购买种类数”、“转化率”等等,这些指标都是直接反映企业业务目标的。推荐引擎的目标就是优化这些指标。
如何优化这些指标呢?我们的做法是不断尝试新的模型,并进行A/B Test。简单来说就是不断的试错,尝试符合业务目标的方向。实际上,这种方法就是卡尔波普证伪主义的体现。
当然,尝试是要有策略的,不是随意尝试。我们的尝试包括两方法:
- 第一是全局层面的,改变我们对推荐业务的建模方法。例如我们从最早只有推荐算法到搭建成场景引擎、规则引擎、算法引擎和展示引擎,又例如引入用户画像的概念,这些都是根本上的改变和尝试;
- 第二是局部层面的,例如采用新的推荐算法,又例如调整用户画像的计算参数等等,这些都是在细节上进行调整。
所有的尝试都会放到线上进行分流测试,测试效果好的将说明我们在这个方向上的尝试是有道理的,值得进一步思考;效果不好则说明这个方向的尝试不太符合实际情况,先放弃再说。
以上过程我们每时每刻都在做,好让推荐引擎不断接近现实的业务需求。
InfoQ:请问您对推荐系统及技术未来发展趋势如何看法?
刘译璟:我更愿意用“个性化技术”而不是“推荐技术”,“推荐”是“个性化”的一个具体应用,而“个性化”是更本质的要求。实际上,“个性化”和“推荐”一直伴随着人类,甚至比搜索一类的需求更加基础。
百分点之所以在2009年开始做推荐引擎,就是看到随着信息化的发展,每个人都将深度参与到信息社会中,面对近似于无穷的信息,如何将信息和人有效的匹配将是全社会的刚需和难题,解决不好这个难题我们将深陷在信息暗海中,社会运作的效率也将极其低下。
回过头来看,我们在2009年的思考是非常准确的,并且这种信息爆炸的趋势越来越明显。现在很多人都有这样的感受:“满屏都是垃圾信息,反倒是重要的信息都被刷了!”另外,各大网站和企业纷纷将推荐系统作为标配,这也是旁证。可以看出,个性化技术以及基于个性化的服务将会迎来更大的发展。
“个性化技术”本质上是让机器理解人的方方面面,我认为我们现在做的还非常初级。随着互联网和移动互联网、物联网、可见光通信、可穿戴设备、VR等技术的发展,人会越来越容易被“感知”和“数据化”;随着脑科学、人工智能甚至量子计算机等技术的发展,机器会越来越强大。届时,真有可能让人感叹“机器更加懂我”。
InfoQ:能介绍下您的团队以及团队理念吗?
刘意璟:百分点现在有员工600多人,其中技术人员有300多,大致分为基础平台、算法建模、Web应用几个方面。整体来讲,我们公司的技术人员是很年轻的,富有朝气而激情。同时,我们的学术能力和学习氛围非常好,这也跟核心Leader大多是名校的博士有关。
团队理念方面,我们比较推崇小团队、敏捷式的工作方式,鼓励大家主动参与到项目中,成为项目的主人,分享项目的利益。公司也鼓励大家参与到团队管理中,积极提出出自己的想法,只要是合理的idea都会被采纳并推广。
配合上述理念,我们还设计了一整套的激励手段,包含奖牌、奖金、晋升、培训等等,帮助每个团队成员发展。
InfoQ:作为首席架构师,请问有什么感悟或经验可以和大家分享?
刘译璟:在这里我谈谈自己对架构师的看法吧,因为我发现很多人对“架构师”和“技术管理者”纠缠不清。
我们先来看看什么是“架构”。日常生活中,我们处处都在谈论“架构”,例如建筑的架构、世界观的架构、组织架构、甚至我这段文字也有架构。那么这些“架构”中最本质的是什么呢?我认为是有两方面:“成分”和“联系”,并且“联系”是更重要的。以“组织架构”为例,一般它会表现为森林形状,如下图
(点击放大图像)
图中每一个方块就是一个“成分”,是架构中的一个功能实体;每条边是“成分”之间的一种“联系”。例子中这个图中的“联系”更多是从属关系或者汇报关系。实际上,组织架构中还有很多“联系”没有体现在这幅图中,例如业务上下游关系、财务关系、人事关系等等。这些“成分”和“联系”的总和,构成了一个企业的组织架构。
从这点出发,我认为“架构”就是某些“成分”极其“联系”的总和,如下图:
那么,我们在设计一个架构时,无论是软件方面还是其它方面,就需要区分哪些是我要考虑的“成分”,以及这些“成分”间有哪些需要考虑的“联系”。而且只要考虑这两方面就足够了。
我们再回到组织架构这个话题上,思考一个组织架构是怎么得来的。组织架构是为企业目标服务的,因此组织架构的设计一定从企业的业务目标出发的。在设计过程中,我们按照企业的业务流程,区分出一级部门,规定每个一级部门的功能和边界;而后继续向下拆解每个一级部门到二级部门,直到规定到每一个员工的功能和边界。这是一个自顶向下的过程。这个过程,可以抽象为下面的图,我称它为“关于架构设计的元架构”,因为它也是一种“成分”和“联系”的总和。
从图中可以看出,架构设计是从某一个目标出发的,终结在符合目标的结果上,设计过程分为几个阶段:
- 抽象和设计,得出顶层设计架构。例如组织架构中一级部门的设计;
- 分治,将顶层架构拆解为更小的子架构。例如进一步设计某个一级部门的组织架构;
- 精化,规定顶层架构中的某些细节,去除不确定性,成为“细架构”。例如规定部门负责人;
- 验证和交付,检查设计出的架构是否与原始目标相吻合,如吻合则得出设计结果,否则进一步设计。
当一切结束,我们便得到了最终的成果。
“架构师”,便是执行上述设计过程的人,如下图:
这样,架构师的职责便很清晰了。他关注目标和结果,推导从目标到结果的方案和途径。而“技术管理者”,更多是职责是找到并明确团队的目标,并且带领团队完成目标,为此他需要架构师的辅助。
最后,我想谈谈架构师的主要工作内容和必备的素养。对于一个架构师来讲,日常的工作应该集中在以下几个方面:
- 分析。首先是分析目标,利用归纳法将目标转换为某一种已知的问题;其次是找出思路,利用演绎法找到解决这中问题的手段和条件。要想做好这个环节,架构师必须具备丰富的经验,熟悉相关领域的套路和定式,并且能随时举一反三;
- 设计。找出解决问题的方案和实现路径。这一环节中,架构师需要有严密的逻辑思考能力,并且能把握问题的重点和主干,懂得取舍;
- 选型。将设计方案落地,落实到具体的操作步骤上。这一环节,架构师需要关注细节,关注成本,关注团队成员的能力;
- 验证。检验产出物是否与目标相吻合。这一环节要求架构师具备极强的目标意识,时刻思考如何量化目标,如何对标目标,如何检验设计成果。
以上,就是我对架构师的理解,希望对读者有益,也希望与大家进行更多的探讨。