Why openWakeWord Fails on French, German, Japanese & Chinese Wake Words
openWakeWord is English-only at the architecture level. It's not a missing config flag — the frozen backbone never learned non-English phonemes. Here's why, and what works instead.
The symptom: scores collapse to ~0.001
Community tests on non-English wake words tell the same story. A Korean wake word returned prediction scores of 0.0008–0.0015 — a range where the model effectively says "no word here" (issue #136). The same collapse shows up for German, French, Japanese, and Chinese, because they all share one cause.
The cause: a frozen, English-trained embedding
openWakeWord's backbone is a frozen speech_embedding trained on English speaker-verification data. When you train a custom wake word, only the small classification head updates — the embedding that turns audio into features is permanently fixed at what it learned from English speakers.
That means German umlauts, French nasals, Japanese mora timing, and Chinese tones were never encoded into the feature space. The head can only work with whatever the English embedding already separates — and for non-English phonemes, that's close to nothing.
Per-language reality
- German. Umlauts and consonant clusters fall outside the English feature space — see why English tools fail on German.
- French. Nasal vowels and liaison patterns aren't captured by an English embedding.
- Japanese. Mora-timed phonetics and pitch accent land on the same dead zone.
- Chinese. Tones — which are phonemic — aren't represented at all in an English speaker-embedding.
What works: train from scratch in the target language
The fix isn't more tuning; it's a different training path. When you train a model from scratch on the target language's phonemes, the filters learn what that language's words actually sound like. Voicute does exactly this: type a French, German, or Japanese word, and the pipeline synthesizes training audio in that language and trains a from-scratch TCN.
| Language | openWakeWord | Voicute (from-scratch TCN) |
|---|---|---|
| English | Works (with tuning) | Stable 90%+ |
| German | ~0.001 scores | Stable 90%+ |
| French | ~0.001 scores | Stable 90%+ |
| Japanese | ~0.001 scores | Stable 90%+ |
| Chinese | ~0.001 scores | Stable 90%+ |
FAQ
Why does openWakeWord fail on French wake words?
Its backbone is a frozen embedding trained on English speaker-verification data. French phonemes were never part of its objective, so the model can't reliably separate French words — prediction scores collapse toward zero.
Can openWakeWord handle German, Japanese, or Chinese wake words?
Not reliably. Community reports show non-English words returning prediction scores of 0.0008–0.0015 — effectively unusable — because the frozen embedding never learned those phonemes.
How do I get a French, German, or Japanese wake word with 90%+ recall?
Train from scratch in the target language so the filters learn that language's phonemes directly. Voicute does this from a typed word in 10–20 minutes, holding 90%+ recall across English, German, French, Japanese, and Chinese.
Train a non-English wake word →