التعلم الآلي جزء ممتع 6: كيفية القيام بالتعرف على الكلام بالتعلم العميق

تحديث: هذا المقال جزء من سلسلة. تحقق من سلسلة كاملة: الجزء 1 ، الجزء 2 ، الجزء 3 ، الجزء 4 ، الجزء 5 ، الجزء 6 ، الجزء 7 والجزء 8! يمكنك أيضًا قراءة هذه المقالة في 普通话 أو 한국어 أو Tiếng Việt أو Русский.

تحديث عملاق: لقد كتبت كتابًا جديدًا استنادًا إلى هذه المقالات! لا يقوم بتوسيع وتحديث جميع مقالاتي فقط ، ولكنه يحتوي أيضًا على الكثير من المحتوى الجديد والكثير من مشاريع الترميز العملي. افحصه الآن!

التعرف على الكلام تغزو حياتنا. إنها مدمجة في هواتفنا وأجهزة ألعابنا وساعاتنا الذكية. إنه حتى أتمتة منازلنا. مقابل 50 دولارًا فقط ، يمكنك الحصول على Amazon Echo Dot - صندوق سحري يسمح لك بطلب البيتزا أو الحصول على تقرير عن الطقس أو حتى شراء أكياس القمامة - فقط من خلال التحدث بصوت عالٍ:

اليكسا ، طلب بيتزا كبيرة!

حظي Echo Dot بشعبية كبيرة في موسم العطلات هذا إلى درجة أن أمازون لا يبدو أنها تحتفظ بها في المخزون!

لكن التعرف على الكلام كان موجودًا منذ عقود ، فلماذا هو الآن يصل إلى التيار الرئيسي؟ والسبب هو أن التعلم العميق جعل التعرف على الكلام في النهاية دقيقًا بدرجة كافية ليكون مفيدًا خارج البيئات التي يتم التحكم فيها بعناية.

توقع أندرو نغ منذ فترة طويلة أنه نظرًا لأن نسبة التعرّف على الكلام تتراوح من 95٪ إلى 99٪ من الدقة ، فسيصبح ذلك وسيلة أساسية للتفاعل مع أجهزة الكمبيوتر. والفكرة هي أن هذه الفجوة دقة 4 ٪ هو الفرق بين مزعج لا يمكن الاعتماد عليها ومفيدة بشكل لا يصدق. بفضل التعلم العميق ، وصلنا أخيرًا إلى هذه الذروة.

دعونا نتعلم كيفية القيام بالتعرف على الكلام بالتعلم العميق!

التعلم الآلي ليس دائمًا الصندوق الأسود

إذا كنت تعرف كيفية عمل الترجمة الآلية العصبية ، فيمكنك تخمين أننا ببساطة يمكن أن نوفر التسجيلات الصوتية في شبكة عصبية وتدريبها على إنتاج نص:

هذا هو الكأس المقدسة للتعرف على الكلام بالتعلم العميق ، لكننا لم نصل إلى هذا الحد بعد (على الأقل في الوقت الذي كتبت فيه هذا - أراهن أننا سنكون في غضون عامين).

المشكلة الكبيرة هي أن الكلام يختلف في السرعة. قد يقول شخص ما "مرحبًا" بسرعة كبيرة وقد يقول شخص آخر "heeeelllllllllllllooooo!" ببطء شديد ، مما ينتج عنه ملف صوتي أطول بكثير مع بيانات أكثر بكثير. يجب التعرف على كلا الملفين الصوتيين على أنهما نفس النص تمامًا - "مرحبًا". اتضح أن محاذاة الملفات الصوتية ذات الأطوال المختلفة إلى جزء ثابت من النص تلقائيًا أمر صعب للغاية.

للتغلب على ذلك ، يتعين علينا استخدام بعض الحيل الخاصة والمعالجة الإضافية بالإضافة إلى شبكة عصبية عميقة. دعونا نرى كيف يعمل!

تحويل الأصوات إلى بت

الخطوة الأولى في التعرف على الكلام واضحة - نحتاج إلى تغذية الموجات الصوتية في جهاز الكمبيوتر.

في الجزء 3 ، تعلمنا كيفية التقاط صورة والتعامل معها على أنها مجموعة من الأرقام حتى نتمكن من التغذية مباشرة في شبكة عصبية للتعرف على الصور:

الصور هي مجرد صفيف من الأرقام التي تشفر شدة كل بكسل

لكن الصوت ينتقل كموجات. كيف يمكننا تحويل الموجات الصوتية إلى أرقام؟ دعنا نستخدم مقطع الصوت هذا لي قائلاً "Hello":

