Sequência para Sequência (Sequence-to-Sequence)
Visão geral
Modelos sequência para sequência (sequence-to-sequence, seq2seq) mapeiam uma sequência de entrada para uma sequência de saída, potencialmente de comprimento diferente. Essa configuração de “transdução de sequência (sequence transduction)” sustenta a tradução automática (inglês → francês), a sumarização abstrativa (documento → resumo), o reconhecimento de fala (quadros de áudio → texto) e muitas outras tarefas de geração condicional.
Um modelo de seq2seq normalmente segue o padrão codificador–decodificador (encoder–decoder):
- O codificador (encoder) lê a sequência de origem e produz uma representação do seu conteúdo.
- O decodificador (decoder) gera a sequência-alvo token a token, condicionado à representação do codificador e aos tokens gerados anteriormente.
Historicamente, modelos de seq2seq eram construídos com redes recorrentes (LSTMs/GRUs). Hoje, a maioria dos sistemas de seq2seq de alto desempenho usa arquiteturas codificador–decodificador do Transformer, baseando-se em autoatenção (self-attention) e atenção cruzada (cross-attention) em vez de recorrência. Para fundamentos específicos de Transformer, veja Arquitetura Transformer, Mecânica de Atenção e Codificações Posicionais.
O problema de transdução de sequência
Considere a entrada como uma sequência (x = (x_1, \dots, x_n)) e a saída como (y = (y_1, \dots, y_m)). Um modelo de seq2seq define uma probabilidade condicional:
[ p(y \mid x) = \prod_{t=1}^{m} p(y_t \mid y_{<t}, x) ]
Esta é uma fatoração autorregressiva (autoregressive): para prever o próximo token, o modelo condiciona em toda a entrada (x) e em todos os tokens de saída gerados anteriormente (y_{<t}).
Dois exemplos comuns:
- Tradução automática (machine translation): (x) é uma frase no idioma de origem, (y) é a frase traduzida.
- Sumarização (summarization): (x) é um documento longo, (y) é um resumo mais curto.
Arquitetura codificador–decodificador
Codificador
O codificador transforma a sequência de tokens de entrada em uma sequência de estados ocultos:
[ h = (h_1, \dots, h_n) ]
Em Transformers, isso é feito com camadas empilhadas de:
- Autoatenção multi-cabeças sobre os tokens de entrada
- Redes feed-forward
- Conexões residuais + normalização de camada
Como a autoatenção é invariante a permutação, o modelo também requer informação posicional (positional information) (absoluta ou relativa), abordada em Codificações Posicionais.
Decodificador
O decodificador gera tokens de saída um passo por vez. Em codificadores–decodificadores Transformer, cada camada do decodificador normalmente contém:
- Autoatenção mascarada (masked self-attention) sobre tokens-alvo já gerados (impede “espiar” tokens futuros)
- Atenção cruzada sobre as saídas do codificador (h) (é isso que condiciona a geração na origem)
- Rede feed-forward
A atenção cruzada é o mecanismo-chave que permite ao decodificador “olhar” para a sequência de origem enquanto gera cada token.
Por que codificador–decodificador em vez de um único modelo?
Modelos codificador–decodificador são especialmente naturais quando:
- A entrada e a saída são modalidades ou formatos diferentes (áudio → texto, tabela → texto).
- A entrada é longa e precisa ser “lida” antes da geração.
- Você deseja forte condicionamento em toda a entrada (tradução, sumarização, resposta a perguntas).
Em contraste, modelos de linguagem apenas decodificador (decoder-only) também conseguem fazer geração condicional colocando a entrada no prompt, mas codificadores–decodificadores frequentemente permanecem competitivos ou superiores em muitos cenários clássicos de seq2seq, especialmente com entradas longas e separação clara entre origem e alvo.
Atenção como alinhamento (suave)
Os primeiros RNNs de seq2seq tinham dificuldade em comprimir toda a entrada em um único vetor. A atenção (attention) resolveu isso ao permitir que o decodificador compute uma combinação ponderada dos estados do codificador em cada passo de tempo:
- O decodificador produz uma consulta (o que ele precisa agora).
- Os estados do codificador fornecem chaves/valores (o que está disponível a partir da origem).
- Os pesos de atenção fornecem um alinhamento suave entre posições do alvo e posições da origem.
Isso é particularmente interpretável em tradução: ao gerar uma palavra-alvo, o modelo tende a prestar atenção nas palavras de origem correspondentes (embora Transformers modernos possam usar padrões mais complexos do que um simples alinhamento palavra a palavra).
Para a mecânica de consultas/chaves/valores, veja Mecânica de Atenção.
Treinamento de modelos seq2seq
Tokenização e tokens especiais
Modelos seq2seq geralmente operam sobre tokens de subpalavras (BPE, SentencePiece). Convenções típicas:
- A entrada pode ser prefixada com uma tag de tarefa (por exemplo,
"translate en->de: ..."no estilo de treinamento do T5). - O decodificador usa tokens especiais como:
<bos>(beginning of sequence)<eos>(end of sequence)<pad>(padding for batching)
Teacher forcing e máxima verossimilhança
A maioria dos sistemas seq2seq é treinada com forçamento do professor (teacher forcing): em tempo de treinamento, o decodificador recebe o token anterior gold (y_{t-1}), e não sua própria previsão amostrada.
O objetivo padrão é máxima verossimilhança (maximum likelihood) (entropia cruzada):
[ \mathcal{L} = -\sum_{t=1}^{m} \log p(y_t \mid y_{<t}, x) ]
O treinamento usa Retropropagação e um otimizador como Adam (uma variante adaptativa de Descida do Gradiente). Estabilizadores comuns incluem:
- Dropout
- Suavização de rótulos (label smoothing) (ajuda calibração e generalização em tradução)
- Agendas de taxa de aprendizado (por exemplo, warmup + decaimento)
- Clipping de gradiente (historicamente importante para RNNs; ainda às vezes usado)
Viés de exposição
Um problema conhecido: durante o treinamento o modelo condiciona em tokens anteriores verdadeiros; durante a inferência ele condiciona em suas próprias previsões. Essa discrepância é chamada de viés de exposição (exposure bias) e pode acumular erros durante a geração.
Mitigações incluem:
- Amostragem programada (scheduled sampling) (abordagem mais antiga, difícil de ajustar)
- Estratégias melhores de decodificação (busca em feixe, decodificação com restrições)
- Treinamento em nível de sequência (por exemplo, objetivos de aprendizado por reforço), menos comum em pipelines modernos de Transformer do que em trabalhos anteriores de sumarização
Inferência: estratégias de decodificação
Em tempo de inferência, você gera tokens até <eos> ou um comprimento máximo.
Decodificação gulosa
Escolha o token mais provável em cada passo:
[ y_t = \arg\max p(y_t \mid y_{<t}, x) ]
Rápida, mas pode ser míope.
Busca em feixe
Mantém as (k) melhores hipóteses parciais (o “feixe”). Muitas vezes melhora a qualidade de tradução.
Detalhes comuns da busca em feixe:
- Normalização de comprimento (length normalization) para evitar preferir saídas curtas.
- Penalidades de cobertura (coverage penalties) (modelos de atenção mais antigos) para reduzir subtradução.
- Bloqueio de n-gramas (n-gram blocking) em sumarização para reduzir frases repetitivas.
Amostragem (mais comum em geração criativa)
Para tarefas como diálogo ou reescrita criativa, você pode amostrar:
- Amostragem top-(k)
- Amostragem de núcleo (top-(p)) (nucleus)
- Escalonamento de temperatura
Para tradução e sumarização, a decodificação determinística (feixe/gulosa) ainda é comum, mas a amostragem pode ser útil quando você deseja saídas diversas.
Arquiteturas seq2seq clássicas e modernas
Seq2seq baseado em RNN (fundação histórica)
Os primeiros modelos seq2seq usavam:
- Um codificador RNN produzindo um estado final (ou sequência de estados)
- Um decodificador RNN gerando tokens
- Atenção (Bahdanau/Luong) para lidar com gargalos de informação
Esses modelos estabeleceram a receita básica de codificador–decodificador, mas são mais lentos para treinar (sequenciais) e menos escaláveis do que Transformers.
Transformer codificador–decodificador (padrão moderno)
Modelos seq2seq com Transformer removem recorrência, permitindo:
- Codificação paralela (todos os tokens de uma vez)
- Melhor captura de dependências de longo alcance via atenção
- Escalonamento eficiente em hardware moderno
Exemplos canônicos:
- T5 (Text-to-Text Transfer Transformer): unifica tarefas como texto-para-texto.
- BART: pré-treinamento por remoção de ruído, forte para sumarização.
- MarianMT e outras variantes focadas em tradução.
- mT5 / modelos codificador–decodificador multilíngues para muitos idiomas.
Exemplo prático: pipeline de tradução
Um conjunto de dados de tradução contém sequências pareadas ((x, y)). O fluxo de trabalho geral:
- Tokenizar texto de origem e alvo com um tokenizador compartilhado ou separado.
- Alimentar os tokens de origem ao codificador.
- Treinar o decodificador para prever tokens-alvo com forçamento do professor.
- Decodificar com busca em feixe na inferência.
Aqui está um exemplo mínimo usando Hugging Face Transformers (conceitual; nomes exatos de modelos podem variar):
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
model_name = "Helsinki-NLP/opus-mt-en-de"
tok = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSeq2SeqLM.from_pretrained(model_name)
src = "The encoder reads the input, and the decoder generates the output."
inputs = tok(src, return_tensors="pt")
# Beam search decoding
out_ids = model.generate(
**inputs,
num_beams=5,
max_new_tokens=60,
length_penalty=1.0,
early_stopping=True,
)
print(tok.decode(out_ids[0], skip_special_tokens=True))
Dicas práticas:
- Use busca em feixe para tradução; ajuste
num_beams(frequentemente 4–8). - Observe incompatibilidade de domínio: faça ajuste fino (fine-tune) em dados paralelos do domínio, se possível.
- Avalie com BLEU, chrF ou COMET (métricas aprendidas cada vez mais correlacionam melhor com julgamentos humanos do que BLEU).
Exemplo prático: pipeline de sumarização
A sumarização vem em dois tipos principais:
- Extrativa (extractive): seleciona frases da fonte.
- Abstrativa (abstractive): gera texto novo (seq2seq é tipicamente usado aqui).
Para sumarização abstrativa:
- Entradas podem ser longas (artigos, relatórios).
- Saídas devem ser mais curtas e fiéis.
Um modelo comum é do tipo BART ou do tipo T5:
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
model_name = "facebook/bart-large-cnn"
tok = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSeq2SeqLM.from_pretrained(model_name)
doc = """Sequence-to-sequence models map an input sequence to an output sequence.
They are used in translation and summarization..."""
inputs = tok(doc, return_tensors="pt", truncation=True, max_length=1024)
summary_ids = model.generate(
**inputs,
num_beams=4,
max_new_tokens=120,
min_length=30,
no_repeat_ngram_size=3,
)
print(tok.decode(summary_ids[0], skip_special_tokens=True))
Dicas práticas para sumarização:
- Use
no_repeat_ngram_sizepara reduzir repetição. - Tenha cuidado com
truncation: cortar a entrada pode remover fatos-chave. - Avalie com ROUGE, mas também use checagens humanas de fidelidade (faithfulness) (alucinações são um risco conhecido).
Melhorias comuns para tarefas seq2seq
Mecanismos de cópia e pointer-generators
Em sumarização, data-to-text e QA, a saída frequentemente precisa reproduzir nomes raros, números ou entidades a partir da entrada. Geração pura pode ter dificuldade com isso.
Mecanismos de ponteiro/cópia (pointer/copy mechanisms) permitem que o decodificador:
- Gere um token a partir do vocabulário, ou
- Copie um token diretamente da fonte
Sistemas modernos com Transformer às vezes aproximam esse comportamento via boa tokenização em subpalavras e atenção, mas mecanismos explícitos de cópia ainda podem ajudar em cenários especializados.
Decodificação com restrições
Às vezes as saídas devem satisfazer regras:
- Devem conter certas entidades
- Devem seguir um esquema (por exemplo, JSON)
- Devem evitar conteúdo inseguro
A decodificação com restrições pode impor conjuntos permitidos de tokens em cada passo, ou usar restrições de estado finito. Isso é comum em geração estruturada e sistemas orientados a ferramentas.
Lidando com entradas longas
Transformers codificador–decodificador têm custos de atenção que escalam aproximadamente com o comprimento da sequência (quadrático para atenção completa). Para sumarização de documentos longos, estratégias práticas incluem:
- Variantes de codificador com contexto longo (atenção esparsa, chunking, codificação hierárquica)
- Recuperação + sumarização (sumarizar passagens recuperadas)
- Codificação em janela deslizante (sliding-window) com agregação cuidadosa
Avaliação: o que significa “bom” depende da tarefa
Tradução
- BLEU: sobreposição de n-gramas orientada a precisão; amplamente usada, mas imperfeita.
- chrF: F-score de n-gramas de caracteres; muitas vezes melhor em idiomas morfologicamente ricos.
- COMET / BLEURT: métricas aprendidas que correlacionam melhor com julgamentos humanos.
A avaliação humana frequentemente verifica:
- Adequação (significado preservado)
- Fluência (gramaticalidade/naturalidade)
- Consistência terminológica (específica do domínio)
Sumarização
- ROUGE: sobreposição orientada a revocação; fácil de computar, limitada para paráfrases abstrativas.
- Factualidade/fidelidade: cada vez mais medida com avaliadores aprendidos e checagens humanas.
Um modo de falha comum é a alucinação (hallucination): saída fluente que não é sustentada pela fonte.
Onde seq2seq se encaixa dentro da família Transformer
Sistemas baseados em Transformer frequentemente são agrupados em:
- Apenas codificador (encoder-only) (por exemplo, estilo BERT): melhor para compreensão/classificação.
- Apenas decodificador (decoder-only) (estilo GPT): melhor para geração de propósito geral via prompting.
- Codificador–decodificador (encoder–decoder) (Transformers seq2seq): melhor para geração condicional com forte condicionamento na entrada.
Modelos seq2seq são a escolha canônica quando a tarefa é naturalmente “ler a entrada → escrever a saída”, especialmente quando os papéis de entrada e saída devem permanecer distintos.
Aplicações além de tradução e sumarização
Seq2seq é um modelo geral para geração condicional, incluindo:
- Reconhecimento de fala (características de áudio → texto)
- Legendagem de imagens (embeddings de imagem → texto)
- Correção gramatical e transferência de estilo
- Data-to-text (tabelas/registros → linguagem natural)
- Geração de código ou tradução de código (código-fonte → código-alvo)
- Resposta a perguntas (contexto + pergunta → resposta)
Muitas dessas tarefas agora são abordadas com modelos multimodais ou ajustados por instruções (instruction-tuned), mas a espinha dorsal conceitual continua sendo a transdução seq2seq.
Principais conclusões
- Modelos seq2seq aprendem (p(y \mid x)) para sequências de entrada/saída de comprimento variável.
- O desenho codificador–decodificador separa de forma limpa “entender a entrada” de “gerar a saída”.
- Atenção e atenção cruzada permitem alinhamento dinâmico entre origem e alvo, crucial para tradução e sumarização.
- O treinamento tipicamente usa forçamento do professor com entropia cruzada; a inferência depende de estratégias de decodificação (decoding strategies) como busca em feixe.
- Sistemas seq2seq modernos geralmente são Transformers codificador–decodificador, intimamente ligados a Mecânica de Atenção e Codificações Posicionais dentro da mais ampla Arquitetura Transformer.