textmachine/docs/experiments/16-bank-mining.md

20 KiB
Raw Blame History

Эксперимент 16. Банк-майнинг W1.5 (полигон-стадия research/20 §D)

Статус: полигон-сессия exp16 (2026-07-18), исполняет пре-рег дизайн research/20 §D (дизайн-оф-рекорд, D39.6). Зона: eval/exp16/ + этот файл. Артефакты — ВНЕ git (/home/ubuntu/books/gu-zhenren/exp16/). Коммичу ТОЛЬКО пре-рег фриз (единственный коммит, ДО первого платного вызова — D30.10/D37); результаты сдаются этим отчётом, лендит оркестратор. Бюджет платных армов: жёсткий кап $10 (решение владельца 1718.07).

Структура: §0 пре-задача (ре-аудит exp14b, D39.9) · §1 пре-рег фриз · §2 GT/материал · §3 результаты по армам · §4 решающие правила + маршрутизация слепых зон · §5 деньги · §6 самопроверка + отклонения.


§0. Пре-задача ($0, ДО фриза): ре-аудит exp14b исправленными правилами (D39.9)

Мандат (промт §пре-задача): Q4a (D39.9) вскрыл, что (i) правила скорера exp14b (rule_counterfactual/polarity_envy/b1) дефектны, а исправленные оверрайды лежат в q4a_traps.py; (ii) харнес exp14_common.call НЕ отклоняет finish=length — усечённый выход возвращается как валидный (err=None). Задача: (1) пере-скорить СОХРАНЁННЫЕ exp14b-выходы исправленными правилами; (2) свип finish_reason=length по exp14/14b-леджерам; (3) отчёт-дельта: какие пер-класс вердикты D38 сдвинулись. Флип любого несущего → СТОП + пинг оркестратору (errata — его зона).

Код (аддитивный, риг exp14/14b НЕ тронут — импорт read-only): reaudit_14b.py, length_sweep.py. Length-гейт для СВОИХ будущих генераций чинится у себя (exp16-харнес), риг exp14 не трогаю.

§0.1. Результат ре-скоринга (задача 1) — D38 DET-ядро ДЕРЖИТСЯ

D38 (14b-meaning-battery.md §2.1) скорил DET ручной span-читкой (авто-скорер был само-отвергнут как бракованный). Исправленный q4a_traps — это тот самый скорер, но починенный (предложение-скоуп, исправленные a1/a2/b1/b2/c1/d1/d2; звук b2, c2=rule_grade_bing, c3=rule_patriarch реюзаны verbatim). Self-test корректных правил: 19/19 pass. Ре-скор всех сохранённых выходов арма C/F/X/D/M (+ K где есть, + P0-референс):

Трап (класс) glm-5 C gpt-5.4 F grok X deepseek-pro D mistral M сходится с D38?
a1 двойн.отриц (крит) fail fix (лок.gap→разрешён) fail fix fix все
a2 无不 fix fix fix fix fix все
b2 四成四=44% fix fix fix fix fix все
c1 人上之人 (крит) fix fix (лок.gap→разрешён) fail fail fix* (M: ?→fix, апгрейд)
c3 族长 (глосс-конфаунд) fail fix fix fix fail все

Каждая ячейка, которую исправленный скорер СМОГ локализовать, совпадает с ручным вердиктом D38 дословно — включая паттерн глосс-конфаунда c3 (C/M=fail «старейшина», F/X/D=fix «глава») и c1 M=?. Единственные два расхождения — a1 F и c1 F: D38=fix → исправленный скорер=? (пустой span). Это НЕ семантический флип, а пробел покрытия локатора q4a на перефразе gpt-5.4 (окно story→knowledge 90 симв. перелетело; над людьми разорвано словом обычными). ? = «не локализовано / не классифицируемо — ИСКЛЮЧЕНО из ставок, НИКОГДА не тихий pass». Разрешение span-читкой (мануально + независимо, §0.3): gpt-5.4 верно рендерит оба («…не было ни одного человека, который бы его не знал» = верная двойная негация; «…подняться над обычными людьми» = верное 人上之人). D38 «fix» стоит.

Исправленные fix-rate по армам (9 DET-инстансов, ? исключён из знаменателя): C 7/9 · F 5/6 · X 7/9 · D 7/9 · M 5/7 · P0 4/5. (b1/c2/d1/d2 не были в ручной D38-таблице §2.1 — свежие данные, не «сдвиги».)

Несущие выводы D38 под исправленными правилами — БЕЗ изменений:

  • «Только gpt-5.4 чинит смысл» опровергнуто: a1 чинят F, D и M; валят glm(C) и grok(X). Провалы РАЗБРОСАНЫ по модель×конструкция (a1: C+X; c1: X+D; c3-глосс: C+M). Нет модели безупречной/безнадёжной.
  • c3 = глоссарий-енфорсмент, не способность (C/M подтянули approved-сосед 家老→старейшина к draft-целевому 四代族长) — подтверждено внутренней консистентностью (ни один арм не мешает глава/старейшина).

§0.2. Свип finish_reason=length (задача 2) — ни одна несущая DET-ячейка не заражена

8 леджеров, 477 записей: stop 413 · length 32 · (none) 32. Разбор 32 length-записей:

Источник n Приняты как валидные? Затрагивает несущую DET-ячейку?
gemini-3.1-pro (G-base/G-disc, exp14) 11 да (баг-гейт) нет — gemini ДРОПНУТ как арм (exp14b §1.1); не в C/F/X/D/M
kimi-k2.6 (K-арм + судьи, exp14/14b) 19 2 приняты (10.1/11.1), 17 отвергнуты (empty) нет — K-арм ДРОПНУТ (D38); 10.1/11.1 не несущие
deepseek-v4-pro D 2.1 (exp14b) 1 да (comp_tok=8000, оборван на «…Ступа[й]») нет — 2.1 = e2 (SOFT/судейский), не DET; НОВАЯ находка
gpt-5-mini (regate-судья) 1 нет (отвергнут empty) нет — судья, не редактор

Прямая проверка длин 7 несущих DET-чанков (7.0/17.0/16.0/6.0/9.1/10.1/19.0) по C/F/X/D/M: все консистентны и завершены (ни один аномально короткий, ни один в свипе). Несущие DET-вердикты сидят на полных выходах. D 6.0 (упомянут в D38 как оборванный→перегнан на 16k) — сохранённый файл полный (10054 симв, stop); в свипе как length не значится (финальная перезапись). Новая находка: D 2.1 (e2, SOFT) — принятая усечёнка; судьи e2 скорили оборванный выход D. Влияния на несущее нет (e2-вердикт D38 = «большинство correct, чэнъюй-сплющивание универсально» — усечёнка не рождает ложную катастрофу), но фиксирую как риг-гигиену.

§0.3. Независимая верификация несущих (author≠reviewer) + дельта-вердикт (задача 3)

