
لماذا أنا (وآمل أن تكونوا) مهتمين بالتعرف على الكلام؟ أولاً ، هذا الاتجاه هو أحد أكثر الطرق شيوعًا بالمقارنة مع المهام الأخرى لسانيات الكمبيوتر ، حيث يتم استخدام تقنية التعرف على الكلام في كل مكان تقريبًا - بدءًا من التعرف على نعم / لا بسيط في مركز الاتصال التلقائي للبنك إلى القدرة على دعم "الحديث الصغير" في "العمود الذكي" مثل "أليس". ثانياً ، لكي يكون نظام التعرف على الكلام عالي الجودة ، من الضروري إيجاد أكثر الأدوات فعالية لإنشاء مثل هذا النظام وتكوينه (هذه المقالة مخصصة لإحدى هذه الأدوات). أخيرًا ، لا شك أن "زائد" اختيار التخصص في مجال التعرف على الكلام بالنسبة لي شخصيًا هو أنه بالنسبة للبحث في هذا المجال ، من الضروري امتلاك مبرمج ومهارات لغوية. هذا محفز للغاية ، مما يجبر على اكتساب المعرفة في مختلف التخصصات.
لماذا Kaldi ، بعد كل شيء ، هل هناك أطر أخرى للتعرف على الكلام؟
للإجابة على هذا السؤال ، يجدر النظر في نظائرها الحالية والخوارزميات والتقنيات المستخدمة من قبلهم (الخوارزميات المستخدمة في Kaldi موصوفة في المقالة):
- CMU أبو الهول
CMU Sphinx (يجب عدم الخلط بينه وبين محرك بحث Sphinx!) هو نظام للتعرف على الكلام تم إنشاؤه بواسطة مطورين من جامعة كارنيجي ميلون ويتألف من وحدات مختلفة لاستخراج ميزات الكلام والتعرف على الكلام (بما في ذلك على الأجهزة المحمولة) والتدريب على هذا الاعتراف. يستخدم CMU Sphinx نماذج Markov المخفية على مستوى التعرف الصوتي ونماذج N-gram الإحصائية على مستوى التعرف اللغوي. يحتوي النظام أيضًا على عدد من الميزات المثيرة للاهتمام: التعرف على الكلام الطويل (على سبيل المثال ، النصوص أو التسجيلات الصوتية للمقابلة) ، والقدرة على توصيل قاموس كبير بمئات الآلاف من أشكال الكلمات ، وما إلى ذلك. من المهم ملاحظة أن النظام يتطور باستمرار ، مع كل نسخة ، وتحسين جودة التعرف والأداء . أيضا هناك عبر منصة وثائق مريحة. من بين السلبيات لاستخدام هذا النظام ، من الممكن تحديد عدم القدرة على بدء CMU Sphinx "خارج الصندوق" ، لأن حتى حل المشكلات البسيطة يتطلب معرفة كيفية تكييف النموذج الصوتي ، في مجال نمذجة اللغة ، إلخ. - يوليوس
تم تطوير Julius بواسطة مطورين يابانيين منذ عام 1997 ، والآن يتم دعم المشروع من قبل معهد أبحاث العلوم والتكنولوجيا المتقدمة في كيوتو. يعتمد هذا النموذج على نماذج N-gram ونماذج Markov الخفية الحساسة للسياق ، ويمكن للنظام التعرف على الكلام في الوقت الفعلي. العيوب هي التوزيع فقط لنموذج اللغة اليابانية (على الرغم من وجود مشروع VoxForge يقوم بإنشاء نماذج صوتية للغات أخرى ، خاصة للغة الإنجليزية) وعدم وجود تحديثات مستقرة. - RWTH ASR
تم تطوير هذا النموذج من قبل متخصصين من جامعة Rhine-Westphalian التقنية منذ عام 2001 ، ويتألف من عدة مكتبات وأدوات مكتوبة بلغة C ++. يتضمن المشروع أيضًا وثائق التثبيت ، وأنظمة التدريب المختلفة ، والقوالب ، والنماذج الصوتية ، ونماذج اللغة ، ودعم الشبكات العصبية ، وما إلى ذلك. علاوة على ذلك ، فإن RWTH ASR عبارة عن منصة مشتركة تقريبًا وذات سرعة منخفضة. - HTK
HTK (Hidden Markov Model Toolkit) هي مجموعة من أدوات التعرف على الكلام التي تم إنشاؤها في جامعة كامبريدج في عام 1989. غالبًا ما يتم استخدام مجموعة الأدوات المستندة إلى نماذج Markov المخفية كأداة إضافية لإنشاء أنظمة التعرف على الكلام (على سبيل المثال ، يتم استخدام هذا الإطار من قبل مطوري Julius). على الرغم من أن الكود المصدري متاح للجمهور ، فإن استخدام HTK لإنشاء أنظمة للمستخدمين النهائيين محظور بموجب الترخيص ، وهذا هو السبب في أن مجموعة الأدوات ليست شائعة في الوقت الحالي. يحتوي النظام أيضًا على سرعة ودقة منخفضة نسبيًا.
في مقال "التحليل المقارن لأنظمة التعرف على الكلام مفتوحة المصدر" (
https://research-journal.org/technical/sravnitelnyj-analiz-sistem-raspoznavaniya-rechi-s-otkrytym-kodom/ ) ، أجريت دراسة أجريت خلالها جميع تم تدريب النظم في حالة اللغة الإنجليزية (160 ساعة) وتطبيقها في حالة اختبار صغيرة لمدة 10 ساعات. نتيجة لذلك ، اتضح أن Kaldi لديها أعلى دقة في التعرف ، أسرع قليلاً من منافسيها من حيث السرعة. بالإضافة إلى ذلك ، فإن نظام Kaldi قادر على تزويد المستخدم بأغنى مجموعة من الخوارزميات لمختلف المهام وهو مناسب جدًا للاستخدام. في الوقت نفسه ، يتم التركيز على حقيقة أن العمل مع الوثائق قد يكون غير مريح لمستخدم عديم الخبرة ، كما وهي مصممة للمهنيين التعرف على الكلام. لكن بشكل عام ، Kaldi هو أكثر ملاءمة للبحث العلمي من نظرائه.
كيفية تثبيت كالدي
- قم بتنزيل الأرشيف من المستودع على https://github.com/kaldi-asr/kaldi :

- فك حزمة الأرشيف ، انتقل إلى kaldi-master / tools / extras.
- نحن ننفذ. / check_dependencies.sh:

إذا لم تظهر بعد ذلك "لا بأس به" ، فافتح الملف kaldi-master / tools / INSTALL واتبع التعليمات الموجودة هناك. - نحن ننفذ مكوّنًا (في kaldi-master / tools ، وليس في kaldi-master / tools / extras):

- اذهب إلى kaldi-master / src.
- نقوم بتشغيل ./configure - مشاركة ، ويمكنك تهيئة التثبيت باستخدام أو بدون تكنولوجيا CUDA عن طريق تحديد المسار إلى CUDA المثبتة (./configure --cudatk-dir = / usr / local / cuda-8.0) أو تغيير القيمة الأولية "نعم "إلى" لا "(./ التكوين --use-cuda = لا) على التوالي.
إذا رأيت في الوقت نفسه:

إما أنك لم تتبع الخطوة 4 ، أو تحتاج إلى تنزيل OpenFst وتثبيته بنفسك: http://www.openfst.org/twiki/bin/view/FST/FstDownload . - نحن نجعل تعتمد.
- نقوم بتنفيذ make -j. يوصى بإدخال العدد الصحيح من مراكز المعالج التي ستستخدمها عند الإنشاء ، على سبيل المثال ، make -j 2.
- نتيجة لذلك ، نحصل على:

مثال على استخدام نموذج مع Kaldi مثبتة
على سبيل المثال ، استخدمت الإصدار 0.6 من kaldi-ru ،
يمكنك تنزيله من هذا الرابط :
- بعد التنزيل ، انتقل إلى الملف kaldi-ru-0.6 / decode.sh وحدد المسار إلى Kaldi المثبتة ، يبدو هذا لي:

- نطلق النموذج ، مع الإشارة إلى الملف الذي سيتم التعرف على الخطاب فيه. يمكنك استخدام ملف decoder-test.wav ، هذا ملف خاص للاختبار ، إنه موجود بالفعل في هذا المجلد:

- وهنا ما يعترف به النموذج:

ما الخوارزميات المستخدمة ، ما الذي يقوم عليه العمل؟
يمكن العثور على معلومات كاملة عن المشروع على الموقع
http://kaldi-asr.org/doc/ ،
وسأبرز هنا بعض النقاط الرئيسية:
- تُستخدم إما MFCC الصوتية (معاملات التذبذب الذبذبي ميل التردد) أو PLPs الأقل شيوعًا (التنبؤ الخطي الحسي - انظر H. Hermansky ، "التحليل التنبئي الخطي الحسي (PLP) للكلام" ) لاستخراج الميزات الصوتية من إشارة الإدخال. في الطريقة الأولى ، يتم تحويل طيف الإشارة الأصلية من مقياس Hertz إلى مقياس الطباشير ، ثم يتم حساب معاملات cepstral باستخدام تحويل جيب التمام العكسي (https://habr.com/ar/post/140828/). تعتمد الطريقة الثانية على تمثيل الانحدار للكلمة: يتم إنشاء نموذج إشارة يصف التنبؤ بعينة الإشارة الحالية من خلال تركيبة خطية - نتاج عينات معروفة لإشارات المدخلات والمخرجات ومعاملات التنبؤ الخطي. يتم تقليل مهمة حساب علامات الكلام لإيجاد هذه المعاملات في ظل ظروف معينة.
- تشتمل الوحدة النمطية للنمذجة الصوتية على نماذج ماركوف المخفية (HMM) ، وهي مزيج من توزيعات غوسية (GMM) ، وشبكات عصبية عميقة ، وهي شبكات العصبية المتأخرة للوقت (TDNN).
- يتم نمذجة اللغة باستخدام آلة الحالة المحدودة ، أو FST (محول الحالة المحدودة). تقوم FST بترميز تعيين من تسلسل أحرف الإدخال إلى تسلسل أحرف الإخراج ، وهناك أوزان للانتقال تحدد احتمال حساب حرف إدخال في الإخراج.
- يتم فك التشفير باستخدام الخوارزمية الأمامية والخلفية.
حول إنشاء نموذج kaldi-ru-0.6
بالنسبة للغة الروسية ، يوجد نموذج للتعرف على المدربين تم إنشاؤه بواسطة Nikolai Shmyryov ، المعروف أيضًا في العديد من المواقع والمنتديات باسم
nsh .
- لاستخراج الخصائص ، تم استخدام طريقة MFCC ، ويستند النموذج الصوتي الصوتي نفسه إلى الشبكات العصبية من نوع TDNN.
- كانت عينة التدريب هي الموسيقى التصويرية لمقاطع الفيديو باللغة الروسية ، والتي تم تنزيلها من YouTube.
- لإنشاء نموذج لغة ، استخدمنا قاموس CMUdict والمفردات بالضبط الموجودة في مجموعة التدريب. نظرًا لحقيقة أن القاموس يحتوي على كلمات متشابهة لكلمات مختلفة ، فقد تقرر تخصيص كل كلمة لقيمة "الاحتمال" وتطبيعها.
- لمعرفة نموذج اللغة ، تم استخدام إطار عمل RNNLM (نماذج لغة الشبكة العصبية المتكررة) ، بناءً على ما يوحي به الاسم ، على الشبكات العصبية المتكررة (بدلاً من N-gram القديمة الجيدة).
مقارنة مع Google Speech API و Yandex Speech Kit
بالتأكيد ، لدى أحد القراء ، عند قراءة الفقرات السابقة ، سؤال: حسنًا ، اكتشفنا أن Kaldi متفوقة على نظرائها المباشرين ، ولكن ماذا عن أنظمة التعرف من Google و Yandex؟ ربما تكون أهمية الأطر الموضحة مسبقًا مشكوك فيها إذا كانت هناك أدوات من هذين العملاقين؟ السؤال جيد حقا ، لذلك دعونا اختبار!
- كمجموعة بيانات ، نأخذ السجلات وفك تشفير النص المقابل من VoxForge سيئة السمعة. نتيجة لذلك ، بعد أن عرف كل نظام 3677 ملفًا صوتيًا ، تلقيت قيم WER (معدل أخطاء Word) التالية:

- تتشابه السجلات من VoxForge تقريبًا في حالة عدم وجود ضوضاء في الخلفية أو التجويد أو سرعة الكلام ، إلخ. دعنا نعقد المهمة: خذ subcorpus التحقق من الصحة open_stt ، والذي يتضمن المكالمات الهاتفية والمسارات الصوتية على YouTube والكتب الصوتية ، وتقييم الأداء باستخدام WER و CER (معدل أخطاء الحروف).
بعد تلقي النصوص النصية ، لاحظت أن Google و Yandex (على عكس Kaldi) تعرفا كلمات مثل
"واحد" كـ "1". وفقًا لذلك ، كانت هناك حاجة لتصحيح مثل هذه الحالات (كما في النصوص المرجعية التي قدمها مؤلفو open_stt ، يتم تقديم كل شيء في شكل حرف) ، مما أثر على النتيجة النهائية:

بإيجاز ، يمكننا القول أن جميع الأنظمة تعاملت مع المهمة على نفس المستوى تقريبًا ، وأن Kaldi لم يكن أدنى مستوى من مجموعة أدوات الكلام Yandex و Google Speech API. في الحالة الثانية ، فإن Yandex Speech Kit لديها أفضل أداء ، مثل من الأفضل التعرف على الملفات الصوتية القصيرة مقارنةً بالمنافسين الذين لم يتمكنوا من التعرف على أي جزء منها (بالنسبة إلى Google ، فإن عدد هذه الملفات كبير جدًا). أخيرًا ، تجدر الإشارة إلى أن Kaldi استغرق أكثر من 12 ساعة للتعرف على ملفات 28111 ، والأنظمة الأخرى المدارة في وقت أقل بكثير. ولكن في الوقت نفسه ، تعد مجموعة أدوات الكلام من Yandex و Google Speech API بمثابة "مربعات سوداء" تعمل في مكان ما بعيدًا على خوادم الآخرين ولا يمكن الوصول إليها من أجل التوليف ، ولكن يمكن تكييف Kaldi مع تفاصيل المهمة في متناول اليد - المفردات المميزة (اليد الاحترافية ، المصطلحات ، العامية العامية) ، ميزات النطق ، إلخ. وكل هذا مجانا وبدون SMS! النظام هو نوع من المصمم ، والذي يمكننا استخدامه جميعًا لإنشاء شيء غير عادي ومثير للاهتمام.
أعرب عن امتناني لفريق
Yandex.Cloud ، الذي ساعدني في تنفيذ
التعرف على حالة
open_stt .
أنا أعمل في المختبر APDiMO NSU:
الموقع الإلكتروني:
https://bigdata.nsu.ru/مجموعة VK:
https://vk.com/lapdimo