농업 특화 sLLM(소형 언어모델)은 작물별 재배 가이드, 병해충 진단, 농정 자료에 답하는 작은 모델이에요. 현장 장비에서 돌아가야 해서 작아야 하고(다음 주에 온디바이스 얘기를 할게요), 작은 만큼 도메인 지식을 효율적으로 넣는 것이 전부였어요. 오늘은 그 학습 과정이에요.
데이터가 어디 있냐면요
농업 자료는 생각보다 많고 공개된 게 많아요. 농촌진흥청의 재배 기술 자료, 병해충 도감, 농업기술포털의 질의응답, 지자체 농업기술센터 자료, 농정 공고문. 대부분 HWP와 PDF예요. 1월에 쓴 HWP 파서가 여기서 제대로 일했어요. 표(시비량, 농약 희석 배수)와 번호 체계(재배 단계)가 그대로 살아 있어야 해서요.
문제는 중복과 버전이에요. 같은 작물 가이드가 연도별로 개정돼서 여러 버전이 있고, 지자체 자료는 진흥청 자료를 거의 그대로 옮긴 게 많아요. 5월 5일 뉴스 중복 제거랑 같은 파이프라인으로 걸렀어요. 최신 버전을 남기고, 개정 전 내용이 섞이지 않게요. 농약 사용 기준처럼 바뀌면 위험한 정보는 특히요.
정제에서 뺀 것들
- 개정 전 농약 등록 정보. 등록 취소된 농약을 추천하면 안 되니까요.
- 지역·연도가 특정된 수치(올해 ○○군 시세 등). 모델이 일반 지식처럼 외우면 틀려요.
- 광고성 자료.
- 질의응답 중 답변이 "담당자에게 문의하세요"인 것. 학습하면 모델이 그렇게 답해요.
학습은 두 단계예요
1. 계속 사전학습(continued pretraining). 정제한 농업 문서 전체를 베이스 모델에 이어서 학습해요. 용어와 문체를 익히는 단계예요. "도장병", "역병", "착과", "적심" 같은 말이 자연스러워져요. 여기서 일반 데이터를 일정 비율 섞어야 해요. 농업 자료만 넣으면 일반 대화 능력이 떨어져서 "안녕하세요"에도 작물 얘기를 해요.
2. 지시 학습(instruction tuning). 질문-답변 쌍으로 학습해요. 데이터는 세 종류예요.
- 공개 농업 질의응답 (사람이 쓴 것, 제일 가치 있어요)
- 문서에서 자동 생성한 질의응답 (큰 모델로 "이 문단에서 나올 질문과 답"을 만들고, 답이 문단에 근거하는지 검증한 것만 남겨요)
- 거절 데이터 ("이 작물의 내년 시세는?" → "예측할 수 없어요. 농산물유통정보를 확인하세요")
세 번째가 중요해요. 작은 모델은 모르는 것도 자신 있게 답해요. 모르는 질문 유형을 명시적으로 학습시켜야 해요. 3월 10일에 쓴 "모르면 모른다고" 원칙이 모델 학습에서는 이렇게 구현돼요.
넣으면 좋아진 것, 나빠진 것
좋아진 것
- 병해충 도감의 "증상 → 원인 → 방제" 구조를 유지한 데이터. 모델이 진단 질문에 같은 구조로 답해요.
- 지역별 재배력(월별 작업 일정)을 표로 넣은 것. "9월에 마늘 뭐 해야 해요?"에 답할 수 있어요.
- 단위 변환 예시. "10a당 20kg"을 "평당"으로 바꾸는 질문이 실제로 많아요.
나빠진 것
- 자동 생성 질의응답을 너무 많이 넣었을 때. 문체가 단조로워지고 사람이 쓴 질문에 약해졌어요. 비율을 사람 작성 데이터의 2배 이하로 줄였어요.
- 긴 정책 공고문 원문. 모델이 공고문 투로 답하기 시작했어요. 요약본으로 바꿨어요.
평가는 이렇게
4월 14일 평가셋 방식 그대로예요. 농업기술센터 상담 경험이 있는 분께 질문-정답 쌍을 받아서 평가셋을 만들고, 태그별(병해충, 시비, 재배 일정, 정책, 거절)로 점수를 봐요. 특히 거절 태그는 "답하면 안 되는 질문에 답했는지"를 봐요. 이게 떨어지면 다른 게 올라도 배포 안 해요.
그리고 RAG와 같이 평가해요. 모델 혼자 답하는 것과, 최신 문서를 검색해서 넣고 답하는 것. 날짜가 있는 정보(농약 등록, 정책)는 RAG 쪽이 항상 나아요. 모델은 언어와 구조를 알고, 사실은 문서에서 가져오는 게 안전해요.
정리
- 데이터는 공개 자료로 충분히 모여요. 중복과 버전 정제가 일이에요.
- 바뀌면 위험한 정보(농약, 정책)는 모델에 외우게 하지 말고 RAG로.
- 거절 데이터를 꼭 넣으세요. 작은 모델일수록요.
- 자동 생성 데이터는 보조예요. 사람이 쓴 데이터를 넘지 않게.
다음 주는 이 모델을 엣지 장비에서 돌리는 얘기예요. 양자화와 추론 엔진이요.