Lost in the Middle : Pourquoi les modèles de langage oublient et comment y remédier

SAMI
August 6, 2026 22 mins to read
Share

Vous avez récupéré les bons documents. Vous les avez tous mis dans le prompt. Le modèle est quand même passé à côté de la réponse. Cet article explique le mécanisme derrière cet échec, et ce qu’il faut faire.

En résumé : un transformeur ne traite pas toutes les positions de son entrée de la même façon. Le rappel d’information suit une courbe en U. Ce qui se trouve au début et à la fin du contexte est bien exploité ; ce qui se trouve au milieu l’est mal. Le phénomène a été nommé en 2023, il est architectural et non cosmétique, et l’agrandissement des fenêtres de contexte ne l’a pas supprimé.

Ce que le phénomène est exactement

Liu et al. l’ont mesuré directement. Ils ont construit des prompts de question-réponse multi-documents où un seul document contenait la réponse, puis ont déplacé ce document à différentes positions en mesurant la précision. Ils ont aussi testé une tâche de récupération clé-valeur sur de longues entrées JSON. La précision est maximale quand la réponse se trouve au début ou à la fin du contexte, et chute nettement quand elle se trouve au milieu. Le motif persiste même sur des modèles conçus explicitement pour le contexte long, et la précision globale baisse quand l’entrée s’allonge.

D’où la forme du problème : un U, pas une ligne plate.

Deux modes de défaillance sont régulièrement confondus, et les séparer facilite beaucoup le diagnostic :

Mode de défaillanceCe qui varieCe que vous observez
Dégradation positionnelle (« lost in the middle »)La position de l’information utileLa précision dépend de la position, selon une courbe en U
Dégradation par la longueur (« context rot »)Le volume de texte autour de l’information utileLa précision baisse quand l’entrée grandit, même bien positionnée

Les deux se cumulent. Un prompt long a un milieu plus large et plus de distracteurs.

Pourquoi cela se produit

Trois mécanismes d’un transformeur décodeur standard tirent dans des directions différentes. La courbe en U est le résultat de leur combinaison.

1. Le masque causal crée un biais de primauté

Un modèle décodeur utilise un masque causal : chaque token n’attend que lui-même et les tokens antérieurs. Le flux d’information est donc asymétrique. Les tokens du début sont visibles par tout ce qui suit : leurs représentations sont relues et remixées à chaque position ultérieure et à chaque couche. Les tokens de fin ne sont visibles par presque rien.

Des travaux théoriques récents modélisent les masques d’attention comme des graphes orientés et le démontrent formellement : le masquage causal biaise intrinsèquement l’attention vers les positions antérieures, parce que les tokens des couches profondes finissent par attendre des représentations de plus en plus contextualisées des tokens du début. Le début de votre prompt est structurellement privilégié, avant même tout entraînement.

2. Les puits d’attention absorbent la masse de probabilité sur les premiers tokens

Les poids d’attention softmax doivent sommer à 1. Quand une tête n’a rien de pertinent à regarder, elle doit quand même placer cette masse quelque part. Empiriquement, les modèles la déversent sur les tout premiers tokens — le token de début de séquence en particulier — que ceux-ci portent du sens ou non. Xiao et al. ont nommé ce phénomène attention sink et montré qu’il est assez fort pour que la suppression des premiers tokens d’un cache KV à fenêtre glissante détruise la qualité de génération, alors qu’en conserver quatre suffit à la restaurer.

Conséquence pratique : une part mesurable du budget d’attention de chaque tête est dépensée sur des tokens qui ne concernent pas votre tâche. Des travaux ultérieurs ont aussi observé ce comportement de puits sur des tokens peu informatifs (ponctuation, sauts de ligne) au milieu et en fin d’entrée, où l’effet n’est pas bénin.

3. Les encodages positionnels rotatifs décroissent avec la distance