Промт требует: «несущие a1-вердикты span-верифицированы независимо». Исполнено воркфлоу из 4 независимых refute-by-default ридеров (a1 ×2, c1, c3), читавших СЫРЫЕ выходы армов, вердикт fix/fail/omit + цитата-span. Все 4 подтвердили каждую несущую ячейку, включая двойное подтверждение a1 F=fix и c1 F=fix (моё разрешение локатор-gap'ов независимо подтверждено). a1: C=fail×2, F=fix×2, X=fail×2, D=fix×2, M=fix×2. c1: C/F/M=fix, X/D=fail. c3: C/M=fail, F/X/D=fix.

ДЕЛЬТА-ВЕРДИКТ: 0 семантических флипов несущих вердиктов D38. DET-ядро D38 держится под исправленными правилами, тройно подтверждено (D38-ручной × исправленный авто-скорер × независимый refute-by-default ридер). Два расхождения (a1 F, c1 F) — пробелы покрытия локатора, разрешены в fix; одно улучшение (M c1 ?→fix). СТОП-гейт НЕ сработал; пинг оркестратору по флипу НЕ требуется (условие пинга — флип, его нет).

Риг-находки в реестр (не блокеры, для протокола): (а) исправленный q4a_traps-локатор имеет пробелы покрытия на не-S2 материале → выдаёт ? (безопасно: не тихий pass) — подтверждает правоту D38 скорить DET ручной span-читкой; (б) харнес exp14 принял усечёнку D 2.1 (e2 SOFT) — единственная новая жертва length-бага вне дропнутых армов; (в) для СВОИХ генераций exp16 length-гейт реализуется в exp16-харнесе (отклонять finish=length как reject/flag) — §1.

Артефакты: exp16/reaudit_14b.json, exp16/length_sweep.json, exp16/pretask_independent_verify.json.

⟶ Гейт пройден: ядро держится. Перехожу к пре-рег фризу (§1).


§1. Пре-рег фриз (miner-v1) — коммит ДО первого платного вызова (D30.10/D37)

Замораживается дословно из research/20 §D + конкретизации. Детектор-код детерминирован (сортировки, версия miner-v1, версионированные словари) — повторный прогон байт-в-байт (§D4-е).

1.1. Материал и Ground Truth

  • GT = сид v2 пост-reseed, guzhenren-seed-v2.yaml sha256 175a67ad2f05…c408f4 (совпадает с реф-хешем промта; 人祖=male, 古月=n-a подписаны — exp15-преп). GT = 57 термов + 2 алиас-поверхности.
  • Фильтр вхождения (§D1): каждый GT-терм имеет ≥1 вхождение src/алиаса в source (Aho-Corasick-эквивалент БЕЗ suppressContained, D24.2). Проверено исполнением: 57/57 проходят с аннотацией, 54/57 без.
  • BLURB-ПРАВИЛО (решение полигона, пре-рег): аннотация гл.1/чанк0 СЧИТАЕТСЯ вхождением ⇒ GT=57. 3 blurb-терма (血颅蛊 since193, 一气金光虫/青丝蛊 since47) встречаются по 1 разу только в аннотации ⇒ страта f<3. (Альтернатива «аннотация ≠ вхождение» дала бы GT=54; репортим f<3-recall в обоих разрезах для этих 3 термов.) Частотные страты GT (incl. аннотация): f≥10 — 40 · f3-9 — 7 · f<3 — 10.
  • (source, draft) пары: rerun/records.json sha256 3de49eaf…928d — 57 чанков (гл.125), черновики deepseek-v4-flash. ⚠ Конфаунд инъекции (§D1): черновики генерились С глоссарий-инъекцией сида (budget 800, pipeline-rerun.yaml) ⇒ спред на GT подавлен ⇒ метрики спреда/канона на них = НИЖНЯЯ граница; несущие выводы — по cold-start срезу (§1.6).

1.2. Армы (A1A3+абл)

Арм Детектор Определение
A1 V-A Han-n-граммы 16 × частотный floor 3 × c-value (nested-дисконт, g(L)=log₂(L+1)) × weirdness (контраст с общим zh)
A2 V-B A1 + translation-spread (Dice/LTCR по ru-черновикам, pymorphy3-леммы) + dst-варианты
A3 V-C A2 + паттерны: 百家姓-якорь, титул/топо-суффиксы, rank/grade-композиция, продуктивная морфология (авто-формант по over-rep), Палладий ru-канал
A3-абл V-C, λ=0 V-C без spread-сигнала — изолирует вклад каждого сигнала (§D2)

1.3. Замороженные пороги (miner-v1) — выбраны на тюнинг-половине ch115, ±50%-стабильны

freq_floor=3 (§A1 C-value канон) · subsume_alpha=0.80 (nested-консолидация ранжирования; 0.5 слишком агрессивно роняет GT) · ngram_max=6 · formant_min_over_rep=15.0 · formant_min_partners=3 · lam=0.0 на инъектированных черновиках (spread вредит ранжированию — конфаунд §D1; на cold-start λ свипается) · pattern-бонусы {name/place 140, title 120, term 80} × source-weight. Свип ±50% (§1 tuning_sensitivity.json): A3@f≥3=1.0 инвариантно по ВСЕМ настройкам; catastrophe PASS везде.

1.4. Метрики (все детерминированные, $0, кроме адъюдикации)

  1. recall@PROPOSED (членство в кандидат-сете = ось «где арм слеп», §D3) — первичная recall-метрика, по типам (name/title/place/term/nickname) и стратам (f≥10/3-9/<3).
  2. recall@top-K + pseudo-precision@K (ось ранжирования/точности) + trade-off кривая.
  3. precision@30 адъюдицированная (топ-30 не-сидовых A3): владелец по карте ИЛИ кросс-семейный судья закалённого паттерна judges.py (per-vote, оба порядка, полно-evidence) — precision@сид НЕ метрика (§D1).
  4. canon-recovery (§C2): покрытие подписанных лемм предложением канона; несущее — на cold-start.
  5. алиас-precision рёбер R1R3 (entity-B³, не MUC) + мини-голд владельца для recall (§E-1 тачпойнт).
  6. стабильность порогов ±50%. 7. A6b accuracy верификации/линковки.

1.5. Порог-дисциплина 60/40 (анти-подгонка, §D1)

Тюнинг = ch115, тест = ch1625. Пороги выбраны на тюнинге, заморожены этим коммитом; первичный репортируемый результат — тест-половина; full-срез — вторичка (catastrophe/trade-off/дамп).

1.6. Cold-start срез (пре-рег фиксирует главы)

Главы [1, 4, 5, 7, 9] (жадное GT-покрытие: 52/57 сущностей, 14 чанков — 6 в гл.1). Свежие flash-черновики БЕЗ глоссарий-инъекции, 2 конфига: plain (=срез, spread+canon-recovery) и banknote (§B3-инструкция, канал сноски A4). Промт translator — backend/prompts/translator.md sha256 35d3ad6e…, brief из rerun/book.yaml, БЕЗ инъекц-блока (порт coldstart_gen.py). ⚠ DeepSeek-долина обязательна (пики UTC 0104/0610 ×2, D39.7 — coldstart_gen.in_deepseek_peak() отказывает в пик).

1.7. Катастроф-скрин (§D4-в)

方源 · 蛊 · 蛊师 · 古月 обязаны быть в топ-50 победителя; промах = провал арма. Пройден на full (ranks 0/1/2/13/…) — g(L)=log₂(L+1) держит одночарный 蛊 (nested в 蛊师/蛊虫/月光蛊) на ранге 1.

1.8. Карта независимости сигналов (§D4-а — против manufactured convergence)

Сигналы репортятся РАЗДЕЛЬНО: A1(частота×контраст), spread(A2A1 / A3A3абл), паттерны(A3A1). Сведение «N сигналов сходятся» — только с leave-one-out. Spread на инъектированных = ~0/негатив (изолирован), измеряется экологически лишь на cold-start.

1.9. Бюджет и порядок (§D5)

Платный кап $10 (владелец 1718.07), per-call gate + hard-cap (exp15_llm.Spender). Порядок: A1A3+абл ($0) → алиас ($0) → A6/A6b (стенд $0) → cold-start (копейки) → A4/A5 (платные, последними, отменяемы). Length-гейт (D39.9): ВСЕ свои генерации отклоняют finish=length (не наследуем баг exp14).

1.10. Хеши (версионирование детектора)

  • Код miner-v1 (SHA256): exp16_common 92bc737a · detectors 89059e53 · patterns 7ac8240c · spread 5422415f · palladius a071295e · arms a5ed2ae2 · run_arms c4e3e17d · banknote 069ad8fe · coldstart_gen 70c8d9c1 · alias 354172fa · canon e947ebf3 · reaudit_14b 8d95ad58 · length_sweep 59a60b15.
  • Словарь-артефакт (контраст): data/jieba_dict_general_zh.txt sha256 7197c321…e12a8 (jieba 0.42.1 dict.txt, общий zh word-freq; вне git — воспроизводим из jieba 0.42.1, SHA пиннится здесь).
  • Сид 175a67ad… · records 3de49eaf… · translator.md 35d3ad6e… · бэкенд HEAD b9e62a7.

1.11. Решения владельца, вшитые (1718.07, НЕ пересматривать)

Жанр-паки НЕ строятся (V-C только универсальные каналы; авто-формант, не хардкод 蛊). Майнер НИКОГДА не пишет approved (auto/draft + карта подписи); канон = по ВСЕМ вхождениям × Палладий-конформность × полнота леммы. Пол в сиде подписан (人祖=male, 古月=n-a); счётчики 他/她 = evidence, вердикт = владелец. ja→ru реплика — след-за-§D (отдельный мини-фриз).

⟶ Фриз коммитится. Результаты (§3+) — ПОСЛЕ, лендит оркестратор.


§2. GT и материал (см. §1.1) · §3. Результаты по армам · §4. Решающие правила + слепые зоны · §5. Деньги · §6. Самопроверка

(заполняются после прогонов; тест-половина — первичка)