Обученный сегментатор страниц (главный путь), правила — запасной; фикстура rt-topic-6870900

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
DenozordecandClaude Sonnet 5.5 committed 2026-10-27 18:06:47 +07:00
1 parent 96e5fa0d75
commit d155b8584b
7 files changed
+1257 -4

No files matched your search

+20
View File
@@ -64,3 +64,23 @@ BIO-разметка строится по символьным спанам ч
Лучшая по joint exact на held-out test копируется в `models/best`.
Итог — в `reports/summary.md`.
## Сегментатор страниц (src/segmenter.py) — главный путь
Какие строки страницы описывают дорожки, решает обученная модель
(rubert-tiny2, бинарная классификация строки с контекстом «пред. || след.»),
а не регулярки. Правила (`html_extract.extract_segments`) — запасной путь:
используются, если `models/segmenter` нет или модель не нашла ни одной строки;
режим можно форсировать: `predict_release(..., segmenter="rules")`.
* Обучение: `python -m src.segmenter --train` (~1 мин). Разметка строк — по
`raw` из `labels.csv` (362 страницы в `data/pages`); синтетика: `raw` всех
train-строк (в т.ч. nnm/kinozal без страниц) вставляются в контекст реальных
строк страниц. Страницы делятся по хешу `release_id` (≈20% в тест).
* Метрики: строки (test) P 0.936 / R 0.994; e2e на непросмотренных страницах
rutracker (n=64) — precision 0.904 → 0.946 против правил, recall 0.975 → 0.975
(`tests/e2e_segmenter.py`; выборка мала, разброс большой).
* Нарезка ВНУТРИ строки («Дублированный, многоголосый») в данных не размечена
(91 группа из 6735) — остаётся на правилах `_split_entries`, но только на
строках, выбранных моделью.
* ONNX-путь (Rust/TS) сегментатор пока не включает: там по-прежнему правила.