数据格式¶
Monolith支持多种数据格式:
ExampleBatch: 主要用于批式训练与推理,列式存储,一次存取一批样本,这样做的好处是方便做特征裁剪
Example: 主要用于流式训练,行式存储,一次存取一个样本
1. Example类格式¶
1.1 Feature定义¶
Feature 是 Example 的基础,定义如下:
message FidList {
repeated fixed64 value = 1;
}
message FloatList {
repeated float value = 1;
}
message DoubleList {
repeated double value = 1;
}
message Int64List {
repeated int64 value = 1;
}
message BytesList {
repeated bytes value = 1;
}
// Basic extracted features
message Feature {
oneof type {
FidList fid_list = 2;
FloatList float_list = 3;
DoubleList double_list = 4;
Int64List int64_list = 5;
BytesList bytes_list = 6;
}
}
说明:
离散特征会抽提成 feature id (简称 FID),对应 fid_list
稠密特征可以是 float/double/int64/bytes 等几种数据类型
1.2 ExampleBatch格式¶
ExampleBatch 格式如下:
enum FeatureListType {
INDIVIDUAL = 0; // 每个样本有独立值
SHARED = 1; // 所有样本有共享值
}
message NamedFeatureList {
string name = 1; // 特征名称
repeated Feature feature = 2; // 特征,同一batch的特征放在一起,所以是repeated
FeatureListType type = 3; // 特征类型,用于指定是否是共享特征
int32 id = 4; // 特征编号,目前未启用
}
message ExampleBatch {
repeated NamedFeatureList named_feature_list = 1; // 特征列表
int32 batch_size = 3; // batch大小
}
虽然训练阶段输入 Monolith 时为 ExampleBatch,但是由于下列原因,Monolith 会先将它转化为 Example 再处理:
ExampleBatch 不方便样本过滤、负例生成、采样等操作
ExampleBatch 并不是固定 batch size 的,上一个 ExampleBatch 的batch size 为 100,下一个可能为 125,不利于训练
1.3 Example格式¶
Example 格式如下:
message NamedFeature {
string name = 1; // 特征名称
Feature feature = 2; // 特征
int32 id = 3; // 特征编号,目前未启用
}
message Example {
repeated NamedFeature named_feature = 1; // 特征信息
repeated float label = 101; // 标签信息
}
2. 格式转换¶
Monolith支持的输入/出格式如下:
输入格式:Example/ExampleBatch
输出格式:Example