⇅ 序列特征
预处理¶
序列特征被转换为一个整数矩阵,大小为 n x l
(其中 n
是行数,l
是最长序列长度和 max_sequence_length
参数之间的最小值),并添加到 HDF5 文件中,其键名反映了数据集中的列名。每个序列在内部被映射为一个整数列表。首先,分词器将每个序列转换为一个令牌列表(默认的分词方式是按空格分割)。然后,构建一个字典,将每个唯一令牌映射到其在数据集列中的频率。令牌按频率排序,并从最常见到最稀有分配一个连续的整数 ID。Ludwig 使用 <PAD>
、<UNK>
、<SOS>
和 <EOS>
特殊符号分别表示填充、未知、开始和结束,这与常见的自然语言处理深度学习实践一致。特殊符号也可以在预处理配置中手动设置。列名被添加到 JSON 文件中,并附带一个相关的字典,其中包含
- 从整数到字符串的映射 (
idx2str
) - 从字符串到 ID 的映射 (
str2idx
) - 从字符串到频率的映射 (
str2freq
) - 所有序列的最大长度 (
max_sequence_length
) - 其他预处理信息(如何填充缺失值以及使用哪个令牌填充缺失值)
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
(defaultnull
): 另一个输入特征的名称,用于绑定编码器的权重。它需要是相同类型且具有相同编码器参数的特征名称。
输入特征列表中的序列特征条目示例
name: sequence_column_name
type: sequence
tied: null
encoder:
type: stacked_cnn
可用的编码器参数
type
(defaultparallel_cnn
): 用于编码序列的编码器名称,可以是embed
,parallel_cnn
,stacked_cnn
,stacked_parallel_cnn
,rnn
,cnnrnn
,transformer
和passthrough
(等同于null
或None
)之一。
编码器类型和编码器参数也可以在类型全局编码器部分中一次性定义并应用于所有序列输入特征。
编码器¶
嵌入编码器¶
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
,嵌入固定不变。这在加载预训练嵌入以避免微调它们时可能很有用。此参数仅当representation
为dense
时有效;sparse
独热编码不可训练。选项:true
,false
。 -
pretrained_embeddings
(default:null
): 包含预训练嵌入的文件的路径。默认情况下,dense
嵌入是随机初始化的,但此参数允许指定一个包含 GloVe 格式嵌入的文件路径。加载包含嵌入的文件时,只保留词汇表中存在的带有标签的嵌入,其余的被丢弃。如果词汇表包含在嵌入文件中没有匹配项的字符串,它们的嵌入将使用所有其他嵌入的平均值加上一些随机噪声进行初始化,以使它们彼此不同。此参数仅在representation
为dense
时有效。
并行 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_layers
为null
时,堆叠的卷积层数量。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
,嵌入固定不变。这在加载预训练嵌入以避免微调它们时可能很有用。此参数仅当representation
为dense
时有效;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_layers
和num_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 是batch
或layer
,则使用的参数。num_fc_layers
(default:null
): 要使用的并行全连接层数量。-
fc_layers
(default:null
): 包含每个全连接层参数的字典列表。 -
pretrained_embeddings
(default:null
): 包含预训练嵌入的文件的路径。默认情况下,dense
嵌入是随机初始化的,但此参数允许指定一个包含 GloVe 格式嵌入的文件路径。加载包含嵌入的文件时,只保留词汇表中存在的带有标签的嵌入,其余的被丢弃。如果词汇表包含在嵌入文件中没有匹配项的字符串,它们的嵌入将使用所有其他嵌入的平均值加上一些随机噪声进行初始化,以使它们彼此不同。此参数仅在representation
为dense
时有效。 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_layers
的 pool_size
指定为 null
,并将 reduce_output
指定为 null
。如果 pool_size
的值不为 null
且 reduce_output
为 null
,则返回的张量形状将是 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_layers
为null
时,堆叠的卷积层数量。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_layers
和num_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
,嵌入固定不变。这在加载预训练嵌入以避免微调它们时可能很有用。此参数仅当representation
为dense
时有效;sparse
独热编码不可训练。选项:true
,false
。reduce_output
(default:sum
): 如果张量秩大于 2,如何沿s
序列长度维度对输出张量进行降维。选项:last
,sum
,mean
,avg
,max
,concat
,attention
,none
,None
,null
。norm_params
(default:null
): 如果 norm 是batch
或layer
,则使用的参数。num_fc_layers
(default:null
): 要使用的并行全连接层数量。-
fc_layers
(default:null
): 包含每个全连接层参数的字典列表。 -
num_filters
(default:256
): 滤波器数量,以及相应的一维卷积输出通道数量。 -
padding
(default:same
): 要使用的填充方式。选项:valid
,same
。 -
pretrained_embeddings
(default:null
): 包含预训练嵌入的文件的路径。默认情况下,dense
嵌入是随机初始化的,但此参数允许指定一个包含 GloVe 格式嵌入的文件路径。加载包含嵌入的文件时,只保留词汇表中存在的带有标签的嵌入,其余的被丢弃。如果词汇表包含在嵌入文件中没有匹配项的字符串,它们的嵌入将使用所有其他嵌入的平均值加上一些随机噪声进行初始化,以使它们彼此不同。此参数仅在representation
为dense
时有效。
堆叠并行 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
,嵌入固定不变。这在加载预训练嵌入以避免微调它们时可能很有用。此参数仅当representation
为dense
时有效;sparse
独热编码不可训练。选项:true
,false
。reduce_output
(default:sum
): 如果张量秩大于 2,如何沿s
序列长度维度对输出张量进行降维。选项:last
,sum
,mean
,avg
,max
,concat
,attention
,none
,None
,null
。norm_params
(default:null
): 如果 norm 是batch
或layer
,则使用的参数。num_fc_layers
(default:null
): 要使用的并行全连接层数量。-
fc_layers
(default:null
): 包含每个全连接层参数的字典列表。 -
stacked_layers
(default:null
): 一个嵌套的字典列表,其中包含并行卷积层堆叠的参数。列表的长度决定了堆叠的并行卷积层数量,子列表的长度决定了并行卷积层的数量,每个字典的内容决定了特定层的参数。 -
num_filters
(default:256
): 滤波器数量,以及相应的一维卷积输出通道数量。 -
pretrained_embeddings
(default:null
): 包含预训练嵌入的文件的路径。默认情况下,dense
嵌入是随机初始化的,但此参数允许指定一个包含 GloVe 格式嵌入的文件路径。加载包含嵌入的文件时,只保留词汇表中存在的带有标签的嵌入,其余的被丢弃。如果词汇表包含在嵌入文件中没有匹配项的字符串,它们的嵌入将使用所有其他嵌入的平均值加上一些随机噪声进行初始化,以使它们彼此不同。此参数仅在representation
为dense
时有效。
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
,嵌入固定不变。这在加载预训练嵌入以避免微调它们时可能很有用。此参数仅当representation
为dense
时有效;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_initializer
和weights_initializer
。如果字典中缺少任何这些值,将使用作为独立参数提供的默认值。 -
bidirectional
(default:false
): 如果为 true,两个循环网络将执行前向和后向编码,其输出将被拼接。选项:true
,false
。 -
pretrained_embeddings
(default:null
): 包含预训练嵌入的文件的路径。默认情况下,dense
嵌入是随机初始化的,但此参数允许指定一个包含 GloVe 格式嵌入的文件路径。加载包含嵌入的文件时,只保留词汇表中存在的带有标签的嵌入,其余的被丢弃。如果词汇表包含在嵌入文件中没有匹配项的字符串,它们的嵌入将使用所有其他嵌入的平均值加上一些随机噪声进行初始化,以使它们彼此不同。此参数仅在representation
为dense
时有效。
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_layers
为null
时,堆叠的卷积层数量。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_layers
和num_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
,嵌入固定不变。这在加载预训练嵌入以避免微调它们时可能很有用。此参数仅当representation
为dense
时有效;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_initializer
和weights_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 格式嵌入的文件路径。加载包含嵌入的文件时,只保留词汇表中存在的带有标签的嵌入,其余的被丢弃。如果词汇表包含在嵌入文件中没有匹配项的字符串,它们的嵌入将使用所有其他嵌入的平均值加上一些随机噪声进行初始化,以使它们彼此不同。此参数仅在representation
为dense
时有效。
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
,嵌入固定不变。这在加载预训练嵌入以避免微调它们时可能很有用。此参数仅当representation
为dense
时有效;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_initializer
和weights_initializer
。如果字典中缺少任何这些值,将使用作为独立参数提供的默认值。 -
num_heads
(default:8
): 每个 Transformer 块中的注意力头数量。 -
pretrained_embeddings
(default:null
): 包含预训练嵌入的文件的路径。默认情况下,dense
嵌入是随机初始化的,但此参数允许指定一个包含 GloVe 格式嵌入的文件路径。加载包含嵌入的文件时,只保留词汇表中存在的带有标签的嵌入,其余的被丢弃。如果词汇表包含在嵌入文件中没有匹配项的字符串,它们的嵌入将使用所有其他嵌入的平均值加上一些随机噪声进行初始化,以使它们彼此不同。此参数仅在representation
为dense
时有效。
输出特征¶
序列输出特征可用于标注(对输入序列的每个元素进行分类)或生成(通过模型采样生成序列)。Ludwig 提供了两个序列解码器,分别命名为 tagger
和 generator
。
使用默认参数的序列输出特征示例
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
(defaultsum
): 定义如何对非向量(而是矩阵或高阶张量)的输入在第一维度(如果算上批处理维度则为第二维度)上进行降维。可用值有:sum
,mean
或avg
,max
,concat
(沿序列维度进行拼接),last
(返回序列维度的最后一个向量)。dependencies
(default[]
): 此输出特征依赖的输出特征。详细解释请参阅输出特征依赖。reduce_dependencies
(defaultsum
): 定义如何对非向量(而是矩阵或高阶张量)的依赖特征的输出在第一维度(如果算上批处理维度则为第二维度)上进行降维。可用值有:sum
,mean
或avg
,max
,concat
(沿序列维度进行拼接),last
(返回序列维度的最后一个向量)。loss
(default{type: softmax_cross_entropy, class_similarities_temperature: 0, class_weights: 1, confidence_penalty: 0, robust_lambda: 0}
): 是一个包含损失type
的字典。序列唯一可用的损失type
是softmax_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_initializer
和weights_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_initializer
和weights_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
。