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.

Processamento de linguagem natural: representando palavras

Os avanços científicos e tecnológicos em processamento de linguagem natural têm o objetivo de intermediar a comunicação entre computadores e humanos usando seu principal meio de transmissão de informação, de conhecimento e de sentimento: a linguagem natural. A comunicação entre humanos é uma relação social bastante complexa que envolve o uso de diversos recursos, tais como: gestos e símbolos. Mas, dentre todos os meios, a palavra merece uma atenção especial, por sua abrangência e alcance.

A confluência entre palavras e sistemas de aprendizagem de máquina mostra um caminho para a produção de aplicações que agregam valor a diversas tarefas: tradução, detecção de fake news, deteção de hate speech, categorização de documentos, análise de sentimentos e de emoções, entre outras. Um pilar fundamental para o sucesso da automatização de tais aplicações reside na representação dessas palavras de uma forma que facilite a tarefa das máquinas de aprendizagem. Essa tal representação deve preservar o significado das palavras.

WordNet é um dicionário de sinônimos de palavras em inglês. Além dos sinônimos, o WordNet armazena, para cada palavra, um conjunto de relações do tipo “é um”. Por exemplo: para a palavra morcego, as relações “é um” animal, “é um” mamífero, entre outras, podem ser recuperadas. Assim, o WordNet é uma alternativa para representar palavras, porém, possui algumas limitações. Uma delas refere-se a incompletude, ou seja, faltam sinônimos de várias palavras, especialmente, de palavras mais novas. Ao se analisar textos, algumas palavras aparecem regularmente próximas entre si, enquanto outras, raramente, aparecem juntas. Para exemplificar: as palavras “tubarão” e “baleia” ocorrem juntas com mais frequência do que as palavras “tubarão” e “deserto”. Logo, uma informação importante diz respeito à similaridade entre palavras, e isso, o WordNet também não oferece.  

One-hot encoding

Até 2012, boa parte das aplicações representavam palavras usando uma codificação ortogonal. Para ilustrar, um corpus composto por seis palavras: tubarão, baleia, deserto, golfinho, mamífero e peixe, seria representado pelos vetores binários:

one-hot-enconding

Essa forma de representar, também conhecida como one-hot encoding, traz consigo algumas questões. Em geral, um corpus (conjunto de textos) possui mais do que seis palavras. Dado que o tamanho do vetor, que representa cada palavra, é igual ao número de palavras no corpus, esse vetor terá, facilmente, o tamanho de algumas centenas de milhares de posições. Logo, são vetores grandes e esparsos (cada vetor possui apenas um valor “1” e vários “0”s). 

Outro fator negativo ao empregar o one-hot encoding está relacionado à similaridade entre as palavras. Nessa representação, a distância entre quaisquer duas palavras é a mesma, pois cada palavra é um vetor perpendicular a todos os outros, logo, o produto interno entre dois vetores é igual a zero. Desta forma, a distância entre as palavras “baleia” e “golfinho” e as palavras “baleia” e “deserto” é a mesma. Nenhuma relação entre as palavras é estabelecida, e isso fere o objetivo de adicionar semântica ao processo, pois sabemos que as palavras “baleia” e “golfinho” aparecem mais frequentemente juntas do que as palavras “baleia” e “deserto”.

Word vectors

Tendo em vista que a relação entre as palavras é importante, pois é uma forma de adicionar semântica ao processo, alternativas foram desenvolvidas para incluir essa informação de contexto no vetor que representada cada palavra. Desde 2013, uma forma de mapear palavras em vetores com valores reais, estabeleceu-se como o estado da arte da área: word vectors (word embedding).

Ao contrário do one-hot enconding, no qual um vetor perpendicular às demais palavras é atribuído a cada palavra, os word vectors são aprendidos usando uma rede neural artificial. Esse processo de aprendizagem dos vetores leva em consideração o fato de que palavras que ocorrem em contextos similares possuem semânticas, também, similares. Dito de outra forma, se a palavra “peixe” aparece próxima da palavra “tubarão” mais frequentemente do que a palavra “mamífero”, é esperado que as palavras “peixe” e “tubarão” sejam mais “parecidas”, semanticamente, do que as palavras “peixe” e “mamífero”. Assim, deseja-se construir vetores que representem as palavras de forma que a distância entre “peixe” e “tubarão” seja menor do que a distância entre “peixe” e “mamífero”.

A figura a seguir mostra exemplos de word vectors nos quais é possível observar que as distâncias entre as palavras não é a mesma e que algumas relações semânticas, semelhantes às descritas no parágrafo anterior, são preservadas. Nota: cada uma das palavras dessa figura era formada originalmente por um vetor de cem valores e, para fins de visualização, a dimensionalidade foi reduzido para duas usando a análise dos componentes principais. Logo, muita informação foi perdida nesse processo de redução para uma representação 2D.

pca-word2vec

Mas, como embutir tal semântica nos vetores que representam as palavras, sabendo que tais vetores são compostos por números reais? Para ilustrar a intuição dessa construção dos vetores, veja o exemplo a seguir que mostra a frase “Focas, orcas, golfinhos e baleias são mamíferos que vivem nos mares”. Nesse exemplo, o elemento “central” é dado pela palavra “baleia” e os elementos de “contexto” estão destacados em verde.  Esse processo é chamado de janelamento e, para essa ilustração, foi usado uma janela de tamanho cinco. De maneira iterativa, essa janela percorre a frase, colocando outras palavras como o elemento “central”.

word2vec-frase2

Os valores que compõem o vetor da palavra “central” são atualizados de maneira que consigam predizer quais palavras formam o “contexto”. Na figura, wt representa a palavra central “baleia” e P(wt+2|wt) é a probabilidade de predizer a palavra  “mamífero” (wt+2) dada a palavra “baleia” (wt). Desta forma, ao apresentar várias e várias janelas à máquina de aprendizagem, o modelo consegue aprender o contexto de palavras estimando a probabilidade de uma palavra no “contexto” ser predita pela palavra “central”. E, ao fim, esse processo “magicamente” embute o significado das palavras nos valores dos vetores.  Para mais detalhes sobre o funcionamento do modelo, veja o artigo que propõe o Word2vec. Esse é o modelo seminal que usa uma rede neural para representar as palavras seguindo a intuição descrita acima.