Configurar o AutoML para treinar um modelo de processamento de linguagem natural

APLICA-SE A:Azure CLI ml extension v2 (current)Python SDK azure-ai-ml v2 (current)

Neste artigo, você aprenderá a treinar modelos de processamento de linguagem natural (NLP) com ML automatizado no Azure Machine Learning. Você pode criar modelos de NLP com ML automatizado por meio do SDK do Python do Azure Machine Learning v2 ou da CLI do Azure Machine Learning v2.

O ML automatizado suporta PNL, o que permite que profissionais de ML e cientistas de dados tragam seus próprios dados de texto e criem modelos personalizados para tarefas de PNL. As tarefas de PNL incluem classificação de texto de várias classes, classificação de texto com vários rótulos e reconhecimento de entidade nomeada (NER).

Você pode se integrar perfeitamente com o recurso de rotulagem de dados do Aprendizado de Máquina do Azure para rotular seus dados de texto ou trazer seus dados rotulados existentes. O ML automatizado oferece a opção de usar treinamento distribuído em clusters de computação multi-GPU para treinamento de modelo mais rápido. O modelo resultante pode ser operacionalizado em escala usando os recursos MLOps do Azure Machine Learning.

Pré-requisitos

APLICA-SE A:Extensão ml da CLI do Azure v2 (atual)

  • Subscrição do Azure. Se você não tiver uma assinatura do Azure, inscreva-se para experimentar a versão gratuita ou paga do Azure Machine Learning hoje mesmo.

  • Um espaço de trabalho do Azure Machine Learning com uma computação de treinamento de GPU. Para criar o espaço de trabalho, consulte Criar recursos do espaço de trabalho. Para obter mais informações, consulte Tamanhos de máquina virtual otimizados para GPU para obter mais detalhes sobre instâncias de GPU fornecidas pelo Azure.

    Aviso

    O suporte para modelos multilíngues e o uso de modelos com maior comprimento máximo de sequência é necessário para vários casos de uso de PNL, como conjuntos de dados não ingleses e documentos de maior alcance. Como resultado, esses cenários podem exigir maior memória GPU para que o treinamento do modelo seja bem-sucedido, como a série NC_v3 ou a série ND.

  • A CLI do Azure Machine Learning v2 instalada. Para obter orientação para atualizar e instalar a versão mais recente, consulte Instalar e configurar a CLI (v2).

  • Este artigo pressupõe alguma familiaridade com a configuração de um experimento automatizado de aprendizado de máquina. Siga o tutorial para ver os principais padrões de design de experimentos de aprendizado de máquina automatizados.

Selecione sua tarefa de PNL

Determine qual tarefa de PNL você deseja realizar. Atualmente, o ML automatizado suporta as seguintes tarefas de PNL de rede neural profunda.

Tarefa Sintaxe do trabalho AutoML Description
Classificação de texto multiclasse CLI v2: text_classification
SDK v2: text_classification()
Existem várias classes possíveis e cada amostra pode ser classificada como exatamente uma classe. A tarefa é prever a classe correta para cada amostra.

Por exemplo, classificar um roteiro de filme como "Comédia" ou "Romântico".
Classificação de texto multi-rótulo CLI v2: text_classification_multilabel
SDK v2: text_classification_multilabel()
Existem várias classes possíveis e a cada amostra pode ser atribuído qualquer número de classes. A tarefa é prever todas as classes para cada amostra

Por exemplo, classificar um roteiro de filme como "Comédia", ou "Romântico", ou "Comédia e Romântico".
Reconhecimento de Entidades Nomeadas (NER) CLI v2:text_ner
SDK v2: text_ner()
Existem várias tags possíveis para tokens em sequências. A tarefa é prever as tags para todos os tokens para cada sequência.

Por exemplo, extrair entidades específicas do domínio de texto não estruturado, como contratos ou documentos financeiros.

Limiar

Thresholding é o recurso multi-label que permite aos usuários escolher o limite que as probabilidades previstas levarão a um rótulo positivo. Valores mais baixos permitem mais rótulos, o que é melhor quando os usuários se preocupam mais com o recall, mas essa opção pode levar a mais falsos positivos. Valores mais altos permitem menos rótulos e, portanto, melhores para os usuários que se preocupam com a precisão, mas essa opção pode levar a mais falsos negativos.

Preparação dos dados

