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 <noreply@anthropic.com>
11 KiB
Аудит дорожек в описаниях релизов (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.
- Метки из кодек-строк (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 100 студий nnm+rt): одна дорожка на студию с общим типом; «Дублированный (A, B), Многоголосый (C, D)» — тип у каждой группы свой.
- Доразметка ~980 релизов без меток с типом озвучки (nnm 417, rt 562): найти, почему сборщик их пропустил (вероятно, формат «Перевод 1:» в nnm и «Озвучка: … от X» в аниме), поправить парсер, прогнать relabel.
- Форматы кодек-строк в правилах: расширить
RE_AUDIO_TRACK/RE_AUDIO_PREFIXна «Аудио pic RUS», «Аудио N Rus:», «Аудио #N Русский:», «Звук N:», «• №N:», «Russian (…)» без префикса; одиночное «Аудио:» с типом/студией;RE_CODEC_TRACK— студия из словаря без тип-слова; кириллические «АVO/МVO». Тесты на каждый формат. Даёт метки сегментатору (переобучение сегментатора — только если e2e лучше текущих весов) и покрытие фолбэка. - Чистка мусорных студий — после решений ниже; правила в prepare_data (мусор) и в сборщике (язык-префикс, тип-слова, каналы).
Решения за вами (не исправления)
- Лицензия / Blu-ray CEE / iTunes / Netflix (~1 070 строк): студия или источник дорожки? Сейчас модель учится выдавать их как студию.
- «X по заказу Y» (~320): хранить целиком, только X, или X + заказчик отдельным полем?
- «Русский, - AlexFilm» (85): срезать язык-префикс — почти наверняка да, но это меняет метки.
- Неру дорожки (казахский Qazaqstan, «+ Английский + Комментарии», ~36): выкидывать из меток или учить lang-голову (KAZ сейчас < 20 примеров и не учится).