配置中心

数据诊断

在推荐业务中,数据质量的好坏决定了后续的数据清洗及业务效果。数据智能诊断提供对user,item,行为表的数据的探查,发现其中隐藏的数据质量问题。为提高数据完整性以及特征质量提供辅助分析以及后续改进建议。

目前数据诊断支持 5 种诊断任务,分别为:

  • 基础统计分析:分析特征的各方面基础统计信息,如数据总量、取值数、空值数、特征取值的百分位数、特征取值频数的百分位数(包括最大值、最小值、中位数)、取值和取值频数的等距分桶数据的分布直方图等

  • 物品/用户 变化率分析:分析每天的用户或物品的增加/减少量和增加/减少率

  • 用户留存率分析:分析用户的周期(T+k天内)留存率和单天(第T+k)留存率(仅适用于行为表)

  • 两表关联分析:分析两表关联时,关联字段各自没有关联上的数量所占比例,并分析在各个维度上的关联异常

  • 异常行为分析:分析有上下游依赖的行为中,行为异常的情况,如有点击没有曝光等(仅适用于行为表)

下面以基础统计分析为例讲解诊断步骤:

  1. 新建任务

image-20230307135041346

  • 任务类型:选择基础统计分析

  • 数据表:待诊断的数据表

  • 任务名称:自定义名称

  • 分区字段:数据表的分区字段

  • Tag字段:多值类的特征字段

  • KV字段:KV 类特征字段

  • Text字段:文本类特征字段

  • 其他字段:没有特殊要求,使用默认值即可

  • 周期运行:是否每天定时运行诊断任务

  1. 执行任务

创建完成之后,勾选已有的任务,点击【数据重跑】,选择补数据周期,点击确认即可

1652957189453-b1dbe685-95f2-4c6c-bed8-efde630a9f9d

  1. 查看日志

在【任务日志】页面可以看到数据诊断任务的运行日志

1653017681737-6942aa08-dfe2-4015-82af-b891464bccd0

  1. 诊断报告

在【数据诊断/任务管理】页面,点击相应任务的诊断报告,可以查看具体任务的诊断报告

1653018054001-2e70a173-e58e-4a5f-83fb-0822420eff2f

推荐引擎

推荐引擎配置

在 pairec 推荐引擎(go 版)中, 最重要的就是 config.json 配置文件。

本模块的功能就是将配置文件的管理放到配置中心,配置文件可以在配置中心可视化管理,可以进行格式校验,以及更新的版本跟踪。

与 pairec 推荐引擎集成后,引擎可以感知到配置的变化,热更新推荐策略。某些参数需要容器重启才能有效,如 AlgoConfs、HologresConfs 等元信息配置。

服务列表

引擎开发好之后,我们想要部署到 EAS 上,或者后期引擎版本的迭代,一种方法是在 ECS 上通过 eas 脚本进行发布更新,也可以通过此页面进行版本迭代。

image-20230306110737355

  • 服务名称:自定义名称

  • 服务描述:对此服务的详细描述

  • 服务 region:要发布到哪个 region 的 EAS

  • 服务部署AK:账号的 AK 信息

  • 配置中心接口:配置中心 server 的服务接口,配置中心初始化时会自动创建。

  • 镜像名称:可以选择 PAI 团队提供的基础镜像,镜像名称为上图蓝色框内。也可以选择自定义镜像,点击右侧【选择镜像】会列出此 AK 下【容器镜像服务/个人版】中的镜像仓库名称

  • 镜像密钥:docker registry的认证信息,目前支持username:password | base64的方式,点击【设置密钥】,填入用户名密码,可以自动生成 base64 编码。

  • EAS资源组:私有资源组名称。如果接口获取不到,可以手动输入。

  • 推荐引擎配置:推荐引擎配置中的配置名称

  • EAS 配置 JSON:上面参数选择好会自动同步到此 JSON 中。也可以直接手动更改。

发布单管理

发布单管理主要是进行发布版本的控制。

image-20230306112253247

  • 选择服务:服务列表中创建的服务

  • 发布标题:发布的标题

  • 发布内容:此次发布详细的说明

  • 镜像版本:接口获取不到,可以手动输入

  • 发布人:责任人

