![Search icon](https://hackernoon.imgix.net/search-new.png?w=19&h=19)
Em 2017, um grupo de pesquisadores (do Google e da Universidade de Toronto) introduziu uma nova maneira de lidar com tarefas de processamento de linguagem natural (NLP). Seu artigo revolucionário “ Attention is All You Need ” apresentou o modelo Transformer, uma arquitetura que desde então se tornou a base de muitos sistemas avançados de IA hoje. O desempenho, a escalabilidade e a versatilidade do modelo levaram à sua ampla adoção, formando a espinha dorsal de modelos de última geração como BERT (Bidirectional Encoder Representations) e GPT (Generative Pre-trained Transformers).
Antes do modelo Transformer, a maioria dos modelos de IA que processavam linguagem dependiam muito de um tipo de rede neural chamada Recurrent Neural Network (RNN) ou sua versão melhorada, a Long Short-Term Memory Network (LSTM). Em particular, problemas como modelagem de linguagem e tradução automática (também chamada de transdução de sequência). Esses modelos processavam palavras em uma sequência, uma por uma, da esquerda para a direita (ou vice-versa). Embora essa abordagem fizesse sentido porque as palavras em uma frase geralmente dependem das palavras anteriores, ela tinha algumas desvantagens significativas:
A Ideia-Chave: Atenção à Arquitetura
A ideia central por trás do modelo Transformer é algo chamado "atenção". Em termos simples, a atenção ajuda o modelo a focar em partes específicas de uma frase ao tentar entender o significado/contexto de uma palavra. Considere a frase, "O carro que estava estacionado na garagem é azul". Quando você pensa na palavra "azul", você naturalmente foca na palavra "carro" no início da frase porque ela diz o que é azul. Os modelos de tradução automática teriam dificuldade em identificar se o "azul" estava se referindo ao carro ou à garagem. É isso que a autoatenção faz - ajuda o modelo a focar nas palavras relevantes, não importa onde elas estejam na frase.
Note que atenção não era um conceito novo e já estava sendo usado em conjunto com RNNs. Transformer foi o primeiro modelo de transdução que dependia somente de atenção, eliminando assim a necessidade de redes neurais. Isso deu as seguintes vantagens:
Como você pode ver, o novo modelo não apenas removeu todas as desvantagens das redes neurais, mas também melhorou o desempenho da tradução automática!
Como o artigo original pode ser um pouco difícil de entender, aqui está uma explicação mais simples da arquitetura do modelo descrita no artigo.
Pilhas de codificador e decodificador : O Transformer consiste em uma pilha de codificador (à esquerda) e uma pilha de decodificador (à direita). A pilha de codificador converte a sequência de entrada (como uma frase) em um conjunto de representações contínuas, enquanto a pilha de decodificador converte essas representações em uma sequência de saída (como uma tradução). Para cada pilha, indo de baixo para cima, aqui estão os principais componentes do modelo explicados com um exemplo.
Processamento de sentenças de entrada no codificador
Entradas : O texto que você deseja traduzir. Por exemplo: "O carro que estava estacionado na garagem é azul."
Embedding de entrada : converte palavras em representações numéricas de comprimento fixo (vetores) chamadas embeddings. Esses embeddings capturam o significado semântico das palavras de uma forma que o modelo possa entender. Do nosso exemplo:
"O" -> [0,9, -0,4, 0,2, ...]
"carro" -> [0,5, 0,1, -0,7, ...]
"aquilo" -> [-0,8, 0,2, 0,8, ...]
e da mesma forma para cada palavra na frase acima.
Codificação Posicional : Como o modelo processa os embeddings de entrada, que não têm nenhuma ordenação, ele precisa de uma maneira de entender a ordem das palavras em uma frase. A codificação posicional adiciona essas informações sobre a posição de cada palavra na sequência ao seu embedding.
"O" na posição 1 pode ser ajustado para [0,9 + P1, -0,4 + P1, 0,2 + P1, ...], onde P1 representa a codificação posicional para a primeira posição, gerando assim uma nova incorporação exclusiva para a posição P1.
Mecanismo de Autoatenção : Conforme descrito anteriormente, isso permite que o modelo se concentre em palavras diferentes em uma frase, dependendo do contexto. Para cada palavra, o mecanismo de autoatenção calcula uma pontuação que representa quanto foco deve ser dado a outras palavras ao codificar a palavra atual.
Para a palavra “carro”, a autoatenção pode determinar que “estacionado”, “garagem” e “azul” são particularmente relevantes para entender seu contexto.
Atenção multi-cabeça : Nova parte do modelo do transformador. Atenção multi-cabeça é simplesmente múltiplas camadas/operações de autoatenção sendo executadas em paralelo e concatenadas linearmente.
Por exemplo, uma cabeça pode focar no sujeito principal (“carro”) e suas propriedades (“azul”), enquanto outra cabeça pode focar na oração relativa (“que estava estacionado na garagem”).
O módulo de atenção multicabeça dá ao modelo a capacidade de entender que “azul” é mais relevante para o carro em comparação à garagem.
Redes Neurais Feed-Forward : Após a camada de autoatenção, a saída é passada por uma rede neural feed-forward que é aplicada a cada posição separadamente e identicamente (mais uma vez, pode ser executada em paralelo!). Isso consiste em duas transformações lineares com uma ativação ReLU entre elas.
Add & Norm : Conexões residuais (add) são usadas para adicionar a entrada de uma camada à sua saída, que é então normalizada (norm). Isso ajuda no treinamento de redes profundas, evitando que gradientes desapareçam ou explodam.
Gerando a tradução no decodificador
Em NLP, é comum denotar o início do token de início de sequência com o caractere especial <SOS> e o fim da sequência com <EOS>. O decodificador pega a entrada processada do codificador e gera a tradução em francês "La voiture qui était garée dans le garage est bleue." Veja como essa parte funciona:
Entrada para o Decodificador : O decodificador começa com a representação codificada da frase em inglês do codificador. Se você notar, o decodificador também pega sua própria saída como entrada. Como ele não terá uma entrada para a palavra inicial, inserimos o token <SOS> no início (portanto deslocado para a direita) e removemos a última palavra. Essa sequência deslocada é o que é alimentado no decodificador.
Autoatenção mascarada : No decodificador, um mecanismo de autoatenção mascarada garante que cada palavra na sequência de saída possa atender somente às palavras anteriores a ela. Isso impede que o modelo olhe para frente e garante que ele gere a tradução uma palavra de cada vez, da esquerda para a direita.
Por exemplo, quando o decodificador está prestes a gerar a palavra “La” (a primeira palavra em francês), ele só conhece o contexto de <SOS> e não as palavras futuras como “Voiture”.
Redes neurais de feed-forward : o decodificador aplica outra rede neural de feed-forward para processar essas informações ainda mais, refinando a tradução passo a passo.
No decodificador, após processar a frase de entrada por meio de múltiplas camadas de autoatenção mascarada, atenção codificador-decodificador e redes feed-forward, obtemos uma sequência de representações contínuas (vetor de floats) para cada posição na frase alvo (francês no nosso caso). Essas representações precisam ser convertidas em palavras reais. É aqui que a camada linear e softmax final entra em jogo.
O decodificador basicamente faz isso:
Ao combinar essas etapas, o Transformer pode entender a estrutura e o significado de toda a frase de forma mais eficaz do que os modelos anteriores. O mecanismo de autoatenção e o processamento paralelo permitem que o Transformer capture efetivamente as nuances e a estrutura dos idiomas de origem e de destino, tornando-o altamente proficiente em tarefas como tradução automática.