Сегментация: фикс резки по запятой, refine_span; датасет 6864 строк, переобучение

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
This commit is contained in:
DenozordecandClaude Sonnet 5.5 committed 2026-10-27 17:21:49 +07:00
1 parent 6be369c415
commit bc9ff36e61
17 files changed
+9037 -272

No files matched your search

+15 -1
View File
@@ -66,7 +66,8 @@
| 2 URL + агрегат релиза | сделано: `src/fetch.py`, `src/release.py`, `--url`, `POST /predict {"url"}` |
| 3 title-fallback | сделано (`ПМ (LostFilm)` → дорожка с `source: "title"`); заголовок берётся из HTML (`<h1>`/`<title>`), из текстового дампа (первая строка вида «… / год / …»), либо передаётся явно (`title`). Если на странице есть дорожка того же типа без студии, студия вписывается в неё (`source: page+title`), а не дублируется. **Эффект на e2e мал**: kinozal P/R 0.107 → 0.143, rutracker без изменений (0.826 / 0.984) — в разметке датасета студия из заголовка почти не нужна |
| 4 kinozal-вкладка | **не сделано** в сервисе: страница релиза требует авторизации, а `get_srv_details.php?id=…&pagesd=N` уже вызывает `KinozalClient.php` в grabber. Рекомендация: grabber скачивает вкладку сам и шлёт `{"html": …, "title": <заголовок раздачи>}` (во фрагменте вкладки заголовка нет) |
| 5 false-positives сегментации | **не сделано** (precision rutracker 0.826 — отдельный разбор) |
| 5 false-positives сегментации | сделано: починена резка «Авторский, одноголосый» по запятой; постобработка спана (`refine_span`: до границ слова, мусор вроде `L,C,R,l,r`/кодеков → null). Остаток — промахи модели на `kbps \| DUB Автор` и особенности разметки |
| 9 переобучение | датасет вырос 3286 → 6864 строк; обе модели переобучены (см. ниже) |
| 6 tiny2 + int8 | сделано: 29.3 МБ, parity 99.8% тип / 99.2% спан / 100% 18+ (`reports/onnx_parity_tiny2_int8.md`) |
| 7 тесты | `run_tests.py`: 57 ok (URL allowlist/SSRF, декодирование, заглушки Cloudflare/логина, title, слияние, агрегат) |
| 8 `target/` | сделано |
@@ -79,3 +80,16 @@
* `--url` живьём не проверен: rutracker отдал 403 (бот-защита/гео), nnm — 404 на тестовый id. Проверено только на allowlist, декодировании и заглушках.
* Шаг 5 (false positives сегментации) и kinozal без авторизации остаются открытыми.
* Веса (`models/`, `tiny2-onnx`) в gitignore и лежат только в этом worktree/основном репозитории.
## Итоги после переобучения (датасет 6864 строк, 7780 после подготовки)
| | было | стало |
|---|---|---|
| held-out joint exact, base | 0.946 | 0.950 (тест теперь 516 строк — сравнение условное) |
| held-out joint exact, tiny2 | 0.915 | 0.924 |
| e2e rutracker precision / recall | 0.826 / 0.984 | 0.841 / 0.973 |
| smoke: автор вне датасета | 5/10 | 7/10 |
| tiny2 int8: размер, parity тип / спан / 18+ | 29.3 МБ, 99.8 / 99.2 / 100 | 29.3 МБ, 100 / **98.8** / 100 (ниже порога 99%) |
Для e2e есть страницы только старых релизов (`data/pages`), для новых строк их нет.
Если порог 99% по спану критичен — для встраивания брать fp32 tiny2 (116 МБ).