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.
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.
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
APLICA-SE A:Extensão v2 da CLI do Azure (atual)
Veja os seguintes ficheiros YAML de exemplo para cada tarefa NLP.
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: 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.