Perplexity
Perplexity는 BLEU, ROUGE와 더불어 언어모델의 Generation 성능을 판단할 수 있는 지표입니다.
Machine translation, text summarization과 같은 Generation task의 성능 비교를 위해 주로 사용됩니다.
단어 \(\{w_{1}, w_{2}, w_{3}, ... , w_{N}\}\)로 구성된 문장의 Perplexity는 다음과 같은 수식으로 나타낼 수 있습니다.
$$Perplexity=\sqrt[N]{\frac{1}{P(w_{1}, w_{2}, w_{3}, ... , w_{N})}}=\sqrt[N]{\frac{1}{\prod_{i=1}^{N}P(w_{i}| w_{1}, w_{2}, ... , w_{i-1})}}$$
분모의 \(P(w_{1}, w_{2}, w_{3}, ... , w_{N})\)는 문장에 대한 Generation probability를 의미하는데, 이를 조건부 확률의 Chain rule을 활용하여 \(\prod_{i=1}^{N}P(w_{i}| w_{1}, w_{2}, ... , w_{i-1})\)와 같이 나타낼 수 있습니다.
전체적인 식을 보았을 때, Perplexity는 문장에 대한 Generation probability의 역수의 기하평균을 구한다는 것을 알 수 있습니다.
이는 Perplexity가 문장 생성 확률의 역수를 단어의 수\((N)\)로 정규화 함을 의미합니다.
따라서 문장의 발생 확률이 높을수록 해당 문장에 대한 Perplexity 값은 낮아집니다.
Perplexity의 어원을 고려하여 조금 더 직관적인 설명을 드리도록 하겠습니다.
Perplexity는 '당혹감', '혼란'을 의미하는 단어입니다.
문장 발생확률의 역수는 발생할 수 있는 가짓수가 됩니다.
따라서 Perplexity가 높다는 것은
"발생할 수 있는 문장의 가짓수가 많다" = "혼란스럽다" = "원하는 결과를 얻지 못할 가능성이 크다"
로 해석될 수 있습니다.
언어모델의 평가 관점에서 생각해 본다면
테스트 데이터에 존재하는 문장에 대한 모델의 Perplexity가 낮다는 것은,
해당 정답 샘플에 대한 발생 확률이 높아 언어 모델이 잘 학습되었음을 의미합니다.
반대로 테스트 데이터에 존재하는 문장에 대한 모델의 Perplexity가 높다는 것은,
해당 정답 샘플에 대한 발생 확률이 낮아 언어 모델이 잘 학습되지 못하였음을 의미합니다.
Variations
Perplexity를 n-gram 언어모델의 형태로도 확장하여 계산할 수 있습니다.
대중적으로 사용되는 1~3 gram Perplexity의 예시는 다음과 같습니다.
1) Unigram Perplexity(1-gram)
$$Unigram-perplexity=\sqrt[N]{\frac{1}{\prod_{i=1}^{N}P(w_{i})}}$$
2) Bigram Perplexity(2-gram)
$$Bigram-perplexity=\sqrt[N]{\frac{1}{\prod_{i=1}^{N}P(w_{i}| w_{i-1})}}$$
3) Trigram perplexity(3-gram)
$$Trigram-perplexity=\sqrt[N]{\frac{1}{\prod_{i=1}^{N}P(w_{i}| w_{i-1},w_{i-2})}}$$
마무리
Perplexity는 언어 모델이 얼마나 정확하게 문장을 생성하는지 판단할 수 있는 성능지표입니다.
Perplexity는 테스트 세트 문장의 발생 확률의 역수를 단어 수로 정규화 하여 계산됩니다.
따라서 Perplexity가 높다는 것은 언어모델이 매 순간 골라야할 가짓수가 많아 혼란스러워 함을 의미합니다.
Text Generation task에서 매우 대중적으로 사용되는 지표인 만큼 잘 알아두면 좋을 것 같습니다.