LAYA 를 LAYA 답게 — 두 사례에서 얻은, 가장 잘 쓰는 다섯 가지 모양
LAYA 는 정해진 선택지에서 고르고 확신을 함께 내는 작은 모델이다. 문의 분류에서는 잘 맞았고 쇼핑 검색 필터에서는 사전에 졌다. 두 사례와 공식 문서를 바탕으로, LAYA 가 맞는 일을 고르는 기준과 가장 LAYA 다운 쓰임 다섯 가지를 정리한다.
LAYA 는 정해진 선택지에서 고르고 확신을 함께 내는 작은 모델이다. 문의 분류에서는 잘 맞았고 쇼핑 검색 필터에서는 사전에 졌다. 두 사례와 공식 문서를 바탕으로, LAYA 가 맞는 일을 고르는 기준과 가장 LAYA 다운 쓰임 다섯 가지를 정리한다.
강좌를 검수하며 나온 질문 둘에 답한다. 동의어를 따로 학습시켜야 하는가, 검색엔진 앞의 LAYA 는 규칙보다 못한가. 그리고 서술형 검색어를 검색엔진에 보내기 전 전처리를 어떤 층으로 쌓을지, 상용 AI 검색은 어떻게 하는지 정리한다.
하루치 검색 로그를 LLM 에 보내 사전에 없는 말의 동의어 후보를 받았다. 62개 중 61개가 맞았고, 사전에 더하자 규칙이 0.619 에서 0.700 이 됐다. 사전이 못 찾은 칸을 LAYA 가 메우니 0.857, 처음 보는 단어도 0.686 까지 올랐다.
같은 검색어 210건을 사전·정규식 규칙, LAYA, 둘을 섞은 방식으로 쟀다. 규칙 v2 가 0.619 로 LAYA v2(0.510)보다 높고 4천 배 빨랐으며, 섞은 방식이 0.652 로 가장 높았다. 이 일의 중심은 규칙이고 LAYA 는 빈칸을 메우는 자리가 맞다.
v1 이 운영에서 낸 필터를 사용자가 고친 검색어 133건을 모아 v2 를 만들었다. 방법 넷을 세 번씩 돌리니 처음 150건과 고친 133건으로 처음부터 다시 학습한 쪽이 평균 0.532 로, v1 의 0.322 보다 크게 올랐다. 처음 보는 단어는 그대로였다.
v1 을 검색어 210건으로 쟀다. 여섯 칸이 모두 맞은 비율이 학습 전 0.014 에서 0.305 로 올랐지만, 배운 단어로 된 검색어(0.800)와 처음 보는 단어(0.000)의 차이가 컸다. 확신 문턱별로 틀린 필터가 몇 개 걸리는지도 쟀다.
검색어 합성 데이터를 만들고 처음 150건으로 v1 을 학습한다. 표현을 처음 학습용·운영에서 들어올 것·한 번도 안 나올 것 세 묶음으로 나눠, 학습과 지속 학습이 어느 쪽을 고치는지 따로 잴 수 있게 했다. 오타·붙여 쓰기·부정도 섞었다.
쇼핑몰 검색창에 들어온 문장을 검색엔진 필터(가격 구간·분류·품목·겨울옷·성별·색)로 바꾸는 일을 LAYA 에 맡긴다. 필터 칸마다 질문 하나, 모르는 칸은 선택지와 확신 문턱으로 비운다. 학습 전 모델은 품목·색은 맞히고 가격·분류는 놓쳤다.
문의 분류 사례의 판 여섯 개를 같은 평가 데이터로 다시 쟀다. 학습 전 0.550 이 내 데이터 150건으로 0.750, 운영 정답을 더해 처음부터 다시 학습한 v2 가 0.815 다. 지속 학습은 도움이 됐지만 이어 학습은 아니었다. 권장 순서를 정리한다.
지속 학습한 판을 운영에 넣는 마지막 단계다. 새 판을 지금 판 옆에 그림자로 띄워 실제 문의 150건에 함께 묻고(답이 다른 것 3%), 이미지 태그를 바꿔 교체하고, 문제가 생기면 이전 태그로 되돌린다. 1~15편의 고리를 재학습 주기로 묶는다.
학습한 판을 Docker 이미지로 굳히면 어디서든 같은 것이 돈다. CPU 판 PyTorch 를 쓰고 학습 중 백업은 빼서 1.87GB 가 됐다. 컨테이너를 127.0.0.1 에 띄워 묻고, CPU 응답 시간과 메모리를 잰다. 이미지 태그가 곧 모델 판이다.
맥북에서 학습한 LAYA 는 파일 몇 개라 어디로든 옮길 수 있다. EC2 CPU·EC2 GPU·컨테이너 서비스·Lambda·Hugging Face 와 SageMaker 같은 관리형을 속도·수고·켜 두는 비용으로 비교하고, 요청량과 응답 시간에 따라 고르는 기준을 정리한다.
laya-serve 는 LAYA 에 들어 있는 HTTP 서버다. 환경 변수 셋으로 내가 학습한 v2 를 tickets 라는 이름으로 올리고, API 키를 걸고, curl 로 묻는다. 모델 이름을 잘못 쓰면 오류 없이 기본 모델로 가는 함정도 본다.
새로 학습한 판을 운영에 올릴지 사람이 감으로 정하지 않는다. 같은 평가 데이터로 지금 판과 새 판을 재고, 전체 정확도가 오르고 어느 팀도 크게 떨어지지 않고 확신이 크게 어긋나지 않을 때만 올린다. v2 는 통과했고, 이어 학습한 판은 막혔다.
모은 정답 90건으로 v2 를 만드는 방법 셋을 비교했다. 한 번씩만 돌린 숫자는 같은 명령인데도 최대 0.2 까지 흔들려서, 씨앗을 바꿔 세 번씩 돌렸다. 바탕 모델에서 누적 데이터로 다시 학습한 쪽이 평균 0.825 로 가장 높고 고르게 나왔다.
지속 학습의 재료는 운영에서 사람이 고친 판단이다. v1 이 새 문의 300건을 처리하는 3주를 흉내 내, 확신이 낮은 것은 사람이 직접 보고 높은 것은 표본만 다시 보게 했다. v1 은 확신 0.99 이상에서도 9.4% 를 틀렸고, 사람 손을 30% 쓰자 90건이 모였다.
학습한 LAYA 를 평가 데이터로 다시 재면 팀 정확도가 0.55 에서 0.75 로 올랐다. 데이터가 적을 때·라벨이 틀렸을 때·끝단만 학습할 때·오래 학습할 때를 돌리고, 같은 학습을 세 번씩 반복해 한 번 잰 숫자가 얼마나 흔들리는지 본다.
laya-train 한 줄로 맥북의 GPU(MPS)에서 LAYA 를 학습시킨다. 처음 라벨을 붙인 150건으로 약 1분이 걸렸다. 학습 계획·에폭마다의 손실·보정 경고·학습 전후 비교 표까지, 학습이 출력하는 로그를 한 줄씩 읽는다.
LAYA 는 문장과 정답이 짝지어진 데이터로 학습한다. 질문 하나면 CSV, 여럿이면 JSONL 이다. 고객 문의 데이터를 학습용·운영용·평가용으로 나눠 만들고, laya-train 의 dry-run 으로 학습 전에 확인한다.
학습시키기 전에 기본 모델이 내 일에서 몇 점인지부터 잰다. 평가용 고객 문의 200건으로 다국어 LAYA 를 재니 정확도 0.55 였다. 거의 모든 문의를 기술팀으로 보냈고, 틀릴 때도 평균 0.85 를 확신했다. 평가 스크립트를 만들고 숫자를 읽는다.
같은 문의 200건에 선택지 설명만 바꿔 물었다. 팀 이름만 쓰면 0.690, 짧은 낱말은 0.695, 우리 회사 규칙을 설명에 자세히 적으면 0.550 으로 오히려 떨어졌다. 한국어는 다국어 체크포인트로 가야 하는 것도 확인한다.
LAYA 에 문장 하나와 질문 셋(팀 고르기·급한 정도·화남 여부)을 한 번에 물으면 질문마다 선택·확률·확신이 돌아온다. 결과 JSON 을 한 칸씩 읽고, 학습하지 않은 기본 모델이 쉬운 문장에서도 틀리는 경우와 한 건에 걸리는 시간을 본다.
LAYA 는 파이썬 패키지 하나다. 맥북에서는 가상환경을 만들고 pip 로 laya[serve] 를 설치하면 PyTorch 까지 함께 깔리고, Apple GPU(MPS)를 저절로 쓴다. 설치를 확인하고 다국어 체크포인트를 처음 내려받아 올린다.
결정 모델은 글을 쓰지 않는다. 정해 둔 선택지 가운데 하나를 확률과 함께 고를 뿐이다. 오픈 결정 모델 LAYA 가 LLM 과 무엇이 다른지, 어떤 일에 맞는지, 이 시리즈에서 맥북으로 무엇을 해 보는지 정리한다.
글 대신 확률이 붙은 선택·점수·예/아니오를 돌려주는 결정 모델. 관리형 Jev 와 오픈 가중치 Laya 의 비용·지연·정확도·한계를 공식 문서로 비교하고 쓸 자리를 골랐다.