textmachine/docs/research/14-adaptive-memory.md

53 KiB
Raw Permalink Blame History

Адаптивный/обучающийся слой памяти: стоит ли гибрид, огибающая осуществимого, арбитраж

Дата: 2026-07-05. Сессия «Адаптивный слой памяти» (промт docs/archive/prompts/ADAPTIVE_MEMORY_RESEARCH_PROMPT.md). Предмет — вопрос владельца: не будет ли максимально эффективным гибрид «отлаженный детерминированный банк памяти (Р3) + слой, обучающийся ПО ХОДУ перевода книги» (in-context / локальный LoRA / kNN-MT / online-retrieval / само-коррекция), и как именно смёржить под наш жёсткий локально-стоимостный контур. Мандат — адверсариально проверить, стоит ли оно того, а не поверить в модность.

Метод (как в валидации банка, research/13): многоагентный ресёрч по 6 направлениям (kNN-MT / in-context-демонстрации / adaptive-online-MT / локальный LoRA / adaptive-RAG-петли / свежее 20252026) + независимая адверсариальная верификация каждой несущей находки по первоисточнику (24 верификатора: 19 CONFIRMED, 5 OVERCLAIM с точной поправкой) + две исполняемые пробы на нашем стенде/ключах (eval/adaptive_probe.py — доступ к логитам у флагманов; eval/adaptive_incontext.py — демонстрации vs глоссарий на реальном zh→ru) + чтение реального кода backend/ на git HEAD. Все заблокированности проверены пробой, а не по памяти (мандат §Жёсткий контур). Прод-код не пишется — только eval/ и этот документ.

Одна фраза. Гибрид в основном НЕ стоит того: всё, что «учится» на уровне декодера/логитов/весов флагмана — физически заблокировано (подтверждено живой пробой), а то, что реально помогает (копирование точного рекуррентного термина; коррекция под надёжный внешний сигнал) — уже принадлежит детерминированному ядру и в обучающемся слое было бы строго хуже. Остаётся ровно один кандидат, влезающий в контур: непараметрические in-context демонстрации для СТИЛЯ серой зоны — но он не проходит БАР-(в) по имеющимся данным (мой zh→ru замер: демонстрации НЕ бьют детерминированный soft-глоссарий по консистентности, 0.833 vs 0.875) и его надо гейтить тем же in-house eval'ом, что и сам банк. Плюс: гипотеза владельца «эмбеддинги→CPU, 8 ГБ VRAM→обучающийся модуль» верна в посылке, но пуста в следствии — освобождать VRAM правильно, но обучающегося модуля, который на эти 8 ГБ бьёт базис, нет.


TL;DR — вердикт по каждому кандидату (правило БАР)

БАР (из промта): любой мёрж обязан (а) оставить детерминированный горячий путь авторитетным; (б) влезть в VRAM/стоимость (локаль-first); (в) эмпирически бить eval-валидированный детерминированный базис на zh/ja→ru по консистентности/fidelity/цене; (г) оправдать сложность. Не проходит (в) → не мёржить.

Механизм «учится по ходу книги» Осуществим? БАР Вердикт
kNN-MT на флагмане-переводчике blocked (нужны hidden states декодера) НЕ мёржить (физически невозможно)
Constrained/beam decoding, forced tokens на флагмане blocked (нет доступа к декодеру/beam) НЕ мёржить (физически невозможно)
Frontier-LoRA / online-SGD весов флагмана blocked (нет тренируемых адаптеров у провайдеров; fine-tuning сворачивается) НЕ мёржить (физически невозможно)
Локальный kNN-MT черновик (наш декодер) 🟡 технически да (в) ✗ НЕ мёржить: чистый выигрыш уже у банка; на слабой локали чинит не то
Книга-LoRA на локальном reranker/ключ-энкодере 🟡 технически да (впритык) (в) ✗ НЕ мёржить: data-poor, «learns-less», нет разделяющего порога у bge-m3
Локальный само-корректирующийся LLM-цикл 🟡 да, но (в) ✗ НЕ мёржить: intrinsic self-correction деградирует без внешнего верификатора (а он у нас уже детерминированный)
In-context ДЕМОНСТРАЦИИ (серая зона: стиль/auto/ambiguous) да (0 VRAM, memory+prompt) (в) ? ПИЛОТИРОВАТЬ под eval — единственный кандидат; но индикатив: НЕ бьёт базис по консистентности
Детерминированный консистентность-кэш + precision-gated adaptive-retrieval да (0 ML, 0 VRAM) (в) н/п ВНЕДРЯТЬ — это гигиена банка, а не «обучающийся слой»

§0. Жёсткий контур подтверждён живой пробой (не по памяти)

Мандат требовал перепроверить заблокированность методов пробой, а не по памяти. Проба eval/adaptive_probe.py (2026-07-05, живые ключи, наши боевые модели):

