基于机器学习场景,如何搭建特征数据管理中台?

「免费学习 60+ 节公开课:投票页面,点击讲师头像」

作者 | 陈迪豪,第四范式资深架构师

编辑 | Jane

来源 | AI科技大本营(ID:rgznai100)

 

一、机器学习场景与高性能特征管理中台

 

理想的机器学习场景是给到数据,训练模型后就能直接上线服务。然而真实的 AI 应用落地过程非常复杂,并不是有数据、懂算法就可以了。

 

首先建模具有一定门槛,建模科学技术人才除了要懂机器学习算法,还要知道熟悉建模业务场景,会使用 SQL、Python 做数据处理、特征拼接、支持时序特征;建模完成到上线,要保持在线与离线一致性,实现高性能硬实时预估服务;工程上涉及特征监控、读写分离、实时特征计算,这些情况在真实的 AI 应用场景中都要考虑到。

 

以我们合作的某银行事中反欺诈场景下的性能要求为例:首先实时性要求 P99 响应时间在 20 毫秒以内 ,比大家在业务里统计的平均延时要小很多,只有 1% 的时间可以在 20 毫秒以上;二是建模特征非常复杂,在线和离线的模型特征超过1000个;三是窗口特征需要能够在实时场景中生成;四是模型迭代周期短,需要定期上线更新。

 

在这种情况下,对企业特征管理中台有什么要求?

 

1、存储和计算必须是高性能的;

2、对离线特征的支持要与在线保持一致性;

3、训练得到的模型要支持端到端的预估;

4、支持单行和时序特征;

5、预估服务支持分布式高可用。

 

其中为什么强调特征的离线在线一致性?

 

用开源软件一般可以做到的是,离线积累一部分数据,然后用开源的深度学习框架训练模型,模型上线时把模型加载进来,但是机器学习除了模型预估还包括前面的处理过程,每个离线特征要支持在线预估都需要花几倍时间进行维护,以确保离线数据到在线预估的特征数据是一致的。

 

我们如何保证离线在线一致性呢?

 

通过一个统一的特征描述语言,用户离线环境中用这种统一特征描述语言进行表示与建模,在线环境中直接使用这个建模脚本来上线。

 

 

它的基本逻辑架构:

 

1、离线阶段是模型训练阶段,使用分布式存储存储原始数据;大数据处理引擎获得数据后进行划窗,窗口有不同的聚合计算逻辑,通过聚合计算得到一系列特征,这种特征可能是跨行和跨表的;最后,生成的数据处理经过特征签名可以直接给深度机器学习框架做训练。这是离线的阶段,将数据处理部分翻译成Spark,以分布式任务的方式运行。

 

 

2、在线阶段肯定不能依赖 Spark 做实时预估,只可以使用流式接口实现近实时的计算;但因为我们有一个统一的特征描述语言,所以可以保证特征计算生成的代码与离线阶段是一样的,这样也就保证了离线在线保持了计算逻辑的一致性。

 

3、特征抽取的数据怎么来?离线阶段可以通过读分布式存储然后通过划窗来获取,AI特征管理中台中的存储组件包括一个实时特征时序数据库,通过这个时序数据库可以获取在线的窗口数据,然后实现一个高性能的模型评分服务。

 

二、特征管理中台的计算和存储核心剖析

 

这部分将主要介绍整体架构和计算、存储两大引擎。

 

 

如上图所示,整体架构的左侧是用户接口,用户可以用控制台、命令行、SDK的方式访问核心组件。底层是硬件包括 HDD、SSD、网卡等;中间层是特征管理的两个重要组件,FE特征计算与存储引擎,在线有超高性能全内存时序数据库,得到的数据可以给自研的机器学习框架使用,或者给 TensorFlow 等开源的框架使用。

 

我们的特征描述语言是什么?其实是针对机器学习场景中定制的 DSL,有针对这种语法的编译器和解析器。语法可以参考下面的例子,第 1 行代码表示创建一个窗口,通过窗口的参数可以保证后续每一行的特征计算都在一个窗口数据内,在窗口数据内可以做很多复杂的计算。第 3 行是单行计算特征,很简单,像大家用过的 Spark 或 Python 都包含了很多特征计算,如内置支持日期处理;像条件表达式这类复杂的计算,大家可以用 SQL 或者 Spark。另外,我们自己跟标准窗口不一样的部分是根据科学家反馈设计跨表的窗口计算、拼表计算特征、特殊拼表特征也可以在 DSL 中描述。

 

为什么要设计DSL?首先,机器学习产品中数据处理的逻辑是固定的,它跟 SQL 不一样。SQL是通用数据处理语言,很多方法是标准 SQL 中没有的,对条件表达式的处理或某种时间特征的计算,都是通过自定义来支持的。通过这种描述语言生成一个特征可以保证在线也能够使用 。

 

第二种接口是 SQL。SQL是目前最流行的数据处理语言,可以对全表做Partion分区,分区后可以排序或者做聚合计算,也可以做全表的数据处理,但标准的 SQL 是没办法上线的,有很多 支持SQL 的系统,如 MySQL、Spark、Hive 等,虽然支持了丰富的数据处理逻辑,但都是不可以直接上线的。

 

为什么SQL上线这么困难了?因为 SQL 的聚合计算可以是当前行,也可以是当前一段时间的窗口数据,实际上如果在 SQL 里对当前行以后的数据做聚合计算就会造成差数据穿越问题。用一个机器学习场景中的例子进行解释,你要计算当前交易是否属于欺诈交易,取得的时间是在这个时间以前某一天的时间和当前时间以后的某一个时间进行特征计算,但在实际上线时是没办法获取未来数据作为特征计算的,这种建模时就出现的穿越特征也会严重影响模型上线后的效果。

 

这种特征可以通过SQL的窗口函数来获得,我们称之为穿越特征,也就是在特征计算时是不应该引用当前行以后的数据,因为在真实线上预估中无法获取比当前行以后的数据。在我们的特征管理平台中,对于时间窗口的定义就限制了following参数必须是 Current Row,不计算当前行以后的特征。在这种限制的情况下,在线预估时就确保了窗口数据不会超过当前行,前面的数据可以通过时序特征数据库来做聚合,这种方式也保证优化后的 SQL 是符合机器学习在线预估的要求的,可以直接上线到实时预估服务中。

 

我们对 SQL 还有一些定制化拓展,例如对数据处理后的列可以做连续或者离散的特征签名计算,这是针对稠密和稀疏特征常用的签名方法。因为机器学习的输入数据不一定是大宽表,推荐系统中的输入一般都是非常稀疏离散的,这种稀疏数据结构在 SQL中是无法表示的,我们通过语法的拓展让它直接生成样本文件,这种样本文件本身支持稀疏和稠密的格式,可以直接对接开源的机器学习框架。

 

除了面向用户的特征描述语言,特征管理中台还支持 AutoML自动特征工程,用户只需输入原始的多个表数据,AutoML 程序可以对它进行自动分组与自动特征筛选,给出组合后的特征效果的评估,在一定的计算资源下进行迭代优化,最后生成SQL和特征描述语言配置,在线服务也可以直接使用导出的配置来上线。

 

在计算引擎中还有非常多的功能优化点:1、支持多行时序特征,不只是针对单行计算,还可以对多行做聚合;2、支持强类型检查,支持 Map、List 复杂结构和 Lambda 表达式;3、实现 Last Join功能,实现超高性能的多表拼接功能;4、实现定制化跨表Window功能,实现高效的跨表划窗特征生成;什么是跨表Window?就是划窗的主表数据跟获取窗口数据的副表可以不是同一个表;5、支持 TensorFlow、LightGBM 和自研究机器学习机器等;6、预热编译以及内存编译器,使用Javac的编译优化;7、支持动态加载 UDF、UDAF 等用户自定义函数和功能。

 

计算性能也有很多优化:1、优化Spark的Window实现,支持 CodeGen 函数以及跨表窗口计算;2、同一进程内的内存编译优化,充分利用 Java 编译器优化生成高性能 byte code;3、支持特征级别的异常隔离,用户在同个窗口的多个特征计算,不会因为数据异常导致特征失败,也不会影响其他特征;4、对表达式也做了重写优化,常量表达式可以直接替换,对重复计算没有结果的表可以做提前剪枝,并且复用中间表达式的变量;5、在反欺诈机器学习场景中,相同特征下与 PySpark、SparkSQL相比提升了10倍性能;6、支持 RDMA 和 FPGA 硬件加速 ,对生成样本做高性能压缩 ,高性能版本比纯软件版本提升了3倍性能。

 

上面提到的都是计算核心的组件,再说说实现高性能、高并发、时序优化的存储核心——自研的全内存分布式时序数据库。为什么是时序数据库?因为我们在机器学习场景中很多特征都是基于时窗聚合而成的,窗口的特征就要求数据按时间序列进行排序和计算。

 

对于常见的机器学习场景,例如每笔交易都需要了解前序交易的情况;IoT的场景下,需要提前获得不同设备在不同时间段类的数据信息,所以面向 AI 的时序数据库在机器学习场景中非常有价值。

 

我们的时序数据库还支持多维度的查询和聚合;支持常见的按行数的数据淘汰策略和TTL。在特征管理中台中还有基于英特尔傲腾持久内存AEP的优化,这是一种全新的存储技术,介于内存和 SSD 之间的非易失性的存储,跟写到 SSD 一样数据不会丢失,同时可以把它当成内存来用。AEP存储的成本比内存低很多,但是会像内存一样优化,实现高性能,使用AEP优化以后性能可以提高 3 倍以上。基于这种新的存储介质可以实现根据热度的分层存储,对非常热的数据可以把表放在全内存里,对没那么热的数据可以放在AEP或者硬盘存储中。

  

三、特征管理中台在生产环境的应用实践

 

在一个真实场景 B2C Antifraud 业务中,交易表原始数据表有 2 张交易表和 7 张属性表。它的数据量非常大,总体特征超过 800 个,特征包括基于卡号维度做窗口聚合等数据;或者基于设备维度来定义窗口大小和时间段。

 

模型训练需要的基础特征包括交易特征、卡特征、客户特征、商户特征以及这几个特征的交叉组合 。时序特征包括每张卡和每个设备维度所统计过去交易的最大值、最小值、数量、是不是第一次交易等。最后用到的单表有 5000 万数据,生成的特征有 19 亿维,为什么这么高维?因为用户的设备ID、所在的城市都会离散化,为了避免冲突会用使用超高维稀疏值来存,生成的总特征就有 19 亿维,需要 3T 内存来计算。

 

在特征管理中台还包括不同类型的数据和特征脚本的管理,支持远程调试环境,支持单机 的Notebook 运行;支持全流程的一键上线,上线后预估接口是原始数据表输入,不需要在原始输入上再做数据的预处理和特征抽取处理。对此,我们还提供了 Python 客户端,用户可以写 Python来执行特征抽取逻辑,也可以使用支持的SQL语法,后面可以基于这个特征描述脚本来进行模型训练和应用上线了。

 

同时,我们也支持 TensorFlow 的分布式训练和内部机器学习框架的分布式计算,模型部署只需要一个简单的命令;部署成高可用的模型预估服务,可以看到,在线预估的输入数据都是原始的表数据,训练时输入表有多少列,这里输入多少列就可以;最后预估后返回特征抽取已经模型预估的结果。

热 文 推 荐 

☞刚发布!新型病毒下,程序员可在家免费学习了!

☞中国芯片全景图,万字长文先马后看!

