Pular para o conteúdo principal
InicioTutoriaisInteligência Artificial (IA)

Guia de Introdução ao Ajuste Fino de LLMs

O ajuste fino dos grandes modelos de linguagem (LLMs, Large Language Models) revolucionou o processamento de linguagem natural (PLN), oferecendo recursos sem precedentes em tarefas como tradução de idiomas, análise de sentimentos e geração de textos. Essa abordagem transformadora aproveita modelos pré-treinados como o GPT-2, aprimorando seu desempenho em domínios específicos pelo processo de ajuste fino.
Actualizado ago. de 2024  · 12 min leer

No último ano e meio, o campo do processamento de linguagem natural (PLN) passou por uma transformação significativa devido à popularização dos grandes modelos de linguagem (LLMs, Large Language Models). As habilidades de linguagem natural que esses modelos apresentam permitiram aplicações que pareciam impossíveis de serem realizadas há alguns anos.

Os LLMs estão ampliando os limites do que antes era considerado possível, com recursos que vão desde a tradução de idiomas até a análise de sentimentos e a geração de textos.

No entanto, todos nós sabemos que o treinamento desses modelos é demorado e caro. Por isso, o ajuste fino de grandes modelos de linguagem é importante para adaptar esses algoritmos avançados a tarefas ou domínios específicos.

Esse processo aprimora o desempenho do modelo em tarefas especializadas e amplia consideravelmente sua aplicabilidade em várias áreas. Isso significa que podemos aproveitar a capacidade de processamento de linguagem natural dos LLMs pré-treinados e de código aberto e treiná-los ainda mais para executar tarefas específicas.

Hoje, você vai conhecer a essência dos modelos de linguagem pré-treinados e se aprofundar no processo de ajuste fino.

Então, vamos ver etapas práticas para fazer o ajuste fino de um modelo como o GPT-2 usando a Hugging Face.

Como funcionam os modelos de linguagem pré-treinados

Um modelo de linguagem é um tipo de algoritmo de machine learning desenvolvido para prever a próxima palavra de uma frase, tomando por base os segmentos anteriores. É baseado na arquitetura de transformadores, que é explicada em detalhes em nosso artigo Como Funcionam os Transformadores.

Modelos de linguagem pré-treinados, como o GPT (Generative Pre-trained Transformer), são treinados em grandes quantidades de dados de textos. Isso permite que os LLMs compreendam os princípios fundamentais que regem o uso de palavras e sua disposição na linguagem natural.

Imagem do autor. Entrada e saída de um LLM.

Imagem do autor Entrada e saída de um LLM.

A parte mais importante é que esses modelos são bons não só em compreender a linguagem natural, mas também em gerar textos semelhantes aos de humanos com base na entrada que recebem.

E a melhor parte de tudo isso?

Esses modelos já estão disponíveis para o público em geral via APIs. Se quiser saber como tirar proveito dos LLMs mais avançados da OpenAI, você pode aprender a fazer isso seguindo esta folha de dicas sobre a API da OpenAI.

O que é ajuste fino e por que é importante?

Ajuste fino é o processo de pegar um modelo pré-treinado e treiná-lo ainda mais com um conjunto de dados específico do domínio.

A maioria dos modelos LLM atuais tem um desempenho geral muito bom, mas apresenta falhas em problemas específicos orientados a tarefas. O processo de ajuste fino oferece vantagens consideráveis, como despesas de computação reduzidas e a capacidade de utilizar modelos de ponta sem a necessidade de desenvolver um modelo desde o início.

Os transformadores permitem acesso a uma ampla coleção de modelos pré-treinados adequados a várias tarefas. O ajuste fino desses modelos é uma etapa crucial para melhorar a capacidade do modelo de executar tarefas específicas, como análise de sentimentos, resposta a perguntas ou resumo de documentos, com maior precisão.

Imagem do autor. Visualização do processo de ajuste fino.

Imagem do autor. Visualização do processo de ajuste fino.

O ajuste fino adapta o modelo para que ele tenha um melhor desempenho em tarefas específicas, tornando-o mais eficaz e versátil em aplicações reais. Esse processo é essencial para adaptar um modelo já existente a uma tarefa ou domínio específico.

A decisão de fazer o ajuste fino depende de suas metas, que normalmente variam de acordo com o domínio específico ou a tarefa em questão.

Os diferentes tipos de ajuste fino

O ajuste fino pode ser abordado de várias maneiras, dependendo principalmente do foco principal e de seus objetivos específicos.

Ajuste fino supervisionado

