跳到内容

⇅ 序列特征

预处理

序列特征被转换为一个整数矩阵,大小为 n x l(其中 n 是行数,l 是最长序列长度和 max_sequence_length 参数之间的最小值),并添加到 HDF5 文件中,其键名反映了数据集中的列名。每个序列在内部被映射为一个整数列表。首先,分词器将每个序列转换为一个令牌列表(默认的分词方式是按空格分割)。然后,构建一个字典,将每个唯一令牌映射到其在数据集列中的频率。令牌按频率排序,并从最常见到最稀有分配一个连续的整数 ID。Ludwig 使用 <PAD><UNK><SOS><EOS> 特殊符号分别表示填充、未知、开始和结束,这与常见的自然语言处理深度学习实践一致。特殊符号也可以在预处理配置中手动设置。列名被添加到 JSON 文件中,并附带一个相关的字典,其中包含

  1. 从整数到字符串的映射 (idx2str)
  2. 从字符串到 ID 的映射 (str2idx)
  3. 从字符串到频率的映射 (str2freq)
  4. 所有序列的最大长度 (max_sequence_length)
  5. 其他预处理信息(如何填充缺失值以及使用哪个令牌填充缺失值)
preprocessing:
    tokenizer: space
    sequence_length: null
    max_sequence_length: 256
    missing_value_strategy: fill_with_const
    most_common: 20000
    lowercase: false
    fill_value: <UNK>
    ngram_size: 2
    padding_symbol: <PAD>
    unknown_symbol: <UNK>
    padding: right
    cache_encoder_embeddings: false
    vocab_file: null

参数

  • tokenizer (default: space) : 定义如何将数据集列的原始字符串内容映射到元素序列。
  • sequence_length (default: null) : 序列的期望长度(令牌数)。长于此值的序列将被截断,短于此值的序列将被填充。如果为 None,序列长度将从训练数据集中推断。
  • max_sequence_length (default: 256) : 序列的最大长度(令牌数)。长于此值的序列将被截断。当 sequence_length 设置为 None 时,这是一种有用的临时措施。如果为 None,最大序列长度将从训练数据集中推断。
  • missing_value_strategy (default: fill_with_const) : 当文本列中存在缺失值时采取的策略。选项:fill_with_const, fill_with_mode, bfill, ffill, drop_row。详情请参阅缺失值策略
  • most_common (default: 20000): 词汇表中最多保留的常用令牌数量。如果数据量超过此数量,最不常见的符号将被视为未知。
  • lowercase (default: false): 如果为 true,在分词之前将字符串转换为小写。选项:true, false
  • fill_value (default: <UNK>): 如果缺失值策略是 fill_with_const,用于替换缺失值的值。
  • ngram_size (default: 2): 使用 ngram 分词器时的 n-gram 大小(例如,2 = bigram,3 = trigram 等)。
  • padding_symbol (default: <PAD>): 用作填充符号的字符串。此特殊令牌在词汇表中映射到整数 ID 0。
  • unknown_symbol (default: <UNK>): 用作未知占位符的字符串。此特殊令牌在词汇表中映射到整数 ID 1。
  • padding (default: right): 填充方向。选项:left, right
  • cache_encoder_embeddings (default: false): 在预处理中计算编码器嵌入,显著加快训练时间。选项:true, false
  • vocab_file (default: null): 指向包含序列词汇表的 UTF-8 编码文件的文件路径字符串。每行中,第一个字符串直到 或被视为一个单词。

预处理参数也可以在类型全局预处理部分中一次性定义并应用于所有序列输入特征。

输入特征

序列特征有多种编码器,每种编码器都有自己的参数。输入的大小为 b,而输出的大小为 b x h,其中 b 是批处理大小,h 是编码器输出的维度。如果需要序列中每个元素的表示(例如用于标注或使用注意力机制),可以将参数 reduce_output 指定为 null,输出将是一个 b x s x h 的张量,其中 s 是序列的长度。一些编码器由于其内部工作原理,可能需要指定额外的参数才能获得序列中每个元素的表示。例如,parallel_cnn 编码器默认会进行池化和展平序列维度,然后将展平的向量通过全连接层,因此为了获得完整的序列张量,必须指定 reduce_output: null

在特征级别指定的编码器参数包括

  • tied (default null): 另一个输入特征的名称,用于绑定编码器的权重。它需要是相同类型且具有相同编码器参数的特征名称。

输入特征列表中的序列特征条目示例

name: sequence_column_name
type: sequence
tied: null
encoder: 
    type: stacked_cnn

可用的编码器参数

  • type (default parallel_cnn): 用于编码序列的编码器名称,可以是 embed, parallel_cnn, stacked_cnn, stacked_parallel_cnn, rnn, cnnrnn, transformerpassthrough(等同于 nullNone)之一。

编码器类型和编码器参数也可以在类型全局编码器部分中一次性定义并应用于所有序列输入特征。

编码器

嵌入编码器

graph LR
  A["12\n7\n43\n65\n23\n4\n1"] --> B["emb_12\nemb__7\nemb_43\nemb_65\nemb_23\nemb__4\nemb__1"];
  B --> C["Aggregation\n Reduce\n Operation"];
  C --> ...;

嵌入编码器只是将输入序列中的每个令牌映射到嵌入,创建一个大小为 b x s x h 的张量,其中 b 是批处理大小,s 是序列长度,h 是嵌入大小。张量沿着 s 维度被降维,以获得批处理中每个元素的大小为 h 的单个向量。如果您想输出完整的 b x s x h 张量,可以指定 reduce_output: null

encoder:
    type: embed
    dropout: 0.0
    embedding_size: 256
    representation: dense
    weights_initializer: uniform
    reduce_output: sum
    embeddings_on_cpu: false
    embeddings_trainable: true
    pretrained_embeddings: null

参数

  • dropout (default: 0.0) : 应用于嵌入的 dropout 率。增加 dropout 是一种常见的正则化形式,用于对抗过拟合。dropout 以元素被置零的概率表示(0.0 表示没有 dropout)。
  • embedding_size (default: 256) : 最大嵌入大小。对于 dense 表示,实际大小将是 min(词汇表大小, embedding_size),对于 sparse 编码,实际大小将正好是 vocabulary_size,其中 vocabulary_size 是训练集输入列中出现的唯一字符串数量加上特殊令牌数量 (<UNK>, <PAD>, <SOS>, <EOS>)。
  • representation (default: dense): 嵌入的表示方式。dense 表示嵌入随机初始化,sparse 表示嵌入初始化为独热编码。选项:dense, sparse
  • weights_initializer (default: uniform): 权重矩阵的初始化器。选项:uniform, normal, constant, ones, zeros, eye, dirac, xavier_uniform, xavier_normal, kaiming_uniform, kaiming_normal, orthogonal, sparse, identity。或者,可以指定一个字典,其中包含标识初始化器类型的键 type 以及其参数的其他键,例如 {type: normal, mean: 0, stddev: 0}。有关每个初始化器的参数描述,请参阅 torch.nn.init

  • reduce_output (default: sum): 如果张量秩大于 2,如何沿 s 序列长度维度对输出张量进行降维。选项:last, sum, mean, avg, max, concat, attention, none, None, null

  • embeddings_on_cpu (default: false): 是否强制将嵌入矩阵放置在常规内存中并由 CPU 解析。默认情况下,如果使用 GPU,嵌入矩阵存储在 GPU 内存中,因为它可以实现更快的访问,但在某些情况下,嵌入矩阵可能太大。此参数强制将嵌入矩阵放置在常规内存中,并使用 CPU 进行嵌入查找,由于 CPU 和 GPU 内存之间的数据传输,这会稍微减慢过程。选项:true, false
  • embeddings_trainable (default: true): 如果为 true,嵌入在训练过程中进行训练;如果为 false,嵌入固定不变。这在加载预训练嵌入以避免微调它们时可能很有用。此参数仅当 representationdense 时有效;sparse 独热编码不可训练。选项:true, false

  • pretrained_embeddings (default: null): 包含预训练嵌入的文件的路径。默认情况下,dense 嵌入是随机初始化的,但此参数允许指定一个包含 GloVe 格式嵌入的文件路径。加载包含嵌入的文件时,只保留词汇表中存在的带有标签的嵌入,其余的被丢弃。如果词汇表包含在嵌入文件中没有匹配项的字符串,它们的嵌入将使用所有其他嵌入的平均值加上一些随机噪声进行初始化,以使它们彼此不同。此参数仅在 representationdense 时有效。