RoPE encode la position relative en faisant tourner les vecteurs de requête et de clé. Quand la distance entre deux positions augmente, les déphasages s’accumulent, les composantes tournées se désalignent, et la magnitude de l’attention décroît. C’est un biais inductif utile pour la langue — les tokens proches comptent généralement plus — mais sur un prompt long il devient un biais de récence qui étouffe tout ce qui est éloigné de la position courante.

La combinaison des trois

Le masque causal tire l’attention vers le début. La décroissance de RoPE la tire vers le récent. Ce qui se trouve au milieu n’a aucun de ces deux ancrages. L’analyse de Hsieh et al. confirme que le motif d’attention résultant est en U par rapport à la position et largement indépendant de la pertinence : les documents du milieu perdent de l’attention même quand ils contiennent la réponse, et même quand l’ordre des documents est mélangé aléatoirement.

Un dernier facteur s’ajoute par-dessus l’architecture. Une entrée plus longue signifie plus de distracteurs en compétition pour le même budget d’attention fixe — et plus ces distracteurs sont sémantiquement proches de la question, plus la dégradation est forte.

Les preuves ne datent pas seulement de 2023

Trois travaux comptent ici.

NoLiMa (ICML 2025) a supprimé le raccourci qui flatte la plupart des tests needle-in-a-haystack. Dans un NIAH classique, la question et l’aiguille partagent du vocabulaire : le modèle peut réussir par simple correspondance littérale. NoLiMa construit des aiguilles à recouvrement lexical minimal, obligeant à une véritable association sémantique. Sur des modèles annonçant 128K et plus, les performances en contexte court restent solides mais se dégradent fortement avec la longueur : à 32K, la plupart des modèles testés tombent sous la moitié de leur score de référence, et GPT-4o passe de 99,3 % à 69,7 %. Ni le chain-of-thought ni les modes de raisonnement ne rattrapent la chute.

Le rapport Context Rot de Chroma (2025) a évalué 18 modèles de pointe sur des tâches où la difficulté était délibérément maintenue constante pendant que la longueur d’entrée variait. Tous se dégradent. La dégradation est non uniforme selon les familles de modèles et dépend de la similarité entre l’aiguille et la question, de la présence de distracteurs, et même de la structure du texte environnant.

HELMET (2024) a étendu l’analyse positionnelle jusqu’à 128K tokens sur six profondeurs réparties uniformément, et observe des modèles qui privilégient globalement le contexte le plus récent tout en peinant sur le milieu et le début.

Lus ensemble : la courbe en U est un effet de position, le context rot est un effet de longueur, et livrer une fenêtre d’un million de tokens ne règle ni l’un ni l’autre. Une fenêtre plus grande vous donne surtout plus de milieu où perdre des choses.

Que faire

Classé approximativement par effet de levier obtenu par unité d’effort.

  1. Envoyer moins. L’intervention la plus fiable reste un prompt plus court et plus propre. Traitez votre contexte utile comme une fraction de la fenêtre annoncée, pas comme un objectif à remplir. Si la recherche renvoie 40 fragments et que 6 sont pertinents, envoyez-en 6.
  2. Placer l’essentiel aux extrémités. Les instructions, la question et les contraintes de format vont tout au début ou tout à la fin — idéalement les deux, avec l’instruction répétée après les documents. Réservez le milieu à ce que le modèle n’a besoin que de survoler.
  3. Ordonner délibérément les documents récupérés. Ne collez pas la sortie brute de votre base vectorielle dans l’ordre de similarité. Reclassez, puis placez les meilleurs candidats en tête et en queue du bloc, les plus faibles à l’intérieur. Cela ne coûte rien et exploite directement la courbe.
  4. Rendre les frontières explicites. Encadrez chaque document par un délimiteur avec identifiant — des balises de style XML fonctionnent bien — pour que le modèle puisse désigner une source précise plutôt qu’une position. Demandez-lui ensuite de citer le passage utilisé avant de répondre. Ancrer la réponse dans une étape de citation explicite réduit la dépendance au motif d’attention par défaut.
  5. Compacter agressivement dans les boucles d’agent. Un agent accumule des sorties d’outils, des tentatives ratées et du bruit d’exploration. Ce bruit, c’est de la longueur d’entrée — donc le second mode de défaillance. Résumez les sous-tâches terminées, supprimez les branches mortes, ne réinjectez que l’ensemble de travail utile.
  6. Mesurer votre propre contexte effectif. Prenez une tâche réelle de votre système, insérez la réponse à 0 %, 25 %, 50 %, 75 % et 100 % de profondeur, et exécutez chaque position 20 fois sur plusieurs longueurs de contexte. Vous obtiendrez votre propre courbe en U, pour votre modèle et vos données : cela vaut plus que n’importe quel chiffre de benchmark publié.