A abordagem de ajuste fino mais simples e comum. O modelo é treinado com um conjunto de dados rotulado específico para a tarefa-alvo a ser executada, como classificação de textos ou reconhecimento de entidades nomeadas.

Por exemplo: para análise de sentimentos, devemos treinar o modelo com um conjunto de dados contendo amostras de texto rotuladas com o sentimento correspondente.

Aprendizado com poucos exemplos (few-shot)

Há alguns casos em que a coleta de um grande conjunto de dados rotulados não é prática. O aprendizado com poucos exemplos (few-shot learning) busca resolver isso disponibilizando alguns exemplos (shots) da tarefa necessária no início dos prompts de entrada. Isso ajuda o modelo a ter um contexto melhor da tarefa sem um extenso processo de ajuste fino.

Aprendizado por transferência

Embora todas as técnicas de ajuste fino sejam uma forma de aprendizado por transferência, essa categoria tem o objetivo específico de permitir que um modelo execute uma tarefa diferente daquela com que foi inicialmente treinado. A ideia principal é aproveitar o conhecimento que o modelo adquiriu com um conjunto de dados grande e geral e aplicá-lo a uma tarefa mais específica ou relacionada.

Ajuste fino específico do domínio

Esse tipo de ajuste fino tenta adaptar o modelo para entender e gerar textos específicos de um determinado domínio ou setor. O modelo é ajustado com um conjunto de dados composto de textos do domínio desejado para melhorar seu contexto e conhecimento de tarefas específicas do domínio.

Por exemplo: para gerar um chatbot para um aplicativo médico, o modelo deve ser treinado com registros médicos, visando adaptar sua capacidade de compreensão de linguagem à área da saúde.

Guia passo a passo para ajuste fino de um LLM

Execute e edite o código deste tutorial online

Executar código

Já sabemos que o ajuste fino é o processo de pegar um modelo pré-treinado e atualizar seus parâmetros treinando-o com um conjunto de dados específico para sua tarefa. Então, vamos exemplificar esse conceito com o ajuste fino de um modelo real.

Imagine que estamos trabalhando com o GPT-2, mas percebemos que ele é muito ruim para inferir os sentimentos de tweets.

Uma pergunta natural que vem à mente é: podemos fazer algo para melhorar seu desempenho?

Para que o desempenho melhore, podemos aproveitar o ajuste fino treinando nosso modelo GPT-2 pré-treinado a partir do modelo da Hugging Face com um conjunto de dados contendo tweets e seus sentimentos correspondentes. Veja um exemplo básico de ajuste fino de um modelo para classificação de sequências:

Etapa 1: escolher um modelo pré-treinado e um conjunto de dados

Para fazer o ajuste fino de um modelo, sempre precisamos ter em mente um modelo pré-treinado. No nosso caso, vamos fazer um ajuste fino simples usando o GPT-2.

Captura de tela do hub de conjuntos de dados da Hugging Face. Seleção do modelo GPT2 da OpenAI.

Captura de tela do hub de conjuntos de dados da Hugging Face. Seleção do modelo GPT2 da OpenAI.

Lembre-se sempre de selecionar uma arquitetura de modelo adequada para a tarefa.

Etapa 2: carregar os dados a serem usados

Agora que temos nosso modelo, precisamos de dados de qualidade para trabalhar, e é exatamente aí que a biblioteca datasets entra em ação.

No meu caso, vou usar a biblioteca datasets da Hugging Face para importar um conjunto de dados contendo tweets segmentados por sentimento (positivos, neutros ou negativos).

from datasets import load_dataset

dataset = load_dataset("mteb/tweet_sentiment_extraction")
df = pd.DataFrame(dataset['train'])

Ao verificar o conjunto de dados que acabamos de baixar, vemos que é um conjunto de dados que contém um subconjunto de treinamento e outro de teste. Ao converter o subconjunto de treinamento em um DataFrame, ele fica assim:

Conjunto de dados a ser usado.

Conjunto de dados a ser usado.

Etapa 3: tokenizador

Agora que já temos o conjunto de dados, precisamos de um tokenizador a fim de prepará-lo para ser analisado pelo nosso modelo.

Como os LLMs trabalham com tokens, precisamos de um tokenizador para processar o conjunto de dados. Para processar o conjunto de dados em uma única etapa, use o método map de Datasets para aplicar uma função de pré-processamento em todo o conjunto de dados.

É por isso que a segunda etapa é carregar um tokenizador pré-treinado e tokenizar o conjunto de dados para que ele possa ser usado para o ajuste fino.

