Natural Language Generation

참고할 글: https://stats.stackexchange.com/questions/242617/comparing-perplexities-with-different-data-set-sizes

Log Likelihood: log P(x|θ), 감독학습인 경우 log P(y|x, θ)

일반적으로 라이클리후드를 서로 다른 크기의 데이터 셋에 대해서 쓰려면 기하평균을 취해야한다.

왜냐하면 라이클리후드의 절대값은 항상 증가하는 방향이기 때문에 데이터의 크기가 같이 않으면 성능 비교가 의미가 없다. 따라서 마찬가지로 분류 문제에서의 -log라이클리후드인 크로스엔트로피는 데이터의 크기 N으로 나누어주면 된다.

Log Likelihood per word: { log P(x) } / N, 감독학습인 경우 { log P(y|x, θ) } / N

LM에서는 seq 길이에 따라서 log likelihood를 계산해주어야한다. 즉 쉽게 말하면 전체 sentence에 대한 log likelihood를 문장 길이 N으로 나누어준 것을 사용한다.

Perplexity : 2^H(p), Machine Learning에서는 2^H(p, q)

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 in NLP: 2^ 이때 N은 한 문장의 단어의 개수

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의 해석

Perplexity의 수식을 잘 전개해보면 token에 대한 예측 확률의 역수를 [기하평균](https://ko.wikipedia.org/wiki/기하_평균#:~:text=기하 평균(幾何平均%2C geometric,기하평균은 4이다.)한 것임을 알 수 있다.

그러므로 모든 token에 대한 모델의 확률 예측값이 1일 때, perplexity는 최소인 1의 값을 갖고, 반대로 token중에서 하나라도 모델이 0의 확률을 예측하게 되면, perplexity는 무한대의 값을 가질 수 있다.