跳到内容

输入特征 (↑)

input_features 部分是特征定义的列表。每个特征定义包含两个必填字段:nametype

input_features:
    -
        name: Pclass
        type: category
{
    "input_features": [{"name": "Pclass", "type": "category"}]
}

name 是数据集中特征的名称。type支持的数据类型 之一。

预处理

回顾 Ludwig 的蝴蝶框架。

img

每个输入特征可以通过 preprocessing 子部分指定其自己的预处理。

input_features:
    -
        name: Fare
        type: number
        preprocessing:
            missing_value_strategy: fill_with_mean
{
    "input_features": [
        {
            "name": "Fare",
            "type": "number",
            "preprocessing": {
                "missing_value_strategy": "fill_with_mean"
            }
        }
    ]
}

也可以为特定类型的所有特征指定预处理规则。参见 类型全局预处理

常用参数

缺失值处理策略

Ludwig 允许数据集中的任何输入特征“缺失”(在训练和预测时)。缺失值如何处理的默认行为取决于特征类型,但这种处理策略可以在每个特征配置的 preprocessing 部分进行配置

preprocessing:
    missing_value_strategy: fill_with_mean

选项

  • fill_with_const:使用 fill_value 参数指定的特定值替换缺失值。
  • fill_with_mode:使用列中最常出现的值替换缺失值。
  • fill_with_mean:使用列中值的平均值替换缺失值(仅限 number 特征)。
  • fill_with_false:使用列中的 false 值替换缺失值(仅限 binary 特征)。
  • bfill:使用输入数据集中后续行的下一个有效值替换缺失值。
  • ffill:使用输入数据集中前面行的上一个有效值替换缺失值。
  • drop_row:如果此列缺失,则从数据集中移除整行。

对于输出特征,默认策略始终是 drop_row,因为否则 Ludwig 将被迫“编造”被预测的真实值。但是,如果需要,也可以使用相同的 missing_value_stragegy 参数覆盖此设置。

编码器

每个输入特征可以配置特定的 encoder 将输入特征值映射到张量。例如,用户可能希望使用 transformersequence 特征进行编码,或使用 stacked_cnnimage 特征进行编码。不同的数据类型支持不同的编码器。请查阅特定特征类型的文档,了解该类型支持哪些编码器。

除了 nametypepreprocessing 之外的所有其他参数都将作为参数传递给编码器子部分。请注意,每个编码器可以有不同的参数,因此可以在每种数据类型的文档中找到关于特定数据类型可以使用的每个编码器的详细文档。以下是如何为一个输入特征指定特定编码器配置的示例

input_features:
    -
        name: text
        type: text
        preprocessing:
            tokenizer: space
        encoder: 
            type: bert
            reduce_output: null
            trainable: true
{
    "input_features": [
        {
            "name": "text",
            "type": "text",
            "level": "word",
            "preprocessing": {
                "word_tokenizer": "space"
            },
            "encoder": {
                "type": "bert",
                "reduce_output": None,
                "trainable": True,
            }
        }
    ]
}

编码器将原始特征值映射到张量。对于没有时间/序列维度的数据类型,通常是向量;对于具有时间/序列维度的数据类型,通常是矩阵;对于具有空间或时空维度的数据,通常是更高阶的张量。

同一个编码器的不同配置可能会返回不同阶数的张量,例如,序列编码器可能返回一个大小为 h 的向量,该向量是序列的最终向量或对序列长度进行池化后的结果;如果您将池化归约操作 (reduce_output) 指定为 None,它也可以返回一个大小为 l x h 的矩阵,其中 l 是序列长度,h 是隐藏维度。为了简单起见,大多数情况下您可以将输出想象成一个向量,但有一个 reduce_output 参数可以指定以更改默认行为。

对于初次使用的用户,我们建议从默认设置开始。

绑定编码器权重

Ludwig 提供的另一个特性是可以在不同编码器之间绑定权重。例如,如果我的模型将两个句子作为输入并返回它们蕴含的可能性,我可能希望使用同一个编码器对这两个句子进行编码。

这可以通过将一个特征的 tied 参数指定为另一个输出特征的名称来实现。例如

input_features:
    -
        name: sentence1
        type: text
    -
        name: sentence2
        type: text
        tied: sentence1
{
    "input_features": [
        {
            "name": "sentence1",
            "type": "text"
        },
        {
            "name": "sentence2",
            "type": "text",
            "tied": "sentence1"
        }
    ]
}

指定一个不存在的输入特征名称将导致错误。此外,为了能够绑定权重,两个输入特征的所有编码器参数必须相同。

也可以为特定类型的所有特征指定编码器类型和相关的编码器参数。参见 类型全局编码器