Transferir aprendizado para modelos de classificação de texto do TensorFlow no Amazon SageMaker

Amazon Sage Maker oferece um conjunto de algoritmos integrados, modelos pré-treinados e modelos de solução pré-criados para ajudar cientistas de dados e profissionais de machine learning (ML) a começar a treinar e implantar modelos de ML rapidamente. Você pode usar esses algoritmos e modelos para aprendizado supervisionado e não supervisionado. Eles podem processar vários tipos de dados de entrada, incluindo tabular, imagem e texto.

Este post é o terceiro de uma série sobre os novos algoritmos integrados no SageMaker. No primeira postagem, mostramos como o SageMaker fornece um algoritmo integrado para classificação de imagens. No segundo post, mostramos como o SageMaker fornece um algoritmo integrado para detecção de objetos. Hoje, anunciamos que o SageMaker fornece um novo algoritmo integrado para classificação de texto usando o TensorFlow. Este algoritmo de aprendizado supervisionado suporta o aprendizado de transferência para muitos modelos pré-treinados disponíveis em Hub do TensorFlow. Ele pega um pedaço de texto como entrada e gera a probabilidade para cada um dos rótulos de classe. Você pode ajustar esses modelos pré-treinados usando o aprendizado de transferência, mesmo quando um grande corpus de texto não estiver disponível. Está disponível através do SageMaker algoritmos integrados, bem como através do IU JumpStart do SageMaker in Estúdio Amazon SageMaker. Para obter mais informações, consulte Classificação de Texto e o caderno de exemplo Introdução ao JumpStart – Classificação de texto.

A classificação de texto com o TensorFlow no SageMaker oferece aprendizado de transferência em muitos modelos pré-treinados disponíveis no TensorFlow Hub. De acordo com o número de rótulos de classe nos dados de treinamento, uma camada de classificação é anexada ao modelo de hub do TensorFlow pré-treinado. A camada de classificação consiste em uma camada dropout e uma camada densa, totalmente conectada, com regularizador de 2 normas, que é inicializada com pesos aleatórios. O treinamento do modelo possui hiperparâmetros para a taxa de dropout da camada dropout e fator de regularização L2 para a camada densa. Então, toda a rede, incluindo o modelo pré-treinado, ou apenas a camada de classificação superior pode ser ajustada nos novos dados de treinamento. Nesse modo de aprendizado de transferência, o treinamento pode ser obtido mesmo com um conjunto de dados menor.

Como usar o novo algoritmo de classificação de texto do TensorFlow

Esta seção descreve como usar o algoritmo de classificação de texto do TensorFlow com o SDK Python do SageMaker. Para obter informações sobre como usá-lo na interface do Studio, consulte SageMaker JumpStart.

O algoritmo suporta o aprendizado de transferência para os modelos pré-treinados listados em Modelos de tensorflow. Cada modelo é identificado por um único model_id. O código a seguir mostra como ajustar o modelo base BERT identificado por model_id tensorflow-tc-bert-en-uncased-L-12-H-768-A-12-2 em um conjunto de dados de treinamento personalizado. Para cada model_id, para iniciar um trabalho de treinamento do SageMaker por meio do Estimador classe do SageMaker Python SDK, você deve buscar o URI da imagem do Docker, o URI do script de treinamento e o URI do modelo pré-treinado por meio das funções de utilitário fornecidas no SageMaker. O URI do script de treinamento contém todo o código necessário para processamento de dados, carregamento do modelo pré-treinado, treinamento do modelo e salvamento do modelo treinado para inferência. O URI do modelo pré-treinado contém a definição da arquitetura do modelo pré-treinado e os parâmetros do modelo. O URI do modelo pré-treinado é específico para o modelo específico. Os tarballs de modelo pré-treinados foram pré-baixados do TensorFlow e salvos com a assinatura de modelo apropriada em Serviço de armazenamento simples da Amazon (Amazon S3), para que o trabalho de treinamento seja executado em isolamento de rede. Veja o seguinte código:

from sagemaker import image_uris, model_uris, script_urisfrom sagemaker.estimator import Estimator

model_id, model_version = "tensorflow-tc-bert-en-uncased-L-12-H-768-A-12-2", "*"
training_instance_type = "ml.p3.2xlarge"
# Retrieve the docker image
train_image_uri = image_uris.retrieve(model_id=model_id,model_version=model_version,image_scope="training",instance_type=training_instance_type,region=None,framework=None)# Retrieve the training script
train_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="training")# Retrieve the pre-trained model tarball for transfer learning
train_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="training")

