본문으로 건너뛰기
← Systems Notebook / AI
데이터 설계02 / 03

모델이 배울 만한 데이터를 만드는 과정

문서에서 문제를 만들고 정답을 검수한 뒤, 교사와 학생의 차이·다양성·분리된 평가를 하나의 제작 과정으로 연결합니다.

홍범연구 기반 해설약 21분

표를 읽는 모델을 개선하려고 질문을 더 만들었는데도, 증가량과 증가율을 계속 혼동하는 상황을 생각해 보겠습니다. 상품 이름과 숫자를 바꾸고 질문을 다르게 표현해도 같은 실패가 남을 수 있습니다.

이 상황에서 데이터가 부족하다는 말은 절반만 맞습니다. 부족한 것은 행일 수도 있지만, 현재 모델이 실패하는 판단을 연습할 기회일 수도 있습니다. ‘2월에 가장 많이 팔린 상품’을 묻는 문제를 늘려도 ‘기준값이 다른 두 상품의 증가율’을 비교하는 연습이 되지는 않습니다.

좋은 학습 데이터를 만들려면 원문, 과제, 학습 신호, 평가를 연결해야 합니다. 문서에서 문제를 생성하는 일은 그중 한 단계입니다. 생성한 문제가 맞는지, 교사가 학생보다 나은 답을 주는지, 특정 유형에만 몰리지 않았는지, 배운 것이 새로운 자료로 옮겨가는지까지 확인해야 데이터 제작의 결과를 설명할 수 있습니다.

이 글에서는 하나의 가상 판매 표로 그 과정을 따라갑니다. 모든 표와 질문, 답 분포는 설명을 위해 작성한 예입니다. Golden Goose, DeltaPrompts, Vendi Score는 서로 다른 문제를 다루는 연구이며, 아래 작업 흐름은 이들을 참고해 구성한 편집자의 설계입니다.

원문을 늘리는 일과 연습할 판단을 늘리는 일

먼저 같은 자료에서 어떤 판단을 연습할 수 있는지 살펴보겠습니다. A 상품은 1월에 100개, 2월에 120개가 팔렸습니다. B 상품은 같은 기간 50개에서 70개로 늘었습니다.

상품 1월 2월 증가량 1월 대비 증가율
A 100 120 20 20%
B 50 70 20 40%

표를 바꾸지 않아도 여러 판단을 연습시킬 수 있습니다. ‘2월 판매량이 큰 상품’은 값의 비교입니다. ‘증가량이 큰 상품’은 두 차이를 계산한 뒤 같다고 답하는 문제입니다. ‘증가율이 큰 상품’은 각 상품의 기준량을 분모로 삼아야 합니다. ‘증가율 차이’는 20퍼센트포인트이며, B의 증가율이 A의 몇 배인지 묻는다면 2배입니다.

같은 숫자에 다른 질문을 붙이는 것만으로 모델이 무엇을 혼동하는지 나눌 수 있습니다. 반대로 질문은 똑같이 두고 숫자만 바꾼 백 개의 행은, 이 판단 중 하나만 반복할 수도 있습니다.

필요한 값이 빠졌을 때 모델이 어떻게 답해야 하는지도 과제로 만들 수 있습니다. B의 1월 값이 없으면 증가율을 계산할 근거가 부족합니다. 기준값이 0이라면 통상적인 (새 값-기준값)/기준값 계산은 정의되지 않습니다. 두 경우 모두 아무 숫자나 만들어 답하는 것을 정답으로 삼을 수 없습니다. 값이 빠진 경우와 0인 경우는 서로 다른 이유로 계산을 멈춰야 합니다.

과제를 판단의 종류에 따라 나누면 데이터 구성을 더 구체적으로 설명할 수 있습니다. 원문 한 개에서 질문 몇 개를 뽑았는지에 더해, 값 비교·차이·비율·단위·판단 보류 중 어떤 판단을 연습하는지 보입니다. 처음부터 모든 조합을 대량 생성하기보다 학생의 실패를 이 분류에 놓고 빈 곳을 찾는 편이 작업의 이유를 설명하기 쉽습니다.