Модель стека (роль) token logprobs logit_bias hidden states
deepseek-v4-flash (черновик) есть (top-5) принят нет (никогда)
grok-4.3 (редактор) нет (200, поле пустое) отказ HTTP 400 нет
gemini-3.1-pro-preview (премиум) нет — HTTP 400 «Unknown name logprobs» отказ 400 нет
gpt-5-mini нетHTTP 403 «not allowed to request logprobs» отказ 400 нет

Читается так:

  1. kNN-MT на флагмане определённо заблокирован — и это двойная дверь. kNN-MT ключует датастор внутренним hidden state декодера (Khandelwal 2010.00710, ICLR 2021, дословно: «the 1024-dimensional representation input to the final layer feedforward network»), не выходным логитом. Ни один закрытый API не отдаёт pre-softmax представление декодера. Даже единственный, кто отдаёт хоть что-то (DeepSeek — выходные logprobs), даёт softmax-выход, а не hidden state → датастор kNN-MT построить нельзя в принципе.
  2. Логит-стиринг на флагмане почти недоступен: logit_bias принимают только DeepSeek и GLM (и, вероятно, молча игнорируют); grok/gemini/openai — отказ. А для русской морфологии (subword-токены) грубый logit_bias всё равно бесполезен.
  3. Verify-by-probe поймал ошибку литературы. Свежая работа «Log Probability Tracking of LLM APIs» (arXiv 2512.03816) утверждает, что «все модели xAI» и семейство GPT-4.1 возвращают logprobs. Живая проба это опровергает для наших моделей/даты: grok-4.3 не возвращает, gpt-5-mini отдаёт 403. Урок валидации подтверждён: имя/возможность модели проверять пробой, не по документу.
  4. Fine-tuning у провайдеров закрывается, а не открывается: Gemini API не поддерживает тюнинг после депрекации 1.5-Flash-001 (май 2025), только Enterprise с непрозрачным adapter_size без экспорта логитов/hidden state; OpenAI сворачивает self-serve fine-tuning в чёрный ящик без логитов. → frontier-LoRA как роль переводчика заблокирован и в 2026 не разблокировался.

Следствие для всего ответа: ни kNN-MT, ни constrained decoding, ни дообучение флагмана-переводчика невозможны. Всё «обучение» может жить только (а) на локальном декодере (llama.cpp/vLLM отдают логиты/hidden states — это можно) или (б) как непараметрическая инъекция в промпт закрытого API (memory+prompt). Эти два коридора и разбираются ниже.


§1. Огибающая осуществимого

Коридор A — локальный декодер (логиты/hidden states доступны). Физически открыт, но упирается в качество локали: exp03/exp06 — локаль рендерит zh→ru реалии мусором (render 0.26 на zh, Палладий-мусор), значит её роль — support (спот сущностей recall ~0.98, скрининг, эмбеддинги, дешёвый судья), не финальный переводчик и не рендерер канона. Всё, что можно обучить локально (kNN-MT-датастор, LoRA), наследует эту слабость.

Коридор B — непараметрическая инъекция в промпт закрытого API. Открыт полностью (0 VRAM, только память+промпт). Сюда попадают: soft-глоссарий (уже есть — средний слой Р3), running-summary (DelTA-паттерн, уже спроектирован), и новое — few-shot демонстрации (прошлые подтверждённые пары/пассажи книги). Только последнее — реально «новый» механизм.

Что вычёркнуто явно (заблокировано, §0): kNN-MT-на-флагмане, constrained/beam/forced decoding, frontier-LoRA/online-SGD переводчика, Self-RAG с reflection-токенами (требует дообучения генератора, 2310.11511).

Что влезает в 8 ГБ рядом с bge-m3 и SQLite-банком: см. §5 (VRAM-арбитраж) — короткий ответ: bge-m3 на GPU (~2.4 ГБ FP32) + резидентная support-локаль 89b (56.6 ГБ) уже насыщают 8 ГБ (замер: 30b-a3b полигона держит 6.4 ГБ, стенд идёт под потолок). Обучающийся модуль вытесняет либо эмбеддер, либо support-локаль — резидентно «банк + эмбеддер + reranker + адаптер» вчетвером не живут.


§2. In-context демонстрации — «бесплатный выигрыш» (единственный проходящий отбор кандидат)

Литература подтверждает тезис в АБСТРАКТЕ, но не в нашем направлении.

  • Демонстрации > терминология для стиля и консистентности рекуррентных терминов: Moslem et al. (EAMT 2023, arXiv 2301.13294) — EN→ZH COMET zero-shot 59.87 → fuzzy 2-shot 73.90 → 10-shot 75.30; добавление 10 glossary-терминов ПОВЕРХ fuzzy-2-shot — плоско (73.90→73.57). Li/Luo/Briakou/Cherry (Google, arXiv 2503.05010) — retrieved-демонстрации бьют terminology (COMET +2.7/+1.7/+0.1 против +0.3/+0.3/+0.3 у терминологии), причём терминология почти ничего не даёт сильным моделям.
  • Критическая рамка (Li et al., верифицировано): ~65% выигрыша демонстраций — от совпадения СТИЛЯ корпуса, а не от перевода терминов. Это ровно серо-зонная/стилевая роль, которую наш контур разрешает, и НЕ точностно-критичный матч approved-имён, который держит детерминированный горячий путь.

