Seq2seq é uma família de abordagens de aprendizado de máquina usadas para o processamento de linguagem natural.[1] Originalmente desenvolvido por Lê Viết Quốc, um cientista da computação vietnamita e pioneiro do aprendizado de máquina no Google Brain, este framework tornou-se fundamental em muitos sistemas modernos de IA. As aplicações incluem tradução de idiomas,[2] legendagem de imagens,[3] modelos conversacionais,[4] reconhecimento de fala,[5] e resumo de textos.[6] O Seq2seq utiliza a transformação de sequências: ele transforma uma sequência noutra sequência.

Animação do seq2seq com RNN e mecanismo de atenção

História

editar

É natural perguntar-se se o problema da tradução poderia, concebivelmente, ser tratado como um problema de criptografia. Quando olho para um artigo em russo, digo: 'Isto está na verdade escrito em inglês, mas foi codificado nalguns símbolos estranhos. Vou agora proceder à decodificação.

Warren Weaver, Carta a Norbert Wiener, 4 de março de 1947
Diagrama de Shannon de um sistema de comunicações geral, mostrando o processo pelo qual uma mensagem enviada se torna a mensagem recebida (possivelmente corrompida por ruído)

O seq2seq é uma abordagem à tradução automática (ou, mais genericamente, à transdução de sequências) com raízes na teoria da informação, onde a comunicação é entendida como um processo de codificação-transmissão-decodificação, e a tradução automática pode ser estudada como um caso especial de comunicação. Este ponto de vista foi elaborado, por exemplo, no modelo de canal ruidoso da tradução automática.

Na prática, o seq2seq mapeia uma sequência de entrada num vetor numérico real usando uma rede neural (o codificador), e depois mapeia-o de volta para uma sequência de saída usando outra rede neural (o decodificador).

A ideia de transdução de sequência codificador-decodificador foi desenvolvida no início da década de 2010. Os artigos mais comumente citados como os criadores que produziram o seq2seq são dois artigos de 2014.[2][1]

No seq2seq conforme proposto por eles, tanto o codificador quanto o decodificador eram LSTMs. Isso apresentava o problema de "estrangulamento" (bottleneck), visto que o vetor de codificação tem um tamanho fixo, então para sequências de entrada longas, a informação tenderia a ser perdida, já que é difícil encaixá-la no vetor de codificação de comprimento fixo. O mecanismo de atenção, proposto em 2014,[7] resolveu o problema do estrangulamento. Eles chamaram ao seu modelo RNNsearch, pois ele "emula a pesquisa por uma frase de origem durante a decodificação de uma tradução".

Um problema com os modelos seq2seq neste ponto era que as redes neurais recorrentes são difíceis de paralelizar. A publicação dos Transformers em 2017[8] resolveu o problema substituindo a RNN de codificação por blocos Transformer de autoatenção ("blocos codificadores"), e a RNN de decodificação por blocos Transformer com máscara causal de atenção cruzada ("blocos decodificadores").

Disputa de prioridade

editar

Um dos artigos citados como o originador do seq2seq é (Sutskever et al 2014),[1] publicado na Google Brain enquanto trabalhavam no projeto de tradução automática do Google. A pesquisa permitiu que a Google reformulasse o Google Tradutor para a Tradução Automática Neural do Google em 2016.[1][9] Tomáš Mikolov afirma ter desenvolvido a ideia (antes de se juntar à Google Brain) de usar um "modelo de linguagem neural em pares de frases... e então [gerar] a tradução depois de ver a primeira frase" — o que ele equipara à tradução automática seq2seq, e ter mencionado a ideia a Ilya Sutskever e Quoc Le (enquanto estava na Google Brain), que falharam em dar-lhe crédito no seu artigo.[10] Mikolov tinha trabalhado no RNNLM (usando RNN para modelagem de linguagem) para a sua tese de doutoramento,[11] e é mais notável por ter desenvolvido o word2vec.

Arquitetura

editar

A referência principal para esta seção é.[12]

Codificador

editar
Codificador RNN

O codificador é responsável por processar a sequência de entrada e capturar as suas informações essenciais, que são armazenadas como o estado oculto da rede e, num modelo com mecanismo de atenção, um vetor de contexto. O vetor de contexto é a soma ponderada dos estados ocultos de entrada e é gerado para cada instante de tempo nas sequências de saída.

Decodificador

editar
Decodificador RNN

O decodificador pega no vetor de contexto e nos estados ocultos do codificador e gera a sequência de saída final. O decodificador opera de maneira autorregressiva, produzindo um elemento da sequência de saída de cada vez. Em cada passo, ele considera os elementos gerados anteriormente, o vetor de contexto e as informações da sequência de entrada para fazer previsões para o próximo elemento na sequência de saída. Especificamente, num modelo com mecanismo de atenção, o vetor de contexto e o estado oculto são concatenados juntos para formar um vetor oculto de atenção, que é usado como entrada para o decodificador.

O método seq2seq desenvolvido no início da década de 2010 usa duas redes neurais: uma rede codificadora converte uma frase de entrada em vetores numéricos, e uma rede decodificadora converte esses vetores em frases no idioma de destino. O mecanismo de Atenção foi enxertado nesta estrutura em 2014 e é mostrado abaixo. Mais tarde, foi refinado na arquitetura codificador-decodificador Transformer de 2017.

Treinamento vs previsão

editar
Treinamento de um modelo seq2seq via teacher forcing
Prevendo uma sequência usando um modelo seq2seq

Existe uma diferença subtil entre o treinamento e a previsão. Durante o tempo de treinamento, tanto as sequências de entrada como as de saída são conhecidas. Durante o tempo de previsão, apenas a sequência de entrada é conhecida, e a sequência de saída deve ser decodificada pela própria rede.

Especificamente, considere uma sequência de entrada e uma sequência de saída . O codificador processaria a entrada passo a passo. Depois disso, o decodificador pegaria na saída do codificador, bem como no token <bos> como entrada, e produziria uma previsão . Agora, a pergunta é: o que deve ser inserido no decodificador no passo seguinte?

Um método padrão para o treinamento é o "teacher forcing". No teacher forcing, não importa o que seja gerado pelo decodificador, a próxima entrada para o decodificador é sempre a referência correta. Ou seja, mesmo que , a próxima entrada para o decodificador continua a ser , e assim por diante.

Durante o tempo de previsão, o "professor" estaria indisponível. Portanto, a entrada para o decodificador deve ser , depois , e assim por diante.

Descobriu-se que, se um modelo for treinado puramente por teacher forcing, o seu desempenho degradaria durante o tempo de previsão, uma vez que a geração baseada na própria saída do modelo é diferente da geração baseada na saída do professor. A isto chama-se viés de exposição (exposure bias) ou mudança de distribuição de treino/teste (distribution shift). Um artigo de 2015 recomenda que, durante o treinamento, se alterne aleatoriamente entre o uso do teacher forcing e o não uso do teacher forcing.[13]

Atenção para seq2seq

editar

O mecanismo de atenção é uma melhoria introduzida por Bahdanau et al. em 2014 para abordar as limitações na arquitetura Seq2Seq básica, onde uma sequência de entrada mais longa faz com que a saída do estado oculto do codificador se torne irrelevante para o decodificador. Ele permite que o modelo se foque seletivamente em diferentes partes da sequência de entrada durante o processo de decodificação. Em cada passo do decodificador, um modelo de alinhamento calcula a pontuação de atenção usando o estado atual do decodificador e todos os vetores ocultos de atenção como entrada. Um modelo de alinhamento é outro modelo de rede neural que é treinado em conjunto com o modelo seq2seq usado para calcular o quão bem uma entrada, representada pelo estado oculto, corresponde à saída anterior, representada pelo estado oculto de atenção. Uma função softmax é então aplicada à pontuação de atenção para obter o peso da atenção.