같은 자료, 다른 판단

어떤 질문을 연습시키는가

자료를 읽는 것, 차이를 계산하는 것, 기준값을 구분하는 것은 서로 다른 과제입니다.

작성자가 만든 판매량 자료, 단위: 개
상품1월2월
A100120
B5070

A는 120개, B는 70개입니다. 2월 판매량은 A가 더 큽니다.

설명 문장을 채점 가능한 과제로 바꾸기

문서에는 정답표가 없어도 판단의 근거가 들어 있습니다. 다음 문단은 위 표를 설명하기 위해 직접 쓴 것입니다.

A와 B의 판매 증가량은 각각 20개로 같다. 증가율은 각 상품의 증가량을 해당 상품의 1월 판매량으로 나누어 계산한다. 따라서 증가량이 같아도 출발한 판매 규모에 따라 증가율은 달라진다.

두 번째 문장을 가리고 어떤 근거가 들어가야 하는지 묻는 문제를 만들 수 있습니다.

선택지 가린 문장에 들어갈 후보
A 각 상품의 증가량을 해당 상품의 1월 판매량으로 나누어 비교한다.
B 각 상품의 증가량을 해당 상품의 2월 판매량으로 나누어 비교한다.
C 각 상품의 증가량을 두 상품의 1월 판매량 합계로 나누어 비교한다.
D 각 상품의 2월 판매량을 두 상품의 2월 판매량 합계로 나누어 비교한다.

여기서는 A가 정답입니다. B는 분모를 비교 시점으로 바꿨습니다. C는 상품별 증가율에 공통 분모를 사용합니다. D는 2월의 구성 비중을 구합니다. 오답마다 다른 혼동을 겨냥하므로, 채점 결과에서 틀렸다는 사실을 넘어 어떤 기준을 선택했는지 읽을 수 있습니다.

Golden Goose는 원문의 중요한 연속 구간을 가리고, 가린 부분을 정답으로 삼아 그럴듯한 오답 선택지를 만드는 방식으로 RLVR 과제를 합성합니다. 자유 응답을 원문 전체와 대조해 검증하기 어려운 상황에서도, 선택지의 정답 ID는 비교할 수 있도록 구성한 방식입니다. Golden Goose v2, §2.1

다만 선택지 ID를 맞히는 것과 우리가 원하는 판단을 배운 것은 다른 결과입니다. 정답만 유난히 길거나 원문과 같은 표현을 쓰면 내용 대신 모양을 익힐 수 있습니다. 정답 위치가 늘 A여도 비슷한 문제가 생깁니다. 이 예제의 고정된 A는 읽기 편하게 정한 위치입니다. 실제 데이터에서는 의미를 유지하면서 표시 순서를 섞고, 정답 ID를 그 순서와 함께 갱신해야 합니다.

선택지의 표현과 순서를 정리한 뒤에도 원문 자체가 맞는지 확인하는 일이 남습니다. 잘못된 공식을 가렸다면 원문 복원에는 성공하면서 잘못된 계산을 학습할 수 있습니다. 그래서 이 예제에서는 원문 복원 과제의 정답과 실제 수치 계산을 교차 확인하겠습니다. A의 20/100과 B의 20/50이 각각 20%, 40%인지 계산할 수 있습니다. 수치 계산처럼 별도 경로로 확인할 수 있는 근거를 함께 사용하면, 원문 복원에 성공한 것과 계산이 맞는 것을 나누어 볼 수 있습니다.

이 검수 결과는 문제마다 남길 수 있습니다. 원문 문서와 버전, 사용한 구간, 질문, 정답, 각 오답의 이유, 연습하는 스킬을 한 묶음으로 저장합니다. 그러면 원문의 숫자가 수정됐을 때 영향을 받는 문제를 찾을 수 있고, 왜 정답인지 모르는 상태로 데이터만 재사용하는 일을 줄일 수 있습니다.

합성한 문제를 같은 기준으로 다시 믿는 고리

문제를 생성한 모델에게 ‘네가 만든 문제에 오류가 없는가’라고 묻는 절차는 빠릅니다. 그러나 원문을 같은 방식으로 오해한 채 검수까지 할 수 있습니다. 다른 모델로 바꿔 채점하는 것만으로 모든 오류가 독립적으로 검출된다고 보장할 수도 없습니다. 검수의 근거를 모델 이름 밖에 두어야 하는 이유입니다.

앞의 판매 표에서는 검수 대상을 나누어 확인할 수 있습니다. 값은 원표와 대조하고 증가율은 수식으로 다시 계산합니다. 각 오답은 사용한 분모와 단위를 살펴 왜 틀렸는지 확인합니다. 의미가 모호한 질문은 사람의 검토나 질문 수정으로 돌립니다. 같은 ‘통과’ 한 칸으로 합치지 않고 무엇을 어떤 방법으로 확인했는지 남기겠습니다.

예를 들어 ‘증가율 차이는 20%다’라는 문장이 생성됐다면, 수치 20만 맞는다고 승인하지 않습니다. 두 증가율의 차이는 20퍼센트포인트이며 상대적인 차이를 묻는다면 기준을 명시해야 합니다. 비슷한 표현을 모두 같은 답으로 묶는 평가기가 이 차이를 지우면, 답 분포 추정에도 그 오류가 전파됩니다.

따라서 답을 묶는 규칙부터 작은 대조 집합으로 확인합니다. 표현은 달라도 의미가 같은 답, 숫자는 같아도 단위가 다른 답, 결론은 같지만 근거가 모순인 답을 함께 둡니다. 자동 검수의 일부 통과 사례도 사람이 살펴봅니다. 실패한 사례만 검토하면 조용히 통과한 오류를 관찰할 수 없습니다. 장황함이나 답의 위치가 LLM 판단에 영향을 줄 수 있다는 연구는 이런 대조 확인의 필요성을 뒷받침합니다. MT-Bench 평가 연구 v4

검수 결과를 수정하면 과거 데이터와 모델 평가도 영향받을 수 있습니다. 정답·동등성 규칙·교사 버전을 데이터 버전과 연결해 두면, 어떤 문제를 다시 생성하거나 재평가해야 하는지 추적할 수 있습니다. 원문에서 학습까지 이어진 계보에는 평가 기준의 변경도 포함됩니다.

교사가 잘 아는 문제와 학생에게 필요한 문제의 교집합

정답을 검수한 다음에는 그 문제가 현재 학생 모델에 필요한지도 살펴봐야 합니다. 학생이 이미 안정적으로 맞히는 문제와, 교사에게도 어려운 문제를 구분해야 합니다.

교사는 더 큰 모델이라는 이유만으로 모든 문제에서 정답 기준이 되지 않습니다. 우리 표에서는 공식으로 교사 답을 확인할 수 있습니다. 문서 문제라면 해당 문서의 조건과 버전을 확인해야 합니다. 교사의 자신감이 이 확인을 대신하지는 못합니다.

그다음 같은 질문에 대한 교사와 학생의 답을 여러 번 모읍니다. 답이 ‘B’, ‘B 상품’, ‘40% 증가한 상품’처럼 다르게 표현돼도 의미가 같다면 같은 결과로 묶어야 합니다. 반대로 ‘20%’와 ‘20퍼센트포인트’를 문자열이 비슷하다는 이유로 합쳐서는 안 됩니다.

DeltaPrompts는 교사와 학생의 최종 답 분포 차이를 이용해 증류용 문제를 살핍니다. v3의 차트·문서 실험에서는 각 모델에서 16개 응답을 생성하고 의미가 같은 답을 묶어 경험적 분포를 구했습니다. 조사한 조건에서 최대 69%의 문제는 두 모델의 답 분포가 사실상 같았고, 차이가 있는 문제만 남길 때 다양성이 줄어드는 현상도 관찰했습니다. DeltaPrompts v3, §2.2–2.4

앞의 판매 표에 적용해 보기 위해, 답을 A와 B로 제한하고 다음과 같은 확률을 가정하겠습니다.

질문 교사: A / B 학생: A / B 확인할 내용
2월 판매량이 큰 상품 90% / 10% 90% / 10% 학생도 교사와 같은 답 분포를 보입니다
증가율이 큰 상품 10% / 90% 80% / 20% 교사는 정답 B를, 학생은 오답 A를 주로 냅니다

분포 차이를 수치로 보는 한 방법은 학생 S에서 교사 T로의 KL divergence입니다.

Δ = Σ S(a) × ln(S(a) / T(a))

판매량 질문: 0
증가율 질문: 0.8 × ln(0.8 / 0.1) + 0.2 × ln(0.2 / 0.9)
            ≈ 1.363 nat

이 계산은 증가율 질문에서 학생과 교사의 행동이 더 다르다는 것을 보여줍니다. 교사가 정답을 더 자주 낸다는 별도 확인까지 결합하면, 이 문제를 학습 후보로 검토할 이유가 생깁니다. 1.363이라는 수치 자체가 학습 후 성능 향상량을 뜻하지는 않습니다.

답 분포가 같다는 해석에도 범위가 있습니다. 최종 답이 같아도 중간 토큰의 분포나 풀이가 다를 수 있습니다. 답 수준의 Δ가 0이라는 사실만으로 모든 학습 손실과 기울기가 0이라고 말할 수는 없습니다. 또한 실제로 16개씩 관측해 같았다는 것과 모델의 참 분포가 같다는 것은 다릅니다. 한 번도 나오지 않은 답을 확률 0으로 놓으면 KL 계산에 무한대가 생길 수 있으므로, 추정과 평활화 방식을 바꿨는지도 함께 기록해야 합니다.

저라면 이 값을 학습 문제의 자동 승인 기준으로 쓰기보다 검토 순서를 정하는 데 사용하겠습니다. 교사 답의 타당성과 학생의 현재 상태를 함께 보면, 다음과 같이 할 일을 나눌 수 있습니다.

교사와 학생의 상태 이 데이터에서 할 일
둘 다 안정적으로 정답 반복 비중을 점검하되, 기본 동작 유지에 필요한지 확인합니다
교사는 정답, 학생은 불안정하거나 오답 필요한 스킬과 중복 정도를 확인해 학습 후보로 남깁니다
교사가 오답이거나 정답 근거가 불명확 정답 검수로 돌립니다. 차이가 크다고 우선 투입하지 않습니다
정답을 하나로 정할 정보가 부족 조건을 보완하거나, 근거 부족을 인식하는 과제로 다시 씁니다

이 기준에서 좋은 후보는 단순히 어려운 문제가 아닙니다. 교사가 타당한 신호를 제공할 수 있고, 학생에게 필요한 판단을 요구하는 문제입니다.

차이가 큰 문제만 남겼더니 비율 문제만 남았다면

학생이 증가율을 특히 못 한다면 분포 차이가 큰 문제를 모을수록 비율 문제가 많아질 수 있습니다. 데이터 품질은 좋아 보이는데 값 찾기, 기간 대조, 근거 부족 판단은 빠져나갑니다. 여기서 ‘좋은 문제만 골랐다’는 설명과 ‘좋은 데이터셋을 만들었다’는 설명이 갈라집니다.

이처럼 특정 유형에 문제가 몰려 있는지 살펴볼 때, 샘플 사이의 유사도를 이용하는 Vendi Score를 참고할 수 있습니다.

계산할 때는 자기 유사도가 1인 양의 준정부호 커널 행렬 K를 샘플 수 n으로 나누고, 그 고유값 λ의 엔트로피를 지수화합니다. 공식은 exp(-Σ λ ln λ)이며 0에 해당하는 항은 0입니다.

어떤 유사도 함수를 쓰는지에 따라 측정하는 다양성도 달라집니다. 점수를 해석할 때는 무엇이 비슷한 샘플인지 정한 기준을 함께 살펴봐야 합니다. Vendi Score, §3.1·§4.5

점수가 행 수와 구성을 어떻게 구분하는지 살펴보기 위해, 문장 임베딩을 사용하지 않는 작은 사례를 계산하겠습니다. A는 값 비교 문제, B는 비율 문제라고 정합니다. 같은 유형이면 유사도 1, 다른 유형이면 0인 커널을 사용합니다. 유형을 서로 직교하는 단위 벡터로 표현해 내적한 경우라 위 조건을 만족합니다.

이 특별한 커널에서는 0이 아닌 고유값이 각 유형의 비율이 됩니다. 두 유형이 반씩 있으면 0.5와 0.5이므로 exp(-0.5 ln 0.5-0.5 ln 0.5)=2입니다.

설명용 구성 행 수 비율 이 커널의 Vendi Score
A, A, A, A 4 한 유형 100% 1
A, A, B, B 4 50% / 50% 2
A, A, A, B 4 75% / 25% 약 1.755
A, A, A, A, B, B, B, B 8 50% / 50% 2

마지막 줄은 행 수가 두 배여도 패턴의 비중이 같아서 점수가 같습니다. 세 번째 줄은 유형이 두 개 있어도 하나에 몰리면 점수가 낮아집니다. 행을 늘리는 것과 유형의 구성을 바꾸는 것이 점수에 다르게 반영됩니다.

실제 문장에서는 ‘같은 유형’의 기준부터 선택해야 합니다. 숫자와 어휘가 달라도 같은 공식을 반복할 수 있고, 비슷한 문장이라도 ‘값이 없다’와 ‘값이 0이다’처럼 다른 판단을 요구할 수 있습니다. 텍스트 임베딩의 유사도와 사람이 붙인 스킬 분류를 함께 보는 이유입니다. DeltaPrompts가 보고한 다양성 실험은 E-Vendi를 사용하므로, 위의 단순 커널 예제 수치를 그 논문의 수치와 직접 비교하지 않습니다.

여기서 목표를 다양성 점수 최대화로 바꾸지는 않겠습니다. 전혀 관계없는 문제를 섞거나 모든 스킬의 비중을 똑같이 만들면 점수는 달라져도 업무와 멀어질 수 있습니다. 실제 요청에서 자주 나오는 스킬과, 드물어도 틀리면 곤란한 스킬이 무엇인지 먼저 정해야 합니다. 다양성 점수는 데이터 구성을 살피는 데 사용하고, 어떤 구성이 필요한지는 서비스의 목표를 기준으로 정합니다.

데이터가 좋아졌는지 확인할 수 있는 실험으로 만들기

앞에서는 원문을 과제로 만드는 방법, 정답을 검수하는 기준, 교사와 학생의 차이, 데이터가 다루는 범위를 살펴봤습니다. 이 절차가 실제로 도움이 되는지 확인하려면 학습 결과를 비교할 실험도 함께 설계해야 합니다.

먼저 자료를 나누는 시점부터 정하겠습니다. 같은 판매 표의 숫자만 바꾼 질문을 무작위로 학습용과 평가용에 나누면, 평가 문제가 학습 데이터와 같은 원문과 생성 규칙을 공유하게 됩니다. 원문 문서나 원본 표의 계보를 기준으로 묶은 뒤 학습·개발·최종 평가에 배정합니다. 데이터 생성기는 학습 묶음만 사용하고, 최종 평가 자료는 생성 예시나 선별 기준 조정에 사용하지 않습니다.

자료를 나눈 뒤에는 어떤 변경이 결과에 영향을 주었는지 좁혀 볼 수 있도록 첫 실험을 구성합니다.

비교 구성 만드는 방법 읽고 싶은 차이
기본 구성 검수한 기존 풀에서 무작위 추출 현재 기준선
차이 우선 같은 풀에서 교사·학생 차이가 있는 문제 중심으로 추출 약점에 집중한 선별의 효과와 편중
차이와 범위를 함께 고려 같은 풀에서 차이를 보면서 스킬별 필요한 비중을 유지 범위를 유지했을 때 남는 변화
합성 보완 부족한 스킬의 새 문제를 검수해 앞 구성을 보완 데이터 제작 과정을 추가한 전체 효과

이 표만으로 각 요소의 순수한 효과가 자동 분리되지는 않습니다. 가령 스킬 비중을 맞추는 과정에서 Δ의 분포까지 달라질 수 있습니다. 개별 원인을 주장하려면 비교하려는 요소 외의 분포를 가능한 한 맞추고, 맞추지 못한 차이를 기록해야 합니다. 마지막 구성은 자료의 출처와 내용도 달라지므로 ‘합성 기법 하나의 효과’보다 보완 절차 전체의 결과로 읽는 편이 정확합니다.

모델 시작점, 학습 설정, 평가 방법도 같게 둡니다. 데이터 크기가 다르면 같은 epoch 수가 같은 학습 예산을 뜻하지 않습니다. 우선 처리 토큰 수를 맞춘 비교를 하고, 후보 생성·교사 평가·검수에 쓴 제작 비용은 따로 기록하겠습니다. 정해진 학습 예산에서 좋은 데이터와, 제작부터 포함해 경제적인 데이터는 다른 결론일 수 있습니다.

최종 평가에는 같은 판단을 다른 표현과 구조에서 요구하는 문제를 넣습니다. 예제에서는 판매량 대신 작업 처리량을 주어 비율을 묻거나, 기준 시점을 바꾸거나, 계산에 필요한 값 하나를 빼는 식입니다. 선택형 학습을 했다면 선택지를 없앤 자유 응답에서도 공식과 근거를 제대로 사용하는지 살핍니다. 이를 통해 선택지의 문체나 위치를 익힌 효과와 판단의 전이를 구분할 수 있습니다.

결과는 전체 정답률과 스킬별 결과를 함께 읽겠습니다. 비율 계산은 올랐는데 판단 보류가 내려갔다면 데이터 구성의 교환 관계가 드러납니다. 학습에 쓴 문서와 가까운 평가만 올랐다면 새 자료로의 전이를 더 확인해야 합니다. 아무 유형도 나아지지 않았다면 ‘데이터를 더 만들자’로 바로 돌아가기보다 정답 품질, 학생에게 준 신호, 학습이 실제로 반영됐는지를 차례로 좁힙니다.

다음 데이터 버전에 남길 설명

이 과정을 거치면 다음 버전의 변경 이유를 구체적으로 쓸 수 있습니다.

‘질문을 10만 개 추가했다’ 대신 ‘증가율의 분모 선택에서 실패가 집중돼 해당 과제를 보완했다. 정답은 원표 계산으로 확인했고, 판단 보류 과제의 비중은 유지했다. 원문이 겹치지 않는 평가에서 개선과 회귀를 확인한다’고 적을 수 있습니다. 아직 실행 전이라면 마지막 문장은 평가 계획으로 남기고, 실행 후에는 관측한 결과로 바꾸면 됩니다.

이 설명에는 어떤 자료를 만들었는지뿐 아니라 왜 만들었는지가 들어 있습니다. 결과가 좋지 않아도 다음 조사로 이어집니다. 교사 답이 문제였는지, 학생에게 너무 익숙한 질문이었는지, 약점 하나에만 몰렸는지, 학습 형식에서 실제 업무로 옮겨가지 못했는지 살펴볼 수 있기 때문입니다.

데이터 제작에서 제가 먼저 늘리고 싶은 것은 파일의 행 수보다 실패를 설명하고 다음 과제를 정할 수 있는 정보입니다. 원문에서 출발한 문제가 어떤 판단을 연습시키며, 그 판단이 실제 요청에서 다시 쓰이는지까지 연결되면 데이터는 그제야 학습할 이유를 갖습니다.


관련 원고: 모델이 좋아졌다는 말에는 빠진 조건이 있다는 이 과정의 결과를 평가하는 방법을, AI에 계산을 더 쓰기 전에 정해야 할 것은 학습 이후 요청을 처리할 때의 선택을 다룹니다.

자료와 예제

교육 자료 페이지와 본문에 연결한 논문을 바탕으로 작성했습니다. 계산과 사례의 가정은 본문에 표시했습니다. 연구 결과와 직접 실행한 검증의 범위를 구분해 읽어주세요.