17 KiB
Эксперимент 09. Протокол пилота Фазы 2.5 — выбор ядра, memory-bet, судья, think-режим
Дата: 2026-07-05 · Зона: полигон (флагман) · Статус: протокол + харнесс-скелет; решающий прогон ждёт корпус владельца + человеческих аннотаторов. Закрывает решения: выбор ядра C0–C3 (Р2), go/no-go на банк памяти (research/13 §Вердикт), валидность LLM-судьи (research/11-gap-3), think-ON/OFF (D6), ценность пре-пасса Annotator (04-unhappy).
Пилот — единственная точка, где сходятся все отложенные «решаемые только человеком» вопросы качества. Он же — дециждающий эксперимент банка памяти (ставка не морозится до него, вердикт GO-на-схему был условным).
1. Что пилот решает (и почему только он)
| Решение | Почему не решено раньше | Рука пилота |
|---|---|---|
| Ядро C0–C3 (baseline / draft→editor / generate-select / select-refine) | arXiv:2603.20324 «When Agents Disagree» не покрывает перевод; на zh/ja→ru нужен свой (research/11-gap-3) | человеческий BWS + судья-панель |
| Банк памяти vs длинный контекст (go/no-go на ставку) | DelTA — LLM-в-цикле, не наш детерминированный путь; сравнение «банк vs длинный контекст» на zh/ja→ru не проведено (research/13 Q6) | memory-eval (§6), WMT25-3-режим |
| Валиден ли LLM-судья вообще | LAIT: судьи расходятся с людьми; на s* висит вся ставка generate-select C2/C3 | корреляция судья↔человек + калибровка s* (§5) |
| think-ON vs OFF по качеству (draft/translator + editor) | локально подтвердилось на реалиях (羅生門→Радзёмон), но COGS +13–25% (эксп.08) — стоит ли | think-рука (§7), встроена в ядро |
| Ценность пре-пасса Annotator | улучшает ли настолько, чтобы оправдать вызов | A/B в ядре (§8) |
2. Корпус (нужен от владельца)
- 25–35 глав реальных произведений с приватными эталонными переводами (издательскими или выверенными). GuoFeng V2 — только dev, non-commercial (нельзя в продукт-оценку).
- Покрытие: zh→ru (вебновелла + данмэй), ja→ru (ранобэ), en→ru (роман) — по 8–12 глав. Диалого-плотные и нарративные главы (см. эксп.07: диалог-плотность — ключевая ось).
- Рекуррентные имена/термины обязательны (≥8 сущностей, повторяющихся через главы) — иначе memory-eval нечего мерить.
- ⚠ Методическое ограничение (эксп.04): владелец читает только en/ru. → человеческая оценка ВЕРНОСТИ возможна лишь на en→ru (и русская сторона стиля любого перевода). Для zh/ja верность оценивается: (а) английским якорь-подстрочником (профессиональный en-перевод как мост), (б) LLM-судьёй чужого семейства против исходника, (в) сверкой с приватным русским эталоном. Заложено в дизайн (§4–5).
Пока корпуса нет — индикативный прогон на PD-Ah-Q (eval/pilot/memory_eval.py) валидирует харнесс и decl-метрику.
3. Дизайн ядра (C0–C3, Р2)
Один и тот же чанк проходит 4 конфигурации ядра, все на ратифицированном стеке (draft=DeepSeek-v4-flash, editor=grok-non-reason):
- C0 baseline — один проход переводчика (+ детерминированный глоссарий = уровень VseGPT; baseline метрики, PROGRESS §синтез).
- C1 draft→editor — черновик → моноязычный редактор (D1). Дефолт Ф1.
- C2 generate-then-select — N черновиков → судья-селектор выбирает лучший (arXiv:2603.20324). Висит на калибровке s* и валидности судьи (§5).
- C3 select-then-refine — селект + точечный re-ask/refine на выбранном (verifier-gated, research/14 M2; рычаг L3 эксп.adaptive_reask).
Каждая конфигурация × {think-OFF, think-ON} (§7) × {Annotator-pre-pass OFF/ON} (§8) — факторный, но приоритезированный (полный крест дорог; ядро × think — первично, Annotator — вторичный A/B на подвыборке).
4. Человеческая оценка — Best-Worst Scaling (BWS)
Почему BWS, не шкала Ликерта: BWS (выбери ЛУЧШИЙ и ХУДШИЙ из набора) даёт более надёжные, менее шумные ранги, чем абсолютные оценки (устойчив к разнице калибровки аннотаторов) — стандарт для сравнения близких систем. LAIT показал: абсолютные оценки судей плывут, ранги — надёжнее.
- Единица: абзац/короткий чанк (не вся глава — усталость аннотатора). Наборы из 3–4 систем (C0–C3, или think-ON vs OFF пары).
- Слепота: аннотатор не видит, какая система какой выход дал (рандомизация порядка + меток).
- Оси оценки (раздельно, НЕ смешивать):
- Стиль/естественность (русская сторона) — владелец/русскоязычный аннотатор, любой языковой парой (не нужен исходник).
- Верность/полнота — только en→ru напрямую; для zh/ja — через en-якорь-подстрочник (§2). Отдельная BWS-задача с исходником/якорем на виду.
- N: ≥3 аннотатора на набор для inter-annotator agreement (κ); при низком κ — расширять, не усреднять шум.
- Стилевая ось для M1 (in-context демонстрации, research/14): бьёт ли демо-рука стиль БЕЗ потери консистентности/fidelity (индикатив: по консистентности не бьёт; стиль не мерен).
5. LLM-судейская панель (валидация + калибровка)
Судья держит две вещи: (а) выбор в C2/C3 (селектор), (б) валидацию качества offline. Обе непроверены на домене → пилот их валидирует, не принимает на веру.
- Панель чужих семейств (анти-self-preference): Gemini-3.1-Pro (нативный, safety-off для 18+), grok-4.3, gpt-5-mini — судят выходы deepseek/grok. Никогда не судить моделью своего семейства свой выход.
- Шкала Комиссарова (анкета MQM-весов, 04-unhappy): mistranslation / omission / addition / терминология / согласование рода / стиль-канцелярит.
- Валидация #1 — корреляция судья↔человек на BWS-ранге (LAIT: расходятся). Если ранговая корреляция (Kendall τ) судья↔человек низка → судья не годен как прокси, C2/C3 под вопросом.
- Валидация #2 — калибровка порога s* (на нём вся ставка generate-select, arXiv:2603.20324): при каком судейском скоре «выбрать/переспросить» максимизируется человеческий win-rate. Пред-регистрировать s* ДО финального прогона.
- Cross-family fidelity-судья vs источника — для memory-eval (§6, ось б).
6. Memory-eval — дециждающий эксперимент банка (WMT25 три-режимный)
Вопрос (страх владельца + go/no-go): оправдана ли ДЕТЕРМИНИРОВАННАЯ селективная инъекция (наш банк) vs просто весь глоссарий в длинном контексте, и вредит ли ошибочная инъекция (тихая деградация).
Три режима терминологии (WMT25) × baseline:
- C0 без глоссария; C1 селективная инъекция (наш банк, §ниже); C2 полный глоссарий + скользящее резюме (длинный контекст); C3 случайный/неверный глоссарий (dst перемешан) — адверсариальная рука, прямой замер тихой деградации.
Инъекция C1 = ЗЕРКАЛО Go-горячего-пути (backend/internal/pipeline/memory.go — ИСТОЧНИК ИСТИНЫ): нормализованный точный матч, per-язык min-key (Han≥2/фонетич.≥3), collision-prone короткий фонетический ключ → AMBIGUOUS, longest-match containment, спойлер-окно since/until (hard-reject), sticky scene-inertia. Сверено с Go-юнит-тестами; при расхождении — верить Go. eval/memory_hotpath.py — прототип ДО cc57c7b (глобальный MIN_KEY=2, без collision-downgrade) — не переиспользовать; актуальный контракт — в eval/pilot/memory_eval.py.
Метрики (три оси раздельно):
- (а) консистентность — decl-осознанная (
eval/pilot/declmetric.py, pymorphy3): одинаково ли рендерится approved-dst во всех чанках, где встречается src. ОБЯЗАНА быть decl-осознанной — наивный матч даёт 18–67% ложных флагов (research/14 §2; backend memory_e1_test.go full-decl 0% / base-only 67%). Заодно — валидация E1-надёжности post-check на РЕАЛЬНОМ корпусе (жёсткий гейтpostcheck_gateфлипается только после этого замера precision на живых книгах — mirror D12/Q4). - (б) верность/пропуски — CometKiwi (валидировать на ru-литературе — не подтверждён, research/11-gap-2) + LLM-судья чужого семейства против источника + сверка с эталоном. ru-специфика: согласование рода (вкл. глагол прош.вр.), склонение dst.
- (в) стоимость — input/output токены по условиям (C2 заметно дороже — часть решения; эксп.08 цены).
Пред-регистрированное правило решения: C1≈C2 по качеству но C1 дешевле → банк оправдан; C2≫C1 → нужен полнее контекст; C3 роняет vs C0 по верности → страх владельца подтверждён, post-check/disposition обоснованы (и мы их конвертируем в громкое, а не устраняем).
Спойлер-рука: отдельный замер — инъектится ли спойлер-запись (since_ch) до её главы (должна hard-reject) — валидировано в харнессе (глава 6 отвергает 革命党, глава 7 инъектит).
7. Think-ON vs OFF (D6, встроено в ядро)
Гипотеза владельца частично подтвердилась локально (羅生門→Радзёмон) + DRT (arXiv:2412.17498). Но COGS: deepseek-reasoning мал, grok-4.3 +25% (эксп.08), Gemini форс. Мерить по качеству на draft/translator И editor (не только Terminologist):
- пары think-ON vs think-OFF того же ядра → BWS + судья;
- скоуп think-ON — subset-billing провайдеры (deepseek/glm/kimi, reasoning ⊆ completion); xAI/Grok think-ON только после reasoning-буфера в EstimateUSD (D6.2);
- вход в решение: оправдывает ли прирост качества +13–25% COGS редактора (эксп.08 §grok-4.3).
8. Пре-пасс Annotator (A/B)
Улучшает ли пре-пасс (извлечение терминов/резюме/контекста ДО перевода) качество настолько, чтобы оправдать вызов. A/B на подвыборке: ядро с Annotator-pre-pass vs без. Метрика — та же BWS + консистентность (пре-пасс должен поднимать recall глоссария).
9. Пред-регистрация (до финального прогона — против p-hacking)
Зафиксировать ДО прогона: пороги s*, допустимый flag-volume на главу (эксп.07: ≥2 excision-флага = fail), decl-метрику и её матчер, состав судейской панели, правило решения memory-eval, N аннотаторов и κ-порог. Изменения после — отдельным разделом с обоснованием.
10. Харнесс eval/pilot/ (построено / нужно)
Построено (runnable):
declmetric.py— decl-осознанная консистентность (pymorphy3 lemma + hyphen-translit + Go-style stored-decl whole-word). Smoke: склонённые формы (Вэйчжуане/Вана/Дэна/сюцая) → 0 ложных флагов.memory_eval.py— WMT25 3-режим + bank-vs-long-context, инъекция = зеркало Go-контракта (спойлер/disposition/sticky/containment валидированы dry-run). Индикативный прогон на PD-Ah-Q; масштабируется на корпус владельца (--src).
Нужно достроить (когда есть корпус):
- BWS item-generator + агрегатор (наборы, рандомизация, κ, ранги) →
bws.py. - CometKiwi-обёртка (+ её валидация на ru-литературе, research/11-gap-2) →
cometkiwi.py. - Судейская панель обёртка (cross-family, Комиссаров-анкета) →
judge_panel.py. - en-якорь-подстрочник pipeline для zh/ja верности.
11. Ограничения и что нужно от владельца
- Корпус (§2) — блокер решающего прогона: 25–35 глав с приватными эталонами, рекуррентные имена, диалог/нарратив баланс.
- Человеческие аннотаторы BWS (≥3) — минимум владелец (en/ru); для zh/ja верности — en-якорь.
- 18+ рука (канал B, судья 18+) — explicit-фрагменты только от владельца, gitignored; на выделенном xAI-промо-аккаунте (не клиентские книги).
- CometKiwi на ru-литературе не валидирован (research/11-gap-2) — пилот его и валидирует; до того — не доверять как единственной оси верности.
Воспроизведение (индикатив, без корпуса владельца)
eval/.venv/bin/python eval/pilot/declmetric.py # decl-метрика smoke
eval/.venv/bin/python eval/pilot/memory_eval.py --dry-run --chapter 6 # инъекция-зеркало + спойлер-гейт
eval/.venv/bin/python eval/pilot/memory_eval.py --chapter 6 --max-chunks 5 # индикативный C0–C3 на Ah-Q