output_bucket = sess.default_bucket()
output_prefix = "jumpstart-example-tensorflow-tc-training"
s3_output_location = f"s3://{output_bucket}/{output_prefix}/output"

Com esses artefatos de treinamento específicos do modelo, você pode construir um objeto do Estimador classe:

# Create SageMaker Estimator instance
tf_tc_estimator = Estimator(
    role=aws_role,
    image_uri=train_image_uri,
    source_dir=train_source_uri,
    model_uri=train_model_uri,
    entry_point="transfer_learning.py",
    instance_count=1,
    instance_type=training_instance_type,
    max_run=360000,
    hyperparameters=hyperparameters,
    output_path=s3_output_location,)

Em seguida, para transferir aprendizado em seu conjunto de dados personalizado, talvez seja necessário alterar os valores padrão dos hiperparâmetros de treinamento, listados em Hiperparâmetros. Você pode buscar um dicionário Python desses hiperparâmetros com seus valores padrão chamando hyperparameters.retrieve_default, atualize-os conforme necessário e, em seguida, passe-os para a classe Estimator. Observe que os valores padrão de alguns dos hiperparâmetros são diferentes para modelos diferentes. Para modelos grandes, o tamanho do lote padrão é menor e o train_only_top_layer hiperparâmetro é definido como True. O hiperparâmetro Train_only_top_layer define quais parâmetros do modelo mudam durante o processo de ajuste fino. Se train_only_top_layer is True, os parâmetros das camadas de classificação mudam e o restante dos parâmetros permanece constante durante o processo de ajuste fino. Por outro lado, se train_only_top_layer is False, então todos os parâmetros do modelo são ajustados. Veja o seguinte código:

from sagemaker import hyperparameters# Retrieve the default hyper-parameters for fine-tuning the model
hyperparameters = hyperparameters.retrieve_default(model_id=model_id, model_version=model_version)# [Optional] Override default hyperparameters with custom values
hyperparameters["epochs"] = "5"

Nós fornecemos o SST2 como um conjunto de dados padrão para ajustar os modelos. O conjunto de dados contém críticas de filmes positivas e negativas. Foi baixado de TensorFlow para Licença Apache 2.0. O código a seguir fornece o conjunto de dados de treinamento padrão hospedado em buckets do S3.

# Sample training data is available in this bucket
training_data_bucket = f"jumpstart-cache-prod-{aws_region}"
training_data_prefix = "training-datasets/SST2/"

training_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}"

Por fim, para iniciar o trabalho de treinamento do SageMaker para ajustar o modelo, chame .fit no objeto da classe Estimator, enquanto passa o local do Amazon S3 do conjunto de dados de treinamento:

# Launch a SageMaker Training job by passing s3 path of the training data
tf_od_estimator.fit({"training": training_dataset_s3_path}, logs=True)

Para obter mais informações sobre como usar o novo algoritmo de classificação de texto SageMaker TensorFlow para transferir aprendizado em um conjunto de dados personalizado, implante o modelo ajustado, execute a inferência no modelo implantado e implante o modelo pré-treinado como está, sem primeiro ajuste fino em um conjunto de dados personalizado, consulte o exemplo de notebook a seguir: Introdução ao JumpStart – Classificação de texto.

Interface de entrada/saída para o algoritmo de classificação de texto TensorFlow

Você pode ajustar cada um dos modelos pré-treinados listados em Modelos do TensorFlow a qualquer conjunto de dados composto de frases de texto com qualquer número de classes. O modelo pré-treinado anexa uma camada de classificação ao modelo de incorporação de texto e inicializa os parâmetros da camada para valores aleatórios. A dimensão de saída da camada de classificação é determinada com base no número de classes detectadas nos dados de entrada. O objetivo é minimizar erros de classificação nos dados de entrada. O modelo retornado pelo ajuste fino pode ser implantado posteriormente para inferência.

As instruções a seguir descrevem como os dados de treinamento devem ser formatados para entrada no modelo:

  • Entrada – Um diretório que contém um arquivo data.csv. Cada linha da primeira coluna deve ter rótulos de classe inteiros entre 0 e o número de classes. Cada linha da segunda coluna deve ter os dados de texto correspondentes.
  • Saída – Um modelo ajustado que pode ser implantado para inferência ou treinado posteriormente usando treinamento incremental. Um arquivo de mapeamento de índices de classe para rótulos de classe é salvo junto com os modelos.

