التعرف على الكلام — ما هو، التقنيات ومبدأ العمل

المؤلف: IT Sectr نُشر: 2026-07-19 وقت القراءة: 10 دق

التعرف على الكلام (ASR) هي تقنية للتعرف التلقائي على الكلام تحول الإشارة الصوتية إلى تسلسل نصي. تستخدم الأنظمة الحديثة التعلم العميق: يقوم المشفر (Conformer, Whisper, BiLSTM + CTC) بتحويل الطيف الصوتي إلى تسلسل من الحالات المخفية، ويشكل المفكك (CTC greedy decoding, Beam Search, Transformer decoder) النص. في التطبيقات المحمولة، يُستخدم التعرف على الكلام للإدخال الصوتي والمساعدين الصوتيين والنسخ التلقائي للمكالمات ووظائف إمكانية الوصول للأشخاص ذوي الإعاقات الحركية. وفقًا Google Cloud Speech-to-Text, 2025، يحقق ASR السحابي WER بنسبة 7% للغة الإنجليزية و12% للغة الروسية عند SNR > 15 dB.

النقاط الرئيسية

  • التعرف على الكلام — تحويل الكلام إلى نص (ASR) باستخدام الشبكات العصبية
  • Android SpeechRecognizer — ASR على الجهاز + سحابي، 60+ لغة، WER 7–12%
  • SFSpeechRecognizer — التعرف الأصلي لنظام iOS، على الجهاز منذ iOS 17
  • Vosk — ASR بدون اتصال، 20+ لغة، زمن استجابة 0.5–1.5x الوقت الفعلي، WER 13% روسي
  • Whisper — ASR من OpenAI، على الجهاز عبر Core ML / TFLite، متعدد اللغات

ما هو التعرف على الكلام: مبادئ ASR

التعرف التلقائي على الكلام (ASR) هو مسار: صوت → معالجة مسبقة (16 kHz أحادي، تقليل الضوضاء، VAD — كشف نشاط الصوت) → استخراج الميزات (MFCC, LogMel FilterBank) → نموذج صوتي (شبكة عصبية: CTC / RNNT / Transducer) → نموذج لغوي (LM) → فك الترميز (نص). تجمع النماذج الحديثة من البداية إلى النهاية (Whisper, Google USM, Conformer CTC) بين النموذج الصوتي واللغوي في محول واحد (Transformer)، مما يبسط المسار ويحسن الدقة.

هندسات ASR للأجهزة المحمولة: CTC (Connectionist Temporal Classification) — سريع، لا يتطلب محاذاة الصوت والنص، يُستخدم في Vosk و Android الأصلي. RNNT (Recurrent Neural Network Transducer) — ASR متدفق، زمن استجابة منخفض (Google USM). Conformer — هجين من CNN + Transformer، أفضل دقة ولكنه أثقل: Whisper Medium (769M params) — زمن استجابة 30–60x. للجهاز، CTC هو المفضل: نماذج CTC من Vosk تستهلك 50–100 MB، زمن استجابة 0.3–0.8x الوقت الفعلي.

مقاييس ASR: WER (معدل خطأ الكلمات) — النسبة المئوية للكلمات المستبدلة والمحذوفة والمدخلة مقارنة بالمرجع. Google Cloud ASR — 7% WER (EN)، 12% (RU). Vosk — 13% (RU)، 9% (EN). Whisper Small — 6% (EN)، 10% (RU). CER (معدل خطأ الأحرف) — بالمثل، على مستوى الأحرف. عامل الوقت الفعلي (RTF) — وقت المعالجة / مدة الصوت. RTF < 1 — أسرع من الوقت الفعلي. RTF < 0.3 — ASR في الوقت الفعلي. الإدخال الصوتي يتطلب RTF < 1، النسخ يتطلب RTF < 3.

حل ASRWER (EN)WER (RU)RTFعلى الجهاز
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 (كشف نشاط الصوت) — كشف نشاط الصوت، الذي يفصل الكلام عن الصمت والضوضاء. WebRTC VAD هو المعيار لـ ASR المحمول: إطارات 30 مللي ثانية، ثلاثة أوضاع (0، 1، 2 — من المتحفظ إلى العدواني). VAD يقلل RTF بمقدار 1.5–3x (يتخطى المقاطع غير الكلامية). Silero VAD (MIT) هو VAD عصبي، أكثر دقة من WebRTC (94% مقابل 85% ROC AUC)، زمن استجابة 5–10 مللي ثانية، TFLite و Core ML. لـ ASR في الإنتاج، استخدم التتابع VAD → ASR: هذا يقلل النتائج الإيجابية الخاطئة ويسرع المعالجة.