Des atténuations existent côté recherche, mais elles sont rarement exposées dans les API de production. La calibration d’attention — estimer la composante positionnelle de l’attention puis la soustraire — a permis de récupérer jusqu’à 15 points de pourcentage sur des tâches RAG en aval dans les travaux Found in the Middle. Le rééchelonnement des encodages positionnels et les schémas hybrides RoPE/NoPE attaquent directement le terme de décroissance. Si vous servez vos propres poids, ces pistes sont ouvertes. Si vous appelez une API, vos leviers sont la structure et la recherche d’information.

Ce qui ne règle pas le problème

  • Une fenêtre de contexte plus grande. La contrainte n’est pas la capacité, c’est le rapport signal/bruit.
  • Demander au modèle d’être attentif. Le biais positionnel est structurel, pas une affaire de suivi d’instruction.
  • Un score needle-in-a-haystack isolé. Si l’aiguille partage du vocabulaire avec la question, vous mesurez de la correspondance littérale, pas de la récupération en conditions réalistes.

À retenir

L’attention est un budget, pas un projecteur. Le masque causal en dépense une part sur le début, la décroissance de RoPE une part sur la fin, les puits d’attention une part sur rien du tout — et c’est le reste que vos documents du milieu se disputent. Concevez le prompt autour de ce budget, pas autour de la taille de fenêtre affichée sur la page tarifaire.

Glossaire

Regroupé par thème, alphabétique à l’intérieur de chaque groupe. Les termes anglais consacrés sont indiqués entre parenthèses : ce sont ceux que vous rencontrerez dans la littérature.

