textmachine/docs/architecture/04-unhappy-paths.md

24 KiB
Raw Permalink Blame History

Карта unhappy paths: режимы отказа AI-перевода → механизмы TextMachine (v1, 2026-07-04)

Синтез по research/12-failure-modes-{ja,zh,ru-target}.md, 12-consumer-feedback.md, 12-error-taxonomies.md (+ база 01/02/07). Назначение: (1) валидационная матрица архитектуры — каждый известный режим отказа обязан иметь механизм или честную пометку «дыра»; (2) ТЗ на QA-гейты и поля памяти; (3) источник регрессионных тест-кейсов (в research-доках каждый режим — с примером «оригинал → анти-паттерн MTL → верный перевод»).

Статусы: закрыто дизайном v2 · 🔶 закрыто частично / нужно уточнение дизайна · дыра, требует действия. Фаза — где механизм появляется по плану MVP.

Опорный факт (LAIT): при переводе не на английский читатели предпочитают человеческий перевод в 92.8% случаев и опознают MT по калькам — на ru-выходе паритет ещё никем не достигнут, вся карта ниже и есть план его достижения.

1. Консистентность сущностей — жалоба №1 всех площадок

64.4% документных ошибок MT вебновелл — инконсистентность (BlonDe); «Император птиц → Птица Император → Воробьиный Император» (DTF о DeepL); Yuewen признаёт проблему публично.

Режим отказа Механизм Фаза Статус
Дрейф имён/терминов между вызовами Глоссарий + гейт консистентности (по леммам через decl) 1
Система имён 名/字/号/прозвища: «один персонаж = 36 людей» Alias-граф в глоссарии + NER-гейт «новая форма известной сущности = блок»; новое имя без фуриганы/контекста → эскалация 12 🔶 схему Р3 расширить: aliases → граф с типами (имя/цзы/хао/прозвище/титул)
Коллапс терминосистемы рангов («Immortal, immortal or immortal») Глоссарий-тип ranked-set + проверка инъективности (2 исходных ≠ 1 целевой) и порядка ступеней 12 🔶 новый тип записи
Значащие прозвища: перевести один раз и навсегда Поле nickname_translation, первичный перевод — сильная модель/человек, дальше — лок 1 (консенсус изданий: имена — Палладий, прозвища — переводить)
Обращения шисюн/гэгэ/о-нии-чан: транскрипция vs перевод Пресеты brief «фанатский/издательский» (войны фандомов — 586 стр. холивара по одной Мосян; смертный грех — непоследовательность) + матрица обращений по парам с версионированием 12 🔶 матрица обращений = расширение series-bible-lite

2. Род и пол — самая трудная ось DITING для всех 14 моделей

Pro-drop (местоимения лишь в ~11% японских предложений; zh-топик задаётся раз на 510 клауз), омофония 他/她, а русский глагол прошедшего времени обязан выбрать род в каждой реплике. «Персонажи меняют пол каждые несколько абзацев» — мем читателей.

Режим отказа Механизм Фаза Статус
Скачущий род известных персонажей Поле gender + морфо-гейт: род русских глаголов/согласований в атрибутированных репликах против глоссария — хард-фейл без LLM 2 (морфология = Python-сайдкар)
Свап ролей «кто кого» (пассивы, бессубъектные) Билингвальный судья по триггеру (пассив/нулевой субъект в оригинале) 2
Поздний гендер-твист / намеренная неопределённость ta (данмэй, 女扮男装) gender=hidden(until_ch N) + «дисциплина уклонения» в промпте (настоящее время, безличные конструкции, именование — формализовано в гайдах ООН) + детерминированный блокер утечки рода; перевод книги целиком видит твист заранее — структурное преимущество перед посерийным MTL 2 🔶 протокол hidden — новое требование к промптам («Редакция») и гейту; фичи нет ни у одного конкурента
Феминитивы: регистровый сбой Лексикон маркированных неофеминитивов + политика в brief + форма профессии в глоссарии 2

3. Регистры и отношения — потерянные сигналы, а не ошибки