Android SpeechRecognizer API

Android SpeechRecognizer هو فئة مدمجة في Android SDK للتعرف على الكلام. يعمل في وضعين: سحابي (خادم Google) — دقة عالية، يتطلب إنترنت؛ على الجهاز (منذ Android 10+) — نموذج ASR مدمج في GBoard، 20+ لغة، WER 15–18%. يُرجع SpeechRecognizer نتائج وسيطة (نتائج جزئية) أثناء الكلام والنص النهائي. يدعم 60+ لغة عبر RecognizerIntent.EXTRA_LANGUAGE. موصى به للإدخال الصوتي — تكامل سريع، مجاني.

API SpeechRecognizer: يتم الإنشاء عبر SpeechRecognizer.createSpeechRecognizer(context). Intent مع RecognizerIntent.ACTION_RECOGNIZE_SPEECH مع extras: LANGUAGE_MODEL_FREE_FORM (نص حر) أو LANGUAGE_MODEL_WEB_SEARCH (استعلامات بحث). النتائج عبر RecognitionListener: onReadyForSpeech → onBeginningOfSpeech → onRmsChanged → onPartialResults → onResults. للتعرف المستمر (وضع الاستماع الدائم) — أعد تشغيل المتعرف بعد 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)

على الجهاز مقابل السحاب في Android: على الجهاز يعمل بدون إنترنت (Android 10+، Pixel 4+، Samsung S20+). السحاب أكثر دقة (Google Neural Network ASM Model) ولكن زمن الاستجابة أعلى (300–800 مللي ثانية بما في ذلك الشبكة). للإدخال الصوتي، استخدم نهجًا هجينًا: سحاب مع الرجوع إلى الجهاز عند عدم وجود شبكة. Android SpeechRecognizer يختار الوضع تلقائيًا بناءً على RecognizerIntent.EXTRA_PREFER_OFFLINE. لأقصى خصوصية — اضبط onDeviceOnly = true (لكن الدقة 15–18% WER للروسية).

iOS SFSpeechRecognizer وإطار Speech

SFSpeechRecognizer هو إطار Apple للتعرف على الكلام على iOS و macOS و watchOS. متاح منذ iOS 10. وضع الجهاز — منذ iOS 17 (نموذج محلي، بدون إنترنت). يدعم 60+ لغة. الدقة: WER 7–12% (على الجهاز — 12–15%). SFSpeechRecognizer متاح عبر Speech.framework — لا يتطلب SDK إضافية. طلب الإذن عبر SFSpeechRecognizer.requestAuthorization.

API SFSpeechRecognizer: SFSpeechRecognizer(locale: Locale(identifier: "ru_RU")) → SFSpeechAudioBufferRecognitionRequest (صوت مباشر) أو SFSpeechURLRecognitionRequest (ملف صوتي). البث عبر recognitionTask(with:delegate:) مع SFSpeechRecognitionTaskDelegate (didHypothesizeTranscription — جزئي، didFinishRecognition — نهائي). وضع الجهاز: 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 مقابل Android SpeechRecognizer: SFSpeechRecognizer لديه بث أصلي بدون إعادة تشغيل (Android يتطلب startListening متكرر). وضع الجهاز على iOS متاح منذ iOS 17 (Android منذ Android 10). كلاهما يتطلب إذن المستخدم (NSMicrophoneUsageDescription + NSSpeechRecognitionUsageDescription لـ iOS، RECORD_AUDIO لـ Android). SFSpeechRecognizer أكثر دقة في الإنجليزية (على الجهاز)، Android SpeechRecognizer أكثر دقة في الروسية (سحاب). لإصدارات iOS قبل 17، وضع الجهاز غير متاح — يتطلب إنترنت. لـ iOS 17+، وضع الجهاز يعطي WER 12–14% للروسية.

Vosk: التعرف بدون اتصال في 20+ لغة

Vosk هي مكتبة ASR مفتوحة المصدر من Alpha Cephei للتعرف على الكلام بدون اتصال. مبنية على Kaldi ASR toolkit + نماذج CTC. تدعم 20+ لغة: الروسية، الإنجليزية، الألمانية، الفرنسية، الإسبانية، الصينية، العربية. نماذج من 50 MB (صغير — 50 MB، ru) إلى 1.2 GB (كبير — 1.2 GB، en). يعمل Vosk على Android (JNI)، iOS (غلاف C++)، Linux، Windows، Raspberry Pi. RTF: 0.3–0.8 على الأجهزة الرائدة. Vosk هو أفضل خيار لـ ASR بدون اتصال كامل.

