Skip to content

docs(asr): document that a v3 language hint is script-scoped - #1092

Merged
Alex-Wengg merged 1 commit into
mainfrom
fix/1063-language-hint
Nov 1, 2026
Merged

Alex-Wengg merged 1 commit into
mainfrom
fix/1063-language-hint

Conversation

@Alex-Wengg

Copy link
Copy Markdown
Member

Refs #1063.

Why is this change needed?

A Parakeet v3 language hint only selects a script. Every Latin-script Language resolves to .latin, so .spanish, .english and the rest filter the same tokens. On FLEURS es_419 (dev 408 + test 100 clips), .spanish, .english and no hint gave byte-identical output on all 508 clips; on 100 clips each of it/pt/de, the native hint matched no hint every time. Only .french differs, because it also runs the English blocklist from #630.

The issue's failure reproduces on read speech: in 6 of 508 Spanish clips v3 emits English function words, and in 2 it renders most of the sentence in English ("…estos plans cayeron in disuso … when most de 80 000 combatientes … and formed the front…").

What changes?

The docs and help text now say what the hint does, so callers don't read it as a per-language constraint:

  • the Language doc comment
  • the CLI --language help
  • a "Scope: script, not language" section in TokenLanguageFilter.md

They point to the two decoders in FluidAudio that are conditioned on a language: Canary (CanaryManager(models:source:target:)) and Cohere Transcribe (language:).

FLEURS es_419 WER dev / test Clips with English function words
v3 (any hint, or none) 4.86% / 4.03% 6
Canary-1b-v2, source/target .spanish 4.50% / 4.94% 0

Not changed: a Spanish English-blocklist

I tried a Spanish blocklist: the #630 list minus pieces that start a word in the FLEURS es train text, plus the/ The.

  • It moved dev WER from 4.86% to 4.70%, and no clip got worse.
  • The two translated clips stayed mostly wrong: 51 → 46 and 35 → 26 word errors, against Canary's 0 and 1.
  • Its largest gain comes from blocking The, which also hits English titles in Spanish text ("The Guardian", in 11 of 2,796 train sentences).
  • Without that piece, it does nothing.
  • The fix(asr): reduce English drift on French recordings via token blocklist #630 list as-is turns "hermana" into "armana" and "Washington" into "Witthington".

