o problema
Em 2023 a janela de contexto virou número de marketing. Transformers costumavam ser treinados com 512 a 2048 tokens porque atenção custa memória e compute quadráticos no comprimento da sequência; com GPU melhor e truques de posição, apareceram modelos de 4K, 16K, 32K e 100K tokens. O que ninguém tinha medido é se o modelo de fato usa aquilo. A avaliação padrão era perplexidade em corpus web, que premia principalmente predição local e diz pouco sobre acesso preciso a um fato específico enterrado no meio da entrada.
A pergunta não era acadêmica. Todo pipeline de retrieval-augmented generation em produção rodava sobre uma hipótese não testada: recupere mais documentos, cole tudo no prompt, o modelo se vira para achar o que importa. Se essa hipótese for falsa, a decisão de engenharia mais comum da época — aumentar o k do retriever porque o contexto agora cabe — está gastando token, latência e dinheiro para piorar a resposta.
a ideia
O desenho experimental é uma variável de controle, e é aí que está o mérito. Fixe a tarefa, fixe o conjunto de documentos, fixe a resposta desejada. Mude só uma coisa: a posição do documento que contém a resposta dentro do contexto. Reordenar documentos não muda o que o modelo deveria responder. Logo, qualquer variação de acurácia é viés posicional puro, não dificuldade da pergunta.
O raciocínio complementar é igualmente simples: se um modelo usa o contexto longo de forma robusta, a curva de acurácia contra posição tem que ser plana. Não é. É um U.
como funciona
Duas tarefas. A primeira é QA multi-documento sobre o NaturalQuestions-Open, usando as 2.655 queries cuja resposta anotada é um parágrafo. Cada entrada tem uma pergunta e k passagens da Wikipédia de até 100 tokens: exatamente uma contém a resposta, e as k−1 distratoras vêm do Contriever (fine-tuned em MS-MARCO), escolhidas por serem relevantes à query sem conter a resposta. Testam-se 10, 20 e 30 documentos, movendo o documento correto pelos índices. A métrica é se alguma das respostas anotadas aparece na saída.
Os números do GPT-3.5-Turbo com 20 documentos: 75,8% com a resposta no índice 0, 53,8% no índice 9, 63,2% no último. O closed-book — sem documento algum — dá 56,1%, e o oracle, só com a passagem certa, dá 88,3%. Ou seja: a versão com a resposta no meio de vinte documentos rende menos que não passar contexto nenhum.
A segunda tarefa é sintética e serve para isolar recuperação de raciocínio: um JSON com k pares chave-valor, todos UUIDs de 128 bits aleatórios, e a pergunta é o valor de uma chave. Sem semântica, sem confundidor linguístico. Com 75, 140 e 300 pares, Claude-1.3 acerta quase tudo; GPT-3.5-Turbo, GPT-3.5-Turbo (16K) e MPT-30B-Instruct repetem o U, com pior caso em 45,6%. Match exato de token já é difícil no meio.
As ablações fecham o argumento. Arquitetura: Flan-UL2 é robusto dentro dos 2048 tokens de treino (1,9% de diferença entre melhor e pior caso) e passa a desenhar o U acima disso — a hipótese é que o encoder bidirecional contextualiza cada documento sabendo dos posteriores. Query-aware contextualization: repetir a pergunta antes e depois dos dados leva todos os modelos a desempenho quase perfeito no key-value, e muda quase nada no QA. Instruction tuning: o MPT-30B base também faz o U, então não é a formatação do fine-tuning que ensina o modelo a olhar para o começo.
o que isso custou
Isto é diagnóstico, não explicação. Os próprios autores chamam a seção de causas de investigação preliminar: não há conta mecanicista de por que a atenção, que tecnicamente alcança qualquer token com o mesmo custo, se comporta como a serial-position effect da psicologia. A métrica é substring match, generosa por construção. O corpus da Wikipédia é de 2018 e desalinha temporalmente com as anotações do NaturalQuestions — eles rodam um subconjunto sem ambiguidade e chegam à mesma conclusão, mas a ressalva fica. O GPT-4 só entrou num subconjunto de 500 exemplos com 20 documentos, porque a avaliação completa custaria mais de 6.000 dólares; o U aparece lá também, com acurácia absoluta maior.
O limite mais honesto é o do próprio setup: nas tarefas controladas existe exatamente um documento com a resposta, o que não é RAG de verdade. Por isso o estudo de caso final, com retriever-reader real sobre o NaturalQuestions-Open, é a parte mais acionável — o reader satura muito antes do recall do retriever. E o fato de query-aware contextualization consertar a tarefa sintética sem consertar o QA mostra que a correção fácil não é correção.
onde isso aparece hoje
O paper propõe um protocolo de avaliação, e ele pegou: para alegar que um modelo usa contexto longo, mostre que a diferença entre melhor e pior caso posicional é pequena. Varreduras de posição no estilo needle-in-a-haystack viraram teste de fumaça de lançamento de modelo com janela grande.
Do lado da engenharia, as duas recomendações dos autores continuam valendo em qualquer pipeline de RAG: reranking que empurre o documento mais provável para o início do contexto, e truncar a lista recuperada em vez de encher a janela porque ela cabe. E “lost in the middle” virou o nome do fenômeno.