متعة تعلم الأله Machine Learning – الجزء 6

التعرف علي الكلام Speech Recognition بإستخدام الـ Deep Learning

1٬469

التعرف علي الكلام (speech recognition) موجود في حياتنا كثيراً. في هواتفنا، الألعاب وأيضاً الساعات الذكية. بتكلفة 50 دولار أمريكي، يُمكنك الحصول علي Amazon Echo Dot والذي يُمكنك التحدث إليه:

الـ Echo Dot أصبح مشهوراً جداً لدرجة أن Amazon لا تستطيع تغطية الطلبات.

لكن التعرف علي الكلام موجود منذ فترة كبيرة، فلماذا الضجة عليه فقط الآن؟ السبب هو وجود ال deep learningوالذي جعل من الممكن الوصول إلي دقة كبيرة في البيئات الغير المعقدة.

Andrew Ng قال أنه بمجرد وصول الدقة من 95% إلي 99%، سيصبح ال speech recognition وسيلة أساسية في التعامل مع الحاسوب. هذا طبعاً بفضل ال deep learning.

لنتعرف كيف يمكننا عمل speech recognition بإستخدام ال deep learning.

 

ال Machine Learning ليس دائماً صندوق أسود

يُمكنك الإعتقاد أن الأمر عبارة عن تسجيل أصوات وتغذيتها إلي neural network للتدريب للحصول علي النص من الكلام:

المشكلة الأكبر أن ال speech recognition يتغير بتغير سرعة الكلام. يُمكنك لأحد أن يقول “hello” بسرعة كبيرة ويمكن لآخر أن يقولها ببطئ شديد “heeeelllllllllllllooooo”، وبالتالي ملف صوتي أطول وبيانات أكثر. كل من الرسالتين يجب التعرف عليهم علي أنهما يحتويان علي نفس النص “hello”. هذه هي الصعوبة في أن يتم التعرف أن ملفات بأحجام مختلفة يمكنها الإحتواء علي نفس الكلام.

 

تحويل الصوت إلي Bits

الخطوة الأولي في التعرف علي الكلام هي إدخال ملفات الصوت إلي الحاسوب.

في الجزء 3، تعلمنا كيف نأخذ صةرة ونتعامل معاها كمصفوفة رقمية وبالتالي نقم بتغذيتها مباشرة إلي ال neural network لعمل image recognition:

لكن الصوت عبارة عن أمواج. كيف يمكننا تحويل الأمواج إلي أرقام؟ لنري كيف يمكننا تحويل هذا المطقع الصوتي الذي أقول فيه “Hello”:

الأمواج الصوتية أحادية البعد. في كل لحظة من الوقت، يوجد قيمة واحدة عبارة عن إرتفاع الموجة. لننظر عن قرب إلي جزء واحد من الموجة الصوتية:

لتحويل هذه الموجة إلي أرقام، نُسجل فقط طول الموجة عند نقط مفصولة بمسافات متساوية:

هذا يُسمي sampling. يتم تقسييم الثانية الواحدة إلي عدة آلاف من الأجزاء ونقوم بتخزين القيم الرقمية التي تُعبر عن إرتفاع الموجة عند كل نقطة. هذا طريقة الحصوص علي ملف بإمتداد .wav غير مضغوط.

ال CD Quality يقوم بال Sampling بتردد 44.1khz أي 44,100 قراءة بالثانية الواحدة. لكن لل speech recognition تردد 16khz يكفي للحصول علي ترددات صوت الإنسان.

لنقم بعمل sampling للتسجيل الصوتي لكلمة “Hello” بتردد 16khz. هذه أول 100 عينة:

فكرة بسيطة عن ال Digital Sampling

ربما فكرت بأن ال sampling هو عبارة عن تقريب للصوت الأصلي. بالفعل يوجد فرق بين الصوت الأصلي والصوت الذي تم نقله للحاسوب.

لكن بفضل Nyquist Theorem، يمكننا إستخدام الرياضيات للحصول علي النسخة الأصلية من الصوت من النسخة التي عصلنا عليها بإستخدام عملية ال sampling. لكن الشرط هو إستخدام sampling frequency علي الأقل ضعف أكبر تردد نريد تخزينة.

 

عمل pre-processing لبيانات الصوت الناتجة عن ال sampling

حصلنا علي مصفوفة من الأرقام تُعبر عن الصوت بعد تقطيعة لأجزاء كل 1/16000th من الثانية.

يمكنا تغذية ال neural network بهذة الأرقام. لكن معالجة تلك الأرقام بشكل مباشر صعب. لمكننا جعل الأمر أسهل بتطبيق بعض المعالجة pre-processing علي بيانات الصوت.

