Derek Amuna

Griot Edge: Smaller Speech Models, Better Questions

#AI#Speech Recognition#Ghana#Conformer#Open Source

60% fewer parameters, selectable streaming lookahead, and an Akan result that changed what I want to work on next.

Could we take what we learned from Griot Nano 1, use about 60% fewer parameters, and transcribe speech as it arrives?

Griot Edge is our answer so far: a 60.9-million-parameter Conformer CTC model for Akan, Dagbani, Dagaare, Ewe, Fante, Ghanaian English, and Ga. For streaming, it lets applications choose how much future audio to wait for, using the same checkpoint whether they need a quicker response or more context.

Three results shaped this release:

  • A smaller streaming model is viable. Edge has 60.9M parameters against Nano 1’s roughly 153M, with selectable lookahead.
  • Decoding matters. On Edge’s internal test, KenLM brings default-tier WER from 34.94% to 26.93%.
  • The aggregate hides a large Akan gap. Human-transcribed sources score 19.15% WER against machine-transcript sources score 49.98%. That deserves investigation before we decide what to train next.

What did we gain over Nano?

The size reduction is clear. The accuracy comparison needs more care.

ModelParametersTest utterancesDecodingCER ↓WER ↓
Griot Nano 1~153M99,547Greedy13.66%29.19%
Griot Edge60.9M109,008Greedy15.04%34.94%
Griot Edge60.9M109,008KenLM beam14.59%26.93%

These are published results on different test populations. Edge’s beam row also adds a language model. The lower WER in that row does not establish that Edge is more accurate than Nano. We need both models on the same held-out audio, with the same normalization and decoding, to answer that properly.

What Edge delivers today is a smaller model with a streaming context control. Nano’s model card and Edge’s evaluation notes give the score definitions and caveats.

One checkpoint, several amounts of context

Edge uses 17 Conformer blocks, a 384-dimensional representation, six attention heads, and a convolutional frontend that reduces the time resolution by four. Its 151-character vocabulary retains case, punctuation, and orthographic vowels.

The useful control is lookahead_frames: how many future encoder steps attention may see. Set it to 0 for causal attention or 13 for the release default. More lookahead allows more context, but also asks an application to wait for it.

A correction to the original post: the released runtime has a 10 ms feature hop and 4× subsampling, so an encoder step represents 40 ms, not 25 ms. Thirteen steps correspond to 520 ms of attention right context. That is not total user-visible latency: buffering, feature extraction, inference, and decoding also take time.

On the existing 2,000-utterance sweep, extra context helped only a little:

Future encoder framesAttention right contextCER ↓
00 ms17.35%
13520 ms17.17%
261,040 ms17.18%
512,040 ms17.55%
Full contextEntire input21.75%

This subset is separate from the full test results below. The wider settings were undertrained; giving this checkpoint more future audio did not reliably improve it. We use the default or causal tier as the main reference points, with 6- and 26-frame settings available. The 51-frame and full-context modes are outside the validated release tiers.

Training it to handle the choice

We built Edge in three stages:

StageAudio processedPurpose
Pretraining44,000 hoursLearn multilingual speech representations from the raw MMS stream
Post-training12,000 hoursMix in Ghanaian speech and no-speech examples
Release fine-tuning10,000 hoursTrain with intermediate CTC and variable lookahead

These are audio-hours processed, not a claim of 66,000 unique recorded hours.

The final stage adds CTC supervision at two intermediate encoder layers and samples lookahead from 0, 6, 13, 26, 51, full, favouring short settings. We ramped in the mix over 2,000 audio-hours alongside learning-rate warmup. The auxiliary heads supply training signals inside the encoder and are removed for inference.

The intent was to make one set of weights useful across context budgets. This run does not isolate the contribution of intermediate CTC from variable lookahead; that would need an ablation.

What KenLM adds

On the 109,008-utterance internal test set, the decoder makes a larger WER difference than moving from causal to the default lookahead.

WER on the internal test: causal greedy 37.39%, causal KenLM 28.86%, default greedy 34.94%, default KenLM 26.93%. Lower is better.

Same Edge test population. Default = 13 future encoder frames. The chart starts at zero; labels show absolute WER.

At the default tier, KenLM reduces WER by 8.01 percentage points, from 34.94% to 26.93%. With KenLM fixed, moving from causal to the default changes WER from 28.86% to 26.93%, a 1.93-point reduction. CER at those two beam settings is 15.81% and 14.59% respectively.

Scores normalize references and predictions using NFC, lowercase, and tone-mark removal. The beam uses the bundled multilingual 3-gram KenLM, width 25, alpha 0.5, and beta 1.0. Release metrics record all four configurations.

The LM also has limits. On the broader Ghana benchmark—28,990 utterances across 45 ISO codes—beam decoding improves overall WER from 67.22% to 59.29%, while CER worsens from 30.79% to 34.91%. Many evaluated languages are outside training coverage. Reporting both measures makes that trade-off visible; choosing only the better metric would hide it.

The Akan gap worth investigating

This is the result I most want to follow up:

Akan source-group comparison: human-transcribed sources have 8.17% CER and 19.15% WER; machine-transcript sources have 28.29% CER and 49.98% WER.

Default lookahead with KenLM. Human-transcribed: 19,791 utterances. Machine-transcript: 3,581 utterances. Both axes start at zero and use the same scale.

The machine-transcript group’s WER is 30.83 percentage points higher. That gives the earlier phrase “substantially worse” a concrete meaning.

It does not tell us how much of the gap comes from label errors. The groups also differ in source, domain, and potentially recording conditions. Nor does it tell us how much retraining on corrected labels would recover. These are reported source-group results, not a controlled experiment.

The next useful step is to listen to samples from both groups, check the references, and classify the failures: transcription mistakes, spelling conventions, segmentation, or genuinely difficult audio. Then we can correct a measured subset and test whether the changes help. Counts, CER/WER, and source notes are available with the release.

From checkpoint to something you can run

Edge now includes file inference, a batch engine, and an optional persistent HTTP server. Long recordings are split into 30-second windows with 5-second overlap. Chunks from one or many inputs share acoustic batches; overlapping output frames are trimmed before decoding each recording.

The server waits up to 20 ms to collect requests when a worker becomes available, or starts sooner at eight requests. It processes a partial group when the timer expires. This collection delay is separate from the model’s lookahead and from queueing behind ongoing work.

We also tried native Flashlight decoding. In a matched capacity test of 128 thirty-second inputs—64 minutes of audio, batch 128—it reduced total compute time:

BF16 acoustic hardware / CPU decoder hostpyctcdecodeFlashlightSpeedup
Apple M5 Pro GPU / M5 Pro CPU, 6 Torch threads10.524 s5.056 s2.08×
NVIDIA L4 / Modal host CPU, 4 allocated cores26.127 s13.321 s1.96×

These are repeated synthetic English inputs, median of three warm runs, including preprocessing and decoding but excluding loading and file/HTTP I/O. They measure capacity, not accuracy. Flashlight uses a closed lexicon and changes transcripts; the accuracy scores above do not validate that faster preset. Host CPUs also differ, so compare decoders within each row.

Batch 8 was a better starting point for throughput in our sweeps than simply using the largest batch that fit. The full CPU/GPU/L4 sweeps and Flashlight report include the details, including batch-dependent CUDA BF16 transcripts.

Try it, then tell us where it fails

Start with the model card and quick start. The repository includes weights, the matching KenLM, batch inference, Docker setup, and source attributions. The release license is CC BY-NC-SA 4.0.