注意
本文档中详细介绍的 YAML 语法基于最新版本的 ML CLI v2 扩展的 JSON 架构。 此语法必定仅适用于最新版本的 ML CLI v2 扩展。 可以在 https://azuremlschemasprod.azureedge.net/ 上查找早期扩展版本的架构。
每个 Azure 机器学习实体都有一种架构化的 YAML 表示形式。 你可以从扩展名为 .yml 或 .yaml 的 YAML 配置文件创建新实体。
本文提供了在为 NLP 文本 NER 作业配置这些 YAML 文件时会遇到的一些语法概念的参考。
可在 https://azuremlschemasprod.azureedge.net/latest/autoMLNLPTextNERJob.schema.json 中找到源 JSON 架构
YAML 语法
| 密钥 | 类型 | 说明 | 允许的值 | 默认值 |
|---|---|---|---|---|
$schema |
字符串 | 表示加载 YAML 架构的位置/URL。 如果用户使用 Azure 机器学习 VS Code 扩展来创作 YAML 文件,则用户可通过在文件顶部包含 $schema 来调用架构和资源完成操作。 |
||
type |
const | 必需。 作业类型。 | automl |
automl |
task |
const | 必需。 AutoML 任务的类型。 NER 的任务说明: 序列中的标记有多个可能的标签。 任务是预测每个序列的所有标记的标签。 例如,从非结构化文本(如合同或财务文件)中提取特定于域的实体。 |
text_ner |
|
name |
字符串 | 作业的名称。 对工作区中的所有作业必须唯一。 如果省略,Azure 机器学习将自动生成该名称的 GUID。 | ||
display_name |
字符串 | 作业在工作室 UI 中的显示名称。 在工作区中可以不唯一。 如果省略此项,Azure 机器学习将为显示名称自动生成人类可读的形容词-名词标识符。 | ||
experiment_name |
字符串 | 用于对作业进行组织的试验名称。 每个作业的运行记录将在工作室的“试验”选项卡中的相应试验下进行组织。如果省略此项,Azure 机器学习默认将按照创建作业的工作目录的名称进行组织。 | ||
description |
字符串 | 作业的说明。 | ||
tags |
对象 | 作业的标记字典。 | ||
compute |
字符串 | 要在其上执行作业的计算目标的名称。 为了引用工作区中的现有计算,我们使用语法:azureml:<compute_name> |
||
log_verbosity |
数字 | 不同的日志详细程度。 |
not_set,debug,info,warning,error,critical |
info |
primary_metric |
字符串 | 将由 AutoML 针对模型选择进行优化的指标。 | accuracy |
accuracy |
training_data |
对象 | 必需。 要在作业中使用的数据。 与采用 .csv 格式数据集的多类或多标签不同,命名实体识别需要 CoNLL 格式。 文件必须正好包含两列,在每一行中,标记和标签用一个空格分开。 有关更多详细信息,请参阅 NER 部分。 | ||
validation_data |
对象 | 必需。 要在作业中使用的验证数据。 - 文件不得以空行开头 - 每行必须是空行,或者遵循 {token}{label} 格式,其中令牌和标签之间有一个空格,标签后无空格- 所有标签都必须以 I-、B- 或完全 O 开头。区分大小写 - 两个示例之间有一个空行 - 文件末尾只有一个空行 有关更多详细信息,请参阅数据验证部分。 |
||
limits |
对象 | 作业的限制配置字典。 本部分中的参数:max_concurrent_trials、max_nodes、max_trials、timeout_minutes 和 trial_timeout_minutes。 有关详细信息,请参阅限制。 |
||
training_parameters |
对象 | 字典,包含作业的训练参数。 提供一个对象,该对象具有以下部分列出的键。 有关详细信息,请参阅支持的超参数部分 |
||
training_parameters |
对象 | 字典,包含作业的训练参数。 有关详细信息,请参阅支持的超参数。 注意:在 中设置的超参数在所有扫描运行中都是固定的,因此不需要包含在搜索空间中。 |
||
search_space |
对象 | 超参数搜索空间的字典。 键是超参数的名称,值是参数表达式。 此处支持可通过 training_parameters 修复的所有参数(取代的是遍历)。 有关更多详细信息,请参阅支持的超参数。 有两种类型的超参数: - 离散超参数:离散超参数将指定为离散值中的一个 。 choice 可以是一个或多个逗号分隔值、range 对象,或任意 list 对象。 也可以使用分布来指定高级离散超参数 - randint、qlognormal、qnormal、qloguniform、quniform。 有关详细信息,请参阅此部分。 - 连续超参数:连续超参数指定为连续值范围内的分布。 目前支持的分布为 - lognormal、normal、loguniform、uniform。 有关详细信息,请参阅此部分。 有关可能可用的表达式集,请参阅参数表达式。 |
||
outputs |
对象 | 作业的输出配置字典。 键是作业上下文中的输出名称,值是输出配置。 | ||
outputs.best_model |
对象 | 最佳模型的输出配置字典。 有关详细信息,请参阅最佳模型输出配置。 |
配置中使用的其他语法:
限制
| 密钥 | 类型 | 说明 | 允许的值 | 默认值 |
|---|---|---|---|---|
max_concurrent_trials |
整数 | 表示将并行执行的最大试运行(子作业)次数。 | 1 |
|
max_trials |
整数 | 表示 AutoML NLP 作业可尝试运行具有不同超参数组合的训练算法的最大试验次数。 | 1 |
|
timeout_minutes |
整数 | 表示提交的 AutoML 作业运行所需的最长时间(以分钟为单位)。 超过此时间后,将终止作业。 AutoML NLP 作业中的默认超时时间为 7 天。 | 10080 |
|
trial_timeout_minutes |
整数 | 表示所提交的 AutoML 作业中的每个试验(子作业)可以运行的最长时间(以分钟为单位)。 超过此时间后,子作业将终止。 | ||
max_nodes |
整数 | 用于作业的备用计算群集中的最大节点数。 | 1 |
支持的超参数
下表描述了 AutoML NLP 支持的超参数。
| 参数名称 | 说明 | 语法 |
|---|---|---|
| gradient_accumulation_steps | 在通过调用优化器的 step 函数执行一个梯度下降步骤之前,要对其梯度求和的反向操作的数量。 将利用此值来使用一个有效的批大小,该大小比适合 GPU 的最大大小大 gradient_accumulation_steps 倍。 |
必须是正整数。 |
| learning_rate | 初始学习速率。 | 必须是 (0, 1) 范围内的浮点数。 |
| learning_rate_scheduler | 学习速率计划程序的类型。 | 必须从 linear, cosine, cosine_with_restarts, polynomial, constant, constant_with_warmup 中选择。 |
| model_name | 支持的模型之一的名称。 | 必须从 bert_base_cased, bert_base_uncased, bert_base_multilingual_cased, bert_base_german_cased, bert_large_cased, bert_large_uncased, distilbert_base_cased, distilbert_base_uncased, roberta_base, roberta_large, distilroberta_base, xlm_roberta_base, xlm_roberta_large, xlnet_base_cased, xlnet_large_cased 中选择。 |
| number_of_epochs | 训练循环数。 | 必须是正整数。 |
| training_batch_size | 训练批大小。 | 必须是正整数。 |
| validation_batch_size | 验证批大小。 | 必须是正整数。 |
| warmup_ratio | 用于线性预热的总训练步骤数的比率,范围为 0 到 learning_rate。 | 必须是 [0, 1] 范围内的浮点数。 |
| weight_decay | 优化器为 sgd、adam 或 adamw 时的权重衰减值。 | 必须是 [0, 1] 范围内的浮点数。 |
训练或验证数据
| 密钥 | 类型 | 说明 | 允许的值 | 默认值 |
|---|---|---|---|---|
description |
字符串 | 描述此输入数据的详细信息。 | ||
path |
字符串 | 应从中加载数据的路径。 路径可以是 file 路径、folder 路径,或路径的 pattern。
pattern 指定搜索模式,以允许对包含数据的文件和文件夹进行通配(* 和 **)。 URI 类型为 azureml、https、wasbs、abfss 和 adl。 若要详细了解如何使用 azureml:// URI 格式,请参阅核心 YAML 语法。 项目文件位置的 URI。 如果此 URI 没有方案(例如,http:、azureml: 等),则会将它视为本地引用,它指向的文件将在创建实体时上传到默认工作区 blob-storage。 |
||
mode |
字符串 | 数据集传送机制。 | direct |
direct |
type |
const | 为了生成 nlp 模型,用户需要以 MLTable 的形式引入训练数据。 有关详细信息,请参阅准备数据 | mltable | mltable |
最佳模型输出配置
| 密钥 | 类型 | 说明 | 允许的值 | 默认值 |
|---|---|---|---|---|
type |
字符串 | 必需。 最佳模型的类型。 AutoML 仅允许 mlflow 模型。 | mlflow_model |
mlflow_model |
path |
字符串 | 必需。 模型项目文件存储位置的 URI。 如果此 URI 没有方案(例如,http:、azureml: 等),则会将它视为本地引用,它指向的文件将在创建实体时上传到默认工作区 blob-storage。 | ||
storage_uri |
字符串 | 模型的 HTTP URL。 将此 URL 与 az storage copy -s THIS_URL -d DESTINATION_PATH --recursive 结合使用可下载数据。 |
备注
az ml job 命令可用于管理 Azure 机器学习作业。
示例
示例 GitHub 存储库中提供了示例。 下面提供了与文本 NER 作业相关的示例链接。
YAML:AutoML 文本 NER 作业
$schema: https://azuremlsdk2.blob.core.chinacloudapi.cn/preview/0.0.1/autoMLJob.schema.json
type: automl
experiment_name: dpv2-cli-text-ner
description: A text named entity recognition job using CoNLL 2003 data
compute: azureml:gpu-cluster
task: text_ner
primary_metric: accuracy
log_verbosity: debug
limits:
timeout_minutes: 60
training_data:
path: "./training-mltable-folder"
type: mltable
validation_data:
type: mltable
path: "./validation-mltable-folder"
# featurization:
# dataset_language: "eng"
YAML:AutoML 文本 NER 扫描作业
$schema: https://azuremlsdk2.blob.core.chinacloudapi.cn/preview/0.0.1/autoMLJob.schema.json
type: automl
experiment_name: dpv2-cli-text-ner
description: A text named entity recognition job using CoNLL 2003 data
compute: azureml:gpu-cluster
task: text_ner
primary_metric: accuracy
log_verbosity: debug
limits:
timeout_minutes: 120
max_nodes: 4
max_trials: 2
max_concurrent_trials: 2
training_data:
path: "./training-mltable-folder"
type: mltable
validation_data:
type: mltable
path: "./validation-mltable-folder"
# featurization:
# dataset_language: "eng"
sweep:
sampling_algorithm: random
early_termination:
type: bandit
evaluation_interval: 2
slack_amount: 0.05
delay_evaluation: 6
search_space:
- model_name:
type: choice
values: [bert-base-cased, roberta-base]
- model_name:
type: choice
values: [distilroberta-base]
weight_decay:
type: uniform
min_value: 0.01
max_value: 0.1
YAML:AutoML 文本 NER 管道作业
$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json
type: pipeline
description: Pipeline using AutoML Text Ner task
display_name: pipeline-with-text-ner
experiment_name: pipeline-with-automl
settings:
default_compute: azureml:gpu-cluster
inputs:
text_ner_training_data:
type: mltable
path: ./training-mltable-folder
text_ner_validation_data:
type: mltable
path: ./validation-mltable-folder
jobs:
preprocessing_node:
type: command
component: file:./components/component_preprocessing.yaml
inputs:
train_data: ${{parent.inputs.text_ner_training_data}}
validation_data: ${{parent.inputs.text_ner_validation_data}}
outputs:
preprocessed_train_data:
type: mltable
preprocessed_validation_data:
type: mltable
text_ner_node:
type: automl
task: text_ner
log_verbosity: info
primary_metric: accuracy
limits:
max_trials: 1
timeout_minutes: 60
target_column_name: label
training_data: ${{parent.jobs.preprocessing_node.outputs.preprocessed_train_data}}
validation_data: ${{parent.jobs.preprocessing_node.outputs.preprocessed_validation_data}}
# currently need to specify outputs "mlflow_model" explicitly to reference it in following nodes
outputs:
best_model:
type: mlflow_model
register_model_node:
type: command
component: file:./components/component_register_model.yaml
inputs:
model_input_path: ${{parent.jobs.text_ner_node.outputs.best_model}}
model_base_name: paper_categorization_model
