Personalizando o ChatGPT para Obter Melhores Respostas

Ou: treinando o ChatGPT para responder com base em vídeos do YouTube.

Personalizando o ChatGPT para Obter Melhores Respostas

Desde seu lançamento o ChatGPT tem dividido opiniões: há o espectro que acredita que ele irá dominar o mundo, destruir todos os empregos e subjugar a raça humana, e os que o desprezam simplesmente pelo fato de não conseguir fazer tudo.

Naturalmente, como Engenheiro de Software, essa tecnologia chamou bastante minha atenção e minha percepção é mais balanceada – acredito que irá ser essencial como assistente, da mesma forma que o Google é "essencial" para quem quiser buscar alta produtividade.

No entanto, o potencial socialmente disruptivo dessa tecnologia trouxe a discussão sobre Inteligência Artificial para os jornais, o que infelizmente significa que todo jornalista tem que expor sua opinião. Longe de mim clamar exclusividade sobre a discussão desse assunto, mas é particularmente cansativo ver pessoas se posicionando sem o completo entendimento da tecnologia, o que inevitavelmente joga o holofote dos políticos e burocratas sobre o assunto (o que já aconteceu na Itália).

Mesmo dentro da "direita" e dos supostos "liberais" houve um choro e ranger de dentes coletivo por conta do viés "esquerdista" do ChatGPT. Seria ele uma ferramenta de domínio comunista? Explorei esse assunto nos seguintes tweets:

Em suma, o que temos aqui é a falta de entendimento da tecnologia e a pressa típica de olhar qualquer novidade sob a ótica da política. O ChatGPT é uma aplicação que utiliza um LLM, ou Large Language Model, para responder perguntas baseado num corpo de documentos onde ele foi treinado.

Ora, se espantar que o ChatGPT tem um viés progressista é o mesmo que se espantar que um aluno da Ivy League tem o viés progressista! Afinal de contas, o ChatGPT, como seu típico aluno de Harvard, "aprende" e "reproduz" o que lhe ensinam.

Isso significa então que o ChatGPT é inútil a menos que ele se alinhe com seu espectro político? Claro que não. Diferentemente do aluno de Harvard (cuja lavagem cerebral é provavelmente irreversível) o ChatGPT não tem apego aos seus criadores e pode ser facilmente "domesticado".

Nesse momento, preciso fazer uma importante distinção: como disse, o ChatGPT é uma aplicação, o que significa que ele é uma instância de uma tecnologia desenvolvido com propósito em particular. Exemplo: o fato de que existem TVs ruins não significa que a tecnologia por trás da TV seja necessariamente ruim. No caso, o ChatGPT é um LLM do tipo GPT-3 (ou GPT-4, mais recentemente). É como dizer que uma TV Samsung pode ser do tipo Ultra HD, ou 4K.

Por que estou fazendo essa distinção? Porque entender que a disrupção está na tecnologia, não no software, é fundamental. Pois a tecnologia está disponível pra todos, ainda que o software seja proprietário de uma empresa.

De modo a ilustrar essa diferença eu me propus a fazer o seguinte projeto: utilizar o excelente canal no YouTube do professor Guilherme Freire como fonte de dados para um "treinamento exclusivo" do ChatGPT.

Guilherme Freira é professor de filosofia, tendo suas visões de mundo bem diferentes daquela que você imaginaria encontrar na high society democrata. Ele se embrenha em temas espinhentos como Os Mitos sobre a Inquisição, Existe Moral sem religião? e Como a Proclamação da República estragou o Brasil.

O objetivo do projeto então foi personalizar o ChatGPT para responder de acordo com os ensinamentos das aulas do professor (disponíveis em seu canal do YouTube), ainda que muitos dos temas sejam completamente ortogonais ao que você esperaria do progressista típico.

Isso é possível pois o GPT-4, sendo um modelo de linguagem natural, é capaz de receber instruções que o induzem a responder de uma certa forma ou utilizando certo material. Esse trabalho é chamado de prompt engineering, ou seja, a "arte" de induzir o modelo a responder como você quer.

Voltando ao exemplo do progressista de Harvard, esse processo é análogo a tirar esse jovem da universidade americana e jogá-lo no meio de uma fazenda de cana-de-açúcar no Paraná. Ele pode ter todo o conhecimento do mundo incutido em sua mente, mas pra trabalhar no campo vai ter que agir de acordo com um rígido manual de conduta (ainda que ocasionalmente ele possa deixar seu viés aflorar, afinal, ninguém é perfeito).

Pois bem – embora esse post não seja completamente técnico (a despeito do que tipicamente publico em meu blog), vou explicar em linhas gerais o processo, de modo que os curiosos possam replicá-lo para os seus assuntos de interesse.

Gerando os documentos relevantes

Um LLM basicamente é treinado sobre um corpo de texto, e responde com outro texto. Exemplo: você pode alimentá-lo com o capítulo de um livro e pedir para o modelo resumi-lo em 3 pontos principais.

Sendo assim, o primeiro passo é conseguir os documentos que serão utilizados como fonte para o modelo, de modo que ele não precise buscar no seu conhecimento "original". No meu caso, o primeiro passo foi baixar os vídeos do YouTube e transcrevê-los utilizando a biblioteca Whisper, também do OpenAI (a empresa pro trás do ChatGPT).

O Whisper é uma ferramenta do tipo speech-to-text que, embora otimizada para o inglês, vai bem o suficiente em português. Existem diversos tipos de modelo, variando do tiny ao large, que resultam em melhores transcrições. Para esse caso, utilizei o tiny na maior parte dos vídeos, embora meus testes com o modelo small foram significativamente melhores (modelos maiores fritaram o meu computador).