لنبدأ بتجميع العينات في مجموعات تتكون من 20 ميلي ثانية. هذه أول 20 ميلي ثانية من الصوت (أي أول 320 عينة):

رسم هذه الأرقام حظم يُعطينا تقريب لموجة الصوت الأصلي لهذه ال 20 ميلي ثانية:

مدة التسجيل هي فقط 1/50th من الثانية. لكن هذا التسجيل القصير يبدو معقد ويحتوي علي أكثر من تردد. يوجد بعض الأصوات الضعيفة التردد، البعض متوسط، والبعض الأخر عالي التردد. كل هذه الترددات تختلط سوياً لإنتاج الصوت المعقد للإنسان.

لجعل هذه البيانات أسهل في المعالجة عن طريق ال neural network، سنقوم بتقطيع تلك الموجة المعقدة إلي أكثر من جزء. سيتم تقطيع الأجزاء ذات الترددات الضعيفة، ثم الأقوي فالأقوي، وهكذا. بعد إضافة energy إلي كل هذه الترددات، يُمكننا إنشاء بيانات تساعدنا أكثر في المعالجة.

تخيل إذا ما كان لديك تسجيل لشخص يعزف علي وتر C Major في البيانو. هذا الصوت يُعتبر مزيج من النوات الموسيقية C، E، وG والكل موجود في ملف واحد فقط. نريد أن نقوم بتقسييم هذه الملف المعقد إلي لإكتشاف النوات الموسيقية المستخدمة. هذه هي الفكرة.

نقوم بذلك من خلال عملة رياضية تُسمي ال Fourier Transform. هذه يُقسم الصوت المعقد إلي الأمواج التي يتكون منها. بمجرد الحصول علي نلك الأمواج المنفصلة، يتم التعرف علي كمية ال energy الموجودة بهم.

الناتج النهائي هو تقييم لأهمية كل تردد. كل رقم في المصفوفة التالية يُعبر عن ال energy الموجودة لكل 20hz في ال 20 ميلي ثانية المستخدمة:

لكن هذا أسهل بكثير حينما نراه في رسمة كالتالي:

إذا كررنا هذه العملية علي كل 20 ميلي ثانية، نحصل في النهاية علي spectrogram (كل عمود من اليسار لليمين عبارة عن جزء من 20 ميلي ثانية):

ال neural network يمكنها إيجاد الأنماط داخل هذه البيانات بدلاً من التعامل مباشرة مع الصوت الأصلي. لذلك سيتم تغذية تلك البيانات إلي ال neural network.

 

التعرف علي الحروف من الأصوات القصيرة

بعد الحصول علي بيانات بشكل يسهل معالجتها، سيتم تغذيتها إلي ال neural network. المدخل عبارة عن أجزاء كل منها 20 ميلي ثانية. لكل جزء بسيط من الصوت، سيتم التعرف علي الحرف الموجود داخل الصوت.

سنستخدم ال recurrent neural network. السبب أن كل حرف يُمكنك التأثير علي إحتمال الحرف التالي. علي سبيل المثال، إذا قلنا “Hel” فإنه علي الأرجح أن نقول بعد ذلك “lo” لإكمال كلمة “Hello”. لذلك بإستخدام ذاكرة تلك الشبكة، يمكننا تحسين دقة التعرف علي الكلام.

بعد تغذية المقطع الكامل للشبكة جزء بجزء، سنحصل في النهاية علي علاقة بين كل مقطع صوتي من 20 ميلي ثانية والحرف الذي علي الأرجع أن يكون موجوداً داخل تلك المقطع:

الشبكة توقعت أن أحد الأشياء التي يُمكن أن تكون في الصوت هو “HHHEE_LL_LLLOOO”. لكنها أيضاً توقعت أن الناتج قد يكون “HHHUU_LL_LLLOOO” أو “AAAUU_LL_LLLOOO”. لدينا بعض الخطوات لإستنتاج الناتج النهائي. أولاً، إستبدال كل الحروف المتكررة بحرف واحد فقط:

HHHEE_LL_LLLOOO  يصبح HE_L_LO

HHHUU_LL_LLLOOO  يصبح HU_L_LO

AAAUU_LL_LLLOOO  يصبح AU_L_LO

 

بعد ذلك حذف الفراغات:

HE_L_LO  يصبح HELLO

HU_L_LO  يصبح HULLO

AU_L_LO  يصبح AULLO

في النهاية يوجد 3 نتائج محتملة وهم Hello، Hullo، و Aullo. إذا نطقنا تلك الكلمات، فسنجد أن الصوت المألوف هو “Hello”. بسبب توقع الشبكة لحرف واحد كل مرة، سنتنتج الشبكة تلك النتائج القريبة في النطق. علي سبيل المثال، إذا أدخلنا “He would not go” إلي الشبكة فإن أحد الإحتمالات هو “He wud net go”.

