Como Criar um Chatbot Pessoal com Fine-Tuning de LLMs no Telegram

TL;DR: O artigo ensina como criar um chatbot personalizado que imita seu estilo de comunicação, usando conversas do Telegram para fazer fine-tuning em modelos de linguagem (LLMs) como Mistral-7B e TinyLlama, com técnicas como LoRA para otimizar recursos computacionais.

Takeaways:

  • A estruturação adequada dos dados em pares de “prompt-resposta” é fundamental para o treinamento, incluindo mascaramento de tokens para que o modelo aprenda apenas as respostas desejadas.
  • Modelos maiores como o Mistral-7B oferecem resultados significativamente melhores que modelos menores, capturando nuances de comunicação mais sutis.
  • A técnica LoRA permite treinar apenas uma pequena parte dos parâmetros do modelo, reduzindo requisitos de memória e custos computacionais.
  • A qualidade dos dados supera a quantidade – uma limpeza cuidadosa para remover comportamentos indesejados é essencial para o desempenho do chatbot.
  • O custo total do projeto foi de aproximadamente $70, principalmente em GPUs da NVIDIA para treinamento.

Como Criar Seu Chatbot Pessoal: Fine-Tuning de LLMs com Suas Conversas do Telegram

Você já imaginou ter uma versão digital de si mesmo? Um clone virtual capaz de reproduzir seu estilo de conversa, suas piadas e até mesmo suas manias? Graças aos avanços nos modelos de linguagem de grande escala (LLMs), isso não é mais ficção científica. Neste artigo, vou mostrar como criar um chatbot personalizado através do fine-tuning de LLMs utilizando suas próprias conversas do Telegram.

Por Que Criar um Chatbot Personalizado?

Imagine poder automatizar suas respostas mantendo seu estilo único de comunicação, ou simplesmente experimentar conversas com uma versão digital de si mesmo. As possibilidades são fascinantes e vão desde aplicações práticas até experiências criativas.

O processo que vou compartilhar envolve quatro etapas principais:

  1. Preparação dos dados de conversas
  2. Seleção do modelo de linguagem adequado
  3. Configuração do ambiente de treinamento
  4. Fine-tuning e avaliação do modelo

Vamos explorar cada uma dessas etapas em detalhes, com dicas práticas baseadas em experiência real.

Preparando os Dados do Telegram para Treinamento

A qualidade do seu chatbot depende diretamente da qualidade dos dados utilizados para treiná-lo. O primeiro desafio é transformar conversas do Telegram em um formato que o modelo possa compreender e aprender.

Coletando as Conversas

Para este projeto, utilizei cinco anos de mensagens de um grupo de chat com cinco pessoas. A quantidade de dados é importante, mas não se preocupe se você não tiver um histórico tão extenso – mesmo alguns meses de conversas já podem produzir resultados interessantes.

Para exportar suas conversas:

  1. Acesse o Telegram Lite
  2. Exporte as conversas em formato HTML
  3. Extraia as mensagens do arquivo HTML exportado

Estruturando os Dados

O segredo para um bom treinamento está na estruturação dos dados em pares de “prompt-resposta”. Essa estrutura permite que o modelo entenda o contexto da conversa e aprenda a responder de forma coerente.

Veja um exemplo de como estruturar os dados:

{
  "prompt": "User: Feel like playing COD tonight? I want to go skydiving. Might be out all week. Tough days. Maybe Damacco is right, maybe we should sell the PlayStations...",
  "response": "Hahaha"
}

E como essa conversa pode continuar:

{
  "prompt": "User: Feel like playing COD tonight? I want to go skydiving... Download Helldivers instead of complaining.\nAssistant: Hahaha",
  "response": "Skydiving over a landfill. 360 cam (can't wear it before 200 jumps). You toss stuff from the plane."
}

Cada entrada representa um turno da conversa, com o “prompt” fornecendo o contexto e a “resposta” sendo o que queremos que o modelo aprenda a gerar. Esta estrutura é fundamental para que o modelo compreenda como as conversas fluem naturalmente.

Escolhendo o Modelo de Linguagem (LLM) Adequado

A escolha do modelo base afeta diretamente o desempenho do seu chatbot. Existem diversos modelos disponíveis no Hugging Face, cada um com suas vantagens e limitações.

Modelos Recomendados

Para este projeto, experimentei dois modelos:

  • TinyLlama-1.1B-Chat-v1.0: Um modelo menor, mais rápido e econômico para treinar.
  • Mistral-7B-Instruct-3.0: Um modelo maior, com melhor desempenho, mas que exige mais recursos.

A escolha depende dos recursos computacionais disponíveis e do nível de qualidade desejado para as respostas. Em minha experiência, o Mistral 7B apresentou resultados significativamente superiores, capturando nuances e padrões sutis de comunicação que o TinyLlama não conseguiu identificar.

Vantagens da Técnica LoRA

Para tornar o processo de fine-tuning mais eficiente, utilizei a técnica LoRA (Low-Rank Adaptation). Esta abordagem permite:

  • Treinar apenas uma pequena parte dos parâmetros do modelo
  • Reduzir significativamente os requisitos de memória
  • Acelerar o processo de treinamento
  • Diminuir os custos computacionais