Ключевой класс: кэйго-сдвиг, смена обращения, речевые маски — это сюжетные события, которые нельзя починить редактурой выхода; их надо извлечь из оригинала пре-пассом и передать переводчику как инструкции.

Режим отказа Механизм Фаза Статус
Рандомное ты/вы внутри сцены ты/вы-матрица series-bible-lite → журнал событий переходов + детектор несанкционированных флипов; судья классифицирует флаг (ошибка vs мотивированный переход) 2 🔶 матрица → журнал событий (уточнение Р3)
Кэйго-сдвиг как перелом отношений Регистровый трекер пар персонажей по оригиналу (детерминированный: desu/masu, -сан→имя) → событие в ты/вы-журнал; русский передаёт это напрямую через ты/вы — эксплуатировать преимущество ru 2 🔶 новый пре-пасс
Gendered 1-е лицо (боку/орэ/атаси), yakuwarigo Анкета персонажа: first_person, речевой профиль, ru-компенсация маски; судья консистентности голоса 2 (поля speech в Р3)
Стирание голосов («все говорят одинаково, как ИИ-озвучка») Речевые профили + монолингвальный судья «отличимы ли реплики без атрибуции?» + анти-translationese пасс 2
Нормализация акцентов/диалектов/pidgin Профиль девиации + стратегия компенсации (лексика, не фонетика) + сигнал «в источнике девиация есть, в цели 0%» 23 🔶
Мат: недожим (RLHF) и пережим Двусторонний лексиконный гейт силы обсценности (03) + профиль грубости персонажа + политика brief (18+ маркировка) 2

4. Полнота и целостность — новый класс риска LLM

Старый MTL врал заметно, LLM врёт гладко: «добавляет и удаляет куски, сочиняя свою историю» (r/ReverendInsanity). Гейта покрытия нет почти ни у кого — продаётся как anti-hallucination guarantee.

Режим отказа Механизм Фаза Статус
Пропуски (omission) — «критическая» категория, контекстом не лечится Coverage-гейт v1 (сегментация, длины по коридорам эксперимента 01, refusal-blacklist) 1
Гладкие галлюцинации-дописывания Coverage-гейт + счёт сущностей вход/выход + билингвальный судья серых отрезков 12
Молчаливые цензурные вырезания провайдера Детектор вырезаний (полигон, эксперимент 02) + refusal-мониторинг 2
CJK-осколки, смесь языков Регэксп CJK-диапазонов + langid по абзацам 1
Разрушение форматирования/вёрстки Структурный diff документа (главы/абзацы/разметка) до и после 1 (текст) / 3 (разметка) 🔶 epub v1 теряет инлайн-разметку осознанно
Потеря ruby/фуриганы на инжесте (двухслойные термины, авторские чтения) Парсер ruby-тегов на инжесте: чтения имён → глоссарий-лок, двухслойные термины → флаг 1 →действие: добавить в спеку импорта Фазы 1 (сейчас «epub v1 = извлечение текста» молча убивает слой)

5. Идиоматика, реалии, аллюзии

Режим отказа Механизм Фаза Статус
Чэнъюй: буквализация («в груди готовый бамбук») Детерминированный пре-детектор по 4-символьным словарным маскам + судья на остаток; прецеденты в глоссарий 2 🔶 нужен словарь
Сехоуюй: смысл в опущенной половине Словарь недоговорок (без него реплика = бессмыслица) 2 🔶
Полисемия жанровых слов (道/气/修; «тюлени вместо печатей») Глоссарий доменных значений + жанровый фрейм в промпте + отказ от релейного zh→en→ru 1 (мы переводим напрямую)
Родовое слово вместо реалии (бэнто → «контейнер с едой») Слайдер Venuti в brief + глоссарий реалий + судья 12
Цензурные эвфемизмы оригинала (开车) + версия исходника (Хаски урезан ~на треть) Словарь эвфемизмов + поле метаданных «версия исходника» + человеческий шаг на интейке 1 🔶 поле метаданных — добавить в конфиг проекта
Аллюзии на классику (танка, котовадза) N-gram-мэтчинг против корпусов классики + база канонических ru-переводов (Маркова, Санович) 3 🔶 post-MVP, но БД заложить
Ономатопея: транслит-мусор («болит зуки-зуки», «hyeupp») vs фанатское «сохранить papapa» Детектор каны/транслита + словарь гионго→ru-приёмы + политика проекта (глагол/сохранить/сноска) — это конфиг, не безусловный баг 12
Вэньянь-вкрапления: потеря сдвига регистра Классификатор вэньянь-плотности → отдельный промпт-профиль; дозировка архаизации — судья 23 🔶