from transformers import GPT2Tokenizer

# Loading the dataset to train our model
dataset = load_dataset("mteb/tweet_sentiment_extraction")

tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
tokenizer.pad_token = tokenizer.eos_token
def tokenize_function(examples):
   return tokenizer(examples["text"], padding="max_length", truncation=True)

tokenized_datasets = dataset.map(tokenize_function, batched=True)

BÔNUS: para melhorar os requisitos de processamento, podemos criar um subconjunto menor do conjunto de dados completo para ajustar o modelo. O conjunto de treinamento será usado para ajuste fino do modelo, enquanto o conjunto de teste será usado para avaliá-lo.

small_train_dataset = tokenized_datasets["train"].shuffle(seed=42).select(range(1000))
small_eval_dataset = tokenized_datasets["test"].shuffle(seed=42).select(range(1000))

Etapa 4: inicializar o modelo básico

Comece carregando o modelo e especifique o número de rótulos esperados. No cartão do conjunto de dados de sentimento dos tweets, você sabe que há três rótulos:

from transformers import GPT2ForSequenceClassification

model = GPT2ForSequenceClassification.from_pretrained("gpt2", num_labels=3)

Etapa 5: avaliar o método

A biblioteca Transformers disponibiliza a classe Trainer, otimizada para treinamento. No entanto, esse método não inclui uma forma de avaliar o modelo. É por isso que, antes de iniciar o treinamento, precisamos passar ao Trainer uma função para avaliar o desempenho do modelo.

import evaluate

metric = evaluate.load("accuracy")

def compute_metrics(eval_pred):
   logits, labels = eval_pred
   predictions = np.argmax(logits, axis=-1)
   return metric.compute(predictions=predictions, references=labels)

Etapa 6: fazer o ajuste fino usando o método Trainer

A última etapa é configurar os argumentos de treinamento e iniciar o processo de treinamento. A biblioteca Transformers contém a classe Trainer, que disponibiliza uma ampla gama de opções e recursos de treinamento, como registro em log, acúmulo de gradiente e precisão mista. Primeiro, definimos os argumentos de treinamento juntamente com a estratégia de avaliação. Quando tudo estiver definido, é possível treinar o modelo com facilidade usando o comando train().

from transformers import TrainingArguments, Trainer

training_args = TrainingArguments(
   output_dir="test_trainer",
   #evaluation_strategy="epoch",
   per_device_train_batch_size=1,  # Reduce batch size here
   per_device_eval_batch_size=1,    # Optionally, reduce for evaluation as well
   gradient_accumulation_steps=4
   )


trainer = Trainer(
   model=model,
   args=training_args,
   train_dataset=small_train_dataset,
   eval_dataset=small_eval_dataset,
   compute_metrics=compute_metrics,

)

trainer.train()

Após o treinamento, avalie o desempenho do modelo com um conjunto de validação ou teste. Novamente, a classe Trainer já contém um método de avaliação que cuida disso.

import evaluate

trainer.evaluate()

Essas são as etapas mais básicas para fazer o ajuste fino de qualquer LLM. Lembre-se de que o ajuste fino de um LLM exige muita capacidade de computação, e talvez seu computador local não tenha capacidade suficiente para isso.

Você pode aprender a fazer o ajuste fino de LLMs mais avançados diretamente na interface da OpenAI seguindo este tutorial sobre Como fazer o ajuste fino do GPT 3.5.

Melhores práticas de ajuste fino

Para garantir o sucesso do ajuste fino, leve em consideração as práticas recomendadas a seguir:

Qualidade e quantidade de dados

A qualidade do conjunto de dados de ajuste fino afeta consideravelmente o desempenho do modelo. Todos sabemos:

"Se entra lixo, sai lixo".

Portanto, sempre garanta que os dados sejam limpos, pertinentes e grandes o bastante.

Ajuste dos hiperparâmetros

O ajuste fino geralmente é um processo longo que precisa ser repetido. Sempre analise várias configurações de taxas de aprendizado, tamanhos de lote e número de épocas de treinamento para identificar a melhor configuração para o projeto.

Ajustes precisos são essenciais para garantir que o modelo aprenda de forma eficiente e se adapte bem a dados não vistos, evitando a armadilha do sobreajuste.

Avaliação frequente

Avalie com regularidade o progresso do modelo durante o treinamento para acompanhar sua eficácia e implementar as modificações necessárias. Isso envolve a avaliação do desempenho do modelo usando um conjunto de dados de validação distinto durante o período de treinamento.

