Nous avons fait lire les mêmes 20 factures et avoirs fictifs à Qwen3-4B. La date d’émission et le total TTC sont tous les deux exacts sur 18 documents en Q4_K_M et 10 en Q8_0. La version Q4 obtient le meilleur total dans cet essai. Le fichier Q4 pèse 2,50 Go et le Q8 4,28 Go. Pour savoir si les 1,78 Go supplémentaires se justifient sur votre poste, regardez sur quels documents les deux versions se trompent.
Comment les erreurs ont-elles été comptées ?
Chaque document contient un texte français et un corrigé à deux champs. Le modèle reçoit uniquement le texte avec une consigne identique. On attend la date d’émission au format année-mois-jour et le total TTC du document en centimes, en conservant le signe. Une facture de 720,00 € avec un acompte de 200,00 € a pour total attendu 72 000 centimes. Son solde de 520,00 € répond à une autre question.
| Critère sur les 20 documents | Q4_K_M | Q8_0 |
|---|---|---|
| Objet JSON seul avec les deux clés attendues | 20 / 20 | 20 / 20 |
| Date d’émission exacte | 20 / 20 | 20 / 20 |
| Total TTC exact, en centimes et signé | 18 / 20 | 10 / 20 |
| Les deux champs exacts sur le même document | 18 / 20 | 10 / 20 |
Sur les mêmes documents, les deux versions réussissent ensemble 10 fois. Q4 réussit seule 8 fois, Q8 seule 0 fois. Les deux versions manquent au moins un critère dans 2 cas sur 20. Une sortie entourée de texte ou de balises Markdown échoue à la notation stricte. Dans un objet à deux clés, une erreur sur le montant laisse le point de la date si celle-ci est exacte.
Le montant a la bonne valeur absolue mais le signe opposé 2 fois en Q4 et 9 fois en Q8. Un JSON lisible peut donc transformer une somme facturée en crédit. Avant un export, comparez le signe du champ extrait avec celui du total TTC sur le document et gardez les écarts pour relecture.
Quelles factures posent problème ?
| Type de texte | Deux champs exacts en Q4 | Deux champs exacts en Q8 |
|---|---|---|
| Factures simples | 5 / 5 | 2 / 5 |
| Plusieurs dates | 3 / 5 | 1 / 5 |
| Solde, acompte ou crédit | 5 / 5 | 2 / 5 |
| Avoirs signés | 5 / 5 | 5 / 5 |
Les quatre groupes ont le même poids dans le test. Les exemples ci-dessous donnent le libellé original et la sortie intégrale de chaque modèle. Le ZIP contient les vingt paires pour vérifier chaque note.
Document F01
FACTURE A01
Émise le 03/02/2026. Total HT 100,00 €. TVA 20,00 €. Total TTC 120,00 €. À payer avant le 05/03/2026.
Corrigé attendu : 2026-02-03 et 12000 centimes.
Réponse brute de Q4_K_M
{"date_emission": "2026-02-03", "total_ttc_centimes": 12000}Réponse brute de Q8_0
{
"date_emission": "2026-02-03",
"total_ttc_centimes": -12000
}Document F15
Facture S05 du 17 août 2026. Report d’une ancienne dette : 12,00 €. Total TTC de cette facture : 92,16 €. Montant total à virer : 104,16 €.
Corrigé attendu : 2026-08-17 et 9216 centimes.
Réponse brute de Q4_K_M
{"date_emission": "2026-08-17", "total_ttc_centimes": 9216}Réponse brute de Q8_0
{
"date_emission": "2026-08-17",
"total_ttc_centimes": -10416
}
Dans F15, le TTC de la facture est de 92,16 €. Le montant à virer s’élève à 104,16 € car il inclut aussi 12,00 € d’une ancienne dette. Ces deux nombres répondent à deux questions différentes. C’est un bon exemple à ajouter à vos propres tests si vos documents comportent un report de solde.
Rejouer le test sur son ordinateur
Télécharger les 20 documents fictifs, les 40 réponses brutes, le corrigé et le script de notation (ZIP gratuit). Décompressez l’archive. Les deux commandes suivantes recalculent les scores avec Python, sans télécharger les modèles.
python essai.py sorties-Q4_K_M.json
python essai.py sorties-Q8_0.json
Pour refaire l’inférence, le fichier lisezmoi du ZIP fournit la commande de lancement de llama-server pour chaque GGUF. Les deux séries complètes ont tourné avec llama.cpp b6500 sous Vulkan, sur la même GeForce GTX 1050 Ti de 4 Gio et le même Intel Core i7-7700HQ. Nous avons déporté 28 couches sur le GPU dans les deux cas, utilisé deux threads CPU, un contexte de 2 048 jetons et une requête indépendante par document. Génération gloutonne, graine 42, maximum 96 jetons, réflexion désactivée et aucune grammaire JSON imposée. Les empreintes SHA-256 des deux poids et la consigne complète sont dans l’archive. Poids officiels de Qwen à la révision testée · Version du moteur llama.cpp.
Que choisir pour ses propres factures ?
Nous avons aussi conservé une série supplémentaire en Q4 sur CPU avec quatre threads. Elle obtient 18/20, avec des erreurs sur F04, F08. Dans la série Q4 calculée avec Vulkan, les erreurs portent sur F08, F09. Le score global est identique, mais deux documents changent de résultat entre ces configurations. Les réponses du contrôle CPU se trouvent dans le dossier pilote-cpu de l’archive.
Si votre contrainte est la taille des poids, Q4 économise environ 42 % sur le fichier GGUF dans ce cas. Pour choisir un modèle d’extraction, constituez un lot avec vos propres formats et comptez séparément les erreurs de signe, de date et de montant. Ces 20 textes synthétiques contiennent déjà des caractères propres. Un scan de travers, une virgule mal reconnue par l’OCR ou une ligne de tableau déplacée introduiraient d’autres difficultés. Cette expérience à un passage par texte mesure uniquement l’extraction dans ces conditions.
Pour estimer l’espace nécessaire à l’exécution, consultez le guide de la mémoire des poids et du cache KV de Qwen3. Le système, le moteur et le contexte occupent eux aussi de la mémoire.

