Сегментация: фикс резки по запятой, refine_span; датасет 6864 строк, переобучение
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
This commit is contained in:
1 parent
6be369c415
commit
bc9ff36e61
17 files changed
+9037
-272
No files matched your search
+3
-1
@@ -38,7 +38,9 @@ RE_TYPE_HINT = re.compile(
|
||||
r"|любител|\bAVO\b|\bDVO\b|\bMVO\b|\bDUB\b|\bVO\b|ДБ|ПМ|ПД|АП|ЛМ|ЛД|ЛО)")
|
||||
|
||||
# корневые слова типов — для разбиения перечислений через запятую
|
||||
RE_TYPE_ROOT = re.compile(r"(?i)(дубл|многоголос|двухголос|одноголос|авторск)")
|
||||
# корни «голосности»: «Авторский, одноголосый» — одна дорожка (авторск — лишь
|
||||
# уточнение), поэтому по запятым режем только перечисления голосностей
|
||||
RE_TYPE_ROOT = re.compile(r"(?i)(дубл|многоголос|двухголос|одноголос)")
|
||||
|
||||
# разделители нескольких дорожек в одной строке (перед словом типа озвучки)
|
||||
RE_SEP = re.compile(
|
||||
|
||||
+23
-1
@@ -35,6 +35,27 @@ from .studio_norm import canonical
|
||||
from .train import MAX_LEN, decode_span
|
||||
|
||||
|
||||
# мусор, который модель иногда принимает за автора: раскладка каналов, кодеки
|
||||
RE_NOT_AUTHOR = re.compile(
|
||||
r"(?i)^[\s,/:+.\d]*(?:[LRC]|Ls|Rs|LFE|l|r|Front|Side|ch)?(?:[\s,/:+.\d]*(?:[LRC]|Ls|Rs|LFE|l|r|Front|Side|ch))*[\s,/:+.\d]*$"
|
||||
r"|dolby|digital|audio|kbps|khz|AC-?3|DTS|AAC|Opus")
|
||||
|
||||
|
||||
def refine_span(text: str, span: tuple[int, int] | None) -> tuple[int, int] | None:
|
||||
"""Постобработка спана автора: до границ слов; мусор и 1 символ -> None."""
|
||||
if span is None:
|
||||
return None
|
||||
a, z = span
|
||||
while a > 0 and text[a - 1].isalnum() and text[a].isalnum():
|
||||
a -= 1
|
||||
while z < len(text) and text[z].isalnum() and text[z - 1].isalnum():
|
||||
z += 1
|
||||
piece = text[a:z].strip()
|
||||
if len(piece) < 2 or RE_NOT_AUTHOR.search(piece):
|
||||
return None
|
||||
return a, z
|
||||
|
||||
|
||||
class DubPredictor:
|
||||
"""Загруженная модель для предсказания типа озвучки и автора."""
|
||||
|
||||
@@ -66,7 +87,8 @@ class DubPredictor:
|
||||
for i, text in enumerate(texts):
|
||||
tid = int(type_prob[i].argmax())
|
||||
aid = int(age_prob[i].argmax())
|
||||
span = decode_span(bio_pred[i], offsets[i], enc["attention_mask"][i].tolist())
|
||||
span = refine_span(text, decode_span(
|
||||
bio_pred[i], offsets[i], enc["attention_mask"][i].tolist()))
|
||||
span_text = text[span[0]:span[1]].strip() if span else None
|
||||
span_conf = None
|
||||
if span is not None:
|
||||
|
||||
Reference in new issue
Block a user