Perplexity
La perplexité correspond à l’exponentielle de l’entropie croisée d’un modèle appliqué à du texte. Calcul, comparaison équitable des modèles et usages de cette métrique au-delà de l’évaluation.
La perplexité est une métrique qui mesure la capacité d’un modèle probabiliste à prédire une séquence. Elle se calcule comme l’exponentielle de la moyenne des log-vraisemblances négatives que le modèle attribue à chaque jeton suivant observé. Plus sa valeur est faible, mieux c’est. Une perplexité de 10 signifie que le modèle est, en moyenne, aussi incertain que s’il choisissait uniformément entre 10 options à chaque étape ; c’est pourquoi ce nombre est souvent interprété comme un facteur de branchement effectif. Frederick Jelinek, Robert Mercer, Lalit Bahl et James Baker l’ont introduite chez IBM en 1977 pour mesurer la difficulté des tâches de reconnaissance vocale. Elle reste la métrique intrinsèque standard de la modélisation du langage. Par exemple, en 2019, GPT-2 d’OpenAI, doté de 1,5 milliard de paramètres, a obtenu une perplexité de 17,48 sur le banc d’essai WikiText-103, sans avoir été entraîné sur celui-ci.
Le mot désigne aussi deux choses sans rapport. Perplexity AI est une entreprise de moteur de recherche fondé sur l’IA, tandis que la perplexité est un hyperparamètre de t-SNE qui définit approximativement le nombre de voisins pris en compte par chaque point lors de la création d’une carte 2D de données de grande dimension avec t-SNE.
Calcul de la perplexité#
Pour une séquence de N jetons, perplexité = exp(-(1/N) x somme des logarithmes de p(jeton_i | tous les jetons précédents)). La quantité à l’intérieur de l’exponentielle correspond à l’entropie croisée entre le texte et les prédictions du modèle ; c’est la même fonction de perte que celle utilisée pour entraîner les grands modèles de langage (LLM). Avec les logarithmes naturels, la base est e ; avec les logarithmes en base 2, c’est 2, mais la perplexité obtenue est la même. La perte d’entropie croisée de PyTorch utilise les logarithmes naturels et calcule par défaut la moyenne sur les jetons ; la perplexité d’un modèle de langage est donc simplement exp(perte).
import math
# Probability the model assigned to each correct next token
token_probs = [0.50, 0.25, 0.80, 0.40]
# Cross-entropy is the average negative log-likelihood, in nats
cross_entropy = -sum(math.log(p) for p in token_probs) / len(token_probs)
print(f"Cross-entropy: {cross_entropy:.3f}, perplexity: {math.exp(cross_entropy):.2f}")
# A model that spreads probability evenly over 10 tokens has perplexity 10
uniform = -sum(math.log(0.1) for _ in token_probs) / len(token_probs)
print(f"Uniform perplexity: {math.exp(uniform):.2f}")Les quatre probabilités donnent une entropie croisée de 0.805 nat et une perplexité de 2.24. Le modèle se comporte donc comme s’il choisissait parmi environ deux jetons de probabilité égale à chaque étape. Le cas uniforme confirme l’interprétation en tant que facteur de branchement : une probabilité de 0.1 attribuée à chaque jeton correct donne exactement 10.
Les longs documents demandent une attention particulière. Un modèle doté d’une fenêtre de contexte de taille fixe évalue le texte par segments, et les jetons au début d’un segment non chevauchant ne disposent presque d’aucun contexte, ce qui augmente la perplexité. Une évaluation par fenêtre glissante fait chevaucher les segments pour que chaque jeton bénéficie d’autant de contexte antérieur que le modèle le permet, au prix d’un calcul plus important.
Comparer les modèles équitablement#
La perplexité est comparable uniquement entre des modèles évalués sur le même texte avec la même tokenisation. Un modèle doté d’un vocabulaire plus large découpe le texte en moins de jetons, plus difficiles à prédire ; sa perplexité par jeton n’est donc pas directement comparable à celle d’un modèle qui utilise des jetons plus petits. Normaliser la log-vraisemblance totale par le nombre d’octets ou de caractères, et exprimer le résultat en bits par octet ou en bits par caractère, élimine cette dépendance.
Les données de test doivent aussi être absentes des données d’entraînement. Un modèle qui a déjà vu un passage lui attribue une probabilité inhabituellement élevée ; cette forme de fuite de données donne donc à la perplexité une apparence plus favorable que les performances réelles. Le même phénomène sous-tend les attaques par inférence d’appartenance, qui repèrent les textes dont la perplexité anormalement faible suggère qu’ils ont servi à l’entraînement.
La perplexité évalue la prédiction du jeton suivant dans un texte fixe. Les modèles conversationnels suivent un ajustement par instructions et un apprentissage par renforcement à partir de commentaires humains (RLHF) afin de suivre les demandes et de correspondre aux préférences humaines ; on les compare donc au moyen de bancs d’essai par tâche et d’évaluations des préférences humaines.
Applications au-delà de la comparaison des modèles#
La sélection des données en est une application majeure. Le pipeline CCNet, publié par des chercheurs de Facebook AI en 2019, a évalué les pages de Common Crawl avec un modèle de langage entraîné sur Wikipédia et les a réparties, selon leur perplexité, en tiers supérieur, intermédiaire et inférieur. Le tiers supérieur, à faible perplexité, était considéré comme contenant les textes de meilleure qualité. De nombreux pipelines de préentraînement filtrent les données Web de manière similaire : une étape de nettoyage des données à l’échelle du Web. Les détecteurs de textes générés par l’IA, comme GPTZero, évaluent eux aussi la perplexité, car les textes échantillonnés à partir d’un modèle de langage sont généralement plus prévisibles que ceux écrits par des humains.
La formule s’applique à tout modèle entraîné avec l’entropie croisée. Les modèles de classification Ultralytics YOLO26 sont entraînés avec la perte d’entropie croisée moyenne. Ainsi, exp(perte de validation) correspond à la perplexité calculée sur les véritables étiquettes de classe. Une perte de validation de 0.35 correspond à une perplexité d’environ 1.42 : sur une image moyenne, le modèle répartit sa confiance comme s’il hésitait entre environ 1.4 classes.










