본문으로 건너뛰기

품질 게이트

모든 번역은 디스크에 기록되기 전에 결정론적 검증 게이트를 통과해요. 품질 게이트는 일반적인 기계 번역 실패 유형을 잡아냅니다 — 조용한 폴백도, 로케일 파일에 쓰레기 값이 기록되는 일도 없어요.

검증 검사

검사잡아내는 항목게이트 라벨
Empty/blank모델이 빈 문자열 또는 공백을 반환한 경우[GATE] empty
Source echo모델이 원본 영어 입력을 그대로 반환한 경우[GATE] source-echo
Hallucination loop반복되는 trigram 패턴 (예: "Qo' Qo' Qo'")[GATE] hallucination
Length inflation출력이 원본보다 현저히 긴 경우[GATE] length
Script compliance대상 로케일에 잘못된 스크립트인 경우[GATE] script
ICU plural categories로케일에 필요한 복수형 양식이 누락된 경우[GATE] icu-plural

Empty/Blank

빈 문자열, 공백만 있는 문자열, 또는 null인 번역을 거부해요. 어려운 키에 대해 아무것도 반환하지 않는 모델을 잡아냅니다.

Source Echo

모델이 번역하지 않고 영어 원본 텍스트를 그대로 반환하는 경우를 감지해요. 짧은 문자열이나 명세가 불충분한 프롬프트에서 흔히 발생합니다.

Hallucination Loop

출력의 trigram(3자) 패턴을 분석해요. 출력 길이에 비해 특정 trigram이 임계값 이상으로 반복되면 번역을 거부합니다. "Qo' Qo' Qo' Qo' Qo'"와 같은 비정상적인 출력을 잡아냅니다.

Length Inflation

출력 길이가 maxLengthRatio × source length(기본값: 4×)을 초과하는 번역을 거부해요. 짧은 입력에 대해 긴 텍스트 덩어리를 생성하는 모델 환각을 잡아냅니다.

설정의 maxLengthRatio를 통해 구성할 수 있어요.

Script Compliance

script 필드가 구성된 로케일(예: Plains Cree Syllabics의 경우 "script": "cans")에 대해, 출력이 대상 스크립트에 적합한 비ASCII 문자를 포함하는지 검증해요. 아랍어, CJK, Syllabics 로케일에 대해 라틴 문자만 있는 출력은 거부됩니다.

실패 시 동작

  1. 실패한 번역은 [GATE] 접두사, 키 이름, 사유, 값 미리보기와 함께 stderr에 기록돼요
  2. 해당 키는 로케일 파일에 기록되지 않아요
  3. 재시도 캐스케이드가 작동해요 (아래 참조)
[GATE] hero.title: source-echo — "Welcome to our platform"
[GATE] nav.about: hallucination — "À À À À À À À À"

재시도 캐스케이드

배치가 실패하면(JSON 파싱 오류 또는 품질 게이트 거부) champollion은 점점 더 작은 배치로 재시도해요:

Full batch (80 keys) → parse error
└→ Half batch (40 keys) → 2 failures
└→ Individual keys (1 each) → isolates the 2 problem keys

재시도 예산은 maxRetries(기본값: 3, 언어별로 구성 가능)로 제한돼요. 이는 지속적으로 실패하는 키에 대해 토큰 소비가 무한정 늘어나는 것을 방지합니다.

재시도를 모두 소진한 후에는 문제 키들이 기록되고 건너뛰어져요. 다음 sync 실행 시 다시 시도됩니다.

프롬프트 캐싱

시스템 메시지(레지스터, 문법 규칙, 스타일 노트)는 사용자 메시지(번역할 키)와 분리돼요. 이 분리는 의도적입니다:

  • 시스템 메시지는 특정 로케일에 대해 배치 간 동일해요
  • Anthropic 및 Google과 같은 제공자는 반복되는 시스템 메시지를 캐싱해요
  • 결과: 첫 번째 배치는 전체 토큰 비용을 지불하고, 이후 배치는 사용자 메시지에 대해서만 지불해요

이는 배치가 많은 프로젝트에서 토큰 비용을 크게 줄일 수 있어요.

ICU MessageFormat 검증

integrity 명령은 ICU MessageFormat 복수형 패턴을 CLDR 복수형 규칙과 대조해 검증해요. 원본 파일이 다음과 같은 ICU 구문을 사용하는 경우:

"items": "{count, plural, one {# item} other {# items}}"

Champollion은 번역된 버전이 대상 로케일에 필요한 모든 복수형 카테고리를 포함하는지 확인해요. 예를 들어, 아랍어는 oneother뿐만 아니라 여섯 개의 카테고리(zero, one, two, few, many, other)를 필요로 해요.

모든 로케일에 걸쳐 복수형 완전성을 확인하려면 champollion integrity를 실행하세요.

용어 적용

사전이 있는 코칭 쌍의 경우, champollion은 번역 후 용어 검사를 실행해요. 품질 게이트를 통과한 후, LLM이 실제로 필수 사전 용어를 사용했는지 검증합니다.

[TERM] en→fr: 2 term violation(s)
• hero.title: "dashboard" → expected "tableau de bord" but got "panneau de contrôle"

용어 위반은 차단 오류가 아니라 경고예요. 번역은 여전히 디스크에 기록돼요. 이는 의도적입니다 — LLM이 대안을 선택한 데에 타당한 이유(맥락, 문법)가 있을 수 있으며, 용어 불일치로 차단하면 득보다 실이 클 수 있기 때문이에요.

위반을 수정하려면 코칭 사전을 업데이트하거나 로케일 파일을 수동으로 편집하세요.


함께 보기