数据格式

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