Files
grabber-ai/docs/dataset.md
T
DenozordecandClaude Sonnet 5.5 05537ac9e9
docker / build (push) Successful in 1m40s
Датасет и обучение: класс «люб. дубляж», раскладка многотиповых строк, язык из «Аудио», строки из «Аудио», потолок повторов, веса классов
- harvest_core: дубляж — тип, а не часть имени студии; split_multi_rows; audio_only_rows; kinozal сопоставляет все аудиодорожки
- prepare_data: --max-dup, отсев остатков многотиповых строк
- train: веса классов (корень из обратной частоты, потолок 4), --no-class-weights
- исправлены регулярки с \b, записанные как символ BS (predict.py, audio18.py)
- PARSE_VERSION 3: кэш разбора сбрасывается
- docs/dataset.md, docs/api-reference.md обновлены

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-29 18:13:07 +07:00

10 KiB
Raw Blame History

Датасет

Откуда берётся

data/labels.csv — снимок датасета, собранного пайплайном deepseek-harness/default-workspace/dataset.py: системный Chrome по CDP обходит релизы трекеров, из страницы извлекается вкладка описания (kinozal), пост (rutracker, nnm), регулярки разбирают строки дорожек, а имена авторов канонизируются словарём алиасов. Метки автоматически сгенерированы регулярками — модель учится воспроизводить эту разметку и обобщать её на новые формулировки.

Размер (на момент последней сборки): ~41 тыс. строк из ~28 тыс. релизов, 3 источника (rutracker, nnm, kinozal); HTML-дамп страниц — data/raw (~32 тыс. файлов, ≈2.6 ГБ, в git не хранится), разобранные тексты — data/pages. Точные числа показывает «Статистика датасета» в tools/collect.py (пункт 3) и отчёт reports/data_audit.md после prepare_data. Ранние цифры этого документа (3286 строк) относились к первому снимку. К строкам при подготовке добавляются аугментированные морфологические варианты («многоголосое», «дублированное» и т.п.). Файлы *_entries.csv / *_releases.csv — те же данные в нарезке по источникам и по релизам; модель используется только labels.csv.

Колонки labels.csv

Колонка Смысл Использование моделью
source, release_id трекер и id релиза группировка сплитов
raw строка дорожки целиком (с префиксом «Перевод:»/«Аудио N:») вход (после снятия префикса)
translation_type тип озвучки метка 1
studio автор («(не указана)» если нет) метка 2 (спан в тексте)
age_18, note флаг/пометка 18+ метка 3
role_raw скобочная часть / конкретный тип из перечисления вход для nnm tech-строк
остальные (ru_title, codec, …) контекст релиза не используются

Форматы входа по источникам

  • rutracker: raw = тело после «Перевод N:» («Профессиональный (двухголосый закадровый) tycoon»); несколько дорожек уже разнесены по строкам.
  • kinozal: raw = строка целиком с префиксом («Перевод: Дублированный | HDRezka Studio»); префикс снимается при подготовке.
  • nnm: два вида строк — «Аудио N: Opus, 6 ch, 221 Kbps | Русский AVO (Дмитрий Пучков)» (автор в скобках) и «Перевод: Одноголосый, многоголосый закадровый» (одна строка на несколько дорожек; при подготовке вместо общей raw берётся role_raw конкретной дорожки, чтобы одинаковый текст не получал разные метки).

Семантика translation_type (15 классов после пересборки; 14 в ранних моделях)

Составные метки «кто делал × сколько голосов». Набор классов не зашит в код: prepare_data берёт его из данных (label_maps.json), поэтому модель, обученная до пересборки, знает 14 классов, а после — ещё и люб. дубляж.

  • префикс: проф. (профессиональная), люб. (любительская), авт. (авторская), без префикса — в тексте не указано;
  • вид: дубляж/дублированный, многоголосый, двухголосый, одноголосый (обычно закадровые), неизвестно.

Все «*неизвестно»-варианты объединены в неизвестно; типы «оригинал» и «субтитры» (1–2 строки-проскока генератора) удалены.

Что изменено в разметке (парсеры tools/harvest/harvest_core.py, PARSE_VERSION = 3)

Проблема в старых метках Исправление
Любительский дубляж («Любительский (дублированный) Red Head Sound», «псевдодублированный») размечался как проф. дубляж (644 из 720 строк) Новый класс люб. дубляж
Дубляж по имени студии: «многоголосый … Дубляжная», «Продубляж» получали тип «дубляж» «дубляж» считается типом, только если это отдельное слово или «дублир…»
Несколько дорожек в одной строке с одной меткой («Профессиональный (двухголосый закадровый), авторский (одноголосый закадровый)»; 7.3% строк) split_multi_rows: строка раскладывается на дорожки теми же правилами, что и сервис (src/html_extract._split_entries); «Многоголосый, профессиональный - LostFilm» остаётся одной дорожкой. Остатки старых данных prepare_data отбрасывает (счётчик в аудите)
Язык почти не размечался (122 строки UKR, 47 ENG): kinozal сопоставлял «Перевод» только с русскими аудиодорожками, а в строках |Дубляж, Le Doyen| студия читалась как одно имя Сопоставление со всеми аудиодорожками; язык берётся из строки «Аудио»; src/trackinfo.parse_audio_line делит |Тип, Студия|
Дорожки, названные только в строках «Аудио» (украинский дубляж и т.п.) терялись audio_only_rows: строки с блоком |…|, студией и определимым типом (оригинал, комментарии, источники вроде «Blu-ray CEE» не берутся)
Одни и те же короткие строки доминировали («Перевод: Дублированный» — 2727 копий) prepare_data --max-dup (по умолчанию 40 копий одного текста и типа)
Дисбаланс классов Веса классов в потерях типа: корень из обратной частоты, потолок 4 (--no-class-weights отключает; значение записывается в run.json)

Для применения к уже собранным данным нужна переиндексация с пересчётом меток (python tools/collect.py → пункт 2 → «Переиндексировать data/raw … y»): старые строки labels.csv заменяются, копия прежнего файла сохраняется как data/labels.bak_<время>.csv.

Аудит (reports/data_audit.md) и что с находками сделано

Находка Обработка
Из 3286 строк уникальных текстов ~2000, 377+ строк повторяются в разных релизах Сплиты группируются не только по релизу, но и по тексту — одинаковые строки не попадают одновременно в train и test
26 «мусорных» studio («лицензия R5», «+ вставки», «x4», суффиксы «ненормативная лексика») Считаются «автора нет»; суффиксы дополнительно чистятся в словаре алиасов
Слитые дорожки (одна строка = несколько типов) nnm решается через role_raw; оставшихся противоречий — 0
Спан автора не найден в тексте 11 строк: автор в метке есть, но в тексте написан иначе; BIO-разметка для них пустая
18+ 156 строк (в 1 строке флаг есть только в note, в тексте не виден — недообучаемая)

Словарь алиасов (src/studio_norm.py)

Порт STUDIO_ALIASES генератора датасета: «hdrezka studio»→HDrezka, «read head sound»→Red Head Sound, «гаврилов»→Андрей Гаврилов, инициалы «ю. сербин»→Юрий Сербин и т.д. Поиск спана автора в тексте пробует по порядку: точное вхождение → алиасы → фамилия/инициалы → гибкий шаблон «слова через произвольные кавычки/разделители» (ловит «Студия «Кравец», LostFilm» и «SDI Media | TV 1000»).