Mesure de récupération 27 août 2026 El Mahdi El Aimani

Cinq langues, un même corpus bancaire

Vingt-quatre questions posées à l'identique en français, anglais, arabe standard et darija, contre 157 passages français issus du site public d'une banque marocaine. Le français, l'anglais et l'arabe standard se tiennent entre 79 % et 88 %. Le darija tapé en caractères latins tombe à 17 %.

English version

01 Ce qui a été mesuré

Le protocole tient en une phrase : même question, même passage attendu, seule la langue change.

Une banque marocaine publie sa documentation en français. Ses clients écrivent en français, en anglais, en arabe standard, et en darija — que la plupart tapent en caractères latins. La question est de savoir si le système retrouve encore le bon document quand la langue de la question s'éloigne de celle des documents.

Corpus
157 passages uniques, extraits de 40 pages publiques de bankofafrica.ma (français). Le contenu sert de corpus de test ; ce qui est mesuré est une chaîne de récupération construite pour l'exercice, pas le système de cette banque ni d'aucune autre.
Questions
24, chacune rédigée dans les 5 formes, rattachées au même passage attendu
Domaines
ouverture de compte, crédit consommation, crédit immobilier, cartes, plafonds, banque à distance, paiement mobile
Vectorisation
BAAI/bge-m3, 1024 dimensions
Recherche
similarité cosinus sur l'ensemble du corpus, sans reranker ni réécriture de requête

Le contenu est public : aucune donnée personnelle, aucun accès authentifié, aucun système en production n'a été sollicité.

02 Résultats

Hit@1 : le bon document arrive-t-il en première position. MRR : position moyenne inversée, 1,0 signifie toujours premier.

Langue de la question Hit@1 Hit@3 Hit@5 MRR Similarité vs FR
Français référence 83,3 % 87,5 %91,7 %0,8690,694 —
Anglais 79,2 % 87,5 %91,7 %0,8550,664 −4,2
Arabe standard 87,5 % 95,8 %95,8 %0,9210,653 +4,2
Darija car. arabes 54,2 % 79,2 %79,2 %0,6800,550 −29,2
Darija car. latins 16,7 % 50,0 %62,5 %0,3540,475 −66,7

La langue n'est pas un problème jusqu'au darija. Français, anglais et arabe standard se tiennent dans un mouchoir : sur 24 questions, 4,2 points représentent une seule question. Un assistant annoncé « français et anglais » n'a pas d'écart multilingue significatif.

L'écart apparaît avec le darija, et double lorsqu'il est écrit en caractères latins — wach ne9der nhel 7sab, avec des chiffres pour les sons arabes sans équivalent latin. C'est la forme que les clients tapent réellement dans une fenêtre de chat.

03 Ce qu'un rang de 65 veut dire

Le corpus compte 157 passages. La position du bon document décide de ce que le modèle reçoit.

Français — « Est-ce qu'il y a des frais pour ouvrir un compte ? » rang 1 / 157
Darija latin — « wach kaynin chi masarif bach nhel hsab? » rang 65 / 157
Même question, même passage attendu. Aucun système de production ne transmet 65 passages au modèle : à cette profondeur, le document n'est pas mal classé, il est hors d'atteinte.

Les autres écarts relevés suivent le même motif : le taux du crédit consommation passe du rang 1 au rang 45, le différé de remboursement du rang 5 au rang 47, le retrait sans carte du rang 15 au rang 77.

Ces échecs ne remontent nulle part. Le système ne tombe pas en panne, la latence ne bouge pas, aucune erreur n'est journalisée. Le modèle reçoit un document non pertinent, récupéré avec assurance, et rédige une réponse dessus.

04 Le français seul n'est pas à 100 %

Le chiffre qui concerne tout le monde, quelles que soient les langues prises en charge.

Sur les questions françaises posées à des documents français, 4 sur 24 ne placent pas le bon passage en tête, et trois l'enterrent au-delà du rang 5 : retrait au guichet sans carte au rang 15, délai de réponse crédit au rang 10, différé de remboursement au rang 5.

C'est pourtant le cas favorable : du contenu marketing court et riche en mots-clés, avec des questions rédigées pour être répondables. Une base de procédures internes, plus longue et plus spécialisée, se comporte moins bien.

05 Ce qui se corrige, et ce qui ne se corrige pas

Les deux écarts n'ont pas la même cause, donc pas le même remède.

Darija en caractères arabes : réglage

L'écart au Hit@3 n'est que de 8,3 points contre 29,2 au Hit@1. Le bon document est souvent présent, mais pas en tête. Transmettre les 3 à 5 meilleurs passages au modèle plutôt que le premier seul récupère l'essentiel de la perte.

Darija en caractères latins : normalisation

Ici le même réglage ne suffit pas : l'écart reste de 37,5 points au Hit@3 et 29,2 au Hit@5. La translittération n'est pas une traduction approximative. masarif n'est ni un mot français ni une chaîne arabe : le tokeniseur le découpe en fragments qui n'ont de sens dans aucune langue vue à l'entraînement. La piste est de normaliser le script avant la vectorisation, ce qui relève du développement et non du paramétrage.

06 Pourquoi ces chiffres sont un minimum

Trois raisons de penser qu'un système réel fait moins bien, pas mieux.

  1. bge-m3 est parmi les meilleurs modèles multilingues disponibles, et il a été retenu pour cette propriété précise. Un système reposant sur text-embedding-3 ou sur un modèle spécialisé français devrait faire moins bien.
  2. Le corpus est du contenu marketing public : court, répétitif, riche en mots-clés. De vraies procédures internes creusent l'écart plutôt qu'elles ne le réduisent.
  3. Aucun reranker, aucune réécriture de requête, aucun BM25 hybride. Un système en production peut en disposer, ce qui améliorerait le résultat. Il peut aussi ne pas en disposer.

07 Limites

Ce que cette mesure ne montre pas, et ne prétend pas montrer.

08 Reproduire

Le corpus se reconstruit depuis les pages publiques, la mesure se rejoue ensuite hors ligne.

# reconstruire le corpus depuis les pages publiques
python build_corpus.py     → 40 pages, 157 passages

# vectoriser et scorer les 24 questions x 5 formes
python run_bench.py        → Hit@1, Hit@3, Hit@5, MRR, similarité

Les vecteurs sont mis en cache localement : la première exécution coûte environ 180 appels de vectorisation, les suivantes sont quasi gratuites. Le script de mesure lève une erreur lorsqu'une vectorisation échoue, au lieu de retourner un vecteur nul qui produirait un score net et faux.

Le code et le jeu de questions sont disponibles sur demande.