GPT e modelos de linguagem: disciplina da pós-graduação do CIn-UFPE 

Finalizamos, eu e o prof. Tsang, a primeira disciplina do CIn a abordar Generative Pre-trained Transformer (GPT) e Large Language Models (LLM), intitulada: GPT: métodos e desafios de modelos de linguagem. A disciplina foi oferecida para alunos de mestrado e de doutorado da pós-graduação em Ciência da Computação do CIn-UFPE.

Ao ser lançado, o ChatGPT nos fez refletir sobre várias possíveis direções quanto ao seu uso e quanto ao alcance de suas potencialidades. Aplicações como tradução, sumarização de documento, construção de textos, entre outras, atingiram novos patamares e deixaram vários métodos/estratégias/algoritmos obsoletos. 

Para a construção de plataformas semelhantes ao ChatGPT, diversas tecnologias foram agregadas de forma inteligente para obtermos os resultados que enxergamos hoje. Uma dessas tecnologias consta na sigla do GPT, o “T” é de  Transformers (mais detalhes neste link) que é uma rede neural para treinar LLMs em grandes bancos de dados. 

Os LLMs transformaram a área de processamento de linguagem natural e compõem a base de uma ampla gama de sistemas de última geração que têm demonstrado uma excelente capacidade de gerar textos legíveis e fluidos. Porém, como toda nova tecnologia, esses modelos trazem consigo novos desafios, entre eles, desafios relacionados a aspectos éticos e de escalabilidade. A disciplina focou em fundamentos e, também, em diversos aspectos relacionados ao uso destes modelos.

Nesta primeira edição, o curso contou com a participação de 27 alunos (13 de doutorado e 14 de mestrado). Os orientadores desses alunos, no programa de pós-graduação do CIn, formam um grupo heterogêneo composto por 16 professores que atuam em diversas áreas, tais como: inteligência artificial, aprendizagem de máquina, ciência de dados, otimização, realidade aumentada e engenharia de software. 

Esta diversidade trouxe desafios, mas, foi frutífera, em especial, nas discussões que expuseram pontos de vistas que, embora convergentes, tinham alvos díspares. Por outro prisma, esta diversidade também reforça a ubiquidade da aprendizagem de máquina nas mais diversas áreas de pesquisa.

Sigamos para a próxima edição!

Transformers: a tecnologia por trás do ChatGPT

Sistemas que extraem informações de grandes quantidades de textos (large language models – LLM) têm despertado os mais diferentes sentimentos e atiçado o interesse de variados setores da sociedade. Um exemplo de LLM é o ChatGPT que conseguiu atingir a incrível marca de mais de um milhão de usuários em apenas cinco dias após seu lançamento.

Embora o ChatGPT tenha causado bastante “barulho” nos últimos meses, a tecnologia que o tornou possível vem sendo desenvolvida há tempos.

A “magia” por trás do ChatGPT deve-se, principalmente, a um tipo de arquitetura de rede neural artificial chamada de Transformers que foi lançada num artigo da Google de 2017 intitulado Attention is all you need. Lembrando que o T da sigla GPT significa Transformer; Generative Pre-trained Transformer (GPT).

A arquitetura do Transformer (mostrada na figura acima) é composta de vários módulos e parece complicada de início, porém, notem que vários módulos se repetem. Neste post, foco nas três principais inovações que tornaram essa tecnologia realidade:

  • Positional encoding;
  • Attention;
  • Self-attention.

A primeira, positional encoding, objetiva atribuir ordem as palavras de uma sentença quando apresentadas a modelos de aprendizagem de máquina. Já as duas seguintes, attention e self-attention, buscam pelas partes (palavras) mais importantes das sentenças. Mais detalhes a seguir.

Positional encoding

A ordem das palavras numa sentença importa. Logo, ao apresentar uma sentença a uma máquina de aprendizagem, é relevante informar para esta máquina a ordem das palavras. Esta é a tarefa do positional enconding.

De maneira simples, podemos dizer que o positional encoding atribui um número para cada palavra da sentença. Por exemplo: a frase

“Vamos jogar vôlei”

seria representada assim

