你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

CLI (v2) 自动化 ML 文本分类作业 YAML 架构

适用于:Azure CLI ml 扩展 v2(当前)

注意

本文档中详细介绍的 YAML 语法基于最新版本的 ML CLI v2 扩展的 JSON 架构。 此语法必定仅适用于最新版本的 ML CLI v2 扩展。 可以在 https://azuremlschemasprod.azureedge.net/ 上查找早期扩展版本的架构。

每个 Azure 机器学习实体都有一种架构化的 YAML 表示形式。 你可以从扩展名为 .yml.yaml 的 YAML 配置文件创建新实体。

本文提供了在为 NLP 文本分类作业配置这些 YAML 文件时会遇到的一些语法概念的参考。

可在 https://azuremlsdk2.blob.core.windows.net/preview/0.0.1/autoMLNLPTextClassificationJob.schema.json 中找到源 JSON 架构

YAML 语法

密钥 类型 说明 允许的值 默认值
$schema 字符串 表示加载 YAML 架构的位置/URL。 如果用户使用 Azure 机器学习 VS Code 扩展来创作 YAML 文件,则用户可通过在文件顶部包含 $schema 来调用架构和资源完成操作。
type 常量 必需。 作业类型。 automl automl
task 常量 必需。 AutoML 任务的类型。
文本分类的任务说明:
有多个可能的类,并且每个样本正好归入一个类。 任务是预测每个样本的正确类。 例如,将电影脚本分类为“喜剧”或“浪漫”。
text_classification
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
%>
precision_score_weighted
accuracy
target_column_name 字符串 必需。 要对其进行预测的列的名称。 始终必须指定它。 此参数适用于 training_datavalidation_data
training_data 物体 必需。 要在作业中使用的数据。 对于多类分类,数据集可以包含几个文本列和正好一个标签列。
validation_data 物体 必需。 要在作业中使用的验证数据。 在列集、每列数据类型、从左到右的列顺序以及至少两个唯一标签方面,它应与训练数据保持一致。
注意:每个数据集中的列名应是唯一的。
limits 物体 作业的限制配置字典。 本部分中的参数:max_concurrent_trialsmax_nodesmax_trialstimeout_minutestrial_timeout_minutes。 有关详细信息,请参阅限制
training_parameters 物体 字典,包含作业的训练参数。
有关详细信息,请参阅支持的超参数
注意:在 中设置的超参数在所有扫描运行中都是固定的,因此不需要包含在搜索空间中。
sweep 物体 包含作业扫描参数的字典。 它包含两个键 - sampling_algorithm(必需)和 。 有关详细信息,请参阅模型扫描和超参数优化部分。
search_space 物体 超参数搜索空间的字典。 键是超参数的名称,值是参数表达式。 此处支持可通过 training_parameters 修复的所有参数(取代的是遍历)。 有关更多详细信息,请参阅支持的超参数
有两种类型的超参数:
- 离散超参数:离散超参数将指定为离散值中的一个 choice 可以是一个或多个逗号分隔值、range 对象,或任意 list 对象。 也可以使用分布来指定高级离散超参数 - randintqlognormalqnormalqloguniformquniform。 有关详细信息,请参阅此部分
- 连续超参数:连续超参数指定为连续值范围内的分布。 目前支持的分布为 - lognormalnormalloguniformuniform。 有关详细信息,请参阅此部分

有关可能可用的表达式集,请参阅参数表达式
outputs 物体 作业的输出配置字典。 键是作业上下文中的输出名称,值是输出配置。
outputs.best_model 物体 最佳模型的输出配置字典。 有关详细信息,请参阅最佳模型输出配置

配置中使用的其他语法:

限制

密钥 类型 说明 允许的值 默认值
max_concurrent_trials 整型 表示将并行执行的最大试运行(子作业)次数。 1
max_trials 整型 表示 AutoML NLP 作业可尝试运行具有不同超参数组合的训练算法的最大试验次数。 1
timeout_minutes 整型 表示提交的 AutoML NLP 作业运行所需的最长时间(以分钟为单位)。 超过此时间后,作业将终止。 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 路径,或路径的 patternpattern 指定搜索模式,以允许对包含数据的文件和文件夹进行通配(***)。 支持的 URI 类型为 azuremlhttpswasbsabfssadl。 若要详细了解如何使用 azureml:// URI 格式,请参阅核心 YAML 语法。 项目文件位置的 URI。 如果此 URI 没有方案(例如,http:、azureml: 等),则会将它视为本地引用,它指向的文件将在创建实体时上传到默认工作区 blob-storage。
mode 字符串 数据集传送机制。 direct direct
type 常量 为了生成 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 存储库中提供了示例。 下面提供了与文本分类作业相关的示例链接。

YAML:AutoML 文本分类作业

$schema: https://azuremlsdk2.blob.core.windows.net/preview/0.0.1/autoMLJob.schema.json

type: automl
experiment_name: dpv2-cli-text-classification-newsgroup-experiment
description: A text classification job using newsgroup dataset

compute: azureml:gpu-cluster

task: text_classification
primary_metric: accuracy
log_verbosity: debug

limits:
  timeout_minutes: 60

target_column_name: 'y'
training_data:
  type: mltable
  path: "./training-mltable-folder"
validation_data:
  type: mltable
  path: "./validation-mltable-folder"

featurization:
  dataset_language: "eng"

YAML:AutoML 文本分类管道作业

$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json
type: pipeline

description: Pipeline using AutoML Text Classification task

display_name: pipeline-with-text-classification
experiment_name: pipeline-with-automl

settings:
  default_compute: azureml:gpu-cluster

inputs:
  text_classification_training_data:
    type: mltable
    path: ./training-mltable-folder
  text_classification_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_classification_training_data}}
      validation_data: ${{parent.inputs.text_classification_validation_data}}
    outputs:
      preprocessed_train_data:
        type: mltable
      preprocessed_validation_data:
        type: mltable
  text_classification_node:
    type: automl
    task: text_classification
    log_verbosity: info
    primary_metric: accuracy
    limits:
      max_trials: 1
    target_column_name: "y"
    training_data: ${{parent.jobs.preprocessing_node.outputs.preprocessed_train_data}}
    validation_data: ${{parent.jobs.preprocessing_node.outputs.preprocessed_validation_data}}
    featurization:
      dataset_language: eng
    # 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_classification_node.outputs.best_model}}
      model_base_name: newsgroup_model

后续步骤