شكل موجة مني يقول

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

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

أخذ عينات من موجة الصوت

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

يتم أخذ عينات من صوت "جودة الأقراص المضغوطة" بسرعة 44.1 كيلو هرتز (44100 قراءة في الثانية). ولكن من أجل التعرف على الكلام ، فإن معدل أخذ العينات من 16 كيلو هرتز (16000 عينة في الثانية) يكفي لتغطية نطاق تردد الكلام البشري.

دعنا نتعرف على موجة الصوت "Hello" لدينا والتي تبلغ 16000 مرة في الثانية. إليك أول 100 عينة:

يمثل كل رقم سعة الموجة الصوتية عند 1/16000 من الفواصل الثانية

شريط جانبي سريع على أخذ العينات الرقمية

قد تفكر في أن أخذ العينات ينتج تقريبًا تقريبيًا لموجة الصوت الأصلية لأنه لا يستغرق سوى قراءات عرضية. هناك فجوات بين قراءاتنا لذلك يجب أن نفقد البيانات ، أليس كذلك؟

هل يمكن للعينات الرقمية إعادة إنشاء موجة الصوت التناظرية الأصلية تمامًا؟ ماذا عن تلك الثغرات؟

ولكن بفضل نظرية Nyquist ، نعلم أنه يمكننا استخدام الرياضيات لإعادة بناء الموجة الصوتية الأصلية تمامًا من العينات البعيدة - طالما أننا نأخذ عينات على الأقل مرتين بأسرع تردد أعلى نرغب في تسجيله.

أذكر ذلك فقط لأن كل شخص تقريبًا يخطئ في هذا الخطأ ويفترض أن استخدام معدلات أخذ عينات أعلى يؤدي دائمًا إلى جودة صوت أفضل. لا.

ما قبل المعالجة لدينا بيانات الصوت العينات

لدينا الآن مجموعة من الأرقام حيث يمثل كل رقم سعة الموجة الصوتية بمعدل 1/16000 من الفواصل الثانية.

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

دعنا نبدأ بتجميع الصوتيات التي تم أخذ عينات منها في أجزاء بطول 20 مللي ثانية. فيما يلي أول 20 مللي ثانية من الصوت (أي عينات الـ 320 الأولى لدينا):

يتيح لنا تخطيط هذه الأرقام كرسم بياني بسيط تقريبًا تقريبيًا لموجة الصوت الأصلية لفترة 20 مللي ثانية من الوقت:

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

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

تخيل أنه كان لديك تسجيل لشخص يلعب على وتر C Major على بيانو. هذا الصوت هو مزيج من ثلاث نغمات موسيقية - C و E و G - كلها مختلطة معًا في صوت واحد معقد. نريد تقسيم هذا الصوت المعقد إلى الملاحظات الفردية لاكتشاف أنها C و E و G. هذه هي الفكرة نفسها بالضبط.

نقوم بذلك باستخدام عملية رياضية تسمى تحويل فورييه. إنه يكسر موجة الصوت المعقدة إلى موجات الصوت البسيطة التي تتكون منها. بمجرد امتلاكنا تلك الموجات الصوتية الفردية ، نضيف كمية الطاقة الموجودة في كل واحدة.

والنتيجة النهائية هي درجة مدى أهمية كل نطاق تردد ، من درجة الصوت المنخفضة (أي ملاحظات الجهير) إلى درجة الصوت العالية. يمثل كل رقم أدناه مقدار الطاقة في كل نطاق 50 هرتز من مقطعنا الصوتي البالغ 20 مللي ثانية:

يمثل كل رقم في القائمة مقدار الطاقة في نطاق التردد 50 هرتز

ولكن هذا أسهل كثيرًا عند رسم هذا كمخطط:

يمكنك أن ترى أن مقتطف الصوت 20 مللي ثانية لدينا لديه الكثير من الطاقة منخفضة التردد وليس لديه الكثير من الطاقة في الترددات العالية. هذا نموذجي للأصوات

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

الطيفية الكاملة لمقطع الصوت

يعد الطيف الترددي رائعًا لأنك تستطيع فعلًا مشاهدة الملاحظات الموسيقية وأنماط النغمات الأخرى في البيانات الصوتية. يمكن للشبكة العصبية العثور على أنماط في هذا النوع من البيانات بسهولة أكبر من الموجات الصوتية الخام. لذلك هذا هو تمثيل البيانات الذي سنعمل عليه بالفعل في شبكتنا العصبية.