Где ВРЕДИТ (тоже подтверждено):

  • Power of Noise (Cuconasu, SIGIR 2024, 2401.14887): семантически близкий, но неответный дистрактор роняет генерацию сильнее всего (near-miss хуже случайного шума). → «лучше ничего, чем мусор» — тот же принцип, что в банке.
  • Over-trust в MT (не только QA!): «Exposing the Cracks» (2510.00829) — при шумном retrieval низкоресурсные направления «often produce nonsensical translations», а бо́льшие reasoning-модели БОЛЕЕ подвержены и рационализируют подставленное; Context-Adoption-Rate: Fr→En 2.5→0.7 (72%) под противосмысловым контекстом. Это прямая эмпирика страха владельца — но на ru-как-источник, не target.
  • Lost-in-the-middle (N. Liu, 2307.03172) + раздувание кэшируемого префикса: демонстрации в промпте ломают стабильный кэш-префикс Р5 (их надо в волатильный хвост → рост input-токенов).

Моя проба на реальном zh→ru (eval/adaptive_incontext.py, 魯迅《阿Q正传》, чанк с 8 рекуррентными персонажами, канон В. Рогова, deepseek-v4-flash, N=3, метрика = детерминированный post-check банка «каноническая форма в выходе»):

Плечо канон-консистентность толкование
A. без памяти 0.458 своя транслитерация дрейфует от канона
B. soft-глоссарий (базис Р3) 0.875 инъекция глоссария сильно тянет к канону (+0.42)
C. глоссарий + демонстрации (слой) 0.833 демонстрации НЕ бьют глоссарий (0.04, в шуме)
D. глоссарий + дистрактор-демонстрации 0.875 near-miss не укусил на этой метрике/масштабе
E. глоссарий с ОДНОЙ отравленной строкой (赵太爷→«Ли») 0.833, отравление принято 0/3 сильная модель сопротивлялась отраве на известном имени

Поправка (диагностика eval/adaptive_reask.py): строгий accept-регэксп занизил глоссарий. Персистентный промах 王胡 — артефакт метрики, не провал adherence: модель рендерила канон Рогова «Бородатого Вана» (склонённое), а Ван\b не ловит суффикс. Склонение-толерантный матч → глоссарий = 8/8 = 1.000 (оба репа, ноль реальных провалов adherence). То есть на этом чанке детерминированный глоссарий УЖЕ насыщает консистентность — demos не бьют его потому что бить нечего (потолок). Это (а) усиливает вердикт §2, (б) — живая инстанция несущего невалидированного риска research/13 §2: post-check регэкспом в русской морфологии undercount'ит И даёт ложные флаги → post-check обязан лемматизировать (pymorphy2/Natasha), а не регэкспить.

Три индикативных вывода (малый N, hand-built accept-регэксп → риск само-подтверждения, одна книга/модель — не финальный eval):

  1. Детерминированный soft-глоссарий сильно работает на zh→ru (без памяти 0.458 → глоссарий ~1.0 после поправки на склонение) — впервые индикативно подтверждено на нашем направлении (валидация банка это на zh→ru не мерила). Хорошая новость для ядра. Оговорка: чанк «лёгкий» (глоссарий насыщается) → реальную ценность demos и re-ask надо мерить на трудных чанках (длинные/плотные, где adherence падает на 1736%, 2310.05824).
  2. Демонстрации НЕ бьют глоссарий по консистентности (0.833 vs 0.875) — ровно как предсказывает Li (выигрыш демо — 65% стиль, а не термин-матч, чего эта метрика не видит). Значит выигрыш демонстраций, если он есть, — стилевой, а не консистентность/fidelity, а БАР-(в) меряет именно консистентность/fidelity.
  3. Отравленную строку сильная модель отвергла на ИЗВЕСТНОМ имени (阿Q-канон в претрейне) — мягкое свидетельство против слепого over-trust, но НЕ тест на НОВОМ термине без прайора (там over-trust реален — 2510.00829).

Вердикт по §2: демонстрации — единственный кандидат, влезающий в контур (0 VRAM, memory+prompt), но по имеющимся данным не проходит БАР-(в): не бьёт базис по консистентности, а их стилевой выигрыш (а) не измерен на zh/ja→ru нигде, (б) не то, что меряет критерий, (в) приносит риски дистрактора/спойлера/раздувания. → пилотировать под тем же WMT25-3-режимным eval'ом, что и банк, добавив стилевую ось; НЕ мёржить до прохождения.


§3. Локальная параметрическая адаптация (LoRA/continual) — для какой роли окупается

Ни для какой, по имеющимся доказательствам.

  • Данные: одна книга даёт сотни approved-пар — data-poor. «LoRA Learns Less and Forgets Less» (Biderman, TMLR 2024, 2405.09673): LoRA недоучивает новый домен (нужно ~10× больше данных, чем full-FT), хотя и меньше забывает (регуляризатор). На сотнях пар выигрыш сомнителен.
  • Не чинит корневую слабость: локаль ломает zh-реалии в представлениях (upstream), а не в выходной проекции. Даже kNN-MT — это (приблизительно, Gao 2305.13034, EMNLP 2023 — поправка верификатора: «a specific case of fine-tuning», не «математически эквивалентно») implicit GD только на output-projection, т.е. переставляет верхний слой в уже сломанном пространстве. LoRA низкого ранга — тот же потолок. → рендерер-канона роль закрыта (её держит облако/человек+таблица Палладия, G1/B6).
  • Reranker/ключ-энкодер: bge-m3 эмпирически не даёт разделяющего порога (валидация банка, пересечение распределений) — нет доказательства, что книга-LoRA на ключ-энкодере это чинит; а reranker 2-го эшелона не бьёт precision-1.0 детерминированный горячий путь (там он и не нужен).
  • Test-time training звучит близко, но единственная сильная работа (2411.07279) — поправка верификатора: измерена на ARC-головоломках (symbolic grid), НЕ на MT; перенос на перевод — ноль.
  • Железо (каветат владельца (a), верифицировано + замер стенда): единственный первоисточник по консумерским 8 ГБ (2509.12229) — поправка: тренирует ТОЛЬКО 1.5B, batch≤2, и на RTX 4060 (Ada sm_89), НЕ Pascal. 7B-QLoRA ~810 ГБ пик (Dettmers 2305.14314) → не сорезидентен ни с чем (ни с bge-m3, ни с reranker). Все числа — Ampere/Ada; перенос на Pascal GTX 1070 не гарантирован (см. §5 — реальный замер bnb-4bit на sm_61).

Вердикт по §3: нет источника, где per-book локальный LoRA бьёт детерминированный базис на zh/ja→ru; корневая слабость (реалии) им не чинится; данных мало; железо — впритык и Pascal-неопределённо. НЕ мёржить.


§4. Локальный kNN-MT / retrieval-augmented ДЕКОДИНГ

На флагмане — blocked (§0). На локали — технически да, но не стоит. Четыре независимых довода (все верифицированы):

  1. Чистый выигрыш kNN-MT уже у нас. Единственная гарантированная победа kNN-MT — скопировать точный рекуррентный target-токен из датастора. Это ровно то, что делает детерминированный Aho-Corasick approved-глоссарий — но с жёсткой гарантией против мягкой интерполяции kNN (kNN подмешивает как вес, модель может перебить). Дублировать это обучающимся слоем — строго хуже (теряем гарантию, возвращаем тихую инъекцию).
  2. Не чинит реалии на слабой базе (Gao 2305.13034 — output-projection only; §3).
  3. Шумный retrieval деградирует (Jiang 2210.08808, EMNLP 2022: 45.92→42.22 BLEU от шума — но на сильной De-En базе; слабая локаль даёт хуже дискриминированные ключи → именно тот шумный режим).
  4. Tiny datastore = самый слабый режим (Khandelwal: выигрыши от датасторов 159K18.3M токенов; одна книга 10⁵ токенов — на нижней границе или ниже) + **×100 латентность** vanilla (эффективные варианты — Wang 2204.06175, Martins chunk-based — снимают ценой качества).

Вердикт по §4: локальный kNN-MT-черновик, кормящий API-редактора — не новый выгодный мёрж: его консистентность-выигрыш принадлежит банку, а адаптационный выигрыш ограничен слабой локалью, на которой он сидит. НЕ мёржить.


§5. VRAM-арбитраж («кто побеждает») — прямой ответ на гипотезу владельца

Гипотеза владельца: эмбеддинги+векторный поиск целиком на CPU/RAM, все 8 ГБ VRAM — под обучающийся модуль (LoRA/reranker/адаптер).

Посылка — ВЕРНА (подтверждено).

  • Нигде в пайплайне нет real-time эмбеддинга. Горячий путь — детерминированный Aho-Corasick (микросекунды, CPU-дёшево), без модели. Эмбеддинги — Фаза-2 второй эшелон, генерация кандидатов на ревью, пачечная. Каветат (b) закрыт: эмбеддинг — фон, не интерактив.
  • CPU-числа (замерены валидацией банка, не переоткрываю): bge-m3 CPU ~78 мс/текст → вся книга (~510k чанков+резюме) ≈ 713 мин пачкой; brute-force cosine <20 мс на 100k. Латентность неважна (фоновый инжест). bge-m3 в RAM ~2.4 ГБ из 32 — незаметно.
  • CPU-контеншн с горячим путём и Go-раннером (каветат c) — планируем: горячий путь микросекундный и не конкурирует; сами переводческие вызовы сетевые (ждут API), CPU простаивает; эмбеддинг-инжест ставится между главами/на границе джоб, вне критического пути. Контеншн управляем расписанием, не архитектурой.

Следствие — ПУСТО (это и есть развязка). Освободить 8 ГБ можно, но обучающегося модуля, который на них бьёт детерминированный базис, НЕТ (§2§4): локаль не рендерит zh (роль рендерера закрыта), reranker не бьёт precision-1.0 горячий путь, книга-LoRA data-poor и не чинит реалии, kNN-MT-выигрыш уже у банка. Освобождённый VRAM правильнее отдать УЖЕ существующим support-ролям локали (спот сущностей recall 0.98 — write-path банка G1; NSFW-скрининг/черновик; дешёвый судья-гейт), которые контур уже требует, чем гипотетическому обучающемуся слою.

Реальный замер потолка на стенде (2026-07-05, eval/adaptive_probe-инфра + изолированный CUDA-env):

  • Резидентно сейчас: qwen3-abliterated:30b-a3b полигона — 6.4 ГБ VRAM (не выселял; координация — PROGRESS-пинг).
  • WSL2-квирк (важно для «арбитра»): CUDA видит free=7.0 ГБ / total=8.59 ГБ даже при резидентном 30b — WSL2 спилит в shared system RAM сверх физических 8 ГБ. То есть «8 ГБ» на этом стенде мягче, но спил идёт по DDR-скорости (как эксперт-офлоад 30b-a3b) → «влезло по CUDA» ≠ «влезло быстро». Арбитраж по max_memory_allocated процесса, не по nvidia-smi.
  • bnb-4bit на Pascal sm_61 — реальный замер (изолированный CUDA-env, Qwen2.5-0.5B, 3 train-step): bitsandbytes 0.49.2 официально таргетит sm≥75 (Turing), но QLoRA-4bit NF4 фактически РАБОТАЕТ на Pascal sm_61 (loss считается, backprop идёт, peak 1.00 ГБ на 0.5B). Но на Pascal 4-bit ~×9 МЕДЛЕННЕЕ fp16-LoRA (5.6с vs 0.6с на 3 шага) — оптимизированных NF4-ядер под Pascal нет, dequant-оверхед доминирует → на этой карте преимущество QLoRA по скорости ИНВЕРТИРУЕТСЯ: влезает в fp16 — бери fp16-LoRA; QLoRA нужен только для 7B+ (в fp16 ~14 ГБ весов не влезают), где он единственный вариант, но медленный. Потолок «удобно тренируется» — ~1.53B (QLoRA ~24 ГБ); 7B-QLoRA ~810 ГБ = на/за физическим пределом 8 ГБ (в WSL2 спилит в RAM → ещё медленнее), и 7B-тренировка + резидентный reranker одновременно не живут. Каветат владельца (a) подтверждён замером: 4-bit нужен для 7B, но на Pascal он медленный; макс. удобная модель ~1.53B.

Вердикт по §5: CPU-эмбеддинг/GPU-free сплит — правильный дефолт (посылка верна, каветаты b/c закрыты), но не ради обучающегося слоя (его нет под БАР), а ради существующих support-ролей и чтобы не держать эмбеддер резидентно зря. Гипотеза владельца подтверждена как инженерная гигиена, опровергнута как путь к «обучающемуся модулю, бьющему базис».


§6. Adaptive online-retrieval + само-корректирующая петля — что реально без тяжёлого ML

Скептическая литература решает вопрос за нас.

  • Intrinsic self-correction деградирует без надёжного внешнего сигнала: «LLMs Cannot Self-Correct Reasoning Yet» (Huang, ICLR 2024, 2310.01798) — точность плоско/падает после само-коррекции; Kamoi (TACL 2024, 2406.01297) — надёжный внешний верификатор — единственный различитель успеха и провала. В MT: TEaR (2402.16379) +0.39 COMET и один раунд лучший (итерации портят); систематика WMT24-literary (2605.13368) — рефайнмент улучшает fluency/style/terminology, но не adequacy; Chen (2306.03856) — BLEU падает при рефайнменте.
  • У нас надёжный внешний верификатор УЖЕ есть — детерминированный Aho-Corasick post-check на approved-глоссарии. То есть «детект дрейфа → коррекция approved-термина» уже решено детерминированно и не должно уезжать в обучающийся слой (нарушит контур-5).
  • Реально новая зона — auto/ambiguous сущности без approved-ответа. Здесь работает детерминированный консистентность-кэш (first-seen/majority-vote рендеринга, БЕЗ ML) + precision-gated adaptive retrieval КАКИЕ серо-зонные записи инъектить, с hard-abstention (паттерн risk-sensitive bandit 2604.27283 — штраф за ложную инъекцию > пропуск, воздержание first-class — но без онлайн-обучения, просто как precision-gate). Опциональный локальный CRAG-подобный оценщик (2401.15884, дообученный T5) мог бы заменить отсутствующий разделяющий cosine-порог bge-m3 — но это Фаза-2, low-trust, и тоже гейтится.

Вердикт по §6: петля «детект→коррекция» ценна, но её надёжная часть уже детерминирована; «обучение» сверх — это бухгалтерия глоссария (кэш растёт), а не ML.


§7. Предложенные архитектуры мерджа (творческий мандат, каждая — против БАР)

M1 — «In-context демонстрации в серой зоне» (пилот под eval; единственный проходящий отбор)

  • Компоненты: банк v2 как есть + retrieval прошлых подтверждённых пассажей книги как few-shot демонстрации ТОЛЬКО для стиля/консистентности серо-зонных терминов (auto/ambiguous/редкие реалии), в волатильном хвосте промпта после кэш-брейкпоинта.
  • Арбитраж: approved+точный матч — банк, неоспорим; демонстрации — только обогащают серую зону; каждая инъекция гейтится детермининированным post-check; precision-first фильтр + hard-abstention (Power of Noise). Демонстрации никогда не имеют write-authority над approved-именами.
  • Где мог бы бить базис: гипотетически стиль/регистр рекуррентных редких терминов (Li: 65% выигрыша — стиль).
  • БАР: (а) ✓; (б) ✓ 0 VRAM, +input-токены; (в) ✗ по индикативу (0.833 vs 0.875 на консистентности; стиль не измерен); (г) сложность средняя (retrieval + гейт + кэш-раскладка). → пилотировать под WMT25-3-режимным eval'ом на zh/ja→ru + стилевая ось (win-rate человека/сильного судьи); не мёржить до прохождения.

M2 — «Детерминированный консистентность-кэш + precision-gated adaptive-retrieval» (внедрять; не ML)

  • Компоненты: для auto/ambiguous БЕЗ approved — first-seen/majority-vote кэш рендеринга (детерминированное расширение банка); adaptive выбор КАКИЕ серо-зонные записи инъектить (risk-sensitive precision-gate, abstention first-class).
  • Это «обучение по ходу книги» в тривиальном смысле (глоссарий растёт) — без модели/VRAM/логитов.
  • Арбитраж: кэш предлагает → post-check гейтит → batch-судья/человек промоутит в approved (закрывает G1/F5/B1 first-wins-навсегда осью «редакционного времени»).
  • БАР: (а) ✓; (б) ✓ 0 VRAM; (в) не претендует бить fidelity — закрывает реальную дыру recall-0.571 (косвенные/перефразные серо-зонные) дёшево; (г) малая. → внедрять как гигиену банка v2.

Отвергнуто (не проходит БАР)

  • Локальный kNN-MT-черновик (§4): чистый выигрыш уже у банка; на слабой локали чинит не то. НЕ мёржить.
  • Книга-LoRA на reranker/ключ-энкодере (§3): data-poor, learns-less, нет разделяющего порога, Pascal-неопределённость. НЕ мёржить.
  • Constrained decoding / frontier-LoRA / Self-RAG на флагмане (§0): физически blocked.

§8. Арбитраж «кто побеждает» (сводно)

  1. approved + точный/леммный матч → детерминированный банк, неоспорим (контур-5). Обучающийся слой сюда не входит никогда.
  2. Серая зона (auto/ambiguous/стиль/2-й эшелон) → обучающийся слой (демонстрации, кэш-подсказки) может обогащать, но: каждая инъекция гейтится детерминированным post-check; при конфликте побеждает precision-first фильтр (лучше воздержаться, чем инъектить неуверенное); промоушен в approved — только через batch-судью/человека.
  3. Резюме/факты → отдельный гейт фактичности (D1), не «авторитет по умолчанию».
  4. VRAM → эмбеддер на CPU (дефолт); 8 ГБ — существующим support-ролям локали, не обучающемуся слою (§5).

§9. Максимизация коэффициента канон-консистентности — детерминированные рычаги (по запросу владельца)

Раз гибрид отклонён — правильный ход не «обучать ранкер», а добивать детерминированную сторону. Замер eval/adaptive_levers.py (трудный чанк 阿Q, 11 сущностей, 1600 знаков, deepseek+grok) даёт кривую рычагов и порядок внедрения бэкенду:

  • L1 — post-check ЛЕММАТИЗИРУЮЩИЙ (pymorphy3), не регэксп. Внедрять ПЕРВЫМ. (→ реализовано ИНОЙ формой, D31: боевой post-check — decl-aware через decl.forms сида + D24.4 union базовой формы; pymorphy3-лемматизация НЕ принята, проблему ложных флагов регэкспа закрыл decl-набор — 0% ложных на full-decl, этап A; D25.8 фиксирует «наш decl-aware путь» как ответ на морф-оговорку Exel et al.) Наивный \b-регэксп на трудном чанке даёт 1836% ложных флагов (deepseek 2/11, grok 4/11 — склонённые формы, отрендеренные верно). pymorphy3 их снимает и сворачивает OOV-транслит (Вана→ван, Дэна→дэн, Вэйчжуане→вэйчжуан). Это количественная валидация несущего невалидированного риска research/13 §2 (регэксп-шум → редакторы не верят флагам → safety рушится). Дешевле всего, чинит больше всего.
  • L2 — RECALL матчера: нормализация (полная, тестируемая) + alias-граф + sticky. Точный матч на trad/alias формах: recall 0.00 → +норм 0.50 → +alias 0.75. Живой баг: неполная trad-карта (爺→爷) молча промахнула 赵太爷 → A4 подтверждён: нормализацию покрыть и тестировать бит-в-бит (OpenCC, не мини-карта). Крупнейший рычаг рекола (retrieval_bench recall 0.571 — 43% упоминаний не инъектится).
  • L3 — post-check + точечный re-ask (verifier-gated correction, M2). На трудном чанке добивает реальные промахи adherence (deepseek 0.82→0.91). Не чинит гомограф/односимвольный ключ (钱) — и не должен.
  • L4 — таблица Палладия/Поливанова (B6): потолок ПРАВИЛЬНОСТИ. L1L3 поднимают «использует ли модель канон»; L4 — «правильный ли канон». Локаль zh 0.26, облако-топ 0.75 — только детерминированная таблица закрывает разрыв.
  • Побочно подтверждено: 钱 (односимвольный ключ, гомограф Цянь/деньги) упорно промахивается даже после re-ask → правило min_key_len/запрет одиночных ключей (A3) обязательно — 钱 из глоссария выкинуть или заменить целой сущностью (钱府→«дом Цянь»).

Где ваш инстинкт «тюнить ранкер» легитимен (честно): ТОЛЬКО во втором эшелоне (fuzzy/семантика, кандидаты для человека) — у bge-m3 нет разделяющего порога (retrieval_bench), и research/13 §5 оставил лазейку: другое представление / sparse-голова / маленький cross-encoder reranker может разделять лучше. Это Фаза-2, low-trust, коэффициент горячего пути (§9) не двигает. Инстинкт верен, цель — второй эшелон, не костяк.

Честные слабые места рекомендаций (по этим пунктам пишут решение)

  1. Ни одна цифра литературы не на zh/ja→ru — тотально. Все 24 верификации: DelTA, Moslem, Li, Power-of-Noise, self-correction-скептики, kNN-MT, LoRA, ModernMT/Lilt — англо-центричны или ru только как источник. Ближайшее к нам — WMT24 Discourse-Level Literary (2412.11732) с добавленным zh→ru document-level треком и DITING (2510.09116) zh-en вебновелла — но это бенчмарки-оценки, не методы адаптации, и ja→ru литературной адаптации/бенчмарка не существует вовсе (2505.05423 держит ru только как источник). Любая рекомендация по ja→ru — по аналогии, не по данным.
  2. Мой in-context замер — индикативный, с широкими CI. N=3, одна книга/чанк/модель, accept-регэкспы построил сам (риск само-подтверждения), метрика меряет консистентность канона, а не стильа именно стиль демонстрации и должны улучшать. «Демо не бьют глоссарий» доказано для консистентности, НЕ опровергнуто для стиля. Стилевую ось (win-rate) я не мерил — это дыра, которую должен закрыть пилот.
  3. Over-trust я мерил на ИЗВЕСТНОМ имени (阿Q-канон в претрейне) — модель отраву отвергла. На новом термине без прайора over-trust реален (2510.00829) — мой E-плечо это НЕ покрывает. Не читать «отраву отвергли» как «инъекция безопасна».
  4. bnb-4bit на Pascal — замерил на 0.5B, экстраполировал на 7B. Факт: NF4 работает на sm_61, но ~×9 медленнее fp16-LoRA (нет Pascal-ядер); потолок удобной тренировки ~1.53B. Но полный потолок QLoRA-7B + резидентный reranker одновременно на ЧИСТЫХ 8 ГБ я прямым прогоном не мерил (не выселял 30b полигона; экстраполяция из 0.5B-footprint + Dettmers; WSL2-спил в shared RAM мутит «влезло/не влезло»). Точное число — за скоординированным стенд-окном (выселить 30b). На вердикт не влияет: кандидата, который на эти 8 ГБ бьёт базис, всё равно нет (§3).
  5. «Демонстрации не помогают» может перевернуться на СЛАБОЙ модели. Moslem мерил GPT-3.5; наш черновик deepseek-v4-flash сильнее и, возможно, не нуждается в демонстрациях (потолок). На более слабой/дешёвой модели или на редких терминах вне претрейна демо могут дать больше — узкий сценарий, где M1 мог бы окупиться (проверять на пилоте).
  6. Distractor-плечо (D) — слабый тест Power-of-Noise. Мои дистракторы off-topic, а имена заякорены глоссарием → шум не укусил. Near-miss омограф на ИМЯ (реальный режим A3) я не тестировал — там вред вероятнее.
  7. Я рекомендую в основном НЕ строить — а это тоже ставка. Сильнейший контр-аргумент: DelTA/Moslem показывают выигрыш памяти-с-адаптацией, и наш детерминированный no-adaptation путь — ставка по экономике/контуру, не по доказательствам. Защитима (§0 блокировки + §2 индикатив), но это ставка «дешёвое-детерминированное поверх дорогого-обучающегося», как и в валидации банка.

Что делать (сжато для оркестратора/бэкенда)

  • Внедрять (Фаза 12, дёшево, 0 ML): M2 — консистентность-кэш auto/ambiguous + precision-gated adaptive-retrieval + hard-abstention. Это гигиена банка v2, закрывает recall-0.571-дыру и B1 first-wins.
  • Пилотировать под eval (Фаза 2.5), НЕ мёржить сейчас: M1 — in-context демонстрации в серой зоне; добавить стилевую ось (win-rate человека/сильного судьи) к WMT25-3-режимному протоколу банка; критерий — бьёт ли базис по стилю БЕЗ потери консистентности/fidelity и без роста дистрактор-вреда.
  • Не строить: локальный kNN-MT, книга-LoRA, constrained decoding, self-correction-как-обучающийся-слой.
  • VRAM: дефолт «эмбеддер→CPU» принять; освобождённые 8 ГБ — существующим support-ролям локали, не обучающемуся слою; скоординированный стенд-замер QLoRA-Pascal-потолка — если когда-нибудь понадобится (сейчас не нужен, кандидата нет).

Источники (проверены 2026-07-05; 19 CONFIRMED / 5 OVERCLAIM с поправкой верификаторов)

Заблокированность (проба + первоисточник): kNN-MT ключ = hidden state — Khandelwal «Nearest Neighbor MT» (2010.00710, ICLR 2021); kNN ≈ GD только на output-projection — Gao (2305.13034, EMNLP 2023, поправка: «a specific case of fine-tuning», не «математически эквивалентно»); logprob-выживание API — 2512.03816 (опровергнуто живой пробой для grok/gpt-5); Self-RAG требует дообучения — 2310.11511. Живая проба: eval/adaptive_probe.py, eval/data/adaptive_probe.json.

In-context демонстрации: Moslem «Adaptive MT with LLMs» (EAMT 2023, 2301.13294); Li/Cherry «Retrieval vs Fine-Tuning at Inference» (2503.05010); Power of Noise (SIGIR 2024, 2401.14887); over-trust в MT «Exposing the Cracks» (2510.00829); lost-in-the-middle (2307.03172). Проба: eval/adaptive_incontext.py, eval/data/adaptive_incontext.json.

Локальный LoRA/kNN-MT: QLoRA (Dettmers, 2305.14314); профиль на консумере (поправка: 1.5B, RTX 4060 Ada, не Pascal, 2509.12229); LoRA Learns Less/Forgets Less (Biderman, TMLR 2024, 2405.09673); test-time training (поправка: ARC, не MT, 2411.07279); adaptive kNN-MT (Zheng, ACL 2021, 2105.13022); robust kNN-MT (Jiang, EMNLP 2022, 2210.08808); efficient/chunk kNN-MT (2204.06175, 2022.emnlp-main.284).

Само-коррекция/adaptive-RAG: Huang «Cannot Self-Correct Yet» (ICLR 2024, 2310.01798); Kamoi (TACL 2024, 2406.01297); TEaR (2402.16379); WMT24-literary рефайнмент (2605.13368); Adaptive-RAG (NAACL 2024, 2024.naacl-long.389); CRAG (2401.15884); FLARE (2305.06983); risk-sensitive abstention-bandit (2604.27283).

Adaptive/online классический MT (механизм, не вендор-числа): Farajian (2017, multi-domain per-sentence); Wuebker «Compact Personalized» (EMNLP 2018); Peris «Online Learning for NMT PE» (1706.03196); Simianer «Immediate Adaptation R0/R1» (NAACL 2019); Wang «Non-Parametric Online from Feedback» (2109.11136). ModernMT/Lilt — вендор-маркетинг, не цитируется как доказательство.

Заземление на наше направление: DelTA (ICLR 2025, 2410.08143, LTCR-1 = самосогласованность-с-первым); WMT24 Discourse-Level Literary с zh→ru (2412.11732); DITING zh-en вебновелла (2510.09116); LiTransProQA (ru только источник, 2505.05423).

Проба-инфра: eval/adaptive_probe.py (логиты/logit_bias флагманов), eval/adaptive_incontext.py (демо vs глоссарий, zh→ru А-Q), реюз eval/refusal_bench.call_provider+providers.json, корпус eval/data/samples (魯迅 阿Q + канон Рогова). Изолированный CUDA-env (Pascal QLoRA-проба) — в scratchpad, не в репозитории.