跳到内容

Defaults

顶级 defaults 部分指定了类型全局的

  1. 预处理
  2. 编码器
  3. 解码器
  4. 损失函数

defaults 部分设置的任何配置都将应用于该特定特征类型的所有特征。任何默认的 preprocessingencoder 配置将应用于该特征类型的所有输入特征,而 decoderloss 配置将应用于该特征类型的所有输出特征。

这些参数可以通过输入特征配置输出特征配置为单个特征进行设置。

注意

特征特定配置会覆盖全局 Defaults:当一个参数为特定特征定义并在 Defaults 中修改时,该特征的特定配置将覆盖 Defaults 部分为该特定参数设置的值。

input_features:
  - 
    name: title
    type: text
    preprocessing:
        most_common: 10
  - 
    name: summary
    type: text
....
defaults:
    text:
        preprocessing:
            most_common: 100

在上面的示例配置中,titlemost_common 预处理值将被设置为 10,而不是采用默认值 100,而 summarymost_common 预处理值现在将设置为 100。

定义 Defaults

Ludwig 的 defaults 部分结构如下

defaults:
    <feature_type_1>:
        preprocessing:
            parameter_1: value
            ...
        encoder:
            parameter_1: value
            ...
        decoder:
            parameter_1: value
            ...
        loss:
            parameter_1: value
            ...
    <feature_type_2>:
        preprocessing:
            parameter_1: value
            ...
        encoder:
            parameter_1: value
            ...
        decoder:
            parameter_1: value
            ...
        loss:
            parameter_1: value
            ...
    ...

preprocessing, encoder, decoderloss 各部分都是可选的,您可以根据需要定义一个或多个。

类型全局预处理

指定适用于特定数据类型的所有输入特征的全局预处理策略。例如

defaults:
    category:
        preprocessing:
            missing_value_strategy: fill_with_const
            fill_value: <UNK>

每种数据类型接受的预处理参数可以在特定数据类型文档中找到。

请注意,具有相同数据类型的不同特征可能需要不同的预处理。类型全局预处理与特征特定的预处理配置参数协同工作,但是,特征特定的配置会覆盖全局设置。

例如,文档分类模型可能有两个文本输入特征,一个用于文档标题,一个用于正文。

由于标题的长度远短于正文的长度,参数 max_sequence_length 应将标题设置为 10,正文设置为 2000,但我们希望这两个特征共享相同的词汇表,其中 most_common: 10000

实现此目的的方法是在标题 input_feature 字典和正文输入特征字典中添加一个 preprocessing 键,其中包含所需的参数和值。

input_features:
  -   
    name: title
    type: text
    preprocessing:
        max_sequence_length: 20
  -   
    name: body
    type: text
    preprocessing:
        max_sequence_length: 2000
defaults:
    text:
        preprocessing:
            most_common: 10000
分词器

序列、文本和集合特征将特征分词作为预处理的一部分。可以指定几种分词选项

基本分词器
  • characters:将输入字符串的每个字符分割成一个单独的 token。
  • space:使用正则表达式 \s+ 按空格字符分割。
  • space_punct:使用正则表达式 \w+|[^\w\s] 按空格字符和标点符号分割。
  • underscore:按下划线字符 _ 分割。
  • comma:按逗号字符 , 分割。
  • untokenized:将整个字符串视为一个单独的 token。
  • stripped:去除字符串开头和结尾的空格后,将整个字符串视为一个单独的 token。
  • ngram:这将创建一个包含 unigrams 和 bigrams 的词汇表。
spaCy 分词器

基于 spaCy 的分词器是使用该库提供的强大分词和 NLP 预处理模型的函数。支持多种语言:英语 (代码 en)、意大利语 (代码 it)、西班牙语 (代码 es)、德语 (代码 de)、法语 (代码 fr)、葡萄牙语 (代码 pt)、荷兰语 (代码 nl)、希腊语 (代码 el)、中文 (代码 zh)、丹麦语 (代码 da)、荷兰语 (代码 el, 重复)、日语 (代码 ja)、立陶宛语 (代码 lt)、挪威语 (代码 nb)、波兰语 (代码 pl)、罗马尼亚语 (代码 ro) 和多语言 (代码 xx, 在数据集包含不同语言时很有用)。

每种语言都有不同的函数可用

  • tokenize:使用 spaCy 分词器,
  • tokenize_filter:使用 spaCy 分词器并过滤掉标点符号、数字、停用词和长度小于 3 个字符的单词,
  • tokenize_remove_stopwords:使用 spaCy 分词器并过滤掉停用词,
  • lemmatize:使用 spaCy 词形还原器,
  • lemmatize_filter:使用 spaCy 词形还原器并过滤掉标点符号、数字、停用词和长度小于 3 个字符的单词,
  • lemmatize_remove_stopwords:使用 spaCy 词形还原器并过滤掉停用词。

为了使用这些选项,您必须首先下载 spaCy 模型

python -m spacy download <language_code>

并提供 <language>_<function> 作为 tokenizer。示例:english_tokenizer, italian_lemmatize_filter, multi_tokenize_filter 等等。有关模型的更多详细信息可以在 spaCy 文档中找到。请注意,spaCy 分词器与 TorchScript 不兼容。

TorchText 和 HuggingFace 分词器
  • sentencepiece: XLM-RoBERTa sentencepiece 分词器。
  • clip: CLIP 分词器。基于字节级 BPE。
  • gpt2bpe: GPT-2 BPE 分词器。
  • bert: 基于 WordPiece 算法的 BERT 分词器。
  • hf_tokenizer: 使用 Hugging Face AutoTokenizer,它使用 pretrained_model_name_or_path 参数来决定加载哪个分词器。

注意:在配置中指定这些分词器之一时,预处理参数 most_commonmost_common_percentile 将不起作用。将使用这些分词器的完整词汇表。

类型全局编码器

指定适用于特定数据类型的所有输入特征的编码器类型和编码器相关参数。该编码器将由该特定特征类型的所有特征共享。例如

defaults:
    text:
        encoder:
            type: stacked_cnn
            embedding_size: 128
            num_filters: 512

注意

type 是为特征类型定义默认编码器或更改编码器参数默认值时必需的参数,因为参数与特定编码器相关联。只能为该特定类型的所有特征定义一个默认编码器。

每种数据类型接受的编码器类型和参数可以在特定数据类型文档中找到。

类型全局解码器

指定适用于特定数据类型的所有输出特征的解码器类型和解码器相关参数。例如

defaults:
    text:
        decoder:
            type: generator
            output_size: 128
            bias_initializer: he_normal

注意

type 是为特征类型定义默认解码器或更改解码器参数默认值时必需的参数,因为参数与特定解码器相关联。只能为该特定类型的所有特征定义一个默认解码器。

每种数据类型接受的解码器类型和参数可以在特定数据类型文档中找到。

类型全局损失函数

指定适用于特定数据类型的所有输出特征的损失函数类型和损失函数相关参数。例如

defaults:
    text:
        loss:
            type: softmax_cross_entropy
            confidence_penalty: 0.1

每种数据类型接受的损失函数类型和参数可以在特定数据类型文档中找到。

Defaults 示例

以下是带有类型全局 Defaults 的 Ludwig 配置的完整示例。

config.yaml
input_features:
  - 
    name: title
    type: text
  - 
    name: body
    type: text
  - 
    name: num_characters
    type: number
    preprocessing:
        normalization: zscore
combiner:
  type: concat
  num_fc_layers: 1
output_features:
  - 
    name: spam
    type: category
defaults:
    text:
        preprocessing:
            most_common: 10000
        encoder:
            type: rnn
            cell_type: lstm
            num_layers: 2
trainer:
  learning_rate: 0.001
  optimizer:
    type: adam

CLI 命令示例

ludwig train --dataset spam.csv --config_str "{input_features: [{name: title, type: text}, {name: body, type: text}, {name: num_characters, type: number, preprocessing: {normalization: zscore}}], output_features: [{name: spam, type: category}], combiner: {type: concat, num_fc_layers: 1}, defaults: {text: {preprocessing: {word_vocab_size: 10000}, encoder: {type: rnn, cell_type: lstm, num_layers: 2}}}, trainer: {learning_rate: 0.001, optimizer: {type: adam}}"