Translate the checker too: building HanIFEval, a Korean IFEval
채점기도 같이 번역해야 한다: 한국어 IFEval, HanIFEval을 만들며
In an existing Korean IFEval, 27 of 342 prompts ask for something different from what the code scores. Translating each prompt together with its checker's arguments leaves 3 unpassable items, and those 3 cannot be passed in English either.
기존 한국어 IFEval 342문항 중 27개는 프롬프트가 요구하는 것과 코드가 채점하는 것이 다르다. 프롬프트를 채점기 인자와 함께 번역하자, 통과할 수 없는 문항은 영어 원본에서도 통과할 수 없는 3개만 남았다.
Contents
IFEval is scored by code, not by a judge model. Each item is a prompt plus the arguments its checker uses: “at least 300 words” is the prompt’s text, and relation: at least, num_words: 300 is what the code tests. Translate only the prompt and the two can drift apart. The Korean prompt then asks for one thing while the checker scores another.
I audited an existing Korean translation and found that in 1 item out of 13. So I built HanIFEval, which translates each prompt together with its checker arguments and then checks the pair with code. This post covers why that was needed, how it was built, what Korean does to a substring-based checker, and how five budget LLMs did on it.
Current scores for HanIFEval and three other Korean tests are on the Korean benchmark page.
TL;DR
| IFEval-Ko (audited) | HanIFEval v1.1 | |
|---|---|---|
| Items (from IFEval) | 342 | 429 |
| A faithful answer can fail | 27 (7.9%) | 3 (0.7%), unpassable in English too |
| Forbidden word + particle | not detected | detected |
| Known issues | not marked | 8, tagged per item |
“Forbidden word + particle” means a case like 사과를, where a particle follows the forbidden 사과. The two numbers in the second row come from different checks: a by-hand audit for IFEval-Ko, and honest answers scored by the checker for HanIFEval. Both are described below.
- The defects come from the procedure, not the translator. On 120 en→ko segments (news, social, speech, literary), GPT-4o and three newer models could not be told apart by an automatic metric. The fix was to translate the prompt and the checker’s arguments in one step, then test them against each other.
- Korean breaks substring matching in specific ways. For example, a forbidden ‘예’ (yes) also matches inside 예정 (schedule) and 예상 (forecast). The worst problem, though, came from a rule in my own translation guideline.
- Five budget models score 92.5–97.2%, and each has one weak instruction type. For GPT-6 Luna it is paragraph dividers, for GLM 5.3 Flash forbidden words, and for Solar Pro 4 minimum length.
Why a translated IFEval breaks
I audited allganize/IFEval-Ko, translated from IFEval with GPT-4o. The audit had three parts:
- a code check of every prompt against its arguments;
- an LLM comparison of each English item with its Korean version;
- a ruling by hand on everything either method flagged.
In 27 of 342 items, an answer that follows the Korean prompt can be scored as a fail:
| What went wrong | Items |
|---|---|
| “less than N” became “N 이하” (N or fewer); fails only at exactly N | 15 |
| Repeat-the-request instruction reversed or cut short | 4 |
| English keyword left in the checker | 3 |
| “more than 2 times” became “2번 이상” (2 or more), while the checker counts 3 or more | 3 |
| “600+ words” became “600자” (600 characters) | 1 |
| Fixed answer options in the prompt differ from the checker’s | 1 |
The audit also found problems in the other direction, where a violating answer passes:
- Forbidden words were not detected in Korean. The checker matched them as whole words (regex
\b). A Korean noun is usually followed by a particle, as in 사과를, so there is no word boundary and the forbidden 사과 goes unnoticed. This affects all 28 prompts with forbidden words. - Two prompts never mention a forbidden word that the checker enforces.
None of this is a translation-quality problem. On 120 WMT24++ en→ko segments (30 each from news, social, speech and literary text) I scored GPT-4o, Gemini 3.1 Pro, Gemini 3.8 Flash and Claude Opus 5.5 with MetricX-24, and no pair differed. What failed was the procedure: the prompt was translated, but its arguments were never checked against it.
How HanIFEval was built
- Scope. IFEval has 541 items. 112 use upper/lower case or letter-frequency rules, which have no Korean equivalent, so they are dropped. That leaves 429 items with 21 instruction types and 633 instructions.
- Checker before translation. I started from IFEval-Ko’s checker with five marked fixes. One example: keywords and forbidden words are matched as substrings, so 사과를 counts as 사과.
- One guideline, used as the system prompt. The prompt and its string arguments are translated together as one string. Numbers and relations come from the arguments through a fixed table: “less than N” is always “N 미만” and “at least N” is always “N 이상”. Word counts say “N단어(띄어쓰기 기준)”, i.e. words separated by spaces.
- Translator. Gemini 3.1 Pro at high reasoning effort. My metric could not separate the candidates. I picked it for two reasons. It scored highest when I recomputed en→ko means from the human-evaluation annotations WMT26 released (not an official ranking, and not significantly above GPT 5.5). And it is not one of the models I was going to test.
- Code check. A validator compares every prompt with its arguments. It flagged 9 of 429 items, none of them a translation defect.
- Model review. Eight Claude Opus 5.5 reviewers read all 429 items. They reported 70 findings on 60 items, 15 of which break scoring. Each reviewer also wrote an honest answer to every item, and the checker scored those answers.
- Logged edits → v1. 17 edits on 17 items, each with its reason in the provenance file.
- Two external reviews → v1.1. GPT-6 Pro and GPT-6 Astra at the Ultra reasoning effort reviewed v1, the second one item by item. 16 more items were edited, the sentence splitter was fixed, and an answer whose language cannot be detected now fails.
The finished check: of the 429 honest answers, 426 pass under strict scoring. The other 3 ask the answer to repeat text that already contains a forbidden or capped word, and the English items have the same trap.
Building the set (audit, translator comparison and translation) cost $10.34 in API calls. The Claude reviews ran in a coding-agent session and are not in that figure.
What Korean does to a substring checker
Collisions. Korean words carry particles and endings, so a short string shows up inside unrelated words. I checked every keyword and forbidden word against 65,378 eojeol (space-separated words) of KLUE news and web text:
- Forbidden ‘예’ (yes) appears 49.9 times per 10,000 eojeol, mostly inside 예정 and 예상. No safe rendering exists, so the item is tagged rather than edited.
- Forbidden ‘미친’ (crazy) fails the ordinary phrase 영향을 미친다 (to have an effect), so it became ‘광기’ (madness).
- Keyword ‘가오’ was satisfied by 다가오다 (to approach). The source word is a nonce token, so it stays in Latin script as ‘gao’.
Inflection. Forbidding the verb ‘타다’ (to ride) misses 타고 and 탔다. The stem ‘타’ would match almost everything. That item is tagged too.
My own rule broke 8 items. The guideline told the translator to write “쉼표(,)” (comma) in no-comma instructions, and another rule required repeat-the-request text to be copied verbatim. So in 8 items, the text the model must repeat contained a comma that the same item forbids, and no answer could pass. Loose scoring hid all 8, because one of its variants drops the first line of the answer, which is where the repeat sits. The reviewers caught them, and the “(,)” was removed.
Word counts are eojeol. One eojeol carries more than one English word: across the 429 prompts there are 0.717 eojeol per English word. I kept every N as in the source, so “at least 300 words” asks for more content in Korean. How much more was not measured on answers.
Results: five budget LLMs
Same models and settings as the other Korean tests: reasoning on at the provider’s default effort, temperature 0, a 64,000-token limit, one sample per item, each model on one pinned provider. Prompt-level strict means every instruction in the item was followed.
| Model | Prompt-level strict [95% CI] | Passed | Weakest instruction type |
|---|---|---|---|
| DeepSeek V4.1 Flash | 97.2% [95.2, 98.4] | 417/429 | repeat the request, 36/40 |
| GLM 5.3 Flash | 95.3% [92.9, 97.0] | 409/429 | forbidden words, 38/45 |
| GPT-6 Luna | 93.2% [90.5, 95.3] | 400/429 | number of paragraphs, 13/22 |
| Solar Pro 4 | 93.0% [90.2, 95.1] | 399/429 | minimum word count, 30/43 |
| Solar Mini 4 | 92.5% [89.7, 94.7] | 397/429 | repeat the request, 33/40 |
Measured 2026-10-02/03. Bold marks the weak spots this post is about, not a winner.
The set is near ceiling for these models. All five pass 351 of the 429 items, so the remaining 78 carry every difference. The only significant gaps are DeepSeek over GPT-6 Luna (22 vs 5 items, p = 0.0015), Solar Pro 4 (22 vs 4, p = 0.0005) and Solar Mini 4 (26 vs 6, p = 0.0005). The 3 items no model passes are the 3 that cannot be passed in English.
Each model’s misses cluster in one place:
- GPT-6 Luna separates paragraphs with blank lines, or puts
***only at the end, although every one of these prompts names***as the divider. - GLM 5.3 Flash writes the forbidden words while saying it avoided them: “‘변경’과 ‘여유’라는 단어는 사용하지 않았습니다” (“I did not use the words ‘변경’ and ‘여유’”).
- Solar Pro 4 stops short. All 13 misses are minimum lengths, answered at 43–97% of the target, e.g. 388 eojeol where at least 900 were asked.
- Repeat-the-request, the weakest type for DeepSeek and Solar Mini 4, is missed by putting a preface before the repeat (“먼저, 요청하신 대로…”, “First, as you asked…”) or by changing a word in it. In the first run of four models, 9 of the 14 repeat misses were a preface and 5 a changed word.
For the first four models, I checked every forbidden-word and repeat failure against the response. Each was a real violation; none came from a substring collision in the items.
The ranking is not the one from Korean knowledge tests. GPT-6 Luna ties DeepSeek on KoBALT and LBox, but here it is in the bottom group. Knowing Korean and following instructions written in Korean are separate abilities.
What it cost
Sorted by list price, cheapest first. Price is USD per 1M input / output tokens on the pinned provider, checked 2026-09-29 (Solar Mini 4 on 2026-10-03). Reasoning tokens are billed as output.
| Model | Price in / out | Cost, 429 items | Reasoning tokens per item | Prompt-level strict |
|---|---|---|---|---|
| Solar Mini 4 | $0.05 / $0.20 | $0.34 | 3,580 | 92.5% |
| Solar Pro 4 | $0.09 / $0.36 | $0.47 | 2,651 | 93.0% |
| GPT-6 Luna | $0.10 / $0.50 | $0.16 | 301 | 93.2% |
| GLM 5.3 Flash | $0.15 / $0.50 | $0.91 | 3,201 | 95.3% |
| DeepSeek V4.1 Flash | $0.15 / $0.60 | $0.73 | 2,416 | 97.2% |
Token price does not predict what a run costs. Solar Mini 4 has half of GPT-6 Luna’s price but cost 2.1 times as much, because it reasons about 12 times longer per item. DeepSeek cost 4.6 times as much as GPT-6 Luna for 4.0 more points, and that gap is significant. Between Solar Pro 4, Solar Mini 4 and GPT-6 Luna, the scores cannot be told apart, so on the total score, cost is what separates them.
I do not divide score by cost. With every score between 92.5% and 97.2%, the ratio would mostly rank cost again.
Caveats
- No native speaker reviewed the items. A model translated them (Gemini), and other models reviewed them (Claude, GPT-6). Code verifies that each prompt agrees with its checker and that the items can be passed; naturalness and faithfulness are judged only by models.
- GPT-6 Luna is a GPT-6-family model, and GPT-6 models reviewed v1. Those reviews led to 16 edits but wrote none of the items. The translator (Gemini) and the reviewers (Claude) are from families not tested here.
- Report strict scores. Loose scoring forgives a skipped first line, which hides repeat failures.
- Not identical to English IFEval item by item. Two items are passable in Korean but not in English, and three state the checker’s number where the English wording disagrees with it.
- Contamination. HanIFEval is new, but its English source has been public since 2023. The dataset card carries a canary string for tracking.
- One run per model, one configuration, one sample per item.
- Cost covers the scored rows only, at the list prices above. The 16 items edited for v1.1 were re-generated, so their cost replaces the v1 rows’ cost.
Using it
The data, the checker and a standalone scorer are on Hugging Face under Apache-2.0. Use tag v1.1 to pin the version:
from datasets import load_dataset
ds = load_dataset("developer0hye/HanIFEval", revision="v1.1", split="test")
python score.py --responses responses.jsonl # scores against v1.1 by default
Each line of responses.jsonl is {"key": int, "response": str}. A missing response counts as a fail.
Reproducing
Everything is in developer0hye/llm-evals:
- the audit of IFEval-Ko and the translator comparison;
- the guideline, raw translator output, reviews and every edit with its reason;
- per-item model responses and the analysis script.
NOTES.md there is the full research log: every decision, number and dead end behind this post.
목차
IFEval은 판정 모델이 아니라 코드로 채점한다. 각 문항은 프롬프트와 채점기가 쓰는 인자로 이루어진다. “300단어 이상"은 프롬프트의 문장이고, relation: at least, num_words: 300은 코드가 실제로 검사하는 값이다. 프롬프트만 번역하면 둘이 어긋날 수 있다. 그러면 한국어 프롬프트는 이것을 요구하는데 채점기는 저것을 채점하게 된다.
기존 한국어 번역본을 감사해 보니 13문항에 1개꼴로 이런 문제가 있었다. 그래서 프롬프트와 채점기 인자를 함께 번역하고 둘을 코드로 대조하는 **HanIFEval**을 만들었다. 이 글에서는 그것이 왜 필요했는지, 어떻게 만들었는지, 한국어가 부분 문자열 기반 채점기에 어떤 문제를 일으키는지, 저가형 LLM 다섯 개가 어떤 결과를 냈는지 다룬다.
HanIFEval과 다른 한국어 테스트 세 가지의 최신 점수는 한국어 벤치마크 페이지에 있다.
요약
| IFEval-Ko (감사 결과) | HanIFEval v1.1 | |
|---|---|---|
| 문항 수 (IFEval 기반) | 342 | 429 |
| 충실한 답이 실패할 수 있는 문항 | 27 (7.9%) | 3 (0.7%), 영어로도 통과 불가 |
| 금지어 + 조사 | 잡지 못함 | 잡음 |
| 알려진 문제 | 표시 없음 | 8개, 문항별 태그 |
“금지어 + 조사"는 금지어 사과 뒤에 조사가 붙은 사과를 같은 경우다. 둘째 행의 두 숫자는 서로 다른 검사에서 나왔다. IFEval-Ko는 손으로 한 감사, HanIFEval은 성실한 답안을 채점기로 채점한 결과다. 두 방법 모두 아래에서 설명한다.
- 결함은 번역기가 아니라 절차에서 나온다. 영→한 문장 120개(뉴스, 소셜, 연설, 문학)에서 GPT-4o와 최신 모델 세 개는 자동 지표로 구별되지 않았다. 해결책은 프롬프트와 채점기 인자를 한 번에 번역하고 서로 대조하는 것이었다.
- 한국어는 부분 문자열 매칭을 특정한 방식으로 깨뜨린다. 예를 들어 금지어 ‘예’는 예정, 예상 안에서도 걸린다. 그런데 가장 큰 문제는 내가 쓴 번역 가이드라인의 규칙 하나에서 나왔다.
- 저가형 모델 다섯 개가 92.5~97.2%를 기록했고, 모델마다 약한 지시 유형이 하나씩 있다. GPT-6 Luna는 문단 구분선, GLM 5.3 Flash는 금지어, Solar Pro 4는 최소 분량이다.
번역한 IFEval이 깨지는 이유
GPT-4o로 IFEval을 번역한 allganize/IFEval-Ko를 감사했다. 감사는 세 단계였다.
- 모든 프롬프트를 그 인자와 코드로 대조했다.
- 영어 문항과 한국어 문항을 LLM으로 하나씩 비교했다.
- 두 방법 중 하나라도 걸어 낸 문항은 직접 판정했다.
342문항 중 27문항에서는 한국어 프롬프트를 따른 답이 실패로 채점될 수 있다.
| 무엇이 잘못됐나 | 문항 |
|---|---|
| “less than N”(N 미만)이 “N 이하"가 됨. 정확히 N일 때만 실패 | 15 |
| 요청 반복 지시가 뒤집히거나 잘림 | 4 |
| 채점기에 영어 키워드가 그대로 남음 | 3 |
| “more than 2 times"가 “2번 이상"이 됐는데, 채점기는 3번 이상을 셈 | 3 |
| “600+ words"가 “600자"가 됨 | 1 |
| 프롬프트의 고정 답변 선택지가 채점기의 것과 다름 | 1 |
반대 방향, 즉 지시를 어긴 답이 통과하는 문제도 있었다.
- 한국어 금지어를 잡지 못했다. 채점기는 금지어를 단어 단위(정규식
\b)로 찾았다. 한국어 명사 뒤에는 보통 조사가 붙어 사과를처럼 쓰이므로 단어 경계가 없고, 금지어 사과는 걸리지 않는다. 금지어가 있는 프롬프트 28개 전부가 해당된다. - 두 프롬프트는 채점기가 검사하는 금지어를 아예 언급하지 않는다.
어느 것도 번역 품질 문제가 아니다. WMT24++ 영→한 문장 120개(뉴스, 소셜, 연설, 문학 각 30개)로 GPT-4o, Gemini 3.1 Pro, Gemini 3.8 Flash, Claude Opus 5.5를 MetricX-24로 채점했는데, 어느 두 모델도 차이가 없었다. 실패한 것은 절차였다. 프롬프트는 번역했지만 그 인자와 대조하지 않았다.
HanIFEval을 만든 과정
- 범위. IFEval은 541문항이다. 대소문자나 글자 빈도 규칙을 쓰는 112문항은 한국어에 대응하는 것이 없어 뺐다. 남은 것은 429문항, 지시 유형 21개, 지시 633개다.
- 번역 전에 채점기부터. IFEval-Ko의 채점기에서 출발해 표시된 수정 다섯 가지를 넣었다. 예를 들어 키워드와 금지어를 부분 문자열로 찾으므로 사과를도 사과로 센다.
- 시스템 프롬프트로 쓰는 가이드라인 하나. 프롬프트와 문자열 인자를 하나의 문자열로 함께 번역한다. 숫자와 관계는 인자에서 고정된 표를 거쳐 가져온다. “less than N"은 언제나 “N 미만”, “at least N"은 언제나 “N 이상"이다. 단어 수는 “N단어(띄어쓰기 기준)“로 쓴다.
- 번역기. 추론 강도 high의 Gemini 3.1 Pro. 내 지표로는 후보들이 구별되지 않았다. 고른 이유는 두 가지다. WMT26이 공개한 인간 평가 주석으로 영→한 평균을 직접 다시 계산했을 때 가장 높았다(공식 순위가 아니고, GPT 5.5보다 유의하게 높지도 않다). 그리고 내가 평가할 모델이 아니다.
- 코드 검사. 검증기가 모든 프롬프트를 인자와 대조했다. 429문항 중 9개를 걸어 냈는데, 번역 결함은 하나도 없었다.
- 모델 리뷰. Claude Opus 5.5 리뷰어 여덟 개가 429문항을 모두 읽었다. 60문항에서 70건을 지적했고, 그중 15건은 채점을 깨뜨리는 것이었다. 리뷰어는 문항마다 성실한 답안도 썼고, 채점기로 그 답안을 채점했다.
- 기록된 수정 → v1. 17문항에 17건을 수정했다. 각 수정의 이유는 provenance 파일에 있다.
- 외부 리뷰 두 번 → v1.1. GPT-6 Pro와 Ultra 추론 강도의 GPT-6 Astra가 v1을 리뷰했고, 후자는 문항 하나하나를 봤다. 16문항을 더 고쳤고, 문장 분리기를 고쳤으며, 언어를 판별할 수 없는 답은 이제 실패로 처리한다.
최종 확인 결과, 성실한 답안 429개 중 426개가 엄격 채점에서 통과한다. 나머지 3개는 금지어나 횟수 제한이 걸린 단어가 이미 들어 있는 텍스트를 그대로 반복하라고 요구하는 문항이고, 영어 원본에도 같은 함정이 있다.
데이터셋 제작(감사, 번역기 비교, 번역)에는 API 비용 $10.34가 들었다. Claude 리뷰는 코딩 에이전트 세션 안에서 돌려 이 금액에 포함되지 않는다.
한국어가 부분 문자열 채점기에 하는 일
충돌. 한국어 단어에는 조사와 어미가 붙기 때문에, 짧은 문자열이 상관없는 단어 안에서 나타난다. 모든 키워드와 금지어를 KLUE 뉴스·웹 텍스트 65,378어절과 대조했다.
- 금지어 ‘예’는 1만 어절당 49.9번 나오고, 대부분 예정과 예상 안에 있다. 안전한 대안이 없어 문항을 고치지 않고 태그를 달았다.
- 금지어 ‘미친’은 평범한 표현 ‘영향을 미친다’에서 걸리므로 ‘광기’로 바꿨다.
- 키워드 ‘가오’는 ‘다가오다’로 채워졌다. 원문 단어가 임의로 만든 토큰이라 라틴 문자 ‘gao’로 두었다.
활용. 동사 ‘타다’를 금지하면 타고, 탔다를 놓친다. 어간 ‘타’는 거의 모든 것에 걸린다. 이 문항도 태그를 달았다.
내 규칙이 8문항을 망가뜨렸다. 가이드라인은 쉼표 금지 지시에 “쉼표(,)“라고 쓰라고 했고, 다른 규칙은 반복할 요청문을 그대로 옮기라고 했다. 그 결과 8문항에서 모델이 반복해야 하는 텍스트에 같은 문항이 금지한 쉼표가 들어갔고, 어떤 답도 통과할 수 없었다. 느슨한 채점은 8개를 모두 숨겼다. 느슨한 채점의 변형 하나가 답의 첫 줄을 빼고 보는데, 반복문이 바로 그 줄에 있기 때문이다. 리뷰어들이 이를 잡았고 “(,)“를 지웠다.
단어 수는 어절이다. 한 어절은 영어 단어 하나보다 많은 내용을 담는다. 429개 프롬프트에서 영어 단어 하나당 0.717어절이다. N은 원본 그대로 두었으므로 “300단어 이상"은 한국어에서 더 많은 내용을 요구한다. 답안에서 얼마나 더 많은지는 측정하지 않았다.
결과: 저가형 LLM 다섯 개
다른 한국어 테스트와 같은 모델, 같은 설정이다. 추론은 제공자 기본 강도로 켜고, temperature 0, 출력 한도 64,000토큰, 문항당 1회 샘플, 모델마다 제공자 하나로 고정했다. 프롬프트 단위 엄격 점수는 문항의 모든 지시를 따랐다는 뜻이다.
| 모델 | 프롬프트 단위 엄격 [95% CI] | 통과 | 가장 약한 지시 유형 |
|---|---|---|---|
| DeepSeek V4.1 Flash | 97.2% [95.2, 98.4] | 417/429 | 요청 반복, 36/40 |
| GLM 5.3 Flash | 95.3% [92.9, 97.0] | 409/429 | 금지어, 38/45 |
| GPT-6 Luna | 93.2% [90.5, 95.3] | 400/429 | 문단 수, 13/22 |
| Solar Pro 4 | 93.0% [90.2, 95.1] | 399/429 | 최소 단어 수, 30/43 |
| Solar Mini 4 | 92.5% [89.7, 94.7] | 397/429 | 요청 반복, 33/40 |
2026-10-02~03 측정. 굵은 표시는 이 글이 다루는 약점을 가리킬 뿐 1위 표시가 아니다.
이 모델들에게는 천장에 가깝다. 다섯 모델 모두 429문항 중 351문항을 통과하므로, 나머지 78문항이 모든 차이를 만든다. 유의한 차이는 DeepSeek이 GPT-6 Luna(22 대 5문항, p = 0.0015), Solar Pro 4(22 대 4, p = 0.0005), Solar Mini 4(26 대 6, p = 0.0005)보다 높은 것뿐이다. 어느 모델도 통과하지 못한 3문항은 영어에서도 통과할 수 없는 그 3개다.
모델마다 놓치는 곳이 한곳에 몰려 있다.
- GPT-6 Luna는 문단을 빈 줄로 나누거나
***를 끝에만 붙인다. 이 프롬프트들은 모두***를 구분선으로 명시한다. - GLM 5.3 Flash는 금지어를 피했다고 말하면서 그 단어를 쓴다. “‘변경’과 ‘여유’라는 단어는 사용하지 않았습니다”.
- Solar Pro 4는 짧게 끝낸다. 13번의 실패가 모두 최소 분량 지시이고, 목표의 43~97%에서 멈췄다. 예를 들어 900어절 이상을 요구했는데 388어절을 썼다.
- 요청 반복은 DeepSeek과 Solar Mini 4의 가장 약한 유형이다. 반복문 앞에 머리말을 붙이거나(“먼저, 요청하신 대로…”) 반복문의 단어를 바꿔서 놓친다. 네 모델로 한 첫 실행에서 반복 실패 14건 중 9건은 머리말, 5건은 단어 변경이었다.
처음 네 모델에 대해서는 금지어와 요청 반복 실패를 모두 응답과 대조했다. 전부 실제 위반이었고, 문항의 부분 문자열 충돌 때문에 생긴 실패는 없었다.
순위는 한국어 지식 테스트와 다르다. GPT-6 Luna는 KoBALT와 LBox에서 DeepSeek과 동률이었지만 여기서는 아래 그룹에 있다. 한국어를 아는 것과 한국어로 쓴 지시를 따르는 것은 별개의 능력이다.
비용
가격이 싼 순서로 정렬했다. 가격은 고정한 제공자의 입력 / 출력 1M 토큰당 USD이고, 2026-09-29 기준이다(Solar Mini 4만 2026-10-03). 추론 토큰은 출력으로 과금된다.
| 모델 | 가격 입력 / 출력 | 비용 (429문항) | 문항당 추론 토큰 | 프롬프트 단위 엄격 |
|---|---|---|---|---|
| Solar Mini 4 | $0.05 / $0.20 | $0.34 | 3,580 | 92.5% |
| Solar Pro 4 | $0.09 / $0.36 | $0.47 | 2,651 | 93.0% |
| GPT-6 Luna | $0.10 / $0.50 | $0.16 | 301 | 93.2% |
| GLM 5.3 Flash | $0.15 / $0.50 | $0.91 | 3,201 | 95.3% |
| DeepSeek V4.1 Flash | $0.15 / $0.60 | $0.73 | 2,416 | 97.2% |
토큰 가격으로 실행 비용을 예측할 수 없다. Solar Mini 4는 가격이 GPT-6 Luna의 절반인데 비용은 2.1배였다. 문항당 추론을 약 12배 길게 하기 때문이다. DeepSeek은 GPT-6 Luna보다 4.6배 비싸게 들었고 점수는 4.0포인트 높았으며, 이 차이는 유의하다. Solar Pro 4, Solar Mini 4, GPT-6 Luna는 점수가 서로 구별되지 않으므로 총점으로 보면 이 셋을 가르는 것은 비용이다.
점수를 비용으로 나눈 값은 쓰지 않았다. 모든 점수가 92.5~97.2% 사이라서, 그 비율은 결국 비용 순위를 다시 매기는 것에 가깝다.
주의할 점
- 원어민 검토는 하지 않았다. 번역은 모델(Gemini)이, 리뷰는 다른 모델(Claude, GPT-6)이 했다. 프롬프트와 채점기가 일치하는지, 문항을 통과할 수 있는지는 코드로 확인했다. 자연스러움과 충실도는 모델만 판단했다.
- GPT-6 Luna는 GPT-6 계열이고, v1을 리뷰한 것도 GPT-6 모델이다. 그 리뷰로 16문항을 고쳤지만 문항을 직접 쓰지는 않았다. 번역기(Gemini)와 리뷰어(Claude)는 여기서 평가하지 않은 계열이다.
- 엄격 점수를 보고하라. 느슨한 채점은 답의 첫 줄을 빼고 보기 때문에 반복 실패를 숨긴다.
- 영어 IFEval과 문항 단위로 똑같지는 않다. 두 문항은 한국어로는 통과할 수 있지만 영어로는 통과할 수 없다. 세 문항은 영어 문구가 채점기 숫자와 다를 때 채점기 숫자를 따랐다.
- 오염. HanIFEval은 새로 만들었지만 영어 원본은 2023년부터 공개돼 있다. 추적용 canary 문자열을 데이터셋 카드에 넣었다.
- 모델당 1회 실행, 설정 하나, 문항당 샘플 하나.
- 비용은 채점된 행만 포함한다, 위 정가 기준이다. v1.1에서 고친 16문항은 다시 생성했으므로, 그 비용이 v1 행의 비용을 대신한다.
사용법
데이터, 채점기, 단독 채점 스크립트가 Apache-2.0으로 Hugging Face에 있다. 버전을 고정하려면 태그 v1.1을 쓴다.
from datasets import load_dataset
ds = load_dataset("developer0hye/HanIFEval", revision="v1.1", split="test")
python score.py --responses responses.jsonl # 기본값으로 v1.1을 채점
responses.jsonl의 각 줄은 {"key": int, "response": str}이다. 응답이 없는 문항은 실패로 센다.
재현
모든 것이 developer0hye/llm-evals에 있다.
- IFEval-Ko 감사와 번역기 비교;
- 가이드라인, 번역기 원본 출력, 리뷰, 이유가 붙은 모든 수정;
- 문항별 모델 응답과 분석 스크립트.
그곳의 NOTES.md가 전체 연구 기록이다. 이 글 뒤에 있는 모든 결정, 숫자, 막다른 길이 들어 있다.