Paul Gomes
· 7 min de leitura

Janelas de contexto de 1 milhão de tokens: as técnicas por trás

Como modelos chegam a janelas de 1 milhão de tokens: RoPE, atenção esparsa e o problema real de manter o foco ao longo do contexto.

Paul Gomes

Paul Gomes

Autor

Quando um provedor anuncia uma janela de contexto de 1 milhão de tokens, o marketing sugere que o modelo simplesmente “leu” um livro inteiro. A engenharia conta outra história. O número grande esconde três problemas distintos que precisaram ser resolvidos em camadas diferentes da arquitetura, e nenhum deles é o mesmo problema. Um é geométrico: como dizer ao modelo onde cada token está. Outro é computacional: o custo da atenção cresce de forma que torna um milhão de tokens economicamente absurdo se você não trapacear. E o terceiro é o mais teimoso de todos: mesmo quando o modelo consegue ler tudo, ele não necessariamente presta atenção no que importa. Vale separar as três coisas, porque a indústria costuma vendê-las como uma só.

O Transformer nasceu sem noção de ordem

O ponto de partida é contraintuitivo. O mecanismo de atenção, o coração do Transformer, é permutacionalmente invariante. Se você embaralhar a ordem das palavras na entrada, a operação de atenção pura produz o mesmo conjunto de representações, só que reordenado. Ela compara todos os tokens com todos os tokens e não tem, por construção, nenhuma ideia de quem veio antes ou depois. Para um modelo de linguagem isso é fatal: “o cachorro mordeu o homem” e “o homem mordeu o cachorro” têm exatamente os mesmos tokens.

A ordem, portanto, precisa ser injetada de fora. As primeiras abordagens somavam ao embedding de cada token um vetor que codificava sua posição absoluta. Funciona, mas tem um vício estrutural: a posição vira parte do conteúdo. O modelo aprende a associar “estar na posição 512” a um padrão específico, e quando você o expõe a posições que nunca viu no treino, ele não sabe o que fazer. É aqui que o problema da janela de contexto começa de verdade. Estender o contexto não é só uma questão de memória. É uma questão de o modelo saber interpretar coordenadas que estão fora do intervalo em que foi treinado.

RoPE: posição como rotação

RoPE, ou Rotary Position Embedding, é a resposta que praticamente venceu a briga, e a razão é elegante. Em vez de somar um vetor de posição ao conteúdo, RoPE gira os vetores de consulta e chave por um ângulo proporcional à posição do token. Cada par de dimensões do vetor é tratado como um ponto num plano, e esse ponto é rotacionado. Um token na posição 10 recebe uma rotação maior que um na posição 5, e frequências diferentes giram em velocidades diferentes, das mais rápidas às mais lentas.

O truque bonito está no que acontece quando dois tokens são comparados pela atenção. O produto interno entre uma consulta e uma chave, depois de ambas rotacionadas, depende apenas da diferença entre suas posições, não das posições absolutas. Ou seja: RoPE codifica posição absoluta na entrada mas faz a atenção enxergar distância relativa. Isso é exatamente o que a linguagem pede. O que importa entre duas palavras é quão longe elas estão uma da outra, não em que casa da fila cada uma se sentou.

E aqui mora o gargalo das janelas gigantes. As rotações usam frequências fixas. Quando você treina até certo comprimento e depois pede ao modelo para processar dez ou vinte vezes mais tokens, os ângulos das frequências mais altas dão voltas completas em regiões que o modelo nunca observou. Ele fica desorientado. As técnicas de extensão de contexto atacam justamente isso. A ideia geral, presente em métodos como interpolação de posição e nas famílias derivadas do NTK, é reescalonar as frequências de RoPE para que o intervalo de treino seja “esticado” e cubra o novo comprimento. Você comprime as posições no espaço angular em vez de mandar o modelo extrapolar às cegas. Não é mágica: costuma exigir um ajuste fino em contextos longos para o modelo reaprender a usar as distâncias reescaladas. Mas explica por que uma janela de 1 milhão raramente é fruto de um treino do zero nesse comprimento, e sim de uma extensão cuidadosa de um modelo treinado em algo bem menor.

A conta que não fecha: atenção quadrática

