Розпізнавання мовлення — що це, технології та принцип роботи

Автор: IT Sectr Опубліковано: 2026-07-19 Час читання: 10 хв

Розпізнавання мовлення (ASR) — технологія автоматичного розпізнавання мовлення, що перетворює аудіосигнал у текстову послідовність. Сучасні системи використовують deep learning: енкодер (Conformer, Whisper, BiLSTM + CTC) перетворює спектрограму аудіо в послідовність прихованих станів, декодер (CTC greedy decoding, Beam Search, Transformer decoder) формує текст. У мобільних додатках Розпізнавання мовлення застосовується для голосового введення, голосових асистентів, автоматичної транскрибації дзвінків та accessibility-функцій для людей з обмеженнями моторики. За даними Google Cloud Speech-to-Text, 2025, хмарний ASR досягає WER 7% для англійської мови та 12% для російської при SNR > 15 dB.

Головне

  • Розпізнавання мовлення — перетворення мовлення в текст (ASR) за допомогою нейромереж
  • Android SpeechRecognizer — on-device + cloud ASR, 60+ мов, 7–12% WER
  • SFSpeechRecognizer — iOS нативне розпізнавання, on-device з iOS 17
  • Vosk — offline ASR, 20+ мов, 0.5–1.5x real-time latency, 13% WER російська
  • Whisper — OpenAI ASR, on-device через Core ML / TFLite, багатомовний

Що таке Розпізнавання мовлення: принципи ASR

Automatic Speech Recognition (ASR) — пайплайн: аудіо → попередня обробка (16 kHz моно, noise reduction, VAD — виявлення голосової активності) → feature extraction (MFCC, LogMel FilterBank) → акустична модель (нейромережа: CTC / RNNT / Transducer) → мовна модель (LM) → декодування (текст). Сучасні енд-ту-енд моделі (Whisper, Google USM, Conformer CTC) об'єднують акустичну + мовну модель в один Transformer, що спрощує пайплайн і підвищує точність.

Архітектури ASR для мобільних пристроїв: CTC (Connectionist Temporal Classification) — швидка, не потребує вирівнювання аудіо та тексту, використовується в Vosk, Android native. RNNT (Recurrent Neural Network Transducer) — потоковий ASR, низька latency (Google USM). Conformer — гібрид CNN + Transformer, найкраща точність, але важчий: Whisper Medium (769M params) — 30–60x latency. Для on-device CTC є кращим: Vosk CTC моделі займають 50–100 MB, latency 0.3–0.8x real-time.

Метрики ASR: WER (Word Error Rate) — відсоток замінених, видалених, вставлених слів відносно еталону. Google Cloud ASR — 7% WER (EN), 12% (RU). Vosk — 13% (RU), 9% (EN). Whisper Small — 6% (EN), 10% (RU). CER (Character Error Rate) — аналогічно, на рівні символів. Real-Time Factor (RTF) — час обробки / тривалість аудіо. RTF < 1 — швидше реального часу. RTF < 0.3 — real-time ASR. Для голосового введення потрібен RTF < 1, для транскрибації — RTF < 3.

ASR РішенняWER (EN)WER (RU)RTFOn-device
Google Cloud ASR7%12%0.3Ні
Android SpeechRecognizer8%13%0.5–1Так (змішаний)
SFSpeechRecognizer7%12%0.3–0.8Так (з iOS 17)
Vosk (vosk-model-small-ru)9%13%0.3–0.8Так
Whisper Small6%10%2–6Так

VAD (Voice Activity Detection) — виявлення голосової активності, що відокремлює мовлення від тиші та шуму. WebRTC VAD — стандарт для мобільних ASR: 30 ms фрейми, три режими (0, 1, 2 — від консервативного до агресивного). VAD знижує RTF в 1.5–3x (пропускає немовленнєві ділянки). Silero VAD (MIT) — нейромережевий VAD, точніший за WebRTC (94% vs 85% ROC AUC), 5–10 ms latency, TFLite та Core ML. Для production ASR використовуйте каскад VAD → ASR: це зменшує хибні спрацьовування та прискорює обробку.

Android SpeechRecognizer API