Para experimentos de PNL em ML automatizado, você pode trazer seus dados em .csv formato para tarefas de classificação de várias classes e vários rótulos. Para tarefas NER, são suportados ficheiros de duas colunas .txt que utilizam um espaço como separador e aderem ao formato CoNLL. As seções a seguir fornecem detalhes para o formato de dados aceito para cada tarefa.

Multi-classe

Para classificação de várias classes, o conjunto de dados pode conter várias colunas de texto e exatamente uma coluna de rótulo. O exemplo a seguir tem apenas uma coluna de texto.

text,labels
"I love watching Chicago Bulls games.","NBA"
"Tom Brady is a great player.","NFL"
"There is a game between Yankees and Orioles tonight","MLB"
"Stephen Curry made the most number of 3-Pointers","NBA"

Multi-rótulo

Para a classificação de vários rótulos, as colunas do conjunto de dados seriam as mesmas que as de várias classes, no entanto, há requisitos de formato especiais para os dados na coluna de rótulo. Os dois formatos e exemplos aceitos estão na tabela a seguir.

Opções de formato de coluna de rótulo Vários rótulos Um rótulo Sem etiquetas
Texto simples "label1, label2, label3" "label1" ""
Lista Python com aspas "['label1','label2','label3']" "['label1']" "[]"

Importante

Diferentes analisadores são usados para ler rótulos para esses formatos. Se estiver a utilizar o formato de texto simples, utilize apenas por ordem alfabética, numérica e '_' nas suas etiquetas. Todos os outros caracteres são reconhecidos como o separador de rótulos.

Por exemplo, se o seu rótulo for "cs.AI", ele será lido como "cs" e "AI". Considerando que com o formato de lista Python, o rótulo seria "['cs.AI']", que é lido como "cs.AI" .

Dados de exemplo para rótulo múltiplo em formato de texto sem formatação.

text,labels
"I love watching Chicago Bulls games.","basketball"
"The four most popular leagues are NFL, MLB, NBA and NHL","football,baseball,basketball,hockey"
"I like drinking beer.",""

Exemplo de dados para multi-label na lista Python com formato de aspas.

text,labels
"I love watching Chicago Bulls games.","['basketball']"
"The four most popular leagues are NFL, MLB, NBA and NHL","['football','baseball','basketball','hockey']"
"I like drinking beer.","[]"

Reconhecimento de entidade nomeada (NER)

Ao contrário de multiclasse ou multi-label, que usa .csv conjuntos de dados de formato, o reconhecimento de entidade nomeada requer o formato CoNLL. O arquivo deve conter exatamente duas colunas e, em cada linha, o token e o rótulo são separados por um único espaço.

Por exemplo,

Hudson B-loc
Square I-loc
is O
a O
famous O
place O
in O
New B-loc
York I-loc
City I-loc

Stephen B-per
Curry I-per
got O
three O
championship O
rings O

Validação de dados

Antes de um modelo ser treinado, o ML automatizado aplica verificações de validação de dados nos dados de entrada para garantir que os dados possam ser pré-processados corretamente. Se qualquer uma dessas verificações falhar, a execução falhará com a mensagem de erro relevante. A seguir estão os requisitos para passar nas verificações de validação de dados para cada tarefa.

Nota

Algumas verificações de validação de dados são aplicáveis tanto ao conjunto de treinamento quanto ao conjunto de validação, enquanto outras são aplicáveis apenas ao conjunto de treinamento. Se o conjunto de dados de teste não puder passar na validação de dados, isso significa que o ML automatizado não pôde capturá-lo e há uma possibilidade de falha de inferência do modelo ou um declínio no desempenho do modelo.

Tarefa Verificação da validação dos dados
Todas as tarefas São necessárias pelo menos 50 amostras de formação
Multiclasse e Multi-rótulo Os dados de formação e os dados de validação devem ter
- O mesmo conjunto de colunas
- A mesma ordem de colunas da esquerda para a direita
- O mesmo tipo de dados para colunas com o mesmo nome
- Pelo menos dois rótulos únicos
- Nomes de colunas exclusivos dentro de cada conjunto de dados (Por exemplo, o conjunto de treinamento não pode ter várias colunas chamadas Idade)
Apenas multiclasse None
Apenas rótulo múltiplo - O formato da coluna do rótulo deve estar no formato aceito
- Pelo menos uma amostra deve ter 0 ou 2+ rótulos, caso contrário, deve ser uma multiclass tarefa
- Todas as etiquetas devem estar em formato ou em str formato int , sem sobreposição. Você não deve ter rótulo 1 e rótulo '1'
Apenas NER - O arquivo não deve começar com uma linha vazia
- Cada linha deve ser uma linha vazia, ou seguir o formato, onde há exatamente um espaço entre o token e o rótulo e nenhum espaço em branco após o {token} {label}rótulo
- Todos os rótulos devem começar com I-, B-ou ser exatamente O. Sensível a maiúsculas
- Exatamente uma linha vazia entre duas amostras
- Exatamente uma linha vazia no final do arquivo

