Awtomatikong salin · Orihinal sa Ingles
Pagtukoy sa mga salitang pampagana / keyword
Ang SpeechWakeWord Ang module ay nagpapatakbo ng on-device keyword spotter: nagrerehistro ka ng isang listahan ng mga parirala, itinutulak ang audio clusters in, at tumatanggap ng mga pag-aanalisa. Batay sa dumadaloy na Ziptainter transducer (3.49M params, Apache-2.0), na tinipon sa CoreML na may INT8 palettization.
Ang shipd checkpoint ay ang gigaspeech KWS pinong-tune.Ang mga non-English keywords ay nangangailangan ng hiwalay na icefall small-tune at re-export.
Arkitektura
| Bagsag | Mga Detalye |
|---|---|
| funk | Kaldi-compatible (25 ms / 10 ms, Povey window, 80 ml bins, high_freq=-400, walang CMVN) |
| Mang - aakit | 6-stage causal Zipformer2 (128-dim), 45 mel frames sa → 8 frames out (40 ms / frame) — 3.3 MB INT8 |
| Decoder | Walang - estadong transducer, BPE-500 vocab, kontekstong sukat 2 — 525 KB FP16 |
| Sumali | Linear + tanh output projection — 160 KB INT8 |
| Decode | Modified beam search (beam=4) sa isang Aho-Corasick ContextGraph ng mga user keywords |
Nakapaloob na sukat sa disk: EX4 MB kabuuan (encoder.mlmodelc + decoder.mlmodelc + joiner.mlmodelc). Runtime memory: i6 MB kabilang ang mga cache ng estadong reciever.
Pag - aasikaso
| Masalimuot | Halaga | Mga Noble |
|---|---|---|
| RTF (CPU + Neural Engine) | 0.04 | 26× real-time sa M-series |
| Gunitain (12 mga susing salita) | 88% | LibriSpeech test-malinis, 158 positibong mga kasabihan |
| Huwad na mga Positibo / Sabi | 0.27 | 60 negatibong mga kasabihan |
| CoreML INT8 vs PyTorch FP32 | 99% | Kasunduan sa Pagmimisyon |
Naka-sign na mga default: acThreshold=0.15, contextScore=0.5, numTrailingBlanks=1. Ang Per-keyword ay nananaig.
Paggamit ng CLI
Ang plain-phrase form (PEGIGO BPE — ay gumaganang mahusay para sa mga karaniwang salita):
speech wake recording.wav --keywords "hey soniqo"
speech wake recording.wav --keywords "hey soniqo:0.15:0.5" "cancel"
Pre-tokenized form (sherpa-onnx style — inirerekomenda kapag alam mo ang eksaktong pagkabulok ng modelo ay sinanay):
# Format: "phrase|piece1 piece2 ...:threshold:boost"
speech wake recording.wav \
--keywords "LIGHT UP|▁ L IGHT ▁UP:0.25:2.0"
# Multiple keywords + JSON output
speech wake recording.wav \
--keywords "LIGHT UP|▁ L IGHT ▁UP:0.25:2.0" \
"LOVELY CHILD|▁LOVE LY ▁CHI L D:0.25:2.0" \
--json
O isang talaksang susi, isang ipinasok sa bawat linya (# para sa mga komento):
speech wake recording.wav --keywords-file keywords.txt
Swift API
import SpeechWakeWord
// Load the model with your keyword list.
let detector = try await WakeWordDetector.fromPretrained(
keywords: [
KeywordSpec(phrase: "hey soniqo", acThreshold: 0.15, boost: 0.5),
KeywordSpec(phrase: "cancel")
]
)
// Streaming: push chunks, consume detections as they fire.
let session = try detector.createSession()
for chunk in micAudioChunks { // Float32 @ 16 kHz
for detection in try session.pushAudio(chunk) {
print("[\(detection.time(frameShiftSeconds: 0.04))s] \(detection.phrase)")
}
}
// Batch: single shot over a full buffer.
let detections = try detector.detect(audio: samples, sampleRate: 16000)
keywordspec
| Larangan | Kahulugan |
|---|---|
phrase | Papakitang parirala, e.g. "hey soniqo". Ginagamit din bilang pinagmumulan ng sakim na BPE STORY kapag nil ang tokens. |
acThreshold | Magtakda ng akustikong probabilidad na kailangan sa dobleng haba. 0 → Gumamit ng naka-ayos na default (0.15). |
boost | Ang Per-token na konteksto ay nagpapalakas. ang mga positibong pagpapahalaga ay gumagawa sa parirala na mas madaling mag-udyok. 0 → Gumamit ng naka-ayos na default (0.5). |
tokens | Ang optional experience BPE na talaan ng piraso. Kapag hindi-nil, tinitingnan ng detector ang bawat piraso sa tokens.txt at nilalampasan ang sakim na BPE regulator. |
tokens Ang bokabularyo ng icefall KWS ay Itaas na BPE. Ang sakim na pagkukuwenta ng isang parirala ay maaaring pumili ng isang naiibang BPE flag mula sa isa na sinanay na maglabas ng modelo — "LIGHT UP" Mga sakim-encode to ▁LI GHT ▁UP ngunit ang pagsasanay ay naglalaho ▁ L IGHT ▁UP. Kapag ang pag-aalsa sa TTS-synthessed o malinis na pagbasa ng pananalita ay nawawala sa mga halatang posporo, subukan ang sherpa-onnx-style pre-tokenized form.
Modelong mga Pagpapababa ng Pabigat
| Huwaran | Mga Param | Laki | HuggingFace |
|---|---|---|---|
| KWS-Zipformer-3M | 3.49M | °4 MB | Aufklarer/KWS-Zipformer-3M-CoreML-INT8 |
Pagsasama ng mga tubo
Inilalantad ng module ang isang WakeWordProvider protocol na salamin StreamingVADProvider, kaya't ang isang voice pipeline ay maaaring pumarada sa aksesyon sa VAD, shoat-word, o pareho. WakeWordStreamingAdapter Ibalot ang isang kargadong detector + isang sesyon sa isang magagamit na bagay na tagapaglaan.
let adapter = try WakeWordStreamingAdapter(detector: detector)
// pipeline.configure(wakeWord: adapter)
Pinagmumulan
- Mga Pinagmulan/SpeechWake na Palabas — Swift module
- Docs/models/kws-zipformer.md — mga nota sa arkitektura
- docs/inference/wake-word.md — Di - maipaliwanag na mga tubo
- Itaas: k2-fsa/icefall KWS resipi / pkufool/keyword-spotting-models