퍼플렉시티(perplexity)
퍼플렉시티는 언어 모델의 성능을 평가하는 지표로 혼란, 혼동이라는 사전적 의미를 가지고 있는데, 모델이 테스트 데이터에 대해 얼마나 '혼란스러워하는지'를 수치로 나타낸다.
값이 낮을수록 모델이 실제 문장을 더 잘 예측한다는 의미이다.
계산 방법은 다음과 같다:
$$ Perplexity(W) = P(w_1, w_2, \cdots, w_N)^{-\frac{1}{N}} = exp(-\frac{1}{N}\sum_{t=1}^{N} logP(w_t|w_1^{t-1}))$$
여기서
$N$은 테스트 세트의 전체 단어 수이고,
$P(w_t|w_1^{t-1})$은 모델이 t번째 단어를 이전 단어들을 바탕으로 예측한 확률이다.
실제 계산은 각 단어의 조건부 확률의 로그값을 모두 더한 뒤에 전체 단어 수로 나누어 음수를 취한 값을 지수 함수로 변환하는 방식이다.
말이 어려운데, 한 부분씩 떼어 생각해보자.
1. $P(w_t|w_1^{t-1})$
위에서 $P(w_t|w_1^{t-1})$은 조건부 확률, 즉 모델이 이전 단어를 바탕으로 t번째 단어를 예측한 확률이다. 이전 단어에 따라 $w_t$가 어떤 식으로 바뀔지를 알려주는 확률이라고 볼 수 있다.
2. $logP(w_t|w_1^{t-1})$
여기다 log값을 씌운다. log를 씌우는 이유는, 곱셈 형태로 표현되는 여러 확률 값을 더하기로 변환해서 계산을 더 쉽고 안정적으로 하기 위해서이다.
(밑이 같다고 가정하고) log의 기본 성질에 따라 예를 들면, $log2 + log4 = log(2*4)$의 형태가 되므로, 이를 더하기 형식으로 사용하기 위해 log를 붙인다고 생각하면 되겠다.
그럼 $logP(w_t|w_1^{t-1})$까지는 됐다.
3. $\sum_{t=1}^N logP(w_t|w_1^{t-1})$
이걸 t = 1부터 N까지 더한다. 즉, 모든 단어에 대해 조건부 확률을 구해서 더한다.
이렇게 하면 문장 전체의 확률을 구할 수 있다.
앞의 $P(w_1, w_2, \cdots, w_N)$이 전체 문장이나 단어 시퀀스가 등장할 확률이므로, 이를 구하기 위해 Chain Rule을 적용한 거라고 생각해도 무방하겠다.
Chain Rule은 연쇄법칙으로, 전체 확률은 각각의 확률의 곱으로 나타낼 수 있다는 것이다.
그래서 이 곱을 쉽게 처리하기 위해, 즉 계산의 편의성을 위해 로그를 취한 것이라 보면 되겠다.
4. $ \frac{1}{N} \sum_{t=1}^N logP(w_t|w_1^{t-1})$
그 다음은 $-\frac{1}{N}$이다. 이건 문장 전체의 확률의 로그값을 단어 수로 나눈 평균을 구하기 위해서이다.
여기서 perplexity의 정확한 정의에 대해 다시 한 번 짚고 넘어가보자.
perplexity는 전체 문장(또는 단어 시퀀스)에 대한 혼란도를 구하는 지표다. 하지만 이 값을 계산할 때 문장 전체의 확률을 단어 수로 정규화(기하평균)한다.
따라서, 정확한 perplexity의 정의는, 문장 전체에 대해, 단어 하나당 평균적으로 모델이 얼마나 혼란스러운지를 나타내는 수치이다.
그렇기 때문에, 1/N을 취하는 과정이 들어가는 것이다.
5. $ -\frac{1}{N} \sum_{t=1}^N logP(w_t|w_1^{t-1}) $
다음은 1/N으로 나눈 값에 음수를 취한다.
음수를 취하는 이유는 간단한데, 확률값의 로그는 음수이기 때문에, -1을 곱해 양수로 만든다.
확률이 높을수록 perplexity 값이 작아진다.
6. $ exp(-\frac{1}{N} \sum_{t=1}^N logP(w_t|w_1^{t-1}))$
마지막으로 exp를 취한다.
이는 로그로 바꾼 덧셈을 다시 곱셈(원래의 확률 공간)으로 되돌리기 위함이다.
이 과정을 전부 거치면 perplexity를 구할 수 있게 된다.
Perplexity는 모델이 각 시점에서 평균적으로 몇 개의 선택지를 갖는지에 대한 지수적 평균값이다.
또한 Perplexity 값이 낮을수록 모델이 실제 데이터에 더 높은 확률을 부여하며, 예측력이 좋다.
A Neural Probabilistic Language Model 논문에서는 테스트 세트 전체에 대한 조건부 확률의 기하평균의 역수로 계산되며, 값이 낮을수록 모델의 예측력이 높음을 의미한다.