Seq2seq

Seq2seq é uma família de abordagens de aprendizado de máquina usadas para o processamento de linguagem natural. 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, legendagem de imagens, modelos conversacionais, reconhecimento de fala, e resumo de textos. O Seq2seq utiliza a transformação de sequências: ele transforma uma sequência noutra sequência.

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.
História
[editar | editar código]É 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

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 | editar código]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 | editar código]A referência principal para esta seção é.[12]
Codificador
[editar | editar código]
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 | editar código]
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 | editar código]

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 | editar código]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.

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.

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:
- (, "<start>") → "la"
- (, "<start> la") → "la zone"
- (, "<start> la zone") → "la zone de"
- ...
- (, "<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 | editar código]
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.

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.


Outras aplicações
[editar | editar código]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 | editar código]Referências
[editar | editar código]- ↑ a b c d Sutskever, Ilya; Vinyals, Oriol; Le, Quoc Viet (2014). «Sequence to sequence learning with neural networks». arXiv:1409.3215
[cs.CL]
- ↑ a b 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.1078
[cs.CL]
- ↑ 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
- ↑ a b 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.09977
[cs.CL]
- ↑ 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
- ↑ 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
- ↑ Bahdanau, Dzmitry; Cho, Kyunghyun; Bengio, Yoshua (2014). «Neural Machine Translation by Jointly Learning to Align and Translate». arXiv:1409.0473
[cs.CL]
- ↑ 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
- ↑ 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.08144
[cs.CL]
- ↑ 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
- ↑ Mikolov, Tomáš. "Statistical language models based on neural networks." (2012).
- ↑ 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) - ↑ 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
- ↑ «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
- ↑ Lample, Guillaume; Charton, François (2019). «Deep Learning for Symbolic Mathematics». arXiv:1912.01412
[cs.SC]
- ↑ 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.01448
[cs.CL]
Ligações externas
[editar | editar código]- Voita, Lena. «Sequence to Sequence (seq2seq) and Attention» (em inglês). Consultado em 20 de dezembro de 2023
- «A ten-minute introduction to sequence-to-sequence learning in Keras». blog.keras.io. Consultado em 19 de dezembro de 2019
| Parte da série sobre |
| Inteligência artificial (IA) |
|---|
