Quando ripenso all'articolo su DocFinQA — dove i pipeline basati su recupero e gli LLM a contesto lungo fallivano entrambi su documenti SEC con contesti di 123K token — la domanda che avevo lasciato in sospeso era perché. Questo articolo di Liu et al. (TACL 2024, arXiv:2307.03172) è la risposta meccanicistica, e si scopre che la modalità di fallimento è più semplice e più ostinata di quanto mi sarei aspettato.
L'articolo
"Lost in the Middle: How Language Models Use Long Contexts" di Nelson F. Liu, Kevin Lin, John Hewitt, Ashwin Paranjape, Michele Bevilacqua, Fabio Petroni e Percy Liang esegue due esperimenti mirati: risposta a domande multi-documento su NaturalQuestions-Open (con 10, 20 e 30 documenti recuperati) e recupero sintetico chiave-valore (con 75, 140 e 300 coppie). In ogni esperimento variano sistematicamente dove si trova il documento rilevante o la coppia chiave-valore all'interno del contesto di input — inizio, mezzo o fine — mantenendo tutto il resto invariato. Il risultato è netto: le prestazioni tracciano una curva a forma di U con il punto più basso al centro del contesto, e la curva appare in ogni modello testato.
Idee chiave
- La forma a U è reale e costante. Nello scenario di QA con 20 documenti, le prestazioni alla prima posizione erano circa del 75% e degradavano fino a circa il 55% alla posizione 10 prima di recuperare a circa il 72% alla posizione 20 — un divario di circa 20 punti tra i bordi e il centro.
- Tutti i modelli seguono lo stesso schema. I modelli testati spaziano tra chiusi e aperti, piccoli e grandi: GPT-3.5-Turbo (4K e 16K), GPT-4, Claude-1.3 (8K e 100K), MPT-30B-Instruct e LongChat-13B. La curva a U è apparsa in ognuno di essi, inclusi modelli esplicitamente commercializzati per finestre di contesto estese.
- Nemmeno Claude-1.3-100K è immune. La variante con contesto 100K si è comportata come le altre. Una finestra di contesto lunga non significa che il modello vi presti attenzione in modo uniforme.
- Il baseline a libro chiuso stabilisce un limite preoccupante. GPT-3.5-Turbo senza alcun documento ha risposto correttamente al 56,1% delle NaturalQuestions; con accesso oracle al solo documento rilevante ha raggiunto l'88,3%. Ma nelle peggiori posizioni centrali nello scenario con 20 documenti, le prestazioni sono scese al di sotto del baseline a libro chiuso — il che significa che aggiungere più contesto era attivamente dannoso.
- I modelli encoder-decoder (Flan-T5-XXL, Flan-UL2) sono più robusti entro la loro lunghezza di addestramento, ma regrediscono quando i contesti la superano. La differenza architetturale è importante, ma entrambi degradano su larga scala.
- La causa principale è il mascheramento dell'attenzione causale. Ogni token può solo prestare attenzione ai token precedenti, quindi le posizioni all'inizio accumulano più peso di attenzione totale attraverso il modello rispetto alle posizioni nel mezzo. Gli effetti di recenza trascinano verso l'alto anche la fine del contesto.
Cosa tiene — e cosa no
Il disegno sperimentale qui è ammirevolmente pulito: la posizione è l'unica variabile manipolata, i compiti sono benchmark standard e il risultato si replica in un'ampia gamma di famiglie di modelli. Non ho nulla da obiettare sul risultato centrale.
Quello che trovo meno convincente è l'inquadramento del compito di recupero chiave-valore come proxy significativo per l'uso reale. Le ricerche UUID-a-UUID verificano se un modello può ripetere a pappagallo una stringa memorizzata, non se può fare qualcosa che richieda ragionamento. La curva a U appare anche lì, il che rafforza l'affermazione del bias posizionale, ma significa anche che l'articolo confonde due fenomeni diversi: l'accuratezza del recupero su compiti di corrispondenza esatta e la qualità del ragionamento su passaggi rilevanti. Vorrei sapere se la forma a U peggiora o migliora quando il documento rilevante richiede inferenze a più passaggi prima della risposta finale, non solo una regurgitazione letterale.
C'è anche una lacuna che gli autori riconoscono in gran parte ma non colmano: non testano mai se il fine-tuning istruttivo o RLHF cambiano la sensibilità alla posizione, ma solo se lo fa una finestra di contesto più grande. Dato che la causa principale è architetturale (mascheramento causale), sospetto che il fine-tuning istruttivo non lo risolverà, ma l'articolo non lo conferma.
Perché questo è importante per l'AI finanziaria
Questo articolo fornisce la spiegazione meccanicistica per un pattern empirico che continuo a incontrare. DocFinQA è crollato su lunghi documenti SEC. IRCoT e FLARE recuperano entrambi più passaggi e li concatenano prima di ragionare. Ogni pipeline RAG che ho esaminato in un contesto finanziario scarica sequenzialmente i passaggi recuperati nel prompt e spera che il modello presti attenzione a quello giusto.
L'implicazione per gli agenti Beancount è concreta. Se un agente recupera dieci voci di registro come contesto, le voci nelle posizioni 3–7 sono a più alto rischio di essere ignorate o di generare allucinazioni. Questo non è un problema di recupero — è un problema di presentazione. Da questo articolo derivano due risposte: o mettere le voci più diagnostiche all'inizio (e alla fine), o non concatenare affatto e ragionare su un passaggio alla volta.
Il risultato complica anche la narrazione degli LLM a contesto lungo. Ogni trimestre un nuovo modello annuncia una finestra di contesto più grande. Questo articolo dice che la finestra essere lunga non significa quello che pensi se stai distribuendo uniformemente le prove al suo interno. Un modello con contesto 128K che seppellisce la transazione rilevante alla posizione 60K è peggiore di un modello con contesto 4K che recupera precisamente il passaggio giusto.
Per la sicurezza di scrittura, le implicazioni sono scomode: se al modello viene chiesto di riassumere una sessione di registro e la regola politica pertinente "non pubblicare questa transazione" appare nel mezzo di un lungo prompt di sistema, il modello potrebbe agire come se non avesse mai letto quella regola.
Cosa leggere dopo
- "Found in the Middle: How Language Models Use Long Contexts Better via Plug-and-Play Positional Encoding" (Zhang et al., arXiv:2403.04797) — propone la codifica posizionale multiscala (Ms-PoE) come soluzione senza addestramento tramite il ridimensionamento RoPE; afferma un miglioramento fino a 3,8 punti su Zero-SCROLLS, affrontando direttamente la curva a U.
- "Never Lost in the Middle: Mastering Long-Context Question Answering with Position-Agnostic Decompositional Training" (arXiv:2311.09198) — adotta l'approccio opposto e addestra il modello ad essere esplicitamente agnostico rispetto alla posizione; il confronto con Ms-PoE chiarisce se il fine-tuning o i trucchi a tempo di inferenza siano la leva migliore.
- "Mitigate Position Bias in Large Language Models via Scaling a Single Dimension" (arXiv:2406.02536) — identifica la specifica dimensione degli stati nascosti posizionali responsabile del bias e la ridimensiona senza riaddestramento; la soluzione più chirurgica proposta finora, rilevante per distribuire modelli esistenti senza riaddestramento.