Essa avaliação é essencial para identificar o desempenho do modelo na tarefa em questão e a possibilidade de sobreajuste ao conjunto de dados de treinamento. Com base nos resultados da fase de validação, podem ser feitos ajustes conforme necessário para otimizar o desempenho.

Como evitar armadilhas no ajuste fino do LLM

Às vezes, o ajuste fino pode levar a resultados abaixo do ideal. Tenha cuidado com as seguintes armadilhas:

Sobreajuste

O uso de um conjunto de dados pequeno para treinamento ou um número excessivo de épocas pode gerar sobreajuste. Isso geralmente é caracterizado pelo fato de o modelo mostrar alta precisão com o conjunto de dados de treinamento, mas não conseguir generalizar com novos dados.

Subajuste

Por outro lado, um treinamento insuficiente ou uma baixa taxa de aprendizado pode resultar em subajuste, quando o modelo não consegue aprender a tarefa adequadamente.

Esquecimento catastrófico

No processo de ajuste fino para uma tarefa específica, há o risco de o modelo perder o conhecimento amplo que adquiriu inicialmente. Esse problema, conhecido como esquecimento catastrófico, pode diminuir a capacidade do modelo de apresentar um bom desempenho em uma variedade de tarefas usando o processamento de linguagem natural.

Vazamento de dados

Sempre mantenha conjuntos de dados de treinamento e validação separados e sem sobreposição, pois isso pode gerar métricas de alto desempenho enganosas.

Ajuste fino x RAG

O RAG combina os pontos fortes dos modelos baseados em recuperação e dos modelos generativos. No RAG, um componente de recuperação pesquisa um grande banco de dados ou base de conhecimento para encontrar informações pertinentes com base na consulta de entrada. Essas informações recuperadas são então usadas por um modelo generativo para produzir uma resposta mais precisa e pertinente ao contexto. Alguns dos principais benefícios do RAG são:

  • Integração dinâmica de conhecimentos: inclui informações de fontes externas em tempo real, tornando-o adequado para tarefas que exigem conhecimentos atualizados ou específicos.
  • Relevância contextual: aprimora as respostas do modelo generativo ao fornecer mais contexto sobre os documentos recuperados.
  • Versatilidade: Capaz de lidar com uma gama mais ampla de consultas, inclusive aquelas que exigem informações específicas ou raras com as quais o modelo talvez não tenha sido treinado.

Escolha entre ajuste fino e RAG

Ao decidir se você deve usar o ajuste fino ou o RAG, leve em consideração os seguintes fatores:

  • Tipo de tarefa: em tarefas que se beneficiam de modelos altamente especializados (ex.: aplicativos específicos de domínio), o ajuste fino costuma ser a abordagem preferida. O RAG é ideal para tarefas que exigem a integração de conhecimentos externos ou a recuperação de informações em tempo real.
  • Disponibilidade de dados: o ajuste fino requer uma quantidade substancial de dados rotulados específicos para a tarefa. Se esses dados forem escassos, o componente de recuperação do RAG pode compensar disponibilizando informações pertinentes de fontes externas.
  • Restrições de recursos: o ajuste fino pode fazer uso intenso de recursos de computação, enquanto o RAG aproveita os bancos de dados já existentes para complementar o modelo generativo, com a possibilidade de reduzir a necessidade de treinamento extensivo.

Conclusão

Embarcar na jornada de ajuste fino de grandes modelos de linguagem abre um mundo de possibilidades para aplicações da IA.

Ao compreender e aplicar os conceitos, as práticas e as precauções descritas, é possível adaptar com eficácia esses modelos sofisticados para atender a necessidades específicas, liberando todo o seu potencial no processo.

Para continuar aprendendo sobre o ajuste fino, recomendo enfaticamente que você faça alguns ajustes finos mais avançados. Você pode começar pelo curso Conceitos de LLM do DataCamp, que abrange muitas das principais metodologias de treinamento e as pesquisas mais recentes. Mais alguns bons recursos que você pode seguir são:

Perguntas frequentes

Qual é o principal objetivo do ajuste fino de LLMs (Large Language Models)?

O ajuste fino de LLMs visa adaptar modelos pré-treinados a tarefas ou domínios específicos. Esse processo envolve o treinamento complementar do modelo com um conjunto de dados específico da tarefa, aprimorando seu desempenho e tornando-o mais eficaz para aplicações específicas, como análise de sentimentos, resposta a perguntas ou geração de textos específicos do domínio.