并行 CNN 编码器

graph LR
  A["12\n7\n43\n65\n23\n4\n1"] --> C["emb_12\nemb__7\nemb_43\nemb_65\nemb_23\nemb__4\nemb__1"];
  C --> D1["1D Conv\n Width 2"] --> E1["Pool"];
  C --> D2["1D Conv\n Width 3"] --> E2["Pool"];
  C --> D3["1D Conv\n Width 4"] --> E3["Pool"];
  C --> D4["1D Conv\n Width 5"] --> E4["Pool"];
  E1 --> F["Concat"] --> G["Fully\n Connected\n Layers"] --> H["..."];
  E2 --> F;
  E3 --> F;
  E4 --> F;

并行 CNN 编码器的灵感来自 Yoon Kim 的用于句子分类的卷积神经网络。它的工作原理是先将输入令牌序列 b x s(其中 b 是批处理大小,s 是序列长度)映射到嵌入序列,然后将嵌入通过多个具有不同滤波器大小的并行一维卷积层(默认为 4 个层,滤波器大小分别为 2、3、4 和 5),接着进行最大池化和拼接。将并行卷积层输出拼接得到的单个向量通过一堆全连接层,并作为大小为 b x h 的张量返回,其中 h 是最后一个全连接层的输出大小。如果您想输出完整的 b x s x h 张量,可以指定 reduce_output: null

encoder:
    type: parallel_cnn
    dropout: 0.0
    embedding_size: 256
    num_conv_layers: null
    output_size: 256
    activation: relu
    filter_size: 3
    norm: null
    representation: dense
    use_bias: true
    bias_initializer: zeros
    weights_initializer: xavier_uniform
    embeddings_on_cpu: false
    embeddings_trainable: true
    reduce_output: sum
    conv_layers: null
    pool_function: max
    pool_size: null
    norm_params: null
    num_fc_layers: null
    fc_layers: null
    pretrained_embeddings: null
    num_filters: 256

参数

  • dropout (default: 0.0) : 应用于嵌入的 dropout 率。增加 dropout 是一种常见的正则化形式,用于对抗过拟合。dropout 以元素被置零的概率表示(0.0 表示没有 dropout)。
  • embedding_size (default: 256) : 最大嵌入大小。对于 dense 表示,实际大小将是 min(词汇表大小, embedding_size),对于 sparse 编码,实际大小将正好是 vocabulary_size,其中 vocabulary_size 是训练集输入列中出现的唯一字符串数量加上特殊令牌数量 (<UNK>, <PAD>, <SOS>, <EOS>)。
  • num_conv_layers (default: null) : 当 conv_layersnull 时,堆叠的卷积层数量。
  • output_size (default: 256) : 将用于每一层的默认 output_size。
  • activation (default: relu): 将用于每一层的默认激活函数。选项:elu, leakyRelu, logSigmoid, relu, sigmoid, tanh, softmax, null
  • filter_size (default: 3): 一维卷积滤波器的尺寸。它指示了一维卷积滤波器的宽度。
  • norm (default: null): 将用于每一层的默认归一化方式。选项:batch, layer, null
  • representation (default: dense): 嵌入的表示方式。dense 表示嵌入随机初始化,sparse 表示嵌入初始化为独热编码。选项:dense, sparse
  • use_bias (default: true): 是否使用偏置向量。选项:true, false
  • bias_initializer (default: zeros): 偏置向量的初始化器。选项:uniform, normal, constant, ones, zeros, eye, dirac, xavier_uniform, xavier_normal, kaiming_uniform, kaiming_normal, orthogonal, sparse, identity。或者,可以指定一个字典,其中包含标识初始化器类型的键 type 以及其参数的其他键,例如 {type: normal, mean: 0, stddev: 0}。有关每个初始化器的参数描述,请参阅 torch.nn.init

  • weights_initializer (default: xavier_uniform): 权重矩阵的初始化器。选项:uniform, normal, constant, ones, zeros, eye, dirac, xavier_uniform, xavier_normal, kaiming_uniform, kaiming_normal, orthogonal, sparse, identity。或者,可以指定一个字典,其中包含标识初始化器类型的键 type 以及其参数的其他键,例如 {type: normal, mean: 0, stddev: 0}。有关每个初始化器的参数描述,请参阅 torch.nn.init

  • embeddings_on_cpu (default: false): 是否强制将嵌入矩阵放置在常规内存中并由 CPU 解析。默认情况下,如果使用 GPU,嵌入矩阵存储在 GPU 内存中,因为它可以实现更快的访问,但在某些情况下,嵌入矩阵可能太大。此参数强制将嵌入矩阵放置在常规内存中,并使用 CPU 进行嵌入查找,由于 CPU 和 GPU 内存之间的数据传输,这会稍微减慢过程。选项:true, false

  • embeddings_trainable (default: true): 如果为 true,嵌入在训练过程中进行训练;如果为 false,嵌入固定不变。这在加载预训练嵌入以避免微调它们时可能很有用。此参数仅当 representationdense 时有效;sparse 独热编码不可训练。选项:true, false
  • reduce_output (default: sum): 如果张量秩大于 2,如何沿 s 序列长度维度对输出张量进行降维。选项:last, sum, mean, avg, max, concat, attention, none, None, null
  • conv_layers (default: null): 包含所有卷积层参数的字典列表。列表的长度决定了堆叠卷积层的数量,每个字典的内容决定了特定层的参数。每个可用层的参数有:activation, dropout, norm, norm_params, num_filters, filter_size, strides, padding, dilation_rate, use_bias, pool_function, pool_padding, pool_size, pool_strides, bias_initializer, weights_initializer。如果字典中缺少任何这些值,将使用编码器参数中指定的默认值。如果 conv_layersnum_conv_layers 都为 null,则会为 conv_layers 分配一个默认列表,其值为 [{filter_size: 7, pool_size: 3}, {filter_size: 7, pool_size: 3}, {filter_size: 3, pool_size: null}, {filter_size: 3, pool_size: null}, {filter_size: 3, pool_size: null}, {filter_size: 3, pool_size: 3}]

  • pool_function (default: max): 要使用的池化函数。max 将选择最大值。average, avg, 或 mean 将计算平均值。选项:last, sum, mean, avg, max, concat, attention, none, None, null

  • pool_size (default: null): 将用于每一层的默认 pool_size。如果 conv_layers 中尚未指定 pool_size,则这是将用于每一层的默认 pool_size。它指示了在卷积操作后将沿 s 序列维度执行的最大池化的大小。
  • norm_params (default: null): 如果 norm 是 batchlayer,则使用的参数。
  • num_fc_layers (default: null): 要使用的并行全连接层数量。
  • fc_layers (default: null): 包含每个全连接层参数的字典列表。

  • pretrained_embeddings (default: null): 包含预训练嵌入的文件的路径。默认情况下,dense 嵌入是随机初始化的,但此参数允许指定一个包含 GloVe 格式嵌入的文件路径。加载包含嵌入的文件时,只保留词汇表中存在的带有标签的嵌入,其余的被丢弃。如果词汇表包含在嵌入文件中没有匹配项的字符串,它们的嵌入将使用所有其他嵌入的平均值加上一些随机噪声进行初始化,以使它们彼此不同。此参数仅在 representationdense 时有效。

  • num_filters (default: 256): 滤波器数量,以及相应的一维卷积输出通道数量。

堆叠 CNN 编码器

graph LR
  A["12\n7\n43\n65\n23\n4\n1"] --> B["emb_12\nemb__7\nemb_43\nemb_65\nemb_23\nemb__4\nemb__1"];
  B --> C["1D Conv Layers\n Different Widths"];
  C --> D["Fully\n Connected\n Layers"];
  D --> ...;

