Speech Recognition (ASR) — audio siqnalı mətn ardıcıllığına çevirən avtomatik nitq tanıma texnologiyası. Müasir sistemlər deep learning-dən istifadə edir: enkoder (Conformer, Whisper, BiLSTM + CTC) audio spektroqrammasını gizli vəziyyətlər ardıcıllığına çevirir, dekoder (CTC greedy decoding, Beam Search, Transformer decoder) mətn formalaşdırır. Mobil tətbiqlərdə Speech Recognition səs daxil etmə, səs köməkçiləri, zənglərin avtomatik transkripsiyası və motor məhdudiyyəti olan şəxslər üçün accessibility funksiyaları üçün istifadə olunur. Google Cloud Speech-to-Text, 2025 məlumatlarına görə, bulud ASR-si SNR > 15 dB olduqda ingilis dilində 7% WER və rus dilində 12% WER əldə edir.
Əsas məqamlar
Automatic Speech Recognition (ASR) — pipeline: audio → əvvəlcədən emal (16 kHz mono, səs-küyün azaldılması, VAD — nitq aktivliyi) → xüsusiyyət çıxarılması (MFCC, LogMel FilterBank) → akustik model (neyron şəbəkə: CTC / RNNT / Transducer) → dil modeli (LM) → dekodlaşdırma (mətn). Müasir end-to-end modellər (Whisper, Google USM, Conformer CTC) akustik və dil modellərini bir Transformer-də birləşdirir, bu da pipeline-nı sadələşdirir və dəqiqliyi artırır.
Mobil cihazlar üçün ASR arxitekturaları: CTC (Connectionist Temporal Classification) — sürətli, audio və mətnin uyğullaşdırılmasını tələb etmir, Vosk və Android native-də istifadə olunur. RNNT (Recurrent Neural Network Transducer) — axın ASR, aşağı gecikmə (Google USM). Conformer — CNN + Transformer hibridi, ən yaxşı dəqiqlik, lakin daha ağır: Whisper Medium (769M parametr) — 30–60x latency. On-device üçün CTC üstünlük təşkil edir: Vosk CTC modelləri 50–100 MB yer tutur, latency 0.3–0.8x real vaxt.
ASR metrikaları: WER (Word Error Rate) — etalonla müqayisədə əvəz edilmiş, silinmiş, əlavə edilmiş sözlərin faizi. Google Cloud ASR — 7% WER (EN), 12% (RU). Vosk — 13% (RU), 9% (EN). Whisper Small — 6% (EN), 10% (RU). CER (Character Error Rate) — oxşar, simvol səviyyəsində. Real-Time Factor (RTF) — emal vaxtı / audio müddəti. RTF < 1 — real vaxtdan sürətli. RTF < 0.3 — real vaxt ASR-si. Səs daxil etmə üçün RTF < 1, transkripsiya üçün RTF < 3 tələb olunur.
| ASR Həlli | WER (EN) | WER (RU) | RTF | On-device |
|---|---|---|---|---|
| Google Cloud ASR | 7% | 12% | 0.3 | Xeyr |
| Android SpeechRecognizer | 8% | 13% | 0.5–1 | Bəli (qarışıq) |
| SFSpeechRecognizer | 7% | 12% | 0.3–0.8 | Bəli (iOS 17-dən) |
| Vosk (vosk-model-small-ru) | 9% | 13% | 0.3–0.8 | Bəli |
| Whisper Small | 6% | 10% | 2–6 | Bəli |
VAD (Voice Activity Detection) — nitqi səssizlikdən və səs-küydən ayıran nitq aktivliyinin aşkar edilməsi. WebRTC VAD — mobil ASR üçün standart: 30 ms çərçivə, üç rejim (0, 1, 2 — konservativdən aqressivə qədər). VAD RTF-ni 1.5–3x azaldır (nitq olmayan hissələri buraxır). Silero VAD (MIT) — neyron şəbəkəyə əsaslanan VAD, WebRTC-dən daha dəqiq (94% vs 85% ROC AUC), 5–10 ms latency, TFLite və Core ML. İstehsal ASR üçün VAD → ASR kaskadından istifadə edin: bu, yalanış aşkarlamaları azaldır və emalı sürətləndirir.
Android SpeechRecognizer — Android SDK-da nitq tanıma üçün qurulmuş sinif. İki rejimdə işləyir: bulud (Google server) — yüksək dəqiqlik, internet tələb edir; on-device (Android 10+-dan) — GBoard qurulmuş ASR modeli, 20+ dil, WER 15–18%. SpeechRecognizer danışma zamanı aralıq nəticələr (partial results) və son mətn qaytarır. RecognizerIntent.EXTRA_LANGUAGE vasitəsilə 60+ dili dəstəkləyir. Səs daxil etmə üçün tövsiyə olunur — sürətli inteqrasiya, pulsuz.
SpeechRecognizer API: SpeechRecognizer.createSpeechRecognizer(context) vasitəsilə yaradılır. RecognizerIntent.ACTION_RECOGNIZE_SPEECH ilə Intent, extra: LANGUAGE_MODEL_FREE_FORM (sərbəst mətn) və ya LANGUAGE_MODEL_WEB_SEARCH (axtarış sorğuları). RecognitionListener vasitəsilə nəticə: onReadyForSpeech → onBeginningOfSpeech → onRmsChanged → onPartialResults → onResults. Davamlı tanıma („həmişə dinlə“ rejimi) üçün onResults-dan sonra recognizer-i yenidən başladın. Batareyaya qənaət etmək üçün onDeviceOnly = true istifadə edin.
// Android SpeechRecognizer səs tanıma
val recognizer = SpeechRecognizer.createSpeechRecognizer(context)
recognizer.setRecognitionListener(object : RecognitionListener {
override fun onResults(results: Bundle) {
val text = results
.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION)
?.firstOrNull() ?: ""
showResult(text)
}
override fun onPartialResults(partialResults: Bundle) {
val partial = partialResults
.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION)
?.firstOrNull() ?: ""
showPartial(partial)
}
})
val intent = Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH).apply {
putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM)
putExtra(RecognizerIntent.EXTRA_LANGUAGE, "ru-RU")
}
recognizer.startListening(intent)
Android-də On-device vs Cloud: on-device internet olmadan işləyir (Android 10+, Pixel 4+, Samsung S20+). Bulud daha dəqiqdir (Google Neural Network ASM Model), lakin gecikmə daha yüksəkdir (şəbəkə ilə 300–800 ms). Səs daxil etmə üçün hibrid istifadə edin: şəbəkə olmadıqda on-device üzərinə düşmə ilə bulud. Android SpeechRecognizer RecognizerIntent.EXTRA_PREFER_OFFLINE-dən asılı olaraq rejimi avtomatik seçir. Maksimum məxfilik üçün onDeviceOnly = true təyin edin (lakin rus dili üçün dəqiqlik 15–18% WER).
SFSpeechRecognizer — Apple-ın iOS, macOS, watchOS-da nitq tanıma üçün çərçivəsi. iOS 10-dan mövcuddur. On-device rejimi — iOS 17-dən (yerli model, internet olmadan). 60+ dili dəstəkləyir. Dəqiqlik: WER 7–12% (on-device — 12–15%). SFSpeechRecognizer Speech.framework vasitəsilə mövcuddur — əlavə SDK tələb etmir. İcazə sorğusu SFSpeechRecognizer.requestAuthorization vasitəsilə.
SFSpeechRecognizer API: SFSpeechRecognizer(locale: Locale(identifier: "ru_RU")) → SFSpeechAudioBufferRecognitionRequest (canlı audio) və ya SFSpeechURLRecognitionRequest (audio fayl). SFSpeechRecognitionTaskDelegate ilə recognitionTask(with:delegate:) vasitəsilə streaming (didHypothesizeTranscription — aralıq, didFinishRecognition — son). On-device rejimi: request.requiresOnDeviceRecognition = true. iOS 15+ üçün: request.shouldReportPartialResults = true (aşağı gecikmə ilə axın nəticəsi).
let recognizer = SFSpeechRecognizer(locale: Locale(identifier: "ru_RU"))
guard recognizer.isAvailable else { return }
let request = SFSpeechAudioBufferRecognitionRequest()
request.requiresOnDeviceRecognition = true
request.shouldReportPartialResults = true
recognitionTask = recognizer.recognitionTask(with: request) { result, error in
if let result = result {
let text = result.bestTranscription.formattedString
let isFinal = result.isFinal
DispatchQueue.main.async {
textView.text = text
}
}
}
audioEngine.inputNode.installTap(config: bufferConfig) { buffer, _ in
request.append(buffer)
}
audioEngine.prepare()
try audioEngine.start()
SFSpeechRecognizer vs Android SpeechRecognizer: SFSpeechRecognizer yenidən başlatma olmadan yerli streaming-ə malikdir (Android təkrari startListening tələb edir). iOS-da on-device iOS 17-dən (Android — Android 10-dan) mövcuddur. Hər ikisi istifadəçi icazəsi tələb edir (iOS üçün NSMicrophoneUsageDescription + NSSpeechRecognitionUsageDescription, Android üçün RECORD_AUDIO). SFSpeechRecognizer ingilis dilində daha dəqiqdir (on-device), Android SpeechRecognizer rus dilində daha dəqiqdir (bulud). iOS 17-dən əvvəl on-device mövcud deyil — internet tələb olunur. iOS 17+ üçün on-device rus dilində 12–14% WER verir.
Vosk — Alpha Cephei tərəfindən offline nitq tanıma üçün açıq mənbəli ASR kitabxanası. Kaldi ASR toolkit + CTC modellərinə əsaslanır. 20+ dili dəstəkləyir: rus, ingilis, alman, fransız, ispan, çin, ərəb. Modellər 50 MB-dan (small — 50 MB, ru) 1.2 GB-dək (large — 1.2 GB, en). Vosk Android (JNI), iOS (C++ wrapper), Linux, Windows, Raspberry Pi-də işləyir. RTF: flagman cihazlarda 0.3–0.8. Vosk tam offline ASR üçün ən yaxşı seçimdir.
Vosk API: VoskWaveformModelLoader (model yükləmə) → VoskWaveformRecognizer (tanıyıcının yaradılması) → recognizer.createGrammar(list) və ya recognizer.getResult() / recognizer.getPartialResult(). Qrammatikaların dəstəyi (sonlu əmr çoxluğu) — GrammarRecogniser — RTF 0.1–0.3 verir (3x daha sürətli). Səs daxil etmə üçün sərbəst tanımadan (getResult) istifadə edin. Səs əmrləri üçün — GrammarRecogniser (əmrlər üçün 99% dəqiqlik). Vosk həmçinin danışanın identifikasiyasını (səsin vektor təhlili) dəstəkləyir.
// Vosk offline ASR
val model = VoskModel("model/vosk-model-small-ru-0.22")
model.load()
val recognizer = VoskRecognizer(model, 16000.0f)
recognizer.setWords(true)
audioRecord.startRecording()
while (isListening) {
val buffer = ByteArray(3200) // 100 ms audio
audioRecord.read(buffer, 0, buffer.size)
if (recognizer.acceptWaveform(buffer)) {
val result = recognizer.result // JSON
text += JSONObject(result).getString("text")
}
}
Vosk vs Cloud ASR: Vosk tamamilə offline-dır — məxfilik, sıfır gecikmə, pulsuz. Bulud (Google, Yandex) çətin səhnələrdə (səs-küç, aksent) daha dəqiqdir — WER 3–5% aşağı. Vosk aşağıdakılar üçün idealdır: internet olmadan səs daxil etmə, accessibility tətbiqləri, zəng transkripsiyası (məxfilik). Cloud ASR — dəqiqliyin məxfiliyə nisbətən daha vacib olduğu səs köməkçiləri üçün. Tövsiyə: offline üçün Vosk, online üçün SFSpeechRecognizer (iOS) / SpeechRecognizer (Android) — müxtəlif ssenarilər üçün yanaşmaları birləşdirin.
Whisper — OpenAI tərəfindən 680 000 saat audio (çoxdilli, 99 dil) üzərində təlim edilmiş nitq tanıma modeli. Ölçülərdə mövcuddur: tiny (39M, 10% WER EN, 15% RU), small (244M, 6% WER EN, 10% RU), medium (769M, 4.5% WER EN, 8% RU). Whisper Core ML (iOS, ANE) və TFLite (Android, GPU) vasitəsilə mobil cihazlarda işləyir. Whisper tiny: CPU-da RTF 4–10, GPU-da RTF 0.5–2 (Android). Whisper small: GPU-da RTF 2–6. Whisper medium — RTF 8–15, yalnız qeyri-real-vaxt üçün.
iOS-da Whisper (Core ML): Apple MLX Whisper — Core ML və MLX (Apple Neural Engine) üçün Whisper tətbiqi. iPhone 15 Pro-da Whisper tiny Core ML: RTF 0.3–0.8 (real vaxtdan sürətli!). Whisper small Core ML: RTF 1–3. Whisper Core ML A17 Pro-da ANE-dən istifadə edir (Neural Engine 35 TOPS). Hugging Face Transformers → coremltools-whisper vasitəsilə Core ML-ə ixrac. Streaming üçün WhisperStitcher (chunking + stitching) istifadə edin. iOS-da Whisper — ən dəqiq on-device ASR (6% WER EN, 10% RU).
// iOS-da Whisper Core ML
import MLXWhisper
let model = try WhisperModel(from: "whisper-tiny")
let audio = try AudioUtils.loadAudio(url: audioURL)
let segments = try model.transcribe(audio: Audio, options: TranscribeOptions(
language: "ru",
wordTimestamps: true,
temperature: 0.0
))
for segment in segments {
print(segment.text) // vaxt damğaları ilə son mətn
}
Whisper vs Vosk: Whisper daha dəqiqdir (6% vs 9% WER EN), 99 dili dəstəkləyir, dil aşkarlama, durğu işaretləri, emosiya tanıma daxildir. Whisper daha ağırdır (39M–769M vs 50M Vosk), real vaxtda daha yavaşdır (RTF 0.5–6 vs 0.3–0.8). Whisper tiny — sürət baxımından Vosk ilə müqayisə edilə bilər (GPU-da RTF 0.5–2). Vosk daha yüngül, daha sürətli, real vaxt streaming üçün daha yaxşıdır. Whisper — dəqiqliyin sürətdən üstün olduğu birdəfəlik transkripsiya üçün. Vosk — real vaxt səs daxil etmə üçün. Son mətn üçün Whisper, interaktiv üçün Vosk istifadə edin.
Mətnin səs daxil edilməsi — ASR-nin ən kütləvi tətbiqi: mesajların, axtarış sorğularının, qeydlərin diktə edilməsi. Tələb: RTF < 1 (real vaxt), aralıq nəticələr (tələffüz edildikcə mətni görmək). Android Gboard və iOS Keyboard daxili ASR-yə malikdir (on-device, WER 12–18%). Xüsusi tətbiq üçün Android SpeechRecognizer / SFSpeechRecognizer istifadə edin. Maksimum dəqiqlik üçün — Cloud ASR + Vosk fallback. Rus dilində 98% dəqiqliklə səs daxil etmə üçün — Vosk (offline) + Yandex SpeechKit (online) kombinasiyası.
Zənglərin və görüşlərin transkripsiyası — avtomatik stenoqram yaratmaq üçün ASR. Tələblər: gecikmə tələbi yoxdur, WER < 10%, danışanın diarizasiyası (kim danışır). Whisper Small (offline) + pyannote-audio (diarization) — transkripsiya üçün standart yığın. iOS-da — Whisper Core ML (RTF 1–3, WER 6–10%). Android-də — Whisper TFLite (RTF 2–6, WER 8–12%) və ya Google Cloud ASR + diarization. Məxfilik üçün (zənglər serverə getmir) — cihazda Whisper. Diarization dəqiqliyi: 80–90% DER.
Səs köməkçiləri — Siri (SFSpeechRecognizer), Google Assistant (Android SpeechRecognizer), Alexa (on-device ASR). Xüsusi köməkçi: ASR → NLU (Təbii Dilin Anlaşılması) → Fəaliyyət → TTS. ASR — ilk mərhələ — bütün zəncirin dəqiqliyini müyyənləşdirir. NLU üçün RASA, Snips NLU (on-device) və ya Cloud NLU (Dialogflow, Amazon Lex) istifadə edin. TTS üçün: Android TTS / iOS AVSpeechSynthesizer. On-device səs köməkçisi (Vosk + RASA + TTS) — tamamilə özəl, internet olmadan işləyir, sorğu üzrə gecikmə < 2 saniyə.
// Android SpeechRecognizer + TTS ilə səs köməkçisi
recognizer.setRecognitionListener(object : RecognitionListener {
override fun onResults(results: Bundle) {
val query = results.getStringArrayList(
SpeechRecognizer.RESULTS_RECOGNITION
)?.firstOrNull() ?: return
val intentResult = nluService.classify(query)
textToSpeech.speak(intentResult.response)
executeAction(intentResult.action)
}
})
Motor məhdudiyyəti olan şəxslər üçün Accessibility — Speech Recognition tətbiqi səslə idarə etməyə imkan verir: kontaktları açmaq, mesaj göndərmək, nömrə yığmaq. Android Voice Access və iOS Switch Control + VoiceOver — qurulmuş həllərdir. Xüsusi tətbiq üçün: sabit əmr dəsti ilə GrammarRecogniser (Vosk) (50–100 ifadə) — RTF 0.1–0.3, 99% dəqiqlik. Vosk Grammar qrammatikanı BNF formatında təyin etməyə imkan verir. Accessibility üçün sürət kritikdir — Vosk Grammar sərbəst tanımadan 5x daha sürətlidir və daha az batareya sərf edir.
Tez-tez verilən suallar
Səs-küyün baskılanmasından (WebRTC NS — Android-də qurulmuş, iOS AVAudioSession) istifadə edin. Nitq olmayan hissələri kəsmək üçün VAD tətbiq edin. Beamforming (istiqamətli yazı) və ya çox mikrofonlu massiv vasitəsilə mikrofonla SNR-ni artırın. Whisper səs-küyə daha davamlıdır (səs-külüklə 680K saat üzrə təlim edilmişdir). WebRTC vasitəsilə səs-küyün azaldılması ilə Vosk 50 dB səs-küdə +5% WER verir. İstehsal üçün tətbiqinizin səs-küç şəraitində test edilməsindən istifadə edin.
Bəli, iOS 17-dən SFSpeechRecognizer on-device rejimini dəstəkləyir (requiresOnDeviceRecognition = true). iOS 16 və daha köhnədə on-device mövcud deyil — Siri/Gboard ASR üçün internet tələb olunur. Alternativlər: C++ wrapper vasitəsilə Vosk (offline, WER 12–15%), Whisper Core ML (offline, WER 6–10%, latency 2–6x). iOS 16- üçün səs daxil etmə üçün Vosk istifadə edin. Whisper Core ML — audio faylların transkripsiyası üçün (real vaxt deyil). Bütün həllər tamamilə özəldir və internet olmadan işləyir.
Android SpeechRecognizer RecognizerIntent.EXTRA_LANGUAGE vasitəsilə 60+ dili dəstəkləyir. Tam siyahı cihazda Locale.getAvailableLocales() ilə müyyənləşdirilir. Rus, ingilis, alman, fransız, ispan, italyan — həmişə mövcuddur. Çin, yapon, koreya — modeldən asılıdır. On-device rejimi (Android 10+) — 20+ dil. Vosk (20 dil) və SFSpeechRecognizer-dən (60 dil) fərqli olaraq, Android SpeechRecognizer Google Play Services versiyasından asılıdır.
Model adaptation istifadə edin: 100+ saat sahə audio üzərində Whisper fine-tuning (Hugging Face Trainer). Vosk — Dil Modelinin (ARPA formatı) sahə mətn korpusu (100K+ cümle) ilə əvəz edilməsi. Google Cloud ASR — phrase hints (sahə sözləri, DL=0/1/2). SFSpeechRecognizer — contextualStrings (ipucu sözlər massivi) ilə SFSpeechRecognitionTaskDelegate. Domain adaptation spesifik terminologiya üçün WER-i 15–30% artırır. Minimum: transkripsiyalarla 500 sahə audio faylı.
WER = (S + D + I) / N, burada S — substitutions (əvəzləmələr), D — deletions (silinmələr), I — insertions (əlavələr), N — istinad mətnindəki sözlərin sayı. Nümunə: istinad = „salam necəsən“, proqnoz = „salam nə edirsən“ → S=1 (necəsən→edirsən), D=1 (necə silindi?), I=0 → WER = 2/3 = 66%. Hesablama üçün jiwer (Python) və ya WER Calculator (JavaScript) kitabxanasından istifadə edin. CER — oxşar, simvol səviyyəsində. Rus dili üçün CER WER-dən 20–30% aşağıdır, sözlərin uzunluğu səbəbindən.
Xülasə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun