tools/audit_tracks.py и reports/tracks_audit.md — аудит всех дорожек техданных по data/raw с планом. Пункт 1 плана: harvest_core.codec_line_rows добавляет студии из строк «Аудио 2: AC3 … (MVO, LostFilm)», «Аудио Rus: … | TVShows» (studio_source=codec), которых нет среди строк релиза; тот же шаг в tools/relabel_studios.py (повторный запуск ничего не добавляет). labels.csv: +6 428 строк в 2 862 релизах (kinozal 3 444, nnm 1 609, rutracker 1 375), со студией 29 331 -> 35 759. tests/e2e_segmenter.py: модель через E2E_MODEL. Co-Authored-By: Claude Opus 5.5 <[email protected]>
127 lines
11 KiB
Markdown
127 lines
11 KiB
Markdown
# Аудит дорожек в описаниях релизов (raw) — выводы и план
|
||
|
||
Вход: все сохранённые страницы `data/raw/{kinozal,nnm,rutracker}/*.json` (35 384 релиза:
|
||
kinozal 10 541, nnm 13 677, rutracker 11 166) против `data/labels.csv` (48 896 строк).
|
||
Текст как у сервиса: kinozal — «Техданные» + «Релиз», nnm/rutracker — пост.
|
||
Цифры и примеры: `reports/tracks_audit_numbers.md`, пересчёт:
|
||
|
||
.venv\Scripts\python tools\audit_tracks.py [--cache путь.pkl]
|
||
|
||
Строка дорожки = «Перевод N: / Озвучка: / Дубляж:» или кодек-строка («Аудио N: AC3 … (MVO, X)»)
|
||
русской/украинской дорожки; субтитры и сводки без типа/студии не считаются. Студии сравниваются
|
||
через `release.same_studio` («А. Гаврилов» = «Андрей Гаврилов»), словарь — студии меток (≥ 5 раз)
|
||
без мусора.
|
||
|
||
## Что нашлось
|
||
|
||
### 1. Студии из кодек-строк не попадают в метки (главное)
|
||
|
||
Студия названа в строке дорожки релиза, но её нет среди меток этого релиза:
|
||
|
||
| | релизов с метками | из них с недостающей студией | недостающих студий | из кодек-строк «Аудио» | из «Перевод:» | релизов, где у меток **нет ни одной** студии, а в кодек-строке есть |
|
||
|---|---|---|---|---|---|---|
|
||
| kinozal | 9 932 | 1 690 (17 %) | 3 736 | 3 240 | 496 | 1 129 |
|
||
| nnm | 10 085 | 1 295 (13 %) | 2 032 | 1 003 | 1 029 | 653 |
|
||
| rutracker | 7 742 | 972 (13 %) | 1 645 | 531 | 1 114 | 495 |
|
||
|
||
Топ недостающих: kinozal — HDrezka 362, TVShows 339, LostFilm 211, Red Head Sound 164, LeDoyen 117,
|
||
Jaskier 101, MovieDalen 89, Мосфильм-Мастер 80; nnm/rutracker — LeDoyen, Postmodern, НТВ+, HDrezka,
|
||
1+1, NewStation, Невафильм.
|
||
|
||
Причина: разметка строится по строкам «Перевод:», а кодек-строки идут только как `audio_raw`
|
||
к уже найденной дорожке (`studio_source=audio` — всего 992 строки). Типичный kinozal:
|
||
«Перевод: Профессиональный (многоголосый закадровый)» без студии + «Аудио 2: AC3 … (MVO, LostFilm)».
|
||
Это та же дыра, что закрыла доразметка nnm «Перевод:» (nnm 0.58 → 0.85 по релизам), только
|
||
крупнее. Обратное (студия в метках, которой нет на странице) почти не встречается: 1 / 22 / 14.
|
||
|
||
### 2. «Перевод N:» с несколькими студиями размечен частично (nnm, rutracker)
|
||
|
||
~1 000 студий на трекер — из строк вида «Перевод 3-6: Профессиональный (многоголосый) — Jaskier,
|
||
TVShows, HDrezka Studio, LostFilm» или «Перевод: Дублированный (Iyuno-SDI Group, Le Doyen),
|
||
Многоголосый (LostFilm, Jaskier, TVShows)»: в метках часть списка. Сводка prepare_data тоже
|
||
видит «несколько дорожек в одной строке».
|
||
|
||
### 3. Форматы кодек-строк, которые не ловят правила
|
||
|
||
Это правила разметки (`segmenter.RE_AUDIO_TRACK`) и запасной путь сервиса
|
||
(`release.codec_segments`), а не модель-сегментатор: промах здесь — дыра в метках сегментатора и
|
||
в фолбэке, не измеренная потеря предсказания.
|
||
|
||
| | кодек-строк | мимо RE_AUDIO_TRACK | мимо codec_segments |
|
||
|---|---|---|---|
|
||
| kinozal | 18 297 | 11 664 (из них 10 395 — «Аудио:» без номера) | 12 858 |
|
||
| nnm | 15 151 | 2 850 | 4 696 |
|
||
| rutracker | 11 471 | 2 496 | 5 058 |
|
||
|
||
* **мимо обоих**: «Аудио pic RUS:» (374), «Аудио #N Русский:» (175), «Аудио N Rus:» / «Аудио 3 Rus:» (~220),
|
||
«Аудио rus N:», «Звук N:», «Аудио #N (rus):», «• №N: Русский (АС3 …)», «Аудио 2. Русский:»,
|
||
nnm «Russian (Dolby AC3, 6 ch) …» без префикса (1 483), «Аудио (rus):».
|
||
* **«Аудио:» без номера** исключено намеренно (сводка «Аудио: Русский, английский (AC3…)»), но
|
||
~1 000 таких строк (kinozal 184, nnm 378, rt 463) — одна дорожка с типом/студией («Аудио: AC3, 6 ch, 448 kbps - Русский (MVO, Jaskier)»).
|
||
Нужно отличать сводку из нескольких языков от одиночной дорожки, а не снимать правило.
|
||
* **мимо codec_segments, но ловит RE_AUDIO_TRACK** (1 378 / 2 224 / 3 025): кодек-строка со студией,
|
||
но без тип-слова — «Аудио Rus: AC3 … |HDRezka|», «… | AlexFilm», «- Rus (HDRezka Studio)».
|
||
`RE_CODEC_TRACK` требует тип озвучки, и на kinozal это та же студия из п. 1.
|
||
* «АVO / МVO» с кириллической буквой — 99 строк, `\bAVO\b` их не видит.
|
||
|
||
### 4. Мусор в колонке studio меток
|
||
|
||
| вид | kinozal | nnm | rutracker |
|
||
|---|---|---|---|
|
||
| источник: Лицензия / Blu-ray CEE/EUR / iTunes / Netflix | 245 | 590 | 231 |
|
||
| «X по заказу Y» | 131 | 67 | 120 |
|
||
| язык-префикс «Русский, - AlexFilm», «Украинский, AMC» | 72 | — | 13 |
|
||
| тип-слово («дубляж», «полное дублирование») | 45 | 41 | 19 |
|
||
| каналы/кодек («6 ch», «AC3, 6ch, 448 кбит/с Ист-Вест») | 7 | 89 | 18 |
|
||
| язык вместо студии («Русский», «Украинский») | 7 | 26 | 18 |
|
||
| неру дорожка (казахский, «+ Английский + Комментарии») | 4 | 6 | 26 |
|
||
|
||
Всего ~1 800 строк (≈ 4 %, вместе с «субтитрами» в studio). Часть уже чистит prepare_data («мусорный studio 155»), остальное идёт в обучение.
|
||
|
||
### 5. Релизы без меток
|
||
|
||
| | без меток | нет строк дорожек | «не требуется»/немой | строки без типа | **есть тип озвучки** |
|
||
|---|---|---|---|---|---|
|
||
| kinozal | 609 | 15 | 186 | 407 (русские фильмы «Аудио: Русский (AC3…)») | 1 |
|
||
| nnm | 3 592 | 1 605 | 520 | 1 050 | **417** |
|
||
| rutracker | 3 424 | 1 537 | 535 | 790 | **562** |
|
||
|
||
legacy и `ok=False` среди них нет — все страницы обычные. ~980 релизов nnm/rutracker с
|
||
настоящими дорожками сборщик не разметил: «Перевод 1: Профессиональный (двухголосый закадровый)
|
||
Пётр Гланц и Евгения Лютая», «Перевод: Двуголосый (НТВ+)», аниме «Озвучка: … от StudioBand»,
|
||
«Аудио 1: AC-3, RUS(int) … | Озвучкa: Дубляж Reanimedia». «Строки без типа» — в основном
|
||
«Перевод: DreamersTeam» / «Озвучка: Persona99» (тип неизвестен, но студия есть).
|
||
|
||
## План (по ожидаемому эффекту на e2e)
|
||
|
||
Каждый пункт: сначала `--dry-run` со счётом строк, потом prepare → train, ворота — e2e
|
||
`tests/e2e_segmenter.py` (E2E_MAX=400) и joint exact на test-split против текущей `models/best`.
|
||
|
||
1. **Метки из кодек-строк** (kinozal 3 240, nnm 1 003, rt 531 студий; 2 277 релизов, где у меток нет
|
||
студий вовсе). В `harvest_core` + `tools/relabel_studios.py`: студия из кодек-строки русской
|
||
дорожки, которой нет среди меток, → заполнить studio-less строку того же типа или добавить строку
|
||
`studio_source=audio`, `raw` = кодек-строка. Ожидание: kinozal recall студий (сейчас 0.93 по
|
||
парам, но в gold этих студий просто нет — метрика тоже сдвинется, сравнивать на одном gold).
|
||
Dry-run: число строк по трекерам, выборка 50 глазами.
|
||
2. **Разбор списков студий в одной «Перевод:»** (~2 100 студий nnm+rt): одна дорожка на студию с
|
||
общим типом; «Дублированный (A, B), Многоголосый (C, D)» — тип у каждой группы свой.
|
||
3. **Доразметка ~980 релизов без меток с типом озвучки** (nnm 417, rt 562): найти, почему сборщик
|
||
их пропустил (вероятно, формат «Перевод 1:» в nnm и «Озвучка: … от X» в аниме), поправить
|
||
парсер, прогнать relabel.
|
||
4. **Форматы кодек-строк в правилах**: расширить `RE_AUDIO_TRACK` / `RE_AUDIO_PREFIX` на
|
||
«Аудио pic RUS», «Аудио N Rus:», «Аудио #N Русский:», «Звук N:», «• №N:», «Russian (…)»
|
||
без префикса; одиночное «Аудио:» с типом/студией; `RE_CODEC_TRACK` — студия из словаря без
|
||
тип-слова; кириллические «АVO/МVO». Тесты на каждый формат. Даёт метки сегментатору
|
||
(переобучение сегментатора — только если e2e лучше текущих весов) и покрытие фолбэка.
|
||
5. **Чистка мусорных студий** — после решений ниже; правила в prepare_data (мусор) и в сборщике
|
||
(язык-префикс, тип-слова, каналы).
|
||
|
||
## Решения за вами (не исправления)
|
||
|
||
* **Лицензия / Blu-ray CEE / iTunes / Netflix** (~1 070 строк): студия или источник дорожки?
|
||
Сейчас модель учится выдавать их как студию.
|
||
* **«X по заказу Y»** (~320): хранить целиком, только X, или X + заказчик отдельным полем?
|
||
* **«Русский, - AlexFilm»** (85): срезать язык-префикс — почти наверняка да, но это меняет метки.
|
||
* **Неру дорожки** (казахский Qazaqstan, «+ Английский + Комментарии», ~36): выкидывать из меток
|
||
или учить lang-голову (KAZ сейчас < 20 примеров и не учится).
|