Veja a seguir um exemplo de um arquivo CSV de entrada. Observe que o arquivo não deve ter nenhum cabeçalho. O arquivo deve ser hospedado em um bucket do S3 com um caminho semelhante ao seguinte: s3://bucket_name/input_directory/. Observe que a trilha / É necessário.

|0 |hide new secretions from the parental units|
|0 |contains no wit , only labored gags|
|1 |that loves its characters and communicates something rather beautiful about human nature|
|...|...|

Inferência com o algoritmo de classificação de texto do TensorFlow

Os modelos gerados podem ser hospedados para inferência e texto de suporte como o application/x-text tipo de conteúdo. A saída contém os valores de probabilidade, rótulos de classe para todas as classes e o rótulo previsto correspondente ao índice de classe com a probabilidade mais alta codificada no formato JSON. O modelo processa uma única string por solicitação e gera apenas uma linha. Veja a seguir um exemplo de resposta no formato JSON:

accept: application/json;verbose
{"probabilities": [prob_0, prob_1, prob_2, ...],
 "labels": [label_0, label_1, label_2, ...],
 "predicted_label": predicted_label}

If accept está definido para application/json, então o modelo produz apenas probabilidades. Para obter mais detalhes sobre treinamento e inferência, consulte o bloco de anotações de exemplo Introdução ao Introdução ao JumpStart – Classificação de texto.

Use os algoritmos integrados do SageMaker por meio da interface do JumpStart

Você também pode usar a classificação de texto do SageMaker TensorFlow e qualquer um dos outros algoritmos integrados com apenas alguns cliques por meio da interface do JumpStart. JumpStart é um recurso do SageMaker que permite treinar e implantar algoritmos integrados e modelos pré-treinados de várias estruturas de ML e hubs de modelo por meio de uma interface gráfica. Além disso, ele permite implantar soluções de ML completas que unem modelos de ML e vários outros serviços da AWS para resolver um caso de uso direcionado.

A seguir estão dois vídeos que mostram como você pode replicar o mesmo processo de ajuste fino e implantação que acabamos de passar com alguns cliques por meio da interface do JumpStart.

Ajuste o modelo pré-treinado

Aqui está o processo para ajustar o mesmo modelo de classificação de texto pré-treinado.

Implante o modelo ajustado

Após a conclusão do treinamento do modelo, você pode implantar diretamente o modelo em um endpoint persistente e em tempo real com um clique.

Conclusão

Neste post, anunciamos o lançamento do algoritmo integrado de classificação de texto SageMaker TensorFlow. Fornecemos um código de exemplo de como fazer o aprendizado de transferência em um conjunto de dados personalizado usando um modelo pré-treinado do hub TensorFlow usando esse algoritmo.

Para mais informações, confira o documentação e o caderno de exemplo Introdução ao JumpStart – Classificação de texto.


Sobre os autores

Transfira o aprendizado para modelos de classificação de texto do TensorFlow no Amazon SageMaker PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.Vivek Madan é um Cientista Aplicado com o Equipe do Amazon SageMaker JumpStart. Ele obteve seu doutorado na Universidade de Illinois em Urbana-Champaign e foi pesquisador de pós-doutorado na Georgia Tech. Ele é um pesquisador ativo em aprendizado de máquina e design de algoritmos e publicou artigos em conferências EMNLP, ICLR, COLT, FOCS e SODA.

Transfira o aprendizado para modelos de classificação de texto do TensorFlow no Amazon SageMaker PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.João moura é arquiteto de soluções especialista em IA/ML na Amazon Web Services. Ele se concentra principalmente em casos de uso de PNL e em ajudar os clientes a otimizar o treinamento e a implantação do modelo de aprendizado profundo. Ele também é um defensor ativo de soluções de ML de baixo código e hardware especializado em ML.

Transfira o aprendizado para modelos de classificação de texto do TensorFlow no Amazon SageMaker PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.Dr. é um Cientista Aplicado Sênior com Algoritmos integrados do Amazon SageMaker e ajuda a desenvolver algoritmos de aprendizado de máquina. Ele obteve seu PhD da Universidade de Illinois Urbana Champaign. Ele é um pesquisador ativo em aprendizado de máquina e inferência estatística e publicou muitos artigos nas conferências NeurIPS, ICML, ICLR, JMLR, ACL e EMNLP.

Carimbo de hora:

Mais de Aprendizado de máquina da AWS