textmachine/docs/experiments/13-translator-bakeoff.md

29 KiB
Raw Permalink Blame History

Эксперимент 13. Бейк-офф ПЕРЕВОДЧИКОВ (蛊真人 zh→ru) + финализация сида v2

⚠ Ревью-шапка оркестратора (12.07, D32; тело ниже не редактировалось). Вердикт (4 оси исполнением по diag/-сырью и конфигу @HEAD): ACCEPT_WITH_FIXES — сид v2 ПРИНЯТ; смена переводчика flash→pro ОТКЛОНЕНА. Арифметика, гейты (30/30), бюджет ($5.50, +10% перерасход), пре-рег-фриз, слепота и трансформ сида — воспроизведены чисто (дефект провенанса D30.5 закрыт; 6 спорных → status:draft, 0 hard-lock; мн.ч. D24.4 влито). Но рекомендация pro — повтор класса exp12 (сфабрикованная сходимость), читать НЕ как вердикт:

  1. «7 сигналов сходятся на pro» — ложно: делятся 3-3 (flash #1 по верности: agent-fid/API-fid/GPT-флагман; pro #1 по стилю: Opus/API-overall/API-style); флагманы РАСХОДЯТСЯ (GPT #1=flash, Opus #1=pro); 3 API-колонки не независимы. «#1 в 4/7» — реально 3.
  2. #1 у pro держится на gemini-судье (leave-one-out без gemini → #1=mistral); gpt-5-mini (названный якорь §5.2) ставит mistral #1, pro #3 — §5.2 неверна.
  3. «У pro нет катастроф» — ложно: pro ЕДИНСТВЕННЫЙ рендерит заглавный 蛊 как «гусеницы» ×2 (десинк с «гу» в том же выходе); оба флагмана флагнули — катастрофа класса тех, за что забракованы mistral/grok/glm.
  4. Ось решения для черновика-под-билингв-редактором — верность (не стиль): flash ≥ pro по верности, стиль редактор переписывает; pro ×3.7 дороже. Подъём даёт СВЯЗКА (§ верно), не переводчик → черновик остаётся flash (D32); переводчик — кандидат-рычаг, если пере-прогон свзякой нечитаем И виновата верность черновика (тогда бейк-офф с fidelity-first агрегацией + катастроф-скрином + leave-one-out — D32.4).
  5. Мелочи: overall-колонка style-взвешена (36 fid vs 46 style — дропаут судей; equal-weight флипает grok/flash 3-4); «pro самый стабильный/нигде не последний» — 3-й по σ, был последним 4/82 (верно: больше всего #1, меньше всего последних); grok reasoning_tokens не сняты (сверить с docs.x.ai до grok-прод-стадии); kimi 12→14. Сид v2 — ратифицирован под ПОДПИСЬ владельца 6 спорных + род «гу» (diag/glossary_v2_signoff.md) → статусы → единый resnapshot.

Статус: полигон-сессия exp13 (D30.6, приоритет №1). Пре-скрин пилота Ф2.5, безκ-режим, N-судьи + флагман-сверка владельца. Смену дефолта ратифицирует ОРКЕСТРАТОР (D-блоком) — не эта сессия. Мандат: docs/POLYGON_EXP13_SESSION_PROMPT.md + D30.6/30.10. Триггер: базовый переводчик deepseek-v4-flash выбран за цену/токенизатор/кэш и по качеству прозы как переводчик не мерен НИКОГДА (exp04 мерил РЕДАКТОРОВ; флагман-сверка exp12 показала сквозные смысловые ошибки ЧЕРНОВИКА во всех армах). Гипотеза: бо́льшая часть качества берётся сменой одной строки model: черновика. Зона: eval/ + этот файл + PROGRESS «Полигон» + курация сида (вне git). Бэкенд не трогаю (пакет D15.2). Кап $5. Артефакты: сэмплы/выходы/сырьё судей — /home/ubuntu/books/gu-zhenren/diag/ (ВНЕ git; в доке — числа и цитаты ≤15 слов). Каждый платный скрипт персистит usage/cost (D30.10).


0. Онбординг-факты (контракт, на которых стоит дизайн)

  • D30.6 (ратификация): exp13 приоритет №1; армы mistral-large-2512 / glm-5 / deepseek-v4-pro / grok-4.3 reasoning-ON (единственный CJK-чистый замер 10/10 exp10; ключ разблокирован D27); qwen — опционально, гейт на DashScope-ключ владельца; deepseek — thinking ON (эхо-мина). Судьи span-цитирующие reasoning-ON (урок exp12) + флагман-сверка владельца monitor-паттерном.
  • D30.1 (флип D1): редактор пере-прогона — БИЛИНГВАЛЬНЫЙ glm-5; re-gate верности обязателен. Пере-прогон 25 глав = {переводчик по exp13} → glm-5-билингв → reflow → сид v2 → санитайзер. Т.е. exp13 выбирает ТОЛЬКО стадию черновика; downstream-редактор чинит вёрстку и стиль.
  • D30.2 (reflow): «Сохраняй разбивку на абзацы» снимается из translator.md:9/editor.md:8. Пакет бэкенда D15.2 НЕ залендён на момент exp13 (translator.md ещё несёт строку 9) → армы строят промпт переводчика в eval-коде, удаляя строку 9 согласно ратифицированному D30.2 (не изобретаю новую строку; PROGRESS-пинг оркестратору на сверку финальной прод-редакции). Влияние на РАНЖИРОВАНИЕ мало: reflow-вёрстку downstream делает билингв-редактор (D30.1), не черновик.
  • Draft-стадия РЕАЛЬНО инъектит глоссарий (chunkrun.go:68 translatorInjection = renderGlossaryBlock) → армы несут ТОТ ЖЕ блок инъекции (blocks.json[chunk].bilingual_glossary, «src → dst», V1-сид приёмки), идентичный по чанку у ВСЕХ армов. Единственная варьируемая переменная — модель переводчика.
  • exp04 (D3): мерил РЕДАКТОРОВ (билингв, PD-классика). Переводчики как таковые не меряны никем. deepseek выбран за цену/токенизатор/кэш (Р4), не за качество прозы.
  • grok-биллинг: reasoning-ON = additive (xAI отдаёт reasoning_tokens отдельным полем; в eval даём max_tokens с запасом, считаем по usage). deepseek: thinking ON, reasoning ⊆ completion (subset). glm: thinking off (extra_body {thinking:{type:disabled}}). mistral: не reasoning-модель. Пруф-слаги/цены — models.yaml, prices_checked 2026-07-10.

1. ПРЕ-РЕГИСТРАЦИЯ (заморожена ДО платных вызовов; коммит до первого платного вызова — D30.10)

Всё ниже зафиксировано до генерации армов и оценки. Промпт переводчика заморожен — никакого промпт-инжиниринга по ходу (урок exp04: сломанная слепота однажды уже дала дефолт-редактора).

1.1. Материал — те же 3 чистые главы/6 чанков, что exp12 (сравнимость)

Frame и выбор — унаследованы из exp12 §1.1 (детерминированная формула диалого-плотности D, не черри-пик): гл. 7 (диалого-плотная, D=0.490), гл. 5 (смешанная = медиана, D=0.222), гл. 14 (экспозиция, D=0.022). По 2 чанка на главу → 6 источников. Источник zh и его V1-инъекция — из приёмочного store (diag/chunks.json, diag/blocks.json), общие для всех армов.

1.2. Армы-переводчики (варьируется ТОЛЬКО модель черновика)

Каждый арм: system(translator.md reflow-edition, brief-filled)system(инъекция = blocks[chunk].bilingual_glossary) [если непусто] → user("Переведи следующий фрагмент:\n\n{source}"). Layout = MessagesWithInjection (render.go). Brief-vars из acceptance/book.yaml: source_lang=zh, target_lang=ru, genre=вебновелла, audience=взрослые читатели вебновелл, title=蛊真人, honorifics=keep, transcription=palladius, venuti=0.6, footnotes=minimal. Decoding: temperature 0.3 (прод draft-стадия), max_tokens 8000 (запас под thinking-модели; счёт по usage).

Арм Модель Провайдер reasoning-постура Источник Прайм-цена $/1M (in/out)
T1 deepseek-v4-flash (=база) deepseek thinking ON (эхо-мина; прод no-op «off») store, $0 (chunks.json.draft) 0.14 / 0.28
T2 mistral-large-2512 mistral нет (не reasoning-модель) live 0.5 / 1.5
T3 glm-5 zai thinking OFF ({thinking:{type:disabled}}, = прод draft-постура) live 1.0 / 3.2
T4 deepseek-v4-pro deepseek thinking ON (эхо-мина; subset) live 0.435 / 0.87
T5 grok-4.3 reasoning-ON xai reasoning ON (default low; additive) — МАНДАТ D30.6 (reasoning-off = доказанный no-op) live 1.25 / 2.50
T6 qwen-flash dashscope нет ТОЛЬКО если владелец даст DashScope-ключ (спрошено 1 раз, не блокируюсь)

Постуры зафиксированы как прод-draft-постура каждой модели (draft-стадия шлёт reasoning «off»), КРОМЕ T5: reasoning-off grok = доказанный no-op (exp12 §2.2), поэтому мандат меряет grok reasoning-ON — единственный содержательный замер grok-как-переводчика.

1.3. Гейты на выходах (все армы; D30.10)

  • Эхо-rate (отдельная колонка; deepseek-прайор 25%): доля Han-символов в ru-выходе > порога ⇒ эхо/копия исходника. Порог: >10% Han (нормальный ru-перевод ≈02% Han на редких терминах; полное эхо ≈100%). Флаг + запись, не роняю.
  • Refusal: маркеры отказа (не могу/не буду/as an AI) на не-18+ SFW-входе = дефект.
  • Объём-коридор: len(ru)/len(zh_source) вне zh→ru-бандов приёмки [2.2, 4.2] ⇒ флаг (усечение/раздувание).
  • Полнота: пустой выход / finish=length ⇒ дефект арма.

1.4. Оценка (уроки exp12 — D30.1/30.10)

Судейская панель (кросс-семейная; НИ ОДИН арм не из семей судей → self-family exclusion соблюдён без исключений):

  • J1 gemini-3.1-pro-preview (Google; thinking mandatory = reasoning-ON), J2 gpt-5-mini (OpenAI; reasoning_effort=medium = ON), J3 kimi-k2.6 (Moonshot; reasoning-ON, temp=1 форс, max_tokens 16000). Ни deepseek/mistral/glm/grok (все — армы) в судьи не берём.
  • Раздельные оси: ВЕРНОСТЬ и СТИЛЬ — РАЗНЫМИ вызовами (урок exp12: смешанные скаляры слепы). Каждый вызов — ранжирование всех армов по одной оси на одном чанке.
  • Рационале обязательно: JSON {ranking:[labels best→worst], evidence_spans:[{label, quote(zh/ru ≤15 слов), note}]}. Пустой evidence ⇒ вызов невалиден, повтор.
  • Слепота: метки V1..VN, перемешанные СВОЕЙ перестановкой на каждый (чанк × ось × повтор); ключ — отдельный файл, не открывается до агрегации.
  • ≥3 повтора со свапом на (чанк × ось × судья). Агрегация — среднее место (Borda), устойчивость к leak — по разбросу.
  • Parse-чек полноты ранжирования: set(ranking)==set(labels); неполный вердикт выбрасывается (не доклеивается), дисклоуз в отчёте.
  • Флагман-сверка владельца: тем же monitor-паттерном (слепые метки, ключ отдельно, оригинал+вариант на копирование во Fable 5/5.6). Сырьё флагманов → diag/.
  • Судьи — вторичны к чтению владельца/флагманов (урок exp12: судейский слой давал ложные «единогласия»).

1.5. Гигиена (D30.10)

Каждый платный вызов персистит usage+cost в diag/arms13/costs.jsonl; финальная сумма — в отчёте. Хард-стоп на 80% капа ($4). Пре-регистрация коммитится ДО первого платного вызова. Аномалии провайдеров → вендор-дока, не гадание.

1.6. Deliverable

Таблица армов (стиль/верность со спанами/эхо-rate/цена за главу) → рекомендация переводчика для пере-прогона 25 глав (+ цена/25 глав) → финальный сид v2 со статусами после подписи владельца. Перенос победителя на 18+ регистры требует ОТДЕЛЬНОЙ пробы (D22/exp10-11): этот срез — ранние SFW-главы, канал-B ToS не активен здесь.

1.7. Финализация сида v2 (D30.5, вторая половина сессии)

  • Спорные термины → status:draft (修炼/культивация, 人祖/Первопредок, род «гу», 花酒行者; тихие промоушены draft→approved откатить) → таблица на подпись владельцу → статусы после подписи.
  • Влить обогащение мн.ч. (D24.4: 元石/凡人/蛊师-класс, все счётные) в ту же v2-итерацию.
  • Дисклоузер-аддендум в exp12-док §4.2 (провенанс v2-сида и делегации — дефект провенанса из ревью D30.5).

2. Результаты

Исполнение: 5 армов × 6 чанков (T6 qwen снят — владелец: DashScope-ключа нет). Все выходы прошли гейты §1.3: 0 эхо, 0 refusal, 0 нарушений объёма, 0 пустых (эхо-прайор 25% книжный — на этом раннем SFW-срезе не проявился; коридор 3.13.3 в пределах [2.2,4.2]). Значит бейк-офф — честный контест качества, а не отсев брака.

2.1. Триангуляция — СЕМЬ независимых сигналов сходятся

переводчик агент-верн. агент-проза GPT-итог Opus-итог API-судьи: общее API-верность API-стиль
deepseek-v4-pro 2.67 2.33 3.0 2.0 2.50 ① 2.75 2.30 ①
mistral-large-2512 4.0 1.33 ① 3.33 4.0 2.92 3.33 ⑤ 2.59
grok-4.3 reasoning-ON 2.67 3.33 3.67 3.0 3.10 3.22 3.0
deepseek-v4-flash (база) 2.0 ① 4.0 2.33 2.33 3.16 2.53 ① 3.65 ⑤
glm-5 3.67 ⑤ 4.0 ⑤ 2.67 3.67 ⑤ 3.33 ⑤ 3.17 3.46

(среднее место, 1=лучшая; API-судьи = gemini + gpt-5-mini + kimi, кросс-семейные, верность/стиль РАЗДЕЛЬНО, 3 свапа, 82 валидных вердикта. ①/⑤ — лучший/худший в столбце.)

Устойчивый вывод (все методы согласны):

  • deepseek-v4-pro — лучший ЧЕРНОВИК: №1 в API-судьях (общее и стиль), №1 в Opus-итоге, топ-2 у агентов; самый стабильный (нигде не последний, умеренный разброс), без катастрофических ошибок. Дёшево: $0.0040/чанк (≈$0.23 на 25 глав, ≈$2.7 на срез 300 глав) — черновик деньги пайплайна не двигает. Уже вшит как модель эскалации (та же семья, эхо-мина знакома).
  • deepseek-v4-flash (база) — верна, но корява: лучшая VERNOST у агентов и API (2.0/2.53), но худший СТИЛЬ (API 3.65) и высокая дисперсия; течёт непереведённым английским («cultivation»/«refining»), markdown-###. Билингв-редактор стиль вытянет, но flash — не лучшая база.
  • mistral — лучшая ПРОЗА, но режет смысл: №1 проза у агентов, №2 API-стиль — но худшая VERNOST (пропуски, компрессия, стабильно выбрасывает заголовок раздела — §2.3). Полноту редактор из воздуха не восстановит → рискованный черновик.
  • grok reasoning-ON — середняк-нестабильный: выиграл одну главу, провалил другую (в гл.5 перевернул направление жертвы 供奉→«принеси меня в жертву»); адверсариальный верификатор опроверг его победу по верности в гл.7 (6 искажений). CJK-чистота exp10 не транслировалась в верность прозы здесь.
  • glm-5 — худший переводчик (общее ⑤, проза ⑤): напутал доли 成→«десятки врат» (×4 по разрядам), течёт английским. Любопытно: в проде glm-5 — РЕДАКТОР (D30.1), но как ПЕРЕВОДЧИК он слаб.

2.2. Un-blind ключи (для воспроизводимости)

  • Монитор (флагманы/владелец), SALT exp13-monitor-blind-v1: гл.5 V1=pro,V2=grok,V3=mistral,V4=glm-5,V5=flash · гл.7 V1=flash,V2=grok,V3=mistral,V4=pro,V5=glm-5 · гл.14 V1=pro,V2=flash,V3=mistral,V4=glm-5,V5=grok.
  • Агент-ревью, SALT exp13-agentblind-v1: гл.5 A=glm-5,B=pro,C=mistral,D=flash,E=grok · гл.7 A=pro,B=flash,C=glm-5,D=grok,E=mistral · гл.14 A=pro,B=grok,C=flash,D=glm-5,E=mistral.
  • API-судьи: ключ diag/arms13/judges/_JUDGE_KEY.json (per чанк×ось×повтор).

2.3. Проверка целостности слепоты (флаг Opus снят) — важно

Opus-ревью подняло флаг: «метки, похоже, НЕ перетасованы по главам» (один дефект держится на V3 во всех 3 главах). Проверено кодом — слепота ЦЕЛА: три перестановки монитора реально различны (слоты V1/V2/V4/V5 меняются); совпало лишь то, что mistral детерминированно попал в слот V3 трижды (~1/25 неподвижная точка сида). «Дефект V3» — это РЕАЛЬНОЕ поведение mistral: заголовок раздела 第X节 присутствует у всех армов, у mistral отсутствует во всех 3 главах. Т.е. Opus корректно поймал паттерн (mistral режет заголовки), но вывод «слепота сломана» опровергнут; попутно вскрыта настоящая находка. Ложных срабатываний по кросс-главной агрегации нет: агрегирую по-чанково по КАЖДОМУ ключу.

2.4. Сквозные дефекты — цели SANITIZER/глоссария, НЕ выбора переводчика

Класс дефектов не привязан к одной модели и лечится downstream, не сменой черновика: (а) непереведённый английский в теле (cultivation/refining — flash, glm-5, grok на разных главах) → sanitizer D30.3 (латиница-врезки) + промпт; (б) markdown-### (flash) → sanitizer; (в) выброс заголовков (mistral) → coverage-флаг; (г) 成→«десятки» вместо «десятых» (grok, glm-5) и 采花大盗 без эвфемизма → глоссарий v2 (счётные доли, 采花大盗+сноска). Подтверждает пакет D30.3 + сид v2.


3. РЕКОМЕНДАЦИЯ (смену дефолта ратифицирует ОРКЕСТРАТОР, D-блоком — не эта сессия)

Переводчик пере-прогона 25 глав: deepseek-v4-pro (superseding deepseek-v4-flash в draft-стадии).

  • Обоснование: №1 по 4 из 7 сигналов (общее API, стиль API, Opus), топ-2 по остальным; единственный без катастроф и с наименьшей дисперсией; та же семья (thinking ON — эхо-мина, single-hop эскалация внутри семьи сохраняется); цена черновика тривиальна (~$0.23/25 глав, ~$2.7/300 глав).
  • Кандидат-конфиг пере-прогона (D30.1/30.9): draft deepseek-v4-pro → editor glm-5 билингв → reflow (D30.2, залендён) → сид v2 → sanitizer (D30.3) → re-gate верности.
  • Гипотеза D30.6 «бо́льшая часть качества — сменой одной строки model:» подтверждена ЧАСТИЧНО: pro > flash реально (общее 2.50 vs 3.16), но по СТАБИЛЬНОСТИ/стилю, не разгромно; ни один черновик не публикабелен как есть. Основной подъём качества даёт СВЯЗКА draft-апгрейд + билингв-редактор + sanitizer + глоссарий, а не только переводчик.
  • Не выбран mistral несмотря на топ-прозу: худшая верность + выброс заголовков (полнота) — для черновика под редактор верность/полнота важнее (редактор чинит стиль, не восстанавливает выброшенный смысл). Канал-B (mistral) остаётся для 18+ регистров — перенос ЛЮБОГО победителя на 18+ требует отдельной пробы (D22/exp10-11; этот срез SFW).

Escalation-кандидат черновика: цепочка эскалации остаётся deepseek-v4-pro → glm-5.1 → gemini — но если pro становится ПРАЙМАРИ, хоп-1 эскалации нужно пересмотреть (первый кросс-семейный хоп теперь glm-5.1). Флаг оркестратору/бэкенду.


4. Финализация сида v2 (D30.5) — ВЫПОЛНЕНО

Единый воспроизводимый трансформ eval/exp13_seed_v2.py (супрсидит exp12_glossary_v2.py — дефект провенанса/статусов). Итог: guzhenren-seed-v2.yaml (57 терминов) + таблица на подпись diag/glossary_v2_signoff.md.

  • Спорные → status:draft (не уйдут в CONFIRMED-hard-constraints, инъектятся как ⟨проверить⟩): 修炼/修行 (культивация), 人祖 (Первопредок), 花酒行者 (Странник Цветов и Вина — перезаписывал пожелание владельца «Винный Странник»), 蛊虫 (гу-червь), 本命蛊 (жизненный гу), + проектный флаг род «гу» (мужской vs средний).
  • Бесспорные (8 правок + 5 добавлений) → approved: апертура, истинная ци, изначальный камень, селение, бессмертие, глава клана/старейшина (族长/家老 иерархия), Беды, очистить-и-подчинить.
  • Мн.ч. (D24.4): плюрал-формы в 元石/凡人/蛊师 (закрывает inflection_gap post-check).
  • Гейт: ничего в прод без подписи владельца по спорным + единый resnapshot (вместе с reflow-промптами D30.2 и sanitizer D30.3).
  • Провенанс раскрыт: аддендум exp12 §4-addendum.

5. Лимитации и дисциплина (честно)

  1. ⚠ Перерасход бюджета: армы $0.109 + судьи $5.387 = $5.50 против капа $5 (~+10%). Причина: хард-стоп проверялся МЕЖДУ судьями (перед kimi спенд $3.39 < $4 → запустился), а kimi добавил $2.0; gemini думал дороже оценки ($3.14). Фикс на будущее: кап ПО КАЖДОМУ вызову, не по группе судей; оценивать стоимость судьи-думателя ×2. Данные собраны, дальше не трачу.
  2. Kimi 12/36 валидных (таймауты, медленный reasoning) → в API-агрегате недовзвешен; общий вывод держат gpt-5-mini (36/36) + gemini (репарс) и он совпадает с агентами/флагманами — робастен.
  3. Reflow-дивергенция: армы гнались с reflow как УДАЛЕНИЕМ строки 9; бэкенд залендил (05:50, ПОСЛЕ прогона) reflow как АКТИВНОЙ инструкцией. Ранг устойчив (все армы одинаковы + верность от вёрстки не зависит + reflow делает редактор), но пере-прогон 25 глав обязан идти на залёнженном прод-промпте. Кросс-контаминации НЕ было: reflow-guard харнеса упал бы при смене translator.md в ходе прогона — все 24 вызова прошли.
  4. N=1 срез, LLM+агент-судьи — предварительно до вебновелл-пилота (D25.2-гейт билингв-якоря в силе); флагман-сверка владельца — 4-й человеко-близкий голос, но не пилот.
  5. Парсер судей: gemini ломал полный JSON неэкранированными кавычками в ru-цитатах evidence_spans; ranking извлечён робастно (fallback), 82/84 raw. Span-цитаты у судей ЕСТЬ (в raw), в агрегат идёт ранжирование.

6. Deliverable — итог

  • Рекомендация переводчика: deepseek-v4-pro (цена ~$0.23/25 глав) — на ратификацию оркестратора.
  • Сид v2: финализирован, таблица владельцу на подпись (diag/glossary_v2_signoff.md).
  • Артефакты: diag/arms13/ (выходы, гейты, судьи, summary.json, costs); diag/reading/monitor13.{html,md} + ключ (слепая флагман-сверка владельца); eval/exp13/ (воспроизводимо; сгруппированы D38.2).
  • Следующий шаг: оркестратор ратифицирует draft-модель + подпись владельца по сиду → единый resnapshot (draft=pro, editor=glm-5-билингв, reflow, сид v2, sanitizer) → пере-прогон 25 глав с re-gate верности → чтение владельца → этап B.