Configurar experiência

O recurso de NLP do ML automatizado é acionado por meio de trabalhos de tipo específico automl de tarefa, que é o mesmo fluxo de trabalho para enviar experimentos de ML automatizados para tarefas de classificação, regressão e previsão. Você definiria parâmetros como faria para esses experimentos, como experiment_name, compute_name e entradas de dados.

No entanto, existem diferenças fundamentais:

  • Você pode ignorar primary_metric, pois é apenas para fins de relatório. Atualmente, o ML automatizado treina apenas um modelo por corrida para PNL e não há seleção de modelo.
  • O label_column_name parâmetro só é necessário para tarefas de classificação de texto multiclasse e multirótulo.
  • Se mais de 10% das amostras em seu conjunto de dados contiverem mais de 128 tokens, isso será considerado de longo alcance.
    • Para usar o recurso de texto de longo alcance, você deve usar um NC6 ou superior/melhor SKUs para GPU, como: série NCv3 ou série ND .

APLICA-SE A:Extensão ml da CLI do Azure v2 (atual)

Para trabalhos de ml automatizados da CLI v2, configure seu experimento em um arquivo YAML como o seguinte.

Definições de idioma

Como parte da funcionalidade de PNL, o ML automatizado suporta 104 idiomas, aproveitando modelos DNN de texto pré-treinados multilíngues e específicos do idioma, como a família de modelos BERT. Atualmente, a seleção de idioma tem como padrão o inglês.

A tabela a seguir resume qual modelo é aplicado com base no tipo de tarefa e linguagem. Veja a lista completa de idiomas suportados e seus códigos.

Tipo de tarefa Sintaxe para dataset_language Algoritmo de modelo de texto
Classificação de texto multi-rótulo "eng"
"deu"
"mul"
Inglês BERT uncased
Alemão BERT
BERT Multilingue

Para todos os outros idiomas, o ML automatizado aplica o BERT multilíngue
Classificação de texto multiclasse "eng"
"deu"
"mul"
Inglês BERT cased
BERT Multilingue

Para todos os outros idiomas, o ML automatizado aplica o BERT multilíngue
Reconhecimento de entidade nomeada (NER) "eng"
"deu"
"mul"
Inglês BERT cased
Alemão BERT
BERT Multilingue

Para todos os outros idiomas, o ML automatizado aplica o BERT multilíngue

APLICA-SE A:Extensão ml da CLI do Azure v2 (atual)

Você pode especificar o idioma do conjunto de dados na seção featurization do arquivo YAML de configuração. O BERT também é usado no processo de featurização do treinamento automatizado de experimentos de ML, saiba mais sobre a integração do BERT e featurização em ML automatizado (SDK v1).

featurization:
   dataset_language: "eng"

Preparação distribuída

Você também pode executar seus experimentos de PNL com treinamento distribuído em um cluster de computação do Azure Machine Learning.

APLICA-SE A:Extensão ml da CLI do Azure v2 (atual)

Enviar o trabalho AutoML

APLICA-SE A:Extensão ml da CLI do Azure v2 (atual)

Para enviar seu trabalho AutoML, você pode executar o seguinte comando CLI v2 com o caminho para seu arquivo .yml, nome do espaço de trabalho, grupo de recursos e ID de assinatura.


az ml job create --file ./hello-automl-job-basic.yml --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]

Exemplos de código

APLICA-SE A:Extensão ml da CLI do Azure v2 (atual)

Consulte os seguintes arquivos YAML de exemplo para cada tarefa de PNL.

Varredura de modelos e ajuste de hiperparâmetros (visualização)

Importante

Esta funcionalidade está atualmente em pré-visualização pública. Esta versão de pré-visualização é fornecida sem um contrato de nível de serviço e não a recomendamos para cargas de trabalho de produção. Algumas funcionalidades poderão não ser suportadas ou poderão ter capacidades limitadas.

Para obter mais informações, veja Termos Suplementares de Utilização para Pré-visualizações do Microsoft Azure.

