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

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

Neste artigo, vai aprender a preparar modelos de processamento de linguagem natural (NLP) com ML automatizado no Azure Machine Learning. Pode criar modelos NLP com ML automatizado através do SDK Python do Azure Machine Learning v2 ou da CLI v2 do Azure Machine Learning.

O ML Automatizado suporta NLP, o que permite que profissionais de ML e cientistas de dados tragam os seus próprios dados de texto e criem modelos personalizados para tarefas como, por exemplo, classificação de texto de várias classes, classificação de texto com várias etiquetas e reconhecimento de entidades com nome (NER).

Pode integrar-se de forma totalmente integrada com a capacidade de etiquetagem de dados do Azure Machine Learning para etiquetar os seus dados de texto ou trazer os dados etiquetados existentes. O ML Automatizado fornece a opção para utilizar a preparação distribuída em clusters de computação multi-GPU para uma preparação de modelos mais rápida. O modelo resultante pode ser operacionalizado em escala ao tirar partido das capacidades do MLOps do Azure ML.

Pré-requisitos

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

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

  • Uma área de trabalho do Azure Machine Learning com uma computação de preparação de GPU. Para criar a área de trabalho, veja Criar recursos da área de trabalho. Veja Tamanhos de máquinas virtuais otimizadas para GPU para obter mais detalhes sobre as instâncias de GPU fornecidas pelo Azure.

    Aviso

    O suporte para modelos multilingues e a utilização de modelos com comprimento máximo de sequência mais longo é necessário para vários casos de utilização NLP, como conjuntos de dados não ingleses e documentos de longo alcance. Como resultado, estes cenários podem exigir uma memória GPU mais elevada para que a preparação de modelos seja bem-sucedida, como a série NC_v3 ou a série ND.

  • A CLI v2 do Azure Machine Learning instalada. Para obter orientações 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 uma experimentação automatizada de machine learning. Siga os procedimentos para ver os principais padrões de estrutura de experimentação de machine learning automatizados.

Selecione a sua tarefa NLP

Determine a tarefa NLP que pretende realizar. Atualmente, o ML automatizado suporta as seguintes tarefas NLP de rede neural profundas.

Tarefa Sintaxe da tarefa autoML Descrição
Classificação de texto de várias classes CLI v2: text_classification
SDK v2: text_classification()
Existem várias classes possíveis e cada exemplo pode ser classificado como exatamente uma classe. A tarefa é prever a classe correta para cada exemplo.

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

Por exemplo, classificar um script de filme como "Comédia", "Romântico" ou "Comédia e Romântico".
Reconhecimento de Entidades Nomeadas (NER) CLI v2:text_ner
SDK v2: text_ner()
Existem várias etiquetas possíveis para tokens em sequências. A tarefa é prever as etiquetas 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.

Limiares

O limiar é a funcionalidade de várias etiquetas que permite que os utilizadores escolham o limiar acima do qual as probabilidades previstas levarão a uma etiqueta positiva. Os valores mais baixos permitem mais etiquetas, o que é melhor quando os utilizadores se preocupam mais com a recolha, mas esta opção pode levar a mais falsos positivos. Os valores mais elevados permitem menos etiquetas e, portanto, melhor para os utilizadores que se preocupam com a precisão, mas esta opção pode levar a mais falsos negativos.

Preparar dados

Para experimentações NLP em ML automatizado, pode colocar os seus dados em .csv formato para tarefas de classificação de várias classes e de várias etiquetas. Para tarefas NER, são suportados ficheiros de duas colunas .txt que utilizam um espaço como separador e que cumprem o formato CoNLL. As secções seguintes fornecem detalhes adicionais para o formato de dados aceite para cada tarefa.

Várias classes

Para classificação de várias classes, o conjunto de dados pode conter várias colunas de texto e exatamente uma coluna de etiqueta. O exemplo seguinte 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"

Várias etiquetas

Para a classificação de várias etiquetas, as colunas do conjunto de dados seriam as mesmas de várias classes, no entanto, existem requisitos de formato especiais para dados na coluna de etiquetas. Os dois formatos e exemplos aceites estão na tabela seguinte.

Opções de formato de coluna de etiqueta Várias etiquetas Uma etiqueta Sem etiquetas
Texto simples "label1, label2, label3" "label1" ""
Lista de Python com aspas "['label1','label2','label3']" "['label1']" "[]"