发布之后,会发布一个预发服务,测试之后没问题,点击【测试通过】,此时可以进行生产环境的发布。

参数管理

待定。

特征平台

FeatureStore从字面意义上可以理解为“特征的存储”,但是在实际应用中,除了存储之外,其还在模型训练、模型服务、特征发现等功能。

解决了什么问题?

通常,离线和在线的数据及特征对齐工作往往会耗用大量的时间。一方面是因为离在线数据生成规则需要做到一一对应,这点在没有数据工具的服务助情况下,往往是效率低下的。并且无法利便利的应用团队和他人已有的数据成果,存在离线在线特征共享和管理困难。

由于算法是一个迭代过程,需要在特征、样本、模型调优之间多次,每次的调整在整个流程之间需要小心的保证规则的完整,这点存在很大效率负担。另外,在模型成功上线后,如果模型发生问题了,往往也是因为数据发生错误,而造成的模型服务产生问题,这里涉及到模型数据的监控以及模型数据的诊断,怎样支持这样的需求显得非常重要。所在这里可以抽象出来需要解决的主要问题:

  • 离线在线特征统一

  • 特征快速衍生迭代

  • 特征资产共享和权限

  • 特征质量和版本控制

架构概览

1656662335862-202f5f61-9457-4043-ad8f-7148f21a6855

项目管理(Project)

我们可以通过 project 可以创建多个项目空间,每个项目空间是独立的。project 里会配置基本的信息,每个 project 会对应一个 offlinestore 和 onlinestore

image-20230306102350899

  • 项目名称:自定义名称

  • 项目描述:关于 project 的详细描述

  • 离线数据源类型:目前支持 maxcompute 和 spark

  • 离线数据源:在数据源管理中定义好的数据源

  • 在线数据源类型:目前支持 hologres、igraph、mysql、redis

  • 在线数据源:在数据源管理中定义好的数据源

  • 离线数据表生命周期:表的生命周期( lifecycle )

特征实体(FeatureEntity)

FeatureEntity 描述了一组相关的特征集合。多个 FeatureView 可以关联一个 FeatureEntity。 每个Entity 都会有一个 Entity JoinId , 通过 JoinId 可以关联多个 FeatureView 特征。每一个 FeatureView 都有一个主键(索引键)来获取其下面的特征数据,但是这里的索引键可以和 JoinId 定义的名称不一样

image-20230306102950919

  • 项目名称:该特征实体所属的项目名称

  • 特征实体:特征实体的名称,如上图中填写的 user

  • join_id:多个 FeatureView 进行关联的主键,如上图中 user_id

特征检索(FeatureView)

FeatureView 指定了数据从哪里来(DataSource), 数据进入FeatureStore 需要哪些转换(特征工程/Transformation), 特征 schema (特征名称+类型),数据需要放到哪里(OnlineStore/OfflineStore)、特征meta(主键、事件时间、分区键, FeatureEntity, ttl )。

FeatureView 会分为两种类型, BatchFeatureView 和 StreamFeatureView 。 BatchFeatureView 可以把离线数据注入到 FeatureStore 中, StreamFeatureView 支持实时特征的写入。 BatchFeatureView 会把数据管理到 OfflineStore 里, 然后可以选择同步到 OnlineStore 里。StreamFeatureView 会把数据写入到 OnlineStore 里,然后同步到 OfflineStore 里, 但实际上我们会把同样的数据同时写入到里面。

FeatureView 包含多个记录,每条记录主键进行标识,每条记录还有个可选的事件时间(event_time) 字段,标识特征是何时产生的。 event_time 是可选的。 当有 event_time 时, 特征写入到 OnlineStore 时, 会判断当 event_time >= online 里的记录时, 才会更新数据。 如果没有event_time , 主键相同就会覆盖。

image-20230306103428507

  • 项目名称:此 FeatureView 所属项目(Project)

  • 特征视图名称:自定义特征视图名称(FeatureView)

  • 创建人:创建人

  • 写入方式:

    • 使用现成表注册:

      • 注册表所在数据源:注册表所在数据源

      • 注册表名称:此数据源下的表名

    • 自定义表结构:自定义字段名称,字段类型等信息

  • 同步在线特征表:是否同步到 hologres

  • 特征实体:属于哪个特征实体(FeatureEntity)

  • 特征生命周期:表的生命周期

  • 标签:描述待定

