Perdido no Meio: Viés de Posição em LLMs e seu Impacto na IA Financeira
Quando olho para trás para a entrada do DocFinQA — onde os pipelines baseados em recuperação e os LLMs de contexto longo colapsaram em relatórios da SEC com contextos de 123 mil tokens — a pergunta que deixei no ar foi por quê. Este artigo de Liu et al. (TACL 2024, arXiv:2307.03172) é a resposta mecânica, e acontece que o modo de falha é mais simples e mais persistente do que eu esperaria.
O artigo
"Lost in the Middle: How Language Models Use Long Contexts" por Nelson F. Liu, Kevin Lin, John Hewitt, Ashwin Paranjape, Michele Bevilacqua, Fabio Petroni e Percy Liang realiza dois experimentos direcionados: resposta a perguntas de múltiplos documentos sobre NaturalQuestions-Open (com 10, 20 e 30 documentos recuperados) e recuperação sintética de chave-valor (com 75, 140 e 300 pares). Em cada experimento, eles variam sistematicamente onde o documento relevante ou o par chave-valor se encontra dentro do contexto de entrada — início, meio ou fim — mantendo todo o resto fixo. A descoberta é clara: o desempenho traça uma curva em forma de U com o vale no meio do contexto, e a curva aparece em todos os modelos testados.
Ideias principais
- O formato em U é real e consistente. Na configuração de QA com 20 documentos, o desempenho na primeira posição era de aproximadamente 75% e degradava para cerca de 55% na posição 10, antes de se recuperar para cerca de 72% na posição 20 — uma diferença de ~20 pontos entre as extremidades e o centro.
- Todos os modelos seguem o mesmo padrão. Os modelos testados abrangem fechados e abertos, pequenos e grandes: GPT-3.5-Turbo (4K e 16K), GPT-4, Claude-1.3 (8K e 100K), MPT-30B-Instruct e LongChat-13B. A curva em U apareceu em cada um deles, incluindo modelos comercializados explicitamente por suas janelas de contexto estendidas.
- Nem mesmo o Claude-1.3-100K está imune. A variante de contexto de 100K comportou-se como as outras. Uma janela de contexto longa não significa que o modelo realmente preste atenção de forma uniforme em toda a sua extensão.
- A linha de base de livro fechado define um piso preocupante. O GPT-3.5-Turbo sem nenhum documento respondeu 56,1% do NaturalQuestions corretamente; com acesso direto (oracle) a apenas o documento relevante, atingiu 88,3%. Mas nas piores posições centrais na configuração de 20 documentos, o desempenho caiu abaixo da linha de base de livro fechado — o que significa que adicionar mais contexto foi ativamente prejudicial.
- Modelos encoder-decoder (Flan-T5-XXL, Flan-UL2) são mais robustos dentro do seu comprimento de treinamento, mas revertem quando os contextos o excedem. A diferença arquitetônica importa, mas ambos ainda degradam em escala.
- A causa raiz é o mascaramento de atenção causal. Cada token só pode prestar atenção aos tokens precedentes, portanto, as posições logo no início acumulam mais peso de atenção total em todo o modelo do que as posições no meio. Efeitos de recência elevam o final do contexto também.
O que se sustenta — e o que não se sustenta
O design experimental aqui é admiravelmente limpo: a posição é a única variável manipulada, as tarefas são benchmarks padrão e a descoberta se replica em uma ampla gama de famílias de modelos. Não tenho objeções ao resultado principal.
O que considero menos convincente é o enquadramento da tarefa de recuperação de chave-valor como um proxy significativo para o uso real. Buscas de UUID para UUID testam se um modelo pode repetir uma string memorizada, não se ele pode fazer algo que exija raciocínio. A curva em U também aparece ali, o que fortalece a alegação de viés de posição, mas também significa que o artigo está fundindo dois fenômenos diferentes: precisão de recuperação em tarefas de correspondência exata e qualidade de raciocínio sobre passagens relevantes. Eu gostaria de saber se o formato em U piora ou melhora quando o documento relevante exige inferência em várias etapas antes da resposta final, e não apenas a repetição literal.
Há também uma lacuna que os autores reconhecem em grande parte, mas não fecham: eles nunca testam se o ajuste fino de instruções ou RLHF altera a sensibilidade à posição, apenas se uma janela de contexto maior o faz. Dado que a causa raiz é arquitetônica (mascaramento causal), suspeito que o ajuste de instruções não resolverá isso, mas o artigo não confirma isso.
Por que isso importa para a IA financeira
Este artigo fornece a explicação mecânica para um padrão empírico que encontro constantemente. O DocFinQA colapsou em relatórios longos da SEC. IRCoT e FLARE recuperam múltiplas passagens e as concatenam antes do raciocínio. Todo pipeline de RAG que analisei em um contexto financeiro despeja passagens recuperadas sequencialmente no prompt e espera que o modelo preste atenção na correta.
A implicação para os agentes Beancount é concreta. Se um agente recupera dez entradas de livro-razão como contexto, as entradas nas posições 3 a 7 correm o maior risco de serem ignoradas ou gerarem alucinações. Isso não é um problema de recuperação — é um problema de apresentação. Duas respostas seguem a partir deste artigo: ou colocar as entradas mais diagnosticamente relevantes primeiro (e por último), ou não concatenar de forma alguma e raciocinar sobre uma passagem de cada vez.
A descoberta também complica a narrativa do LLM de contexto longo. A cada trimestre, um novo modelo anuncia uma janela de contexto maior. Este artigo diz que a janela ser longa não significa o que você pensa se estiver distribuindo as evidências uniformemente nela. Um modelo de contexto de 128K que enterra a transação relevante na posição 60K é pior do que um modelo de contexto de 4K que recupera precisamente a passagem correta.
Para a segurança de gravação (write-back safety), as implicações são desconfortáveis: se o modelo for solicitado a resumir uma sessão de livro-razão e a regra de política relevante "não postar esta transação" aparecer no meio de um prompt de sistema longo, o modelo pode agir como se nunca tivesse lido essa regra.
O que ler a seguir
- "Found in the Middle: How Language Models Use Long Contexts Better via Plug-and-Play Positional Encoding" (Zhang et al., arXiv:2403.04797) — propõe a Codificação Posicional de Múltiplas Escalas (Ms-PoE) como uma correção sem necessidade de treinamento via escalonamento RoPE; reivindica uma melhoria de até 3,8 pontos no Zero-SCROLLS, abordando diretamente a curva em U.
- "Never Lost in the Middle: Mastering Long-Context Question Answering with Position-Agnostic Decompositional Training" (arXiv:2311.09198) — adota a abordagem oposta e treina o modelo para ser explicitamente agnóstico à posição; a comparação com Ms-PoE esclarece se o ajuste fino ou truques em tempo de inferência são a melhor alavanca.
- "Mitigate Position Bias in Large Language Models via Scaling a Single Dimension" (arXiv:2406.02536) — identifica a dimensão específica dos estados ocultos posicionais responsável pelo viés e a escala sem retreinamento; a correção mais cirúrgica proposta até agora, relevante para a implantação de modelos existentes sem retreinar.