Importante

São utilizados diferentes parsers para ler etiquetas para estes formatos. Se estiver a utilizar o formato de texto simples, utilize apenas alfabético, numérico e '_' nas suas etiquetas. Todos os outros carateres são reconhecidos como o separador de etiquetas.

Por exemplo, se a etiqueta for , é "cs.AI"lida como "cs" e "AI". Enquanto que, com o formato de lista python, a etiqueta seria "['cs.AI']", que é lida como "cs.AI" .

Dados de exemplo para várias etiquetas no formato de texto simples.

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.",""

Dados de exemplo para várias etiquetas 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 entidades nomeadas (NER)

Ao contrário de várias classes ou de várias etiquetas, que assumem .csv conjuntos de dados de formato, o reconhecimento de entidades com nome requer o formato CoNLL. O ficheiro tem de conter exatamente duas colunas e, em cada linha, o token e a etiqueta 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 da preparação, o ML automatizado aplica verificações de validação de dados nos dados de entrada para garantir que os dados podem ser pré-processados corretamente. Se alguma destas verificações falhar, a execução falhará com a mensagem de erro relevante. Seguem-se os requisitos para transmitir verificações de validação de dados para cada tarefa.

Nota

Algumas verificações de validação de dados são aplicáveis tanto à preparação como ao conjunto de validação, enquanto outras são aplicáveis apenas ao conjunto de preparação. Se o conjunto de dados de teste não conseguiu transmitir a validação de dados, isso significa que o ML automatizado não conseguiu capturá-lo e existe a possibilidade de uma falha de inferência do modelo ou uma diminuição do desempenho do modelo.

Tarefa Verificação de validação de dados
Todas as tarefas São necessários pelo menos 50 exemplos de preparação
Multiclasse e Multi-label Os dados de preparação e os dados de validação têm de 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 duas etiquetas exclusivas
- Nomes de coluna exclusivos em cada conjunto de dados (por exemplo, o conjunto de preparação não pode ter várias colunas com o nome Idade)
Apenas de várias classes Nenhuma
Apenas etiquetas múltiplas - O formato da coluna de etiqueta tem de estar no formato aceite
- Pelo menos um exemplo deve ter mais de 0 ou 2 etiquetas, caso contrário, deve ser uma multiclass tarefa
- Todas as etiquetas devem estar em str formato ou int sem sobreposição. Não deve ter etiqueta 1 nem etiqueta '1'
Apenas NER - O ficheiro não deve começar com uma linha vazia
- Cada linha tem de ser uma linha vazia ou seguir o formato {token} {label}, onde existe exatamente um espaço entre o token e a etiqueta e nenhum espaço em branco após a etiqueta
- Todas as etiquetas têm de começar com I-, B-ou ser exatamente O. Sensível a maiúsculas e minúsculas
- Exatamente uma linha vazia entre duas amostras
- Exatamente uma linha vazia no final do ficheiro

Configurar experimentação

A capacidade NLP automatizada do ML é acionada através de tarefas de tipo específico automl , que é o mesmo fluxo de trabalho para submeter experimentações de ML automatizadas para tarefas de classificação, regressão e previsão. Definiria parâmetros como faria para essas experimentações, como experiment_name, compute_name e entradas de dados.

No entanto, existem diferenças fundamentais:

  • Pode ignorar primary_metric, uma vez que é apenas para fins de relatórios. Atualmente, o ML automatizado treina apenas um modelo por execução para NLP e não existe uma seleção de modelo.
  • O label_column_name parâmetro só é necessário para tarefas de classificação de texto de várias classes e de várias etiquetas.
  • Se mais de 10% dos exemplos no conjunto de dados contiverem mais de 128 tokens, é considerado de longo alcance.
    • Para utilizar a funcionalidade de texto de longo alcance, deve utilizar um NC6 ou SKUs superiores/melhores para GPU, como: série NCv3 ou série ND .

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

Para tarefas de AutoML da CLI v2, configure a experimentação num ficheiro YAML da seguinte forma.

Definições de idioma

Como parte da funcionalidade NLP, o ML automatizado suporta 104 idiomas que tiram partido de modelos DNN de texto pré-preparados de linguagem específicos e multilingues, como a família de modelos BERT. Atualmente, a seleção de idiomas é predefinida para inglês.