Architecture et mécanique du modèle

  • Attention — L’opération qui permet à un token d’aller chercher de l’information dans les autres tokens. Chaque token émet une requête, chaque token expose une clé et une valeur ; les similarités requête-clé deviennent des poids, et la sortie est la moyenne pondérée des valeurs. « Attendre » un token signifie lui attribuer un poids non négligeable.
  • Budget d’attention — Formulation informelle mais utile : puisque les poids d’attention somment à un total fixe par tête, l’attention est une quantité finie à répartir, pas un projecteur orientable partout à la fois. Ce qui est dépensé sur des tokens puits ou des distracteurs n’est plus disponible pour le contenu qui vous intéresse.
  • Couche (layer) — Un bloc de la pile. Le texte traverse toutes les couches dans l’ordre : « à chaque couche » signifie donc qu’un effet se compose des dizaines de fois dans un grand modèle.
  • Masque causal (causal mask) — La contrainte, dans un modèle décodeur, selon laquelle un token ne peut attendre que lui-même et les positions antérieures. C’est ce qui rend la génération autorégressive possible, et aussi ce qui rend le flux d’information asymétrique dans la séquence.
  • Poids d’attention — Les scores normalisés produits par le softmax sur les similarités requête-clé. Ils quantifient la contribution de chaque token source à la représentation mise à jour d’un token cible.
  • Poids du modèle (weights) — Les paramètres appris. « Servir ses propres poids » signifie exécuter le modèle soi-même et pouvoir modifier les internes de l’inférence, comme les scores d’attention — impossible via une API hébergée.
  • Représentation contextualisée — Le vecteur qu’une couche produit pour un token après que celui-ci a intégré l’information des tokens qu’il a attendus. Les couches profondes contiennent des représentations ayant absorbé plus de contexte environnant : d’où l’influence croissante des tokens du début avec la profondeur, puisque les positions ultérieures attendent des résumés de plus en plus riches de ceux-ci.
  • Requête, clé, valeur (query, key, value, QKV) — Trois projections linéaires apprises de la représentation de chaque token. La requête interroge, la clé se signale, la valeur porte la charge utile qui sera mélangée.
  • Softmax — La fonction qui transforme les scores d’attention bruts en distribution de probabilité : exponentielle, puis division par la somme. La propriété décisive ici est la normalisation — les poids sont forcés de sommer à 1, donc une tête ne peut pas refuser d’attendre quoi que ce soit.
  • Tête d’attention (attention head) — Un calcul d’attention indépendant à l’intérieur d’une couche. Une couche exécute de nombreuses têtes en parallèle, chacune avec ses propres projections apprises, ce qui les amène à se spécialiser sur des relations différentes (syntaxe, coréférence, position, etc.).
  • Token — L’unité que le modèle lit réellement : un mot, un fragment de mot ou un signe de ponctuation produit par le tokenizer. Les longueurs de contexte et les tarifs sont exprimés en tokens, pas en mots ; en français, comptez environ 0,6 à 0,7 mot par token.
  • Token BOS (beginning-of-sequence) — Token spécial ajouté au début de l’entrée pour marquer le départ de la séquence. Il ne porte aucun contenu de tâche, ce qui rend sa part d’attention démesurée d’autant plus remarquable.
  • Transformeur décodeur (decoder-only transformer) — L’architecture de pratiquement tous les modèles génératifs actuels : une pile de couches combinant chacune une auto-attention à masque causal et un réseau feed-forward. « Décodeur seul » la distingue des architectures encodeur-décodeur utilisées en traduction.
  • Biais inductif (inductive bias) — Préférence intégrée qui pousse un modèle à privilégier certaines hypothèses avant même de voir des données. La décroissance avec la distance dans un encodage positionnel est un biais inductif en faveur des dépendances locales : utile pour la langue ordinaire, nuisible quand la dépendance utile s’étend sur 40 000 tokens.
  • Tête et queue d’un bloc — Dans les conseils de construction de prompt : le premier et le dernier élément d’une liste de documents. Ce sont les positions que la courbe en U récompense.

Position et encodage positionnel

  • Biais de primauté (primacy bias) — Meilleure exploitation de l’information située près du début de l’entrée.
  • Biais de récence (recency bias) — Meilleure exploitation de l’information située près de la fin de l’entrée, au plus près de la position en cours de génération.
  • Biais positionnel (position bias) — Toute dépendance systématique du comportement du modèle à l’endroit où se trouve le contenu plutôt qu’à ce qu’il dit. Le lost in the middle et les puits d’attention en sont deux manifestations.
  • Contexte effectif (effective context length) — La plus grande entrée sur laquelle un modèle reste acceptable, par opposition à la plus grande entrée qu’il accepte. NoLiMa l’opérationnalise comme la longueur maximale où le score reste au-dessus de 85 % de la référence en contexte court ; mesurés ainsi, les contextes effectifs sont très inférieurs aux fenêtres annoncées.
  • Courbe en U — Le tracé caractéristique de la précision (ou de l’attention moyenne) en fonction de la position de l’information utile : haute aux deux extrémités, basse au milieu.
  • Décroissance à longue portée (long-term decay) — Propriété démontrable pour RoPE standard : la borne supérieure de la magnitude d’attention diminue quand la distance relative augmente. C’est l’énoncé formel de « les tokens éloignés reçoivent moins d’attention, indépendamment de leur pertinence ».
  • Déphasage (phase shift) — Dans RoPE, la position est appliquée comme une rotation d’un angle proportionnel à l’indice ; le déphasage est cet angle. Sur de longues distances, les déphasages accumulés sur les composantes fréquentielles interfèrent et s’annulent : c’est le mécanisme de la décroissance à longue portée.
  • Encodage positionnel — Le mécanisme qui informe l’attention de l’ordre, puisque l’opération d’attention est en elle-même invariante par permutation. Les approches incluent les plongements absolus appris, les biais relatifs additifs comme ALiBi, et les plongements rotatifs.
  • NoPE (no positional encoding) — Couches sans aucun signal de position explicite, s’appuyant sur le masque causal pour transmettre l’ordre implicitement. Les schémas hybrides alternent des couches RoPE (résolution locale) et des couches NoPE (pour éviter la décroissance).
  • Rééchelonnement de l’encodage positionnel — Ajustement des paramètres de fréquence ou d’échelle d’un encodage existant, généralement pour étendre le contexte utilisable au-delà de la longueur d’entraînement ou pour aplatir la décroissance. Les méthodes de type YaRN ou LongRoPE en relèvent.
  • RoPE (rotary position embedding) — L’encodage positionnel dominant dans les modèles ouverts actuels. Il fait tourner les vecteurs de requête et de clé d’un angle dépendant de la position, de sorte que leur produit scalaire dépende de la distance relative. Élégant et favorable à l’extrapolation, mais porteur d’un terme de décroissance intrinsèque.

Les phénomènes

  • Context rot — Dégradation par la longueur : la précision baisse quand l’entrée grandit, même si le contenu utile est fixe et bien placé. Terme forgé par Chroma en 2025. À distinguer du dépassement de fenêtre, qui est une limite dure : le rot commence bien avant.
  • Dégradation positionnelle vs dégradation par la longueur — La distinction sur laquelle insiste cet article. La première fait varier se trouve l’information ; la seconde, quelle quantité de texte l’entoure. Causes différentes, remèdes différents, et effets cumulatifs.
  • Distracteur — Un passage de l’entrée plausiblement lié à la question mais ne contenant pas la réponse. Les distracteurs sont ce qui rend la récupération réaliste difficile, et leur nuisance croît avec leur proximité sémantique à la question.
  • Lost in the middle — Dégradation positionnelle : l’information utile est bien exploitée aux extrémités de l’entrée et mal en son intérieur. Nommé par Liu et al. (2023 ; TACL 2024).
  • Puits d’attention (attention sink) — Un token qui absorbe une part importante et persistante de l’attention sans être sémantiquement pertinent, typiquement l’un des premiers tokens de la séquence. Nommé par Xiao et al., qui ont montré qu’écarter les tokens puits d’un cache à fenêtre glissante fait s’effondrer la qualité de génération, alors qu’en conserver environ quatre la restaure. Des travaux ultérieurs ont observé ce comportement sur des tokens peu informatifs ailleurs dans l’entrée.
  • Rapport signal/bruit — La proportion du prompt réellement pertinente pour la tâche. La thèse de cet article est que c’est ce rapport, et non la capacité brute de la fenêtre, qui gouverne la fiabilité en contexte long.

Évaluation

  • Association sémantique (ou latente) — Reconnaître que deux passages désignent la même chose sans partager aucun mot. C’est ce que teste NoLiMa, et ce que les requêtes réelles exigent le plus souvent.
  • Chain-of-thought (CoT) — Amener le modèle, par prompting ou par entraînement, à produire un raisonnement intermédiaire avant sa réponse. Efficace sur de nombreuses tâches de raisonnement ; NoLiMa constate que cela ne sauve pas la récupération en contexte long.
  • Haystack — La masse de texte de remplissage non pertinent qui entoure l’aiguille.
  • HELMET — Suite d’évaluation en contexte long qui teste plusieurs familles de tâches et analyse la position de l’aiguille jusqu’à 128K tokens.
  • NoLiMa — Benchmark qui reconstruit le NIAH avec des aiguilles partageant délibérément un minimum de vocabulaire avec la question, forçant une véritable association sémantique. Modarressi et al., ICML 2025.
  • Needle-in-a-haystack (NIAH) — La sonde standard du contexte long : insérer un fait distinctif (l’aiguille) dans un long texte de remplissage (la botte de foin) et demander au modèle de le retrouver. Peu coûteux à exécuter, et facile à réussir pour de mauvaises raisons.
  • Profondeur (needle depth) — L’endroit où l’aiguille est placée, exprimé en fraction du contexte total : 0 % correspond au tout début, 100 % à la toute fin. Balayer la profondeur est la façon de reconstituer une courbe en U pour votre propre installation.
  • Recouvrement lexical / correspondance littérale — Vocabulaire de surface partagé entre la question et le passage cible. Quand il existe, le modèle peut réussir par appariement de chaînes plutôt que par compréhension, ce qui gonfle les scores de benchmark par rapport à l’usage réel.
  • RULER — Benchmark synthétique de contexte long qui fait varier systématiquement le type de tâche et la longueur pour estimer à partir de quelle longueur chaque modèle décroche réellement.
  • Score de référence (baseline) — La précision d’un modèle sur la même tâche en contexte court, servant de point de comparaison pour les scores en contexte long. Sans lui, les chiffres absolus en contexte long disent peu de choses, car difficulté de la tâche et force du modèle sont confondues.

Systèmes et atténuation

  • Ancrage (grounding) — Rattacher une affirmation générée à un passage source identifié, généralement en exigeant une citation avant la réponse. Cela réduit la dépendance aux positions que le motif d’attention a spontanément privilégiées.
  • Balises de style XML — Délimiteurs explicites du type <doc id=”7″>…</doc> autour de chaque source. Ils donnent au modèle une prise stable pour désigner un document par son identité plutôt que par sa position, et rendent les frontières de sources non ambiguës.
  • Base vectorielle (vector store) — La base de données qui stocke les plongements et sert les recherches par plus proches voisins. Son ordre de sortie par défaut reflète la similarité, pas le placement que votre prompt devrait adopter.
  • Boucle d’agent — Schéma itératif où un modèle appelle des outils, lit les résultats et décide de l’étape suivante. Chaque itération s’ajoute au contexte : sorties d’outils accumulées, tentatives ratées et explorations sans issue se convertissent directement en dégradation par la longueur.
  • Calibration d’attention — Estimer la composante purement positionnelle de l’attention et la soustraire, pour que les scores restants suivent la pertinence plutôt que l’emplacement. La méthode Found in the Middle procède ainsi et rapporte jusqu’à 15 points de pourcentage de gain sur des tâches RAG en aval. Elle exige un accès aux internes de l’attention, donc reste indisponible via les API hébergées.
  • Compaction — Remplacer le contexte accumulé par un résumé plus court afin de maintenir un ensemble de travail réduit. La défense standard contre la dégradation par la longueur dans les agents à longue durée de vie.
  • Ensemble de travail (working set) — Le sous-ensemble du contexte accumulé encore nécessaire à l’étape courante. Maintenir le prompt au plus près de cet ensemble est l’objectif pratique de la compaction.
  • Fragment / fragmentation (chunk / chunking) — Découper les documents sources en passages assez courts pour être plongés et récupérés individuellement. La taille des fragments et le placement des frontières déterminent la quantité de texte non pertinent embarquée à chaque résultat.
  • Plongement (embedding) — Représentation vectorielle dense d’un passage ou d’une requête, positionnée de sorte que les textes sémantiquement proches soient voisins. Le fondement de la recherche vectorielle.
  • RAG (retrieval-augmented generation) — Récupérer les passages pertinents dans un magasin externe au moment de la requête et les placer dans le prompt, plutôt que de compter sur la connaissance paramétrique. Tout cet article s’applique à la façon d’ordonner et de dimensionner ces passages récupérés.
  • Reclassement (reranking) — Passe de scoring de second niveau sur les candidats récupérés, typiquement avec un cross-encodeur qui lit ensemble la requête et le passage et se révèle donc plus précis que la similarité vectorielle. Le reclassement fournit un ordre fiable, ce qui est précisément ce qui rend le placement délibéré payant.

Sources

Leave a comment

Your email address will not be published. Required fields are marked *