Entender a arquitetura do transformador usada para processamento de linguagem natural (NLP)
O último avanço no processamento de linguagem natural (NLP) deve-se ao desenvolvimento da arquitetura de transformador.
Os transformadores foram introduzidos no artigo Attention Is All You Need de Vaswani e outros, de 2017. A arquitetura de transformador fornece uma alternativa às Redes Neurais Recorrentes (RNNS) para fazer NLP. Enquanto as RNNs têm uso intensivo de computação, pois processam palavras sequencialmente, os de transformadores não processam as palavras sequencialmente, mas processam cada palavra independentemente em paralelo usando a atenção.
A posição de uma palavra e a ordem das palavras em uma frase são importantes para entender o significado de um texto. Para incluir essas informações, sem precisar processar o texto sequencialmente, os transformadores usam a codificação posicional.
Entender a codificação posicional
Antes dos transformadores, os modelos de linguagem usavam inserções de palavras para codificar texto em vetores. Na arquitetura de transformador, a codificação posicional é usada para codificar texto em vetores. A codificação posicional é a soma de vetores de inserção de palavras e vetores posicionais. Ao fazer isso, o texto codificado inclui informações sobre o significado e a posição de uma palavra em uma frase.
Para codificar a posição de uma palavra em uma frase, você pode usar um único número para representar o valor do índice. Por exemplo:
Token | Valor do índice |
---|---|
O | 0 |
trabalho | 1 |
de | 2 |
William | 3 |
Shakespeare | 4 |
Inspirado | 5 |
many | 6 |
movies | 7 |
... | ... |
Quanto mais longo um texto ou sequência, maiores os valores de índice podem se tornar. Embora o uso de valores exclusivos para cada posição em um texto seja uma abordagem simples, os valores não têm significado e os valores crescentes podem criar instabilidade durante o treinamento do modelo.
A solução proposta no artigo Attention Is All You Need usa funções de seno e cosseno, em que pos
é a posição e i
é a dimensão:
Ao usar essas funções periódicas juntas para criar, você pode criar vetores exclusivos para cada posição. Como resultado, os valores estão dentro de um intervalo e o índice não fica maior quando um texto maior é codificado. Além disso, esses vetores posicionais facilitam para o modelo calcular e comparar as posições de palavras diferentes em uma frase umas com as outras.
Entender a atenção de várias cabeças
A técnica mais importante usada pelos transformadores para processar texto é o uso da atenção em vez da recorrência.
A atenção (também chamada de autoatendimento ou intra-atenção) é um mecanismo usado para mapear novas informações para obter informações aprendidas para entender o que as novas informações envolvem.
Os transformadores usam uma função de atenção, em que uma nova palavra é codificada (usando codificação posicional) e representada como uma consulta. A saída de uma palavra codificada é uma chave com um valor associado.
Para ilustrar as três variáveis usadas pela função de atenção – a consulta, as chaves e os valores – vamos explorar um exemplo simplificado. Imagine codificar a frase Vincent van Gogh is a painter, known for his stunning and emotionally expressive artworks.
ao codificar a consulta Vincent van Gogh
, a saída pode ser Vincent van Gogh
como a chave com painter
como o valor associado. A arquitetura armazena chaves e valores em uma tabela, que pode ser usada para decodificação futura:
simétricas | Valores |
---|---|
Vincent Van Gogh | Pincel |
William Shakespeare | Playwright |
Charles Dickens | Gravador |
Sempre que uma nova frase é apresentada como Shakespeare's work has influenced many movies, mostly thanks to his work as a ...
. O modelo pode concluir a frase tomando Shakespeare
como a consulta e encontrando-a na tabela de chaves e valores. A consulta Shakespeare
é mais próxima da chave William Shakespeare
e, portanto, o valor playwright
associado é apresentado como a saída.
Usando o ponto-produto dimensionado para calcular a função de atenção
Para calcular a função de atenção, a consulta, as chaves e os valores são codificados como vetores. Em seguida, a função de atenção calcula o ponto-produto dimensionado entre o vetor de consulta e os vetores de chaves.
O ponto-produto calcula o ângulo entre vetores que representam tokens, com o produto sendo maior quando os vetores estão mais alinhados.
A função softmax é usada dentro da função de atenção, sobre o ponto-produto dimensionado dos vetores, para criar uma distribuição de probabilidade com resultados possíveis. Em outras palavras, a saída da função softmax inclui quais chaves estão mais próximas da consulta. A chave com a maior probabilidade é então selecionada e o valor associado é a saída da função de atenção.
A arquitetura transformer usa atenção de várias cabeças, o que significa que os tokens são processados pela função de atenção várias vezes em paralelo. Ao fazer isso, uma palavra ou frase pode ser processada várias vezes, de várias maneiras, para extrair diferentes tipos de informações da frase.
Explorar a arquitetura do Transformador
No artigo Attention Is All You Need, a arquitetura de transformador proposta é modelada como:
Há dois componentes principais na arquitetura original de transformador:
- O codificador: responsável por processar a sequência de entrada e criar uma representação que captura o contexto de cada token.
- O decodificador: gera a sequência de saída atendendo à representação do codificador e prevendo o próximo token na sequência.
As inovações mais importantes apresentadas na arquitetura de transformador foram a codificação posicional e a atenção de várias cabeças. Uma representação simplificada da arquitetura, concentrando-se nesses dois componentes, pode ser semelhante a:
- Na camada do codificador, uma sequência de entrada é codificada com codificação posicional, após a qual a atenção de várias cabeças é usada para criar uma representação do texto.
- Na camada de decodificador, uma sequência de saída (incompleta) é codificada de maneira semelhante, primeiro usando a codificação posicional e, em seguida, a atenção de várias cabeças. Em seguida, o mecanismo de atenção de várias cabeças é usado uma segunda vez dentro do decodificador para combinar a saída do codificador e a saída da sequência de saída codificada que foi passada como entrada para a parte do decodificador. Como resultado, a saída pode ser gerada.
A arquitetura de transformador introduziu conceitos que melhoraram drasticamente a capacidade de um modelo de entender e gerar texto. Diferentes modelos foram treinados usando adaptações da arquitetura de transformador para otimizar tarefas específicas de NLP.