⇅ 类别特征
预处理¶
类别特征被转换为大小为 n
(其中 n
是数据集的大小)的整数向量,并添加到 HDF5 文件中,其键反映了数据集中列的名称。类别通过以下方式映射到整数:首先收集数据集中该列中所有唯一类别字符串的字典,按频率降序排列,并从最频繁到最不频繁分配连续的整数 ID(特殊未知占位符标记 <UNK>
分配为 0)。列名被添加到 JSON 文件中,并附带一个字典,其中包含:
- 整数到字符串的映射 (
idx2str
) - 字符串到 ID 的映射 (
str2idx
) - 字符串到频率的映射 (
str2freq
) - 所有标记集合的大小 (
vocab_size
) - 其他预处理信息(默认情况下如何填充缺失值以及用于填充缺失值的标记)
preprocessing:
missing_value_strategy: fill_with_const
fill_value: <UNK>
lowercase: false
most_common: 10000
cache_encoder_embeddings: false
参数
missing_value_strategy
(默认值:fill_with_const
) : 当类别列中存在缺失值时应遵循的策略。选项:fill_with_const
,fill_with_mode
,bfill
,ffill
,drop_row
。详见 缺失值策略。fill_value
(默认值:<UNK>
): 当missing_value_strategy
为fill_with_const
时,用于替换缺失值的值。lowercase
(默认值:false
): 在由分词器处理之前,字符串是否需要转换为小写。选项:true
,false
。most_common
(默认值:10000
): 要考虑的最常见标记的最大数量。如果数据包含的标记数量超过此值,最不常见的标记将被视为未知。cache_encoder_embeddings
(默认值:false
): 对于固定编码器,在预处理阶段计算编码器嵌入,以避免在训练时执行此步骤。这可以加快训练过程中每一步的时间,但如果编码器类型发生更改,预处理的数据将失效。某些模型类型 (GBM) 要求缓存编码器嵌入才能使用嵌入特征,这些模型会自动将此值覆盖为true
。选项:true
,false
。
预处理参数也可以在 类型全局预处理 部分中定义一次,并应用于所有类别输入特征。
输入特征¶
类别特征有三种编码器。passthrough
编码器将输入占位符中的原始整数值直接传递给大小为 b x 1
的输出。另外两种编码器映射到 dense
或 sparse
嵌入(独热编码),并作为大小为 b x h
的输出返回,其中 b
是批量大小,h
是嵌入的维度。
在特征级别指定的编码器参数是:
tied
(默认值null
): 另一个输入特征的名称,用于与其绑定编码器的权重。它必须是具有相同类型和相同编码器参数的特征名称。
输入特征列表中的类别特征示例条目
name: category_column_name
type: category
tied: null
encoder:
type: dense
可用的编码器参数是:
type
(默认值dense
): 可能的值是passthrough
,dense
和sparse
。passthrough
输出未更改的原始整数值。dense
随机初始化一个可训练的嵌入矩阵,sparse
使用独热编码。
编码器类型和编码器参数也可以在 类型全局编码器 部分中定义一次,并应用于所有类别输入特征。
编码器¶
稠密编码器¶
encoder:
type: dense
dropout: 0.0
embedding_size: 50
embedding_initializer: null
embeddings_on_cpu: false
embeddings_trainable: true
pretrained_embeddings: null
参数
dropout
(默认值:0.0
) : 应用于全连接层的默认 dropout 率。增加 dropout 是对抗过拟合的常见正则化形式。Dropout 表示元素被置为零的概率(0.0 表示无 dropout)。embedding_size
(默认值:50
) : 最大嵌入大小,对于稠密表示,实际大小将是 min(vocabulary_size, embedding_size),对于稀疏编码,精确大小将是 vocabulary_size,其中 vocabulary_size 是训练集中特征所对应列中不同字符串的数量(加上一个用于). embedding_initializer
(默认值:null
): 嵌入矩阵的初始化器。选项:uniform
,normal
,constant
,ones
,zeros
,eye
,dirac
,xavier_uniform
,xavier_normal
,kaiming_uniform
,kaiming_normal
,orthogonal
,sparse
,identity
。选项:uniform
,normal
,constant
,ones
,zeros
,eye
,dirac
,xavier_uniform
,xavier_normal
,kaiming_uniform
,kaiming_normal
,orthogonal
,sparse
,identity
,null
。embeddings_on_cpu
(默认值:false
): 是否强制将嵌入矩阵放置在常规内存中并由 CPU 解析。默认情况下,如果使用 GPU,嵌入矩阵存储在 GPU 内存中,因为这样访问速度更快,但在某些情况下嵌入矩阵可能过大。此参数强制将嵌入矩阵放置在常规内存中,并使用 CPU 进行嵌入查找,由于 CPU 和 GPU 内存之间的数据传输,会稍微降低过程速度。选项:true
,false
。-
embeddings_trainable
(默认值:true
): 如果为true
,嵌入在训练过程中进行训练;如果为false
,嵌入是固定的。当加载预训练嵌入以避免微调时,此参数可能很有用。此参数仅当representation
为dense
时有效;sparse
独热编码不可训练。选项:true
,false
。 -
pretrained_embeddings
(默认值:null
): 包含预训练嵌入的文件路径。默认情况下,dense
嵌入是随机初始化的,但此参数允许指定一个文件路径,该文件包含 GloVe 格式 的嵌入。加载包含嵌入的文件时,只会保留词汇表中存在的标签对应的嵌入,其余的将被丢弃。如果词汇表中包含在嵌入文件中没有匹配的字符串,它们的嵌入将初始化为所有其他嵌入的平均值加上一些随机噪声,以使它们彼此不同。此参数仅当representation
为dense
时有效。
稀疏编码器¶
encoder:
type: sparse
dropout: 0.0
embedding_initializer: null
embeddings_on_cpu: false
embeddings_trainable: false
pretrained_embeddings: null
参数
dropout
(默认值:0.0
) : 应用于全连接层的默认 dropout 率。增加 dropout 是对抗过拟合的常见正则化形式。Dropout 表示元素被置为零的概率(0.0 表示无 dropout)。embedding_initializer
(默认值:null
): 嵌入矩阵的初始化器。选项:uniform
,normal
,constant
,ones
,zeros
,eye
,dirac
,xavier_uniform
,xavier_normal
,kaiming_uniform
,kaiming_normal
,orthogonal
,sparse
,identity
。选项:uniform
,normal
,constant
,ones
,zeros
,eye
,dirac
,xavier_uniform
,xavier_normal
,kaiming_uniform
,kaiming_normal
,orthogonal
,sparse
,identity
,null
。embeddings_on_cpu
(默认值:false
): 是否强制将嵌入矩阵放置在常规内存中并由 CPU 解析。默认情况下,如果使用 GPU,嵌入矩阵存储在 GPU 内存中,因为这样访问速度更快,但在某些情况下嵌入矩阵可能过大。此参数强制将嵌入矩阵放置在常规内存中,并使用 CPU 进行嵌入查找,由于 CPU 和 GPU 内存之间的数据传输,会稍微降低过程速度。选项:true
,false
。-
embeddings_trainable
(默认值:false
): 如果为true
,嵌入在训练过程中进行训练;如果为false
,嵌入是固定的。当加载预训练嵌入以避免微调时,此参数可能很有用。此参数仅当representation
为dense
时有效;sparse
独热编码不可训练。选项:true
,false
。 -
pretrained_embeddings
(默认值:null
): 包含预训练嵌入的文件路径。默认情况下,dense
嵌入是随机初始化的,但此参数允许指定一个文件路径,该文件包含 GloVe 格式 的嵌入。加载包含嵌入的文件时,只会保留词汇表中存在的标签对应的嵌入,其余的将被丢弃。如果词汇表中包含在嵌入文件中没有匹配的字符串,它们的嵌入将初始化为所有其他嵌入的平均值加上一些随机噪声,以使它们彼此不同。此参数仅当representation
为dense
时有效。
输出特征¶
graph LR
A["Combiner\n Output"] --> B["Fully\n Connected\n Layers"];
B --> C["Projection into\n Output Space"];
C --> D["Softmax"];
subgraph DEC["DECODER.."]
B
C
D
end
当需要执行多类别分类时,可以使用类别特征。类别特征只有一个可用的解码器:一个(可能为空的)全连接层堆栈,然后投影到大小等于可用类别数量的向量,最后是 softmax 层。
使用默认参数的类别输出特征示例
name: category_column_name
type: category
reduce_input: sum
dependencies: []
calibration: false
reduce_dependencies: sum
loss:
type: softmax_cross_entropy
confidence_penalty: 0
robust_lambda: 0
class_weights: null
class_similarities: null
class_similarities_temperature: 0
decoder:
type: classifier
参数
reduce_input
(默认值sum
): 定义了如何对不是向量而是矩阵或更高阶张量的输入在第一个维度(如果包含批量维度则为第二个维度)进行降维。可用值有:sum
,mean
或avg
,max
,concat
(沿第一个维度连接),last
(返回第一个维度的最后一个向量)。calibration
(默认值false
): 如果为 true,训练完成后通过温度缩放进行校准。校准使用验证集找到一个缩放因子(温度),将其乘以 logits,使输出概率更接近真实似然。dependencies
(默认值[]
): 此输出特征依赖的其他输出特征。详细解释请参阅 输出特征依赖关系。reduce_dependencies
(默认值sum
): 定义了如何对不是向量而是矩阵或更高阶张量的依赖特征的输出在第一个维度(如果包含批量维度则为第二个维度)进行降维。可用值有:sum
,mean
或avg
,max
,concat
(沿第一个维度连接),last
(返回第一个维度的最后一个向量)。loss
(默认值{type: softmax_cross_entropy}
): 是一个包含损失type
的字典。softmax_cross_entropy
是类别输出特征唯一支持的损失类型。详见 损失。top_k
(默认值3
): 确定参数k
,即计算top_k
度量时要考虑的类别数量。它计算准确率,但如果真实类别出现在按解码器置信度排名的前k
个预测类别中,则视为匹配。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
。
损失¶
Softmax 交叉熵¶
loss:
type: softmax_cross_entropy
class_weights: null
weight: 1.0
robust_lambda: 0
confidence_penalty: 0
class_similarities: null
class_similarities_temperature: 0
参数
class_weights
(默认值:null
) : 应用于损失中每个类别的权重。如果未指定,所有类别权重相等。该值可以是一个权重向量,每个类别一个权重,乘以以该类别为真实值的数据点的损失。这是在类别分布不平衡时替代过采样的方案。向量的顺序遵循 JSON 元数据文件中类别到整数 ID 的映射(也需要包含<UNK>
类别)。另外,该值也可以是一个字典,以类别字符串作为键,权重作为值,例如{class_a: 0.5, class_b: 0.7, ...}
。weight
(默认值:1.0
): 损失的权重。robust_lambda
(默认值:0
): 将损失替换为(1 - robust_lambda) * loss + robust_lambda / c
,其中c
是类别数。在标签嘈杂的情况下很有用。confidence_penalty
(默认值:0
): 通过向损失中添加一个惩罚过度自信预测(低熵)的额外项a * (max_entropy - entropy) / max_entropy
来惩罚过度自信的预测,其中 a 是此参数的值。在标签嘈杂的情况下很有用。class_similarities
(默认值:null
): 如果不是null
,它是一个c x c
矩阵,表示为包含类别相互相似度的列表嵌套列表。当class_similarities_temperature
大于 0 时使用。向量的顺序遵循 JSON 元数据文件中类别到整数 ID 的映射(也需要包含<UNK>
类别)。class_similarities_temperature
(默认值:0
): 应用于class_similarities
每一行的 softmax 的温度参数。该 softmax 的输出用于确定提供的监督向量,而不是通常为每个数据点提供的独热向量。其背后的直觉是,相似类别之间的错误比差异很大的类别之间的错误更可容忍。
损失和与损失相关的参数也可以在 类型全局损失 部分中定义一次,并应用于所有类别输出特征。
指标¶
每个 epoch 计算并可用于类别特征的度量包括 accuracy
, hits_at_k
(计算准确率,如果真实类别出现在按解码器置信度排名的前 k
个预测类别中则视为匹配),以及 loss
本身。如果在配置的 training
部分中将 validation_field
设置为类别特征的名称,则可以将其中任何一个设置为 validation_metric
。