Codificador-decodificador RNN seq2seq com mecanismo de atenção, onde a construção detalhada do mecanismo de atenção é exposta. Veja a página do mecanismo de atenção para mais detalhes.

Em alguns modelos, os estados do codificador são alimentados diretamente numa função de ativação, eliminando a necessidade de um modelo de alinhamento. Uma função de ativação recebe um estado do decodificador e um estado do codificador e retorna um valor escalar da sua relevância.

Animação do seq2seq com RNN e mecanismo de atenção

Considere a tarefa seq2seq de tradução do inglês para o francês. Para sermos concretos, vamos considerar a tradução de "the zone of international control <end>", que deve traduzir para "la zone de contrôle international <end>". Aqui, usamos o token especial <end> como um caractere de controle para delimitar o fim da entrada tanto para o codificador como para o decodificador.

Uma sequência de entrada de texto é processada por uma rede neural (que pode ser uma LSTM, um codificador Transformer, ou alguma outra rede) numa sequência de vetores de valor real , onde significa "vetor oculto".

Depois de o codificador ter terminado o processamento, o decodificador começa a operar sobre os vetores ocultos, para produzir uma sequência de saída , de forma autorregressiva. Ou seja, ele sempre recebe como entrada tanto os vetores ocultos produzidos pelo codificador, como aquilo que o próprio decodificador produziu antes, para produzir a palavra de saída seguinte:

  1. (, "<start>") → "la"
  2. (, "<start> la") → "la zone"
  3. (, "<start> la zone") → "la zone de"
  4. ...
  5. (, "<start> la zone de contrôle international") → "la zone de contrôle international <end>"

Aqui, usamos o token especial <start> como um caractere de controle para delimitar o início da entrada para o decodificador. A decodificação termina assim que o "<end>" aparece na saída do decodificador.

Pesos de atenção

editar
Mecanismo de atenção com pesos de atenção, visão geral

Como a elaboração manual de pesos anula o propósito do aprendizado de máquina, o modelo deve calcular os pesos de atenção por si mesmo. Fazendo uma analogia com a linguagem das consultas de base de dados, fazemos o modelo construir um trio de vetores: chave (key), consulta (query) e valor (value). A ideia geral é que temos uma "base de dados" na forma de uma lista de pares chave-valor. O decodificador envia uma consulta, e obtém uma resposta na forma de uma soma ponderada dos valores, onde o peso é proporcional à semelhança da consulta com cada chave.

O decodificador primeiro processa a entrada "<start>" parcialmente, para obter um vetor intermediário , o 0º vetor oculto do decodificador. Em seguida, o vetor intermediário é transformado por um mapa linear num vetor de consulta . Enquanto isso, os vetores ocultos emitidos pelo codificador são transformados por outro mapa linear em vetores de chave . Os mapas lineares são úteis para fornecer ao modelo liberdade suficiente para encontrar a melhor forma de representar os dados.

Agora, a consulta e as chaves são comparadas através da obtenção de produtos escalares: . Idealmente, o modelo deveria ter aprendido a calcular as chaves e os valores, de modo a que seja grande, seja pequeno, e o resto seja muito pequeno. Isto pode ser interpretado como dizendo que o peso de atenção deve ser aplicado maioritariamente ao 0º vetor oculto do codificador, um pouco ao 1º, e essencialmente nenhum ao resto.

De forma a fazer uma soma devidamente ponderada, precisamos de transformar esta lista de produtos escalares numa distribuição de probabilidade sobre . Isto pode ser conseguido através da função softmax, dando-nos assim os pesos de atenção: Isto é então usado para calcular o vetor de contexto:

onde são os vetores de valor, transformados linearmente por outra matriz para fornecer ao modelo a liberdade de encontrar a melhor forma de representar os valores. Sem as matrizes , o modelo seria forçado a usar o mesmo vetor oculto tanto para a chave como para o valor, o que poderia não ser apropriado, já que estas duas tarefas não são as mesmas.

Calculando os pesos de atenção por produto escalar. Esta é a "atenção cruzada do decodificador".

Este é o mecanismo de atenção de produto escalar (dot-attention). A versão particular descrita nesta secção é a "atenção cruzada do decodificador" (decoder cross-attention), uma vez que o vetor de contexto de saída é usado pelo decodificador, e as chaves e valores de entrada vêm do codificador, mas a consulta vem do decodificador, daí "atenção cruzada".

Mais sucintamente, podemos escrevê-lo como: onde a matriz é a matriz cujas linhas são . Note-se que o vetor de consulta, , não é necessariamente o mesmo que o vetor chave-valor . De facto, é teoricamente possível que os vetores de consulta, chave e valor sejam todos diferentes, embora isso raramente seja feito na prática.

Codificador-decodificador RNN seq2seq com mecanismo de atenção, treinamento
Codificador-decodificador RNN seq2seq com mecanismo de atenção, treinamento e inferência

Outras aplicações

editar

Em 2019, o Facebook anunciou a sua utilização na integração simbólica e na resolução de equações diferenciais. A empresa afirmou que o modelo poderia resolver equações complexas mais rapidamente e com maior precisão do que soluções comerciais como Mathematica, MATLAB e Maple. Primeiro, a equação é analisada (parsed) numa estrutura de árvore para evitar idiossincrasias notacionais. Em seguida, uma rede neural LSTM aplica as suas capacidades padrão de reconhecimento de padrões para processar a árvore.[14][15]

Em 2020, o Google lançou o Meena, um chatbot baseado em seq2seq com 2,6 bilhões de parâmetros, treinado num conjunto de dados de 341 GB. O Google afirmou que o chatbot tem uma capacidade de modelo 1,7 vezes maior que a do GPT-2 da OpenAI.[4]

Em 2022, a Amazon introduziu o AlexaTM 20B, um modelo de linguagem seq2seq de tamanho moderado (20 bilhões de parâmetros). Ele usa um codificador-decodificador para realizar o aprendizado few-shot. O codificador produz uma representação da entrada que o decodificador usa como entrada para executar uma tarefa específica, como traduzir a entrada para outro idioma. O modelo supera o muito maior GPT-3 em tradução de idiomas e resumo. O treinamento mistura a remoção de ruído (denoising) (inserindo apropriadamente texto em falta em cadeias) e a modelagem causal de linguagem (estendendo significativamente um texto de entrada). Permite adicionar recursos em diferentes idiomas sem fluxos de trabalho de treinamento massivos. O AlexaTM 20B alcançou um desempenho no estado da arte em tarefas de aprendizado few-shot em todos os pares de idiomas Flores-101, superando o GPT-3 em várias tarefas.[16]

Ver também

editar

Referências

