Files
DenozordecandClaude Opus 5.5 e3af778068 Студии из кодек-строк: codec_line_rows, доразметка, аудит дорожек
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>
2026-11-02 20:30:52 +07:00

11 KiB
Raw Permalink Blame History

Аудит дорожек в описаниях релизов (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 примеров и не учится).