FeatureStore作为PAI产品中心化的数据管理和共享平台,用于组织、存储和管理机器学习和AI训练中使用的特征数据。FeatureStore可以方便地向多人、多团队共享特征,保证离线在线特征数据的一致性,并提供高效的在线特征访问。
什么是FeatureStore
FeatureStore是PAI平台下的特征平台管理工具,用于存储和管理离线和在线服务中的特征数据。
FeatureStore整合了阿里云上DataHub、Flink、Hologres和Tablestore等产品,提供特征管理功能。应用可以从DataHub接收用户行为日志、物品和用户实时更新的属性特征,直接同步到MaxCompute,也可以通过Flink处理后通过FeatureStore写入到相应的在线存储中。最终推荐引擎、用户增长、金融风控等应用通过调用FeatureStore SDK来访问在线存储中的特征数据。
下图展示了从MaxCompute和DataHub输入数据,经过特征计算和模型样本管理,发布到线上存储供客户端应用的过程。
基本概念
特征实体:特征实体(FeatureEntity)一组特征表集合的名称,例如在推荐场景下,可以设置两个特征实体user和item,因为所有的表特征要么属于user侧,要么属于item侧。
特征视图:特征视图(FeatureView)是一组特征,包含一组特征以及这些特征的衍生特征的信息。一个特征视图是特征实体的全量特征集合的一个子集,离线特征表和在线特征表的映射。
Join Id:Join Id是关联特征视图到特征实体的特征表字段,每个特征实体都会有一个Join Id , 通过Join Id可以关联多个特征视图的特征。
说明每一个特征视图都有一个主键(索引键)来获取其下面的特征数据,但是特征视图的索引键可以和JoinId的名称不一致。
以推荐场景为例,Join Id可以配置为user表和item表的主键user_id、item_id。
Label表:Label表是模型训练时Label所在的表,带有模型训练目标和特征实体的JoinId。在推荐场景中一般是由行为表通过
group by user_id/item_id/request_id
等操作得到。
应用场景
推荐系统和广告排序场景:使用FeatureStore集中管理用户特征和物品特征,包括用户浏览历史、购买记录和用户画像等,FeatureStore的实时特征读写能力能够提升模型效果,有助于提高广告精准度和投放效果。
搜索引擎排序场景:该场景下的特征数据包括关键词匹配度、点击率、销售量等,通过使用FeatureStore训练排序模型,对Elasticsearch/OpenSearch等搜索引擎召回结果,用召回结果请求EAS中TensorFlow模型的打分服务,根据用户的搜索意图和个人喜好,为其提供更加精准和个性化的搜索结果。
用户增长或风控场景:使用FeatureStore管理用户个人信息、交易行为和信用记录等特征数据,结合机器学习模型(例如XGB和GBDT等)进行风险评估,提高风控准确性和效率。
离线KV数据同步到线上存储:使用FeatureStore管理商品属性表和用户属性等特征数据,简化离线数据到线上存储的同步调度任务。
功能特性
多样化数据源支持
FeatureStore 管理从特征到模型的整个流程。它支持多种离线和在线数据源,您可以在其中注册和管理特征表。
支持的数据源如下:
离线数据源:MaxCompute
在线数据源:FeatureDB、Hologres、TableStore
在将特征表注册到FeatureStore后,具有以下优势:
自动同步:可以自动完成在线和离线表的构建,确保在线和离线的一致性。
节约成本:特征只需存储一份,即可在多个团队间共享,从而降低资源成本。
提升效率:FeatureStore 可以节省时间。以往导出训练表或导入数据到在线库等复杂操作,现在一行代码即可完成。
离线特征和实时特征管理
特征平台可以管理离线特征视图和实时特征视图。离线特征包括用户和物品的属性特征、统计特征;实时特征包括新用户或新物品上线,通过Flink直接写入到类似Hologres的在线存储中,也包括按照时间窗统计的特征(如1小时的点击、转发、购买数量、转化率等)。
实时统计特征和用户序列特征管理
一般模型特征的复杂度、实时性都是逐步增加的,因此管理Flink实时计算得到的实时统计特征和用户行为序列特征非常必要。FeatureStore定义了离线用户序列特征,例如用户点击过的物品ID序列。只有物品ID序列也是不够的,在模型中常使用到物品的属性特征(SideInfo),而SideInfo在线上通过网络传输数据量较大,而在EasyRec中通过FeatureStore SDK缓存物品特征,节约了推理响应时间、提高了推理性能。
自动关联与模型样本导出
可以通过PAI-FeatureStore来管理产出样本。特别是模型中用到了实时特征视图中的特征的时候,建议使用新建模型特征功能,通过该功能可能自动基于FeatureDB中记录的实时特征更新信息来得到正确的样本。通过此功能自动关联实时特征,不需要部署Callback服务。
共享新旧特征
当算法或BI研发出一组新的用户特征/物品特征的时候,可以设计新的ModelFeature关联训练集需要的新旧特征,通过FeatureStore SDK导出样本供离线训练,也可以通过FeatureStore SDK发布到线上存储供线上服务使用。当多个模型引用同一个特征视图的时候,线上存储始终只有一份。管理特征对于算法工程价特征非常友好,在增加特征迭代优化模型的时候非常有用。
提供多语言SDK
FeatureStore提供了GO/Java/Python SDK,可以帮助用户在PAI-REC和EasyRecProcessor联合解决方案中使用FeatureStore的功能;通过Java SDK帮助用户在自己的服务端(搜索、推荐、风控等引擎)中调用EasyRecProcessor或者其他模型打分的引擎;支持用户通过Python SDK访问在线存储中的数据去完成数据分析、建模等工作。
特征生产SDK
特征生产指的是定义、生成特征,用户可以很方便的用Python脚本定义特征,然后执行Python脚本产出需要的特征,最终再注册到PAI-FeatureStore平台上。特征生产的SDK是独立的,基于MaxCompute的SQL来产出特征的开源代码,来降低特征生产的复杂度;实现过程中使用天级别中间数据,当基于30天行为数据来统计用户的偏好统计特征时,可以大幅节约计算资源。
自动化特征工程
FeatureStore计划提供自动化的特征工程功能,通过机器学习技术,自动挖掘新特征,减少研发团队的手动特征工程工作量。
特征监控
FeatureStore计划提供特征的监控和报警功能,及时发现和解决特征的异常和问题,减少团队的故障排查和修复时间。
与推荐引擎EasyRec深度集成
FeatureStore和EasyRec深度集成,支持高效地进行FG(特征工程)和模型训练,并且能够直接部署到线上(EasyRec的EAS Processor),可以做到在短时间内搭建起一套推荐系统,并取得优良的效果。EasyRec能够提供物品特征表的内存Cache,并提供高效的模型打分。
EasyRec Processor中集成的FeatureStore Cpp SDK对于大规模场景有专门的优化,使用FeatureStore后:
内存占用:EasyRec Processor内置的FeatureStore Cpp SDK针对特征存储进行了优化,相比原生内存缓存,能有效节省50%的内存。尤其在处理大量特征时,节省效果更为显著,有助于降低资源消耗。
拉取特征时间:离线特征视图可将特征快速缓存至内存cache,相比在线数据源,速度快超过5倍,可以在增加速度的同时减少对在线数据源的压力。并且由于离线数据源的高稳定性,实际测试可以同时扩容至数百个EAS实例,并且每个实例都可以在几分钟内加载完所有特征。因此扩容时不会给在线存储带来很大压力。
模型打分耗时:模型评分实时从优化的缓存中提取特征,借助FeatureStore Cpp SDK的专项优化,在使用FeatureStore的情况下,tp100性能显著提升,打分稳定性增强,超时情况减少。
功能原理
FeatureStore提供数据源能力,可分别对接离线存储和在线存储产品,便于统一读写并管理离线、在线特征数据。
您可以将离线特征表、在线特征表注册至FeatureStore的特征视图中,通过特征视图汇总和映射特征数据。
您可以将Label表存储在离线存储MaxCompute中,通过离线数据源注册至FeatureStore中,通过注册后的FeatureStore Label表映射实际Label表数据。
FeatureStore提供特征项目和特征实体功能,通过特征实体的Join Id来关联各个项目中的特征视图,将一个特征实体的所有特征进行关联,最终结合Label表产出模型特征表Train Set表,并将Train Set表存储在MaxCompute中。
地域与可用区
FeatureStore支持的地域包括:
华北2(北京)、华东2(上海)、华东1(杭州)、华南1(深圳)、中国(香港)、新加坡、美国(硅谷)、美国(弗吉尼亚)。