Como usar os modelos OpenAI para seu segmento específico de dados e domínio de aplicativos.

Matheus Mendes
6 min readMay 13, 2023

--

Introdução

Olá a todos! Tenho o prazer de escrever uma nova postagem para compartilhar as novidades que aprendi no mês passado. Tivemos um hackathon da empresa e, neste artigo, explicarei como usei o serviço Fine Tuning para treinar um modelo básico GPT-3.

Para entender completamente este artigo, você precisa conhecer alguns conceitos básicos de Inteligência Artificial. Talvez você queira ler primeiro meu primeiro artigo Conceitos Básicos de Machine Learning e Inteligência Artificial.

Ótimo, vamos começar essa jornada!

Contextualização

A OpenAI é uma empresa focada em pesquisa de ML e IA, muito popular por causa do ChatGPT e do Dall E — com certeza você os conhece. O ChatGPT é uma IA generativa, o que significa que ele pode gerar conteúdo e responder a perguntas com base em muitos dados coletados na Internet sobre diversos assuntos. Mas, às vezes, você precisa de um modelo ajustado, que possa responder/classificar dados relacionados ao contexto do domínio do seu produto.

Essa foi exatamente a minha ideia para a hackathon. Na WhyLabs, temos alguns serviços interessantes para monitorar conjuntos de dados e modelos de aprendizado de máquina. Fornecemos um conjunto de métricas para monitorar seus dados e você pode definir diferentes analisadores para enviar notificações quando houver uma anomalia com base em suas definições.

Por exemplo, temos a métrica count_null_ratio. Essa métrica é responsável por rastrear a porcentagem de entradas de dados com valor nulo em suas colunas. Você pode ter um modelo de regressão para prever a pontuação de crédito do seu cliente e selecionar todas as colunas que deseja monitorar e definir um limite para a variação. Você pode configurar um monitor para exibir uma anomalia quando a variação for maior que 10%, ajudando-o a investigar e entender seus problemas.

Muito bem, agora que você tem uma visão geral do contexto, vou elaborar a ideia!

O desafio

Como não sou especialista em aprendizado de máquina, achei difícil entender e lembrar de todas as métricas — são muitas. É fácil entender o nome se você tiver a descrição como eu fiz acima. Então, por que não inverter o processo? Você me diz o que precisa, e eu lhe direi a métrica certa. Parece muito útil, certo? Vamos para a parte divertida.

Proof of Concept

Para minha prova de conceito, escolhi três de nossas métricas:

  • Count Null Ratio: “1#both#count_null_ratio”
  • Estimated Unique Values: “2#both#unique_est”
  • Classification Accuracy: “3#model#classification.accuracy”

Você já conhece o count_null_ratio, vou lhe dar uma explicação rápida sobre as outras.

Classification Accuracy
Essa métrica está relacionada ao desempenho dos modelos de classificação e é uma informação importante para entender se as previsões estão corretas. Essa métrica é um número calculado dividindo-se o número de previsões corretas pelo número de previsões corretas e incorretas.

Estimated Unique Values
Essa métrica é usada em colunas discretas (dados categorizados) e ajuda a estimar o número de categorias diferentes em uma única coluna.

Mergulhando no Fine Tuning

Com a API Fine Tuning, você pode selecionar um modelo básico do ChatGPT (ada, curie, babbage, davinci) e carregar dados de treino para adicionar conclusões para um prompt. As conclusões serão nossas classes aqui. O padrão que usei para criá-las se parece com `3#model#classification.accuracy`. A ferramenta OpenAI recomenda iniciar uma classe com um token diferente — um token é um pedaço de texto, você pode verificar a definição da OpenAI aqui. No meu caso, estou começando com um número diferente e usando “#” para envolver o tipo de recurso em que essa métrica pode ser usada (algumas métricas são exclusivas de modelos ou conjuntos de dados) e, em seguida, a própria métrica.

Minha ideia era tratar a classe com regex em meu aplicativo para extrair o nome da métrica e o tipo de recurso para validar o uso.

{"prompt": "I want see the percentage of columns that have null values\n\n###\n\n", "completion":" 1#both#count_null_ratio\n"}
{"prompt": "I want to analyze the unique values in my discrete columns\n\n###\n\n", "completion":" 2#both#est_unique\n"}
{"prompt": "I want to understand if my model have a good true predictions rate\n\n###\n\n","completion":" 3#model#classification.accuracy\n"}

