Maskinoversættelse · Engelsk original
Registrering af aktiveringsord / nøgleord
Den SpeechWakeWord modul kører en on- enhed søgeord spotter: du registrerer en liste over sætninger, skubbe lyd stykker i, og modtage detektioner. Baseret på icepalls streaming Zipformer transducer (3.49M params, Apache-2.0), kompileret til CoreML med INT8 palettization.
Den leverede checkpoint er gigaspeech KWS fine- tune. Ikke-engelske søgeord har brug for en separat icefall fine- tun og re- export.
Arkitektur
| Fase | Detaljer |
|---|---|
| fbank | kaldi- kompatibel (25 ms / 10 MS, Povey vindue, 80 mel bins, high_freq=-400, ingen CMVN) |
| Encoder | 6- Sceneårsagssammenhæng Zipformer2 (128- dim), 45 mel rammer i → 8 Rammer ud (40 ms / frame) - 3.3 MB INT8 |
| AfkoderStencils | Statless transducer, BPE-500 vocab, kontekststørrelse 2 - 525 KB FP16 |
| Joiner Formand | Linear + tanh output projection - 160 KB INT8 |
| DecodeCity in Italy | Modificeret beam søgning (beam = 4) over en Aho- Corasick ContextGraph af brugernøgleord |
Kompileret størrelse på disk: ~ 4 MB I alt (encoder.mlmodelc + decoder.mlmodelc + joiner.mlmodelc). Runtime hukommelse: ~ 6 MB herunder encoder tilstand cache.
Præstation
| Metric | Værdi | Bemærkninger |
|---|---|---|
| RTF (CPU + Neural Engine) | 0.04 | 26 × realtid på M- serie |
| Genindspilning (12 søgeord) | 88% | LibriSpeech test- clean, 158 positive udtalelser |
| Falsk positives / yutterance | 0.27 | 60 negative udtalelser |
| CoreML INT8 vs PyTorch FP32 | 99% | Emissionsaftale |
Tunerede standardværdier: acThreshold=0.15, contextScore=0.5, numTrailingBlanks=1Per- søgeord tilsidesætter understøttet.
CLI-brug
Plain-sætning form (grådige BPE - fungerer godt for almindelige ord):
speech wake recording.wav --keywords "hey soniqo"
speech wake recording.wav --keywords "hey soniqo:0.15:0.5" "cancel"
Præ- toxized form (sherpa- onnx stil - anbefales, når du kender den nøjagtige nedbrydning modellen blev trænet på):
# 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
Eller en nøgleordfil, en indgang pr. linje (# for kommentarer):
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
| Felt | Betydning |
|---|---|
phrase | Vis sætning, f.eks. "hey soniqo". Anvendes også som kilde til grådige BPE kodning, når tokens er 0. |
acThreshold | Den gennemsnitlige akustiske sandsynlighed, der kræves over det matchede span. 0 → brug tunet standard (0.15). |
boost | Per- token kontekst boost. Positive værdier gør sætningen lettere at udløse. 0 → brug tunet standard (0.5). |
tokens | Valgfri eksplicit BPE stykke liste. Når non-nul, detektoren ser hvert stykke op i modellens tokens.txt og omgår den grådige BPE-indkoder. |
tokensIcefal KWS ordforråd er uppercase BPE. Grådig tilpasning af en sætning kan vælge en anden BPE nedbrydning fra den, modellen blev trænet til at udsende - "LIGHT UP" greedy- koder til ▁LI GHT ▁UP men træningen dekomponering er ▁ L IGHT ▁UP. Når detektering på TTS- syntetiseret eller ren læse tale savner indlysende kampe, prøv sherpa- onnx- stil pre- pre- toxized form.
Model Downloads
| Model | Paramboler | Størrelse | HuggingFace |
|---|---|---|---|
| KWS-Zipformer-3M | 3.49M | ~ 4 MB | aufklarer / KWS-Zipformer-3M-CoreML-INT8 |
Integrering af rørledninger
Modulet udsætter en WakeWordProvider protokol, der spejle StreamingVADProviderEn stemmerørledning kan aktivere VAD, wake- word eller begge dele. WakeWordStreamingAdapter wraps en indlæst detektor + en enkelt session i en genanvendelig udbyder objekt.
let adapter = try WakeWordStreamingAdapter(detector: detector)
// pipeline.configure(wakeWord: adapter)
Kilde
- Kilder / SpeechWakeWord - Swift modul
- docs / models / kws- zipformer.md - arkitektnoter
- docs / inferens / wakeword.md - rørledning til indkøring
- Upstream: k2-fsa / icepall KWS opskrift / pkudup / keyword- spotting- modeller