한국어 문서 검색 벤치 · v1 · 고정일 2026-10-19
세무-v1
국세 6법(기본·소득·법인·부가·상속증여·징수)과 세무 판례 · 코퍼스 문서 6,445건 · 공개 문항 99 · 숨긴 문항 50
묶음별 점수
큰 숫자는 recall@10, 아래는 @1 · @5 · MRR 입니다. ‘전체’는 공개 문항 전부, ‘숨김’은 숨긴 문항만입니다(따로 셉니다). 다른 평가판과 점수를 비교하지 않습니다.
| 모델 | 전체 | 상담 | 일상어 | 사연 | 키워드 | 숨김 |
|---|---|---|---|---|---|---|
| BM25 | 0.24 0.10 · 0.21 · 0.157 | 0.27 0.10 · 0.24 · 0.161 | 0.08 0.00 · 0.08 · 0.032 | 0.24 0.12 · 0.20 · 0.180 | 0.29 0.14 · 0.24 · 0.194 | 0.24 0.06 · 0.16 · 0.122 |
| EmbeddingGemma 2 | 0.38 0.13 · 0.30 · 0.212 | 0.41 0.17 · 0.29 · 0.247 | 0.25 0.08 · 0.08 · 0.113 | 0.40 0.16 · 0.36 · 0.256 | 0.38 0.05 · 0.38 · 0.150 | 0.48 0.18 · 0.38 · 0.276 |
| EmbeddingGemma 2 GGUF | 0.39 0.13 · 0.26 · 0.211 | 0.44 0.17 · 0.27 · 0.248 | 0.25 0.08 · 0.08 · 0.115 | 0.40 0.16 · 0.36 · 0.251 | 0.38 0.05 · 0.24 · 0.147 | 0.48 0.18 · 0.36 · 0.278 |
| BGE-M3 | 0.58 0.24 · 0.44 · 0.346 | 0.56 0.20 · 0.46 · 0.322 | 0.17 0.08 · 0.17 · 0.126 | 0.72 0.36 · 0.52 · 0.446 | 0.67 0.29 · 0.48 · 0.402 | 0.64 0.20 · 0.54 · 0.345 |
| KURE-v1 | 0.61 0.20 · 0.48 · 0.337 | 0.66 0.22 · 0.59 · 0.380 | 0.33 0.17 · 0.17 · 0.195 | 0.64 0.24 · 0.52 · 0.372 | 0.62 0.14 · 0.43 · 0.290 | 0.68 0.28 · 0.54 · 0.413 |
| KURE-v2 | 0.67 0.32 · 0.60 · 0.453 | 0.71 0.37 · 0.68 · 0.499 | 0.50 0.25 · 0.50 · 0.371 | 0.64 0.24 · 0.48 · 0.366 | 0.71 0.38 · 0.62 · 0.512 | 0.76 0.34 · 0.70 · 0.514 |
묶음별 문항 수: 상담 41 · 일상어 12 · 사연 25 · 키워드 21
짝지은 검정 — McNemar
같은 문항을 두 모델이 풀었을 때, 한쪽만 맞힌 문항 수를 비교합니다(정확 이항 양측 검정). 점수가 바짝 붙은 문항은 기계·묶음에 따라 순위가 바뀔 수 있어, 두세 문항 차이는 모델 차이로 읽지 않고 이 검정을 같이 봅니다. 공개 문항 중 두 모델 모두 순위가 있는 문항만 씁니다.
숨긴 문항은 문항별 순위를 공개하지 않아 여기서 계산하지 않습니다. 숨긴 50문항은 McNemar 힘이 약해 판정 근거가 아니라 공개 점수와 크게 벌어지는지 보는 표시로만 씁니다.
| KURE-v2 대 | @1 KURE-v2만 · 상대만 · p | @5 KURE-v2만 · 상대만 · p | @10 KURE-v2만 · 상대만 · p |
|---|---|---|---|
| BM25 | 25 · 3 · p 2.7e-5 | 40 · 2 · p 4.1e-10 | 44 · 2 · p 3.1e-11 |
| EmbeddingGemma 2 | 28 · 9 · p 0.0026 | 37 · 8 · p 1.5e-5 | 35 · 7 · p 1.5e-5 |
| EmbeddingGemma 2 GGUF | 28 · 9 · p 0.0026 | 40 · 7 · p 1.1e-6 | 34 · 7 · p 2.5e-5 |
| BGE-M3 | 18 · 10 · p 0.18 | 22 · 7 · p 0.0081 | 17 · 8 · p 0.11 |
| KURE-v1 | 22 · 10 · p 0.05 | 20 · 9 · p 0.061 | 14 · 8 · p 0.29 |
흐린 글씨는 p 가 0.05 이상인 칸입니다.
이 평가판은 어떻게 쟀나
1. 시험지를 만든 법
- 법: 국세기본법 · 소득세법 · 법인세법 · 부가가치세법 · 상속세및증여세법 · 국세징수법
- 코퍼스: 위 법의 조문(법령 기준일 2026-10-16)과, 그 분야 판례 중 참조조문에 위 법이 나오는 것(요지·판시사항). 판례가 많으면 시드를 정해 4,000건까지만 넣었습니다.
- 정답 문서: 코퍼스에서 시드로 공개 100 + 숨김 50 을 뽑았습니다. 조문 70 : 판례 30 비율입니다. 본문이 겹치는 문서, 50자 미만, ‘삭제’된 조문, 제목이 5번 이상 나오는 상투 조문은 정답 후보에서 뺐습니다.
- 질문: 정답 문서마다 Claude 가 질문을 썼습니다. 질문 모양 4가지(상담·사연·키워드·일상어)를 미리 배정했고, 낱말 겹침 0.45 미만 검사를 통과한 것만 남겼습니다.
만든 기록: tools/law_suites.py (법령 기준일 2026-10-16 · 판례 상한 4000 · 시드 20261018)
2. 낱말 겹침
겹침 = 질문을 두 글자씩 자른 조각 가운데 정답 문서에도 나오는 조각의 비율입니다(조문은 법 이름·조 제목까지 문서로 봅니다). 0.45 이상이면 질문을 다시 썼습니다. 낱말이 많이 겹치면 낱말 검색만으로도 맞히기 쉬워져서입니다. 공개 문항 겹침: 평균 0.180 · 최대 0.444. 숨긴 문항의 겹침 값은 공개 자료에 없습니다.
다시 쓴 문항: 기록 없음
| 겹침 구간 | 문항 수 | BM25 r@10 | EmbeddingGemma 2 r@10 | EmbeddingGemma 2 GGUF r@10 | BGE-M3 r@10 | KURE-v1 r@10 | KURE-v2 r@10 |
|---|---|---|---|---|---|---|---|
| 0.00 이상 0.10 미만 | 26 | 0.00 | 0.19 | 0.19 | 0.35 | 0.38 | 0.35 |
| 0.10 이상 0.20 미만 | 32 | 0.09 | 0.44 | 0.47 | 0.59 | 0.59 | 0.66 |
| 0.20 이상 0.30 미만 | 24 | 0.46 | 0.46 | 0.46 | 0.75 | 0.75 | 0.92 |
| 0.30 이상 0.45 미만 | 17 | 0.59 | 0.47 | 0.47 | 0.65 | 0.76 | 0.82 |
구간별 r@10 은 공개 문항의 순위로 이 페이지에서 계산한 값입니다.
3. 모델마다 넣은 형식
- BM25
k1=1.5b=0.75낱말 기준선입니다. 한글·숫자·영문만 남기고 두 글자씩 잘라 BM25 식으로 점수를 매기고, 낱말 희소도(idf)는 그 평가판 코퍼스 하나로 셉니다.
- EmbeddingGemma 2질문:
"task: search result | query: {q}"문서:"title: {title} | text: {body}"원본 가중치입니다. 넣는 형식은 모델 카드 원문 그대로입니다. max_seq 는 카드 최대인 8192 — 2048 이면 법령검색의 긴 판례 28건이 잘립니다. dtype 은 transformers 5 기본값(auto)이 고르는 bf16 입니다.
- EmbeddingGemma 2 GGUF질문:
"task: search result | query: {q}"문서:"title: {title} | text: {body}"GGUF Q8_0 입니다. LM Studio 에 문맥 8192(-c 8192)로 올린 뒤 쟀습니다. 넣는 형식은 원본과 같습니다.
- BGE-M3질문:
"{q}"문서:"{title}\n{body}"문서(판례):"{body}"KURE-v1 의 바탕 모델입니다. KURE-v1 과 같은 설정·같은 라이브러리 버전으로 재서 한국어 미세조정이 보탠 몫을 봅니다. 모델 카드에 접두어가 없어 붙이지 않았습니다.
- KURE-v1질문:
"{q}"문서:"{title}\n{body}"문서(판례):"{body}"BGE-M3 를 미세조정한 모델로, 문서당 벡터가 하나입니다. KURE-v2 와 같은 입력 형식으로 넣었습니다 — 두 모델의 점수 차이가 방식(벡터 하나 대 토큰마다 벡터) 차이인지 보려고. max_seq 는 카드 설정 그대로입니다.
- KURE-v2질문:
"{q}"문서:"{title}\n{body}"문서(판례):"{body}"ColBERT 방식(토큰마다 벡터)입니다. 질의·문서 접두어 [Q]/[D] 와 질의 64토큰 확장은 pylate 가 카드 설정대로 붙입니다. 질의 상한이 64토큰이라 긴 질문(사연형)은 잘립니다. 판례는 본문만 넣습니다 — 법령검색 판례 본문이 사건명으로 시작해서 먼저 잰 기록과 같게 했습니다.
4. 런타임·양자화·버전
| 모델 | 런타임 · id · revision | dtype · max_seq · 차원 | 라이브러리 (requires → 실제) | 잰 시각 |
|---|---|---|---|---|
| BM25 | bm25 | — · — · — | python 3.14.7 · numpy 2.5.4 | 2026-10-18 20:59:31 |
| EmbeddingGemma 2 | stgoogle/embeddinggemma-2914f7f89142e33e77833254d9c9b90c3cef7303b | torch.bfloat16 · 8192 · 768 | sentence-transformers==6.1.0 transformers==5.19.0 torch==2.14.1 torchvision==0.29.1 pillowpython 3.14.7 · numpy 2.5.4 · torch 2.14.1 · sentence_transformers 6.1.0 · transformers 5.19.0 | 2026-10-18 21:08:35 |
| EmbeddingGemma 2 GGUF | lmstudiotext-embedding-embeddinggemma-2ggml-org/embeddinggemma-2-GGUF Q8_0 | — · — · 768 | python 3.14.7 · numpy 2.5.4 | 2026-10-18 21:45:04 |
| BGE-M3 | stBAAI/bge-m35617a9f61b028005a4858fdac845db406aefb181 | torch.float32 · 8192 · 1024 | sentence-transformers==6.1.0 transformers==5.19.0 torch==2.14.1python 3.14.7 · numpy 2.5.4 · torch 2.14.1 · sentence_transformers 6.1.0 · transformers 5.19.0 | 2026-10-19 08:02:56 |
| KURE-v1 | stnlpai-lab/KURE-v18b418a58414668e75532ed045c22d9ca018ae2b2 | torch.float32 · 8192 · 1024 | sentence-transformers==6.1.0 transformers==5.19.0 torch==2.14.1python 3.14.7 · numpy 2.5.4 · torch 2.14.1 · sentence_transformers 6.1.0 · transformers 5.19.0 | 2026-10-18 23:31:06 |
| KURE-v2 | pylatenlpai-lab/KURE-v23431f86d399d666083890dbb882aced6708873bc | — · — · — | pylate==1.6.0 transformers==5.3.0 torch==2.11.0python 3.14.7 · numpy 2.5.4 · torch 2.11.0 · sentence_transformers 5.3.0 · transformers 5.3.0 · pylate 1.6.0 | 2026-10-18 21:28:12 |
dtype 은 실행 기록에 남은 실제 값이고, 없으면 모델 파일 값입니다. ‘—’ 는 그 모델에 해당 설정이 없거나 기록되지 않은 것입니다. 실행 기록의 기계는 모두 arm64(맥북)이고, GGUF 는 LM Studio 에서 돌렸습니다.
5. 점검과 의심
- 문항을 쓰면서 따로 표시해 둔 의심 문항(같은 제목의 조문, 흔한 판례 쟁점, 다른 조문을 준용하는 한 줄짜리 조문)은 v1 고정 전 정오표 후보로 두고, 세 모델이 모두 10위 밖인 문항과 대조해 정했습니다. 결과는 아래 ‘틀렸던 것’에 있습니다.
- KURE-v2 는 질의 상한이 64토큰(카드 설정)이라 사연형 질문(토큰 중앙값 88)이 잘립니다. 세무에서 상한을 256 으로 늘려 보니 사연 묶음은 0.58 → 0.66 으로 올랐지만, 짧은 질문은 [MASK] 확장 때문에 떨어졌습니다(키워드 0.57 → 0.33). 그래서 카드 설정을 기본으로 두었습니다. 자르지 않는 판은 따로 모델 파일을 만들어 잴 계획입니다.
6. 틀렸던 것 — 정오표
- 제외: 1문항
- 세030 — 어느 조항인지 말하지 않고 양도세 하위규정이 모법 위반으로 무효인지 묻는다. 코퍼스에 같은 유형 판례가 여럿이라 정답(87누93, 시행령 170조1항 단서)을 가려낼 단서가 없다. top3는 오히려 계산 방법(취득가액) 규정이라 질문에 더 맞는다.
- 정답 추가: 12문항 — 세010(1건) · 세014(2건) · 세024(1건) · 세031(1건) · 세045(1건) · 세049(3건) · 세057(1건) · 세059(4건) · 세073(1건) · 세076(1건) · 세083(1건) · 세093(1건). 같은 법리를 되풀이한 판례 여러 건, 또는 같은 내용이 법률·시행령·시행규칙에 나뉜 경우가 대부분입니다. 순위는 정답들 가운데 가장 높은 것을 씁니다.
- 정답 교체: 없음
- 중복 판례 정리: 같은 사건의 복사본 54건을 코퍼스에서 뺐습니다. 같은 판시 문장이라도 다른 사건이면 빼지 않았습니다.
- 숨긴 문항: 5문항을 고쳤습니다(어느 문항인지는 공개하지 않습니다).
정오표를 본 것은 그때까지 잰 세 모델(BM25 · EmbeddingGemma 2 · KURE-v2)이 모두 10위 밖이던 문항뿐입니다. 10위 안에 든 문항에도 정답이 둘인 것이 섞여 있을 수 있어 recall@1 이 조금 낮게 나올 수 있습니다. 그래서 recall@10 을 주 지표로 둡니다.
7. 기계 상태
안 잼 — 색인 시간·지연·메모리는 법령검색-v1 에서만 쟀습니다.
8. 다시 재는 법
uv run bench.py run --model <이름> --suite 세무-v1 uv run bench.py compare kure2 gemma2
- 코퍼스 해시:
a7e8fbf4ba4a - 고정 시점 코퍼스 해시:
a7e8fbf4ba4a - 고정 시점 공개 문항 해시:
f86c5ceac40a - 고정 시점 숨긴 문항 해시:
72ed03cac707 - 고정 시점 정오표 해시:
01ea88203166
해시는 각 파일 sha256 의 앞 12자입니다. 모델 revision 은 4번 표에 있습니다.
공개 문항 99개
99개 · 숫자는 모델마다 정답 문서의 순위입니다(초록 = 10위 안, 진한 초록 = 1위) · 행을 누르면 정답 문서 id 가 열립니다
- 세030 · 제외제외 — 어느 조항인지 말하지 않고 양도세 하위규정이 모법 위반으로 무효인지 묻는다. 코퍼스에 같은 유형 판례가 여럿이라 정답(87누93, 시행령 170조1항 단서)을 가려낼 단서가 없다. top3는 오히려 계산 방법(취득가액) 규정이라 질문에 더 맞는다.
정답이나 잰 방법이 틀렸다고 보이면 알려 주세요
평가판 이름·문항 번호와 이유를 적어 varkiry05@gmail.com 로 보내 주세요.