*Observe que a documentação da OpenAI sugere alguns padrões, como a adição de um token exclusivo no final de cada prompt — o padrão recomendado é “\n\n###\n\n”. A propósito, devemos iniciar os valores de conclusão com um espaço em branco e terminá-los com um “\n”.

Esses foram meus exemplos, mas é claro que precisamos de pelo menos algumas centenas de exemplos de treinamento para cada classe para que funcione e tenha um bom desempenho. Portanto, é provável que você não queira escrever todos eles manualmente, pois esses dados podem ser descartados para seu aplicativo.

No meu caso, para prova de conceito, quero apenas várias maneiras de perguntar a métrica. Por isso, usei o ChatGPT para gerar uma centena de frases semelhantes para cada uma delas. Depois de alguns minutos, eu tinha um conjunto de dados de treinamento de 150 prompts, o que foi suficiente para demonstrar.

Com meu conjunto de dados JSONL pronto, comecei a criar e treinar o modelo.

O treinamento

Podemos usar qualquer ferramenta que você preferir para executar o Python; estou usando o Google Colab aqui.

Primeiro, vamos adicionar as dependências e definir nossa apiKey:

!pip install --upgrade openai
import os
import openai
%env OPENAI_API_KEY=yours_open_ai_key

Agora podemos executar uma ferramenta para preparar nossos dados. Essa ferramenta corrigirá as sugestões, removerá linhas duplicadas e dividirá seus dados em um conjunto de dados de treinamento e validação.

!openai tools fine_tunes.prepare_data -f hackathon_data/train_data.jsonl

Com os conjuntos de dados preparados, podemos criar facilmente nosso modelo de ajuste fino especificando o modelo básico e o número de classes — 3 no meu caso.

!openai api fine_tunes.create -m curie -t "hackathon_data/train_data_prepared_train.jsonl" -v "hackathon_data/train_data_prepared_valid.jsonl" --compute_classification_metrics --classification_n_classes 3

*Esse comando abrirá um fluxo para atualizar o status do trabalho, mas você pode fechá-lo se quiser, pois isso não interromperá o processamento do trabalho.

Precisamos aguardar alguns minutos para obter o nome do modelo. O tempo dependerá do modelo base e do tamanho dos conjuntos de dados. No meu caso, foi algo entre 5 e 10 minutos.

Podemos executar o seguinte comando para listar seus modelos. Se a propriedade “fine_tuned_model” tiver um valor nulo, você terá de esperar um pouco mais e executá-la novamente mais tarde.

!openai api fine_tunes.list

Quando você tiver o nome, poderá começar a enviar prompts e obter suas previsões! Sim, eu sei, é mais fácil do que escrever uma palavra hello em JAVA. — Estou brincando, fãs de Java. Amo vocês todos ❤

Testando

#fine_tuned_model name
MODEL = "davinci:ft-personal-2023-04-26-22-20-54"
#test prompt text + end token `\n\n###\n\n`
PROMPT = "How well is my model performing\n\n###\n\n"
openai.api_key=%env OPENAI_API_KEY
res = openai.Completion.create(engine=MODEL, prompt=PROMPT, max_tokens=10, temperature=0, stop='\n')
res['choices'][0]['text']

*Max_tokens é um parâmetro para definir o número máximo de tokens na conclusão, portanto, dependerá do tamanho do texto de sua classe. Você pode definir um token de parada para a conclusão, ‘\n’, se você o usou como recomendado.

E aqui estamos, nossa primeira classificação :D

Meu trabalho não terminou aqui, estava apenas começando. Criei uma nova interface de usuário para ajudar os usuários a configurar os dados e digitar o prompt para obter as métricas. Eu a integrei em nosso aplicativo React usando a biblioteca NodeJS, mas esse é um trabalho comum de UI, a mágica funciona no lado do ML :)

Isso é tudo, pessoal. Obrigado!

Matheus Mendes — Linkedin

Frontend Software Engineer

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

Matheus Mendes
Matheus Mendes

Written by Matheus Mendes

🇧🇷 FE Software Engineer at https://whylabs.ai Running AI With Certainty

No responses yet

Write a response