Repository navigation
fix(asr/tdtJa): long-form Japanese defaults to no mel context and probes only long seam gaps - #1098
Conversation
…bes only long seam gaps (#1031) On 500 JSUT basic5000 clips joined into 31 min of real read speech, tdtJa's default mel-context path lost text at seams that the no-mel path keeps, and the short-gap seam repair spliced re-heard neighbour text back in ("モデルモデル") because an unspaced vocabulary has no word boundaries for its rules. CER 10.37% -> 8.49% (joined) and 9.56% -> 8.19% (silence-trimmed). v3 output is unchanged.
Sortformer High-Latency Benchmark ResultsES2004a Performance (30.4s latency config)
Sortformer High-Latency • ES2004a • Runtime: 3m 46s • 2026-11-01T21:42:55.938Z |
ASR Benchmark Results ✅Status: All benchmarks passed Parakeet v3 (multilingual)
Parakeet v2 (English-optimized)
Streaming (v3)
Streaming (v2)
Streaming tests use 5 files with 0.5s chunks to simulate real-time audio streaming 25 files per dataset • Test runtime: 6m32s • 11/01/2026, 04:43 PM EST RTFx = Real-Time Factor (higher is better) • Calculated as: Total audio duration ÷ Total processing time Expected RTFx Performance on Physical M1 Hardware:• M1 Mac: ~28x (clean), ~25x (other) Testing methodology follows HuggingFace Open ASR Leaderboard |
Closes #1031.
Why is this change needed?
#1032 fixed the issue's first finding, the splice guard. The second finding was a question: should tdtJa resolve
melChunkContextto off? It should. Today's short-gap seam repair (#1061) also adds a tdtJa-specific problem.I measured it on real read speech: 500 JSUT basic5000 clips (BASIC5000_4501–5000, 16 kHz), joined into 31 min with their transcripts as the reference. A second copy trims each clip's edge silence so more seams land in speech. CER is NFKC, without punctuation or spaces; "drops" are runs of 5 or more deleted reference characters.
--no-mel-context--no-mel-context --seam-gap-min 1.5Before #1061, the no-mel path already scored 8.49% / 8.17%. #1061's 0.5 s gap floor added 19 insertions on the joined file, and every one is re-heard neighbour text ("モデルモデル", "ころはころは", "ノーベルノーベル"). Its short-gap rules (skip gaps inside a word, complete a cut word, drop re-heard bordering words) need word boundaries, and tdtJa's unspaced vocabulary has none: with the splice guard off, every piece counts as a word.
What changes?
resolvedMelChunkContext(for:)resolves tofalsefor.tdtJa. An explicitmelChunkContext:still wins.ChunkProcessor.seamGapMinGapFrames: when there's no word guard (spliceSafeTokenIds == nil), the repair pass probes only gaps of 1.5 s or more. Vocabularies with a guard keep the configured floor.v3 output is byte-identical on three Earnings-22 calls (4469088, 4474506, 4483937): text and word timings. The tdtJa default is also faster here: 3.6 s against 6.9 s for the 31 min file. 190 chunk, seam and config tests pass, including the new ones.
🤖 Generated with Claude Code