[(“Vamos”, 1), (“jogar”, 2), (“vôlei”, 3)].

Esta é uma operação crucial, pois as redes neurais artificiais não levam em conta a ordem das palavras que lhes são apresentadas. Desta forma, a rede neural pode aprender que a primeira palavra está atrelada ao “1”, a segunda ao “2” e assim por diante.

Antes dos Transformers, as redes neurais recorrentes (RNN) atacaram esta questão da ordem das palavras de uma maneira diferente. Ao invés de apresentar todas as palavras da sentença de uma vez, as RNNs apresentavam uma palavra por vez à rede. Assim, a primeira palavra da sentença era apresentada à rede, em seguida, a segunda palavra e assim por diante. Mas, esta estratégia possui um alto custo de processamento e dificulta a paralelização das operações durante o treinamento da rede. Além disso, o trabalho de “entender” a ordem era atribuído à rede, no caso das RNNs, enquanto que nos Transformers, esta responsabilidade foi incorporada aos dados fornecidos como entrada para a rede.

Vale destacar que a estratégia usada no Transformer é mais sofisticada do que o exemplo mostrado acima que apenas atribuir números a cada palavra. Uma codificação usando as funções seno e cosseno, com diferentes frequências, são usadas para este fim. Mais detalhes sobre esta codificação pode ser encontrada aqui e aqui.

Attention

Antes de iniciar esta parte, lembremos que o artigo seminal do Transformer foi intitulado Attention is all you need. Logo, “attention” está no título do artigo e possui um papel crucial.

O conhecimento necessário para se chegar ao ponto que estamos em relação aos LLMs representa um aglomerado de experiências prévias. Neste sentido, o conceito de attention para a tradução foi descrito no artigo Neural machine translation by jointly learning to align and translate, em 2015.

Neste artigo, os autores destacam a importância de ter uma visão geral do texto para realizar uma tradução, por exemplo, de uma sentença do inglês para o francês de maneira mais acurada. Para ilustrar o conceito, a sentença

The agreement on the European Economic Area was signed in August 1992.”

pode ser traduzida para

L’accord sur la zone économique européenne a été signé en août 1992.”.

Perceba que quando da tradução de “European Economic Area” para “la zone économique européenne“, existe uma troca de ordem entre palavras. Além disso, francês, assim como o português, é uma língua na qual é necessário ajustar os adjetivos “économique” e “européenne” para o feminino por causa do termo “la zone“. Essas restrições dificultam bastante a possiblidade de se fazer uma tradução palavra-a-palavra de uma língua para a outra, como era comum em abordagens prévias.

Ainda no artigo de 2015, os autores mostram o heatmap, copiado acima, que relaciona cada palavra da sentença em inglês com palavras da sentença em francês. Perceba que devido à mudança de ordem das palavras de uma língua para a outra, neste heatmap, a palavra “European” está fortemente relacionada às palavras “économique” e “européenne“. Assim, este heatmap ilustra o mecanismo de attention que tem o objetivo de olhar para as diferentes alternativas quando da tradução.

Self-attention

A intuição por trás de self-attention é que nós não damos a mesma importância a todas as palavras em uma sentença. Logo, self-attention é um mecanismo que cria um relacionamento entre palavras de uma mesma sentença, com o intuito de focar em algumas, enquanto outras palavras recebem pouca atenção.

Tal mecanismo pode ajudar no processo de desambiguação entre palavras que possuem a mesma escrita e significados diferentes, por exemplo.

Observe estas duas sentenças:

“O real continua pouco valorizado comparado ao euro.”

“Isto não é real; estamos num ambiente virtual.”

A palavra real nas duas sentenças possuem significados diferentes e ao olhar para as outras palavras de cada sentença, podemos inferir o seu verdadeiro significado. Isso é realizado de maneira direta por humanos, simplesmente olhando as palavras ao redor.

Desta forma, na primeira sentença, a palavra “real” pode ser correlacionada a palavra “euro” e, assim, entende-se que o assunto trata de moedas. Já na segunda, a palavra “real” relaciona-se mais fortemente com a palavra “virtual”, e daí, inferimos que a palavra “real” não se trata de moeda, como na primeira sentença.


Não apenas o ChatGPT se beneficiou de Transformers. A lista é longa, entre elas: GPT, GPT-2, GPT-3, GPT-4, BERT, ALBERT, RoBERTa, DistilBERT e XLNet.

Como evitar overfitting?

Não existe uma bala-de-prata para evitar overfitting. Boas práticas na condução de procedimentos experimentais, aliado ao entendimento do significado desse fenômeno, 99-ou-overfitting
contribuem para amenizar esse indesejável problema. Seguem alguns pontos a considerar para combater o overfitting.

treinar com mais dados

Se a máquina de aprendizagem usada é complexa, em termos da quantidade de parâmetros a ajustar, uma alternativa é adquirir mais dados com o intuito de equilibrar a quantidade de parâmetros versus a quantidade de instâncias de treinamento. Ou, simplesmente, deve-se escolher uma máquina mais simples, que tenha menos parâmetros.

validação cruzada

Uma das formas de realizar validação cruzada é usar o procedimento k-fold cross-validation. Nesse procedimento, o conjunto de dados é dividido em k partes, aproximadamente do mesmo tamanho, das quais, k-1 partes são usadas para treinar o modelo e a parte restante é usada para avaliar o modelo. Esse processo é repetido k vezes, de forma que cada parte será usada tanto para treinar como para avaliar o modelo. De maneira geral, a validação cruzada, por si só, não evita overfitting, mas segue uma boa prática ao separar o conjunto de teste e ao realizar um revezamento dos dados para uma melhor avaliação, no que tange a generalização do modelo em instâncias não vistas. Uma observação: o k-fold cross-validation não é uma boa opção quando o conjunto possui poucos dados.

parar o treinamento mais cedo (early stopping)

Máquinas de aprendizagem, tais como redes neurais artificiais, árvores de decisão, deep learning, entre outras, aprendem iterativamente. A cada passo, a máquina ajusta seus parâmetros aos dados e isso pode ser monitorado. Pode-se usar esse monitoramento para decidir qual é o melhor momento de interromper o treinamento da máquina. Espera-se que a precisão no conjunto de treinamento aumente com o tempo, mas, em relação ao conjunto de validação, a acurácia deve atingir um pico e depois cair. Esse pode ser um bom momento para frear o treinamento, antes que a máquina se sobreajuste aos dados.

regularização

Regularização é um conceito amplo que envolve várias técnicas com o propósito de produzir modelos que melhor se ajustem aos dados, evitando overfitting. Um exemplo é o procedimento de poda em uma árvore de decisão. Esse consiste em eliminar alguns “galhos” que, uma vez removidos, reduzirá a árvore, tornando-a mais simples e menos específica às instâncias de treinamento. Outros exemplos de técnicas de regularização envolvem dropout em redes neurais e adição de parâmetros de penalização na função de custo.

ensemble

Ensemble learning, ou sistema de múltiplos classificadores – SMC -,  combina as saídas de vários modelos com o intuito de melhorar a resposta final do sistema. Os SMCs têm alcançado resultados melhores do que o uso de modelos isolados. Esse sucesso deve-se a divisão de tarefas que é o espírito dessa área. Baseado no princípio de dividir-para-conquistar, cada modelo que compõe o SMC é treinado com parte do conjunto de treinamento e, consequentemente, acaba por se tornar um especialista nessa porção. Essa estratégia ajuda a amenizar o overfitting, e além disso, é robusta à presença de ruído nos dados.

 

Como representar uma tarefa de aprendizagem de máquina: handcrafted features vs feature learning

Quando tomamos uma decisão, usamos uma grande quantidade de variáveis e de hierarquias de variáveis. Muitas vezes, nem nos apercebermos da importância dessas variáveis, pois, a complexidade de algumas decisões está além do nosso entendimento. Para ilustrar: você poderia me explicar, em detalhes, como reconhece seu amigo? Quais características, seus sistemas (visual, auditivo, …) analisam, a fim de identificá-lo com precisão?