堆叠 CNN 编码器的灵感来自 Xiang Zhang 等人的用于文本分类的字符级卷积网络。它的工作原理是先将输入令牌序列 b x s(其中 b 是批处理大小,s 是序列长度)映射到嵌入序列,然后将嵌入通过具有不同滤波器大小的一堆一维卷积层(默认为 6 个层,滤波器大小分别为 7、7、3、3、3 和 3),接着是一个可选的最终池化操作和展平操作。将展平得到的单个向量通过一堆全连接层,并作为大小为 b x h 的张量返回,其中 h 是最后一个全连接层的输出大小。如果您想输出完整的 b x s x h 张量,可以将所有 conv_layerspool_size 指定为 null,并将 reduce_output 指定为 null。如果 pool_size 的值不为 nullreduce_outputnull,则返回的张量形状将是 b x s' x h,其中 s' 是最后一个卷积层输出的宽度。

encoder:
    type: stacked_cnn
    dropout: 0.0
    num_conv_layers: null
    embedding_size: 256
    output_size: 256
    activation: relu
    filter_size: 3
    strides: 1
    norm: null
    representation: dense
    conv_layers: null
    pool_function: max
    pool_size: null
    dilation_rate: 1
    pool_strides: null
    pool_padding: same
    use_bias: true
    bias_initializer: zeros
    weights_initializer: xavier_uniform
    embeddings_on_cpu: false
    embeddings_trainable: true
    reduce_output: sum
    norm_params: null
    num_fc_layers: null
    fc_layers: null
    num_filters: 256
    padding: same
    pretrained_embeddings: null

参数

  • dropout (default: 0.0) : 应用于嵌入的 dropout 率。增加 dropout 是一种常见的正则化形式,用于对抗过拟合。dropout 以元素被置零的概率表示(0.0 表示没有 dropout)。
  • num_conv_layers (default: null) : 当 conv_layersnull 时,堆叠的卷积层数量。
  • embedding_size (default: 256) : 最大嵌入大小。对于 dense 表示,实际大小将是 min(词汇表大小, embedding_size),对于 sparse 编码,实际大小将正好是 vocabulary_size,其中 vocabulary_size 是训练集输入列中出现的唯一字符串数量加上特殊令牌数量 (<UNK>, <PAD>, <SOS>, <EOS>)。
  • output_size (default: 256) : 将用于每一层的默认 output_size。
  • activation (default: relu): 将用于每一层的默认激活函数。选项:elu, leakyRelu, logSigmoid, relu, sigmoid, tanh, softmax, null
  • filter_size (default: 3): 一维卷积滤波器的尺寸。它指示了一维卷积滤波器的宽度。
  • strides (default: 1): 卷积的步长。
  • norm (default: null): 将用于每一层的默认归一化方式。选项:batch, layer, null
  • representation (default: dense): 嵌入的表示方式。dense 表示嵌入随机初始化,sparse 表示嵌入初始化为独热编码。选项:dense, sparse
  • conv_layers (default: null): 包含所有卷积层参数的字典列表。列表的长度决定了堆叠卷积层的数量,每个字典的内容决定了特定层的参数。每个可用层的参数有:activation, dropout, norm, norm_params, num_filters, filter_size, strides, padding, dilation_rate, use_bias, pool_function, pool_padding, pool_size, pool_strides, bias_initializer, weights_initializer。如果字典中缺少任何这些值,将使用编码器参数中指定的默认值。如果 conv_layersnum_conv_layers 都为 null,则会为 conv_layers 分配一个默认列表,其值为 [{filter_size: 7, pool_size: 3}, {filter_size: 7, pool_size: 3}, {filter_size: 3, pool_size: null}, {filter_size: 3, pool_size: null}, {filter_size: 3, pool_size: null}, {filter_size: 3, pool_size: 3}]

  • pool_function (default: max): 要使用的池化函数。max 将选择最大值。average, avg, 或 mean 将计算平均值。选项:last, sum, mean, avg, max, concat, attention, none, None, null

  • pool_size (default: null): 将用于每一层的默认 pool_size。如果 conv_layers 中尚未指定 pool_size,则这是将用于每一层的默认 pool_size。它指示了在卷积操作后将沿 s 序列维度执行的最大池化的大小。
  • dilation_rate (default: 1): 空洞卷积使用的空洞率。
  • pool_strides (default: null): 缩小的因子。
  • pool_padding (default: same): 要使用的填充方式。选项:valid, same
  • use_bias (default: true): 是否使用偏置向量。选项:true, false
  • bias_initializer (default: zeros): 偏置向量的初始化器。选项:uniform, normal, constant, ones, zeros, eye, dirac, xavier_uniform, xavier_normal, kaiming_uniform, kaiming_normal, orthogonal, sparse, identity。或者,可以指定一个字典,其中包含标识初始化器类型的键 type 以及其参数的其他键,例如 {type: normal, mean: 0, stddev: 0}。有关每个初始化器的参数描述,请参阅 torch.nn.init

  • weights_initializer (default: xavier_uniform): 权重矩阵的初始化器。选项:uniform, normal, constant, ones, zeros, eye, dirac, xavier_uniform, xavier_normal, kaiming_uniform, kaiming_normal, orthogonal, sparse, identity。或者,可以指定一个字典,其中包含标识初始化器类型的键 type 以及其参数的其他键,例如 {type: normal, mean: 0, stddev: 0}。有关每个初始化器的参数描述,请参阅 torch.nn.init

  • embeddings_on_cpu (default: false): 是否强制将嵌入矩阵放置在常规内存中并由 CPU 解析。默认情况下,如果使用 GPU,嵌入矩阵存储在 GPU 内存中,因为它可以实现更快的访问,但在某些情况下,嵌入矩阵可能太大。此参数强制将嵌入矩阵放置在常规内存中,并使用 CPU 进行嵌入查找,由于 CPU 和 GPU 内存之间的数据传输,这会稍微减慢过程。选项:true, false

  • embeddings_trainable (default: true): 如果为 true,嵌入在训练过程中进行训练;如果为 false,嵌入固定不变。这在加载预训练嵌入以避免微调它们时可能很有用。此参数仅当 representationdense 时有效;sparse 独热编码不可训练。选项:true, false
  • reduce_output (default: sum): 如果张量秩大于 2,如何沿 s 序列长度维度对输出张量进行降维。选项:last, sum, mean, avg, max, concat, attention, none, None, null
  • norm_params (default: null): 如果 norm 是 batchlayer,则使用的参数。
  • num_fc_layers (default: null): 要使用的并行全连接层数量。
  • fc_layers (default: null): 包含每个全连接层参数的字典列表。

  • num_filters (default: 256): 滤波器数量,以及相应的一维卷积输出通道数量。

  • padding (default: same): 要使用的填充方式。选项:valid, same

  • pretrained_embeddings (default: null): 包含预训练嵌入的文件的路径。默认情况下,dense 嵌入是随机初始化的,但此参数允许指定一个包含 GloVe 格式嵌入的文件路径。加载包含嵌入的文件时,只保留词汇表中存在的带有标签的嵌入,其余的被丢弃。如果词汇表包含在嵌入文件中没有匹配项的字符串,它们的嵌入将使用所有其他嵌入的平均值加上一些随机噪声进行初始化,以使它们彼此不同。此参数仅在 representationdense 时有效。

堆叠并行 CNN 编码器

graph LR
  A["12\n7\n43\n65\n23\n4\n1"] --> C["emb_12\nemb__7\nemb_43\nemb_65\nemb_23\nemb__4\nemb__1"];
  C --> D1["1D Conv\n Width 2"] --> E["Concat"];
  C --> D2["1D Conv\n Width 3"] --> E;
  C --> D3["1D Conv\n Width 4"] --> E;
  C --> D4["1D Conv\n Width 5"] --> E;
  E --> F["..."];
  F --> G1["1D Conv\n Width 2"] --> H["Concat"];
  F --> G2["1D Conv\n Width 3"] --> H;
  F --> G3["1D Conv\n Width 4"] --> H;
  F --> G4["1D Conv\n Width 5"] --> H;
  H --> I["Pool"] --> J["Fully\n Connected\n Layers"] --> K["..."];

