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 <[email protected]>
2026-11-02 20:30:52 +07:00

127 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Аудит дорожек в описаниях релизов (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 примеров и не учится).