Android SpeechRecognizer — вбудований в Android SDK клас для розпізнавання мовлення. Працює в двох режимах: cloud (Google сервер) — висока точність, потребує інтернет; on-device (з Android 10+) — GBoard embedded ASR модель, 20+ мов, WER 15–18%. SpeechRecognizer повертає проміжні результати (partial results) під час мовлення та фінальний текст. Підтримує 60+ мов через RecognizerIntent.EXTRA_LANGUAGE. Рекомендується для голосового введення — швидка інтеграція, безкоштовно.

API SpeechRecognizer: створення через SpeechRecognizer.createSpeechRecognizer(context). Intent з RecognizerIntent.ACTION_RECOGNIZE_SPEECH з extra: LANGUAGE_MODEL_FREE_FORM (вільний текст) або LANGUAGE_MODEL_WEB_SEARCH (пошукові запити). Результат через RecognitionListener: onReadyForSpeech → onBeginningOfSpeech → onRmsChanged → onPartialResults → onResults. Для continuous recognition (режим «слухай завжди») — перезапускайте recognizer після onResults. Для економії батареї використовуйте onDeviceOnly = true.

kotlin
// Android SpeechRecognizer
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)

On-device vs Cloud на Android: on-device працює без інтернету (Android 10+, Pixel 4+, Samsung S20+). Cloud — точніший (Google Neural Network ASM Model), але latency вища (300–800 ms включаючи мережу). Для голосового введення використовуйте гібрид: cloud з fallback на on-device при відсутності мережі. Android SpeechRecognizer автоматично вибирає режим залежно від RecognizerIntent.EXTRA_PREFER_OFFLINE. Для максимальної приватності — встановіть onDeviceOnly = true (але точність 15–18% WER для російської).

iOS SFSpeechRecognizer та Speech Framework

SFSpeechRecognizer — фреймворк Apple для розпізнавання мовлення на iOS, macOS, watchOS. Доступний з iOS 10. On-device режим — з iOS 17 (локальна модель, без інтернету). Підтримує 60+ мов. Точність: WER 7–12% (on-device — 12–15%). SFSpeechRecognizer доступний через Speech.framework — не потребує додаткових SDK. Запит на дозвіл через SFSpeechRecognizer.requestAuthorization.

API SFSpeechRecognizer: SFSpeechRecognizer(locale: Locale(identifier: "ru_RU")) → SFSpeechAudioBufferRecognitionRequest (live audio) або SFSpeechURLRecognitionRequest (аудіофайл). Streaming через recognitionTask(with:delegate:) з SFSpeechRecognitionTaskDelegate (didHypothesizeTranscription — partial, didFinishRecognition — final). On-device режим: request.requiresOnDeviceRecognition = true. Для iOS 15+: request.shouldReportPartialResults = true (потоковий результат з низькою затримкою).

swift
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 має нативний streaming без перезапуску (Android потребує повторного startListening). On-device на iOS доступний з iOS 17 (Android — з Android 10). Обидва потребують дозволу користувача (NSMicrophoneUsageDescription + NSSpeechRecognitionUsageDescription для iOS, RECORD_AUDIO для Android). SFSpeechRecognizer точніший на англійській (on-device), Android SpeechRecognizer точніший на російській (cloud). Для iOS до 17 on-device недоступний — потрібен інтернет. Для iOS 17+ on-device дає WER 12–14% для російської.

Vosk: офлайн-розпізнавання на 20+ мовах

Vosk — open-source ASR бібліотека від Alpha Cephei для offline-розпізнавання мовлення. Заснована на Kaldi ASR toolkit + CTC-моделі. Підтримує 20+ мов: російська, англійська, німецька, французька, іспанська, китайська, арабська. Моделі від 50 MB (small — 50 MB, ru) до 1.2 GB (large — 1.2 GB, en). Vosk працює на Android (JNI), iOS (C++ wrapper), Linux, Windows, Raspberry Pi. RTF: 0.3–0.8 на флагманських пристроях. Vosk — найкращий вибір для повноцінного offline ASR.

API Vosk: VoskWaveformModelLoader (завантаження моделі) → VoskWaveformRecognizer (створення розпізнавача) → recognizer.createGrammar(list) або recognizer.getResult() / recognizer.getPartialResult(). Підтримка граматик (кінцевого набору команд) — GrammarRecogniser — дає RTF 0.1–0.3 (швидше в 3x). Для голосового введення використовуйте вільне розпізнавання (getResult). Для голосових команд — GrammarRecogniser (99% точність на командах). Vosk також підтримує Speaker Identification (векторний аналіз голосу).

