数据格式¶
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