API Vosk: VoskWaveformModelLoader (تحميل النموذج) → VoskWaveformRecognizer (إنشاء المتعرف) → recognizer.createGrammar(list) أو recognizer.getResult() / recognizer.getPartialResult(). دعم القواعد (مجموعة محدودة من الأوامر) — GrammarRecogniser — يعطي RTF 0.1–0.3 (أسرع 3x). للإدخال الصوتي، استخدم التعرف الحر (getResult). للأوامر الصوتية — GrammarRecogniser (دقة 99% على الأوامر). Vosk يدعم أيضًا التعرف على المتحدث (تحليل متجه الصوت).

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 مقابل ASR السحابي: Vosk يعمل بدون اتصال تمامًا — خصوصية، زمن استجابة صفري، مجاني. السحاب (Google، Yandex) أكثر دقة في السيناريوهات المعقدة (ضوضاء، لهجة) — WER أقل بنسبة 3–5%. Vosk مثالي لـ: الإدخال الصوتي بدون إنترنت، تطبيقات إمكانية الوصول، نسخ المكالمات (خصوصية). ASR السحابي للمساعدين الصوتيين حيث الدقة أهم من الخصوصية. توصية: Vosk لعدم الاتصال، SFSpeechRecognizer (iOS) / SpeechRecognizer (Android) للتوصيل — ادمج النهج لسيناريوهات مختلفة.

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، فقط لغير الوقت الفعلي.

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 (أسرع من الوقت الفعلي!). Whisper small Core ML: RTF 1–3. Whisper Core ML يستخدم ANE على A17 Pro (Neural Engine 35 TOPS). Hugging Face Transformers → تصدير إلى Core ML عبر coremltools-whisper. للبث، استخدم WhisperStitcher (تقطيع + تجميع). Whisper على iOS هو 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 مقابل Vosk: Whisper أكثر دقة (6% مقابل 9% WER EN)، يدعم 99 لغة، يشمل كشف اللغة وعلامات الترقيم والتعرف على المشاعر. Whisper أثقل (39M–769M مقابل 50M Vosk)، أبطأ في الوقت الفعلي (RTF 0.5–6 مقابل 0.3–0.8). Whisper tiny مشابه لـ Vosk في السرعة (RTF 0.5–2 GPU). Vosk أخف وأسرع وأفضل للبث في الوقت الفعلي. Whisper للنسخ لمرة واحدة حيث الدقة أولوية على السرعة. Vosk للإدخال الصوتي في الوقت الفعلي. استخدم Whisper للنص النهائي، Vosk للاستخدام التفاعلي.

تطبيقات التعرف على الكلام في التطبيقات المحمولة

إدخال النص الصوتي — الاستخدام الأوسع لـ ASR: إملاء الرسائل واستعلامات البحث والملاحظات. المتطلبات: RTF < 1 (وقت فعلي)، نتائج جزئية (رؤية النص أثناء النطق). Gboard Android ولوحة مفاتيح iOS لديهما ASR مدمج (على الجهاز، WER 12–18%). للتطبيق المخصص، استخدم Android SpeechRecognizer / SFSpeechRecognizer. لأقصى دقة — ASR سحابي + Vosk كبديل. لإدخال صوتي بدقة 98% بالروسية — ادمج Vosk (بدون اتصال) + Yandex SpeechKit (متصل).

نسخ المكالمات والاجتماعات — ASR للإنشاء التلقائي للنصوص. المتطلبات: لا يوجد متطلبات زمن استجابة، WER < 10%، تحديد المتحدث (من يتكلم). Whisper Small (بدون اتصال) + pyannote-audio (تحديد المتحدث) هو المجموعة المعيارية للنسخ. على iOS — Whisper Core ML (RTF 1–3، WER 6–10%). على Android — Whisper TFLite (RTF 2–6، WER 8–12%) أو Google Cloud ASR + تحديد المتحدث. للخصوصية (المكالمات لا تذهب إلى الخادم) — Whisper على الجهاز. دقة تحديد المتحدث: 80–90% DER.

المساعدون الصوتيون — Siri (SFSpeechRecognizer)، Google Assistant (Android SpeechRecognizer)، Alexa (ASR على الجهاز). مساعد مخصص: ASR → NLU (فهم اللغة الطبيعية) → إجراء → TTS. ASR هو المرحلة الأولى — يحدد دقة السلسلة بأكملها. لـ NLU، استخدم RASA، Snips NLU (على الجهاز)، أو NLU سحابي (Dialogflow، Amazon Lex). لـ TTS: Android TTS / iOS AVSpeechSynthesizer. مساعد صوتي على الجهاز (Vosk + RASA + TTS) — خاص تمامًا، يعمل بدون إنترنت، زمن استجابة < 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)
    }
})