6. Русская сторона: механика, которую читатель видит первой

5 из 12 режимов чинятся детерминированно без LLM — дешёвый post-pass, убирающий самые узнаваемые маркеры MTL.

Режим отказа Механизм Фаза Статус
Английские кавычки вместо тире-диалогов Линтер прямой речи (Розенталь §4752), автофикс, 100% детерминированный 1 → включить в гейты Фазы 1 (дешевле coverage)
Транслит-междометия («Ауч!», «Упс», «Ара?») Блок-лист + автозамена по словарю + per-project allowlist 1
Непоследовательная ё (Пётр/Петр в одной книге) Ёфикатор + режим проекта + сверка имён с глоссарием 1
Висячие деепричастия («Подъезжая к станции, слетела шляпа») UD-парсер, флаг + автофикс дешёвой моделью 2
Вид глагола (событие vs фон) — «misused verb forms» у топ-систем WMT25 Маркеры-конфликты детерминированно; основное — судья с узким промптом + контрастивный регрессионный набор 2 🔶
Тема-рема: английский порядок слов («Девушка вошла в комнату» при вводе персонажа) Полудетерминированный триггер (новый референт + подлежащее в начале) + монолингвальный редактор 2 🔶
Несобственно-прямая речь («Завтра был понедельник») Эвристика (дейксис+прошедшее) → судья; полная гарантия — человек на выборке 23 🔶
Согласование времён наррратива (zh без грамм. времени; 38.7% инконсистентностей BlonDe) Морфостатистика времён по сцене + правило «время наррратива» в style sheet 2

7. Синтаксис и стиль — где решается «нехудожественность»

Именно тут проигрыш человеку: «гладкость» = 28.2% причин выбора HT (LAIT); «мёртвая проза, голос как TikTok-озвучка».

Режим отказа Механизм Фаза Статус
Рубленость ko/ja (пропущен пасс «сшивания») Распределение длин предложений vs оригинал и vs корпус живого русского → стилист 2 (метрики Р7)
Предложения-змеи из zh топик-цепочек Счётчик клауз/длин + пометка сверхдлинных цепочек на входе 2
Мёртвая, эмоционально плоская проза Не-LLM метрики (MTLD, дисперсия длин) как гейт → анти-translationese пасс → монолингвальный судья 2
Повторы: сорный vs авторский рефрен (ритм Мураками) Детектор повторов лемм + alignment-защита: повтор в параллельных позициях оригинала = «не трогать» 2 🔶 alignment-защита — новое требование к анти-translationese пассу, иначе редактор-агент убивает рефрены
Левоветвящиеся цепочки ja → каскады «который…который» Триггер глубины цепочки (≥3) + ≥2 «который» в выходе → судья 2
Формулы жанра: тавтология vs стёртый жанровый якорь («лицо потемнело») Частотный словарь формул жанра + бюджет повторов в политике проекта 23 🔶

8. Нарратив: кто говорит, кто думает, когда происходит

Режим отказа Механизм Фаза Статус
Диалог без атрибуции (говорящий кодируется yakuwarigo/топиком) Пре-пасс speaker-ID (дешёвая модель) + структурный гейт чередования реплик + судья «кто говорит в каждой реплике?» 2 🔶 новый пре-пасс
POV-сдвиги, head-hopping, немаркированный внутренний монолог Пре-пасс разметки мыслей/спикеров + русская пунктуация прямой речи (детерминированно) 2 🔶
Потеря подтекста/留白 (эксплицирование недосказанности) Analyst помечает ключевые сцены → судья высокого уровня/человек; автоматизации нет — честная граница 2.5+ 🔶 признанное ограничение
Потеря контекста на книжной длине («>50 страниц — имена плывут») Сама архитектура: персистентный банк памяти + регрессионные гейты на каждой главе 1 ядро продукта

