Skip to content

feat(audio,#19692): phase 2 -- garde d'attaque ASR par chunk (onset-drop CV3 mesure, porte #17586 non conforme) #19739

Description

@jsboige

Part of #19692

Constat

La phase 1 du routage narrateur (PR #19699) est livrée et mesurée, mais elle ne passe pas la porte #17586 : WER moyen 0,235 (seuil 0,15) et 24 spans d'omission ≥ 3 mots / 145 mots (seuil 0). La mesure est publiée dans le corps de la PR, section « Run complet mesuré ».

Les trois causes racines pipeline sont fermées et leur effet est mesuré (instrument corpus_damage.py, plancher 40 car/s, même organe des deux côtés) : narrateurs sous le plancher 20/270 → 3/270. Les 3 résiduels sont ASR-propres (parole rapide, pas du dégénéré).

Le reliquat est intrinsèque au moteur, et il est prouvé

Le résidu restant est un onset-drop de CosyVoice3 : la parole démarre au milieu du texte fourni, la première proposition n'est jamais prononcée. Ce qui a été établi firsthand (détail et chiffres dans le corps de #19699) :

  • le texte d'entrée est propre et complet (journal) ; l'ASR horodaté mot montre la parole qui démarre à t=0,0 au milieu du texte ;
  • sur la clause isolée n° 2 le rendu est parfait, sur la n° 1 il bafouille son attaque puis répète — donc c'est l'attaque qui est loupée, pas la clause ;
  • le défaut est graine-dépendant (graines 4243-4245 disent l'attaque) ;
  • les bandes caractères/seconde se recouvrent intégralement entre rendus propres et rendus omettants — conséquence dure : la durée ne peut jamais détecter une attaque loupée, seul l'ASR le peut. Le plancher de durée reste un garde grossier, pas l'organe de fidélité.

Ce que la correction demande

Une garde d'attaque par chunk : ASR (turbo) sur chaque chunk rendu, détection de l'attaque manquante, et re-roll ciblé du chunk fautif. Le re-roll est la voie parce que le défaut est graine-dépendant : un re-roll informé par le contenu récupère l'attaque qu'une graine a loupée. C'est une extension de l'organe p7 déjà livré (contrôle d'omission au vote 2/3 ASR), appliquée par chunk et en ligne plutôt qu'en vérification globale après coup.

Décision annexe à trancher au même endroit : le choix du moteur pour le re-rendu du corpus (Zonos a été retenu côté pipeline le 08/10). La garde d'attaque et le choix moteur se mesurent sur le même banc.

Portée

Cette issue ne rejoue pas la phase 1 et ne rouvre pas ses correctifs : elle traite le reliquat que la phase 1 nomme au lieu de le masquer. Référence de mesure : PR #19699, sections « Avant / après » et « p7 — WER et contrôle d'omission ».

Activity

  1. jsboige commented on Oct 8, 2026

    @jsboige
    OwnerAuthor

    [CLAIMED] lane myia-po-2027:CoursIA-2 -- paths: v4/prosody_lab/corpus_damage_chunk.py, v4/prosody_lab/tests/test_onset_chunk.py, docs/genai/audio-onset-chunk-detection.md

    Scope CPU : instrument onset-drop par chunk (ASR turbo + classification onset_drop present/absent + verdict par chunk), tests sur les 270 segments deja rendus (artefacts phase 1 MERGEDe PR #19699), documentation. Pas de re-roll GPU -- ce serait une PR GPU ulterieure (lane po-2023 ou po-2024 RTX 3090).

    Reconnaissance : phase 1 #19692 livree par lane po-2023 (PR #19699 MERGEDe, organe p7_valid.py avec vote 2/3 ASR). Cette PR etend p7 par chunk, ne le remplace pas.

    Cadrage coordinateur : DM c.1467 ai-01 positionne #19739 dans la file audio post-#19820 (banc bake_bank). Le DM est silencieux sur le owner de la phase 2 -- je prends par defaut (lane libre, pas de claim actif, narrow-cache narrow).

  2. added a commit that references this issue on Oct 8, 2026
  3. added a commit that references this issue on Oct 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions