🤖 AI/ML

Perplexity

Perplexity

언어 모델의 예측 불확실성 지표. 낮을수록 좋은 모델.

📖 상세 설명

Perplexity는 두 가지 의미로 사용됩니다. 첫째, 언어 모델의 예측 능력을 측정하는 평가 지표입니다. 모델이 다음 토큰을 얼마나 "당혹스러워"하는지를 나타내며, 낮을수록 더 좋은 모델입니다. 둘째, AI 검색 엔진 회사인 Perplexity AI를 지칭합니다.

평가 지표로서 Perplexity는 정보이론에서 유래했습니다. 수학적으로 교차 엔트로피(Cross-Entropy)의 지수값으로 정의됩니다. GPT-2는 WikiText-103에서 PPL 17.48을 달성했고, GPT-3는 이를 크게 개선했습니다. Perplexity AI는 2022년 설립되어 LLM 기반 검색 서비스를 제공합니다.

Perplexity 지표의 핵심 원리는 모델이 예측하는 확률 분포와 실제 분포 간의 차이를 측정하는 것입니다. PPL = 2^(H(p,q))로 계산되며, H(p,q)는 교차 엔트로피입니다. 완벽한 예측은 PPL=1이고, 어휘 크기가 V인 균등 분포 예측은 PPL=V입니다.

실무에서 Perplexity는 언어 모델 비교, 파인튜닝 평가, 도메인 적응 성공 여부 판단에 사용됩니다. Perplexity AI 서비스는 GPT-4, Claude 등을 활용한 AI 검색으로 기존 검색 엔진의 대안으로 주목받고 있습니다.

💻 코드 예제

# Perplexity 계산 예제
import torch
import math
from transformers import GPT2LMHeadModel, GPT2Tokenizer

# 1. 모델 및 토크나이저 로드
model = GPT2LMHeadModel.from_pretrained("gpt2")
tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
model.eval()

def calculate_perplexity(text, model, tokenizer):
    """텍스트의 Perplexity 계산"""
    encodings = tokenizer(text, return_tensors="pt")
    input_ids = encodings.input_ids

    with torch.no_grad():
        outputs = model(input_ids, labels=input_ids)
        # Cross-Entropy Loss
        loss = outputs.loss
        # Perplexity = e^(loss)
        perplexity = math.exp(loss.item())

    return perplexity

# 2. 예제 텍스트로 PPL 계산
text1 = "The quick brown fox jumps over the lazy dog."
text2 = "Purple elephants dance quantum mechanics pizza."

ppl1 = calculate_perplexity(text1, model, tokenizer)
ppl2 = calculate_perplexity(text2, model, tokenizer)

print(f"자연스러운 문장 PPL: {ppl1:.2f}")  # 낮음
print(f"비자연스러운 문장 PPL: {ppl2:.2f}")  # 높음

# 3. Hugging Face evaluate 라이브러리 사용
from evaluate import load
perplexity_metric = load("perplexity", module_type="metric")

# 데이터셋 전체 PPL 계산
texts = ["Hello world.", "AI is transforming the world."]
results = perplexity_metric.compute(
    predictions=texts,
    model_id="gpt2"
)
print(f"평균 PPL: {results['mean_perplexity']:.2f}")

📊 성능 & 비용

2025년 1월 기준 - Perplexity AI 서비스 요금제

플랜가격주요 기능
Free$0기본 검색, 일일 제한 있음
Pro$20/월 ($200/년)300+ Pro 검색/일, GPT-4/Claude 접근, $5 API 크레딧
Max$200/월 ($2,000/년)무제한 Pro 검색, 고급 모델 접근
Enterprise Pro$40/사용자/월팀 기능, SSO, 관리 도구
Enterprise Max$325/사용자/월엔터프라이즈 보안, 컴플라이언스

API 가격: Sonar 모델 $1/1M 토큰(입출력), Search API $5/1,000 요청

🗣️ 실무에서 이렇게 말하세요

💬 회의에서
"도메인 데이터로 파인튜닝 후 Perplexity가 45에서 23으로 낮아졌습니다. 해당 도메인에 대한 모델의 이해도가 크게 향상된 것으로 볼 수 있습니다."
💬 면접에서
"Perplexity는 Cross-Entropy Loss의 지수값으로, 모델이 평균적으로 몇 개의 선택지 중에서 고민하는지를 나타냅니다. PPL=10이면 매 토큰 예측 시 약 10개 후보 중 고민한다는 의미입니다."
💬 기술 토론에서
"Perplexity만으로 모델 품질을 평가하긴 어렵습니다. 낮은 PPL이 반드시 좋은 생성 품질을 의미하지 않아서, BLEU, ROUGE, 인간 평가도 함께 사용해야 합니다."

⚠️ 흔한 실수 & 주의사항

다른 토크나이저 모델 간 PPL 비교

어휘 크기와 토큰화 방식이 다르면 PPL을 직접 비교할 수 없습니다. 동일 데이터셋, 동일 토크나이저 조건에서만 비교하세요.

학습 데이터로 PPL 측정

학습 데이터에서 측정한 PPL은 과적합으로 인해 낮게 나옵니다. 반드시 별도의 테스트 세트로 측정하세요.

올바른 방법

표준 벤치마크(WikiText, PTB 등)에서 측정하고, 동일 조건의 모델들과 비교하세요. 다운스트림 태스크 성능도 함께 평가합니다.

🔗 관련 용어

📚 더 배우기