o problema
Um modelo de linguagem pré-treinado guarda fato no próprio peso, e isso dava resultado: o T5-11B respondia 34,5 de exact match no Natural Questions sem consultar nada. O problema é o que vem junto. Esse conhecimento não tem endereço. Não dá para inspecionar de onde saiu a resposta, não dá para corrigir uma entrada errada sem treinar de novo, e quando o modelo não sabe ele inventa com a mesma fluência com que acerta. Trocar o presidente do Peru custa uma rodada de fine-tuning.
A alternativa da época eram arquiteturas de recuperação: busca um trecho da Wikipédia, extrai a resposta dele. Iam melhor em tarefa intensiva em conhecimento, mas eram extrativas — a resposta precisava aparecer literalmente, como span, dentro de um documento recuperado. REALM e ORQA já tinham ligado um retriever diferenciável a um modelo mascarado, mas só nesse regime. Ninguém tinha levado memória não-paramétrica para o cavalo de batalha do NLP, o seq2seq, que gera texto livre em vez de recortar.
a ideia
Pegar dois componentes já pré-treinados — um retriever denso e um gerador seq2seq — plugar um no outro e fazer fine-tuning de ponta a ponta só com pares entrada/saída. Nenhuma supervisão sobre qual documento deveria ter sido recuperado.
O truque probabilístico é tratar o documento como variável latente e marginalizar sobre ele. Em vez de escolher um documento e torcer, o modelo soma a predição condicionada a cada um dos top-k, ponderada pela probabilidade que o retriever deu àquele documento. O gradiente da perda de geração volta pelo peso e ensina o retriever a buscar o que ajuda a gerar. Como os dois lados já chegam carregados de conhecimento, a capacidade de recuperar existe desde o passo zero — não precisa de objetivo especializado de pré-treino.
como funciona
O retriever é o DPR: um bi-encoder BERT-base, um encoder para a query e outro para o documento, relevância é produto interno entre os dois vetores. Achar o top-k é um problema de maximum inner product search, resolvido com FAISS e aproximação HNSW. O corpus é o dump da Wikipédia de dezembro de 2018 fatiado em pedaços disjuntos de 100 palavras: 21 milhões de documentos.
O gerador é o BART-large, 406M de parâmetros. A combinação entrada + documento é a mais burra possível: concatena os dois e manda para o encoder. Toda a sofisticação está em como se marginaliza.
z = top_k(indice, q_encoder(x)) # MIPS sobre 21M chunks, k = 5 ou 10
# RAG-Sequence: um documento para a sequência inteira
p(y|x) = Σ_z p(z|x) · Π_i p(y_i | x, z, y_<i)
# RAG-Token: um documento diferente por token
p(y|x) = Π_i Σ_z p(z|x) · p(y_i | x, z, y_<i)
A diferença aparece na prática. RAG-Token consegue costurar conteúdo de vários documentos numa resposta só — na geração de perguntas de Jeopardy sobre Hemingway, o posterior aponta para o documento de “A Farewell to Arms” enquanto gera esse título e migra para o de “The Sun Also Rises” no seguinte. Curioso: depois do primeiro token de cada título o posterior achata, sinal de que o BART completa o resto de memória.
O treino minimiza a log-verossimilhança marginal negativa com Adam. O encoder de documento e o índice ficam congelados — reindexar 21 milhões de vetores a cada passo, como o REALM faz, sai caro, e os autores não acharam necessário. Só o encoder de query e o BART são atualizados.
o que isso custou
O decoding do RAG-Sequence é feio. Como a verossimilhança não fatora por token, não dá para rodar um beam search só: roda-se um por documento e, para hipóteses que não apareceram no beam de algum documento, um forward pass extra para estimar a probabilidade. Isso é o “Thorough Decoding”. A versão barata assume probabilidade zero fora do beam. Nos testes de QA foram 50 documentos por pergunta para o RAG-Sequence, 15 para o RAG-Token.
O índice pesa. São 15,3 bilhões de valores, cerca de 100 GB de memória, 36 GB comprimidos com FAISS. E o retriever não é neutro: ele foi inicializado com um DPR já treinado com supervisão de recuperação em Natural Questions e TriviaQA, coisa que os próprios autores marcam.
A recuperação aprendida também não ganha sempre. No FEVER, o BM25 supera o retriever denso — claim é entidade pura, casamento de palavra basta. E em geração de história o retriever colapsou: passou a devolver os mesmos documentos para qualquer entrada, o gerador aprendeu a ignorá-los e o RAG ficou equivalente ao BART. A hipótese dos autores é que sequência longa dá gradiente pouco informativo para o retriever. Mecanismo de “null document”, para o caso de nada útil ser recuperado, foi testado e não melhorou nada. No FEVER de 3 classes, o RAG fica 4,3 pontos atrás dos pipelines especializados — que usam supervisão de evidência, que o RAG dispensa.
onde isso aparece hoje
O nome da técnica vem daqui. “RAG” hoje descreve qualquer arquitetura que enfia recuperação antes do gerador, e o código do paper foi para dentro da biblioteca Transformers da HuggingFace ainda em 2020.
O que sobreviveu mais foi a parte menos elegante: quase todo mundo usa o retriever congelado e nenhum treino conjunto — exatamente a ablação que este paper mediu e mostrou custar pontos. O que virou consenso de arquitetura foi o hot-swap de índice: separar o que o sistema sabe do que o sistema aprendeu, para poder trocar o primeiro sem tocar no segundo.