Com LoRA, é possível ajustar modelos grandes como o Mistral 7B mesmo com recursos limitados, mantendo o modelo original congelado e adicionando apenas pequenas matrizes treináveis.

Configurando o Hardware para Fine-Tuning

O treinamento de LLMs requer poder computacional, especialmente GPUs potentes. Se você não possui uma GPU adequada, existem serviços de nuvem que oferecem acesso a hardware especializado.

Opções de GPUs

Para o fine-tuning de LLMs, recomendo:

  • NVIDIA L4 (Ada Lovelace Tensor Core): Adequada para modelos menores como o TinyLlama, com custo aproximado de $0.40/hora.
  • NVIDIA A100 Tensor Core: Ideal para modelos maiores como o Mistral 7B, com custo aproximado de $1.70/hora.

Plataformas Recomendadas

Duas plataformas populares para acesso a GPUs na nuvem são:

  • Google Colab: Oferece GPUs gratuitas por tempo limitado, mas pode sofrer com desconexões frequentes.
  • RunPod: Serviço pago mais estável, ideal para treinamentos longos sem interrupções.

Em minha experiência, optei pelo RunPod devido à maior estabilidade, evitando a frustração de ter o treinamento interrompido por desconexões.

Tokenização e Mascaramento de Prompts

A tokenização é o processo de converter texto em unidades menores (tokens) que o modelo pode compreender. Este é um passo crucial para o treinamento eficiente.

Como Funciona a Tokenização

Para treinar o modelo a gerar apenas as respostas, utilizamos uma técnica de mascaramento nos rótulos (labels). Veja como implementar:

def tokenize(example):
    full_input = example["prompt"] + example["response"]
    input_ids = tokenizer(
        full_input,
        truncation=True,
        padding="max_length",
        max_length=512
    )['input_ids']
    # Mascara tudo exceto a resposta
    prompt_ids = tokenizer(example["prompt"], truncation=True, max_length=512)['input_ids']
    labels = [-100] * len(prompt_ids) + input_ids[len(prompt_ids):]
    labels = labels[:512]
    input_ids = input_ids[:512]
    return {
        "input_ids": input_ids,
        "labels": labels,
        "attention_mask": [1] * len(input_ids)
    }

Neste código, os tokens do prompt são mascarados com o valor -100 nos rótulos, indicando ao modelo que ele não deve tentar prever esses tokens durante o treinamento. Isso direciona o aprendizado para a geração de respostas coerentes e relevantes.

Configurando os Parâmetros de Treinamento com LoRA

A configuração adequada dos parâmetros de LoRA é essencial para equilibrar o desempenho do modelo e evitar overfitting, especialmente em datasets pequenos ou ruidosos.

Parâmetros Importantes

  • r (rank): Controla a capacidade de adaptação do modelo. Um valor maior permite mais adaptação, mas aumenta o custo computacional.
  • lora_dropout: Ajuda a evitar overfitting em datasets menores, aplicando dropout apenas nas camadas LoRA durante o treinamento.
  • learning_rate: Uma taxa de 2e-4 oferece um bom equilíbrio entre velocidade e estabilidade de treinamento.

Configuração Recomendada

Para conversas pessoais, recomendo:

  • r = 16 (equilibra adaptabilidade e custo)
  • lora_dropout = 0.05 (previne overfitting sem comprometer muito a aprendizagem)
  • learning_rate = 2e-4 (balanceia velocidade e estabilidade)
  • warmup_steps = 100 (evita instabilidade no início do treinamento)

Estes parâmetros podem ser ajustados conforme a quantidade e qualidade dos seus dados de treinamento.

Limpeza de Dados para Evitar Comportamentos Indesejados

Durante o treinamento, descobri que os modelos podem aprender padrões indesejados presentes nos dados. Um exemplo interessante foi quando o modelo resistiu a aprender piadas de humor negro, causando instabilidade no treinamento.

Identificando Problemas nos Dados

Alguns sinais de problemas nos dados incluem:

  • Picos abruptos na perda de treinamento
  • Respostas repetitivas sobre temas específicos
  • Comportamentos inconsistentes com o estilo desejado

Em meu caso, notei que o modelo frequentemente respondia apenas com horários, mesmo quando a pergunta não estava relacionada a agendamentos. Isso ocorreu porque havia muitas respostas com horários nos dados de treinamento.

Regra de Ouro para Limpeza de Dados

A regra fundamental é: decida quais comportamentos você quer replicar. Nem tudo que está nos dados deve ser aprendido pelo modelo. Identifique e remova exemplos que possam enviesar o modelo de forma indesejada.

Algumas estratégias incluem:

  • Remover conversas com conteúdo ofensivo ou inadequado
  • Balancear os tipos de respostas para evitar super-representação
  • Focar em dados mais recentes que melhor representem seu estilo atual

Avaliação e Ajuste do Modelo

Após o fine-tuning, é essencial avaliar o desempenho do modelo e ajustar parâmetros como a temperatura para controlar a criatividade das respostas.