堆叠并行 CNN 编码器是并行 CNN 和堆叠 CNN 编码器的组合,其中堆叠的每一层都由并行卷积层组成。它的工作原理是先将输入令牌序列 b x s(其中 b 是批处理大小,s 是序列长度)映射到嵌入序列,然后将嵌入通过一堆具有不同滤波器大小的多个并行一维卷积层,接着是一个可选的最终池化操作和展平操作。将展平得到的单个向量通过一堆全连接层,并作为大小为 b x h 的张量返回,其中 h 是最后一个全连接层的输出大小。如果您想输出完整的 b x s x h 张量,可以指定 reduce_output: null

encoder:
    type: stacked_parallel_cnn
    dropout: 0.0
    embedding_size: 256
    output_size: 256
    activation: relu
    filter_size: 3
    norm: null
    representation: dense
    num_stacked_layers: null
    pool_function: max
    pool_size: null
    use_bias: true
    bias_initializer: zeros
    weights_initializer: xavier_uniform
    embeddings_on_cpu: false
    embeddings_trainable: true
    reduce_output: sum
    norm_params: null
    num_fc_layers: null
    fc_layers: null
    stacked_layers: null
    num_filters: 256
    pretrained_embeddings: null

参数

  • dropout (default: 0.0) : 应用于嵌入的 dropout 率。增加 dropout 是一种常见的正则化形式,用于对抗过拟合。dropout 以元素被置零的概率表示(0.0 表示没有 dropout)。
  • embedding_size (default: 256) : 最大嵌入大小。对于 dense 表示,实际大小将是 min(词汇表大小, embedding_size),对于 sparse 编码,实际大小将正好是 vocabulary_size,其中 vocabulary_size 是训练集输入列中出现的唯一字符串数量加上特殊令牌数量 (<UNK>, <PAD>, <SOS>, <EOS>)。
  • output_size (default: 256) : 将用于每一层的默认 output_size。
  • activation (default: relu): 将用于每一层的默认激活函数。选项:elu, leakyRelu, logSigmoid, relu, sigmoid, tanh, softmax, null
  • filter_size (default: 3): 一维卷积滤波器的尺寸。它指示了一维卷积滤波器的宽度。
  • norm (default: null): 将用于每一层的默认归一化方式。选项:batch, layer, null
  • representation (default: dense): 嵌入的表示方式。dense 表示嵌入随机初始化,sparse 表示嵌入初始化为独热编码。选项:dense, sparse
  • num_stacked_layers (default: null): 如果 stacked_layers 为 null,则这是并行卷积层堆叠中的元素数量。
  • pool_function (default: max): 要使用的池化函数。max 将选择最大值。average, avg, 或 mean 将计算平均值。选项:last, sum, mean, avg, max, concat, attention, none, None, null
  • pool_size (default: null): 将用于每一层的默认 pool_size。如果 conv_layers 中尚未指定 pool_size,则这是将用于每一层的默认 pool_size。它指示了在卷积操作后将沿 s 序列维度执行的最大池化的大小。
  • use_bias (default: true): 是否使用偏置向量。选项:true, false
  • bias_initializer (default: zeros): 偏置向量的初始化器。选项:uniform, normal, constant, ones, zeros, eye, dirac, xavier_uniform, xavier_normal, kaiming_uniform, kaiming_normal, orthogonal, sparse, identity。或者,可以指定一个字典,其中包含标识初始化器类型的键 type 以及其参数的其他键,例如 {type: normal, mean: 0, stddev: 0}。有关每个初始化器的参数描述,请参阅 torch.nn.init

  • weights_initializer (default: xavier_uniform): 权重矩阵的初始化器。选项:uniform, normal, constant, ones, zeros, eye, dirac, xavier_uniform, xavier_normal, kaiming_uniform, kaiming_normal, orthogonal, sparse, identity。或者,可以指定一个字典,其中包含标识初始化器类型的键 type 以及其参数的其他键,例如 {type: normal, mean: 0, stddev: 0}。有关每个初始化器的参数描述,请参阅 torch.nn.init

  • embeddings_on_cpu (default: false): 是否强制将嵌入矩阵放置在常规内存中并由 CPU 解析。默认情况下,如果使用 GPU,嵌入矩阵存储在 GPU 内存中,因为它可以实现更快的访问,但在某些情况下,嵌入矩阵可能太大。此参数强制将嵌入矩阵放置在常规内存中,并使用 CPU 进行嵌入查找,由于 CPU 和 GPU 内存之间的数据传输,这会稍微减慢过程。选项:true, false

  • embeddings_trainable (default: true): 如果为 true,嵌入在训练过程中进行训练;如果为 false,嵌入固定不变。这在加载预训练嵌入以避免微调它们时可能很有用。此参数仅当 representationdense 时有效;sparse 独热编码不可训练。选项:true, false
  • reduce_output (default: sum): 如果张量秩大于 2,如何沿 s 序列长度维度对输出张量进行降维。选项:last, sum, mean, avg, max, concat, attention, none, None, null
  • norm_params (default: null): 如果 norm 是 batchlayer,则使用的参数。
  • num_fc_layers (default: null): 要使用的并行全连接层数量。
  • fc_layers (default: null): 包含每个全连接层参数的字典列表。

  • stacked_layers (default: null): 一个嵌套的字典列表,其中包含并行卷积层堆叠的参数。列表的长度决定了堆叠的并行卷积层数量,子列表的长度决定了并行卷积层的数量,每个字典的内容决定了特定层的参数。

  • num_filters (default: 256): 滤波器数量,以及相应的一维卷积输出通道数量。

  • pretrained_embeddings (default: null): 包含预训练嵌入的文件的路径。默认情况下,dense 嵌入是随机初始化的,但此参数允许指定一个包含 GloVe 格式嵌入的文件路径。加载包含嵌入的文件时,只保留词汇表中存在的带有标签的嵌入,其余的被丢弃。如果词汇表包含在嵌入文件中没有匹配项的字符串,它们的嵌入将使用所有其他嵌入的平均值加上一些随机噪声进行初始化,以使它们彼此不同。此参数仅在 representationdense 时有效。

RNN 编码器

graph LR
  A["12\n7\n43\n65\n23\n4\n1"] --> B["emb_12\nemb__7\nemb_43\nemb_65\nemb_23\nemb__4\nemb__1"];
  B --> C["RNN Layers"];
  C --> D["Fully\n Connected\n Layers"];
  D --> ...;

RNN 编码器的工作原理是先将输入令牌序列 b x s(其中 b 是批处理大小,s 是序列长度)映射到嵌入序列,然后将嵌入通过一堆循环层(默认为 1 层),接着是一个降维操作,该操作默认只返回最后一个输出,但可以执行其他降维函数。如果您想输出完整的 b x s x h(其中 h 是最后一个 RNN 层的输出大小),可以指定 reduce_output: null

encoder:
    type: rnn
    dropout: 0.0
    cell_type: rnn
    num_layers: 1
    state_size: 256
    embedding_size: 256
    output_size: 256
    norm: null
    num_fc_layers: 0
    fc_dropout: 0.0
    recurrent_dropout: 0.0
    activation: tanh
    fc_activation: relu
    recurrent_activation: sigmoid
    representation: dense
    unit_forget_bias: true
    recurrent_initializer: orthogonal
    use_bias: true
    bias_initializer: zeros
    weights_initializer: xavier_uniform
    embeddings_on_cpu: false
    embeddings_trainable: true
    reduce_output: last
    norm_params: null
    fc_layers: null
    bidirectional: false
    pretrained_embeddings: null