kotlin
// 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) // 100ms 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 повністю офлайн — приватність, zero latency, безкоштовно. Cloud (Google, Yandex) точніший на складних сценах (шум, акцент) — WER на 3–5% нижчий. Vosk ідеальний для: голосового введення без інтернету, accessibility-додатків, транскрибації дзвінків (приватність). Cloud ASR — для голосових асистентів, де точність критичніша за приватність. Рекомендація: Vosk для offline, SFSpeechRecognizer (iOS) / SpeechRecognizer (Android) для online — комбінуйте підходи для різних сценаріїв.

Whisper OpenAI на мобільних пристроях

Whisper — модель OpenAI для розпізнавання мовлення, навчена на 680,000 годин аудіо (багатомовний, 99 мов). Доступна в розмірах: tiny (39M, WER 10% EN, 15% RU), small (244M, WER 6% EN, 10% RU), medium (769M, WER 4.5% EN, 8% RU). Whisper працює на мобільних пристроях через Core ML (iOS, ANE) та TFLite (Android, GPU). Whisper tiny: RTF 4–10 на CPU, RTF 0.5–2 на GPU (Android). Whisper small: RTF 2–6 на GPU. Whisper medium — RTF 8–15, тільки для non-real-time.

Whisper на iOS (Core ML): Apple MLX Whisper — реалізація Whisper для Core ML та MLX (Apple Neural Engine). Whisper tiny Core ML на iPhone 15 Pro: RTF 0.3–0.8 (швидше real-time!). Whisper small Core ML: RTF 1–3. Whisper Core ML використовує ANE на A17 Pro (Neural Engine 35 TOPS). Hugging Face Transformers → Export to Core ML через coremltools-whisper. Для streaming використовуйте WhisperStitcher (chunking + stitching). Whisper на iOS — найточніший on-device ASR (WER 6% EN, 10% RU).

swift
// Whisper Core ML on iOS
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) // final text with timestamps
}

Whisper vs Vosk: Whisper точніший (6% vs 9% WER EN), підтримує 99 мов, включає language detection, punctuation, emotion recognition. Whisper важчий (39M–769M vs 50M Vosk), повільніший в real-time (RTF 0.5–6 vs 0.3–0.8). Whisper tiny — порівняний з Vosk за швидкістю (RTF 0.5–2 GPU). Vosk легший, швидший, кращий для streaming real-time. Whisper — для одноразової транскрибації, де точність пріоритетніша за швидкість. Vosk — для голосового введення real-time. Для фінального тексту використовуйте Whisper, для інтерактивного — Vosk.

Застосування Розпізнавання мовлення в мобільних додатках

Голосове введення тексту — наймасовіше застосування ASR: диктування повідомлень, пошукових запитів, нотаток. Вимога: RTF < 1 (реальний час), partial results (бачити текст під час вимовляння). Android Gboard та iOS Keyboard мають вбудований ASR (on-device, WER 12–18%). Для кастомної реалізації використовуйте Android SpeechRecognizer / SFSpeechRecognizer. Для максимальної точності — Cloud ASR + Vosk fallback. Для голосового введення з 98% точністю на російській — комбінація Vosk (offline) + Yandex SpeechKit (online).

Транскрибація дзвінків та зустрічей — ASR для автоматичного створення стенограм. Вимоги: no latency requirement, WER < 10%, speaker diarization (хто говорить). Whisper Small (offline) + pyannote-audio (diarization) — стандартний стек для транскрибації. На iOS — Whisper Core ML (RTF 1–3, WER 6–10%). На Android — Whisper TFLite (RTF 2–6, WER 8–12%) або Google Cloud ASR + diarization. Для приватності (дзвінки не йдуть на сервер) — Whisper на пристрої. Точність diarization: 80–90% DER.

Голосові асистенти — Siri (SFSpeechRecognizer), Google Assistant (Android SpeechRecognizer), Alexa (on-device ASR). Кастомний асистент: ASR → NLU (Natural Language Understanding) → Action → TTS. ASR — перший етап — визначає точність всього ланцюжка. Для NLU використовуйте RASA, Snips NLU (on-device), або Cloud NLU (Dialogflow, Amazon Lex). Для TTS: Android TTS / iOS AVSpeechSynthesizer. On-device голосовий асистент (Vosk + RASA + TTS) — повністю приватний, працює без інтернету, latency < 2 секунд на запит.