A tabela seguinte resume que modelo é aplicado com base no tipo de tarefa e no idioma. Veja a lista completa de idiomas suportados e os respetivos códigos.

Tipo de tarefa Sintaxe para dataset_language Algoritmo de modelo de texto
Classificação de texto com várias etiquetas "eng"
"deu"
"mul"
BERT inglês sem cache
BERT alemão
BERT multilinngue

Para todos os outros idiomas, o ML automatizado aplica o BERT multilingue
Classificação de texto de várias classes "eng"
"deu"
"mul"
BERT inglês maiúsculas e minúsculas
BERT multilinngue

Para todos os outros idiomas, o ML automatizado aplica o BERT multilingue
Reconhecimento de entidades nomeadas (NER) "eng"
"deu"
"mul"
BERT inglês maiúsculas e minúsculas
BERT alemão
BERT multilinngue

Para todos os outros idiomas, o ML automatizado aplica o BERT multilingue

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

Pode especificar o idioma do conjunto de dados na secção de caracterização do ficheiro YAML de configuração. O BERT também é utilizado no processo de caracterização da preparação automatizada da experimentação ML, saiba mais sobre a integração e a caracterização do BERT no ML automatizado.

featurization:
   dataset_language: "eng"

Preparação distribuída

Também pode executar as suas experimentações NLP com preparação distribuída num cluster de computação do Azure ML.

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

Submeter a tarefa de AutoML

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

Para submeter a sua tarefa de AutoML, pode executar o seguinte comando da CLI v2 com o caminho para o ficheiro .yml, o nome da área de trabalho, o grupo de recursos e o ID da subscrição.


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