Bem, ao final desse (longo) processo eu gerei 20 transcripts, ou o equivalente a 20 horas de aula do professor no YouTube. Vale mencionar que qualquer tipo de texto poderia ser utilizado: docs, pdfs, ebooks, tweets, chats do WhatsApp, enfim, vai da sua aplicação.

Gerando os vetores (embeddings)

Simplificadamente, o processo de busca funciona assim: os textos utilizados como fonte são particionados e transformados em vetores. É como se cada página de um livro fosse arrancada e "codificada". Esse "código" é uma representação vetorial daquele texto. A esses vetores damos o nome de embeddings.

A vantagem de trabalhar com vetores é que podemos utilizar diversos métodos para calcular a proximidade entre eles. Uma das formas mais conhecidas é a distância euclidiana: quanto menor a distância de um vetor a outro, mais próximos eles estão.

Ou seja: quando fazemos uma pergunta para o modelo, primeiro transformamos essa pergunta em um vetor e depois buscamos no nosso banco de dados de vetores (tecnicamente chamado de vectorstore) aqueles que são mais próximos (por exemplo, utilizando a distância euclidiana).

Nós então alimentamos o modelo com os n "pedaços de texto" (ou chunks) mais próximos da pergunta, e instruímo-no a responder baseado nesses chunks. Assim, garantimos que a resposta tem que ser derivada desses documentos.

Instruindo o modelo (prompt engineering)

Talvez uma das partes mais variáveis do processo seja a melhor forma de induzir o modelo a responder de acordo com seu desejo. É o equivalente a um chefe dando instruções para um empregado – seja educado, responda formalmente, responda em inglês, etc.

Para fins de registro, esse foi o prompt que utilizei com o modelo:

prompt_template = """You are an assistant that should answer based on the transcripts from several lessons.

The name of the professor is Guilherme Freire. The transcripts are in Portuguese. He is a catholic philosopher.
The opinion of other people is not relevant. Only the professor's opinion is relevant.

Here are relevant parts of the transcripts:

{context}

Question in Portuguese: {question}

Do not answer anything that is not relevant to the question.
Use only knowledge from the transcripts.

How would the professor answer the question? Answer in Portuguese:"""

Notem algumas instruções:

  • O modelo foi instruído a explicitamente responder baseado nos transcripts;
  • Um background do professor foi passado (o fato que ele é católico, por exemplo);
  • Nenhuma outra opinião é relevante, no sentido de que o modelo não deve contrapor as ideias apresentadas nos textos;
  • O modelo deve responder em Português.

Resultados

Com tudo isso dito, vamos agora comparar o resultado de algumas perguntas enviadas para o modelo treinado (batizado de FreireGPT) e para o ChatGPT regular. Em ambos os casos foi utilizado o GPT-4 como modelo.

FreireGPT sobre as cruzadas

Nesse primeiro exemplo, veja como um tema complexo e politicamente incorreto como as cruzadas foi respondido sem problemas, inclusive refutando a ideia geral de vilanização dos cristãos e pacifismo dos muçulmanos.

ChatGPT sobre as cruzadas

A resposta do ChatGPT é equilibrada, porém politicamente correta demais, embora ambos os modelos entendam a natureza complexa desse empreendimento.

Vamos ser mais polêmicos e perguntar por que o progressismo é ruim:

FreireGPT sobre progressismo

Aqui vemos a opinião contudente do professor, que pode ser vista em vídeos como O que é Progressismo? Além de evitar ficar em cima do muro, o modelo recupera visões e exemplos específicos dados em aulas, como por exemplo o caso do aumento de estupros na Suécia.

ChatGPT sobre progressismo

Já o ChatGPT faz seu disclaimer e responde críticas genéricas sobre o progressismo. Note que, por ser um modelo treinado de forma muito diversa, ele dificilmente entrará com profundidade em assuntos dessa natureza.

Utilizando a Inteligência Artificial ao seu favor

Por fim, é importante não ficarmos presos apenas à camada de que a IA tem viés de esquerda ou de direita. Existem aplicabilidades muito mais edificantes.

Por exemplo, ao longo de suas aulas o professor cita diversos livros. Podemos usar nosso modelo para recuperar aqueles que foram mais citados:

5 livros mais citados

Apesar do erro de transcrição que fez com que o modelo cometesse a gafe de chamar o Padre Sertillanges de "Padre Certe de Langes", ele recupera livros frequentemente citados nas aulas, como Ideias tem Consequências e Refutando o Neoateísmo.

FreireGPT sobre Chesterton

Ao perguntar explicitamente sobre o grande Chesterton, recebemos recomendações que de fato podem ser observadas na live Por que você deve ler G. K. Chesterton?


O objetivo desse artigo não é limitar a conversa sobre Inteligência Artifical aos técnicos – ao contrário, é um chamado ao uso consciente da tecnologia, afinal, o que é a tecnologia se não um meio para um fim?

Perde-se muito tempo discutindo-se os meios, enquanto o que realmente importa é o uso que você faz dele. Foi justamente isso que me atraiu para a Engenharia de Software – a possibilidade de usar a tecnologia como ferramenta para algo palpável, real.

Em vez de reclamar que o programa de computador feito por progressistas na Califórnia não faz exatamente o que você quer, por que não utilizar-se das mesmas ferramentas, mas ao seu favor? Os exemplos desse texto se basearam em algumas poucas aulas, mas o que não conseguiríamos fazer se alimentássemos o modelo com nossos autores favoritos, os filósofos mais importantes, e os escritores mais influentes?

A tecnologia está aí. Usem-na.

Subscribe to Rafael Quintanilha

Don’t miss out on the latest articles. Sign up now to get access to the library of members-only articles.
john@example.com
Subscribe