A wake word you type
Letters become sounds with Lex, sounds become a detection with Spot: any word, in 7 languages, with no training and no recording.
Most wake word engines need a model per word, trained on thousands of recordings of people saying it. Here the word is text: type it, and a device listens for it, in 7 languages, without a single recording.
A word, typed
Changing a trained wake word means a new model: new recordings, a new training run, weeks. A product name, a contact or a word in another language waits as long.
With Alkove the word starts as text. Two small models do the rest: Lex turns the letters into sounds, Spot listens for those sounds.
From letters to sounds: Lex
Lex turns a written word into its likely pronunciations, each with its probability. A common word gets one clear answer; a name or an invented word gets several guesses, and the likely ones are all listened for.
A name said in two languages takes both: "Camille" in French and in English gives the pronunciations of each. Lex weighs 1.8 MB and runs on the device, so a word can be typed and compiled offline.
DocsLex
Spot hears sounds, not words
Spot knows no word at all. Every 30 ms it says how likely each of 58 sounds is in the audio. Here, the rows are the sounds of /kamij/: they light up in order when the word is said, and only in part on other words.
The model weighs 2.8 MB and listens all day on a phone or a laptop. It also says when someone is speaking.
DocsSpot
Searching for the word
The SDK searches the word's pronunciations in what Spot hears, continuously, and fires wake when one of them scores above the word's threshold. A typed word starts with a default threshold for its language, good enough to try any word at once.
On typed words in 6 languages, 80.4 % of the words said are found at one false alarm per hour, on public test sets.
DocsBenchmarks
After a pause, or anywhere
A name also comes up in conversation: "so Camille, let's go" should not wake the device. With the pause context, the default of a wake listener, the word counts only after 300 ms without speech, with a threshold of its own.
False alarms drop, and more words are found: 85.9 % at one false alarm per hour. anywhere is still there for a word mid-sentence, a command or a name in a call.
DocsContexts
Tuned to one voice
Enrolling asks the user to say the word three times. The thresholds are set from these takes and from what is heard between them, so the word fits their voice and their microphone.
Enrolling also gives a voiceprint. With onlyMyVoice, Timbre checks the voice in the word before it counts: someone else saying "Camille" does not wake the device.
DocsWake wordsTimbre
Putting it together
Each line lights its part of the scene.
const word = await Spot.compile('Camille', { lang: ['fr', 'en'] })word.toJSON() // pronunciations and thresholds: store it, ship itconst wake = await createWakeListener({ words: [word] })wake.on('wake', ({ score, context }) => listen())const { word: mine, voiceprint } = await Spot.enroll('Camille', { lang: 'fr' }).donecreateWakeListener({ words: [mine], onlyMyVoice: voiceprint })Short words false-alarm more than long ones, and English is found less often than the other languages: pick a word of two or three syllables, and enroll it when the device is personal. Every figure here comes with its protocol in the docs.