9. Дыры, найденные верификатором (не покрыл ни один документ)

Режим отказа Действие
Числительные и меры CJK: разряды 万/億 (三万 → «три миллиона» — ошибка порядка!), 里/斤/сяку/стражи 时辰, счёт возраста (16 суй ≈ 15 лет) Новый детерминированный число-гейт: извлечение и сверка числовых значений вход/выход с таблицей конвертации разрядов и единиц; словарь мер в глоссарий-пресеты жанра. Фаза 12. Дёшево и частотно — включить в план
Западные имена через катакану/фонозапись: 约翰 → «Юэхань» вместо «Джон», ヴァイオレット → Вайолет/Виолетта, васэй-эйго ложные друзья (マンション = квартира, не «особняк») Поле глоссария translit_policy для псевдоевропейских имён (массовый случай в исекай-ранобэ) + словарь васэй-эйго ложных друзей. Фаза 1 (поле) / 2 (словарь)

10. Мета-режимы (процесс, не лингвистика)

  • Нестабильность качества по чанкам (41.7% MT-чанков с всплеском негатива против 11.9% у человека — LAIT): телеметрия распределения вердиктов по чанкам, эскалация хвоста, а не среднего. → в Р7.
  • «Проклятие 300-й главы» (витрина отредактирована, платный хвост — сырец; бойкоты Novelous/Webnovel): равномерные гейты по всем главам + «паспорт качества главы» в отчёте — продуктовая фича доверия. → в бэклог продукта.
  • Надёжность как дифференциатор: Trustpilot booktranslator.ai — непереведённые файлы, смесь языков, молчащая поддержка. Наши детерминированные гейты целостности — конкурентное преимущество сами по себе.
  • Пользователи хотят рычаги, а не магию (любимые фичи — редактируемые глоссарии и правка местоимений): подтверждение IDE-стратегии и «глоссарий — ядро продукта».

Следствия для плана (сводка изменений)

  1. Новая стадия «Annotator» (пре-пасс разметки оригинала) — Фаза 2: speaker-ID, субъекты клауз, регистровый трекер пар, чэнъюй/вэньянь-маски. Один дешёвый пре-пасс питает 8+ режимов; это конкретизация «аннотированного подстрочника» из Р2. В Фазу 1 из него — только детерминированная часть: ruby-парсер на инжесте (закрывает дыру §4) + NER имён.
  2. Расширение схемы глоссария/series bible (Р3): alias-граф, тип ranked-set, first_person, матрица обращений, keep_ambiguous_until/gender=hidden, nickname_translation, translit_policy, словарь эвфемизмов, профиль грубости; ты/вы — журнал событий, не статичная матрица.
  3. Новые дешёвые гейты Фазы 1: линтер прямой речи (тире), блок-лист транслит-междометий, ёфикатор, число-гейт (порядки 万/億) — все детерминированные, дешевле уже запланированных.
  4. Промпт судьи — анкета бинарных вопросов по осям (κ=0.94 против 0.84 у «оцени 110», DITING; M-MAD без рубрик уходит в отрицательную корреляцию) + обязательная калибровка на человеческом якоре (LAIT: все LLM-судьи предпочли MT). Словарь ~12 тегов ошибок с MQM-весами (minor=1, major=5, non-translation=25) зафиксировать в Фазе 1 — request_log копит статистику с первого дня. → вход для «Редакции».
  5. Alignment-защита рефренов в анти-translationese пассе (иначе чиним стиль ценой авторского ритма).
  6. Эскалацию приоритизировать по цене правки (MTPE: когерентность — самое дорогое временное усилие, meaning shifts — когнитивное), а не только по частоте.
  7. Тест-кейсы: каждый режим в research/12-* имеет пример «оригинал → анти-паттерн → голд» — собрать регрессионный сьют (задача «Полигона», после пилотного корпуса).