Сегментатор: текст kinozal из raw JSON, кодек-строки не как негатив; e2e по 400 страниц
Обучение: * page_text/kinozal_text: текст kinozal = h1 + «Техданные» + «Релиз» из data/raw/kinozal/*.json (в pages/kz-*.txt нет заголовка и «Техданных», откуда половина меток kinozal; сервис видит обе вкладки). * label_page: позитив — raw или audio_raw; неразмеченная кодек-строка русской дорожки («Аудио 3: … Русский (MVO, X)», «Аудио Rus: … | X») получает -1 и в обучение не идёт: как негатив она учила отбрасывать кодек-строки. Сводка «Аудио: Русский, английский (…)» остаётся негативом. Инференс (release): * model_segments -> (основные, кодек); выбранные моделью кодек-строки идут второстепенным источником вместе с правилом codec_segments; иноязычные («Казахский (Dub, …)», «English Dubbing», «Original») отбрасываются. * merge_extra_tracks(adopt_type): кодек-дорожка с типом «неизвестно» получает тип единственной дорожки страницы без студии. e2e_segmenter: тот же текст kinozal, не больше E2E_MAX (400) страниц на трекер, train-страницы только с --train-pages (меню парсит только тест). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
099d33bdaa
commit
6470f882f1
5 files changed
+191
-47
No files matched your search
+17
-7
@@ -73,13 +73,23 @@ BIO-разметка строится по символьным спанам ч
|
||||
используются, если `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`; выборка мала, разброс большой).
|
||||
* Обучение: `python -m src.segmenter --train --out models/segmenter_v2` (или меню
|
||||
`tools/collect.py` → «2»). Разметка строк — по `raw` и `audio_raw` из `labels.csv`
|
||||
(страницы `data/pages`); синтетика: `raw` всех train-строк вставляются в контекст
|
||||
реальных строк страниц. Страницы делятся по хешу `release_id` (≈20% в тест).
|
||||
* Текст kinozal берётся из `data/raw/kinozal/<id>.json` (`h1` + «Техданные» +
|
||||
«Релиз», `segmenter.page_text`): в `data/pages/kz-*.txt` нет ни заголовка, ни
|
||||
«Техданных», откуда взята половина меток kinozal, а сервис (`fetch_html`)
|
||||
видит обе вкладки.
|
||||
* Кодек-строка русской дорожки («Аудио 3: AC3 … Русский (MVO, LostFilm)»,
|
||||
«Аудио Rus: … | LostFilm»), не попавшая в разметку, в обучение не идёт
|
||||
(метка -1): у rutracker `raw` — строка «Перевод N:», и как негатив она учила
|
||||
модель отбрасывать кодек-строки — а на kinozal студии только в них.
|
||||
* В `predict_release` выбранные моделью кодек-строки — второстепенный источник
|
||||
(`source: codec`): подключаются, только если у какой-то дорожки страницы нет
|
||||
студии; если других строк нет (nnm), они и есть дорожки.
|
||||
* e2e: `tests/e2e_segmenter.py [каталог]` — пары (тип, студия) на тестовых
|
||||
страницах, не больше `E2E_MAX` (400) на трекер; `--train-pages` — ещё и train.
|
||||
* Нарезка ВНУТРИ строки («Дублированный, многоголосый») в данных не размечена
|
||||
(91 группа из 6735) — остаётся на правилах `_split_entries`, но только на
|
||||
строках, выбранных моделью.
|
||||
|
||||
Reference in new issue
Block a user