Ok, vamos para um exemplo mais palpável. Suponha que desejamos comprar um carro. De pronto, nos vem a mente, uma série de variáveis que devemos avaliar: preço, cor, consumo de combustível, procedência, entre outras. Essas características nos ajudam a decidir, se iremos ou não comprar o carro.

De maneira similar, o conjunto de características, que apresentamos à máquina de aprendizagem, é de imperativa importância para que ela consiga tomar a melhor decisão. A escolha dessas características é uma tarefa não trivial, principalmente, quando não temos um especialista para nos ajudar no problema que desejamos resolver (e.g., comprar um carro usado sem a ajuda de um mecânico).

Em aprendizagem de máquina, essas características (features, em inglês), também chamadas de variáveis ou atributos, são fundamentais para o sucesso do processo de aprendizagem. Mas, geralmente, não sabemos quais são as características mais relevantes, consequentemente, decidimos por usar um grande número de características.  Assim, corre-se o risco de que algumas delas sejam irrelevantes ou mesmo prejudiciais para o treinamento da máquina de aprendizagem. Com o objetivo de reduzir essa quantidade de características e por conseguinte, aliviar a maldição da dimensionalidade, a alternativa mais comum é usar algoritmos de seleção de características. Esses algoritmos têm o papel de buscar o melhor subconjunto de características, a fim de realizar com sucesso, a tarefa que temos em mãos.

Mas, para selecionar características, precisamos, em primeiro lugar, ter as características. Essas características podem ser obtidas de duas formas: manual (handcrafted features) ou podem ser aprendidas (feature learning).

hand-crafted-vs-feature-learningNa primeira forma, handcrafted features, um conjunto de características é recomendado por um especialista, com a ajuda de um cientista de dados, e esse processo é chamado de feature engineering. Tal processo é mostrado no caminho superior da figura acima, no qual, o trabalho do especialista é definir as características (e/ou algoritmos extratores de características), que serão usadas para representar uma árvore. Após essa definição, um modelo é treinado, com o intuito de rotular como “árvore”, toda imagem de árvore que for dada como entrada ao sistema. Vale salientar, que se poucos especialistas estiverem disponíveis no mercado, o custo de seus serviços será alto. Todavia, mesmo se os especialistas estiverem disponíveis, a tarefa é inerentemente difícil. Não é incomum que especialistas discordem (links: 1, 2, 3, 4).

Dado que <manual> feature engineering é uma tarefa cara e difícil, como evitá-la? Uma alternativa é construir máquinas capazes de realizar essa tarefa automaticamente. Ou seja, ao invés da busca ser feita por humanos, podemos delegar a tarefa de encontrar as melhores características para um algoritmo. Esse procedimento é chamado de feature learning (mostrado como sendo o caminho inferior da imagem acima). A boa notícia é que algumas máquinas já fazem esse trabalho. Arquiteturas de aprendizado profundo (deep learning – DL) estão sendo usadas para esse fim, especialmente, para tarefas que envolvam imagens, voz e texto.

Não é à toa, que DL tem se destacado nas manchetes dos noticiários ultimamente. Ela tem obtido resultados bem superiores às handcrafted features em várias aplicações, e esse sucesso deve-se ao fato de que as características são aprendidas a partir dos dados do problema. Em outras palavras, essas características são automaticamente extraídas dos dados originais, por algoritmos que buscam minimizar o erro global do sistema. Logo, o conjunto de características gerado é dependente do problema, ou seja, são personalizadas para cada conjunto de dados de treinamento.

Ganha-se em precisão, perde-se em interpretabilidade. Essa é uma desvantagem de DL. As características aprendidas não possuem explicação conhecida no mundo real. Nesse sentido, o processo realizado pela DL, ao aprender as características, é, de certa forma, semelhante ao processo que trilhamos, por exemplo, ao reconhecer uma pessoa. Sabemos que funciona… mas não conseguimos explicar em detalhes como realizamos essa tarefa.

Outro fator limitante está relacionado à abrangência. Sabemos como aprender automaticamente características interessantes, quando os dados de entrada são imagens, voz e texto. O desafio agora é expandir esse aprendizado automático para outras aplicações, que ainda requerem a manufatura de características.