모델 운영

MLOPS / 67번째 글

선호 데이터 수집 — 점수를 매기지 말고 둘 중 하나를 고르게 한다

5점 척도는 사람마다 기준점이 달라 흩어집니다. 둘을 놓고 나은 쪽을 고르게 하면 그 흔들림이 사라집니다. 쌍 비교를 설계하고 순위로 바꾸는 방법을 정리합니다.

PALDYN Team10 MIN READ

지난 글에서 정답을 붙이기 어려운 자리가 하나 있었다. 긴 답변이다. 요약이나 상담 답변에는 맞는 답이 하나가 아니라서, 「이 답이 정답인가」라는 질문 자체가 성립하지 않는다.

그럴 때 흔히 쓰는 방법이 5점 척도다. 사람에게 답을 보이고 몇 점인지 매기게 한다. 해 보면 곧 이상한 일이 생긴다. 같은 답에 어떤 사람은 3점을, 어떤 사람은 5점을 준다.

척도가 흔들리는 이유

흩어짐의 원인은 답이 애매해서가 아니다. 「4점」이라는 말의 뜻이 사람마다 다르기 때문이다.

점수를 매기게 하면 흩어지고, 고르게 하면 모인다

후하게 주는 사람은 웬만하면 4점부터 시작하고, 짜게 주는 사람은 5점을 아낀다. 같은 사람도 오전과 오후가 다르고, 앞에서 좋은 답을 몇 개 보고 나면 다음 답이 상대적으로 나빠 보인다. 점수를 매기는 일은 답과 자기 머릿속 기준선을 함께 재는 일이라서, 그 기준선이 흔들리면 결과도 흔들린다.

그런데 오른쪽처럼 두 답을 나란히 놓고 「어느 쪽이 나은가」만 물으면 이 문제가 상당 부분 사라진다. 기준선이 후하든 짜든 두 답에 똑같이 적용되므로 비교에서는 상쇄되기 때문이다. 이렇게 모은 「A보다 B가 낫다」의 기록을 선호 데이터라 부른다.

절대 점수 쌍 비교
사람 사이 일치도 낮다 높다
한 판단에 드는 시간 짧다 길다 (둘을 다 읽는다)
필요한 판단 수 후보 수만큼 짝 수만큼
바로 읽히는가 점수가 곧 결과 순위로 바꾸는 계산이 한 겹

쌍 비교가 공짜는 아니다. 후보가 늘면 짝이 제곱으로 늘고, 결과가 「B가 A보다 낫다」의 더미라서 그대로는 보고서에 못 쓴다. 그래서 계산이 한 겹 붙는다.

고른 기록을 점수로 바꾼다

여러 짝의 승패 기록을 한 축 위의 점수로 옮기는 방법이 있다. 후보 ii 에 점수 sis_i 를 하나씩 붙이고, 두 후보의 승부를 이렇게 본다.

P(i≻j)=11+e−(si−sj)P(i \succ j) = \frac{1}{1 + e^{-(s_i - s_j)}}

관측한 승패가 가장 그럴듯해지도록 ss 들을 맞추는 것이 브래들리–테리 모형이다. 체스의 일로 레이팅이 같은 뼈대를 쓰고, 언어 모델 순위표에서 쓰는 점수도 대개 이 계산이다.

고른 기록이 한 축 위의 점수가 된다

이 식에서 실제로 쓸모 있는 성질이 둘이다.

  • 차이만 뜻이 있다. 모든 점수에 100을 더해도 확률이 그대로다. 그러니 「A가 0.73점」은 혼자서는 아무 뜻이 없고, 「A가 B보다 0.63 높다」만 뜻이 있다
  • 차이가 곧 승률이다. 0.63 차이면 약 65%, 1.4 차이면 약 80%다. 점수 차를 보고 「열 번에 몇 번 이기나」로 곧장 옮겨 읽을 수 있다

정확한 계산은 라이브러리에 맡기면 되지만, 감을 잡는 데는 각 후보의 전체 승률을 로그 오즈로 바꿔 보는 것만으로도 충분할 때가 많다. 위 그림의 숫자가 그렇게 얻은 값이다.

어떻게 물을 것인가

수집 설계에서 결과를 가장 크게 흔드는 것이 질문 문구와 화면 배치다. 몇 가지는 반드시 지켜야 한다.

좌우를 무작위로 섞는다. 사람은 왼쪽을 더 고른다. 우리 모델을 항상 왼쪽에 두면 그 편향이 통째로 점수에 들어간다. 어느 쪽이 어느 모델인지도 평가자에게 알리지 않는다.

「더 좋은 답」이라고만 묻지 않는다. 무엇이 좋은지 사람마다 다르므로 물어볼 축을 정해 준다. 「사실이 정확한 쪽」, 「지시를 따른 쪽」, 「읽기 편한 쪽」은 서로 다른 답을 낸다. 축을 둘 이상 물을 거라면 각각 따로 묻는다.

