From 02d96e611dcfb9d12d87125e3b7a03fdb12912e1 Mon Sep 17 00:00:00 2001 From: claude Date: Sun, 9 Aug 2026 15:42:09 +0400 Subject: [PATCH] Default the keyword threshold to 0.999, from the measurement (V-487) Over 65.1 minutes of held-out Common Voice the built binary woke three times at 0.99 and once at 0.999. The recall difference was one render out of 126. One render is worth two thirds of the false wakes. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_013ptwopxyo3Z2kwFckHkLvN --- cmd/mavwaked/wakeword.go | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/cmd/mavwaked/wakeword.go b/cmd/mavwaked/wakeword.go index 5f83902..f97e3ee 100644 --- a/cmd/mavwaked/wakeword.go +++ b/cmd/mavwaked/wakeword.go @@ -21,11 +21,15 @@ import ( "sync" ) -// defaultWakeThreshold — score above which the keyword was said. Picked from -// the false-accept rate on held-out Russian speech, not from accuracy: a miss -// costs him a repeat, a false accept costs a turn nobody asked for. See -// docs/evals for the wakes-per-hour this buys. -const defaultWakeThreshold = 0.99 +// defaultWakeThreshold — score above which the keyword was said. +// +// Picked from the false-accept rate on held-out Russian speech, not from +// accuracy: a miss costs him a repeat, a false accept costs a turn nobody +// asked for. Over 65 minutes of Common Voice, 0.99 woke her three times and +// 0.999 once, and the difference in recall was one render out of 126. So the +// default is the strict one. `docs/evals/2026-08-09-wake-word.md` has both +// tables. +const defaultWakeThreshold = 0.999 // wakeWord is the streaming state around wakeModels. It is fed the same // capture frames the VAD sees and answers whether the keyword has just been