بوت صوتي + مهاتفة على مصدر مفتوح بالكامل. الجزء 1 - إنشاء وتدريب روبوت نصي RU



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



  1. التعرف على الصوت ASR.
  2. توضيح معنى ما قيل والبحث عن الكيانات اللازمة في النص (على سبيل المثال ، العنوان ، المبلغ ، الاسم الكامل ، إلخ)
  3. توليد استجابة وتحويل النص إلى كلام TTS. سننتقل من مسار إنشاء روبوت نصي بسيط إلى التكامل مع نظام الاتصال الهاتفي freeswitch مع التعرف على الصوت والتعليق الصوتي للردود المعدة. توضح هذه المقالة الأدوات المستخدمة وطريقة دمجها معًا لإنشاء روبوت صوتي.


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



مثال على محادثة B-bot W-man



:       
:
: 

:    ?
: 

:  ?
:?     

:
:  


القليل من النظرية



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



على سبيل المثال



النية: قل مرحبًا

العبارات المحتملة: مرحبًا ، مساء الخير ، مجانية ...

الإجابة: مرحبًا



النية: قل وداعًا

العبارات الممكنة: إلى اللقاء ، إلى اللقاء ، الوداع ...

الجواب: إلى اللقاء



الخطوة 1: المعالجة المسبقة لمجموعة البيانات



يعتمد على مجموعة بيانات من تدريب المهارات المفتوحة لكتابة روبوت محادثة في البرقيات التي يمكنها التحدث إليك عن الأفلام. لا يمكنني نشرها لأسباب واضحة.

تعتبر المعالجة المسبقة خطوة مهمة للغاية.



تتمثل الخطوة الأولى في إزالة جميع الرموز والأرقام من النص وإحضار كل شيء إلى أحرف صغيرة.



بعد ذلك ، تحتاج إلى تصحيح الأخطاء المطبعية في الكلمات.



 - 


هذه المهمة ليست سهلة ، فهناك أداة جيدة من Yandex تسمى Speller ، لكنها محدودة في عدد الطلبات في اليوم ، لذلك سنبحث عن بدائل مجانية.بالنسبة للبايثون ، توجد

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



N-grams هي أجزاء من كلمات حرف n. على سبيل المثال ، 3 جرام لكلمة hello ستكون

في ، ريف ، صفصاف ، طبيب بيطري. سيساعدك هذا في تقليل اعتمادك على الأخطاء الإملائية وزيادة دقة التعرف.



بعد ذلك ، تحتاج إلى إعادة الكلمات إلى شكلها الطبيعي ، ما يسمى بعملية lemmatization.



  -  


تعتبر مكتبة القواعد مناسبة تمامًا لهذه المهمة .



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



الخطوة 2: تحويل مجموعة البيانات إلى نموذج مفهوم لـ NN



أولاً ، تحتاج إلى إنشاء قاموس لجميع الكلمات في مجموعة البيانات.



لتدريب النموذج ، تحتاج إلى ترجمة كل الكلمات إلى واحد HotVector

هذه مصفوفة تساوي طول قاموس الكلمات ، حيث تكون جميع القيم مساوية لـ 0 وواحدة فقط تساوي 1 في موضع الكلمة في القاموس.



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



يجب أن تتطابق كل عبارة إدخال مع نية مناسبة في نفس تنسيق HotVector - هذا هو ناتج y_train.



الخطوة 3: إنشاء النموذج



بالنسبة إلى روبوت صغير ، يكفي نموذج صغير بطبقتين lstm وطبقتين متصلتين بالكامل:



model = Sequential()
model.add(LSTM(64,return_sequences=True,input_shape=(description_length, num_encoder_tokens)))
model.add(LSTM(32))
model.add(Dropout(0.25))
model.add(Dense(1024, activation='relu'))
model.add(Dropout(0.25))
model.add(Dense(len(set(y)), activation='softmax'))


نقوم بتجميع النموذج واختيار مُحسِّن ، واخترت آدم لأنه أعطى أفضل نتيجة.



الخطوة 4: تدريب النموذج



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



الخطوة 5: محاولة التحدث إلى الروبوت الخاص بنا



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



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



np.argmax(results)


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



بعد ذلك ، من قائمة نوايانا ، نختار الإجابة المناسبة ونعطيها للمستخدم



PS: يمكن تدريب النموذج ليس فقط على أساس الكلمات ، ولكن أيضًا من خلال تقسيم العبارات إلى أحرف أو n-grams ، وفي هذه الحالة ستكون هناك حاجة إلى نموذج أكثر جدية.



model = Sequential()
model.add(LSTM(512,return_sequences=True,input_shape=(description_length, num_encoder_tokens)))
model.add(LSTM(256))
model.add(Dropout(0.25))
model.add(Dense(len(set(y)), activation='softmax'))



All Articles