Compartilhar via


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 Azure MLv1

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

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 seu AutoMLConfig. Isso ajuda a aprimorar o desempenho do modelo, mas requer treinamentos mais longos.
    • Se você habilitar texto de longo alcance, uma GPU com memória mais alta será necessária, como série NCv3 ou série ND.
    • O parâmetro enable_long_range_text só está disponível para tarefas de classificação de várias classes.
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.

Próximas etapas