회계처리가 막힌다면 어느 회계기준서를 봐야 할까?
한국어 회계 질문에 맞는 기준서를 고르는 AI를 학습하고, 실제 서비스에 쓸 후보 생성 대안과 사용법을 살펴보았습니다.
회계 일을 하다 보면 "이 건은 어느 기준서를 봐야 하지?"라는 질문에서 먼저 막힐 때가 많습니다. 이 글은 그 첫 단계, 곧 볼 기준서를 골라 주는 일을 AI로 도울 수 있는지 시험한 기록입니다.
여기서 쓴 AI는 글을 써 주는 AI(ChatGPT 같은 생성형 AI)가 아닙니다. 먼저 추린 후보 중에서 알맞은 것을 고르는 일만 하는 판단 전용 AI입니다. 객관식 문제를 푸는 AI라고 생각하시면 됩니다.
글은 문제 설명, 판단 전용 AI 소개, 사용한 모델, 데이터와 학습, 성능, 사용법 순서로 이어집니다. 기술 용어가 낯설다면 1~3장만 읽어도 큰 그림을 잡을 수 있습니다.
1. 실무에서 시작된 문제: 관련 기준서 찾기
회계 기준서는 종류도 많고 분량도 방대합니다. 거래나 상황은 충분히 이해했어도, 그래서 어느 기준서를 펼쳐야 하는지 몰라 막막할 때가 있습니다. 이유는 대략 세 가지입니다.
- 현장에서 쓰는 말과 기준서에 나오는 용어가 다릅니다. 그래서 키워드로 검색해도 잘 안 나옵니다.
- 질문 하나에 기준서 여러 개가 얽혀 있기도 합니다.
- K-IFRS, 일반기업회계기준처럼 회계체계가 여러 가지라서, 담당자마다 찾는 순서와 결론이 달라질 수 있습니다.
생성형 AI에 물어보는 방법도 있습니다. 하지만 자주 쓰면 비용이 들고 답이 나올 때까지 기다려야 합니다. 더 큰 걱정은 할루시네이션(환각)입니다. 존재하지 않는 기준이나 근거를 그럴듯하게 지어낼 수 있기 때문입니다.
그래서 답을 길게 쓰게 하는 대신, 질문에 맞는 기준서 후보에 우선순위를 매기는 일만 AI에게 맡겨 보았습니다.
2. 답변 생성 대신 기준서 선택에 집중하기
ChatGPT 같은 생성형 AI는 문장을 한 토막씩 이어 붙여 답을 만듭니다. 글은 자연스럽지만, 없는 내용을 지어낼 여지도 함께 생깁니다. 또 답을 한 토막씩 써 내려가기 때문에 답이 길수록 완성될 때까지 더 기다려야 합니다. 보통 서비스는 쓴 분량만큼 요금이 붙어서, 질문이 많고 답이 길수록 비용도 커집니다. 기준서를 찾는 일처럼 반복해서 쓰는 업무에서는 이 속도와 비용이 부담이 될 수 있습니다.
반면, 판단 전용 AI는 문장을 만들지 않습니다. 정해진 선택지 중에서 하나를 고르거나, 선택지마다 점수를 매깁니다. 2026년 9월 타입세이프AI가 공개한 제브(Jev)가 이런 AI의 대표적인 예입니다.
이 방식은 새로운 문장이나 근거를 지어내지 않고, 결과를 점수표처럼 정해진 형식으로 받을 수 있다는 장점이 있습니다. 후보군 안에서만 매칭을 진행하지만, 엉뚱한 후보를 고를 위험까지 사라지는 것은 아닙니다. 기준서 찾기는 "후보 중 하나 고르기"에 가까워서 이 방식과 잘 맞습니다.
이번에는 제브와 같은 계열의 공개 모델인 Laya를 사용해 보았습니다
3. 판단 전용 모델 Laya 소개
Laya는 Convai Innovations가 Apache 2.0 라이선스(자유롭게 쓸 수 있는 공개 라이선스)로 공개한 모델입니다. 공식 설명에서는 "비자기회귀 System 1 판단 모델"이라고 부릅니다. 쉽게 말해, 글을 쓰지 않고 직관적으로 한 번에 고르는 모델입니다. 텍스트와 질문(선택지)을 넣으면 한 번의 계산으로 선택지별 확률을 돌려 줍니다.
이번에는 여러 언어를 지원하는 laya-multilingual 체크포인트(학습이 끝난 모델 파일)를 사용했습니다. 아래 항목은 기술 설명이라 건너뛰고 4장으로 가셔도 됩니다.
- 구조: 인코더 백본 mmBERT-base(3.07억 파라미터, 22층, 어휘 25.6만 개)에, 처음부터 학습한 판단 헤드(트랜스포머 2층 등)를 붙였습니다. 합계 약 3.22억 파라미터입니다.
- 선택지 처리: 선택지마다 표식(
[MASK]토큰)를 두고, 각 표식의 점수를 해당 질문의 선택지끼리 softmax합니다. 그래서 요청마다 선택지가 달라도 재학습 없이 쓸 수 있습니다. - 입력 길이: 기본 1,024토큰(최대 8,192까지 설정 가능).
- 한계(모델 카드 기준): 선택지는 20개 미만을 권장합니다. 학습 없이 특정 업무에 쓰면 성능이 낮아(판단 과제 zero-shot에서 무작위 수준에 가까울 정도) 업무별 미세조정이 전제입니다. 확률은 과신 경향이 있어 보정이 필요합니다.
4. 한국어 회계 질문에 맞는 모델 선택
(1) 기존 BERT는 왜 적합하지 않을 수 있는가. BERT(구글, 2018)는 문장의 앞뒤 맥락을 모두 보고 분류하는 모델입니다. 다만 한 번에 볼 수 있는 입력이 최대 512토큰이고, 질문 하나와 후보 기준서명 16개를 함께 넣으려면 길이가 빠듯합니다. 이 경우 후보를 한 쌍씩 따로 판정해야 하는데, 후보끼리 비교하며 고르는 구조가 아니게 됩니다. 다만 이는 설계상의 추론이며, BERT를 이 문제에 직접 학습해 비교하진 않았습니다.
(2) ModernBERT란. ModernBERT는 BERT를 현대적으로 개량한 인코더로, 더 긴 입력(최대 8,192토큰)과 빠른 처리를 내세우는 모델 계열입니다. Laya의 영어 체크포인트(laya)는 ModernBERT-large(4.21억 파라미터) 위에 만들어졌습니다. 다만 영어 중심이라 한국어에서는 모델 카드의 별도 평가(의도 분류, 51개 언어)에서 정확도가 0.11에 그친 반면, 다국어 체크포인트는 0.49를 기록했습니다. 한국어 회계 질문을 다루므로 다국어 체크포인트를 골랐습니다.
(3) mmBERT. 다국어 체크포인트의 백본인 mmBERT는 100여 개 언어를 다루는 다국어 인코더입니다. 모델 카드에 따르면 영어판(1024차원, 28층)보다 더 작고(768차원, 22층) 처리가 약 2배 빠릅니다.
(4) 이 문제와의 적합성. 기준서 찾기는 "최대 16개 후보 중 하나 고르기"이고, Laya의 선택형 판단(후보 표식별 점수화)이 그대로 대응합니다. 후보 수도 권장 범위(20개 미만) 안입니다. 문장을 생성하지 않아 결과가 항상 정해진 형식(후보별 점수)으로 나옵니다.
5. 데이터
AI Hub 기업 회계처리 기준 데이터(71922)의 회계 질의응답 45,613건을 사용했습니다. 입력은 한국어 최초 질문과 회계체계이고, 답변과 원문 내용은 입력에서 제외했습니다. 정답 라벨은 데이터에 달린 대표 기준서이며, 회계체계는 K-IFRS, 일반 기업 회계 기준, 중소기업 회계 기준, 특수 및 비영리조직 회계 기준 4개, 기준서는 총 116개입니다. 데이터는 생성형 AI가 만든 질문을 전문가가 검토한 것이라, 모든 라벨이 정답이라고 가정하지 않습니다.
6. 학습 방법
- 후보 구성: BM25 검색으로 질문마다 회계체계 안에서 후보 기준서를 최대 16개 뽑습니다. BM25는 점수 방식 키워드 검색으로, 질문과 비교 대상에 같은 표현이 많이 겹칠수록 높은 점수를 줍니다. 이번에는 단어 대신 "2~3글자씩 이어진 글자 조각"(문자 n-gram)을 비교했습니다. 예를 들어 "리스계약"이라면 "리스", "스계", "계약", "리스계", "스계약"으로 쪼갭니다. 이러한 방법은 띄어쓰기나 조사가 달라져도 어느 정도 검색되는 장점이 있습니다.
- 학습 목표: 질문과 후보 기준서명을 하나의 입력(최대 1,024토큰)으로 넣고, 후보 중 정답을 고르도록 교차 엔트로피로 전체 미세조정합니다. 학습 시에만 정답이 후보에서 빠진 경우를 일부 주입하고, 평가에는 주입하지 않습니다.
- 설정: AdamW(인코더 학습률 2e-5, 헤드 1e-4), BF16, 그래디언트 누적 16, 최대 10 epoch, 검증 Top-1 기준 조기 종료.
- 평가: 같은 원문서에서 나온 문항이 학습과 평가에 나뉘지 않도록 원문서 단위로 묶은 5-fold 교차검증, 시드 3개.
위 내용은 기존 BM25 후보로 Laya를 학습한 방법입니다. 이후 실제 서비스에서 쓸 후보 생성 대안으로 TF-IDF+로지스틱 Top-16을 시험했고, Laya 가중치는 그대로 유지했습니다. 이 추가 비교와 현재 사용법은 아래에 따로 적었습니다.
7. 성능
전체 45,613개 질문을 기준으로 합니다. 이 절의 기본 결과는 BM25 후보를 사용한 기존 3시드 평가입니다. 모델은 질문마다 후보 기준서(최대 16개)에 점수를 매겨 순위를 정합니다. 이 순위를 아래 두 기준으로 채점합니다.
- Top-1(상위 1개): 훈련이 끝난 모델이 맨 위에 올린 기준서가 정답인 비율입니다. 76%라면 100개 질문 중 약 76개에서 맨 위 한 개가 바로 맞는 것입니다.
- Top-3(상위 3개): 맨 위 세 개 안에 정답이 들어 있는 비율입니다. 93%라면 상위 세 개만 훑어봐도 100개 중 약 93개에서 정답을 찾을 수 있다는 뜻입니다. 실무에서는 세 개를 함께 보는 사용 방식에 더 가깝습니다.
비교한 방법은 네 가지입니다. 숫자가 높을수록 좋습니다.
- 미세조정한 Laya(이번에 만든 모델): Top-1 76.1%, Top-3 93.4%
- 키워드 검색(BM25) 순서 그대로: Top-1 63.8%. 후보를 뽑을 때 쓴 검색 점수의 순서를 AI 없이 그대로 순위로 쓴 경우입니다. "검색만 했을 때"의 기준선입니다.
- 간단한 통계 모델(TF-IDF+로지스틱 회귀): Top-1 72.2%. TF-IDF는 질문에 들어 있는 글자 조각 가운데 어느 것이 특히 특징적인지 수치로 표현하는 방법이고, 로지스틱 회귀는 그 수치로 알맞은 기준서를 고르는 가벼운 전통 방식입니다. 더 무거운 AI를 쓸 가치가 있는지 보는 비교 기준입니다.
- 미세조정 전 Laya: Top-1 16.0%. 다만 측정 당시 판단 헤드의 상태는 아직 확인하지 못했으므로, 이 수치는 해석에 주의가 필요합니다.
정리하면 검색만 쓸 때보다 약 12%p, 간단한 통계 모델보다 약 4%p 더 정답을 1순위에 올렸습니다. 위 네 방법의 원래 비교에서는 BM25와 통계 모델의 Top-3 값을 제시하지 않았습니다.
실제 서비스에 쓸 후보 생성 대안을 시험했습니다
이 프로젝트의 기존 BM25 파이프라인을 실제 서비스에 그대로 사용할 수 없어, 배포 가능한 후보 생성 대안이 필요했습니다. 기존 구현은 학습 질문 중 비슷한 질문을 찾고 그 질문에 붙은 기준서명을 후보로 가져오는 구조였습니다. 그래서 학습 질문 검색 인덱스 없이 질문과 사용자가 선택한 회계기준 종류로 후보를 만드는 TF-IDF+로지스틱 회귀를 기존 Laya에 연결했습니다.
2026년 10월 11일 추가 평가에서는 TF-IDF+로지스틱 회귀가 후보 16개를 먼저 뽑고, 기존 Laya가 그 안에서 다시 고르게 했습니다. Laya를 새로 학습시키지는 않았습니다. Q1·시드 42의 5개 평가 fold, 같은 45,613건을 비교한 결과입니다. 위의 3시드 평균과는 구분해 읽어야 합니다.
- 로지스틱 단독: Top-1 72.186%, Top-3 91.658%
- 로지스틱 후보 → 기존 Laya: Top-1 75.667%, Top-3 92.921%
- 기존 BM25 후보 → Laya: Top-1 75.926%, Top-3 93.230%
새 조합은 로지스틱 단독보다 Top-1이 3.481%p 높고, 기존 BM25 조합보다 0.259%p 낮았습니다. 이 평가는 실제 서비스에서 쓸 대체 후보 생성기를 기존 Laya에 연결했을 때의 성능을 확인한 것입니다. 현재 배포 코드에서는 질문과 사용자가 선택한 회계기준 종류를 입력하면 후보 생성부터 선택까지 이어집니다.
다만 기존 평가 데이터를 다시 사용한 탐색 비교입니다. 기존 BM25 조합은 GPU BF16, 새 조합은 CPU FP32에서 실행했으므로 작은 차이를 후보 생성 방식의 효과만으로 보기는 어렵습니다.
8. 사용법
- 기본 입력: 한국어 질문 1개(최초 질문)와 적용할 회계기준 종류 1개입니다. 자동 후보 생성에서 지원하는 종류는 아래 4종이 전부이며, 사용자가 하나를 선택합니다. 오른쪽 코드 표기의 입력값을 공백까지 그대로 사용합니다.
- 한국채택국제회계기준(K-IFRS):
K-IFRS - 일반 기업 회계 기준:
일반 기업 회계 기준 - 중소기업 회계 기준:
중소기업 회계 기준 - 특수 및 비영리조직 회계 기준:
특수 및 비영리조직 회계 기준
- 한국채택국제회계기준(K-IFRS):
- 회계기준 종류는 질문에서 자동 판별하지 않습니다. 별칭 변환도 없으므로 위 입력값 대신 축약형을 쓰면 자동 후보 생성이 실행되지 않습니다.
AccountingScorer(model_root)로 모델을 불러온 뒤predict(request)에 사전 객체 하나를 전달합니다. 사전에 질문 필드question과 회계기준 종류 필드accounting_regime을 넣고candidates를 생략하면, TF-IDF+로지스틱 Top-16 자동 생성 → 기존 Laya의 후보 선택까지 이어집니다.- 직접 준비한 후보 기준서 3~16개를
candidates로 입력하는 방식도 사용할 수 있습니다. - 출력: 후보별 점수와 순위입니다. 후보에 정답이 빠질 수도 있으므로 상위 3개와 기준서 원문을 함께 확인합니다.
- 직접 학습한 모델은 허깅페이스에 있습니다: kwoncho/korean-accounting-standard-matcher (비공개 저장소라 권한이 있는 계정으로만 열립니다.) 최신 사용 예제와 문서
- Laya는 5-fold 중 fold 0·시드 42로 학습한 단일 모델입니다. 자동 후보 생성기도 같은 fold 0·Q1·학습 29,194건의 기존 산출물로 연결했습니다. 전체 데이터 재학습이나 Laya 재학습은 하지 않았습니다.
- 기존에 적은 단일 모델의 Top-1 74.95%, Top-3 92.85%(9,123건)는 BM25 후보를 사용한 fold 0 평가입니다. 새 자동 후보 방식의 단일 모델 성능이나 위 5-fold 통합 수치와 혼동하지 않아야 합니다.
- fold 0의 9,123건 후보 일치와 다운로드 후 CPU 실행을 확인했습니다. GPU/MPS 실행과 완전히 새 환경에서의 전체 의존성 설치는 아직 검증하지 않았습니다.
- AI Hub 원문 데이터와 전체 예측 결과는 업로드하지 않았습니다. 추론에 필요한 기존 모델·라벨 매핑, 코드·문서와 집계 평가 결과만 저장소에 반영했습니다.
9. 한계와 유의점
- 후보에 정답이 없는 경우: 기존 BM25 후보 16개의 정답 포함률은 98.915%, 새 로지스틱 후보는 98.785%였습니다. 새 방식에서는 45,613건 중 554건(약 1.2%)에서 정답이 후보에 없었습니다. 학습에서 보지 못한 라벨 52건도 제외하지 않고 평가했습니다. 이때는 Laya가 순위를 잘 매겨도 목록에 없는 정답을 고를 수 없습니다. 참고로 기존 BM25 후보를 8개로 줄이면 누락 비율은 약 3.5%였습니다.
- 사례가 적은 기준서(116개 중 36개): 학습에 쓰인 질문이 50건 미만이어서 모델이 충분히 배우지 못했고, 성능이 낮습니다. 예를 들어 "K-IFRS 재무보고를 위한 개념체계"는 전체 45,613건 중 14건뿐입니다. 비슷한 기준서와 섞이면 이런 기준서는 밀려나기 쉽습니다.
- 비슷한 기준서끼리의 혼동: 질문 하나에 기준서 여러 개가 걸쳐 있으면 모델이 엉뚱한 쪽을 1순위로 올릴 수 있습니다. 예를 들어 사무실 임대 질문이라면 리스(제1116호)와 유형자산(제1016호) 중 어느 쪽인지 헷갈릴 수 있습니다. 이 예시는 이해를 돕기 위한 가상의 사례이며, 실제로 어떤 기준서끼리 얼마나 혼동했는지는 이번 글에서 측정하지 않았습니다. 이런 이유로 1순위 하나만 믿기보다 상위 3개를 함께 확인하길 권합니다.
- 기준서 후보 자동 생성은 지원합니다. 적용할 회계기준 종류의 자동 판별, 답변·근거 문단 생성, 후속 질문 입력은 지원하지 않습니다. 새 후보 구성에서 점수의 확률 보정은 아직 검증하지 않았으므로 점수를 정답 확률로 단정하지 않습니다.
- 수치는 데이터에 달린 대표 라벨과의 일치율이며 회계적 타당성을 보증하지 않습니다. 전문가 검증은 하지 않았습니다. 참고용 도구이며 최종 판단은 전문가가 합니다.
- 이번 평가는 내부 탐색적 교차검증이며, 독립된 외부 테스트가 아닙니다.
참고
- Laya multilingual 모델 카드: https://huggingface.co/convaiinnovations/laya-multilingual
- Laya GitHub: https://github.com/NandhaKishorM/laya
- 직접 학습한 모델(비공개): https://huggingface.co/kwoncho/korean-accounting-standard-matcher
- 사용한 데이터, AI Hub 기업 회계처리 기준 데이터(71922): https://www.aihub.or.kr/aihubdata/data/view.do?aihubDataSe=data&currMenu=115&dataSetSn=71922&topMenu=100