メインコンテンツへスキップ

クオリティゲート

すべての翻訳は、ディスクに書き込まれる前に決定論的な検証ゲートを通過します。クオリティゲートは、機械翻訳によくある失敗パターンを検出します — サイレントフォールバックなし、ロケールファイルへのゴミデータの書き込みなし。

検証チェック

チェック検出内容ゲートラベル
空白/ブランクモデルが空文字列または空白を返した[GATE] empty
ソースエコーモデルが元の英語入力をそのまま返した[GATE] source-echo
ハルシネーションループ繰り返しのトライグラムパターン(例:"Qo' Qo' Qo'"[GATE] hallucination
長さの膨張出力がソースより著しく長い[GATE] length
スクリプト準拠ターゲットロケールに対して誤ったスクリプト[GATE] script
ICU 複数形カテゴリロケールに必要な複数形が不足している[GATE] icu-plural

空白/ブランク

空文字列、空白のみ、または null の翻訳を拒否します。難しいキーに対してモデルが何も返さないケースを検出します。

ソースエコー

モデルが翻訳せずに英語のソーステキストをそのまま返した場合を検出します。短い文字列やプロンプトの指定が不十分な場合によく発生します。

ハルシネーションループ

出力内のトライグラム(3文字)パターンを分析します。いずれかのトライグラムが出力の長さに対して閾値を超えて繰り返される場合、翻訳は拒否されます。"Qo' Qo' Qo' Qo' Qo'" のような異常な出力を検出します。

長さの膨張

出力の長さが maxLengthRatio × source length(デフォルト:4倍)を超える翻訳を拒否します。短い入力に対して大量のテキストを生成するモデルのハルシネーションを検出します。

設定ファイルの maxLengthRatio で変更できます。

スクリプト準拠

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 だけでなく、6つのカテゴリ(zeroonetwofewmanyother)が必要です。

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 が代替表現を選択する正当な理由(文脈、文法)がある場合もあり、用語の不一致でブロックすることは得よりも害が大きくなります。

違反を修正するには、コーチング辞書を更新するか、ロケールファイルを手動で編集してください。


関連項目