Limpeza de modelos e otimização de hiperparâmetros (pré-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 é recomendada 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.

A NLP de AutoML permite-lhe fornecer 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 subordinadas, cada uma das quais é uma execução de otimização para um determinado modelo NLP e um conjunto de valores de hiperparâmetros escolhidos e varridos com base no espaço de pesquisa fornecido.

Algoritmos de modelo suportados

Todos os modelos DNN de texto pré-preparados atualmente disponíveis no NLP de AutoML para otimização estão listados abaixo:

  • bert_base_cased
  • bert_large_uncased
  • bert_base_multilingual_cased
  • bert_base_german_cased
  • bert_large_cased
  • distilbert_base_cased
  • distilbert_base_uncased
  • roberta_base
  • roberta_large
  • distilroberta_base
  • xlm_roberta_base
  • xlm_roberta_large
  • xlnet_base_cased
  • xlnet_large_cased

Tenha em atenção que os modelos grandes são significativamente maiores do que os seus equivalentes base. Normalmente, são mais eficazes, mas ocupam mais memória e tempo de preparação da GPU. Como tal, os requisitos de SKU são mais rigorosos: recomendamos a execução em VMs da série ND para obter os melhores resultados.

Hiperparâmetros suportados

A tabela seguinte descreve os hiperparâmetros suportados pelo NLP de AutoML.

Nome do parâmetro Descrição Syntax
gradient_accumulation_steps O número de operações anteriores cujas gradações devem ser resumidas antes de executar um passo de gradiente descendente ao chamar a função de passo do otimizador.

Isto é utilizado para utilizar um tamanho de lote eficaz que é gradient_accumulation_steps vezes maior do que o tamanho máximo que se adequa à GPU.
Tem de ser um número inteiro positivo.
learning_rate Taxa de aprendizagem inicial. Tem de ser um flutuante no intervalo (0, 1).
learning_rate_scheduler Tipo de agendador de taxa de aprendizagem. Tem de escolher entre linear, cosine, cosine_with_restarts, polynomial, constant, constant_with_warmup.
model_name Nome de um dos modelos suportados. Tem de 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 preparação. Tem de ser um número inteiro positivo.
training_batch_size Tamanho do lote de preparação. Tem de ser um número inteiro positivo.
validation_batch_size Tamanho do lote de validação. Tem de ser um número inteiro positivo.
warmup_ratio Rácio do total de passos de preparação utilizados para um aquecimento linear de 0 para learning_rate. Tem de ser um flutuante no intervalo [0, 1].
weight_decay Valor da decadência do peso quando o otimizador é sgd, adão ou adamw. Tem de ser um flutuante no intervalo [0, 1].

Todos os hiperparâmetros discretos só permitem distribuições de escolha, tais como os hiperparâmetros escritos em números inteiros training_batch_size e os hiperparâmetros com model_name tipo de cadeia. Todos os hiperparâmetros contínuos, como, por learning_rate exemplo, suportam todas as distribuições.

Configurar as definições de varrimento

Pode configurar todos os parâmetros relacionados com o varrimento. Vários subespaços de modelo podem ser construídos com hiperparâmetros condicionais ao respetivo modelo, como se pode ver abaixo em cada exemplo.

As mesmas opções de distribuição discreta e contínua que estão disponíveis para tarefas gerais do HyperDrive são suportadas aqui. Ver todas as nove opções no Hyperparameter otimizar um modelo

APLICA-SE A:Extensão v2 da CLI do Azure (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, tem de especificar o método de amostragem a utilizar para percorrer 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 da Tarefa de AutoML
Amostragem Aleatória random
Amostragem de Grelha grid
Amostragem bayesiana bayesian

Orçamento da experimentação

Opcionalmente, pode especificar o orçamento da experimentação para a tarefa de preparação NLP de AutoML com o timeout_minutes parâmetro em limits - a quantidade de tempo em minutos antes de a experimentação terminar. Se nenhum for especificado, o tempo limite da experimentação predefinido é de sete dias (máximo de 60 dias).

A NLP de AutoML também suporta trial_timeout_minutes, a quantidade máxima de tempo em minutos que uma avaliação individual pode executar antes de ser terminada, e max_nodes, o número máximo de nós do cluster de computação de apoio para tirar partido da tarefa. Estes parâmetros também pertencem à limits secção .

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

limits: 
  timeout_minutes: 60 
  trial_timeout_minutes: 20 
  max_nodes: 2 

Políticas de cessação antecipada

Pode terminar automaticamente as execuções com um desempenho fraco com uma política de cessação antecipada. A terminação antecipada melhora a eficiência computacional, poupando recursos de computação que, de outra forma, teriam sido gastos em configurações menos promissoras. O NLP de AutoML suporta políticas de terminação antecipada com o early_termination parâmetro . Se não for especificada nenhuma política de terminação, todas as configurações serão executadas até à conclusão.

Saiba mais sobre como configurar a política de terminação antecipada para o seu varrimento de hiperparâmetros.

Recursos para varrer

Pode controlar os recursos gastos na sua varredura de hiperparâmetros ao especificar o max_trials e o max_concurrent_trials para a varredura.

Parâmetro Detalhes
max_trials Parâmetro para o número máximo de configurações a varrer. Tem de ser um número inteiro entre 1 e 1000. Ao explorar apenas os hiperparâmetros predefinidos para um determinado algoritmo de modelo, defina este parâmetro como 1. O valor predefinido é 1.
max_concurrent_trials Número máximo de execuções que podem ser executadas em simultâneo. Se especificado, tem de ser um número inteiro entre 1 e 100. O valor predefinido é 1.

NOTA:
  • O número de execuções simultâneas é controlado nos recursos disponíveis no destino de computação especificado. Certifique-se de que o destino de computação tem os recursos disponíveis para a simultaneidade pretendida.
  • max_concurrent_trials está limitado max_trials internamente. Por exemplo, se o utilizador definir max_concurrent_trials=4, max_trials=2, os valores serão atualizados internamente como max_concurrent_trials=2, max_trials=2.
  • Pode configurar todos os parâmetros relacionados com varrer, conforme mostrado no exemplo abaixo.

    APLICA-SE A:Extensão v2 da CLI do Azure (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 muito baixas ou valores de perda mais elevados:

    Para determinados conjuntos de dados, independentemente da tarefa NLP, as classificações produzidas podem ser muito baixas, por vezes até zero. Isto seria acompanhado por valores de perda mais elevados, o que implica que a rede neural não convergiu. Isto pode acontecer com mais frequência em determinados SKUs de GPU.

    Embora tais casos sejam incomuns, são possíveis e a melhor forma de lidar com o mesmo é tirar partido da otimização de hiperparâmetros e fornecer um leque mais alargado de valores, especialmente para hiperparâmetros, como taxas de aprendizagem. Até que a nossa capacidade de otimização de hiperparâmetros esteja disponível na produção, recomendamos que os utilizadores, que enfrentam estes problemas, tirem partido dos clusters de computação NC6 ou ND6, onde considerámos os resultados da preparação bastante estáveis.

    Passos seguintes