48 lines
10 KiB
Markdown
48 lines
10 KiB
Markdown
# `eval/pkg7/` — терминологическая ресёрч-программа (полигон, пакет-7)
|
||
|
||
Инструменты фазы A. Отчёт с цифрами и вердиктами — `docs/archive/reports/POLYGON_TERM_RESEARCH_A_2026-07-26.md`.
|
||
Всё здесь **$0**: ни одного вызова LLM-провайдера, ни одного чтения ключей.
|
||
|
||
| Скрипт | Что делает | Заметки |
|
||
|---|---|---|
|
||
| `split_book.py` | книга → JSONL-субстрат `{chapter, chunk_idx, source}` | правила глав — ДАННЫЕ (`RULES`), добавить книгу = добавить строку; epub парсится stdlib (bs4/ebooklib в venv нет) и чистится от колонтитулов |
|
||
| `minerharness/` | вызов БОЕВОГО `internal/miner` из модуля ВНЕ репо | `build.sh <work-dir> [commit]`; `replace` смотрит в `git archive`-копию коммита, а НЕ в рабочее дерево |
|
||
| `mine_nonhan.py` | кандидаты-термы для en/ja тремя раздельными каналами | ORTHO · DISP · CONTRAST; кандзи сознательно без контраста (см. шапку) |
|
||
| `kwic.py` | KWIC-контексты вхождения | разметка по тексту, а не по памяти; `--stats` даёт объём контекстов для сметы |
|
||
| `seed_recall.py` | recall WHICH-канала против подписанного сида | майнер обязан гоняться с ПУСТЫМ сидом, иначе метрика вырождается |
|
||
| `rubric_probe.py` | измеримость критериев рубрики на подписанном сиде | M1 морфология (pymorphy3) · M2 транскрипция · M3 коллизии банка |
|
||
|
||
## Правила, выученные на своих ошибках в этом пакете
|
||
|
||
1. **Пин обязателен.** Харнесс `replace`-ит копию коммита, не рабочее дерево: параллельная бэкенд-сессия правит `backend/` под руками, и прогон стал бы невоспроизводимым. Все цифры отчёта — на `996bade`.
|
||
2. **Ссылки `файл:строка` — по коммиту пина.** В рабочем дереве те же якоря уже уехали; первая редакция отчёта содержала номера строк рабочего дерева.
|
||
3. **Порог частоты и алфавит кандидатов — свойство ЯЗЫКА, не движка.** Японские названия техник живут на частотах 2–10 и в катакане/руби; ханьский n-граммный канал их не видит вовсе.
|
||
4. **Правило вершины словосочетания зависит от типа терма** (у имени вершина последняя, у нарицательного — первая). Морфо-чекер без этого правила меряет не то: первая версия `rubric_probe.py` склоняла «Вина» в «Монах Цветочного Вина».
|
||
5. **Контраст без опоры вырождается в частоту.** Ранжирование кандзи против словаря другого языка даёт log частоты, а не над-представленность; канал понижен до инвентаря.
|
||
6. **Отклонение методики — замерять, а не декларировать.** Нарезка здесь не боевая; свип целевого размера чанка (800/2000/6000) дал Жаккар 1.000 — только после этого цифры можно было предъявлять.
|
||
|
||
## Фаза B (добавлено 26.07)
|
||
|
||
| Скрипт | Что делает |
|
||
|---|---|
|
||
| `bkrs_lookup.py` | словарные статьи БКРС списком; воспроизводит куки-челлендж `ca=<hex>`, из-за которого страница считалась JS-рендеримой |
|
||
| `build_termset.py` | набор термов со входом терминолога (KWIC + пары «исходник↔черновик») из реального выровненного корпуса шести прогонов |
|
||
| `terminologist_arms.py` | шесть армов промпта по пре-регистрации §A5; батчи, леджер денег из фактического `usage`, сырьё сохраняется целиком |
|
||
| `blind_judge.py` | слепая Best-Worst оценка; соль перемешивания по терму, подпись владельца участвует как отдельный кандидат `GOLD` |
|
||
| `repair_judge.py` | терпимый пере-разбор судейских ответов ИЗ СЫРЬЯ (модель отдаёт JSON с недостающей скобкой) — $0, без повторных вызовов |
|
||
| `score_bws.py` | BWS-счета и вердикты F1–F4 по порогам, названным до трат |
|
||
| `audit_phaseB.py` | **адверсариальная ревизия фазы B**: пере-счёт объективного слоя, состав промптов по сырью, вырожденные айтемы, пере-скоринг BWS без них, деньги из сырья |
|
||
| `blind_judge2.py` | слепая оценка на ПОЧИНЕННОМ наборе (фаза B′): дедуп кандидатов · только расходящиеся термы · **ДЕКОЙ** — заведомо неверный вариант, без которого контроль «отличает ли судья годное от случайного» неизмерим |
|
||
| `score_b2.py` | вердикты фазы B′ по порогам §0: T (контроль правила транскрипции) · C1–C3 (годность судьи) · R (разброс прогона) |
|
||
|
||
**Урок фазы B — в редакции ПОСЛЕ ревизии (первая редакция была неверной).** Сперва я записал сюда «слепые LLM-судьи не имеют разрешающей способности». Проверка исполнением (`audit_phaseB.py`) это опровергла: у 35 термов из 80 все семь кандидатов оказались ОДНОЙ И ТОЙ ЖЕ строкой, а на 45 невырожденных судьи ставят арм без контекстов последним — то есть разрыв они видят. Настоящий урок другой и жёстче:
|
||
|
||
7. **Айтем без вариативности — не измерение, а шум с ценником.** Сравнительный протокол обязан собираться так, чтобы кандидаты РАСХОДИЛИСЬ: дедуплицируй варианты, требуй уникальности эталона (иначе контроль «отличает ли судья подпись» неизмерим по построению), выкидывай термы, где все ответы совпали.
|
||
8. **Фактор, который есть во всех армах, не измеряется ни одним из них.** Правило транскрипции лежало в общей части промпта — значит контроля не было, и любые «армы с правилом против армов без» были иллюзией чтения собственного кода.
|
||
9. **Считай улики, а не абзацы.** «Три независимых наблюдения» под рекомендацией свелись к одному терму, посчитанному дважды, плюс непроверенная поисковая сводка. Перед словом «сходится» — проверь, не один ли это сигнал в трёх обёртках.
|
||
|
||
**Чем кончилась ревизия (фаза B′, замер за $0.14).** Правы оказались обе стороны спора, но каждая наполовину, и без замера этого было не разделить:
|
||
|
||
10. **Слепой судья — катастроф-экран, а не ранжировщик.** Подложенный декой ловится 43–45 раз из 45 (счёт −0.93/−0.98), подпись владельца не помечена катастрофой ни разу, но ранговое согласие с объективным слоем ничтожно (ρ = +0.43 и −0.11). Грубое видит уверенно, тонкое не разрешает — и роль ему надо давать по этой способности, а не по желаемой.
|
||
11. **Одна строка промпта может стоить канона — и одновременно ничего не менять в среднем.** Снятие правила транскрипции вернуло `春秋蝉` в точный канон владельца, но агрегатный сдвиг оказался +0.013 при пороге 0.05: правило помогает на антропонимах ровно столько же, сколько вредит на названиях предметов. Единичный яркий пример и агрегат — разные улики, и путать их нельзя даже когда пример красив.
|
||
12. **Повторы дёшевы и меняют статус вывода.** Три прогона на 19 термах стоили $0.024 и превратили «P0b хуже P1» из одной точки в измерение: разрыв 6 термов против размаха 1. Заодно объяснили аномалию «случайный глоссарий дал 19/19» — 19/19 лежит внутри шума прогона.
|