editar
  1. 1 2 3 4 Sutskever, Ilya; Vinyals, Oriol; Le, Quoc Viet (2014). «Sequence to sequence learning with neural networks». arXiv:1409.3215Acessível livremente [cs.CL]
  2. 1 2 Cho, Kyunghyun; van Merrienboer, Bart; Gulcehre, Caglar; Bahdanau, Dzmitry; Bougares, Fethi; Schwenk, Holger; Bengio, Yoshua (3 de junho de 2014). «Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation». arXiv:1406.1078Acessível livremente [cs.CL]
  3. Xu, Kelvin; Ba, Jimmy; Kiros, Ryan; Cho, Kyunghyun; Courville, Aaron; Salakhudinov, Ruslan; Zemel, Rich; Bengio, Yoshua (1 de junho de 2015). «Show, Attend and Tell: Neural Image Caption Generation with Visual Attention». PMLR. Proceedings of the 32nd International Conference on Machine Learning (em inglês): 2048–2057
  4. 1 2 Adiwardana, Daniel; Luong, Minh-Thang; So, David R.; Hall, Jamie; Fiedel, Noah; Thoppilan, Romal; Yang, Zi; Kulshreshtha, Apoorv; Nemade, Gaurav; Lu, Yifeng; Le, Quoc V. (31 de janeiro de 2020). «Towards a Human-like Open-Domain Chatbot». arXiv:2001.09977Acessível livremente [cs.CL]
  5. Chan, William; Jaitly, Navdeep; Le, Quoc; Vinyals, Oriol (Março de 2016). «Listen, attend and spell: A neural network for large vocabulary conversational speech recognition». 2016 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). [S.l.]: IEEE. pp. 4960–4964. ISBN 978-1-4799-9988-0. doi:10.1109/ICASSP.2016.7472621
  6. Alexander M. Rush; Sumit Chopra; Jason Weston (2015). Lluís Màrquez; Chris Callison-Burch; Jian Su, eds. A Neural Attention Model for Abstractive Sentence Summarization. Proceedings of the 2015 Conference on Empirical Methods in Natural Language Processing. Lisboa, Portugal: Association for Computational Linguistics. pp. 379–389. doi:10.18653/v1/D15-1044
  7. Bahdanau, Dzmitry; Cho, Kyunghyun; Bengio, Yoshua (2014). «Neural Machine Translation by Jointly Learning to Align and Translate». arXiv:1409.0473Acessível livremente [cs.CL]
  8. Vaswani, Ashish; Shazeer, Noam; Parmar, Niki; Uszkoreit, Jakob; Jones, Llion; Gomez, Aidan N; Kaiser, Łukasz; Polosukhin, Illia (2017). «Attention is All you Need». Curran Associates, Inc. Advances in Neural Information Processing Systems. 30
  9. Wu, Yonghui; Schuster, Mike; Chen, Zhifeng; Le, Quoc V.; Norouzi, Mohammad; Macherey, Wolfgang; Krikun, Maxim; Cao, Yuan; Gao, Qin; Macherey, Klaus; Klingner, Jeff; Shah, Apurva; Johnson, Melvin; Liu, Xiaobing; Kaiser, Łukasz (2016). «Google's Neural Machine Translation System: Bridging the Gap between Human and Machine Translation». arXiv:1609.08144Acessível livremente [cs.CL]
  10. Mikolov, Tomáš (13 de dezembro de 2023). «Yesterday we received a Test of Time Award at NeurIPS for the word2vec paper from ten years ago». Facebook. Cópia arquivada em 24 de dez. de 2023
  11. Mikolov, Tomáš. "Statistical language models based on neural networks." (2012).
  12. Zhang, Aston; Lipton, Zachary; Li, Mu; Smola, Alexander J. (2024). «10.7. Sequence-to-Sequence Learning for Machine Translation». Dive into deep learning. Cambridge New York Port Melbourne New Delhi Singapore: Cambridge University Press. ISBN 978-1-009-38943-3 Parâmetro desconhecido |capitulo-url= ignorado (ajuda)
  13. Bengio, Samy; Vinyals, Oriol; Jaitly, Navdeep; Shazeer, Noam (2015). «Scheduled Sampling for Sequence Prediction with Recurrent Neural Networks». Curran Associates, Inc. Advances in Neural Information Processing Systems. 28
  14. «Facebook has a neural network that can do advanced math». MIT Technology Review (em inglês). 17 de dezembro de 2019. Consultado em 17 de dezembro de 2019
  15. Lample, Guillaume; Charton, François (2019). «Deep Learning for Symbolic Mathematics». arXiv:1912.01412Acessível livremente [cs.SC]
  16. Soltan, Saleh; Ananthakrishnan, Shankar; FitzGerald, Jack; Gupta, Rahul; Hamza, Wael; Khan, Haidar; Peris, Charith; Rawls, Stephen; Rosenbaum, Andy; Rumshisky, Anna; Chandana Satya Prakash; Sridhar, Mukund; Triefenbach, Fabian; Verma, Apurv; Tur, Gokhan; Natarajan, Prem (2022). «AlexaTM 20B: Few-Shot Learning Using a Large-Scale Multilingual Seq2Seq Model». arXiv:2208.01448Acessível livremente [cs.CL]

Ligações externas

editar