용어집 · 테스트 분야의 AI
LLM 평가(LLM Evaluation)
영어: LLM evaluation
다른 이름: evals, LLM 평가, LLM 이밸류에이션, 모델 평가
정의
출력이 매번 달라 정확한 어설션이 맞지 않는 LLM 기반 기능의 품질을, 고정된 입력 세트와 기준으로 체계적으로 측정하는 것입니다.
LLM 평가(LLM evaluation, “evals”)는 대규모 언어 모델 위에 만든 기능을 테스트하는 방법입니다. 고정된 입력 세트로 기능을 실행하고, 각 출력을 정의된 기준에 따라 채점하고, 점수를 시간에 따라 추적합니다. 전통적인 테스트는 정확한 기대값 하나를 어설션합니다. LLM 출력은 실행마다 달라지는 자유 텍스트이므로, 평가는 정확한 일치 대신 결정적 검사, 채점 점수, 사람 검토를 섞어 쓰며, 예시 하나가 아니라 많은 케이스에 걸친 통과율로 기능을 판단합니다.
예시
레이블이 달린 데이터셋으로 평가하는 고객 지원 티켓 분류기:
import { readFileSync } from 'node:fs';
import { classifyTicket } from '../src/classifier';
type Case = { input: string; expected: 'billing' | 'bug' | 'account' | 'other' };
const cases: Case[] = JSON.parse(readFileSync('evals/tickets.json', 'utf8'));
let correct = 0;
for (const c of cases) {
const result = await classifyTicket(c.input);
if (result.label === c.expected) correct++;
else console.log(`MISS expected=${c.expected} got=${result.label} :: ${c.input}`);
}
const accuracy = correct / cases.length;
console.log(`accuracy ${(accuracy * 100).toFixed(1)}% over ${cases.length} cases`);
if (accuracy < 0.9) process.exit(1); // regression gate
검사의 종류 (신뢰도 높은 순)
- 결정적(deterministic) 검사. 유효한 JSON인지, 스키마와 일치하는지, 필수 필드를 포함하는지, 길이 제한 이내인지, 허용된 레이블 중 하나를 골랐는지. 저렴하고 반복 가능하므로 적용할 수 있는 곳에는 모두 쓰세요.
- 참조 기반 검사. 알려진 좋은 답변과 비교합니다. 레이블은 정확한 일치로, 자유 텍스트는 중첩도나 유사도 점수로 비교합니다. 유사도 점수는 대략적이라 보정이 필요합니다.
- 모델 채점. 다른 LLM이 루브릭에 따라 출력을 채점합니다(LLM-as-judge). 자유 형식 텍스트에도 확장할 수 있지만 자체적인 오류를 동반합니다.
- 사람 검토. 미묘한 품질을 판단하는 데 가장 신뢰할 수 있으며, 자동 검사를 보정하는 기준이 됩니다.
확립된 것과 아직 변하고 있는 것
확립된 것: 버전 관리되는 데이터셋으로 평가하기, 프롬프트나 모델을 바꿀 때마다 평가 실행하기, 점수를 시간에 따라 추적하기, 프롬프트 인젝션 같은 적대적 케이스 포함하기. 아직 변하고 있는 것: 자유 생성에 대한 지표 선택, 모델 채점 점수를 어디까지 신뢰할지, 그리고 빠르게 바뀌는 도구들입니다.
흔한 실수
몇 번의 수동 대화로 변경을 판단하는 것, 실제 변화와 노이즈를 구분하기에는 너무 적은 케이스를 쓰는 것, 출력이 달라지는데 케이스를 한 번만 실행하는 것(여러 번 실행해 분산을 보고하세요), 그리고 실제 사용자 트래픽이 변하는 동안 평가 세트를 낡게 방치하는 것입니다.