Validating a list like this needs spontaneous Spanish and code-switched audio first (#840).

🤖 Generated with Claude Code

Every Latin-script Language resolves to .latin, so .spanish and .english filter the same tokens and decode the same audio identically; only .french adds the English blocklist. Say so on Language, in the CLI help and in TokenLanguageFilter.md, with FLEURS es measurements, and point to Canary and Cohere Transcribe for a decode conditioned on one language.
@github-actions

github-actions Bot commented Nov 1, 2026

Copy link
Copy Markdown

Parakeet EOU Benchmark Results ✅

Status: Benchmark passed
Chunk Size: 320ms
Files Tested: 100/100

Performance Metrics

Metric Value Description
WER (Avg) 7.03% Average Word Error Rate
WER (Med) 4.17% Median Word Error Rate
RTFx 10.79x Real-time factor (higher = faster)
Total Audio 470.6s Total audio duration processed
Total Time 44.0s Total processing time

Streaming Metrics

Metric Value Description
Avg Chunk Time 0.044s Average chunk processing time
Max Chunk Time 0.088s Maximum chunk processing time
EOU Detections 0 Total End-of-Utterance detections

Test runtime: 1m0s • 11/01/2026, 01:54 PM EST

RTFx = Real-Time Factor (higher is better) • Processing includes: Model inference, audio preprocessing, state management, and file I/O

@github-actions

github-actions Bot commented Nov 1, 2026

Copy link
Copy Markdown

ASR Benchmark Results ✅

Status: All benchmarks passed

Parakeet v3 (multilingual)

Dataset WER Avg WER Med RTFx Status
test-clean 0.57% 0.00% 5.76x ✅
test-other 1.19% 0.00% 3.30x ✅

Parakeet v2 (English-optimized)

Dataset WER Avg WER Med RTFx Status
test-clean 0.80% 0.00% 5.79x ✅
test-other 1.00% 0.00% 3.77x ✅

Streaming (v3)

Metric Value Description
WER 0.00% Word Error Rate in streaming mode
RTFx 0.62x Streaming real-time factor
Avg Chunk Time 1.446s Average time to process each chunk
Max Chunk Time 1.598s Maximum chunk processing time
First Token 1.737s Latency to first transcription token
Total Chunks 31 Number of chunks processed

Streaming (v2)

Metric Value Description
WER 0.00% Word Error Rate in streaming mode
RTFx 0.66x Streaming real-time factor
Avg Chunk Time 1.356s Average time to process each chunk
Max Chunk Time 1.525s Maximum chunk processing time
First Token 1.351s Latency to first transcription token
Total Chunks 31 Number of chunks processed

Streaming tests use 5 files with 0.5s chunks to simulate real-time audio streaming

25 files per dataset • Test runtime: 6m26s • 11/01/2026, 02:19 PM EST

RTFx = Real-Time Factor (higher is better) • Calculated as: Total audio duration ÷ Total processing time
Processing time includes: Model inference on Apple Neural Engine, audio preprocessing, state resets between files, token-to-text conversion, and file I/O
Example: RTFx of 2.0x means 10 seconds of audio processed in 5 seconds (2x faster than real-time)

Expected RTFx Performance on Physical M1 Hardware:

• M1 Mac: ~28x (clean), ~25x (other)
• CI shows ~0.5-3x due to virtualization limitations

Testing methodology follows HuggingFace Open ASR Leaderboard

@github-actions

github-actions Bot commented Nov 1, 2026

Copy link
Copy Markdown

Supertonic3 Smoke Test ✅

Check Result
Build ✅
Model download (incl. VectorEstimatorVariants/ int4 buckets) ✅
Model load ✅
Synthesis pipeline (--ve-variant int4) ✅
Output WAV ✅ (368.5 KB)

Runtime: 0m26s

Note: CI VMs lack a physical Neural Engine; the ANE-bucketed VectorEstimator falls back to CPU here. This validates download + variant resolution + synthesis, not ANE residency/perf.

@github-actions

github-actions Bot commented Nov 1, 2026

Copy link
Copy Markdown

Speaker Diarization Benchmark Results

Speaker Diarization Performance

Evaluating "who spoke when" detection accuracy

Metric Value Target Status Description
DER 15.1% <30% ✅ Diarization Error Rate (lower is better)
JER 24.9% <25% ✅ Jaccard Error Rate
RTFx 16.58x >1.0x ✅ Real-Time Factor (higher is faster)

Diarization Pipeline Timing Breakdown

Time spent in each stage of speaker diarization

Stage Time (s) % Description
Model Download 14.434 22.8 Fetching diarization models
Model Compile 6.186 9.8 CoreML compilation
Audio Load 0.061 0.1 Loading audio file
Segmentation 18.980 30.0 Detecting speech regions
Embedding 31.634 50.0 Extracting speaker voices
Clustering 12.654 20.0 Grouping same speakers
Total 63.298 100 Full pipeline

Speaker Diarization Research Comparison

Research baselines typically achieve 18-30% DER on standard datasets

Method DER Notes
FluidAudio 15.1% On-device CoreML
Research baseline 18-30% Standard dataset performance

Note: RTFx shown above is from GitHub Actions runner. On Apple Silicon with ANE:

  • M2 MacBook Air (2022): Runs at 150 RTFx real-time
  • Performance scales with Apple Neural Engine capabilities

🎯 Speaker Diarization Test • AMI Corpus ES2004a • 1049.0s meeting audio • 63.3s diarization time • Test runtime: 4m 26s • 11/01/2026, 02:46 PM EST

@Alex-Wengg
Alex-Wengg merged commit 7395412 into main Nov 1, 2026
8 of 15 checks passed
@Alex-Wengg
Alex-Wengg deleted the fix/1063-language-hint branch November 1, 2026 19:52
@github-actions

github-actions Bot commented Nov 1, 2026

Copy link
Copy Markdown

Sortformer High-Latency Benchmark Results

ES2004a Performance (30.4s latency config)

Metric Value Target Status
DER 30.3% <35% ✅
Miss Rate 28.2% - -
False Alarm 0.9% - -
Speaker Error 1.2% - -
RTFx 15.6x >1.0x ✅
Speakers 4/4 - -

Sortformer High-Latency • ES2004a • Runtime: 4m 0s • 2026-11-01T21:03:06.759Z

@github-actions

github-actions Bot commented Nov 1, 2026

Copy link
Copy Markdown

PocketTTS Smoke Test ✅

Check Result
Build ✅
Model download ✅
Model load ✅
Synthesis pipeline ✅
Output WAV ✅ (157.5 KB)

Runtime: 0m19s

Note: PocketTTS uses CoreML MLState (macOS 15) KV cache + Mimi streaming state. CI VM lacks physical GPU — audio quality and performance may differ from Apple Silicon.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant