⇅ Set 特征
预处理¶
Set 特征通常以元素之间用空格分隔的字符串形式提供,例如 "elem5 elem9 elem6"。这些字符串值被转换为大小为 n x l
的二进制(实际上是 int8)值矩阵(其中 n
是数据集中的行数,l
是最大 set 大小与 max_size
参数之间的最小值),并添加到 HDF5 中,键与数据集中的列名对应。将 set 映射为整数的方式是:首先使用分词器将每个输入字符串映射为 set 元素的序列(默认通过空格分割完成)。接下来构建一个字典,将每个唯一的元素映射到其在数据集列中的频率。元素按频率排序,并从最常见到最罕见的元素按升序分配连续的整数 ID。列名被添加到 JSON 文件中,并包含关联的字典,其中包含:
- 整数到字符串的映射(
idx2str
) - 字符串到 ID 的映射(
str2idx
) - 字符串到频率的映射(
str2freq
) - 所有 set 的最大大小(
max_set_size
) - 额外的预处理信息(默认如何填充缺失值以及用于填充缺失值的标记)
preprocessing:
tokenizer: space
missing_value_strategy: fill_with_const
fill_value: <UNK>
lowercase: false
most_common: 10000
参数
tokenizer
(默认值:space
) : 定义如何将数据集列的原始文本内容转换为一组元素。默认值space
在空格处分割字符串。常见选项包括:underscore
(在下划线处分割)、comma
(在逗号处分割)、json
(通过 JSON 解析器将字符串解码为 set 或列表)。missing_value_strategy
(默认值:fill_with_const
) : 当 set 列中存在缺失值时采取的策略。选项:fill_with_const
、fill_with_mode
、bfill
、ffill
、drop_row
。详情请参阅 缺失值策略。fill_value
(默认值:<UNK>
): 如果missing_value_strategy
是fill_with_const
,则用于替换缺失值的值。lowercase
(默认值:false
): 如果为 true,在分词前将字符串转换为小写。选项:true
、false
。most_common
(默认值:10000
): 要考虑的最常见标记的最大数量。如果数据包含超过此数量的标记,最不常见的标记将被视为未知。
预处理参数也可以在 类型全局预处理 部分定义一次,并应用于所有 set 输入特征。
输入特征¶
graph LR
A["0\n0\n1\n0\n1\n1\n0"] --> B["2\n4\n5"];
B --> C["emb 2\nemb 4\nemb 5"];
C --> D["Aggregation\n Reduce\n Operation"];
Set 特征有一个编码器:embed
。来自输入占位符的原始二进制值首先被转换为稀疏整数列表,然后映射到密集或稀疏嵌入(one-hot 编码),最后在序列维度上进行归约并作为聚合嵌入向量返回。输入大小为 b
,输出大小为 b x h
,其中 b
是批量大小,h
是嵌入的维度。
在特征层面指定的编码器参数有:
tied
(默认值null
): 与另一个输入特征绑定编码器权重的名称。它需要是同类型且具有相同编码器参数的特征名称。
name: set_column_name
type: set
tied: null
encoder:
type: embed
编码器类型和编码器参数也可以在 类型全局编码器 部分定义一次,并应用于所有 set 输入特征。
编码器¶
Embed 编码器¶
encoder:
type: embed
dropout: 0.0
embedding_size: 50
output_size: 10
activation: relu
norm: null
representation: dense
use_bias: true
bias_initializer: zeros
weights_initializer: xavier_uniform
embeddings_on_cpu: false
embeddings_trainable: true
norm_params: null
num_fc_layers: 0
fc_layers: null
pretrained_embeddings: null
参数
dropout
(默认值:0.0
) : 嵌入的 Dropout 概率。embedding_size
(默认值:50
) : 最大嵌入大小。实际大小对于密集表示将是 min(词汇大小, 嵌入大小),对于稀疏编码将正好是词汇大小。词汇大小是输入列中出现在训练集中的不同字符串的数量(加上未知标记占位符的 1)。). output_size
(默认值:10
) : 如果fc_layers
中未指定output_size
,则这是用于每个层的默认output_size
。它表示全连接层的输出大小。activation
(默认值:relu
): 用于每个层的默认激活函数。选项:elu
、leakyRelu
、logSigmoid
、relu
、sigmoid
、tanh
、softmax
、null
。norm
(默认值:null
): 用于每个层的默认归一化。选项:batch
、layer
、null
。详情请参阅 归一化。representation
(默认值:dense
): 嵌入的表示形式。可以是密集(dense)或稀疏(sparse)。选项:dense
、sparse
。use_bias
(默认值:true
): 层是否使用偏置向量。选项:true
、false
。bias_initializer
(默认值:zeros
): 用于偏置向量的初始化器。选项:uniform
、normal
、constant
、ones
、zeros
、eye
、dirac
、xavier_uniform
、xavier_normal
、kaiming_uniform
、kaiming_normal
、orthogonal
、sparse
、identity
。weights_initializer
(默认值:xavier_uniform
): 用于权重矩阵的初始化器。选项:uniform
、normal
、constant
、ones
、zeros
、eye
、dirac
、xavier_uniform
、xavier_normal
、kaiming_uniform
、kaiming_normal
、orthogonal
、sparse
、identity
。embeddings_on_cpu
(默认值:false
): 默认情况下,如果使用 GPU,嵌入矩阵存储在 GPU 内存中,这样访问速度更快。但在某些情况下,嵌入矩阵可能过大。此参数强制将嵌入矩阵放置在常规内存中,并使用 CPU 进行嵌入查找,这会由于 CPU 和 GPU 内存之间的数据传输而略微降低过程速度。选项:true
、false
。embeddings_trainable
(默认值:true
): 如果为 true,嵌入在训练过程中会被训练;如果为 false,嵌入是固定的。这在加载预训练嵌入以避免微调时可能有用。此参数仅在表示形式为密集(dense)时有效,因为稀疏的 one-hot 编码是不可训练的。选项:true
、false
。norm_params
(默认值:null
): 如果norm
是batch
或layer
,则使用的参数。num_fc_layers
(默认值:0
): 输入特征通过的堆叠全连接层的数量。它们的输出被投射到特征的输出空间。-
fc_layers
(默认值:null
): 包含每个全连接层参数的字典列表。 -
pretrained_embeddings
(默认值:null
): 默认情况下,密集嵌入是随机初始化的,但此参数允许指定一个包含 GloVe 格式嵌入的文件路径。加载包含嵌入的文件时,只保留词汇表中存在的标签对应的嵌入,其他则被丢弃。如果词汇表包含在嵌入文件中没有匹配的字符串,它们的嵌入将使用所有其他嵌入的平均值加上一些随机噪声来初始化,以使它们彼此不同。此参数仅在表示形式为密集(dense)时有效。
输出特征¶
graph LR
A["Combiner\n Output"] --> B["Fully\n Connected\n Layers"];
B --> C["Projection into\n Output Space"];
C --> D["Sigmoid"];
subgraph DEC["DECODER.."]
B
C
D
end
Set 特征可用于执行多标签分类。Set 特征只有一个可用的解码器:一个(可能为空的)堆叠全连接层,然后投射到大小等于可用类别数量的向量,然后是 sigmoid 函数。
name: set_column_name
type: set
reduce_input: sum
dependencies: []
reduce_dependencies: sum
loss:
type: sigmoid_cross_entropy
decoder:
type: classifier
参数
reduce_input
(默认值sum
): 定义如何对非向量(而是矩阵或更高阶张量)的输入在第一个维度(如果计算批量维度则为第二个)上进行归约。可用值:sum
、mean
或avg
、max
、concat
(沿第一个维度连接)。dependencies
(默认值[]
): 此输出特征依赖的其他输出特征。详细解释请参阅 输出特征依赖。reduce_dependencies
(默认值sum
): 定义如何对非向量(而是矩阵或更高阶张量)的依赖特征输出在第一个维度(如果计算批量维度则为第二个)上进行归约。可用值:sum
、mean
或avg
、max
、concat
(沿第一个维度连接)、last
(返回第一个维度的最后一个向量)。loss
(默认值{type: sigmoid_cross_entropy}
): 是一个包含损失type
的字典。Set 特征唯一支持的损失type
是sigmoid_cross_entropy
。详情请参阅 损失。decoder
(默认值:{"type": "classifier"}
): 用于所需任务的解码器。选项:classifier
。详情请参阅 解码器。
解码器¶
分类器¶
decoder:
type: classifier
num_fc_layers: 0
fc_output_size: 256
fc_norm: null
fc_dropout: 0.0
fc_activation: relu
fc_layers: null
fc_use_bias: true
fc_weights_initializer: xavier_uniform
fc_bias_initializer: zeros
fc_norm_params: null
use_bias: true
weights_initializer: xavier_uniform
bias_initializer: zeros
参数
num_fc_layers
(默认值:0
) : 如果未指定fc_layers
,则全连接层堆叠的数量。增加层数会增加模型的容量,使其能够学习更复杂的特征交互。fc_output_size
(默认值:256
) : 全连接层堆叠的输出大小。fc_norm
(默认值:null
) : 应用于全连接层开始处的默认归一化。选项:batch
、layer
、ghost
、null
。fc_dropout
(默认值:0.0
) : 应用于全连接层的默认 dropout 率。增加 dropout 是对抗过拟合的常见正则化形式。Dropout 表示元素被置零的概率(0.0 表示没有 dropout)。fc_activation
(默认值:relu
): 应用于全连接层输出的默认激活函数。选项:elu
、leakyRelu
、logSigmoid
、relu
、sigmoid
、tanh
、softmax
、null
。fc_layers
(默认值:null
): 包含所有全连接层参数的字典列表。列表的长度决定了堆叠全连接层的数量,每个字典的内容决定了特定层的参数。每个可用层的参数有:activation
、dropout
、norm
、norm_params
、output_size
、use_bias
、bias_initializer
和weights_initializer
。如果字典中缺少这些值中的任何一个,将使用作为独立参数提供的默认值。fc_use_bias
(默认值:true
): fc_stack 中的层是否使用偏置向量。选项:true
、false
。fc_weights_initializer
(默认值:xavier_uniform
): 用于 fc_stack 中层的权重初始化器。fc_bias_initializer
(默认值:zeros
): 用于 fc_stack 中层的偏置初始化器。fc_norm_params
(默认值:null
): 传递给norm
模块的默认参数。use_bias
(默认值:true
): 层是否使用偏置向量。选项:true
、false
。weights_initializer
(默认值:xavier_uniform
): 权重矩阵的初始化器。选项:uniform
、normal
、constant
、ones
、zeros
、eye
、dirac
、xavier_uniform
、xavier_normal
、kaiming_uniform
、kaiming_normal
、orthogonal
、sparse
、identity
。bias_initializer
(默认值:zeros
): 偏置向量的初始化器。选项:uniform
、normal
、constant
、ones
、zeros
、eye
、dirac
、xavier_uniform
、xavier_normal
、kaiming_uniform
、kaiming_normal
、orthogonal
、sparse
、identity
。
解码器类型和解码器参数也可以在 类型全局解码器 部分定义一次,并应用于所有 set 输出特征。
损失¶
Sigmoid 交叉熵¶
loss:
type: sigmoid_cross_entropy
class_weights: null
weight: 1.0
参数
class_weights
(默认值:null
) : 应用于损失中每个类别的权重。如果未指定,所有类别权重相等。该值可以是一个权重向量,每个类别对应一个权重,乘以以该类别为真实标签的数据点的损失。这是在类别分布不平衡时替代过采样的方案。向量的顺序遵循 JSON 元数据文件中类别到整数 ID 的映射(也需要包含<UNK>
类别)。另外,该值也可以是一个字典,以类别字符串为键,权重为值,例如{class_a: 0.5, class_b: 0.7, ...}
。weight
(默认值:1.0
): 损失的权重。
损失类型和损失相关参数也可以在 类型全局损失 部分定义一次,并应用于所有 set 输出特征。
评估指标¶
每个 epoch 计算并适用于 set 特征的评估指标有 jaccard
(计算预测与标签交集元素数量除以并集元素数量)和 loss
本身。如果您将配置的 training
部分中的 validation_field
设置为 set 特征的名称,则可以将它们中的任何一个设置为 validation_metric
。