参数

  • dropout (default: 0.0) : Dropout 率。增加 dropout 是一种常见的正则化形式,用于对抗过拟合。dropout 以元素被置零的概率表示(0.0 表示没有 dropout)。
  • cell_type (default: rnn) : 要使用的循环单元类型。可用值有:rnn, lstm, gru。有关单元之间差异的参考,请参阅 torch.nn 循环层。选项:rnn, lstm, gru
  • num_layers (default: 1) : 堆叠的循环层数量。
  • state_size (default: 256) : RNN 状态的大小。
  • embedding_size (default: 256) : 最大嵌入大小。对于 dense 表示,实际大小将是 min(词汇表大小, embedding_size),对于 sparse 编码,实际大小将正好是 vocabulary_size,其中 vocabulary_size 是训练集输入列中出现的唯一字符串数量加上特殊令牌数量 (<UNK>, <PAD>, <SOS>, <EOS>)。
  • output_size (default: 256) : 将用于每一层的默认 output_size。
  • norm (default: null) : 将用于每一层的默认归一化方式。选项:batch, layer, ghost, null
  • num_fc_layers (default: 0) : 要使用的并行全连接层数量。增加层数会增加模型容量,使其能够学习更复杂的特征交互。
  • fc_dropout (default: 0.0) : 应用于全连接层的默认 dropout 率。增加 dropout 是一种常见的正则化形式,用于对抗过拟合。dropout 以元素被置零的概率表示(0.0 表示没有 dropout)。
  • recurrent_dropout (default: 0.0): 循环状态的 dropout 率。
  • activation (default: tanh): 默认激活函数。选项:elu, leakyRelu, logSigmoid, relu, sigmoid, tanh, softmax, null
  • fc_activation (default: relu): 应用于全连接层输出的默认激活函数。选项:elu, leakyRelu, logSigmoid, relu, sigmoid, tanh, softmax, null
  • recurrent_activation (default: sigmoid): 在循环步骤中使用的激活函数。选项:elu, leakyRelu, logSigmoid, relu, sigmoid, tanh, softmax, null
  • representation (default: dense): 嵌入的表示方式。dense 表示嵌入随机初始化,sparse 表示嵌入初始化为独热编码。选项:dense, sparse
  • unit_forget_bias (default: true): 如果为 true,在初始化时将遗忘门的偏置加 1。选项:true, false
  • recurrent_initializer (default: orthogonal): 循环矩阵权重的初始化器。选项:uniform, normal, constant, ones, zeros, eye, dirac, xavier_uniform, xavier_normal, kaiming_uniform, kaiming_normal, orthogonal, sparse, identity
  • use_bias (default: true): 是否使用偏置向量。选项:true, false
  • bias_initializer (default: zeros): 偏置向量的初始化器。选项:uniform, normal, constant, ones, zeros, eye, dirac, xavier_uniform, xavier_normal, kaiming_uniform, kaiming_normal, orthogonal, sparse, identity。或者,可以指定一个字典,其中包含标识初始化器类型的键 type 以及其参数的其他键,例如 {type: normal, mean: 0, stddev: 0}。有关每个初始化器的参数描述,请参阅 torch.nn.init

  • weights_initializer (default: xavier_uniform): 权重矩阵的初始化器。选项:uniform, normal, constant, ones, zeros, eye, dirac, xavier_uniform, xavier_normal, kaiming_uniform, kaiming_normal, orthogonal, sparse, identity。或者,可以指定一个字典,其中包含标识初始化器类型的键 type 以及其参数的其他键,例如 {type: normal, mean: 0, stddev: 0}。有关每个初始化器的参数描述,请参阅 torch.nn.init

  • embeddings_on_cpu (default: false): 是否强制将嵌入矩阵放置在常规内存中并由 CPU 解析。默认情况下,如果使用 GPU,嵌入矩阵存储在 GPU 内存中,因为它可以实现更快的访问,但在某些情况下,嵌入矩阵可能太大。此参数强制将嵌入矩阵放置在常规内存中,并使用 CPU 进行嵌入查找,由于 CPU 和 GPU 内存之间的数据传输,这会稍微减慢过程。选项:true, false

  • embeddings_trainable (default: true): 如果为 true,嵌入在训练过程中进行训练;如果为 false,嵌入固定不变。这在加载预训练嵌入以避免微调它们时可能很有用。此参数仅当 representationdense 时有效;sparse 独热编码不可训练。选项:true, false
  • reduce_output (default: last): 如果张量秩大于 2,如何沿 s 序列长度维度对输出张量进行降维。选项:last, sum, mean, avg, max, concat, attention, none, None, null
  • norm_params (default: null): 传递给 norm 模块的默认参数。
  • fc_layers (default: null): 包含所有全连接层参数的字典列表。列表的长度决定了堆叠全连接层的数量,每个字典的内容决定了特定层的参数。每个可用层的参数有:activation, dropout, norm, norm_params, output_size, use_bias, bias_initializerweights_initializer。如果字典中缺少任何这些值,将使用作为独立参数提供的默认值。

  • bidirectional (default: false): 如果为 true,两个循环网络将执行前向和后向编码,其输出将被拼接。选项:true, false

  • pretrained_embeddings (default: null): 包含预训练嵌入的文件的路径。默认情况下,dense 嵌入是随机初始化的,但此参数允许指定一个包含 GloVe 格式嵌入的文件路径。加载包含嵌入的文件时,只保留词汇表中存在的带有标签的嵌入,其余的被丢弃。如果词汇表包含在嵌入文件中没有匹配项的字符串,它们的嵌入将使用所有其他嵌入的平均值加上一些随机噪声进行初始化,以使它们彼此不同。此参数仅在 representationdense 时有效。

CNN RNN 编码器

graph LR
  A["12\n7\n43\n65\n23\n4\n1"] --> B["emb_12\nemb__7\nemb_43\nemb_65\nemb_23\nemb__4\nemb__1"];
  B --> C1["CNN Layers"];
  C1 --> C2["RNN Layers"];
  C2 --> D["Fully\n Connected\n Layers"];
  D --> ...;

cnnrnn 编码器的工作原理是先将输入令牌序列 b x s(其中 b 是批处理大小,s 是序列长度)映射到嵌入序列,然后将嵌入通过一堆卷积层(默认为 2 层),接着是一堆循环层(默认为 1 层),接着是一个降维操作,该操作默认只返回最后一个输出,但可以执行其他降维函数。如果您想输出完整的 b x s x h(其中 h 是最后一个 RNN 层的输出大小),可以指定 reduce_output: null

encoder:
    type: cnnrnn
    dropout: 0.0
    conv_dropout: 0.0
    cell_type: rnn
    num_conv_layers: null
    state_size: 256
    embedding_size: 256
    output_size: 256
    norm: null
    num_fc_layers: 0
    fc_dropout: 0.0
    recurrent_dropout: 0.0
    activation: tanh
    filter_size: 5
    strides: 1
    fc_activation: relu
    recurrent_activation: sigmoid
    conv_activation: relu
    representation: dense
    conv_layers: null
    pool_function: max
    pool_size: null
    dilation_rate: 1
    pool_strides: null
    pool_padding: same
    unit_forget_bias: true
    recurrent_initializer: orthogonal
    use_bias: true
    bias_initializer: zeros
    weights_initializer: xavier_uniform
    embeddings_on_cpu: false
    embeddings_trainable: true
    reduce_output: last
    norm_params: null
    fc_layers: null
    num_filters: 256
    padding: same
    num_rec_layers: 1
    bidirectional: false
    pretrained_embeddings: null