동점을 허용하되 값을 다르게 센다. 동점을 막으면 평가자가 억지로 고르게 되어 잡음이 는다. 허용하면 절반쯤이 동점으로 몰리기도 한다. 「비슷하다」와 「확실히 낫다」를 나눠 넉넉히 넷 정도의 선택지를 두는 편이 낫다.

선택지 승점
A가 확실히 낫다 A 1.0
A가 조금 낫다 A 0.75
비슷하다 각 0.5
B가 조금 낫다 B 0.75

길이를 보정한다. 사람은 긴 답을 더 좋게 보는 경향이 뚜렷하다. 두 후보의 평균 길이가 크게 다르면 점수 차이의 상당 부분이 길이 차이일 수 있다. 길이가 비슷한 짝만 따로 모아 점수를 다시 내 보면 얼마나 섞여 있는지 알 수 있다.

몇 번을 비교해야 하나

후보 nn 개의 짝은 n(n−1)/2n(n-1)/2 개다. 후보 열 개면 45짝이고, 짝마다 20회면 900회다. 사람에게 이 일을 시키면 한 판단에 1분씩 잡아도 15시간이다.

전부 비교하지 않고 줄이는 방법이 둘 있다.

  • 기준 후보를 하나 둔다. 지금 쓰는 모델을 기준으로 삼고 모든 후보를 그것하고만 비교한다. 짝이 n−1n-1 개로 줄고, 「지금보다 나은가」라는 우리가 실제로 궁금한 질문에 바로 답한다
  • 비슷한 후보에 비교를 몰아 준다. 점수 차가 이미 큰 짝은 몇 번만 봐도 결론이 안 바뀐다. 붙어 있는 짝에 비교를 더 배정하면 같은 예산으로 순위가 더 또렷해진다

사람 대신 모델에게 고르게 하는 방법도 널리 쓴다. 값이 훨씬 싸고 좌우 편향과 길이 편향은 사람보다 오히려 심하지만, 편향의 방향이 일정해서 보정하기 쉽다. 다만 모델 판정과 사람 판정이 얼마나 맞는지는 반드시 따로 재 둔다. 사람이 붙인 짝 200개쯤에 같은 판정을 시켜 일치율을 보는 것으로 충분하고, 이 수치가 없으면 모델 판정으로 얻은 순위를 얼마나 믿어야 할지 알 수 없다.

평가 밖에서도 쓰인다

이렇게 모은 선호 데이터는 평가에만 쓰이지 않는다. 「A보다 B가 낫다」의 짝은 그대로 모델을 학습시키는 재료가 된다 — 정답을 적어 주는 대신 두 답의 우열만 알려 주고 학습시키는 방법들이 이 데이터를 먹는다.

그래서 수집 단계에서 버리는 것을 아깝게 여기는 편이 좋다. 최종 선택뿐 아니라 어느 짝을 보였는지, 평가자가 누구였는지, 얼마나 확신했는지, 무엇을 근거로 골랐는지까지 남긴다. 나중에 평가자별 편향을 보정하거나 확신이 높은 짝만 골라 쓸 때 필요해지는데, 그때 가서는 다시 모을 수 없다.

정리

절대 점수가 흔들리는 것은 사람이 부주의해서가 아니라 그 질문이 두 가지를 한꺼번에 묻기 때문이다. 둘 중 하나를 고르게 하면 기준점이 상쇄되고, 고른 기록은 계산 한 겹을 거쳐 다시 한 축 위의 점수가 된다.

남은 문제가 하나 있다. 그렇게 얻은 점수 차이가 정말 차이인지를 어떻게 아는가.


읽어주셔서 감사합니다. 😊

LATEST

모델 운영의 최신 글

모델 운영2026.09.04

KV 캐시 양자화 — 가중치보다 이쪽이 먼저 넘친다

긴 문맥에서 GPU 메모리를 실제로 잡아먹는 것은 가중치가 아니라 KV 캐시입니다. 캐시 크기를 계산하는 법, K와 V를 다르게 다뤄야 하는 이유, 어디까지 줄여도 되는지를 정리합니다.

16 MIN
모델 운영2026.09.04

양자화 보정 — 데이터 128개가 모델 품질을 정한다

양자화에서 스케일을 정하는 절차가 보정입니다. 무엇을 재는지, 데이터를 어디서 몇 개 뽑아야 하는지, 자르는 지점을 어떻게 고르는지, 그리고 잘못된 보정이 어떤 모양으로 드러나는지를 정리합니다.

21 MIN
모델 운영2026.09.03

과제 특화 증류 — 큰 모델의 답을 작은 모델에 옮긴다

범용 성능이 아니라 우리 과제 하나만 잘하는 작은 모델을 만드는 방법입니다. 교사에게 무엇을 받아야 하는지, 데이터를 어떻게 모으고 거르는지, 손익 분기가 어디인지를 정리합니다.

15 MIN