L'IA et les modèles de langage peuvent compresser du texte de façon très efficace

Pierre Dandumont |

Un développeur a effectué une petite expérience très intéressante récemment : il a employé un grand modèle de langage (LLM, ce qui est souvent appelé IA, même si c'est un abus de langage) pour compresser du texte. Et le résultat est assez impressionnant, malgré quelques limites.

Les IA peuvent compresser le texte où apparaît ce lapin.

L'exemple porte le nom de Drink Me, pour une bonne raison : Julian a effectué ses essais sur le premier chapitre du livre Les Aventures d'Alice au pays des merveilles. Il a employé llaman.cpp, un logiciel open source qui peut utiliser les modèles LLaMA de Meta.

La décompression en cours.

Le fonctionnement exact est expliqué dans son sujet, mais l'idée est de ne stocker que le nécessaire pour que le logiciel puisse générer le texte à partir des informations stockées dans le modèle. Sur le premier chapitre du livre, qui contient 11 994 caractères, la version compressée ne nécessite que 986 caractères, soit 8 % seulement de la valeur d'origine. C'est très nettement mieux que les programmes de compression classiques, mais avec évidemment quelques contraintes et limites.

Un problème de taille

Le premier défaut est évident : la puissance nécessaire est élevée, et sur plusieurs niveaux. Il a en effet fallu créer le modèle lui-même, et tant la compression que la décompression nécessitent beaucoup de mémoire vive et une bonne puissance de calcul. Le second défaut est un peu différent : la compression est beaucoup moins efficace si le modèle ne contient pas les données au départ (le post d'origine de Julian passe de 3 436 à 2 691 caractères). Ce défaut peut être présenté dans l'autre sens : si le texte à compresser a été employé pour créer le modèle — ce qui est a priori le cas de la version originale d'Alice's Adventures in Wonderland —, la compression est extrêmement efficace.

Cet autre post montre bien les gains : le modèle LLaMA-3-8B (8 milliards de paramètres) permet d'obtenir un fichier 58,4 x plus petit pour le même premier chapitre ou 131 x plus petit pour un texte très courant comme le contenu de la licence GPL v2. Mais pour du texte produit par l'auteur, les résultats sont plus faibles (4,4 x, 5,76 x ou 6,93 x). Dans tous les cas, la compression avec les outils classiques comme GZIP (certes plus rapide) est nettement moins efficace, avec des fichiers environ 2 x plus petits que les originaux.

Dans la pratique, il ne s'agit évidemment pour le moment que d'une sorte de démonstration technologique. Mais qui sait, peut-être que les sociétés qui développent les grands modèles de langage pourraient s'intéresser à cette solution dans le futur, pour ajouter une nouvelle corde à l'arc de « l'IA ».

Tags
#LLM #IA
avatar jackhal | 

"Ce défaut peut être présenté dans l'autre sens : si le texte à compresser a été employé pour créer le modèle — ce qui est a priori le cas de la version originale d'Alice's Adventures in Wonderland —, la compression est extrêmement efficace."

Pour paraphraser un post lu sur X à ce sujet, si on joue à ça je peux compresser un PDF de Guerre et Paix en 1 bit... il faut juste que l'outil de décompression intègre une copie de Guerre et Paix.

Mon algorithme :
If (bit === 1)
     readfile('./data/guerre_et_paix.pdf')

avatar jackhal | 

Ou sinon, je peux faire un compresseur qui utilise Internet : si le doc à compresser existe déjà sur Internet, je renvoie l'URL et hop ! un PDF de 50Mo ne fait plus que quelques octets.
Seules contraintes : il faut une connexion Internet et une bonne bande passante pour que ça fonctionne et que ce soit rapide. Mais à part ça... incroyable, c'est fou les perspectives qu'offre Internet dans le domaine de la compression !

avatar nononap | 

Oui, c'est ce que j'allais commenter. Avec cette logique, il suffit de donner l'index unique du livre qu'on veut, éventuellement l'intervalle début-fin qu'on veut dans ce livre, et niveau compression on peut difficilement faire mieux.

Pareil avec le dernier film en 4K de 40 Go, ou n'importe quoi d'autre…

Du coup l'intérêt semble très discutable.

avatar Oliverson | 

En fait c'est de la compression avec dictionnaire.
Il faut donc le dictionnaire (LLaMA-3-8B) qui pèse ~5Go pour compresser 12Ko en 1Ko.
C'est original !

avatar sebasto72 | 

@Oliverson

J’ai une idée géniale ! ´Suffit de compresser le dictionnaire !
😁

avatar occam | 

@Oliverson

> "En fait c'est de la compression avec dictionnaire. "

Autrement dit, la tarte (à la crème) et le territoire…

avatar hawker | 

Les batailles concernant la compression sont depuis bien longtemps basé sur la performance/ratio/fiabilité.
Un algo qui compresserait 25 pourcent mieux mais 50 plus lent et pas 100 pourcent fiable n’aurait pas beaucoup voir aucun attrait en fait sauf pour de l’archivage longue durée de documents secondaires.

avatar MGA | 

@hawker

Oui mais du coup pourquoi vouloir archiver sur une longue durée un document secondaire avec des erreurs de restitution ?

avatar occam | 

@MGA

> "pourquoi vouloir archiver sur une longue durée un document secondaire avec des erreurs de restitution ?"

Pour alimenter des futures guerres de religion, si l’on en juge d’après l’histoire des livres sacrés du passé.

avatar koko256 | 

@hawker

L'algo est fiable vu que le modèle est fixe (mais attention aux mises-à-jour)

avatar occam | 

Il est en principe possible de réduire une quantité arbitraire de texte — p.ex. l’ensemble des textes générés par l’humanité de toute son histoire — dans une unique séquence numérique, moyennant un algorithme étonnamment simple, Run-Length Encoding. La compression sera encore plus efficace si l’on utilise une variante récursive d’un tel algorithme.

La séquence numérique peut à son tour être représentée comme la ratio, le rapport, entre deux nombres, un numérateur et un dénominateur. Le dénominateur peut être arbitrairement grand ; il suffit que le numérateur soit connu, et son rapport au dénominateur exactement exprimable par un algorithme générateur, ou une référence à une constante ou quantité naturelle connue ou calculable avec une précision suffisante.

Ainsi, un bâtonnet de longueur invariable, portant l’inscription du code RLE et du générateur de ratio ou de sa quantité de référence, pourrait suffire à compresser sans perte l’ensemble de la production textuelle de notre espèce. Passée comme future. Après tout, comme l’explique la Reine blanche dans Through the Looking Glass, « It's a poor sort of memory that only works backward. »

Pas sûr que le jeu en vaille la chandelle ; mais si l’on veut, ou si l’on doit, on peut faire simple. Très simple. Il suffit de tenir compte des fondamentaux.

avatar tempest | 

Je dois être debile profond je n’ai pas compris un traître mot ni même l’idée de cet article !!!
C’est quoi le but ?

avatar v1nce29 | 

Tu peux te rendormir, ça n'a aucun intérêt.

L'idée c'est qu'au cours de son apprentissage, une intelligence artificielle va organiser les informations de manière efficace autour de concepts. Autour du concept de 'cuisine' graviteront d'autres mots ou concepts proches : évier, recette, chef, ingrédients...

Le texte d'une recette de cuisine
(mettre les blancs dans un saladier ;
battre les blancs en neige...)
peut donc aussi être transcrit comme un enchaînement de concepts :
Naviguer vers concept "recette de cuisine"
naviguer vers "opérations usuelles"
Naviguer vers "blancs d'oeuf"
afficher opération 234"mettre les blancs dans un saladier" afficher opération 743 "battre les blancs en neige"

La recette sous forme de concept peut donc s'écrire
cd "/recette de cuisine"
cd "/recette de cuisine/opérations usuelles"
cd "/recette de cuisine/opérations usuelles/blancs d'oeufs"
print "/recette de cuisine/opérations usuelles/blancs d'oeufs/234"
print "/recette de cuisine/opérations usuelles/blancs d'oeufs/743"
C'est long.
Mais ça peut d'optimiser
cd "/recette de cuisine/opérations usuelles/blancs d'oeufs"
Print "./234"
print "./743"
Ensuite on suppose que les concepts ne sont pas encodés sous forme de texte mais sous forme de clés numériques d'autant plus courtes que le concept a été jugé important.
Si tu as fait bouffer énormément de livres de recettes, alors le concept "recettes de cuisine" aura une clé petite, mettons 8. On peut supposer que l'ai aura 'compris' qu'une recette de cuisine est une suite (généralement ordonnée) d'opérations. Le concept d'opération aura donc un équivalent numérique assez petit (allez 3). Si tu lui as fait bouffer des recettes de dessert il aura vu très fréquemment les termes 'sucre','farine' et un peu moins le terme 'oeufs' disons 12.
La recette est donc
cd "4/3/12"
print "./234"
print "./437"
Ce qui est plus court que le texte
"mettre les blancs dans un saladier;
battre les blancs en neige".
Admettons que ta recette complète concerne les crêpes à la Chantilly, il est fort possible que l'IA ait stocké qqpart la recette des crêpes et la recette de la chantilly voire la recette des crêpes à la Chantilly.
Alors que la version textuelle va faire plusieurs centaines de caractères, la version ai serait réduite à
print "/recettes de cuisine/usuelles/crêpes/chantilly".
Le texte est donc considérablement plus court.

Sauf que,

Ça nécessite que la recette des crêpes chantilly soit connue/stockée par l'ai. Pour économiser quelques centaines d'octets il va falloir stocker des Mo.
Donc pour décompresser il va falloir disposer de la même structure qui a servi à compresser.

avatar Woaha | 

@v1nce29

Explication chouette.

Pour l’IA. Parce que pour l’ai en français ça fait bizarre :) l’artelligence intificielle !

avatar koko256 | 

@tempest

De compresser du texte (comme le fait stuff-it).

avatar sambucus | 

À force de rationaliser, synthétiser, résumer, compresser, ne pert-on pas le vocabulaire, la syntaxe qui nous permet de réfléchir, formuler des hypothèses, nous situer dans le temps (passé, présent, futur) et … rêver et nous émerveiller ?

Je peux comprendre que l’on compresse des lignes de code, des textes scientifiques qui finissent par être trop nombreux à traiter des mêmes sujets ou des thèmes proches, afin de permettre des avancées (chimie, pharmacologie…).

Comprimer des images avec un peu de pertes pour les transmettre, c’est déjà ennuyeux, mais les circonstances peuvent le rendre nécessaire (éloignement…). Le son pose le même problème, les puristes s’en plaignent.

Compresser du texte ? Pourquoi et quelles limites ? Vers quoi sommes-nous entraînés ?

avatar koko256 | 

@sambucus

Compresser du texte pour gagner de la place sur stockage. On fait cela depuis longtemps. Il ne s'agit pas de résumer.

avatar gbasile | 

Ça pourrait permettre (aider en tout cas) de détecter les textes qui ont été générés par IA

avatar v1nce29 | 

Non.
Ou alors il faut expliquer comment.

CONNEXION UTILISATEUR