Configurar o AutoML para treinar um modelo de processamento de idioma natural com Python (versão prévia)
APLICA-SE A: SDK do Python do AzureML v1
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.
Neste artigo, você aprenderá a treinar modelos de NLP (processamento de idioma natural) com o ML automatizado no SDK do Azure Machine Learning para Python.
O ML automatizado dá suporte ao NLP, o que permite que os profissionais de ML e os cientistas de dados tragam os próprios dados de texto e criem modelos personalizados para tarefas como classificação de textos com multiclasse, classificação de textos com multirró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, aproveitando as funcionalidades de MLOps do Azure Machine Learning.
Pré-requisitos
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. 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.
O SDK do Python do Azure Machine Learning instalado.
Para instalar o SDK, você pode:
Criar uma instância de computação, que instala automaticamente o SDK e vem pré-configurada para fluxos de trabalho de ML. Para obter mais informações, confira Criar e gerenciar uma instância de computação do Azure Machine Learning.
Instalar o pacote
automl
por conta própria, que inclui a instalação padrão do SDK.
Importante
Os comandos do Python neste artigo exigem a versão mais recente do pacote
azureml-train-automl
.- Instale o pacote
azureml-train-automl
mais recente em seu ambiente local. - Para obter detalhes sobre o pacote
azureml-train-automl
mais recente, veja as notas sobre a versão.
Este artigo pressupõe alguma familiaridade com a configuração de um experimento de machine learning automatizado. Siga o tutorial ou 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 de AutoMLConfig | Descrição |
---|---|---|
Classificação de textos com multiclasse | task = '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 | task = '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) | task = '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 do texto não estruturado, como contratos ou documentos financeiros |
Preparando dados
Para experimentos de NLP no ML automatizado, você pode colocar um conjunto de dados do Azure Machine Learning com o formato .csv
em tarefas de classificação multiclasse ou multirrótulo. 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 adicionais 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 do treinamento, 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 | - Conjuntos de treinamento e de validação devem ser fornecidos. - 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 do AutoMLConfig
, que é o mesmo fluxo de trabalho para enviar experimentos de ML automatizado para tarefas de classificação, regressão e previsão. A maioria dos parâmetros será definida da mesma forma que nesses experimentos, como task
, compute_target
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 a maioria dos exemplos em seu conjuntos de dados contiver mais de 128 palavras, é considerado longo. Para esse cenário, você pode habilitar a opção de texto longo com o parâmetro
enable_long_range_text=True
em seuAutoMLConfig
. Isso ajuda a aprimorar o desempenho do modelo, mas requer treinamentos mais longos.
automl_settings = {
"verbosity": logging.INFO,
"enable_long_range_text": True, # # You only need to set this parameter if you want to enable the long-range text setting
}
automl_config = AutoMLConfig(
task="text-classification",
debug_log="automl_errors.log",
compute_target=compute_target,
training_data=train_dataset,
validation_data=val_dataset,
label_column_name=target_column_name,
**automl_settings
)
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 |
Você pode especificar o idioma do conjunto de dados no seu FeaturizationConfig
. 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.
from azureml.automl.core.featurization import FeaturizationConfig
featurization_config = FeaturizationConfig(dataset_language='{your language code}')
automl_config = AutomlConfig("featurization": featurization_config)
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. Isso é gerenciado automaticamente pelo ML automatizado quando os parâmetros max_concurrent_iterations = number_of_vms
e enable_distributed_dnn_training = True
são fornecidos no seu AutoMLConfig
durante a configuração do experimento.
max_concurrent_iterations = number_of_vms
enable_distributed_dnn_training = True
Ao fazer isso, o treinamento distribuído dos modelos NLP é agendado e dimensionado automaticamente para cada GPU na sua máquina virtual ou cluster de máquinas virtuais. O número máximo de máquinas virtuais permitido é 32. O treinamento é agendado com um número de máquinas virtuais em potências de dois.
Blocos de anotações de exemplo
Confira os notebooks de exemplo para obter exemplos de código detalhados para cada tarefa de NLP.
- Classificação de textos com multiclasse
- Classificação de textos com multirrótulo
- Reconhecimento de entidade nomeada