kotlin
// Voice assistant with Android SpeechRecognizer + TTS
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)
    }
})

Accessibility для людей з обмеженнями моторики — Розпізнавання мовлення дозволяє керувати додатком голосом: відкрити контакти, надіслати повідомлення, набрати номер. Android Voice Access та iOS Switch Control + VoiceOver — вбудовані рішення. Для кастомної реалізації: GrammarRecogniser (Vosk) з фіксованим набором команд (50–100 фраз) — RTF 0.1–0.3, 99% точність. Vosk Grammar дозволяє визначити граматику в BNF-форматі. Для accessibility критична швидкість — Vosk Grammar швидший за вільне розпізнавання в 5x і споживає менше батареї.

Часті запитання

Як покращити точність розпізнавання мовлення в шумному середовищі?

Використовуйте noise suppression (WebRTC NS — вбудований в Android, iOS AVAudioSession). Застосовуйте VAD для відсікання немовленнєвих фрагментів. Збільште SNR через мікрофон з beamforming (направлений запис) або multi-microphone array. Whisper стійкіший до шуму (навчений на 680K годин з шумами). Vosk з шумоподавленням через WebRTC дає +5% WER на шумі 50 dB. Для production використовуйте тестування з шумовими умовами вашого додатку.

Чи можна розпізнавати мовлення без інтернету на iOS?

Так, з iOS 17 SFSpeechRecognizer підтримує on-device режим (requiresOnDeviceRecognition = true). На iOS 16 та старших on-device недоступний — потрібен інтернет для Siri/Gboard ASR. Альтернативи: Vosk через C++ wrapper (offline, WER 12–15%), Whisper Core ML (offline, WER 6–10%, latency 2–6x). Для голосового введення на iOS 16- використовуйте Vosk. Whisper Core ML — для транскрибації аудіофайлів (не real-time). Всі рішення повністю приватні та працюють без інтернету.

Які мови підтримує Android SpeechRecognizer?

Android SpeechRecognizer підтримує 60+ мов через RecognizerIntent.EXTRA_LANGUAGE. Повний список визначається Locale.getAvailableLocales() на пристрої. Російська, англійська, німецька, французька, іспанська, італійська — завжди доступні. Китайська, японська, корейська — залежить від моделі. On-device режим (Android 10+) — 20+ мов. На відміну від Vosk (20 мов) та SFSpeechRecognizer (60 мов), Android SpeechRecognizer залежить від версії Google Play Services.

Як налаштувати розпізнавання мовлення для конкретного домену (медицина, юриспруденція)?

Використовуйте model adaptation: Whisper fine-tuning на 100+ годинах доменних аудіо (Hugging Face Trainer). Vosk — заміна Language Model (ARPA format) доменним текстовим корпусом (100K+ речень). Google Cloud ASR — phrase hints (доменні слова, DL=0/1/2). SFSpeechRecognizer — SFSpeechRecognitionTaskDelegate з contextualStrings (масив рядків-підказок). Domain adaptation підвищує точність на 15–30% WER для специфічної термінології. Мінімум: 500 доменних аудіофайлів з транскрипціями.

Як розрахувати WER (Word Error Rate) для ASR?

WER = (S + D + I) / N, де S — substitutions (заміни), D — deletions (видалення), I — insertions (вставки), N — кількість слів в еталонному тексті. Приклад: еталон = «привіт як справи», передбачення = «привіт що робиш» → S=1 (як→що), D=1 (видалено «справи»?), I=0 → WER = 2/3 = 66%. Для розрахунку використовуйте бібліотеку jiwer (Python) або WER Calculator (JavaScript). CER — аналогічно на рівні символів. Для російської мови CER на 20–30% нижчий за WER через довжину слів.

Підсумки

  • Розпізнавання мовлення (ASR) — перетворення аудіо в текст через CTC/RNNT/Transformer моделі
  • Android SpeechRecognizer — 60+ мов, cloud + on-device (Android 10+), WER 8–15%
  • SFSpeechRecognizer (iOS) — 60+ мов, on-device з iOS 17, WER 7–14%
  • Vosk — offline ASR, 20+ мов, RTF 0.3–0.8, WER 9–13%
  • Whisper — найточніший ASR (WER 6% EN), 99 мов, але heavy для real-time
  • On-device — приватність, без інтернету, Vosk/Whisper Core ML
  • Застосування — голосове введення, транскрибація, асистенти, accessibility

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також