Label 表管理

label 表的字段主要由以下几部分组成, request_id(可选), entity join_id(user_id, item_id 等),特征(onDemand feature), label 字段, event_time 时间戳字段。我们单独把label表拿出来注册,方便后面使用。

image-20230306104007522

  • 项目名称:Label 所属项目(Project)

  • 创建人:创建人名称

  • Label 表所在数据源:Label 表所在的数据源,如 mysql 中的 test 库,需提前配置

  • Label 表名称:table 名

  • Label 表字段:选择表中所需要的字段

模型管理

从 offlinestore 的角度讲,我们最终是训练出模型,变成服务进行业务的预测。 那么训练的样本可以从上面的 TrainingSet 获得, 然后就是模型训练,最终会部署成服务。

image-20230306104221642

  • 项目名称:模型所属项目(Project)

  • 模型名称:自定义名称

  • 创建人:创建人

  • 特征选择:列出所选项目(Project)下的所有特征视图(FeatureView),和特征视图下的特征,选择所需特征

  • Label 表选择方式:

    • 直接选择表:会列出所属项目(Project)下的所有表

      • Label 表名称:选择所需表名

      • Label 表事件时间字段:表的时间事件字段

    • 使用预定义 Label 表:使用通过【Label 表管理注册的 label 表】

      • Label 表名称:选择注册号的 Label 表

  • 导出表名称:选择导出表的生成方式

    • 选择现有表:选择已经存在的表,并将数据写入

    • 自动创建表:重新 Create Table,并预览建表语句

任务中心

任务导出时的日志信息

工具

一致性检查

本功能用于自动化进行离在线特征一致性对比工作,排查以下问题:

  • 特征不匹配,体现在在线的特征名称与离线的特征不匹配

  • 特征类型不匹配, 相同的特征名称,在线离线类型不匹配

  • 特征缺失, 在线的特征缺失,或者没有构造出相应的特征。传入的上下文特征没有,或者在线服务没有构造出相关特征

  • 特征值不匹配,在线的特征值的处理逻辑或者方法与离线的构造不一致

  • 模型的特征处理逻辑有误, processor 在打分之前,如果需要对特征的处理,比如 easyrec, 这块特征处理涉及特征加载,特征默认值,特征的生成等等。这里通过开启 processor debug 模式,获取生成的特征,来做进一步的对比

流程图如下:

image-20230228151641778

新增一个一致性任务

image-20230228151800819

  • 任务名称:自定义任务名称

  • 关联场景:任务与哪个推荐场景进行关联

  • 采样比例:N% 的数据会进行特征重放,特征重放会把模型中详细的特征信息保存下来

  • 回流消息队列:目前仅支持 datahub

  • Datahub数据源:选择要使用的 datahub,需要在【数据源管理】中提前配置

  • 落地数据类型:会将日志信息解析为表,此处是指将表落在哪里,目前支持 maxcompute 和 data science

  • EAS 模型地址:推荐引擎当前正在使用的模型,一般配置为 VPC 地址,需要在【数据源管理】中提前配置

  • oss_arn:访问 oss 的权限信息

  • 是否使用FS:是不是选择使用 feature store(特征平台)?

    不使用需要手动配置两个特征表,使用的话只需要选择特征平台上已经配置好的信息即可

    • 否:

      • fg_json 文件名称:maxcompute 中训练模型所使用的 fg.json 文件

      • User 特征表:此处需要配置 User 特征表的表名、主键、分区字段

      • Item 特征表:此处需要配置 Item 特征表的表名、主键、分区字段

    • 是:

      • fg_json文件名称:非必填项,可以指定 maxcompute 中训练模型所使用的 fg.json 文件,不指定的情况下,会使用 fs model 的 json 文件

      • Experiment_Server地址:配置中心 server 的地址,配置中心创建时,会自动在【数据源管理】注册

      • Project名称:特征平台模块,要使用的 Project

      • Model:要使用的 model

      • UserId:user entity 的 join_id

      • ItemId:item entity 的 join_id

  • 是否特征重放: 重放特征就是打开 easyrec 的 debug 模式,可以获取到模型中特征的详细信息

    • 需要

      • 接口地址:此处需要填写引擎服务的地址+/api/feature_reply

      • EAS token: 引擎服务的 token

  • 重放消息队列:目前仅支持 datahub

  • Datahub数据源:特征重放日志信息要使用的 datahub

  • 高级设置:

    • aliyun_id:此账号的 aliyun_id

    • workflow_name:Dataworks 中的业务流程名称

    • oss bucket:oss 的路径,会将一致性工具生成的脚本上传到此路径下

配置好之后可以点【启动任务】,这里要选择和引擎对应的环境,然后点击【确认】即可

image-20230228155135120

如果此时引擎没有流量,需要手动打一些请求给引擎

推荐结果诊断

推荐接口完成后,算法同学希望可以可视化的看到推荐结果,推荐结果诊断, 用于模拟调用推荐接口,对返回的数据进行扩充,比如针对 itemid 可以增加更多想展示的内容,比如图片、视频、标题、描述等等,方便直观的感知推荐结果是否可靠。

image-20230307095152460

  • EAS 数据源:引擎的请求地址,需提前在【数据源管理】中进行配置

  • 请求数据:http 请求的 body,选择【调试模式】,会自动在 body 中加入 "debug":true 参数

  • 关联数据表:item 的元数据信息表。需要提前在【数据表管理/实验工具表】中配置

召回 ID 串诊断

这里主要是分析召回的 ID 列表是不是可靠的。这里逻辑相对简单,根据召回 id 获取到 item 的基本信息。在展现形式上,与推荐结果诊断也是一致的。

image-20230307104608048

  • 召回 ID:召回 ID 串,逗号分隔

  • 关联数据表:item 的元数据信息表。需要提前在【数据表管理/实验工具表】中配置

I2i 诊断

【I2i 诊断】其实是【召回 ID 串诊断】的扩展,不再需要手动输入召回 ID,而可以根据 u2i2i 召回和 i2i 召回将召回 ID查询出来,填充到下面方框中,其中 u2i 表和 i2i 表的格式我们是约定好的

u2i 表

字段

类型

说明

user_id

string

用户id, 保持唯一性

item_ids

string

用户浏览的 item id 列表。 支持格式: Itemid1,itemid2,itemid3

i2i 表

字段

类型

说明

item_id

string

item id , 保持唯一性

similar_item_ids

string

i2i 相似 item id 列表。 支持格式: Itemid1:score1,itemid2:score2,itemid3:score3

image-20230307105014773

  • UserId:用户 id

  • u2i 表:u2i 表,格式如上

  • i2i 表:i2i 表,格式如上

  • 召回 ID:当配置好上面几个参数之后,点击【查询 ID】,会自动填充此参数

  • 关联数据表:item 的元数据信息表。需要提前在【数据表管理/实验工具表】中配置

用户行为分析

用户行为分析 , 用于查看某个用户的历史行为,比如曝光,点击,收藏,分享等等,可以看到历史行为相关的 item 信息。

这里需要用到用户的行为表。在这里,行为表我们也是约定好的,主要字段包括如下。这里列出的是主要字段,下面的表可以扩充更多的字段。

CREATE TABLE user_behavior (
 "uid" text NOT NULL,
 "itemid" text NOT NULL,
 "event" text NOT NULL,
 "timestamp" timestamptz NOT NULL
  ......
)

image-20230307102656919

  • 用户 ID:

  • 用户行为表:用户行为表,需提前在【数据表管理】中创建

  • item 画像表:item 的画像表,需提前在【数据表管理】中创建

  • 时间范围:用户行为表中的时间范围

  • 结果数量控制:展示的数量,相当于 order by timestamp limit N

推荐接口调试

对服务发起一个 http 请求,并展示结果

image-20230307103204021

  • EAS 数据源:引擎的请求地址,需提前在【数据源管理】中进行配置

  • 请求数据:http 请求的 body

EasyRec 模型管理

基础配置

我们在使用其他模块时,如A/B实验,数据诊断等都需要填写很多相同的信息,故在此将其抽象出来,统一配置,配置好之后在其他模块直接选择即可。

AK管理

此处是对 ak 信息的管理,填入对应 AccessKeyId 和 AcessKeySecret 即可。

image-20230307103540005

点击【删除】时,如果此 AK 在其他地方已经被使用,则无法删除成功,必须先解除引用。

数据源管理

数据源管理目前支持 8 种类型:hologres,maxcompute,datahub,eas,oss,mysql,spark,kubernetes。

hologres

当数据源类型为 hologres 时

image-20230228142005027

  • 数据源名称:自定义名称

  • 网络地址:可从 hologres 控制台网络信息处获取

  • 数据库名称:db 的名称

  • 关联AK:访问此数据库需要用到的 AK 信息,需提前在 AK 管理中配置

maxcompute

当数据源类型为 maxcompute 时

image-20230228142358025

  • 数据源名称:自定义名称

  • 所在Region:实例所在的 region,如果是专有云,可以点击自定义,此时可以填入专有云的 endpoint

  • 项目名称:maxcompute 的项目名称

  • 关联AK:访问此项目需要用到的AK信息

datahub

当数据源类型为 datahub 时

image-20230228142842786

  • 数据源名称:自定义名称

  • 所在Region:实例所在的 region,如果是专有云,可以点击自定义,此时可以填入专有云的 endpoint

  • 项目名称:datahub 的项目名称

  • 关联AK:访问此项目需要用到的AK信息

eas

当数据源类型为 eas 时

image-20230228143000609

  • 数据源名称:自定义名称

  • 服务接口地址:eas 服务的地址

    • 例如: 若想访问 eas 上推荐引擎的推荐接口

      eas控制台的地址为: http://xx.cn-beijing.pai-eas.aliyuncs.com/api/predict/test_rec

      引擎中的路由地址为: api/rec/home_feed

      则此处的服务接口地址应填:http://xx.cn-beijing.pai-eas.aliyuncs.com/api/predict/test_rec/api/rec/home_feed

  • Token:访问此 eas 服务的 Token

oss

当数据源类型为 oss 时

image-20230228143308567

  • 数据源名称:自定义名称

  • 所在Region:实例所在的 region,如果是专有云,可以点击自定义,此时可以填入专有云的 endpoint

  • OSS地址:oss 的路径

  • 关联AK:访问此项目需要用到的AK信息

mysql

当数据源类型为 mysql 时

image-20230228143554398

  • 数据源名称:自定义名称

  • 数据库地址:实例的访问地址

  • 用户名:用户名

  • 密码:密码

  • 数据库名称:db 名称

  • 实例ID:非必填项,可从 rds 控制台/实例详情中获取

  • 关联AK:访问此项目需要用到的AK信息

spark

当数据源类型为 spark 时

image-20230228143842748

  • 数据源名称:自定义名称

  • 数据库地址:实例的访问地址,一般为 ip:端口 类型

  • 用户名:用户名

  • 密码:密码

  • 数据库名称:db 的名称

kubernetes

当数据源类型为 kubernetes 时

image-20230228144105358

  • 数据源名称:自定义名称

  • KubeConfig:kubernetes 集群的 Config

  • master ip:非必填项,master 的 ip

数据表管理

数据表管理分为推荐数据表、实验数据表、实验工具表,三种类型的配置是基本一样的,只是应用于不用模块,其中:

  • 推荐数据表应用于【推荐诊断】模块

  • 实验数据表应用于【A/B实验】模块

  • 实验工具表应用于【工具】模块

新增的数据表目前支持 maxcompute、hologres、spark、mysql 四种类型,配置都是基本一样的,下面以 maxcompute 表举例:

image-20230228144830052

  • 数据表名称:自定义名称

  • 数据源:【数据源管理】中配置的数据源

  • 表名称:数据库中 table 的名称

  • 字段设置:

    • 新增:可以新增一个字段,包含字段名、字段含义,字段类型,是否是维度字段。这里的【新增】只是停留在配置中心使用,并不会在数据库中为表新增字段。

    • 表内导入:将表的字段导入进来

    • 数据预览:只有 maxcompute 类型的数据表会有此选项,会跳转到 dataworks 的数据地图页面

场景管理

场景管理经常指代客户的业务场景,若要创建新的场景,如下

image-20230307092356704