Qual é a diferença entre fazer o ajuste fino e treinar um modelo desde o começo?

O ajuste fino aproveita um modelo pré-treinado que já aprendeu padrões gerais de linguagem a partir de um grande conjunto de dados. Isso reduz o tempo e o custo de computação em comparação com o treinamento de um modelo a partir do zero, que envolve começar com uma inicialização aleatória e requer muito mais dados e recursos computacionais para conseguir um desempenho comparável.

Quais são algumas armadilhas comuns que devem ser evitadas ao fazer o ajuste fino de LLMs?

Entre as armadilhas comuns estão o sobreajuste, quando o modelo tem um bom desempenho com os dados de treinamento, mas um desempenho ruim com novos dados; o subajuste, quando o modelo não consegue aprender a tarefa adequadamente; o esquecimento catastrófico, quando o modelo perde os conhecimentos gerais que adquiriu inicialmente; e o vazamento de dados, quando a sobreposição dos conjuntos de dados de treinamento e validação leva a métricas de alto desempenho enganosas.

Que tipos de conjunto de dados são indicados para o ajuste fino de LLMs?

Os conjuntos de dados indicados para o ajuste fino devem ser de alta qualidade, pertinentes para a tarefa específica e grandes o bastante para disponibilizar exemplos suficientes que o modelo possa usar no aprendizado. Alguns exemplos são conjuntos de dados rotulados para ajuste fino supervisionado (ex.: para análise de sentimentos, tweets rotulados por sentimento) ou coleções de textos específicos do domínio para adaptação ao domínio (ex.: registros médicos, no caso de um chatbot de saúde).

Qual é a diferença entre ajuste fino e geração aumentada por recuperação (RAG, Retrieval-Augmented Generation)?

No ajuste fino, os parâmetros de um modelo pré-treinado são ajustados usando um conjunto de dados específico para melhorar seu desempenho em determinadas tarefas. Já o RAG combina um componente de recuperação para encontrar documentos pertinentes e um modelo generativo para produzir respostas, incluindo conhecimentos externos de maneira dinâmica durante a inferência. O ajuste fino aprimora os conhecimentos pré-existentes do modelo, enquanto o RAG usa a recuperação em tempo real para apresentar respostas pertinentes ao contexto.

Temas

Comece sua jornada de IA hoje mesmo!

Course

Introduction to LLMs in Python

4 hr
7.9K
Learn the nuts and bolts of LLMs and the revolutionary transformer architecture they are based on!
See DetailsRight Arrow
Start Course
Ver maisRight Arrow
Relacionado

blog

Entendendo e atenuando o viés em modelos de idiomas grandes (LLMs)

Mergulhe em um passo a passo abrangente sobre a compreensão do preconceito nos LLMs, o impacto que ele causa e como atenuá-lo para garantir a confiança e a justiça.
Nisha Arya Ahmed's photo

Nisha Arya Ahmed

12 min

blog

Avaliação do LLM: Métricas, metodologias, práticas recomendadas

Saiba como avaliar modelos de linguagem grandes (LLMs) usando métricas importantes, metodologias e práticas recomendadas para tomar decisões informadas.
Stanislav Karzhev's photo

Stanislav Karzhev

9 min

blog

Introdução ao LLaMA da Meta AI

O LLaMA, uma estrutura revolucionária de código aberto, tem como objetivo tornar mais acessível a pesquisa de modelos de linguagem de grande porte.
Abid Ali Awan's photo

Abid Ali Awan

8 min

blog

O que é processamento de linguagem natural (NLP)? Um guia abrangente para iniciantes

Explore o mundo transformador do Processamento de Linguagem Natural (PLN) com o guia abrangente do DataCamp para iniciantes. Mergulhe nos principais componentes, técnicas, aplicativos e desafios da PNL.
Matt Crabtree's photo

Matt Crabtree

11 min

tutorial

Como fazer o ajuste fino do GPT 3.5: Liberando todo o potencial da IA

Explore o GPT-3.5 Turbo e descubra o potencial transformador do ajuste fino. Saiba como personalizar esse modelo de linguagem avançado para aplicativos de nicho, aprimorar seu desempenho e entender os custos associados, a segurança e as considerações de privacidade.
Moez Ali's photo

Moez Ali

11 min

tutorial

Como treinar um LLM com o PyTorch

Domine o processo de treinamento de grandes modelos de linguagem usando o PyTorch, desde a configuração inicial até a implementação final.
Zoumana Keita 's photo

Zoumana Keita

8 min

See MoreSee More