Сегментатор: scene-имя релиза не может быть дорожкой
docker / build (push) Successful in 1m49s

Kinozal 2160145: после переобучения модель выбирала первую строку вкладки «Релиз»
(«Memoirs.of.a.Geisha.2005.2160p.UHD.Blu-ray.Remux…-CiNEPHiLES», оценка 0.96), и
имя релиза попадало в ответ как «студия». Прежние веса строку не выбирали.

- html_extract.RE_SCENE: без пробелов и ≥ 4 точек — дорожкой не бывает;
  LineSegmenter.select_lines отбрасывает такие строки при любой оценке модели.
- build_examples: scene-имена — трудные негативы, берутся все (раньше прореживались
  до 15 %); эффект — при следующем переобучении.
- На реальных данных страницы (вкладки Техданные/Интересно/Награды/Релиз):
  1 дорожка «проф. дубляж», без студии. Тесты: 288 ok.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
This commit is contained in:
DenozordecandClaude Sonnet 5.5 committed 2026-11-08 02:57:43 +07:00
1 parent e6705c2b7b
commit 729eeac045
3 files changed
+18 -5

No files matched your search

+4 -4
View File
@@ -34,7 +34,7 @@ import numpy as np
import torch
from transformers import AutoModelForSequenceClassification, AutoTokenizer
from .html_extract import read_input
from .html_extract import RE_SCENE, read_input
BACKBONE = "cointegrated/rubert-tiny2"
MAX_LEN = 160
@@ -189,8 +189,8 @@ def build_examples(split: str, rng: random.Random, synth_per_page: int = 6) -> l
continue # неразмеченная кодек-строка: ни позитив, ни негатив
prev = lines[i - 1] if i else ""
nxt = lines[i + 1] if i + 1 < len(lines) else ""
if not y and not HINT.search(line) and rng.random() > 0.15:
continue # простые негативы прореживаем, трудные (с намёками) берём все
if not y and not HINT.search(line) and not RE_SCENE.match(line) and rng.random() > 0.15:
continue # простые негативы прореживаем, трудные (с намёками, scene-имена релизов) берём все
ex.append((*make_input(prev, line, nxt), y))
if not want_test:
negs = [l for l, y in zip(lines, labels) if y == 0]
@@ -231,7 +231,7 @@ class LineSegmenter:
if not lines:
return []
probs = self.score(lines)
return [l for l, p in zip(lines, probs) if p >= threshold]
return [l for l, p in zip(lines, probs) if p >= threshold and not RE_SCENE.match(l)]
# ---------------------------------------------------------------- обучение