AutoML NLP permite que você forneça uma lista de modelos e combinações de hiperparâmetros, através do espaço de pesquisa de hiperparâmetros na configuração. O Hyperdrive gera várias execuções filhas, cada uma das quais é uma execução de ajuste fino para um determinado modelo de PNL e conjunto de valores de hiperparâmetros que foram escolhidos e varridos com base no espaço de pesquisa fornecido.

Algoritmos de modelo suportados

Todos os modelos DNN de texto pré-treinados atualmente disponíveis no AutoML NLP para ajuste fino estão listados abaixo:

  • bert-base-revestido
  • bert-grande-sem caixa
  • bert-base-multilingue-cased
  • bert-base-alemão-revestido
  • bert-caixa grande
  • distilbert-base-revestido
  • distilbert-base-uncased
  • roberta-base
  • roberta-grande
  • Distilroberta-Base
  • xlm-roberta-base
  • xlm-roberta-grande
  • xlnet-base-revestido
  • xlnet-caixa grande

Note que os modelos grandes são maiores do que os seus homólogos de base. Eles são normalmente mais eficientes, mas ocupam mais memória de GPU e tempo para treinamento. Como tal, seus requisitos de SKU são mais rigorosos: recomendamos a execução em VMs da série ND para obter os melhores resultados.

Algoritmos de modelo suportados - HuggingFace (pré-visualização)

Com o novo back-end executado em pipelines do Azure Machine Learning, você também pode usar qualquer modelo de classificação de texto/token do HuggingFace Hub para Classificação de Texto, Classificação de Token que faz parte da biblioteca de transformadores (como microsoft/deberta-large-mnli). Você também pode encontrar uma lista selecionada de modelos no registro de modelo do Aprendizado de Máquina do Azure que foram validados com os componentes de pipeline.

Usar qualquer modelo HuggingFace acionará execuções usando componentes de pipeline. Se ambos os modelos legados e HuggingFace forem usados, todas as execuções/testes serão acionados usando componentes.

Hiperparâmetros suportados

A tabela a seguir descreve os hiperparâmetros suportados pelo AutoML NLP.

Nome do parâmetro Description Sintaxe
gradient_accumulation_steps O número de operações para trás cujos gradientes devem ser somados antes de executar uma etapa de descida de gradiente chamando a função de etapa do otimizador.

Isso é para usar um tamanho de lote eficaz, que é gradient_accumulation_steps vezes maior do que o tamanho máximo que se encaixa na GPU.
Deve ser um número inteiro positivo.
learning_rate Taxa de aprendizagem inicial. Deve ser um flutuador no intervalo (0, 1).
learning_rate_scheduler Tipo de agendador de taxa de aprendizagem. Deve escolher entre linear, cosine, cosine_with_restarts, polynomial, constant, constant_with_warmup.
model_name Nome de um dos modelos suportados. Deve escolher entre 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 Número de épocas de formação. Deve ser um número inteiro positivo.
training_batch_size Tamanho do lote de treinamento. Deve ser um número inteiro positivo.
validation_batch_size Tamanho do lote de validação. Deve ser um número inteiro positivo.
warmup_ratio Razão do total de passos de treino utilizados para um aquecimento linear de 0 a learning_rate. Deve ser um flutuador na faixa [0, 1].
weight_decay Valor do decaimento de peso quando o otimizador é sgd, adam ou adamw. Deve ser um flutuador na faixa [0, 1].

Todos os hiperparâmetros discretos só permitem distribuições de escolha, como os hiperparâmetros digitados por inteiro e os hiperparâmetros digitados training_batch_sizemodel_name por cadeia de caracteres. Todos os hiperparâmetros contínuos como learning_rate suportam todas as distribuições.

Definir as configurações de varredura

Você pode configurar todos os parâmetros relacionados à varredura. Vários subespaços do modelo podem ser construídos com hiperparâmetros condicionais ao respetivo modelo, como visto em cada exemplo de ajuste de hiperparâmetros.

As mesmas opções de distribuição discreta e contínua disponíveis para trabalhos gerais do HyperDrive são suportadas aqui. Veja todas as nove opções em Hiperparâmetro ajustando um modelo

APLICA-SE A:Extensão ml da CLI do Azure v2 (atual)

limits: 
  timeout_minutes: 120  
  max_trials: 4 
  max_concurrent_trials: 2 

sweep: 
  sampling_algorithm: grid 
  early_termination: 
    type: bandit 
    evaluation_interval: 10 
    slack_factor: 0.2 