Testando o Chatbot

Veja um exemplo de conversa com o modelo treinado:

User: Are we playing tonight or are we selling everything and retiring?
Assistant: Selling everything. PS5, headset, honor. Out the window.
User: Even the Helldivers save file?
Assistant: Especially the Helldivers save file. We're free now.
User: So... 9:30?
Assistant: 9:47. Precision is a mindset.
User: You're starting to sound like Antony.
Assistant: I've uploaded his personality. It cost me 14 jumps.

Esta conversa demonstra como o modelo conseguiu capturar o estilo de comunicação, incluindo piadas recorrentes e referências internas ao grupo.

Ajustando a Temperatura

A temperatura controla a aleatoriedade das respostas:

  • Temperatura baixa (0.1-0.5): Respostas mais previsíveis e consistentes
  • Temperatura média (0.6-0.8): Bom equilíbrio entre consistência e criatividade
  • Temperatura alta (0.9-1.0): Respostas mais criativas, mas potencialmente menos coerentes

Para um chatbot pessoal, uma temperatura entre 0.7 e 0.8 geralmente oferece o melhor equilíbrio.

Resultados e Lições Aprendidas

Após várias iterações de treinamento e testes, o projeto foi considerado um sucesso. O chatbot conseguiu capturar aspectos essenciais do estilo de comunicação, incluindo piadas recorrentes e padrões sutis.

Principais Lições

  1. Qualidade sobre quantidade: Uma sessão de treinamento bem-sucedida utilizou apenas um ano de dados, mas com amostras cuidadosamente selecionadas.
  2. Contexto é crucial: Aumentar o número de amostras de treinamento ajudou o modelo a compreender melhor o contexto das conversas.
  3. Modelos maiores trazem resultados melhores: O Mistral 7B superou significativamente o TinyLlama na qualidade das respostas.
  4. Custo-benefício: O custo total do projeto foi de aproximadamente $70, principalmente gasto na utilização da NVIDIA A100 – um investimento razoável para um chatbot personalizado.

Próximos Passos e Melhorias

Se você deseja criar seu próprio chatbot personalizado, aqui estão algumas sugestões para aprimorar o processo:

  1. Refine seus dados: Dedique tempo à limpeza e estruturação cuidadosa dos dados de treinamento.
  2. Experimente diferentes modelos: Teste modelos de diferentes tamanhos para encontrar o equilíbrio ideal entre qualidade e custo.
  3. Iteração contínua: Realize várias rodadas de treinamento, avaliando e ajustando o modelo a cada ciclo.
  4. Integre com plataformas: Considere integrar seu chatbot com o Telegram ou outras plataformas de mensagens para uso prático.

Conclusão

Criar um chatbot personalizado através do fine-tuning de LLMs com suas próprias conversas do Telegram é um projeto fascinante que combina aspectos técnicos e criativos. O processo envolve a preparação cuidadosa dos dados, a seleção de um modelo adequado, a configuração do hardware e o ajuste fino dos parâmetros de treinamento.

A técnica de LoRA torna esse projeto acessível mesmo para quem não possui recursos computacionais avançados, permitindo ajustar modelos grandes de forma eficiente. A limpeza dos dados e a avaliação contínua do desempenho são etapas cruciais para garantir que o chatbot capture seu estilo de comunicação de forma autêntica.

Ao seguir as diretrizes apresentadas neste artigo, você estará bem equipado para criar sua própria versão digital e explorar as possibilidades criativas que ela oferece. O futuro da comunicação digital está se tornando cada vez mais personalizado, e você agora tem as ferramentas para fazer parte dessa revolução.

Referências Bibliográficas

Fonte: Alessandro Romano. “How I Made My Girlfriend Happy With A Simple Telegram Bot”. Disponível em: https://alerom90.medium.com/how-i-made-my-girlfriend-happy-with-a-simple-telegram-bot-2be8e4b150e7.

Fonte: “Attention is all you need”. Disponível em: https://arxiv.org/abs/1706.03762.

Fonte: “TinyLlama/TinyLlama-1.1B-Chat-v1.0”. Disponível em: https://huggingface.co/TinyLlama/TinyLlama-1.1B-Chat-v1.0.

Fonte: “Mistral-7B-Instruct-v0.3”. Disponível em: https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.3.

Fonte: “mistralai/Mistral-7B-v0.1”. Disponível em: https://huggingface.co/mistralai/Mistral-7B-v0.1.

Fonte: “PEFT: LoRA”. Disponível em: https://huggingface.co/docs/peft/main/en/conceptual_guides/lora.

Fonte: “TRAINING NOTEBOOK”. Disponível em: https://colab.research.google.com/drive/1Qfxui7XtuzbEMrUTB1uJTiL0-RvWDix3.

Fonte: “INFERENCE NOTEBOOK”. Disponível em: https://colab.research.google.com/drive/1y_AWskwKDMAGWWMKompnW8QDOnRUbZ7_.

Inscrever-se
Notificar de
guest

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.

0 Comentários
mais recentes
mais antigos Mais votado
Feedbacks embutidos
Ver todos os comentários