Resolvida a geometria, sobra a aritmética. A atenção clássica compara cada token com todos os outros. Isso significa que o custo cresce com o quadrado do número de tokens. Dobrar o contexto quadruplica o trabalho. Multiplicar por mil o comprimento multiplica por um milhão a conta da matriz de atenção. É por isso que, por muito tempo, contexto longo foi sinônimo de inviável.

Há duas frentes de ataque, e é importante não confundi-las. A primeira é tornar a atenção densa mais barata sem mudar seu resultado matemático. É o território de técnicas como FlashAttention, que não aproxima nada: ela reorganiza o cálculo para que a matriz de atenção nunca seja inteiramente materializada na memória, processando-a em blocos e aproveitando melhor a hierarquia de memória da GPU. O modelo produz o mesmo resultado, mas paga menos em movimentação de dados, que é o verdadeiro gargalo do hardware moderno. Isso empurra o teto do que é praticável, embora não altere a natureza quadrática do problema.

A segunda frente é a atenção esparsa, e aqui a aposta é filosófica: nem todo token precisa olhar para todos os outros. A maioria das relações relevantes é local, com algumas dependências de longo alcance esparsas no meio. Então você desenha padrões de atenção que combinam uma janela local, alguns tokens globais que todo mundo enxerga, e às vezes conexões espaçadas de forma regular. O custo deixa de ser quadrático e passa a crescer de forma quase linear com o comprimento. O preço é que você está apostando em quais conexões descartar. Se uma dependência importante cai fora do padrão esparso escolhido, o modelo simplesmente não a vê. Por isso arquiteturas de contexto muito longo tendem a misturar camadas densas e esparsas, em vez de abandonar a atenção completa de vez.

Ler não é prestar atenção

Suponha que os dois primeiros problemas estejam resolvidos. O modelo sabe onde cada token está e consegue processar um milhão deles sem quebrar o orçamento. Ainda falta o problema mais desconfortável, porque é comportamental e não arquitetural. Um modelo com janela enorme não distribui atenção de forma uniforme por ela. A observação empírica, hoje bastante documentada na literatura, é que o desempenho ao recuperar uma informação depende de onde ela está no contexto. O que aparece no começo e no fim tende a ser bem aproveitado. O que está enterrado no meio de uma janela muito longa é frequentemente ignorado, mesmo estando ali, íntegro, disponível.

Some-se a isso o fenômeno dos chamados “sumidouros de atenção”, onde uma parcela desproporcional do peso da atenção se acumula nos primeiros tokens da sequência, quase como um lugar para onde o modelo escoa massa de probabilidade quando não tem para onde olhar. O efeito prático é que a capacidade nominal e a capacidade útil da janela de contexto divergem. Ter um milhão de tokens de espaço não garante um milhão de tokens de raciocínio efetivo. É a diferença entre a memória que existe e a memória que é consultada.

Esse é o ponto que os benchmarks de “encontrar a agulha no palheiro” tentam medir, e é onde a diferença entre modelos aparece com mais clareza. Um teste sintético de recuperação de um fato isolado é o piso, não o teto. O desafio real é o raciocínio que precisa costurar várias informações espalhadas por toda a extensão da janela, e é aí que a atenção que se dispersa no meio cobra seu preço.

A posição do autor

Janela de contexto virou métrica de vaidade. O número no material de imprensa mede capacidade teórica de ingestão, não competência de uso, e tratar os dois como sinônimos é o erro que separa quem entende a tecnologia de quem consome o marketing. RoPE e a atenção eficiente são conquistas de engenharia genuínas, resolveram a geometria e a aritmética de forma engenhosa, e merecem o crédito. Mas o problema difícil, o de manter foco distribuído por uma extensão imensa, é de natureza diferente e permanece parcialmente em aberto. Minha recomendação prática é ceticismo calibrado: trate a janela anunciada como o tamanho do galpão, nunca como garantia de que tudo que está lá dentro será usado. Encha o galpão com o que importa, coloque o essencial onde o modelo de fato olha, e não confunda o fato de a informação estar disponível com o fato de ela ser considerada. Contexto longo é uma ferramenta poderosa e mal compreendida, e o próximo salto de qualidade não virá de mais um zero na janela. Virá de arquiteturas que aprendam a olhar para o meio dela.