search_space: 
  - model_name: 
      type: choice 
      values: [bert_base_cased, roberta_base] 
    number_of_epochs: 
      type: choice 
      values: [3, 4] 
  - model_name: 
      type: choice 
      values: [distilbert_base_cased] 
    learning_rate: 
      type: uniform 
      min_value: 0.000005 
      max_value: 0.00005 

Métodos de amostragem para a varredura

Ao varrer hiperparâmetros, você precisa especificar o método de amostragem a ser usado para varrer o espaço de parâmetros definido. Atualmente, os seguintes métodos de amostragem são suportados com o sampling_algorithm parâmetro:

Tipo de amostragem Sintaxe do trabalho AutoML
Amostragem aleatória random
Amostragem de grelha grid
Amostragem Bayesiana bayesian

Orçamento da experiência

Opcionalmente, limits você pode especificar o orçamento do experimento para seu trabalho de treinamento de PNL do AutoML usando o timeout_minutes parâmetro no - a quantidade de tempo em minutos antes do término do experimento. Se nenhum for especificado, o tempo limite padrão do experimento será de sete dias (máximo de 60 dias).

O AutoML NLP também suporta trial_timeout_minutes, a quantidade máxima de tempo em minutos que uma avaliação individual pode ser executada antes de ser encerrada e max_nodes, o número máximo de nós do cluster de computação de backup a serem usados para o trabalho. Esses parâmetros também pertencem à limits seção.

APLICA-SE A:Extensão ml da CLI do Azure v2 (atual)

limits: 
  timeout_minutes: 60 
  trial_timeout_minutes: 20 
  max_nodes: 2 

Políticas de rescisão antecipada

Você pode encerrar automaticamente execuções com baixo desempenho com uma política de encerramento antecipado. A terminação antecipada melhora a eficiência computacional, economizando recursos de computação que, de outra forma, teriam sido gastos em configurações menos promissoras. O AutoML NLP suporta políticas de terminação antecipada usando o early_termination parâmetro. Se nenhuma política de terminação for especificada, todas as configurações serão executadas até a conclusão.

Saiba mais sobre como configurar a política de encerramento antecipado para sua varredura de hiperparâmetros.

Recursos para a varredura

Você pode controlar os recursos gastos em sua varredura de hiperparâmetros especificando o e o max_trialsmax_concurrent_trials para a varredura.

Parâmetro Detalhe
max_trials Parâmetro para o número máximo de configurações a serem varridas. Deve ser um número inteiro entre 1 e 1000. Ao explorar apenas os hiperparâmetros padrão para um determinado algoritmo de modelo, defina esse parâmetro como 1. O valor predefinido é 1.
max_concurrent_trials Número máximo de execuções que podem ser executadas simultaneamente. Se especificado, deve ser um número inteiro entre 1 e 100. O valor predefinido é 1.

NOTA:
  • O número de execuções simultâneas é limitado aos recursos disponíveis no destino de computação especificado. Certifique-se de que o destino de computação tenha os recursos disponíveis para a simultaneidade desejada.
  • max_concurrent_trials é limitada internamente max_trials . Por exemplo, se o usuário definir max_concurrent_trials=4, , os valores serão atualizados internamente como max_concurrent_trials=2, max_trials=2max_trials=2.
  • Você pode configurar todos os parâmetros relacionados à varredura, conforme mostrado neste exemplo.

    APLICA-SE A:Extensão ml da CLI do Azure v2 (atual)

    sweep:
      limits:
        max_trials: 10
        max_concurrent_trials: 2
      sampling_algorithm: random
      early_termination:
        type: bandit
        evaluation_interval: 2
        slack_factor: 0.2
        delay_evaluation: 6
    

    Problemas Conhecidos

    Lidar com pontuações baixas ou valores de perda mais altos:

    Para certos conjuntos de dados, independentemente da tarefa de PNL, as pontuações produzidas podem ser muito baixas, às vezes até zero. Esta pontuação é acompanhada por valores de perda mais elevados, implicando que a rede neural não conseguiu convergir. Essas pontuações podem acontecer com mais frequência em determinadas SKUs de GPU.

    Embora esses casos sejam incomuns, eles são possíveis e a melhor maneira de lidar com isso é aproveitar o ajuste de hiperparâmetros e fornecer uma gama mais ampla de valores, especialmente para hiperparâmetros como taxas de aprendizagem. Até que nosso recurso de ajuste de hiperparâmetros esteja disponível em produção, recomendamos que os usuários que enfrentam esses problemas usem os clusters de computação NC6 ou ND6. Esses clusters geralmente têm resultados de treinamento que são bastante estáveis.

    Próximos passos