参数

  • dropout (default: 0.0) : Dropout 率。增加 dropout 是一种常见的正则化形式,用于对抗过拟合。dropout 以元素被置零的概率表示(0.0 表示没有 dropout)。
  • conv_dropout (default: 0.0) : 卷积层的 dropout 率。
  • cell_type (default: rnn) : 要使用的循环单元类型。可用值有:rnn, lstm, gru。有关单元之间差异的参考,请参阅 torch.nn 循环层。选项:rnn, lstm, gru
  • num_conv_layers (default: null) : 当 conv_layersnull 时,堆叠的卷积层数量。
  • state_size (default: 256) : RNN 状态的大小。
  • embedding_size (default: 256) : 最大嵌入大小。对于 dense 表示,实际大小将是 min(词汇表大小, embedding_size),对于 sparse 编码,实际大小将正好是 vocabulary_size,其中 vocabulary_size 是训练集输入列中出现的唯一字符串数量加上特殊令牌数量 (<UNK>, <PAD>, <SOS>, <EOS>)。
  • output_size (default: 256) : 将用于每一层的默认 output_size。
  • norm (default: null) : 将用于每一层的默认归一化方式。选项:batch, layer, ghost, null
  • num_fc_layers (default: 0) : 要使用的并行全连接层数量。增加层数会增加模型容量,使其能够学习更复杂的特征交互。
  • fc_dropout (default: 0.0) : 应用于全连接层的默认 dropout 率。增加 dropout 是一种常见的正则化形式,用于对抗过拟合。dropout 以元素被置零的概率表示(0.0 表示没有 dropout)。
  • recurrent_dropout (default: 0.0): 循环状态的 dropout 率。
  • activation (default: tanh): 要使用的默认激活函数。选项:elu, leakyRelu, logSigmoid, relu, sigmoid, tanh, softmax, null
  • filter_size (default: 5): 一维卷积滤波器的尺寸。它指示了一维卷积滤波器的宽度。
  • strides (default: 1): 卷积的步长。
  • fc_activation (default: relu): 应用于全连接层输出的默认激活函数。选项:elu, leakyRelu, logSigmoid, relu, sigmoid, tanh, softmax, null
  • recurrent_activation (default: sigmoid): 在循环步骤中使用的激活函数。选项:elu, leakyRelu, logSigmoid, relu, sigmoid, tanh, softmax, null
  • conv_activation (default: relu): 将用于每个卷积层的默认激活函数。选项:elu, leakyRelu, logSigmoid, relu, sigmoid, tanh, softmax, null
  • representation (default: dense): 嵌入的表示方式。dense 表示嵌入随机初始化,sparse 表示嵌入初始化为独热编码。选项:dense, sparse
  • conv_layers (default: null): 包含所有卷积层参数的字典列表。列表的长度决定了堆叠卷积层的数量,每个字典的内容决定了特定层的参数。每个可用层的参数有:activation, dropout, norm, norm_params, num_filters, filter_size, strides, padding, dilation_rate, use_bias, pool_function, pool_padding, pool_size, pool_strides, bias_initializer, weights_initializer。如果字典中缺少任何这些值,将使用编码器参数中指定的默认值。如果 conv_layersnum_conv_layers 都为 null,则会为 conv_layers 分配一个默认列表,其值为 [{filter_size: 7, pool_size: 3}, {filter_size: 7, pool_size: 3}, {filter_size: 3, pool_size: null}, {filter_size: 3, pool_size: null}, {filter_size: 3, pool_size: null}, {filter_size: 3, pool_size: 3}]

  • pool_function (default: max): 要使用的池化函数。max 将选择最大值。average, avg, 或 mean 将计算平均值。选项:last, sum, mean, avg, max, concat, attention, none, None, null

  • pool_size (default: null): 将用于每一层的默认 pool_size。如果 conv_layers 中尚未指定 pool_size,则这是将用于每一层的默认 pool_size。它指示了在卷积操作后将沿 s 序列维度执行的最大池化的大小。
  • dilation_rate (default: 1): 空洞卷积使用的空洞率。
  • pool_strides (default: null): 缩小的因子。
  • pool_padding (default: same): 要使用的填充方式。选项:valid, same
  • unit_forget_bias (default: true): 如果为 true,在初始化时将遗忘门的偏置加 1。选项:true, false
  • recurrent_initializer (default: orthogonal): 循环矩阵权重的初始化器。选项:uniform, normal, constant, ones, zeros, eye, dirac, xavier_uniform, xavier_normal, kaiming_uniform, kaiming_normal, orthogonal, sparse, identity
  • use_bias (default: true): 是否使用偏置向量。选项:true, false
  • bias_initializer (default: zeros): 偏置向量的初始化器。选项:uniform, normal, constant, ones, zeros, eye, dirac, xavier_uniform, xavier_normal, kaiming_uniform, kaiming_normal, orthogonal, sparse, identity。或者,可以指定一个字典,其中包含标识初始化器类型的键 type 以及其参数的其他键,例如 {type: normal, mean: 0, stddev: 0}。有关每个初始化器的参数描述,请参阅 torch.nn.init

  • weights_initializer (default: xavier_uniform): 权重矩阵的初始化器。选项:uniform, normal, constant, ones, zeros, eye, dirac, xavier_uniform, xavier_normal, kaiming_uniform, kaiming_normal, orthogonal, sparse, identity。或者,可以指定一个字典,其中包含标识初始化器类型的键 type 以及其参数的其他键,例如 {type: normal, mean: 0, stddev: 0}。有关每个初始化器的参数描述,请参阅 torch.nn.init

  • embeddings_on_cpu (default: false): 是否强制将嵌入矩阵放置在常规内存中并由 CPU 解析。默认情况下,如果使用 GPU,嵌入矩阵存储在 GPU 内存中,因为它可以实现更快的访问,但在某些情况下,嵌入矩阵可能太大。此参数强制将嵌入矩阵放置在常规内存中,并使用 CPU 进行嵌入查找,由于 CPU 和 GPU 内存之间的数据传输,这会稍微减慢过程。选项:true, false

  • embeddings_trainable (default: true): 如果为 true,嵌入在训练过程中进行训练;如果为 false,嵌入固定不变。这在加载预训练嵌入以避免微调它们时可能很有用。此参数仅当 representationdense 时有效;sparse 独热编码不可训练。选项:true, false
  • reduce_output (default: last): 如果张量秩大于 2,如何沿 s 序列长度维度对输出张量进行降维。选项:last, sum, mean, avg, max, concat, attention, none, None, null
  • norm_params (default: null): 传递给 norm 模块的默认参数。
  • fc_layers (default: null): 包含所有全连接层参数的字典列表。列表的长度决定了堆叠全连接层的数量,每个字典的内容决定了特定层的参数。每个可用层的参数有:activation, dropout, norm, norm_params, output_size, use_bias, bias_initializerweights_initializer。如果字典中缺少任何这些值,将使用作为独立参数提供的默认值。

  • num_filters (default: 256): 滤波器数量,以及相应的一维卷积输出通道数量。

  • padding (default: same): 要使用的填充方式。选项:valid, same
  • num_rec_layers (default: 1): 堆叠的循环层数量。
  • bidirectional (default: false): 如果为 true,两个循环网络将执行前向和后向编码,其输出将被拼接。选项:true, false

  • pretrained_embeddings (default: null): 包含预训练嵌入的文件的路径。默认情况下,dense 嵌入是随机初始化的,但此参数允许指定一个包含 GloVe 格式嵌入的文件路径。加载包含嵌入的文件时,只保留词汇表中存在的带有标签的嵌入,其余的被丢弃。如果词汇表包含在嵌入文件中没有匹配项的字符串,它们的嵌入将使用所有其他嵌入的平均值加上一些随机噪声进行初始化,以使它们彼此不同。此参数仅在 representationdense 时有效。

Transformer 编码器

graph LR
  A["12\n7\n43\n65\n23\n4\n1"] --> B["emb_12\nemb__7\nemb_43\nemb_65\nemb_23\nemb__4\nemb__1"];
  B --> C["Transformer\n Blocks"];
  C --> D["Fully\n Connected\n Layers"];
  D --> ...;

transformer 编码器实现了由 Transformer 块组成的堆叠,复制了 《Attention Is All You Need》 论文中介绍的架构,并在末尾添加了一个可选的全连接层堆叠。

encoder:
    type: transformer
    dropout: 0.1
    num_layers: 1
    embedding_size: 256
    output_size: 256
    norm: null
    num_fc_layers: 0
    fc_dropout: 0.0
    hidden_size: 256
    transformer_output_size: 256
    fc_activation: relu
    representation: dense
    use_bias: true
    bias_initializer: zeros
    weights_initializer: xavier_uniform
    embeddings_on_cpu: false
    embeddings_trainable: true
    reduce_output: last
    norm_params: null
    fc_layers: null
    num_heads: 8
    pretrained_embeddings: null

参数

  • dropout (default: 0.1) : Transformer 块的 dropout 率。增加 dropout 是一种常见的正则化形式,用于对抗过拟合。dropout 以元素被置零的概率表示(0.0 表示没有 dropout)。
  • num_layers (default: 1) : Transformer 层的数量。
  • embedding_size (default: 256) : 最大嵌入大小。对于 dense 表示,实际大小将是 min(词汇表大小, embedding_size),对于 sparse 编码,实际大小将正好是 vocabulary_size,其中 vocabulary_size 是训练集输入列中出现的唯一字符串数量加上特殊令牌数量 (<UNK>, <PAD>, <SOS>, <EOS>)。
  • output_size (default: 256) : 将用于每一层的默认 output_size。
  • norm (default: null) : 将用于每一层的默认归一化方式。选项:batch, layer, ghost, null
  • num_fc_layers (default: 0) : 要使用的并行全连接层数量。增加层数会增加模型容量,使其能够学习更复杂的特征交互。
  • fc_dropout (default: 0.0) : 应用于全连接层的默认 dropout 率。增加 dropout 是一种常见的正则化形式,用于对抗过拟合。dropout 以元素被置零的概率表示(0.0 表示没有 dropout)。
  • hidden_size (default: 256): Transformer 块内隐藏表示的大小。通常与 embedding_size 相同,但如果这两个值不同,将在第一个 Transformer 块之前添加一个投影层。
  • transformer_output_size (default: 256): Transformer 块中自注意力后的全连接层的大小。通常与 hidden_size 和 embedding_size 相同。
  • fc_activation (default: relu): 应用于全连接层输出的默认激活函数。选项:elu, leakyRelu, logSigmoid, relu, sigmoid, tanh, softmax, null
  • representation (default: dense): 嵌入的表示方式。dense 表示嵌入随机初始化,sparse 表示嵌入初始化为独热编码。选项:dense, sparse
  • use_bias (default: true): 是否使用偏置向量。选项:true, false
  • bias_initializer (default: zeros): 偏置向量的初始化器。选项:uniform, normal, constant, ones, zeros, eye, dirac, xavier_uniform, xavier_normal, kaiming_uniform, kaiming_normal, orthogonal, sparse, identity。或者,可以指定一个字典,其中包含标识初始化器类型的键 type 以及其参数的其他键,例如 {type: normal, mean: 0, stddev: 0}。有关每个初始化器的参数描述,请参阅 torch.nn.init

  • weights_initializer (default: xavier_uniform): 权重矩阵的初始化器。选项:uniform, normal, constant, ones, zeros, eye, dirac, xavier_uniform, xavier_normal, kaiming_uniform, kaiming_normal, orthogonal, sparse, identity。或者,可以指定一个字典,其中包含标识初始化器类型的键 type 以及其参数的其他键,例如 {type: normal, mean: 0, stddev: 0}。有关每个初始化器的参数描述,请参阅 torch.nn.init

  • embeddings_on_cpu (default: false): 是否强制将嵌入矩阵放置在常规内存中并由 CPU 解析。默认情况下,如果使用 GPU,嵌入矩阵存储在 GPU 内存中,因为它可以实现更快的访问,但在某些情况下,嵌入矩阵可能太大。此参数强制将嵌入矩阵放置在常规内存中,并使用 CPU 进行嵌入查找,由于 CPU 和 GPU 内存之间的数据传输,这会稍微减慢过程。选项:true, false

  • embeddings_trainable (default: true): 如果为 true,嵌入在训练过程中进行训练;如果为 false,嵌入固定不变。这在加载预训练嵌入以避免微调它们时可能很有用。此参数仅当 representationdense 时有效;sparse 独热编码不可训练。选项:true, false
  • reduce_output (default: last): 如果张量秩大于 2,如何沿 s 序列长度维度对输出张量进行降维。选项:last, sum, mean, avg, max, concat, attention, none, None, null
  • norm_params (default: null): 传递给 norm 模块的默认参数。
  • fc_layers (default: null): 包含所有全连接层参数的字典列表。列表的长度决定了堆叠全连接层的数量,每个字典的内容决定了特定层的参数。每个可用层的参数有:activation, dropout, norm, norm_params, output_size, use_bias, bias_initializerweights_initializer。如果字典中缺少任何这些值,将使用作为独立参数提供的默认值。

  • num_heads (default: 8): 每个 Transformer 块中的注意力头数量。

  • pretrained_embeddings (default: null): 包含预训练嵌入的文件的路径。默认情况下,dense 嵌入是随机初始化的,但此参数允许指定一个包含 GloVe 格式嵌入的文件路径。加载包含嵌入的文件时,只保留词汇表中存在的带有标签的嵌入,其余的被丢弃。如果词汇表包含在嵌入文件中没有匹配项的字符串,它们的嵌入将使用所有其他嵌入的平均值加上一些随机噪声进行初始化,以使它们彼此不同。此参数仅在 representationdense 时有效。

输出特征

序列输出特征可用于标注(对输入序列的每个元素进行分类)或生成(通过模型采样生成序列)。Ludwig 提供了两个序列解码器,分别命名为 taggergenerator

使用默认参数的序列输出特征示例

name: seq_column_name
type: sequence
reduce_input: null
dependencies: []
reduce_dependencies: sum
loss:
    type: softmax_cross_entropy
    confidence_penalty: 0
    robust_lambda: 0
    class_weights: 1
    class_similarities_temperature: 0
decoder: 
    type: generator

参数

  • reduce_input (default sum): 定义如何对非向量(而是矩阵或高阶张量)的输入在第一维度(如果算上批处理维度则为第二维度)上进行降维。可用值有:sum, meanavg, max, concat(沿序列维度进行拼接), last(返回序列维度的最后一个向量)。
  • dependencies (default []): 此输出特征依赖的输出特征。详细解释请参阅输出特征依赖
  • reduce_dependencies (default sum): 定义如何对非向量(而是矩阵或高阶张量)的依赖特征的输出在第一维度(如果算上批处理维度则为第二维度)上进行降维。可用值有:sum, meanavg, max, concat(沿序列维度进行拼接), last(返回序列维度的最后一个向量)。
  • loss (default {type: softmax_cross_entropy, class_similarities_temperature: 0, class_weights: 1, confidence_penalty: 0, robust_lambda: 0}): 是一个包含损失 type 的字典。序列唯一可用的损失 typesoftmax_cross_entropy。详情请参阅损失函数
  • decoder (default: {"type": "generator"}): 用于所需任务的解码器。选项:generator, tagger。详情请参阅解码器

解码器类型和解码器参数也可以在类型全局解码器部分中一次性定义并应用于所有序列输出特征。损失函数及相关参数也可以用同样的方式一次性定义。

解码器

生成器

graph LR
  A["Combiner Output"] --> B["Fully\n Connected\n Layers"];
  B --> C1["RNN"] --> C2["RNN"] --> C3["RNN"];
  GO(["GO"]) -.-o C1;
  C1 -.-o O1("Output");
  O1 -.-o C2;
  C2 -.-o O2("Output");
  O2 -.-o C3;
  C3 -.-o END(["END"]);
  subgraph DEC["DECODER.."]
  B
  C1
  C2
  C3
  end

在使用 generator 的情况下,解码器是一个(可能为空的)全连接层堆叠,接着是一个 RNN,该 RNN 根据自己的先前预测生成输出,并生成一个大小为 b x s' x c 的张量,其中 b 是批处理大小,s' 是生成的序列长度,c 是类别数量,最后是 softmax_cross_entropy。在训练期间采用教师强制(teacher forcing),意味着目标列表作为输入和输出(偏移 1)提供,而在评估时,使用波束搜索(beam search)执行贪婪解码(每次生成一个令牌并将其作为下一步的输入),默认波束大小为 1。通常,生成器期望一个形状为 b x h 的输入张量,其中 h 是隐藏维度。h 向量(经过可选的全连接层堆叠后)被馈送到 RNN 生成器。一个例外是当生成器使用注意力机制时,在这种情况下,输入张量的期望大小是 b x s x h,这是没有降维输出的序列、文本或时间序列输入特征的输出,或者基于序列的合并器的输出。如果向使用带注意力的 RNN 的生成器解码器提供 b x h 输入,则在模型构建期间将引发错误。

