LLM 엔지니어링12장 · 멀티모달 RAG 와 데이터셋 자동 생성10 / 22← 이전목차다음 →MetaContents

12장. 멀티모달 RAG 와 데이터셋 자동 생성

미세조정 데이터셋 자동 생성

선생님은 교과서를 읽고 문제집을 만듭니다. 문제 수백 개를 손으로 쓰려면 오래 걸리지만, 교과서의 쪽마다 "이 쪽에서 문제 네 개"를 내 달라고 맡기면 금방 모입니다. 데이터셋 자동 생성은 LLM 에게 문서를 절마다 주고 질문과 답을 만들게 하는 일입니다.

문서를 절로 나누고, 예시를 붙인 지시를 보내고, JSON 으로 받고, 출처를 붙여 모으는 네 단계 흐름도

1번에서 고객 안내서를 절 12개로 나눕니다. 2번에서 절마다 "이 글로 질문과 답을 4쌍 만드세요"라는 지시에 예시 한 쌍을 붙여 보냅니다. 3번에서 JSON 모드로 답을 받아 읽고, 4번에서 쌍마다 어느 절에서 나왔는지 출처를 붙여 모읍니다. 여기서 교과서의 쪽이 문서의 절, 문제집이 생성한 데이터셋입니다.

생성 지시를 다듬은 기록

교안을 만들며 처음 쓴 지시와 고친 지시를 견줍니다. 처음 지시에서는 답 자리에 "[안내문]"이라는 낱말만 적거나, 우산 절에서 휴대폰 충전 질문을 지어내는 일이 많았습니다.

고친 것처음고친 뒤
글의 이름표"[안내문]" 이라는 이름표를 붙였다이름표 없이 "글: 제목: 본문"
예시없음다른 주제(주차)의 질문-답 2쌍을 user, assistant 차례로 보여 준다
온도0.70.3
결과(교안을 만든 PC)48쌍 가운데 쓸 만한 것이 절반이 안 됐다29쌍, 대부분 글에 맞는 답

생성 지시의 꼴

Python
example_in = "주차: 매장 주차장은 2시간까지 무료입니다. 그 뒤로는 30분에 1,000원입니다."
example_out = '{"쌍": [{"질문": "주차는 몇 시간까지 무료예요?", "답": "매장 주차장은 2시간까지 무료입니다."}]}'
section = "선물 포장: 선물 포장은 1,500원입니다."

# 예시를 user/assistant 차례로 보여 주고(퓨샷), 마지막에 진짜 글을 준다
messages = [{"role": "system", "content": "주어진 글에 있는 사실로만 고객 질문과 상담원 답을 JSON 으로 만듭니다."},
            {"role": "user", "content": "글: " + example_in}, {"role": "assistant", "content": example_out},
            {"role": "user", "content": "글: " + section + "\n질문과 답을 4쌍 만드세요."}]
print([m["role"] for m in messages])

코드에 나오는 함수

코드쉬운 뜻
example_in, example_out보여 줄 예시의 글과 답이다. 답은 JSON 꼴의 글로 적었다
{"role": "assistant", "content": example_out}모델이 이미 이렇게 답한 것처럼 끼워 넣은 예시 답이다. 예시 몇 개를 보여 주는 이 방법을 퓨샷(few-shot, 몇 번 보여 주기)이라고 한다
"글: " + section + "\n..."진짜 글 뒤에 줄을 바꿔 할 일을 붙인다
[m["role"] for m in messages]메시지마다 role 만 뽑아 차례를 본다

이 코드가 뜻하는 것

식당에 새 직원이 오면 지배인이 먼저 규칙을 일러 주고, 손님 역과 직원 역으로 주문 받기를 한 번 시연한 뒤, 진짜 손님을 맡깁니다. 여기서 지배인의 규칙이 system, 시연이 예시 user 와 assistant 한 쌍, 진짜 손님이 마지막 user 입니다.

줄하는 일쉽게 말하면
example_in, example_out다른 주제(주차)의 글과 답 예시시연용 손님과 시연용 답
section = ...진짜로 질문과 답을 만들 글진짜 손님
messages = [...]규칙, 시연, 진짜 글을 차례로 놓는다교육 순서
print([m["role"] ...])메시지의 차례만 보인다순서표를 본다

실행하면 ['system', 'user', 'assistant', 'user'] 가 나옵니다. 마지막이 user 이므로 모델은 그다음 assistant 차례로, 예시 답과 같은 JSON 꼴의 답을 쓰게 됩니다. 예시의 주제를 진짜 글과 다르게 고른 것은 예시의 내용을 베껴 쓰지 않게 하려는 것입니다.

주의할 점

  • 생성 데이터의 질은 지시와 모델에 크게 달려 있습니다. 작은 모델(3B)로 만든 데이터는 반드시 걸러서 씁니다(다음 절).
  • 다른 회사의 LLM API 로 데이터를 만들면 그 서비스의 약관(생성물로 경쟁 모델을 학습하지 말라는 조항 등)을 확인합니다. 이 장은 이 PC 의 Ollama 로 만듭니다.
← 이전 절12장 · 데이터 기반 LLM 파인튜닝다음 절 →12장 · 생성 데이터 거르기