الحل هو ربط تلك النتائج المقترحة من الشبكة بقواعد بيانات كبيرة. من خلال تلك البيانات، يُمكننا معرفة الناتج الأقرب للصواب.

بناءً علي ذلك، فإن “Hello” هو الناتج الأكثر تداولاً بين الثلاث نتائج ولذلك فإنه الناتج الصحيح.

 

إنتظر ثانية!

ربما فكرت في “ماذا لو قال أحد الأشخاص ‘Hullo’؟ هذه كلمة صحيحة. ربما ‘Hello’ هي الناتج الخطا!”.

بالفعل يمكن لشخص أن يقول “Hullo” بدلاً من “Hello”. لكن في ال speech recognition لن يُنتج “Hullo” كناتج. إنها ليست مشهورة في النطق مثل كلمة “Hello” وسيظل يعتقد أنك تقول “Hello” حتي وإن قمت بالتأكيد في النطق علي حرف ال “U”.

عدم التعرف علي كلمة “Hullo” هو أمر منظقي لكن في بعض الأحيان أمر مزعج لأن هاتفك يرفض الإستجابة لشيئ صحيح قمت بقوله. لذلك تلك الأنظمة يتم تدريبها بالعديد من البيانات لتحسين تلك النقطة.

 

هل أستطيع بناء نظام speech recognition خاص بي؟

من أروع الأشياء في ال machine learning هو سهولتها في العديد من الأوقات. تحصل علي بيانات، تقوم بتغذية الخوارزمية بها، وبعد ذلك تحصل علي نظام يعمل.

هذه يُعتبر صحيح في بعض الحالات لكن ليس في الكلام. التعرف علي الكلام مشكلة صعبة. يجب التغلب علي العديد من المشاكل مثل الدقة السيئة للميكروفون، الضوضاء، صدي الصوت، تغييرات في النطق بين الأشخاص، وغير ذلك. هذه المشاكل يجب أن تعمل علي حلها لتضمن إنتاج شبكة تعمل بأعلي دقة ممكنة.

ها هو مثال آخر: هل تعلم أنك إذا ما كنت في غرفة مليئة بالضوضاء بإنك تقوم برفع صوتك داخل الغرفة حتي يستطيع غيرك سماعك وسط الضوضاء؟ البشر ليس لديهم مشكلة في أن يفهموك في هذه الحالة لكن ال neural network يجب تدريبها لتفادي تلك المشكلة.

لبناء نظام voice recognition مثل Siri، Google Now، أو Alexa، تحتاج للعديد من بيانات التدريب للوصول إلي دقة عالية. ولان الناس ليس لا يريدون جودة ضعيفة في أنظمة التعرف علي الكلام، فإنه لا يوجد أحد يريد دقة 80% في العمل. بل يريدون أعلي من ذلك بكثير. ولذلك يجب توفر بيانات كثيرة للتدريب.

لشركات مثل Amazon أو Google، مئات الآلاف من ساعات الحديث الصوتية تعتبر كنز. السبب الأكثر في خفض سعر تلك الأنظمة حتي تصل إلي 50$ فقط هو أنهم يريدونك أن تستخدمهم بأكبر شكل ممكن. كل ما تقوم بتحدثة يتم تسجيلة للأبد لتدريب تلك الأنظمة ورفع كفائتها.

لا تُصدقني؟ إذا كان لديك جهاز Android به Google Now، فقط أضغط هنا لتستمع إلي تسجيلاتك وأنت تقول أشياء سخيفة لم تقوم بقولها أبداً:

فلا أُفضل بناء نظامك الخاص من التعرف علي الكلام لتنافس Google. بدلاً من ذلك، أبحث عن طريقة تجعل الناس يُعطونك تسجيلاتهم لعدة ساعات. البيانات ستكون منتجك.

 

تبحث عن معرفة المزيد

الخوارزمية المذكورة في هذا الدرس تُسمي Connectionist Temporal Classification  أو CTC. يمكنك قراءة البحث الأصلي من 2006.

Adam Coates من Baidu أعطي عرض رائع عن ال deep learning لأجل ال speech recognition في مدرسة Bay Area Deep Learning . يمكنك مشاهدة الفيديو علي اليوتيوب.


تم ترجمة هذا الدرس بواسطة أحمد جاد.

المقال الأصلي:

https://medium.com/@ageitgey/machine-learning-is-fun-part-6-how-to-do-speech-recognition-with-deep-learning-28293c162f7a

تعليقات