참고할 글: https://stats.stackexchange.com/questions/242617/comparing-perplexities-with-different-data-set-sizes
일반적으로 라이클리후드를 서로 다른 크기의 데이터 셋에 대해서 쓰려면 기하평균을 취해야한다.
왜냐하면 라이클리후드의 절대값은 항상 증가하는 방향이기 때문에 데이터의 크기가 같이 않으면 성능 비교가 의미가 없다. 따라서 마찬가지로 분류 문제에서의 -log라이클리후드인 크로스엔트로피는 데이터의 크기 N으로 나누어주면 된다.
LM에서는 seq 길이에 따라서 log likelihood를 계산해주어야한다. 즉 쉽게 말하면 전체 sentence에 대한 log likelihood를 문장 길이 N으로 나누어준 것을 사용한다.
H(p)는 entropy를 의미한다. 즉 어떤 확률분포 p의 perplexity는 2^entropy인 것이다. 그런데 ML에서 이 개념을 사용될 때에 entropy가 아닌 cross_entropy 즉, H(p,q) 를 사용한다. 다만 이 때 p의 분포를 CrossEntropyLoss에서와는 달리, Empirical Distribution 즉, 1/N을 사용한다는 점이다. 이러한 perplexity의 장점은 log가 들어가 값을 이해하기 어려운 cross_entropy에 비해서, log를 exponential로 캔슬링하여 사람이 숫자를 직관적으로 이해하기 쉽다는 점이다.
https://en.wikipedia.org/wiki/Perplexity
Perplexity is the inverse probability of the test set, normalized by number of words.
Perplexity는 NLP에서 Language Model의 evalution 메트릭으로 자주 사용된다. 이 경우 Language Model은 entropy 대신 cross_entropy를 사용되고, q 분포로 Empirical Distribution을 사용하게 된다. 이로 인해 생기는 장점이 있는데, 1/N의 q 분포로 인해 자동적으로 sentence length로 normalized가 된다는 것이다. (만약 단순히 likelihood를 사용하면, 문장의 길이에 따른 값의 scale이 고려되지 않을 것이다.)
https://towardsdatascience.com/perplexity-intuition-and-derivation-105dd481c8f3
Perplexity의 수식을 잘 전개해보면 token에 대한 예측 확률의 역수를 [기하평균](https://ko.wikipedia.org/wiki/기하_평균#:~:text=기하 평균(幾何平均%2C geometric,기하평균은 4이다.)한 것임을 알 수 있다.
그러므로 모든 token에 대한 모델의 확률 예측값이 1일 때, perplexity는 최소인 1의 값을 갖고, 반대로 token중에서 하나라도 모델이 0의 확률을 예측하게 되면, perplexity는 무한대의 값을 가질 수 있다.