Why openWakeWord Recall Varies by Wake Word—and How to Fix “Word Picking”

August 2026 · Architecture · Custom wake-word training

You train two custom phrases with the same openWakeWord recipe. One reaches a useful score quickly; the other rarely activates, even after generating more samples. This phrase-dependent behavior is real. Understanding the frozen embedding architecture explains why adding more data or more steps does not always solve it.

Short version: openWakeWord converts audio into features with a shared, frozen speech-embedding backbone, then trains a relatively small classifier for each wake word. If a target phrase and its confusing negatives are not well separated in that fixed feature space, the classifier has a harder job. Different phrases can therefore need different parameters and negative examples.

What the openWakeWord architecture actually does

The official project describes three stages:

  1. A fixed-parameter mel-spectrogram preprocessor.
  2. A shared Google-derived feature extractor that turns audio into general-purpose speech embeddings.
  3. A small phrase classifier trained on top of the frozen feature extractor.

This design has important advantages. The expensive backbone is shared across wake words, fully synthetic positive data can work, and adding another phrase has a small runtime cost. But custom training cannot change the representation produced by the frozen backbone; it can only learn a decision boundary on top of it.

Why that can produce “word picking”

Consider two phrases. In the frozen embedding space, phrase A may form a compact cluster far from ordinary speech and similar-sounding words. Phrase B may overlap with common speech, split across pronunciations, or sit near a phonetic neighbour. The same small classifier and the same loss settings will not separate both cases equally well.

This is a technical inference from the published architecture and observed phrase-dependent training—not a claim that a frozen embedding always fails. openWakeWord's supplied English models demonstrate that the approach can work well when the phrase, data, negatives and parameters fit each other.

The maintainer confirms that parameters vary by phrase

In an openWakeWord discussion about pretrained models exceeding 90% performance, the maintainer explained that the models used a range of parameters because there was no single set that worked well across wake words. Parameters that helped one phrase could make another phrase worse. The maintainer also noted that training metrics do not always correlate cleanly with real-world performance.

A separate public issue shows the other end of the range: an automatic training run for “alice” reported about 25.7% recall, while a different training path worked better for the same contributor. One issue is not a universal benchmark, but it demonstrates why a successful notebook execution is not proof of a deployable model.

How to tell whether your phrase is being “picked against”

Before blaming the embedding, complete the audio and inference checklist. Wrong sample format, frame buffering or VAD logic can imitate low recall.

Fix 1: choose a more separable phrase

A two- or three-syllable phrase with a distinctive sound pattern is usually easier than a very short, common word. Avoid words that appear frequently in normal conversation and phrases that differ from common speech by only one sound. Adding a prefix such as “Hey” can create a longer acoustic signature, although it does not guarantee success.

Fix 2: tune the positive/negative trade-off per phrase

The maintainer recommends reducing negative-weight scale when recall is too low, and increasing generated positive samples. If false activations are the problem, increase negative weight and add adversarial negative generations. Change one variable at a time and evaluate on a fixed holdout set.

ProblemExperimentRisk to monitor
Low recallReduce negative weight; add diverse positive samplesFalse activations may increase
Many false activationsAdd phonetic hard negatives; increase negative weightRecall may decrease
Speaker-dependent recallAdd speakers, real recordings and pronunciation variantsAvoid overfitting to one user
Noise-dependent recallAdd realistic background and room responsesKeep clean examples in validation

Fix 3: train against the phrases that fool the model

Collect false activations from actual use and convert them into hard negatives. Also synthesize phonetic neighbours, partial phrases and common sentences containing similar sound sequences. Random background data reduces generic false positives; targeted negatives teach the exact boundary that the current model is missing.

Fix 4: use real-device validation

Do not choose parameters from training recall alone. Build a fixed evaluation set with unseen speakers, the final microphone, several distances and realistic background sound. Report false rejects and false activations together. A parameter change is useful only if it improves the operating point your product needs.

An alternative: learn the target representation instead of freezing it

When phrase-by-phrase tuning becomes the main cost, another approach is to train the compact keyword model for the target task instead of keeping a universal speech embedding frozen.

In 2026, we rebuilt Voicute around a self-developed training pipeline that trains the compact model for the requested language and phrase. It combines language-specific TTS voices, speaker diversity, acoustic augmentation and an optional real-recording enhancement path. The current training service supports Chinese, English, Japanese, French and German.

“More stable across languages” does not mean every phrase, microphone and room receives an identical recall score. It means the training pipeline can adapt the complete compact model to the target language and phrase instead of changing only a classifier above a fixed representation. That makes multilingual behavior and phrase-to-phrase variation more controllable.

Models are exported as standard ONNX/TFLite artifacts for local validation. ONNX targets Python, desktop, Android and Web runtimes; ESP32-S3 uses the INT8 TFLite Micro path. Downloaded models run locally without a Voicute runtime AccessKey.

Practical decision: stay with openWakeWord if phrase selection, per-word tuning and hard-negative mining produce an acceptable operating point. Use a target-trained model when the frozen-backbone workflow repeatedly rejects otherwise valid phrases or the tuning cost no longer fits the project.
Test a multilingual demo model

Primary sources