Configurar o AutoML para treinar um modelo de processamento de linguagem natural
APLICA-SE A:Extensão de ML da CLI do Azure v2 (atual)SDK do Python azure-ai-ml v2 (atual)
Neste artigo, você aprenderá a treinar modelos de NLP (processamento de idioma natural) com o ML automatizado no Azure Machine Learning. É possível criar modelos de NLP com ML automatizado por meio do SDK do Python v2 do Azure Machine Learning ou da CLI do Azure Machine Learning v2.
O ML automatizado oferece suporte a NLP, 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 NLP. As tarefas NPL incluem classificação de texto muticlasse, classificação de texto multirótulo e NER (reconhecimento de entidade nomeada).
Você pode se integrar com facilidade com a funcionalidade de rotulagem de dados do Azure Machine Learning para rotular os dados de texto ou trazer os seus dados rotulados existentes. O ML automatizado fornece a opção de usar o treinamento distribuído em clusters de computação com várias GPUs para ter um treinamento de modelo mais rápido. O modelo resultante pode ser operacionalizado em escala, usando as funcionalidades de MLOps do Azure Machine Learning.
Pré-requisitos
APLICA-SE A: Extensão de ML da CLI do Azurev2 (atual)
Assinatura do Azure. Caso não tenha uma assinatura do Azure, inscreva-se para experimentar a versão paga ou gratuita do Azure Machine Learning hoje.
Um workspace do Azure Machine Learning com uma computação de treinamento de GPU. Para criar o workspace, confira Criar recursos do workspace. Para mais informações, confira Tamanhos de máquina virtual otimizada para GPU para obter mais detalhes sobre as instâncias de GPU fornecidas pelo Azure.
Aviso
O suporte para modelos multilíngues e o uso de modelos com um comprimento máximo de sequência mais longo são necessários em vários casos de uso de NLP, como conjuntos de dados que não estão em inglês e documentos com intervalos mais longos. Como resultado, esses cenários podem exigir maior memória de GPU para que o treinamento do modelo seja bem sucedido, como a série NC_v3 ou ND.
A CLI v2 do Azure Machine Learning instalada. Para obter diretrizes para atualizar e instalar a versão mais recente, confira Instalar e configurar a CLI (v2).
Este artigo pressupõe alguma familiaridade com a configuração de um experimento de machine learning automatizado. Siga as instruções para ver os principais padrões de design de experimentos de machine learning automatizado.
Selecionar sua tarefa de NLP
Determine qual tarefa de NLP você deseja realizar. Atualmente, o ML automatizado dá suporte às tarefas de NLP de rede neural profunda a seguir.
Tarefa | Sintaxe do trabalho do AutoML | Descrição |
---|---|---|
Classificação de textos com multiclasse | CLI v2: text_classification SDK v2: text_classification() |
Há 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 o script de um filme como "Comédia" ou "Romântico". |
Classificação de textos com multirrótulo | CLI v2: text_classification_multilabel SDK v2: text_classification_multilabel() |
Há várias classes possíveis e é possível atribuir cada amostra a diversas classes. A tarefa é prever todas as classes de cada amostra Por exemplo, classificar o script de um filme como "Comédia", "Romântico" ou "Comédia e Romântico". |
NER (Reconhecimento de Entidade Nomeada) | CLI v2:text_ner SDK v2: text_ner() |
Há várias marcas possíveis para tokens em sequências. A tarefa é prever as marcas de todos os tokens de cada sequência. Por exemplo, extrair entidades específicas de domínio de um texto não estruturado, como contratos ou documentos financeiros. |
Thresholding
Thresholding é o recurso multi-rótulo que permite aos usuários escolher o limite do qual 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, são melhores para usuários que se preocupam com a precisão, mas essa opção pode levar a mais falsos negativos.
Preparando dados
Em experimentos de NLP no ML automatizado, você pode trazer os dados no formato .csv
em tarefas de classificação de várias classes ou vários rótulos. Para tarefas de NER, os arquivos .txt
de duas colunas que usam um espaço como o separador e aderem ao formato CoNLL são compatíveis. As seções a seguir fornecem detalhes sobre o formato de dados aceito em cada tarefa.
Multiclasse
Para classificação multiclasse, 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"
Multirrótulo
Para a classificação multirrótulo, as colunas do conjunto de dados seriam iguais às da classificação multiclasse, 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 | Nenhum rótulo |
---|---|---|---|
Texto sem formatação | "label1, label2, label3" |
"label1" |
"" |
Lista em Python com aspas | "['label1','label2','label3']" |
"['label1']" |
"[]" |
Importante
Analisadores diferentes são usados para ler os rótulos nestes formatos. Se você estiver usando o formato de texto sem formatação, use apenas caracteres alfabéticos, numéricos e '_'
nos seus rótulos. Todos os outros caracteres são reconhecidos como o separador dos rótulos.
Por exemplo, se o seu rótulo for "cs.AI"
, ele será lido como "cs"
e "AI"
. Ao passo que, com o formato de lista em Python, o rótulo seria "['cs.AI']"
, que é lido como "cs.AI"
.
Dados de exemplo de multirrótulo 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.",""
Dados de exemplo de multirrótulo no formato de lista em Python com 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.","[]"
NER (reconhecimento de entidade nomeada)
Ao contrário das classificações multiclasse ou multirrótulo, que usam os conjuntos de dados no formato .csv
, o reconhecimento de entidade nomeada requer o formato CoNLL. O arquivo precisa conter exatamente duas colunas e, em cada linha, o token e o rótulo são separados por um 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 treinar um modelo, 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á e uma mensagem de erro relevante será exibida. Veja a seguir os requisitos para ser aprovado nas verificações de validação de dados de cada tarefa.
Observação
Algumas verificações de validação de dados são aplicáveis ao conjunto de treinamento e de validação, enquanto outras são aplicáveis somente ao conjunto de treinamento. Se o conjunto de dados de teste não é aprovado na validação de dados, isso significa que o ML automatizado não pôde capturá-lo e há uma possibilidade de falha na inferência de modelo ou de um declínio no desempenho do modelo.
Tarefa | Verificação de validação de dados |
---|---|
Todas as tarefas | São necessárias pelo menos 50 amostras de treinamento |
Multiclasse e multirrótulo | Os dados de treinamento e de validação precisam 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 exclusivos – Nomes de coluna exclusivos dentro de cada conjunto de dados (por exemplo, o conjunto de treinamento não pode ter várias colunas chamadas Age) |
Somente multiclasse | Nenhum |
Somente multirrótulo | – O formato de coluna de rótulo precisa estar no formato aceito – Pelo menos uma amostra deve ter zero ou mais de dois rótulos, caso contrário, ela deve ser uma tarefa multiclass – Todos os rótulos devem estar no formato str ou int , sem sobreposição. Você não deve ter os rótulos 1 e '1' |
Somente NER | – O arquivo não pode começar com uma linha vazia – Cada linha precisa ser uma linha vazia ou seguir o formato {token} {label} , em que há exatamente um espaço entre o token e o rótulo e nenhum espaço em branco após o rótulo – Todos os rótulos precisam começar com I- , B- ou ser exatamente O . Diferencia maiúsculas de minúsculas – Exatamente uma linha vazia entre as duas amostras – Exatamente uma linha vazia no final do arquivo |
Configurar o experimento
A funcionalidade de NLP do ML automatizado é disparada por meio de trabalhos do tipo automl
específicos da tarefa, que é o mesmo fluxo de trabalho para enviar experimentos de ML automatizado para tarefas de classificação, regressão e previsão. Os parâmetros são definidos da mesma forma que nesses experimentos, como experiment_name
, compute_name
e entradas de dados.
No entanto, há diferenças importantes:
- Você pode ignorar
primary_metric
, pois ele serve apenas para fins de relatório. Atualmente, o ML automatizado treina apenas um modelo por execução para NLP e não há nenhuma seleção de modelo. - O parâmetro
label_column_name
só é necessário para tarefas de classificação de textos com multiclasse e multirrótulo. - Se mais de 10% das amostras no conjunto de dados contiverem mais de 128 tokens, ele será considerado de longo alcance.
APLICA-SE A: Extensão de ML da CLI do Azurev2 (atual)
Para trabalhos de ML automatizados da CLI v2, você configura o experimento em um arquivo YAML como o que vem a seguir.
Configurações de idioma
Como parte da funcionalidade do NLP, o ML automatizado dá suporte a 104 idiomas que usam modelos de DNN de texto pré-treinados multilíngues e com um idioma específico, como a família de modelos BERT. Atualmente, a seleção de idioma usa como padrão o inglês.
A tabela a seguir resume qual modelo é aplicado com base no tipo de tarefa e idioma. Confira a lista completa dos idiomas com suporte e os respectivos códigos.
Tipo de tarefa | Sintaxe para dataset_language |
Algoritmo de modelo de texto |
---|---|---|
Classificação de textos com multirrótulo | "eng" "deu" "mul" |
BERT em inglês que não diferencia maiúsculas de minúsculas BERT em alemão BERT multilíngue Em todos os outros idiomas, o ML automatizado aplica BERT multilíngues |
Classificação de textos com multiclasse | "eng" "deu" "mul" |
BERT em inglês que diferencia maiúsculas de minúsculas BERT multilíngue Em todos os outros idiomas, o ML automatizado aplica BERT multilíngues |
NER (reconhecimento de entidade nomeada) | "eng" "deu" "mul" |
BERT em inglês que diferencia maiúsculas de minúsculas BERT em alemão BERT multilíngue Em todos os outros idiomas, o ML automatizado aplica BERT multilíngues |
APLICA-SE A: Extensão de ML da CLI do Azurev2 (atual)
Você pode especificar o idioma do conjunto de dados na seção de definição de recursos do arquivo YAML de configuração. O BERT também é usado no processo de definição de recursos do treinamento de experimento de ML automatizado. Saiba mais sobre a Integração e definição de recursos do BERT no ML automatizado (SDK v1).
featurization:
dataset_language: "eng"
Treinamento distribuído
Você também pode executar seus experimentos de NLP com o treinamento distribuído em um cluster de cálculo do Azure Machine Learning.
Enviar o trabalho do AutoML
APLICA-SE A: Extensão de ML da CLI do Azurev2 (atual)
Para enviar seu trabalho do AutoML, você pode executar o seguinte comando da CLI v2 com o caminho para o arquivo .yml, o nome do workspace, o grupo de recursos e a ID da 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 de ML da CLI do Azurev2 (atual)
Confira os arquivos YAML de exemplo a seguir para cada tarefa de NLP.
Varredura de modelo e ajuste de hiperparâmetros (versão prévia)
Importante
Esse recurso está atualmente em visualização pública. Essa versão prévia é fornecida sem um contrato de nível de serviço e não é recomendada para cargas de trabalho de produção. Alguns recursos podem não ter suporte ou podem ter restrição de recursos.
Para obter mais informações, consulte Termos de Uso Complementares de Versões Prévias do Microsoft Azure.
O NLP do AutoML permite fornecer uma lista de modelos e combinações de hiperparâmetros por meio do espaço de pesquisa de hiperparâmetros na configuração. O Hyperdrive gera diversas execuções filhas, cada uma como uma execução de ajuste detalhado para um determinado modelo de NLP e um conjunto de valores de hiperparâmetro escolhidos e varridos com base no espaço de pesquisa fornecido.
Algoritmos de modelo com suporte
Todos os modelos de DNN de texto pré-treinados atualmente disponíveis no NLP do AutoML para ajuste detalhado 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
Observe que os modelos grandes são maiores do que as contrapartes básicas. Eles geralmente são mais eficientes, mas ocupam mais memória da GPU e tempo para treinamento. Por isso, seus requisitos de SKU são mais rigorosos: recomenda-se a execução em VMs da série ND para obter os melhores resultados.
Algoritmos de modelo compatíveis – HuggingFace (versão prévia)
Com o novo back-end que é executado em pipelines do Azure Machine Learning, você também pode usar qualquer modelo de classificação de texto/token do Hub HuggingFace para realizar Classificação de Texto e 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 Azure Machine Learning que foram validados com os componentes de pipeline.
O uso de qualquer modelo HuggingFace disparará execuções usando componentes de pipeline. Se os modelos HuggingFace e herdado forem usados, todas as execuções/avaliações serão disparadas usando componentes.
Hiperparâmetros compatíveis
A tabela a seguir descreve os hiperparâmetros aos quais o NLP do AutoML dá suporte.
Nome do parâmetro | Descrição | Syntax |
---|---|---|
gradient_accumulation_steps | O número de operações regressivas cujos gradientes devem ser somados antes de realizar uma etapa de descida de gradiente chamando a função de etapa do otimizador. Isso é para usar um tamanho de lote efetivo que é gradient_accumulation_steps vezes maior que o tamanho máximo que se ajusta à GPU. |
Deve ser um número inteiro positivo. |
learning_rate | Taxa de aprendizagem inicial. | Deve ser um float no intervalo (0, 1). |
learning_rate_scheduler | Tipo de agendador de taxa de aprendizagem. | Escolha entre linear, cosine, cosine_with_restarts, polynomial, constant, constant_with_warmup . |
model_name | Nome de um dos modelos compatíveis. | Escolha 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 treinamento. | 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 | Proporção do total de etapas de treinamento usadas para um aquecimento linear de 0 a learning_rate. | Precisa ser um float no intervalo [0, 1]. |
weight_decay | Valor de decaimento de peso quando o otimizador é sgd, adam ou adamw. | Precisa ser um float no intervalo [0, 1]. |
Todos os hiperparâmetros discretos permitem somente distribuições de escolha, como os hiperparâmetros do tipo inteiro training_batch_size
e do tipo de cadeia de caracteres model_name
. Todos os hiperparâmetros contínuos como learning_rate
dão suporte a todas as distribuições.
Definir as configurações de varredura
É possível configurar todos os parâmetros relacionados à varredura. Diversos subespaços de modelo podem ser criados com hiperparâmetros condicionais ao respectivo modelo, conforme 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 compatíveis aqui. Veja todas as nove opções em Ajuste de hiperparâmetro em um modelo
APLICA-SE A: Extensão de ML da CLI do Azurev2 (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ê precisará especificar o método de amostragem a ser usado na varredura do espaço de parâmetro definido. Atualmente, os seguintes métodos de amostragem são compatíveis com o parâmetro sampling_algorithm
:
Tipo de amostragem | Sintaxe do Trabalho do AutoML |
---|---|
Amostragem aleatória | random |
Amostragem de grade | grid |
Amostragem Bayesiana | bayesian |
Orçamento do experimento
Opcionalmente, é possível especificar o orçamento do experimento do trabalho de treinamento do NLP do AutoML usando o parâmetro timeout_minutes
no limits
(o 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 NLP do AutoML também dá suporte a trial_timeout_minutes
, a quantidade máxima de tempo em minutos durante a qual uma avaliação individual pode ser executada antes de ser encerrada, e a max_nodes
, o número máximo de nós do cluster de computação de apoio a ser usado no trabalho. Esses parâmetros também pertencem à seção limits
.
APLICA-SE A: Extensão de ML da CLI do Azurev2 (atual)
limits:
timeout_minutes: 60
trial_timeout_minutes: 20
max_nodes: 2
Políticas de término antecipado
Você pode encerrar automaticamente execuções de baixo desempenho com uma política de término antecipado. O encerramento antecipado melhora a eficiência computacional, pois economiza recursos de computação que, de outra forma, seriam gastos em configurações menos promissoras. O NLP do AutoML dá suporte a políticas de encerramento antecipado usando o parâmetro early_termination
. Se nenhuma política de encerramento 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 a varredura de hiperparâmetro.
Recursos para a varredura
Você pode controlar os recursos gastos em sua varredura de hiperparâmetros especificando max_trials
e max_concurrent_trials
para a varredura.
Parâmetro | Detalhe |
---|---|
max_trials |
Parâmetro para número máximo de configurações a serem varridas. Precisa ser um número inteiro entre 1 e 1000. Ao explorar apenas os hiperparâmetros padrão para determinado algoritmo de modelo, defina esse parâmetro como 1. O valor padrão é 1. |
max_concurrent_trials |
Número máximo de execuções que podem ser feitas simultaneamente. Se especificado, o tempo limite deve ser um número inteiro entre 1 e 100. O valor padrão é 1. OBSERVAÇÃO: max_concurrent_trials é limitado a max_trials internamente. Por exemplo, se o usuário definir max_concurrent_trials=4 , max_trials=2 , os valores serão atualizados internamente como max_concurrent_trials=2 , max_trials=2 . |
Você pode configurar todos os parâmetros relacionados à varredura, conforme mostrado nesse exemplo.
APLICA-SE A: Extensão de ML da CLI do Azurev2 (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 determinados conjuntos de dados, independentemente da tarefa de NLP, as pontuações produzidas podem ser muito baixas, às vezes até zero. Essa pontuação é acompanhada por valores de perda mais altos, o que significa que a rede neural não convergiu. Essas pontuações podem acontecer com mais frequência em determinados 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 variedade mais ampla de valores, especialmente para hiperparâmetros como taxas de aprendizado. Até que o nosso recurso de ajuste de hiperparâmetros esteja disponível na produção, recomendamos que os usuários que tiverem esses problemas usem os clusters de cálculo NC6 ou ND6. Esses clusters normalmente têm resultados de treinamento bastante estáveis.