04. 파인튜닝은 말투를 바꿨지만 사실을 보장하지 않았다
모델은 자신 있게 6,000만 원이라고 답했습니다. 약관의 계산 조건을 다시 적용하면 2,400만 원이었습니다. 문장은 자연스러웠지만 답은 틀렸습니다.
Insurance_PF에서 파인튜닝을 적용한 이유는 보험 지식을 모델 파라미터에 모두 넣기 위해서가 아니었습니다. 일반적인 답변보다 보험 상담 문체에 가까운 설명을 만들고, 검색한 약관을 읽는 방식을 보완할 수 있는지 확인하려고 했습니다. 실험 결과 파인튜닝은 답변 형식과 구체성에는 영향을 줬지만 사실 정확도를 보장하지 않았습니다.
전체 모델을 다시 학습하지 않고 QLoRA를 선택했다
기반 모델은 Llama-3-Open-Ko-8B였고, 제한된 GPU 환경에서 4-bit 양자화와 LoRA를 결합한 QLoRA로 학습했습니다. 전체 가중치를 업데이트하는 대신 일부 adapter만 학습하는 방식이라 개인 장비에서도 반복 실험이 가능했습니다.
학습 데이터는 자동차 보험 FAQ와 약관 기반 문답으로 구성했다. 다만 실험 기록에 전체 데이터 수가 5,434개, 870개 등 서로 다르게 남아 있다. 어느 전처리 시점의 수치인지 현재 기록만으로 확정하기 어렵다. 그래서 이 글에서는 학습 규모를 하나의 숫자로 단정하지 않는다. 별도 holdout 로그에는 1,088개가 기록돼 있고, 빠른 비교에는 50개, RAG 통합 비교에는 30개 질문을 사용했다.
이 불일치는 모델 성능보다 먼저 데이터 version과 split manifest를 보존해야 한다는 문제를 보여줬다.
50개 답변 비교에서 달라진 것은 주로 설명 방식이었다
Base Model과 Fine-Tuned Model의 답변 50개를 나란히 확인했다. Fine-Tuned Model은 질문의 상황을 다시 정리하고, 보험 용어를 풀어 쓰며, 예시를 붙이는 경향이 강했다. 짧게 결론만 말하던 Base Model보다 상담 답변처럼 읽혔다.
하지만 이 평가는 정량 점수로 측정한 정확도 실험이 아니다. 사람이 답변을 읽고 표현과 내용의 차이를 기록한 정성 비교다. Ragas나 별도의 judge model로 Faithfulness, Context Relevance를 계산하지 않았기 때문에 “정확도가 몇 퍼센트 올랐다”고 말할 근거는 없다.
더 큰 문제는 자연스러운 문장이 오류를 가렸다는 점이다. Fine-Tuned Model도 면책 조건을 빠뜨렸고, 잘못 계산한 금액을 확신하는 문장으로 출력했다. 말투의 개선과 사실의 개선은 분리해서 평가해야 했다.
RAG를 붙이자 숫자형 질문은 나아졌다
다음 실험에서는 검색한 약관 chunk를 Fine-Tuned Model의 context로 넣었다. 30개 질문을 Base, Fine-Tuned, RAG와 함께 비교했다.
RAG 조합은 정확한 수치가 문서에 있는 질문에서 강했다. 예를 들어 다음과 같은 항목은 검색된 근거에서 답을 가져왔다.
- 교통사고 처리 특례의 벌금 한도
- 임시 운전자 특약의 효력 시작 시점
- 보험금 청구에 필요한 기간과 절차
- 약관에 직접 적힌 보상 한도와 자기부담금
모델이 기억에 의존하는 대신 해당 chunk의 숫자와 조건을 읽었기 때문이다. 파인튜닝보다 검색이 사실 전달에 직접적인 역할을 한 사례다.
근거가 없거나 잘못 찾으면 파인튜닝도 고치지 못했다
RAG가 실패한 질문은 세 부류였다.
첫째, 정답 조항을 검색하지 못했다. “노트북 액정 파손”과 “휴대품 손해”처럼 표현이 다르면 BM25가 관련 조항을 놓쳤다. “전업주부의 휴업손해”도 약관의 가사종사자 표현과 연결하지 못했다.
둘째, 정답 chunk를 받았지만 부정 조건을 반대로 읽었다. 배우자가 운전한 자동차 사고처럼 보상 제외 관계를 확인해야 하는 질문에서 세 모델 조합 모두 오답을 냈다.
셋째, 계산 규칙을 자연어 생성에 맡겼다. 장해 등급별 가입금액과 배수 조건을 조합하는 질문에서 모델은 중간 계산을 검증하지 않은 채 틀린 금액을 제시했다.
검색 실패, 조항 해석 실패, 계산 실패는 같은 “오답”으로 묶을 수 없다. 각각 검색 평가, 조건 판정 평가, 산식 검증으로 나눠야 수정할 위치가 보인다.
부정 사례 중심의 추가 학습은 계획으로 남아 있다
후속 문서에는 면책, 계산, 오답 거절 사례를 포함한 약 3,800개 규모의 v4 데이터셋 계획이 있다. 그러나 완료된 학습과 평가 결과는 확인하지 못했다. 따라서 v4를 적용해 문제가 해결됐다고 쓰지 않는다.
다시 진행한다면 positive FAQ를 늘리는 것보다 다음 데이터를 먼저 만든다.
- “보상하지 않는다”와 같은 부정 조건을 보존한 문답
- 필요한 근거가 없을 때 답을 유보하는 문답
- 계산식과 중간 값을 함께 제시하는 문답
- 유사하지만 적용되지 않는 조항을 구별하는 hard negative
파인튜닝의 목표도 “보험 지식을 외우게 한다”가 아니라 “검색된 근거만 사용하고, 부족하면 멈추며, 계산은 검증 가능한 형태로 넘긴다”로 바꿔야 한다.
이 실험에서 얻은 판단
QLoRA는 제한된 환경에서 도메인 답변 형식을 실험하는 데 유용했다. 그러나 자연스러운 문체는 사실 정확도의 대리 지표가 아니었다. 숫자와 조항을 전달하는 작업에서는 근거 검색, 인용, 계산 검증, 답변 유보가 파인튜닝보다 먼저 설계돼야 한다.