Perplexity
퍼플렉서티는 텍스트에 대한 모델의 교차 엔트로피를 지수화한 값입니다. 계산 방법, 공정한 모델 비교 방법, 점수 산출 이외의 활용 사례를 알아보세요.
퍼플렉서티는 확률 모델이 시퀀스를 얼마나 잘 예측하는지 측정하는 지표입니다. 모델이 실제 다음 토큰에 부여한 평균 음의 로그 우도에 지수를 취해 계산합니다. 값이 낮을수록 좋습니다. 퍼플렉서티가 10이라면 모델은 각 단계에서 10개 선택지 중 하나를 균등하게 고르는 것만큼 평균적으로 불확실하다는 뜻이며, 그래서 이 값은 유효 분기 계수로 해석되는 경우가 많습니다. Frederick Jelinek, Robert Mercer, Lalit Bahl, James Baker는 1977년 IBM에서 음성 인식 작업의 난이도를 측정하기 위해 이 지표를 도입했으며, 퍼플렉서티는 언어 모델링의 표준 내재적 지표로 남아 있습니다. 예를 들어 OpenAI의 15억 파라미터 GPT-2는 2019년 학습에 사용하지 않은 WikiText-103 벤치마크에서 퍼플렉서티 17.48을 기록했습니다.
이 용어는 서로 관련 없는 두 가지 대상을 가리키기도 합니다. Perplexity AI는 AI 검색 엔진 기업이며, t-SNE의 퍼플렉서티 하이퍼파라미터는 t-SNE가 고차원 데이터의 2D 지도를 만들 때 각 점이 고려하는 이웃의 대략적인 수를 설정합니다.
퍼플렉시티 계산하기#
토큰 N개로 이루어진 시퀀스에서 퍼플렉서티 = exp(-(1/N) x 모든 이전 토큰을 조건으로 한 log p(token_i)의 합)입니다. 지수 안의 값은 텍스트와 모델 예측 간의 교차 엔트로피로, 대규모 언어 모델(LLM)을 학습하는 데 사용하는 것과 같은 손실 함수입니다. 자연로그를 사용하면 밑은 e이고, 밑이 2인 로그를 사용하면 밑은 2이며 둘 다 같은 퍼플렉서티를 산출합니다. PyTorch의 교차 엔트로피 손실은 자연로그를 사용하고 기본적으로 토큰 전체의 평균을 구하므로, 언어 모델의 퍼플렉서티는 단순히 exp(loss)입니다.
import math
# Probability the model assigned to each correct next token
token_probs = [0.50, 0.25, 0.80, 0.40]
# Cross-entropy is the average negative log-likelihood, in nats
cross_entropy = -sum(math.log(p) for p in token_probs) / len(token_probs)
print(f"Cross-entropy: {cross_entropy:.3f}, perplexity: {math.exp(cross_entropy):.2f}")
# A model that spreads probability evenly over 10 tokens has perplexity 10
uniform = -sum(math.log(0.1) for _ in token_probs) / len(token_probs)
print(f"Uniform perplexity: {math.exp(uniform):.2f}")네 가지 확률로 계산한 교차 엔트로피는 0.805 낫이고 퍼플렉시티는 2.24입니다. 따라서 모델은 각 단계에서 동일한 확률을 가진 약 두 개의 토큰 중 하나를 고르는 것처럼 작동합니다. 균등 분포 사례는 분기 계수 해석을 확인해 줍니다. 올바른 토큰마다 확률 0.1을 부여하면 정확히 10이 됩니다.
긴 문서는 주의가 필요합니다. 고정된 컨텍스트 윈도우를 사용하는 모델은 텍스트를 청크 단위로 점수화하며, 겹치지 않는 청크의 시작 부분에 있는 토큰은 거의 컨텍스트를 보지 못해 퍼플렉서티가 높아집니다. 슬라이딩 윈도우 평가는 청크를 겹치게 해 모든 토큰이 모델이 허용하는 최대한의 이전 컨텍스트를 보도록 합니다. 대신 계산량이 늘어납니다.
모델을 공정하게 비교하기#
퍼플렉시티 비교는 동일한 텍스트를 동일한 토큰화 방식으로 평가한 모델 사이에서만 가능합니다. 어휘가 더 큰 모델은 텍스트를 더 적고 예측하기 어려운 토큰으로 나누므로, 토큰별 퍼플렉시티를 더 작은 토큰을 사용하는 모델과 직접 비교할 수 없습니다. 총 로그 가능도를 바이트 수 또는 문자 수로 정규화해 바이트당 비트 수나 문자당 비트 수로 보고하면 이러한 의존성이 제거됩니다.
테스트 데이터는 학습 데이터에 포함되지 않아야 합니다. 이전에 본 구절에는 모델이 비정상적으로 높은 확률을 부여하므로 이러한 데이터 누출은 퍼플렉서티를 실제 성능보다 좋게 보이게 합니다. 이와 같은 효과는 멤버십 추론 공격에도 작용합니다. 이 공격은 의심스러울 정도로 낮은 퍼플렉서티를 보이는 텍스트를 학습 데이터일 가능성이 높은 것으로 표시합니다.
퍼플렉서티는 고정된 텍스트에서 다음 토큰 예측을 평가합니다. 채팅 모델은 요청을 따르고 인간의 선호에 맞추기 위해 지시 튜닝과 인간 피드백 기반 강화 학습(RLHF)을 거치므로, 작업 벤치마크와 인간 선호도 평가를 통해 비교합니다.
모델 비교 외의 활용#
데이터 큐레이션은 주요 활용 사례입니다. Facebook AI 연구자들이 2019년에 공개한 CCNet 파이프라인은 위키백과로 학습한 언어 모델을 사용해 Common Crawl 페이지의 점수를 매기고, 퍼플렉서티에 따라 상위, 중간, 하위 3분위로 나눴습니다. 퍼플렉서티가 낮은 상위 그룹은 품질이 가장 높은 텍스트로 취급되었습니다. 많은 사전 학습 파이프라인도 웹 규모의 데이터 정제 과정에서 비슷한 방식으로 웹 데이터를 필터링합니다. GPTZero와 같은 AI 텍스트 탐지기도 퍼플렉서티를 측정합니다. 언어 모델에서 샘플링한 텍스트가 사람의 글보다 예측하기 쉬운 경향이 있기 때문입니다.
이 공식은 교차 엔트로피로 학습한 모든 모델에 적용됩니다. Ultralytics YOLO26 분류 모델은 평균 교차 엔트로피 손실로 학습하므로 exp(검증 손실)은 실제 클래스 레이블에 대한 퍼플렉시티입니다. 검증 손실 0.35는 퍼플렉시티 약 1.42에 해당하며, 이는 평균적인 이미지에서 모델이 약 1.4개의 클래스 사이에서 망설이는 것처럼 신뢰도를 분산한다는 뜻입니다.