إمكانية الوصول للأشخاص ذوي الإعاقات الحركية — يتيح التعرف على الكلام التحكم في التطبيق بالصوت: فتح جهات الاتصال، إرسال رسالة، طلب رقم. Android Voice Access و iOS Switch Control + VoiceOver — حلول مدمجة. للتطبيق المخصص: GrammarRecogniser (Vosk) مع مجموعة محددة من الأوامر (50–100 عبارة) — RTF 0.1–0.3، دقة 99%. يتيح Vosk Grammar تعريف القواعد في تنسيق BNF. السرعة حاسمة لإمكانية الوصول — Vosk Grammar أسرع 5x من التعرف الحر ويستهلك بطارية أقل.

الأسئلة الشائعة

كيف تحسن دقة التعرف على الكلام في بيئة صاخبة؟

استخدم تقليل الضوضاء (WebRTC NS — مدمج في Android، iOS AVAudioSession). طبق VAD لقطع المقاطع غير الكلامية. زد SNR باستخدام ميكروفون مع beamforming (تسجيل اتجاهي) أو مصفوفة متعددة الميكروفونات. Whisper أكثر مقاومة للضوضاء (مدرب على 680K ساعة مع ضوضاء). Vosk مع تقليل الضوضاء عبر WebRTC يعطي +5% WER عند ضوضاء 50 dB. للإنتاج، اختبر مع ظروف الضوضاء لتطبيقك.

هل يمكن التعرف على الكلام بدون إنترنت على iOS؟

نعم، منذ iOS 17 يدعم SFSpeechRecognizer وضع الجهاز (requiresOnDeviceRecognition = true). على iOS 16 وما فوق، وضع الجهاز غير متاح — يتطلب إنترنت لـ Siri/Gboard ASR. البدائل: Vosk عبر غلاف C++ (بدون اتصال، WER 12–15%)، Whisper Core ML (بدون اتصال، WER 6–10%، زمن استجابة 2–6x). للإدخال الصوتي على iOS 16-، استخدم Vosk. Whisper Core ML لنسخ ملفات الصوت (غير الوقت الفعلي). جميع الحلول خاصة تمامًا وتعمل بدون إنترنت.

ما اللغات التي يدعمها Android SpeechRecognizer؟

يدعم Android SpeechRecognizer 60+ لغة عبر RecognizerIntent.EXTRA_LANGUAGE. القائمة الكاملة تحددها Locale.getAvailableLocales() على الجهاز. الروسية والإنجليزية والألمانية والفرنسية والإسبانية والإيطالية متوفرة دائمًا. الصينية واليابانية والكورية تعتمد على طراز الجهاز. وضع الجهاز (Android 10+) — 20+ لغة. على عكس Vosk (20 لغة) و SFSpeechRecognizer (60 لغة)، يعتمد Android SpeechRecognizer على إصدار Google Play Services.

كيفية إعداد التعرف على الكلام لمجال محدد (طب، قانون)؟

استخدم تكييف النموذج: ضبط دقيق لـ Whisper على 100+ ساعة من الصوت المجالي (Hugging Face Trainer). Vosk — استبدل النموذج اللغوي (تنسيق ARPA) بمجموعة نصوص مجال (100K+ جملة). Google Cloud ASR — phrase hints (كلمات مجال، DL=0/1/2). SFSpeechRecognizer — SFSpeechRecognitionTaskDelegate مع contextualStrings (مصفوفة سلاسل تلميحية). يحسن تكييف المجال الدقة بنسبة 15–30% WER للمصطلحات المتخصصة. الحد الأدنى: 500 ملف صوتي مجال مع نسخ.

كيف تحسب WER (معدل خطأ الكلمات) لـ ASR?

WER = (S + D + I) / N، حيث S — الاستبدالات، D — الحذف، I — الإدراج، 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+ لغة، سحاب + على الجهاز (Android 10+)، WER 8–15%
  • SFSpeechRecognizer (iOS) — 60+ لغة، على الجهاز منذ iOS 17، WER 7–14%
  • Vosk — ASR بدون اتصال، 20+ لغة، RTF 0.3–0.8، WER 9–13%
  • Whisper — ASR الأكثر دقة (WER 6% EN)، 99 لغة، لكنه ثقيل للوقت الفعلي
  • على الجهاز — خصوصية، بدون إنترنت، Vosk/Whisper Core ML
  • التطبيقات — إدخال صوتي، نسخ، مساعدون، إمكانية الوصول

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا