12장. 멀티모달 RAG 와 데이터셋 자동 생성
데이터 기반 LLM 파인튜닝
시험 공부에는 두 가지 방법이 있습니다. 오픈북 시험처럼 필요할 때 책을 찾아보는 방법과, 미리 외워 두는 방법입니다. RAG 는 찾아보기이고, 미세조정은 외워 두기입니다. 우리 회사 문서로 작은 모델을 미세조정하는 것이 데이터 기반 파인튜닝입니다.
왼쪽 RAG 는 질문마다 문서에서 조각을 찾아 모델에게 보여 줍니다. 문서가 바뀌면 색인만 고치면 됩니다. 오른쪽 미세조정은 문서로 만든 질문-답으로 모델을 미리 가르칩니다. 답할 때 문서가 없어도 되지만, 문서가 바뀌면 다시 가르쳐야 합니다. 여기서 오픈북이 RAG, 외워 두기가 미세조정입니다.
언제 무엇을 쓰나
| 견줄 것 | RAG | 미세조정 |
|---|---|---|
| 자주 바뀌는 사실(값, 날짜) | 잘 맞는다 | 다시 가르쳐야 한다 |
| 말투, 답의 꼴, 분야 용어 | 프롬프트로 일부만 | 잘 맞는다 |
| 근거(출처) 보이기 | 쉽다 | 어렵다 |
| 답할 때 드는 것 | 검색 + 긴 프롬프트 | 짧은 프롬프트 |
| 준비할 것 | 문서와 색인 | 질문-답 데이터셋(수십~수천 쌍) |
둘은 함께 쓰기도 합니다. 미세조정으로 말투와 꼴을 맞추고, RAG 로 최신 사실을 붙입니다. 이 장의 프로젝트에서는 같은 시험 질문을 미세조정 전, 미세조정 뒤, RAG 로 물어 견줍니다.
학습 데이터 한 줄의 꼴
5장처럼 채팅 템플릿의 메시지 목록으로 적습니다.
import json
record = {"messages": [
{"role": "system", "content": "당신은 솔빛생활(가상 쇼핑몰)의 상담원입니다."},
{"role": "user", "content": "선물 포장은 얼마예요?"},
{"role": "assistant", "content": "선물 포장은 1,500원입니다."}],
"출처": "적립금과 포장"}
print(json.dumps(record, ensure_ascii=False)[:120])코드에 나오는 함수
| 코드 | 쉬운 뜻 |
|---|---|
"messages": [...] | 대화를 차례대로 적은 메시지 목록이다. 5장의 채팅 템플릿과 같은 꼴이다 |
"role": "system" | 모델에게 주는 역할과 규칙이다. system 은 "시스템, 바탕 설정"이라는 뜻이다 |
"role": "user", "role": "assistant" | user 는 사용자(고객)의 말, assistant 는 도우미(상담원)의 답이다 |
"출처": "적립금과 포장" | 이 쌍이 안내서의 어느 절에서 나왔는지 적은 메모 칸이다 |
json.dumps(record, ensure_ascii=False) | 사전을 JSON 글 한 줄로 바꾼다. ensure_ascii=False 는 한글을 부호로 바꾸지 않고 그대로 둔다 |
[:120] | 글의 앞 120 글자만 잘라 보인다 |
이 코드가 뜻하는 것
연극 대본 한 장면에는 무대 설명, 손님의 대사, 점원의 대사가 차례로 적혀 있습니다. 배우는 이런 장면을 여러 번 연습하며 점원의 말투와 대답을 익힙니다. 여기서 무대 설명이 system, 손님의 대사가 user, 점원의 대사가 assistant 이고, 장면 하나가 학습 데이터 한 줄입니다. 다만 배우는 대사를 그대로 외우지만, 모델은 비슷한 질문에 비슷한 꼴로 답하도록 배운다는 점이 다릅니다.
| 줄 | 하는 일 | 쉽게 말하면 |
|---|---|---|
{"role": "system", ...} | 상담원이라는 역할을 정한다 | 무대 설명 |
{"role": "user", ...} | 고객의 질문 | 손님의 대사 |
{"role": "assistant", ...} | 모델이 배울 답 | 점원의 대사 |
"출처": ... | 어느 절에서 만든 쌍인지 | 대본 귀퉁이의 메모 |
print(json.dumps(...)[:120]) | JSON 한 줄로 바꿔 앞부분을 보인다 | 대본 첫머리를 읽어 본다 |
실행하면 {"messages": [{"role": "system", ... 로 시작하는 JSON 한 줄이 나오고, 120 글자에서 잘려 { 로 끝납니다. 이런 한 줄을 쌍마다 한 줄씩 파일에 쌓은 것이 학습 데이터 파일입니다. 실습 6은 출처 칸도 함께 저장합니다.
주의할 점
- 작은 모델은 미세조정으로 사실을 외우게 해도 비슷한 다른 사실과 섞어 답하기 쉽습니다. 값이 중요한 답은 미세조정만 믿지 말고 RAG 나 확인 절차를 함께 둡니다.
- 미세조정은 학습 데이터에 없는 사실을 만들어 주지 않습니다. 데이터에서 빠진 사실은 모델도 모릅니다(실습 6, 프로젝트).