두 모델(또는 두 조건)을 비교하는 LLM 실험에서, 프롬프트가 공정하지 않으면 측정된 차이는 모델의 차이가 아니라 프롬프트의 차이가 된다. 이 강에서는 조건 비교가 무너지는 세 지점(템플릿, 보기 위치, 디코딩 설정)을 다룬다.
프롬프트 공정성(prompt fairness)은 비교하려는 조건들 사이에서 프롬프트가 교란 변수(confounder)가 되지 않도록 통제된 상태를 말한다. 4강에서 배운 통제의 원칙을 LLM 실험에 적용한 것이다: 독립 변수(모델, 학습 방법, 데이터 등)만 다르고 나머지는 전부 같아야, 종속 변수(정확도 등)의 차이를 독립 변수 탓으로 돌릴 수 있다.
일반 소프트웨어 실험과 달리 LLM 실험에서 이 통제가 유난히 어려운 이유는 하나다. LLM의 출력은 입력 문자열의 사소한 표면 변화에 민감하다. 공백 하나, 보기 순서, 지시문의 말투가 정확도를 수 퍼센트포인트 단위로 흔든다는 보고가 반복적으로 나왔다. 사람이 보기에 "같은 문제"라도 모델에게는 다른 문제일 수 있다.
한국어 초성 줄임말 이해를 4지선다로 평가하는 실험을 예로 들자. "모델 A가 모델 B보다 초성어를 잘 이해한다"고 주장하려면, 두 모델이 받은 프롬프트가 같은 템플릿, 같은 보기 배치, 같은 디코딩 설정이어야 한다. 셋 중 하나라도 다르면, 관찰된 차이는 "모델의 이해력 차이"와 "프롬프트 조건 차이"가 섞인 값이 되고, 둘을 분리할 방법이 없다.
주의: 프롬프트 공정성은 "평가를 어떻게 설계할 것인가"(객관식 vs 자유 생성, 채점 방식)와는 다른 문제다. 그쪽은 17강에서 다룬다. 이 강은 설계가 정해진 뒤 조건 간 비교를 오염시키는 변수들만 다룬다.
프롬프트 엔지니어링은 한 모델의 성능을 끌어올리는 활동이고, 프롬프트 공정성은 여러 조건의 비교를 지키는 규율이다. 둘은 목적이 반대 방향이다. 엔지니어링은 프롬프트를 자유롭게 바꾸라고 말하고, 공정성은 바꾸려면 모든 arm에 똑같이 바꾸거나 아예 변수로 승격하라고 말한다.
"각 모델에 최적화된 프롬프트로 비교하는 것이 오히려 공정하다"는 반론이 있고, 실제로 그런 설계도 존재한다. 다만 그 경우 연구 질문 자체가 바뀐다는 것을 알아야 한다. "같은 조건에서 어느 모델이 나은가"가 아니라 "각자 최선의 프롬프트를 줬을 때 어느 모델이 나은가"가 되며, 후자를 택했다면 (1) 프롬프트 최적화 예산(시도 횟수, 사용한 개발 데이터)을 모델별로 동일하게 배정하고, (2) 최적화에 test 셋을 절대 쓰지 않으며(6강), (3) 최적화 절차 자체를 사전에 고정해야 한다. 어느 질문을 묻는지 정하지 않고 프롬프트만 손보는 것이 문제다.
프롬프트 템플릿(prompt template)은 문제를 모델 입력 문자열로 바꾸는 틀이다. 예를 들면 이렇다.
다음 초성 줄임말의 뜻으로 가장 알맞은 것을 고르시오.
줄임말: {abbrev}
A. {choice_a}
B. {choice_b}
C. {choice_c}
D. {choice_d}
정답:
흔한 실수는 arm마다 템플릿을 "그 모델에 맞게" 손보는 것이다. 모델 A에는 위 템플릿을, 모델 B에는 "너는 한국어 신조어 전문가야"라는 시스템 문장을 붙인 템플릿을 쓰는 식이다. 이 순간 실험은 "모델 A vs 모델 B"가 아니라 "모델 A + 템플릿 1 vs 모델 B + 템플릿 2"의 비교가 된다. 어느 쪽이 이겨도 원인을 말할 수 없다.
더 미묘한 변형도 같은 문제를 일으킨다.
| 표면상 사소한 차이 | 실제 영향 |
|---|---|
보기 표기: A. vs (A) vs A) |
정답 표기 확률 분포가 달라진다 |
| 지시문 위치: 문제 앞 vs 뒤 | 최근성 효과로 응답 경향이 달라진다 |
| 개행·공백 개수 | 토큰화가 달라져 출력이 달라질 수 있다 |
| few-shot 예시의 개수·순서 | 예시 순서만 바꿔도 정확도가 흔들린다 |
실제로 프롬프트 형식 민감성을 체계적으로 조사한 연구들은, 의미가 동일하고 형식만 다른 템플릿들 사이에서 같은 모델의 벤치마크 점수가 크게 벌어진다는 것을 반복 확인했다. 형식 선택 하나가 모델 간 순위를 뒤집을 수 있는 크기였다. 즉 "우연히 고른 템플릿 하나"로 잰 점수는 그 모델의 능력이 아니라 그 (모델, 템플릿) 쌍의 점수다.
conf/의 설정 파일에 템플릿 문자열을 두고, 모든 arm이 같은 키를 참조하게 한다. arm 정의(conf/arms.yaml)에 템플릿이 끼어들면 통제가 깨진 것이다.보기 위치 편향(option position bias)은 객관식 평가에서 모델이 내용과 무관하게 특정 위치의 보기를 더 자주 고르는 경향이다. 많은 모델이 첫 보기(A)나 특정 기호를 선호하는 경향을 보이며, 그 방향과 크기는 모델마다 다르다.
이것이 비교를 무너뜨리는 시나리오는 두 가지다.
이 현상은 LLM-judge 평가에서도 같은 얼굴로 나타난다. 두 응답을 나란히 주고 어느 쪽이 나은지 LLM에게 판정시키는 쌍대 비교 연구들에서, 판정자 모델이 내용과 무관하게 먼저 제시된 응답을 선호하는 위치 편향이 널리 보고되었다. 이후 쌍대 비교 평가에서는 두 응답의 순서를 바꿔 두 번 판정시키고 결과가 갈리면 무승부로 처리하는 절차가 표준처럼 자리 잡았다. 판정 순환성 문제 자체는 17강에서 다룬다.
같은 프롬프트라도 디코딩(decoding) 설정(temperature, top-p, 최대 생성 길이, 정지 조건)이 다르면 다른 출력이 나온다. 이것들도 전부 통제 대상이다. arm마다 temperature가 다르면 그 순간 비교는 끝난다.
흔한 오해 두 가지를 짚는다.
오해 1: "temperature=0이면 결정론적이므로 시드가 필요 없다." 근사적으로만 맞다. 탐욕 디코딩도 부동소수점 연산 순서, 배치 구성, 서빙 인프라에 따라 출력이 흔들릴 수 있고, 상용 API는 시드 파라미터를 주더라도 완전한 재현을 보장하지 않는 경우가 많다. 따라서 temperature=0이라도 "한 번 돌린 값"을 확정 수치로 취급하면 안 되며, 같은 설정으로 반복 실행해 변동 폭을 확인해야 한다. 로컬 모델이라면 결정론 모드(이 연구실 하네스는 비결정론 커널을 오류로 처리한다)로 상당 부분 통제된다. 상세는 13강과 20강에서 다룬다.
오해 2: "temperature>0이면 시드를 고정하면 된다." 시드 고정은 재현을 위한 것이지 대표성을 위한 것이 아니다. 확률적 디코딩에서 시드 하나의 출력은 출력 분포에서 뽑은 표본 하나다. 13강에서 학습 시드 하나로 보고하는 것이 위험하다고 배운 것과 정확히 같은 논리로, 디코딩 시드 하나의 점수로 결론을 내리면 안 된다. 시드 여러 개로 돌려 평균과 산포를 보고한다. 시드 간 산포가 arm 간 차이보다 크다면, 그 차이는 아직 결론이 아니다(표본 크기 논의는 12강).
세 문제는 결국 하나의 문장으로 정리된다. 프롬프트·배치·디코딩은 전부 실험 조건이며, 조건은 arm 간에 동일하거나, 변수로 승격해 통제된 방식으로 변화시켜야 한다. "그냥 다르게 두는 것"만이 허용되지 않는다.
이 연구실의 파이프라인 관례는 이 원칙을 구조로 강제하는 장치다. 템플릿·배치 시드·디코딩 설정이 전부 conf/ 설정으로 들어가고 파이프라인이 그 설정으로부터 결과를 재생성하므로(20강), "어느 arm에 어떤 프롬프트를 썼는지 기억나지 않는" 상태가 원천적으로 만들어지지 않는다. 사전 등록(14강) 문서에는 템플릿 전문과 디코딩 설정을 그대로 붙여 고정한다.
실험을 돌리기 전 점검표로 쓰면 다음과 같다.
| 점검 항목 | 통과 기준 |
|---|---|
| 템플릿 | 모든 arm이 같은 설정 키의 같은 템플릿을 참조한다 |
| 채팅 포맷 | 모델별 공식 채팅 템플릿을 기계적으로 적용했고, 내용물은 동일하다 |
| 정답 위치 | A/B/C/D 분포가 균등하고, 배치 시드가 기록되어 있다 |
| 배치본 | 모든 arm이 같은 배치 파일을 읽는다 |
| 디코딩 | temperature·top-p·최대 토큰·정지 조건이 설정에 명시되고 arm 간 동일하다 |
| 반복 | 탐욕이면 반복 실행 계획, 확률적이면 디코딩 시드 3개 이상이 정해져 있다 |
| 모델 버전 | 날짜 박힌 버전 식별자와 호출 시각을 기록한다 |
| 고정 시점 | 위 항목이 결과를 보기 전에 확정되었고, 이후 바꾸지 않았다 |
논문에 쓸 때는 이 표의 내용이 곧 재현 정보다. 템플릿 전문, 배치 규칙, 디코딩 설정, 반복 횟수를 본문 또는 부록에 그대로 싣는다. "표준적인 프롬프트를 사용했다"는 문장은 재현 가능한 서술이 아니다.
마지막으로, 공정성 통제는 결과를 초라하게 만들 수 있다. 위치 순열 평가와 다중 시드를 적용하면 점수가 내려가고 신뢰구간이 넓어지는 것이 보통이다. 그것은 실험이 망가진 것이 아니라 부풀려져 있던 측정이 제자리를 찾은 것이다(음성 결과의 가치는 16강).