التعرف على الشخصيات من الأصوات القصيرة

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

سنستخدم شبكة عصبية متكررة - أي شبكة عصبية لها ذاكرة تؤثر على التنبؤات المستقبلية. ذلك لأن كل حرف يتنبأ به يجب أن يؤثر على احتمالية الحرف التالي الذي سيتنبأ به أيضًا. على سبيل المثال ، إذا قلنا كلمة "HEL" حتى الآن ، فمن المحتمل جدًا أن نقول "LO" بجانب إنهاء كلمة "Hello". من غير المرجح أن نقول شيئًا لا يمكن التنبؤ به مثل "XYZ". لذا فإن امتلاك ذاكرة التنبؤات السابقة يساعد الشبكة العصبية على تقديم تنبؤات أكثر دقة للمضي قدمًا.

بعد تشغيل مقطع الصوت بأكمله عبر الشبكة العصبية (مقطع واحد في كل مرة) ، سينتهي بنا الأمر إلى تعيين كل مقطع صوتي على الحروف التي يتم التحدث بها على الأرجح خلال تلك القطعة. إليك ما يبدو عليه هذا التعيين بالنسبة لي وهو يقول "Hello"

تتوقع شبكتنا العصبية أن الشيء الوحيد الذي قلته هو "HHHEE_LL_LLLOOO". ولكنه يعتقد أيضًا أنه من الممكن أن قلت "HHHUU_LL_LLLOOO" أو حتى "AAAUU_LL_LLLOOO".

لدينا بعض الخطوات التي نتبعها لتنظيف هذا الإخراج. أولاً ، سنستبدل أي أحرف مكررة بحرف واحد:

  • يصبح HHHEE_LL_LLLOO HE_L_LO
  • يصبح HHHUU_LL_LLLOO HU_L_LO
  • يصبح AAAUU_LL_LLOOO AU_L_LO

بعد ذلك سنزيل أي فراغات:

  • أصبح HE_L_LO مرحباً
  • يصبح HU_L_LO HULLO
  • يصبح AU_L_LO AULLO

هذا يتركنا بثلاثة نسخ محتملة - "Hello" و "Hullo" و "Aullo". إذا قلتها بصوت عالٍ ، فإن كل هذه الأصوات تشبه "Hello". نظرًا لأنها تتوقع حرفًا واحدًا في كل مرة ، ستخرج الشبكة العصبية بهذه النسخ المكتوبة. على سبيل المثال ، إذا قلت "لن يرحل" ، فقد يعطي نسخة محتملة واحدة باسم "إنه سوف يذهب".

الحيلة هي الجمع بين هذه التنبؤات القائمة على النطق مع درجات الاحتمال القائمة على قاعدة بيانات كبيرة من النص المكتوب (الكتب والمقالات الإخبارية وغيرها). يمكنك التخلص من النسخ التي تبدو أقل احتمالًا أن تكون حقيقية وتحافظ على النسخ التي تبدو أكثر واقعية.

من النسخ الممكنة لدينا "Hello" و "Hullo" و "Aullo" ، من الواضح أن "Hello" سوف تظهر بشكل متكرر أكثر في قاعدة بيانات للنص (ناهيك عن بيانات التدريب الأصلية المستندة إلى الصوت) ، وبالتالي ربما تكون صحيحة. لذلك سوف نختار "Hello" كنسخنا النهائي بدلاً من النسخ الأخرى. منجز!

انتظر لحظة!

قد تفكر "لكن ماذا لو قال أحدهم" هولو "؟ إنها كلمة صالحة. ربما "مرحبا" هو النسخ الخاطئ! "

بالطبع من الممكن أن يكون شخص ما قد قال فعليًا "Hullo" بدلاً من "Hello". لكن نظام التعرف على الكلام مثل هذا (المدرّب على اللغة الإنجليزية الأمريكية) لن ينتج أبدًا "Hullo" كنسخ إنه أمر غير محتمل أن يقوله المستخدم مقارنةً بـ "مرحبًا" ، حيث ستظن دائمًا أنك تقول "مرحبًا" بغض النظر عن مدى تركيزك على صوت "U".

حاول! إذا تم ضبط هاتفك على اللغة الإنجليزية الأمريكية ، فحاول الحصول على المساعد الرقمي لهاتفك للتعرف على العالم "Hullo". لا يمكنك! إنه يرفض! سوف تفهمها دائمًا باسم "Hello".