☞云计算的 2020:云原生崛起,重新定义软件

☞万字长文!Unix和Linux你不知道的那些历史(详解版)

☞比特币区块链将分道扬镳、Libra 苦难继续,2020 区块链进入关键时期!

用开发者的方式共克时艰!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/519395.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

十年再出发!阿里云智能总裁张建锋演讲全记录

3月21日,“十年再出发”阿里云峰会于国家会议中心正式召开。阿里云智能总裁张建锋(行癫)携核心管理团队首次悉数亮相,并对阿里云做了全面的战略解读。以下是演讲全文。 张建锋:今天是我们阿里云智能升级之后第一次和大…

文件解析工具类

package com.example.demo.util;import lombok.extern.slf4j.Slf4j;import java.io.*; import java.util.ArrayList; import java.util.List;/*** 文件解析公共工具类** author gblfy* date 2020-10-13*/ Slf4j public class FileUtil {//------------------------------------…

java简单题目_Java考点知识简单练习题

Java考点知识简单练习题Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。下面是小编为大家搜索整理的java考试强化训练题&#xff0c…

数据科学家为什要用Git?怎么用?

也许你在别的地方听说过Git。也许有人告诉过你,Git只适合软件开发人员。如果你是数据科学家,那么Git其实对你很重要。本文作者希望能够通过经验分享让你了解Git的重要性,以及如何在你的数据科学工作中使用它。 什么是Git? Git是…

抗疫进展:多家科研机构联合筛选出五种可能有效的抗病毒药物

2月3日,华中科技大学同济医学院基础医学院、华中科技大学同济医学院附属武汉儿童医院、西安交通大学第一附属医院、中科院北京基因组研究所、华为云联合科研团队宣布,筛选出五种可能对2019新型冠状病毒(2019-nCoV)有效的抗病毒药物…

GAN的一些很酷的应用

在GAN发展的最初几年里,我们取得了令人瞩目的进展。当然,现在不会是像恐怖电影里那样有邮票大小的面部照片了。2017年,Gan制作了10241024张能愚弄人才童子军的照片。在未来几年,我们可能会看到GAN生成的高质量视频,由此…

ant压缩和解压缩工具类

<!--文件压缩和解压工具类--><dependency><groupId>org.apache.ant</groupId><artifactId>ant</artifactId><version>1.7.1</version></dependency>package com.example.demo.util;import lombok.extern.slf4j.Slf4j; i…

java项目短信群发接口_JAVA实现第三方短信发送过程详解

想使代码生效需要注册&#xff1a;在muven项目里面导入jar包commons-codeccommons-codec1.4commons-httpclientcommons-httpclient3.1commons-loggingcommons-logging1.1.1org.apache.httpcomponentshttpclient4.3.1com.alibabadruid1.0.8com.alibabadruid1.0.8创建一个测试类&…

两亿人在家开会!钉钉紧急扩容1万台云服务器

2月3日是一个特殊的开工日&#xff0c;为防范疫情&#xff0c;在阿里巴巴钉钉上有超过1000万家企业组织的2亿上班族在线开工。为支持此次史无前例的办公需求&#xff0c;钉钉在阿里云上紧急扩容1万台云服务器来保障钉钉视频会议、群直播、办公协同等功能&#xff0c;保障用户流…

这些数据科学家必备的技能,你拥有哪些?

1.教育背景 88&#xff05;的数据科学家受过高等教育且拥有硕士学位&#xff0c;其中46&#xff05;拥有博士学位。虽然有些人是例外&#xff0c;但通常需要非常强大的教育背景才能拥有成为数据科学家所必需的知识深度。要想成为数据科学家&#xff0c;你可以先获得计算机科学、…

JAVA将ResultSet结果集遍历到List中

今天在使用jstl标签展示查询结果时遇到一个小问题&#xff0c;即如何将ResultSet对象传递给前台页面。 在默认情况中我们在使用数据库查询时 public List selectDataFromJdbc() throws SQLException, ClassNotFoundException {Class.forName("oracle.jdbc.driver.OracleD…

阿里敏捷教练:多团队开发一个产品的组织设计和思考

Scrum等敏捷开发框架&#xff0c;最初都是为5到9人的小团队设计的。通过保持专注和合理利用新技术&#xff0c;在相当长的时间里小团队仍然可以支撑业务发展。 随着业务成长&#xff0c;小团队的产出可能跟不上业务需要&#xff0c;团队就会面临规模化的问题。从1个团队拓展到…

10个你应该了解的Git命令(以及Git省时小窍门)

在本文中&#xff0c;我们将讨论那些作为开发人员、数据科学家或产品经理应该知道的各种各样的Git命令。并且将使用Git查看、删除和整理。此外&#xff0c;我们还将介绍如何使用Bash别名和Git编辑器配置转义Vim和节省时间的方法。 如果你不熟悉基本的git命令&#xff0c;那么在…

阿里工程师开发了一款免费工具,提升Kubernetes应用开发效率

对于使用了Kubernetes作为应用运行环境的开发者而言&#xff0c;在同一个集群中我们可以使用命名空间&#xff08;Namespace&#xff09;快速创建多套隔离环境&#xff0c;在相同命名空间下&#xff0c;服务间使用Service的内部DNS域名进行相互访问。 基于Kubernetes强大的隔离…

mongodb java spring_[Java教程]Spring 与 mongoDB 整合

[Java教程]Spring 与 mongoDB 整合02017-02-07 00:00:39首先需要引入jar包1 2 org.mongodb 3 mongodb-driver 4 3.3.0 5 6 7 org.springframework.data 8 spring-data-mongodb 9 1.9.4.RELEASE10 View Codespring中注入对象org.springframework.data.mongodb.core.MongoTemplat…

魔幻!过年在家,Java和Python程序员比工资打起来了...

Python真的野蛮生长到不行了&#xff1f;最近&#xff0c;笔者在某网站刷到一条信息&#xff0c;两个程序员在家比工资&#xff0c;竟然打起来了&#xff01;原因就是从事5年开发的Java程序员竟然工资输给了工作仅2年的Python程序员&#xff01;从上图招聘情况来了&#xff0c;…

Jmeter常用插件——梯度加压、响应时间、TPS_老版本

一、Jmeter梯度加压的jar Stepping Thread Group&#xff0c;下载方法如下&#xff1a; 1.访问网网站 https://jmeter-plugins.org/downloads/old/ 2.下载插件&#xff1a; 2.3.下载后需要解压 然后将JMeterPlugins-Standard.jar包放在jmeter安装目录的jmeter-3.0\lib\ext…

图解梯度下降背后的数学原理

敏捷在软件开发过程中是一个非常著名的术语&#xff0c;它背后的基本思想很简单&#xff1a;快速构建一些东西&#xff0c;然后得到一些反馈&#xff0c;根据反馈做出改变&#xff0c;重复此过程。目标是让产品更贴合用&#xff0c;让用户做出反馈&#xff0c;以获得设计开发出…

mysql数据迁移neo4j_neo4j数据库迁移---------Neo4j数据库导入导出的方法

Neo4j数据进行备份、还原、迁移的操作时&#xff0c;首先要关闭neo4j;/usr/share/neo4j/binneo4j stop如果出现Neo4j not running出现这种情况, Neo4j没有运行, 但是浏览器仍然可以访问neo4j数据库的情况, 直接执行导入数据后,是无法看到导入的数据库,其实这种情况下Neo4j仍在运…

rabbitmq配置文件字段spring.rabbitmq.publisher-confirms过时

spring.rabbitmq.publisher-confirms过时解决 在properties文件中确认消息报红 因为源码中过时配置级别设置了Error 新版本jar包配置换了就可以了 spring.rabbitmq.publisher-confirm-typecorrelated