
Bei der Arbeit mit Sprache stellen sich immer einige sehr "einfache" Fragen, für deren Lösung es nicht viele bequeme, offene und einfache Werkzeuge gibt: Erkennung des Vorhandenseins einer Stimme (oder Musik), Erkennung des Vorhandenseins von Zahlen und Klassifizierung von Sprachen .
Um das Problem der Spracherkennung (Voice Activity Detector, VAD) zu lösen, gibt es ein ziemlich beliebtes Tool von Google - webRTC VAD . Es ist ressourcenschonend und kompakt, aber sein Hauptnachteil ist die Instabilität gegenüber Rauschen, eine große Anzahl von Fehlalarmen und die Unmöglichkeit der Feinabstimmung. Es ist klar, dass wenn wir das Problem nicht in Spracherkennung, sondern in Stilleerkennung umformulieren (Stille ist das Fehlen von Stimme und Rauschen), es auf sehr triviale Weise gelöst wird (z. B. Energieschwelle), jedoch mit den gleichen Nachteilen und Einschränkungen. Das Unangenehmste ist, dass solche Entscheidungen oft fragil sind und einige Hardcode-Schwellenwerte nicht auf andere Domänen übertragen werden.
STT ( PyTorch ONNX), , , , VAD , MIT. .
"VAD"?
- VAD — , ;
- Number detector — , ;
- Language classifier — ;
- 4 (, , , ), VAD ( — - , , VAD !);
"" :
- 4 ;
- VAD WebRTC ;
- ;
- , 1 ;
- edge ;
- (PyTorch, ONNX);
- WebRTC , ;
- PyTorch (JIT), ONNX;
- ;
- ;
- (- , , STT);
- edge ;
- ONNX ;
- VAD 16 kHz, 8 kHz;
colab . , :
- PyTorch ONNX;
- — VAD — , / ;
- — . VAD ;
- , ( , 1 , - );
, VAD :
import torch
torch.set_num_threads(1)
model, utils = torch.hub.load(repo_or_dir='snakers4/silero-vad',
model='silero_vad',
force_reload=True)
(get_speech_ts,
_, read_audio,
_, _, _) = utils
files_dir = torch.hub.get_dir() + '/snakers4_silero-vad_master/files'
wav = read_audio(f'{files_dir}/en.wav')
speech_timestamps = get_speech_ts(wav, model,
num_steps=4)
print(speech_timestamps)
VAD
, VAD. .
1 AMD Ryzen Threadripper 3960X. :
torch.set_num_threads(1) # pytorch
ort_session.intra_op_num_threads = 1 # onnx
ort_session.inter_op_num_threads = 1 # onnx
, :
- num_steps — "";
- number of audio streams — ;
- , num_steps * number of audio streams;
:
| Batch size | Pytorch latency, ms | Onnx latency, ms |
|---|---|---|
| 2 | 9 | 2 |
| 4 | 11 | 4 |
| 8 | 14 | 7 |
| 16 | 19 | 12 |
| 40 | 36 | 29 |
| 80 | 64 | 55 |
| 120 | 96 | 85 |
| 200 | 157 | 137 |
, 1 :
| Batch size | num_steps | Pytorch model RTS | Onnx model RTS |
|---|---|---|---|
| 40 | 4 | 68 | 86 |
| 40 | 8 | 34 | 43 |
| 80 | 4 | 78 | 91 |
| 80 | 8 | 39 | 45 |
| 120 | 4 | 78 | 88 |
| 120 | 8 | 39 | 44 |
| 200 | 4 | 80 | 91 |
| 200 | 8 | 40 | 46 |
, , VAD . WebRT, 0 1?
WebRTC 0 1. - 30 , 250 8 . , 0 1 .
:
