Note sur le calcul de la perplexité
Posted on Mer 01 jan 2020 in NLP, Language Models, TAL, Modèles de Langue
Une perplexité qui laisse perplexe
Les modèles de langue continuent de faire l'objet de nombreuses recherches, en particulier parce que les données d'apprentissage sont abondantes, et permettent de pré-entrainer des représentations ou des réseaux qu'il est possible ensuite de détourner à d'autres fin, presque sans supervision. Le travail récent de Radford et collègues en donne une très belle illustration, puisque leur modèle de langue est utilisé (une fois adapté à ces tâches) aussi bien pour la classification de documents que pour le calcul d'équivalences sémantiques. Ce travail est encore étendu dans une nouvelle publication, qui exploite une architecture bien plus profonde, et un bien plus grand nombre de données d'apprentissage. Dans ce dernier travail, les auteurs présentent des performances de leur modèle en termes de perplexité, présentant des résultats qui surpassent de loin l'état de l'art. Ainsi ils obtiennent sur le PennTreeBank [] (table 3) un score de 35.76, alors que le très sérieux travail de Melis et co-auteurs [ ], en 2017, compare une dizaine de modèles de l'état de l'art, avec des scores (Table 1) s'échelonnant entre 86.2 et 58.3, des résultats qui sont encore améliorés par Yang et co-auteurs en 2018 [] pour atteindre 47.7 (Il est possible de faire encore un peu mieux - avec une technique qui utilise des réseaux adversariaux pour améliorer les représentations de mots rares []).
Note: le travail de [[]] se concentre sur le Giga word et ne produit pas de résultat sur le PTB. En revanche, il utilise des modèles de caractères sur la couche de sortie qui semblent capables de scorer n'importe quelle suite de caractère, c-à-d qu'au lieu de calculer directement \(P(w=x_1\dots x_n|h)\) il utilise \(P(x_1|h)p5x_2|x_1,h)\dots P(eow|x_1\dotsx_t,h)\). Quel est l'effet sur le facteur de normalisation ? Ce serait à regarder de près.
Qu'est ce que la perplexité ?
La perplexité est une mesure de la capacité de prédiction du modèle de langue \(M\), proposée dès les travaux pionniers de Shannon sur les modèles de Markov [@Shannon51prediction]. Elle est le plus souvent définie en relation avec l'entropie croisée de la source \(H(M) = E_{x_1 \dots X_T \sim S} \log P(x_1 \dots X_T) = \frac{1}{T} \log P_M(x_t | x_{<t})\) par \(PP(M) = 2^H(M)\), qui présuppose un modèle capable d'assigner une probabilité à toute séquence de mots, typiquement en la décomposant en utilisant la règle de factorisation de la loi jointe comme un produit de lois conditionnelles. Dans les modèles discrets (n-gramme) [], chaque facteur définit une distribution discrète sur un vocabulaire prédéfini, de taille connue \(|V|\).
Une autre manière de trouver ce résultat est d'imaginer un jeu dans lequel il on demande de deviner des mots absents d'un texte en formulant des hypothèses sous la forme d'une distribution de probabilité sur le vocabulaire de sortie. Si le pari correspond à la distribution de probabilité conditionnelle au contexte gauche, on retrouve la forme précédente lorsque l'on prédit successivement les mots de gauche à droite. L'intérêt du jeu de Shannon c'est qu'il autorise à utiliser d'autres modèles (par exemple: qui utilisent le contexte droit, ou bien simultanément le contexte droit et gauche).
Un des points d'attention dans ces calculs est la taille du vocabulaire. Il est d'une part important de pouvoir produire toutes les séquences possibles, ce qui peut être fait de deux manières: - en modélisant l'occurrence d'un mot hors vocabulaire, considéré comme un token supplémentaire ajouté au vocabulaire prédéfini. Si un mot nouveau est rencontré dans le corpus de test, on le remplace par ce token unique (OOV). NB. cela assigne souvent une probabililité trop forte aux mots hors vocabulaires, puisque si chacun est individuellement rare, ils sont collectivement fréquents - en utilisant des modèles infra-lexicaux, à base de caractères ou d'autres unités sous-lexicales. Les distributions conditionnelles utilisées pour la prédiction placent des paris sur tous les mots possibles. - fait encore autre chose: puisqu'il ne fait pas les prédictions mot à mot, mais ignore même les découpages en mot.
Il est raisonnable de comparer deux modèles qui choissent l'option (1), à supposer qu'ils aient la même taille de vocabulaire; et sans doute aussi deux modèles qui choisissent l'option (2), mais par contre il n'est pas raisonable de comparer deux modèles qui ne probabilisent pas le même espace.
Aux origines de la perplexité
L'origine de la perplexité provient de résultats de la théorie de l'information. Un premier concept utile est celui du taux d'entropie d'une suite de VA \(X_{1} \dots X_n\) définie par [@Cover91information,chap4]:
L'entropie est alors la limite pour \(n\rightarrow{}\infty\) de \( H(P) $. Sous certaines conditions (stationarité et ergodicité du processus $P\) qui génère les messages), on peut montrer que (a) cette limite existe ; (b), qu'elle est aussi égale à la limite de \(\frac{1}{n} H(X_n|X_1 \dots X_{n-1})\) et que l'on peut calculer \(H(P)\) en mesurant \(\lim_{n \rightarrow \infty} \frac{1}{n} \log P(x_1 \x_n)\).
L'idée de perplexité provient de la mesure de la divergence KL entre la distribution "naturelle" des textes anglais et la distribution approchée par un modèle \(M\). Comme précédemment, la généralisation à des messages des de la divergence conduit à définir:
qui fait apparaitre deux termes: le premier est l'entropie, le second l'entropie croisée. Comme pour la perplexité, ce terme est calculé comme \(\lim_{n \rightarrow \infty} \frac{1}{n} \log P_M(x_1 \x_n)\) quand \((x_1 \dots x_n)\) est une séquence tirée sous \(P\).
Une mise au point éclairante (en anglais)
[http://sjmielke.com/comparing-perplexities.htm] (même si je ne suis pas complètement d'accord sur l'utilisation de LMs fermés, puisque dans la pratique on utilise un token unk).
Une comparaison cross-lingue qui contourne cet obstacle
@inproceedings{cotterell-etal-2018-languages, Abstract = {For general modeling methods applied to diverse languages, a natural question is: how well should we expect our models to work on languages with differing typological profiles? In this work, we develop an evaluation framework for fair cross-linguistic comparison of language models, using translated text so that all models are asked to predict approximately the same information. We then conduct a study on 21 languages, demonstrating that in some languages, the textual expression of the information is harder to predict with both n-gram and LSTM language models. We show complex inflectional morphology to be a cause of performance differences among languages.}, Address = {New Orleans, Louisiana}, Author = {Cotterell, Ryan and Mielke, Sebastian J. and Eisner, Jason and Roark, Brian}, Booktitle = {Proceedings of the 2018 Conference of the North {A}merican Chapter of the Association for Computational Linguistics: Human Language Technologies, Volume 2 (Short Papers)}, Date-Added = {2019-04-25 12:31:09 +0200}, Date-Modified = {2019-04-25 12:31:09 +0200}, Doi = {10.18653/v1/N18-2085}, Month = jun, Pages = {536--541}, Publisher = {Association for Computational Linguistics}, Title = {Are All Languages Equally Hard to Language-Model?}, Url = {https://www.aclweb.org/anthology/N18-2085}, Year = {2018}, Bdsk-Url-1 = {https://www.aclweb.org/anthology/N18-2085}, Bdsk-Url-2 = {https://doi.org/10.18653/v1/N18-2085}}
References
[PeenTreeBank]: [Melis et co-auteurs]:
@articlet{shannon51prediction,
author={Claude Shannon},
title={Prediction and entropy of printed English},
journal={Bell System Technical Journal},
volume={30},
pages={50--64},
year={1951}
}
@incollection{Gong18Frage, title = {{FRAGE}: Frequency-Agnostic Word Representation}, author = {Gong, Chengyue and He, Di and Tan, Xu and Qin, Tao and Wang, Liwei and Liu, Tie-Yan}, booktitle = {Advances in Neural Information Processing Systems 31}, editor = {S. Bengio and H. Wallach and H. Larochelle and K. Grauman and N. Cesa-Bianchi and R. Garnett}, pages = {1334--1345}, year = {2018}, publisher = {Curran Associates, Inc.}, url = {http://papers.nips.cc/paper/7408-frage-frequency-agnostic-word-representation.pdf} }
@inproceedings{Hill16goldilocks, booktitle={International Conference on Learning Representations}, year={2016}, address = {San Juan, Puerto Rico}, title={The Goldilocks principle: reading children’s books with explicit memory representations}, author={Hill, Felix and Bordes, Antoine and Chopra, Sumit and Weston, Jason} }
@inproceedings{Yang2018breaking, title={Breaking the Softmax Bottleneck: A High-Rank {RNN} Language Model}, author={Zhilin Yang and Zihang Dai and Ruslan Salakhutdinov and William W. Cohen}, booktitle={International Conference on Learning Representations}, year={2018}, url={https://openreview.net/forum?id=HkwZSG-CZ}, }
@inproceedings{Sutskever2011generating, author = {Sutskever, Ilya and Martens, James and Hinton, Geoffrey E.}, title = {Generating text with recurrent neural networks}, booktitle = {Proceedings of the 28th International Conference on Machine Learning (ICML-11)}, pages = {1017–1024}, year = {2011} } @article{Shannon48amathematical, author = {Shannon, Claude E}, title = {A Mathematical Theory of Communication}, journal = {Bell System Technical Journal}, volume = 27, number = 3, pages = {379-–423}, doi = {doi:10.1002/j.1538-7305.1948.tb01338.x} }
From KenLM discussion forum
If you want to compare perplexities across different vocabularies, pick a big number (larger than the union of all vocabularies you are considering), and use
--vocab_pad BIG_NUMBER
with lmplz
when you train the model. This will train a model which is normalized with respect to the vocabulary size you specify.
The default normalizes with respect to whatever vocabulary exists, plus 1 for the unknown word.
Remember to do the same with whatever you compare to: if you train a neural network on a 200,000-word vocabulary, then its vocabulary is normalized with respect to 200,000 words including unknown. You should therefore take its unknown word probability times 1/(BIG_NUMBER-200,000) before computing perplexity. Effectively, the unknown probability is the probability of the class, not a specific unknown. So you need to hypothesize a uniform distribution. This is what --vocab_pad
does.
Remember, the model with no training data has OOV probability 1 and therefore perplexity 0. Comparing perplexities with different vocabulary sizes is meaningless.
You should really use including OOV, which is counts every word including unknown words. Excluding OOV skips unknown words for purposes of computing probability and normalizing. It's there because SRI does that.