decoder:
    type: generator
    num_fc_layers: 0
    fc_output_size: 256
    fc_norm: null
    fc_dropout: 0.0
    cell_type: gru
    num_layers: 1
    fc_activation: relu
    reduce_input: sum
    fc_layers: null
    fc_use_bias: true
    fc_weights_initializer: xavier_uniform
    fc_bias_initializer: zeros
    fc_norm_params: null

参数

  • num_fc_layers (default: 0) : 如果未指定 fc_layers,则全连接层数量。增加层数会增加模型容量,使其能够学习更复杂的特征交互。
  • fc_output_size (default: 256) : 全连接堆叠的输出大小。
  • fc_norm (default: null) : 应用于全连接层开头的默认归一化方式。选项:batch, layer, ghost, null
  • fc_dropout (default: 0.0) : 应用于全连接层的默认 dropout 率。增加 dropout 是一种常见的正则化形式,用于对抗过拟合。dropout 以元素被置零的概率表示(0.0 表示没有 dropout)。
  • cell_type (default: gru) : 要使用的循环单元类型。选项:rnn, lstm, gru
  • num_layers (default: 1) : 堆叠的循环层数量。
  • fc_activation (default: relu): 应用于全连接层输出的默认激活函数。选项:elu, leakyRelu, logSigmoid, relu, sigmoid, tanh, softmax, null
  • reduce_input (default: sum): 如何对非向量(而是矩阵或高阶张量)的输入在第一维度(如果算上批处理维度则为第二维度)上进行降维。选项:sum, mean, avg, max, concat, last
  • fc_layers (default: null): 包含所有全连接层参数的字典列表。列表的长度决定了堆叠全连接层的数量,每个字典的内容决定了特定层的参数。每个可用层的参数有:activation, dropout, norm, norm_params, output_size, use_bias, bias_initializerweights_initializer。如果字典中缺少任何这些值,将使用作为独立参数提供的默认值。
  • fc_use_bias (default: true): fc_stack 中的层是否使用偏置向量。选项:true, false
  • fc_weights_initializer (default: xavier_uniform): 用于 fc_stack 中层的权重初始化器。
  • fc_bias_initializer (default: zeros): 用于 fc_stack 中层的偏置初始化器。
  • fc_norm_params (default: null): 传递给 norm 模块的默认参数。

标注器

graph LR
  A["emb[0]\n....\nemb[n]"] --> B["Fully\n Connected\n Layers"];
  B --> C["Projection\n....\nProjection"];
  C --> D["Softmax\n....\nSoftmax"];
  subgraph DEC["DECODER.."]
  B
  C
  D
  end
  subgraph COM["COMBINER OUT.."]
  A
  end

在使用 tagger 的情况下,解码器是一个(可能为空的)全连接层堆叠,接着投影到一个大小为 b x s x c 的张量,其中 b 是批处理大小,s 是序列长度,c 是类别数量,最后是 softmax_cross_entropy。此解码器要求其输入形状为 b x s x h,其中 h 是隐藏维度,这是没有降维输出的序列、文本或时间序列输入特征的输出,或者基于序列的合并器的输出。如果提供的是 b x h 输入,则在模型构建期间将引发错误。

decoder:
    type: tagger
    num_fc_layers: 0
    fc_output_size: 256
    fc_norm: null
    fc_dropout: 0.0
    fc_activation: relu
    attention_embedding_size: 256
    fc_layers: null
    fc_use_bias: true
    fc_weights_initializer: xavier_uniform
    fc_bias_initializer: zeros
    fc_norm_params: null
    use_attention: false
    use_bias: true
    attention_num_heads: 8

参数

  • num_fc_layers (default: 0) : 如果未指定 fc_layers,则全连接层数量。增加层数会增加模型容量,使其能够学习更复杂的特征交互。
  • fc_output_size (default: 256) : 全连接堆叠的输出大小。
  • fc_norm (default: null) : 应用于全连接层开头的默认归一化方式。选项:batch, layer, ghost, null
  • fc_dropout (default: 0.0) : 应用于全连接层的默认 dropout 率。增加 dropout 是一种常见的正则化形式,用于对抗过拟合。dropout 以元素被置零的概率表示(0.0 表示没有 dropout)。
  • fc_activation (default: relu): 应用于全连接层输出的默认激活函数。选项:elu, leakyRelu, logSigmoid, relu, sigmoid, tanh, softmax, null
  • attention_embedding_size (default: 256): 多头自注意力层的嵌入大小。
  • fc_layers (default: null): 包含所有全连接层参数的字典列表。列表的长度决定了堆叠全连接层的数量,每个字典的内容决定了特定层的参数。每个可用层的参数有:activation, dropout, norm, norm_params, output_size, use_bias, bias_initializerweights_initializer。如果字典中缺少任何这些值,将使用作为独立参数提供的默认值。
  • fc_use_bias (default: true): fc_stack 中的层是否使用偏置向量。选项:true, false
  • fc_weights_initializer (default: xavier_uniform): 用于 fc_stack 中层的权重初始化器。
  • fc_bias_initializer (default: zeros): 用于 fc_stack 中层的偏置初始化器。
  • fc_norm_params (default: null): 传递给 norm 模块的默认参数。
  • use_attention (default: false): 在预测之前是否应用多头自注意力层。选项:true, false
  • use_bias (default: true): 层是否使用偏置向量。选项:true, false
  • attention_num_heads (default: 8): 多头自注意力层中的注意力头数量。

损失函数

序列 Softmax 交叉熵

loss:
    type: sequence_softmax_cross_entropy
    class_weights: null
    weight: 1.0
    robust_lambda: 0
    confidence_penalty: 0
    class_similarities: null
    class_similarities_temperature: 0
    unique: false

参数

  • class_weights (default: null) : 应用于损失函数中每个类别的权重。如果未指定,所有类别权重相等。值可以是一个权重向量,每个类别一个权重,用于乘以以该类别作为真实标签的数据点的损失。在类别分布不平衡的情况下,这是过采样的替代方案。向量的顺序遵循 JSON 元数据文件中类别到整数 ID 的映射(也需要包含 <UNK> 类别)。或者,值可以是一个字典,以类别字符串作为键,权重作为值,例如 {class_a: 0.5, class_b: 0.7, ...}
  • weight (default: 1.0): 损失的权重。
  • robust_lambda (default: 0): 将损失替换为 (1 - robust_lambda) * loss + robust_lambda / c,其中 c 是类别数量。在标签有噪声的情况下很有用。
  • confidence_penalty (default: 0): 通过添加一个惩罚过于自信预测的额外项来惩罚过度自信的预测(低熵),该额外项是 a * (max_entropy - entropy) / max_entropy,其中 a 是此参数的值。在标签有噪声的情况下很有用。
  • class_similarities (default: null): 如果不为 null,它是一个 c x c 矩阵,形式为一个列表的列表,包含类别之间的相互相似性。当 class_similarities_temperature 大于 0 时使用。向量的顺序遵循 JSON 元数据文件中类别到整数 ID 的映射(也需要包含 <UNK> 类别)。
  • class_similarities_temperature (default: 0): 对 class_similarities 每一行执行的 softmax 的温度参数。该 softmax 的输出用于确定要提供的监督向量,而不是为每个数据点提供的独热向量。其直觉是,相似类别之间的错误比完全不同类别之间的错误更容易容忍。
  • unique (default: false): 如果为 true,则损失仅针对序列中的唯一元素计算。选项:true, false

评估指标

每个 epoch 计算并可用于序列特征的评估指标包括

  • sequence_accuracy 模型预测正确序列的比率。
  • token_accuracy 正确预测的令牌数量除以所有序列中的令牌总数。
  • last_accuracy 仅考虑序列最后一个元素的准确率。对于确保生成或标注了特殊的序列结束令牌很有用。
  • edit_distance Levenshtein 距离:将预测序列更改为真实序列所需的最小单令牌编辑(插入、删除或替换)次数。
  • perplexity 困惑度:是真实序列的预测概率的倒数,并按令牌数量归一化。困惑度越低,预测真实序列的概率越高。
  • loss 损失函数的值。

如果 validation_field 指定了一个序列特征,则可以在配置的 training 部分将上述任何一个设置为 validation_metric