عدم الاعتراف بـ "Hullo" هو سلوك معقول ، ولكن في بعض الأحيان ستجد حالات مزعجة حيث يرفض هاتفك فقط فهم شيء صحيح تقوله. لهذا السبب يتم دائمًا إعادة تدريب نماذج التعرف على الكلام هذه مع مزيد من البيانات لإصلاح هذه الحواف.

هل يمكنني بناء نظام التعرف على الكلام الخاص بي؟

واحدة من أروع الأشياء حول التعلم الآلي هي كم هو بسيط في بعض الأحيان. يمكنك الحصول على مجموعة من البيانات ، وإدخالها في خوارزمية للتعلم الآلي ، ثم بطريقة سحرية لديك نظام AI من الطراز العالمي يعمل على بطاقة الفيديو الخاصة بالألعاب المحمولة ... أليس كذلك؟

هذا صحيح في بعض الحالات ، ولكن ليس من أجل الكلام. التعرف على الكلام هو مشكلة صعبة. يجب عليك التغلب على التحديات التي لا حدود لها تقريبًا: الميكروفونات ذات الجودة الرديئة ، ضجيج الخلفية ، تردد الصدى ، صيغ اللهجة ، وتشغيلها. كل هذه المشكلات يجب أن تكون موجودة في بيانات التدريب الخاصة بك للتأكد من أن الشبكة العصبية يمكنها التعامل معها.

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

لبناء نظام التعرف على الصوت الذي يعمل على مستوى Siri أو Google Now! أو Alexa ، ستحتاج إلى الكثير من بيانات التدريب - بيانات أكثر بكثير مما يمكنك الحصول عليه على الأرجح دون توظيف مئات الأشخاص لتسجيله لك. ونظرًا لأن المستخدمين لديهم قدرة منخفضة على التسامح مع أنظمة التعرف على الصوت الرديئة ، فلن تتمكن من ذلك. لا أحد يريد نظام التعرف على الصوت الذي يعمل 80 ٪ من الوقت.

بالنسبة لشركة مثل Google أو Amazon ، فإن مئات الآلاف من ساعات الصوت المحكي المسجلة في مواقف واقعية هي من الذهب. هذا هو الشيء الوحيد الذي يفصل نظام التعرف على الكلام ذي المستوى العالمي عن نظام هوايتك. بيت القصيد من وضع جوجل الآن! و Siri على كل هاتف خلوي مجانًا أو بيع وحدات Alexa بقيمة 50 دولارًا وليس لها رسوم اشتراك ، هو جعلك تستخدمها قدر الإمكان. يتم تسجيل كل شيء تقوله في أحد هذه الأنظمة إلى الأبد ويستخدم كبيانات تدريب للإصدارات المستقبلية من خوارزميات التعرف على الكلام. هذه هي اللعبة كلها!

لا تصدقني إذا كان لديك هاتف يعمل بنظام Android مع Google Now! ، فانقر هنا للاستماع إلى التسجيلات الفعلية لنفسك مع ذكر كل شيء غبي قلته من قبل:

يمكنك الوصول إلى نفس الشيء بالنسبة إلى Amazon عبر تطبيق Alexa. لا تسمح لك Apple للأسف بالوصول إلى بيانات Siri الصوتية الخاصة بك.

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

أين تتعلم أكثر

  • تسمى الخوارزمية (تقريبًا) الموضحة هنا للتعامل مع الصوت ذي الطول المتغير Connectionist Temporal Classification أو CTC. يمكنك قراءة الورقة الأصلية من عام 2006.
  • قدم آدم كوتس من بايدو عرضًا تقديميًا رائعًا حول التعلم العميق للتعرف على الكلام في مدرسة باي ديب للتعلم العميق. يمكنك مشاهدة الفيديو على YouTube (يبدأ حديثه الساعة 3:51:00). ينصح به بشده.

إذا أعجبك هذا المقال ، فالرجاء التفكير في الاشتراك في My Machine Learning is Fun! قائمة الايميلات. لن أرسل لك بريدًا إلكترونيًا إلا عندما يكون لدي شيء جديد وممتاز للمشاركة. إنها أفضل طريقة لمعرفة متى أكتب مقالات مثل هذا.

يمكنك أيضًا متابعتني على Twitter علىageitgey ، أو إرسال بريد إلكتروني إلي مباشرة أو العثور على linkin. أحب أن أسمع منك إذا كنت أستطيع مساعدتك أو مع فريقك في التعلم الآلي.

انتقل الآن إلى التعلم الآلي هو متعة! الجزء 7!