Переобучение на нескольких авторах в строке: метки PARSE_VERSION 9, новая models/best (base)
docker / build (push) Successful in 43s

Метки пересобраны новыми парсерами (collect.py build --relabel): 69 511 строк из 30 451 релиза;
после prepare_data 52 658 строк, 3 529 с несколькими авторами, 5 ручных решений применены.

Новая models/best (ruBert-base) на общем тесте 4 984 строк: joint exact 0.903 против 0.800 у
прежней, span exact 0.919 против 0.813, type macro-F1 0.976 против 0.909; строки с 2+ авторами —
span 0.815 против 0.011. Прежняя модель — models/best_backup_20261109_164800. ONNX пересобран,
паритет 100 %.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
DenozordecandClaude Opus 5.5 committed 2026-11-09 16:56:12 +07:00
1 parent 8511744d3a
commit e8035e1e9d
4 files changed
+2041 -3860

No files matched your search

+26 -20
View File
@@ -10,8 +10,9 @@ kinozal / nnm-club) модель определяет:
алиасов («HDRezka Studio» → `HDrezka`, «Ю. Сербин» → «Юрий Сербин»); алиасов («HDRezka Studio» → `HDrezka`, «Ю. Сербин» → «Юрий Сербин»);
* **18+** дорожка или нет — бинарная голова. * **18+** дорожка или нет — бинарная голова.
Обучено на датасете из 60 944 строк (71 339 размеченных строк из 30 401 релиза Обучено на датасете из 52 658 строк (69 511 размеченных строк из 30 451 релиза
`data/raw` + морфологическая аугментация). Как страницы превращаются в строки и `data/raw` + морфологическая аугментация; у строки может быть несколько авторов —
«Многоголосый (HDRezka Studio, LostFilm)» даёт обоих). Как страницы превращаются в строки и
что было исправлено в сборщике — [docs/dataset-coverage.md](docs/dataset-coverage.md). что было исправлено в сборщике — [docs/dataset-coverage.md](docs/dataset-coverage.md).
Multi-task RuBERT: сравниваются `rubert-tiny2` и `ruBert-base`, Multi-task RuBERT: сравниваются `rubert-tiny2` и `ruBert-base`,
лучшая кладётся в `models/best`. лучшая кладётся в `models/best`.
@@ -79,22 +80,27 @@ docs/ документация
## Качество ## Качество
Held-out test (6 258 строк, группировка по релизам и текстам; после полной Held-out test (4 984 строки, группировка по релизам и текстам; метки пересобраны
переиндексации `data/raw` 09.11.2026). Обе модели оценены на **одном и том же** парсерами `PARSE_VERSION` 9, строки со списком студий склеены в одну с несколькими
тесте (`python -m src.runs --dirs … --refresh`): авторами). Все модели оценены на **одном и том же** тесте:
| модель | type acc | type macro-F1 | span exact | 18+ acc | lang acc | joint exact | | модель | type acc | type macro-F1 | span exact | 18+ acc | lang acc | joint exact [95 %] | строки с 2+ авторами (438), span |
|---|---|---|---|---|---|---| |---|---|---|---|---|---|---|---|
| прежняя `models/best` (02.11) | 0.949 | 0.880 | 0.643 | 1.000 | 0.994 | 0.615 | | прежняя `models/best` (09.11, один автор на строку) | 0.981 | 0.909 | 0.813 | 1.000 | 0.998 | 0.800 [0.788–0.810] | 0.011 |
| **новая `models/best` (09.11)** | **0.976** | **0.906** | **0.674** | **1.000** | **0.995** | **0.658** | | rubert-tiny2, несколько авторов | 0.978 | 0.904 | 0.869 | 0.999 | 0.999 | 0.854 [0.843–0.863] | 0.637 |
| **ruBert-base, несколько авторов (`models/best`)** | **0.979** | **0.976** | **0.919** | **1.000** | **0.999** | **0.903** [0.895–0.911] | **0.815** |
* joint exact — строка распознана полностью (тип + автор + 18+). * joint exact — строка распознана полностью (тип + все авторы + 18+); span exact
* Абсолютный `span exact` ниже прежних 0.922 не потому, что модель стала хуже: сравнивает набор авторов строки целиком.
тест теперь включает форматы, которых раньше в датасете не было (авторы из * Новая `models/best` против прежней на тех же строках: исправлено 647, сломано 131
кодек-строк и списков, аниме-раздачи, «Язык озвучки», nnm `Аудио … (Русский, (знаковый критерий p ≈ 1e-83). Прежняя модель часть тестовых строк видела при
X)`), и в нём много одиночных имён в перечислениях. На одном и том же тесте обучении, так что сравнение в её пользу.
новая модель лучше прежней по всем головам (+2.7 п.п. type acc, +3.1 п.п. span). * Противоречивых строк (один текст — разные метки) в датасете 1.2 % вместо 20 %:
* E2E по релизам (`tests/e2e_segmenter.py`, по 400 тестовых страниц на трекер, пары исправлены парсеры студий (пол голоса, техпараметры, «т/к», «N-й канал»), а
списки студий размечаются целиком. Оставшиеся расхождения между релизами
разбираются вручную: `tools/collect.py` → «Разбор противоречий»
(`data/text_fixes.csv`).
* E2E по релизам (замер для модели от 09.11 с одним автором на строку) (`tests/e2e_segmenter.py`, по 400 тестовых страниц на трекер, пары
тип + студия, precision / recall) — новая модель на тех же страницах: тип + студия, precision / recall) — новая модель на тех же страницах:
kinozal 0.805 / 0.867, rutracker 0.771 / 0.740, nnm 0.752 / 0.693; прежняя kinozal 0.805 / 0.867, rutracker 0.771 / 0.740, nnm 0.752 / 0.693; прежняя
модель там же: 0.752 / 0.830, 0.729 / 0.700, 0.669 / 0.604. Справочно, правила: модель там же: 0.752 / 0.830, 0.729 / 0.700, 0.669 / 0.604. Справочно, правила:
@@ -102,16 +108,16 @@ Held-out test (6 258 строк, группировка по релизам и
* Сегментатор (`models/segmenter`) переобучен на расширенном наборе страниц * Сегментатор (`models/segmenter`) переобучен на расширенном наборе страниц
(`models/segmenter_v2`, line precision 0.933 / recall 0.977), но e2e новых весов (`models/segmenter_v2`, line precision 0.933 / recall 0.977), но e2e новых весов
хуже по nnm (0.610 / 0.560) — в `models/segmenter` оставлены прежние веса. хуже по nnm (0.610 / 0.560) — в `models/segmenter` оставлены прежние веса.
* `models/best-onnx` не пересобран под новую модель: `python -m src.export_onnx`. * `models/best-onnx` пересобран под новую модель: паритет с PyTorch 100 % по типу,
Паритет предыдущего экспорта — [reports/onnx_parity.md](reports/onnx_parity.md). авторам и 18+ — [reports/onnx_parity.md](reports/onnx_parity.md).
## Ограничения ## Ограничения
* Метки датасета сгенерированы регулярками (пайплайн deepseek-harness) — метрики * Метки датасета сгенерированы регулярками (пайплайн deepseek-harness) — метрики
измеряют согласование с этой разметкой; ценность модели — обобщение на новые измеряют согласование с этой разметкой; ценность модели — обобщение на новые
формулировки без сопровождения регулярок. формулировки без сопровождения регулярок.
* Датасет: 71 339 строк из 30 401 релиза (kinozal 23 969 / nnm 27 092 / * Датасет: 69 511 строк из 30 451 релиза (kinozal 23 749 / nnm 26 478 /
rutracker 20 278); после подготовки 60 944 строки. Покрытие страниц `data/raw` rutracker 19 284); после подготовки 52 658 строк (3 529 — с несколькими авторами). Покрытие страниц `data/raw`
— 85.5 % (30 260 из 35 385); оставшиеся — почти все без озвучки (русский — 85.5 % (30 260 из 35 385); оставшиеся — почти все без озвучки (русский
оригинал, «не требуется», музыка/сканы), см. [docs/dataset-coverage.md](docs/dataset-coverage.md). оригинал, «не требуется», музыка/сканы), см. [docs/dataset-coverage.md](docs/dataset-coverage.md).
* Извлечение автора уверенно работает на форматах записи, представленных в * Извлечение автора уверенно работает на форматах записи, представленных в
+1975 -3803
View File
File diff suppressed because it is too large. Load diff
+37 -35
View File
@@ -1,46 +1,54 @@
# Аудит датасета: data/labels.csv # Аудит датасета: data/labels.csv
строк в CSV: 71339 строк в CSV: 69511
строк после подготовки: 60944 (train 54686 / test 6258) строк после подготовки: 52658 (train 47674 / test 4984)
источники: {'kinozal': 15188, 'rutracker': 21303, 'nnm': 24453} источники: {'kinozal': 14015, 'rutracker': 17812, 'nnm': 20831}
уникальных нормализованных текстов: 30761 уникальных нормализованных текстов: 30041
групп (релиз ∪ одинаковый текст): 8743 групп (релиз ∪ одинаковый текст): 8749
удалено: пустой текст 0, мусорный studio 447, не-озвучка (оригинал/субтитры) 13, отказ от озвучки 184, противоречивые дубли 123 (групп-противоречий: 100), несколько дорожек в одной строке 7, лишние повторы (> 40 одинаковых) 20649 удалено: пустой текст 0, мусорный studio 359, не-озвучка (оригинал/субтитры) 13, отказ от озвучки 184, противоречивые дубли 109 (групп-противоречий: 109), несколько дорожек в одной строке 7, лишние повторы (> 40 одинаковых) 20592
спан автора найден: 50477 (82.8%), не найден: 299 несколько авторов в одной строке: склеено 5727 строк, строк с 2+ авторами 3529
аугментировано морфологических вариантов: 10513 ручные решения data/text_fixes.csv: 5 текстов, метка заменена в 409 строках, выброшено 0 строк
дорожек 18+: 1156 (из них без упоминания «18» в тексте: 27) спан автора найден: 42489 (80.7%), не найден: 272
язык размечен: 38352 из 60944; со строкой «Аудио» во входе: 30844; классы: {'RUS': 36243, 'UKR': 1978, 'ENG': 90, 'KAZ': 21, 'JPN': 20}; редкие (<20, не учатся): {'DEU': 8, 'FRA': 13, 'CHI': 3, 'BEL': 2, 'GEO': 1, 'ITA': 14, 'KOR': 1, 'LAV': 1, 'UZB': 1, 'CZE': 5, 'SPA': 7} аугментировано морфологических вариантов: 9711
дорожек 18+: 1066 (из них без упоминания «18» в тексте: 25)
язык размечен: 34038 из 52658; со строкой «Аудио» во входе: 26700; классы: {'RUS': 32125, 'UKR': 1848, 'ENG': 65}; редкие (<20, не учатся): {'DEU': 8, 'FRA': 13, 'CHI': 3, 'KAZ': 14, 'BEL': 4, 'GEO': 2, 'ITA': 5, 'KOR': 1, 'JPN': 14, 'LAV': 1, 'UZB': 1, 'CZE': 1, 'SPA': 10}
## Распределение translation_type ## Распределение translation_type
- проф. многоголосый: 15272 - проф. многоголосый: 13827
- проф. дубляж: 14484 - проф. дубляж: 13226
- авт. одноголосый: 7096 - авт. одноголосый: 6463
- неизвестно: 6806 - неизвестно: 4918
- одноголосый: 3717 - проф. двухголосый: 3079
- многоголосый: 3468 - одноголосый: 3016
- проф. двухголосый: 3467 - многоголосый: 2446
- люб. многоголосый: 2171 - люб. многоголосый: 2039
- двухголосый: 1557 - двухголосый: 923
- люб. двухголосый: 1001 - люб. двухголосый: 921
- люб. одноголосый: 966 - люб. одноголосый: 914
- люб. дубляж: 520 - люб. дубляж: 492
- проф. одноголосый: 410 - проф. одноголосый: 387
- авт. двухголосый: 6 - авт. двухголосый: 5
- авт. многоголосый: 3 - авт. многоголосый: 2
## Примеры противоречий (один текст — разные типы) ## Примеры противоречий (один текст — разные типы)
- rutracker:6111749 «(св-дубль - вгтрк) [vhs] [rus ac3 2ch 192kbps]» -> ['неизвестно', 'проф. дубляж'] - rutracker:6111749 «(св-дубль - вгтрк) [vhs] [rus ac3 2ch 192kbps]» -> ['неизвестно', 'проф. дубляж']
- nnm:nnm-1009875 «русский dts 5.1, 1509 kbps, 48.0 khz (двуголосый) п. гланц и» -> ['двухголосый', 'проф. двухголосый'] - nnm:nnm-1014436 «ac-3, 48.0 khz, 2 ch, 192 kbps, cbr (russian) - двухголосый » -> ['двухголосый', 'проф. двухголосый']
- nnm:nnm-1028054 «ac-3, 48.0 khz, 6 ch, 448 kbps (russian) - многоголосый [rus» -> ['многоголосый', 'проф. многоголосый']
- nnm:nnm-1058230 «ac3, 2 канала, 384 кбит/сек - русский (многоголосый закадров» -> ['многоголосый', 'проф. многоголосый'] - nnm:nnm-1058230 «ac3, 2 канала, 384 кбит/сек - русский (многоголосый закадров» -> ['многоголосый', 'проф. многоголосый']
- nnm:nnm-1104137 «ac-3, 48.0 khz, 1 ch, 192 kbps, cbr (русский, проф. многогол» -> ['многоголосый', 'проф. многоголосый']
- nnm:nnm-1104203 «lpcm, 1 ch, 1152 kbps, 48,0 khz - русский (многоголосый ''ка» -> ['многоголосый', 'проф. многоголосый'] - nnm:nnm-1104203 «lpcm, 1 ch, 1152 kbps, 48,0 khz - русский (многоголосый ''ка» -> ['многоголосый', 'проф. многоголосый']
- nnm:nnm-1116916 «ac3, 2 ch, 192 kbps, 48,0 khz (русский - двухголосый ''видео» -> ['двухголосый', 'проф. двухголосый'] - nnm:nnm-1116916 «ac3, 2 ch, 192 kbps, 48,0 khz (русский - двухголосый ''видео» -> ['двухголосый', 'проф. двухголосый']
- nnm:nnm-1126664 «1 ac3, 2 ch, 192 kbps - русский, многоголосый (св-дубль) [ru» -> ['многоголосый', 'проф. многоголосый'] - nnm:nnm-1126664 «1 ac3, 2 ch, 192 kbps - русский, многоголосый (св-дубль) [ru» -> ['многоголосый', 'проф. многоголосый']
- nnm:nnm-1141333 «ac3, 6 ch, 448 kbps (русский - многоголосый ''d2lab'') [rus » -> ['многоголосый', 'проф. многоголосый'] - nnm:nnm-1141333 «ac3, 6 ch, 448 kbps (русский - многоголосый ''d2lab'') [rus » -> ['многоголосый', 'проф. многоголосый']
- nnm:nnm-1151582 «русский, aac, 2 ch, 192 kbps, 48,0 khz (многоголосый r5) med» -> ['многоголосый', 'проф. многоголосый']
- nnm:nnm-1154096 «ac3, 2 ch, 192 kbps (русский - двухголосый ''нтв+'') [rus ac» -> ['двухголосый', 'проф. двухголосый'] - nnm:nnm-1154096 «ac3, 2 ch, 192 kbps (русский - двухголосый ''нтв+'') [rus ac» -> ['двухголосый', 'проф. двухголосый']
- nnm:1176495 «ac3, 2 ch, 192 kbps (русский - многоголосый ''первый канал''» -> ['многоголосый', 'проф. многоголосый']
## Спан не найден (примеры) ## Спан не найден (примеры)
- [rutracker] studio=«студия Кадр , по заказу РТР, 1995 г» text=«Профессиональный (дублированный): студия "Кадр" (при уч. студии "Нота"» - [rutracker] studio=«студия Кадр , по заказу РТР, 1995 г» text=«Профессиональный (дублированный): студия "Кадр" (при уч. студии "Нота"»
- [rutracker] studio=«от : : gamekoff» text=«от [Fansub AOS]: Переводчик: gamekoff, Anku, Cracknight, Makentosh, sh»
- [nnm] studio=«SovetRomantica 2) HorribleSubs» text=«1) GerKo, Ryuji, Tousaka Jun (01-06 + SP); SovetRomantica (07-11) 2) H»
- [nnm] studio=«Истари Комикс + Anilibria» text=«Funimation; Истари Комикс (OVA) + Anilibria (TV)»
- [nnm] studio=«FRT Sora & KaijuKeizer Media Info на первую серию» text=«Shift (TV) | FRT Sora & KaijuKeizer (TV + OVA) Media Info на первую се»
- [nnm] studio=«YakuSub Studio + SovetRomantica» text=«Wakanim (TV 01-12 + OVA); YakuSub Studio (TV 01-10) + SovetRomantica (»
- [nnm] studio=«Zottig & Daidzobu» text=«Zottig (Teisoku) & Daidzobu (Aragami Fansubs)»
- [rutracker] studio=«Ancord & Noir Ancord» text=«Ancord & Noir (01-35) Ancord (36+)» - [rutracker] studio=«Ancord & Noir Ancord» text=«Ancord & Noir (01-35) Ancord (36+)»
- [rutracker] studio=«Правильный от студии ПЭ http» text=«Любительский (Гоблинa, "Правильный от студии "Полный ПЭ" http://www.op» - [rutracker] studio=«Правильный от студии ПЭ http» text=«Любительский (Гоблинa, "Правильный от студии "Полный ПЭ" http://www.op»
- [rutracker] studio=«Тот самый с кассет» text=«Профессиональный (полное дублирование) + Aвторский перевод А.Михалёва » - [rutracker] studio=«Тот самый с кассет» text=«Профессиональный (полное дублирование) + Aвторский перевод А.Михалёва »
@@ -48,10 +56,4 @@
- [rutracker] studio=«но его довольно часто встречал» text=«Любительская (одноголосая) - озвучника не помню как зовут, но его озву» - [rutracker] studio=«но его довольно часто встречал» text=«Любительская (одноголосая) - озвучника не помню как зовут, но его озву»
- [rutracker] studio=«absurd95 & Eladiel» text=«absurd95 (м.) & Eladiel (ж.)» - [rutracker] studio=«absurd95 & Eladiel» text=«absurd95 (м.) & Eladiel (ж.)»
- [rutracker] studio=«Доп.инфо о : Инна Королева и Петр Гланц» text=«Профессиональный (двухголосый закадровый) Доп.инфо о переводе: Инна Ко» - [rutracker] studio=«Доп.инфо о : Инна Королева и Петр Гланц» text=«Профессиональный (двухголосый закадровый) Доп.инфо о переводе: Инна Ко»
- [rutracker] studio=«Persona99 ^_^» text=«Persona99 (одноголосое закадровое женское) ^_^» - [rutracker] studio=«Persona99 ^_^» text=«Persona99 (одноголосое закадровое женское) ^_^»
- [rutracker] studio=«Доп.инфо о НТВ+» text=«Профессиональный (двухголосый закадровый) Доп.инфо о переводе НТВ+»
- [rutracker] studio=«Доп.инфо о НТВ+» text=«Профессиональный (многоголосый закадровый) Доп.инфо о переводе НТВ+»
- [rutracker] studio=«эп. 1-9 , эп. 10-13» text=«эп. 1-9 [YakuSub Studio], эп. 10-13 [Advantage]»
- [rutracker] studio=«Кубик в кубе на ознакомительный день и преображение дома. На Банан не требуется» text=«Профессиональный (двухголосый, закадровый) Кубик в кубе на ознакомител»
- [rutracker] studio=«версия 2015» text=«Одноголосый закадровый Александр Герусов, версия озвучки 2015»
- [rutracker] studio=«Доп.инфо о НТВ+» text=«Профессиональный (многоголосый закадровый) Доп.инфо о переводе НТВ+»
+3 -2
View File
@@ -1,9 +1,10 @@
# ONNX parity (test split) # ONNX parity (test split)
- строк: 645 - модель: models/best / model.onnx (711.2 MB)
- строк: 2000
- совпадение класса типа: 1.0000 - совпадение класса типа: 1.0000
- совпадение текста спана: 1.0000 - совпадение текста спана: 1.0000
- совпадение флага 18+: 1.0000 - совпадение флага 18+: 1.0000
- макс. расхождение type_logits: 4.29e-06 - макс. расхождение type_logits: 2.57e-05
Вердикт: **OK** (≥99% все критерии) Вердикт: **OK** (≥99% все критерии)