بناء روبوت محادثة
تعرف على أساسيات إنشاء روبوت محادثة، بدءًا من التفاعلات القائمة على القواعد وحتى التعلم الديناميكي.
لقد استكشفنا كيفية إنشاء روبوتات دردشة متخصصة: روبوت ساعة قائم على قواعد، وآلة حاسبة تعمل بالذكاء الاصطناعي. لكلٍّ منهما غرض فريد، لكن له حدوده الخاصة. الآن، نتعمق في جوهر تطوير روبوتات الدردشة - روبوت دردشة محادثة قادر على التعلم والاستجابة ديناميكيًا لمدخلات المستخدم.
روبوت المحادثة ليس مجرد أداة؛ بل تجربة. تخيّل أنك تسأل روبوتًا: "كيف حال الطقس؟" أو "أخبرني نكتة"، وتحصل على إجابات ذات معنى وواقعية. هذا ما بناء اليوم (أو على الأقل نسخة بسيطة جدًا). لنستكشف العلم الكامن وراءه خطوة بخطوة.
ما الذي يجعل برنامج المحادثة الآلي محادثة؟
بخلاف روبوتاتنا السابقة، صُمم روبوت المحادثة التفاعلي لإشراك المستخدمين في حوار سلس. لم يعد الأمر يتعلق باستفسارات فردية أو قواعد صارمة؛ بل يتعلق بالفهم والسياق والتعلم. إليك ما يميزه:
التعلم الديناميكي: التعلم الديناميكي هو ما يمنح روبوت المحادثة ذكاءه. فبدلاً من الاعتماد كليًا على الردود المبرمجة مسبقًا، يتعلم روبوت المحادثة من تفاعلات المستخدم. هذا يعني أن كل محادثة تُمثل فرصة للروبوت لتحسين فهمه وتقديم إجابات أفضل في المستقبل. عندما يسأل المستخدم سؤالًا لا يعرفه الروبوت، مثل "ما لونك المفضل؟"، قد يُجيب بـ "لا أعرف". ولكن إذا درّبته على الإجابة "أزرق"، فسيخزن هذه المعلومات. في المرة التالية التي يسأل فيها شخص ما السؤال نفسه، يجب أن يتذكر الروبوت الإجابة ويجيب بدقة: "لوني المفضل هو الأزرق".
أفضل الإجابات المتطابقة: لا يعتمد روبوت المحادثة على التطابق التام بين استفسارات المستخدم وردوده. بل يستخدم خوارزميات التعلم الآلي لإيجاد أقرب تطابق لأي إدخال، حتى لو اختلفت صياغته. تُحدث هذه المرونة نقلة نوعية في التفاعلات الطبيعية. على سبيل المثال، عندما تسأل "ما هو حاصل جمع 2 + 2؟" ثم "حل 2 + 2"، يتعرف الروبوت على هذين السؤالين على أنهما السؤال نفسه. يصعب التنبؤ بكيفية صياغة البشر للأسئلة. قد يفشل الروبوت الجامد عند مواجهة الاختلافات، لكن روبوت المحادثة يزدهر بفضل هذا التنوع. يمكن للروبوت التعامل مع المحادثات الواقعية بفعالية أكبر من خلال التركيز على المعنى بدلاً من الصياغة الدقيقة.
التدريب المُخصّص: لا يوجد حل واحد يناسب الجميع، وخاصةً الذكاء الاصطناعي المُحادثي. يُتيح لك التدريب المُخصّص تخصيص روبوت المحادثة لمجالات أو فئات مُحددة، مما يجعله أكثر فعاليةً لحالة استخدامك المُحددة. يُمكننا تدريب الروبوت باستخدام مجموعات بيانات مُخصّصة مُلائمة لمجال عملك. تخيّل هذا كتدريب موظف. قد يكون الموظف الجديد مُلِمًّا بمهارات مكتبية أساسية، ولكن إذا كان يعمل في مجال المالية، فستُدرّبه على التعامل مع جداول البيانات والميزانيات والمهام المحاسبية. وبالمثل، يُؤهّل التدريب المُخصّص روبوت المحادثة الخاص بك للتفوق في سيناريوهات مُحددة.
كيفية إنشاء روبوت محادثة
يتضمن بناء روبوت محادثة عدة مكونات أساسية، كل منها أساسي لجعل الروبوت تفاعليًا وديناميكيًا وذكيًا. لنستكشف هذه المكونات خطوة بخطوة:
الخطوة الأولى في إنشاء روبوت المحادثة هي تحديد شخصيته وهدفه وقدراته على المعالجة. تسمية الروبوت تُضفي عليه لمسة شخصية - سيُطلق على روبوتنا في هذا الدرس اسم EduBot . تنبع قوته العقلية من محولات منطقية، تختار استجابة الأنسب لاستفسارات المستخدم:
في الكود أعلاه:
الخط 7: لجعل الروبوت ديناميكيًا وقابلًا للتكيف، قمنا بتعيين
read_only = False، مما يمكّنه من التعلم وتخزين الاستجابات أثناء التفاعلات، مما يضمن تطوره مع كل محادثة.السطر 8: سوف نستخدم ChatterBot
BestMatchمحول منطقي للتعامل بمرونة مع المدخلات المختلفة.الخط 9:
storage_adapterيسمح للبوت بتخزين الاستجابات المُكتسبة باستمرار. في هذه الحالة، نستخدمSQLStorageAdapter، والذي يحفظ البيانات في قاعدة بيانات SQLite ، مما يضمن احتفاظ الروبوت بما تعلمه حتى بعد إعادة التشغيل.
بعد ذلك، لإعطاء EduBot أساسًا متينًا، نبدأ بتدريبه باستخدام مجموعة بيانات عامة. ولكن كيف ندرب روبوت المحادثة؟ تستجيب مجموعات البيانات المُحمّلة مسبقًا، مثل مجموعة بيانات ChatterBot الإنجليزية، لمواضيع شائعة مثل التحية، والمعرفة الأساسية، والأحاديث الجانبية. تُمكّن هذه الخطوة الروبوت من التعامل مع الاستفسارات العامة، مما يجعله جاهزًا لتفاعلات واسعة النطاق.
في الكود أعلاه:
السطرين 2-3:
ChatterBotCorpusTrainerيوفر مجموعات بيانات محملة مسبقًا، مثل التحيات، والأحاديث القصيرة، والعبارات الشائعة، للتدريب الأساسي.الخط الرابع:
train("chatterbot.corpus.english")يُحمّل مجموعةً واسعةً من النصوص الإنجليزية، تغطي مجموعةً واسعةً من مواضيع المحادثة، لجعل الروبوت متعدد الاستخدامات. تُزوّد هذه الخطوة الروبوت بالمعرفة العامة، مما يضمن قدرته على التعامل مع المحادثات الأساسية، مثل التحية أو الأسئلة البسيطة.
نعلم أن التدريب العام مفيد، ولكن ماذا لو احتاج روبوت الدردشة الخاص بنا إلى التخصص؟ يتيح لنا التدريب المخصص تعليم EduBot أزواجًا محددة من الأسئلة والأجوبة مصممة خصيصًا لاحتياجاتك. على سبيل المثال، يمكننا تدريبه على الإجابة على الأسئلة الشائعة التنظيمية أو الرد بنكات فكاهية.custom_train تعمل الوظيفة على تعليم الروبوت أزواج الأسئلة والأجوبة المحددة، وتخصيصها لمجال أو جمهور معين.
def custom_train(Bot, conversation):from chatterbot.trainers import ListTrainer # Import the list-based trainer classtrainer = ListTrainer(Bot) # Initialize the trainer with the bottrainer.train(conversation) # Train the bot with the custom conversation list
في الكود أعلاه:
السطرين 2-3:
ListTrainerهو مُدرِّب يستخدم قوائم Python إدخال. يُمثِّل كل عنصر من عناصر القائمة جزءًا من محادثة.الخط الرابع:
conversationالمعلمة عبارة عن قائمة تحتوي على أزواج الأسئلة والأجوبة.
بمجرد إنشائه وتدريبه، يدخل EduBot مرحلته الأكثر إثارة: التفاعلات الواقعية. يستمع البوت باستمرار إلى إدخال المستخدم، ويُنشئ ردودًا ديناميكية، ويتذكر ما يتعلمه أثناء المحادثة. كما يخرج بسلاسة عندما يُعلن المستخدمون انتهاء المحادثة بعبارات مثل"bye" .
# Start and interact with the chatbotdef start_chatbot(Bot):print('\033c') # Clear the terminal screenprint("Hello, I am EduBot. How can I assist you today?")bye_list = ["bye", "goodbye", "exit"] # Define exit phraseswhile True:user_input = input("You: ") # Take user inputif user_input.lower() in bye_list: # Check if the user wants to exitprint("EduBot: Goodbye! Have a great day!")breakresponse = Bot.get_response(user_input) # Generate a responseprint("EduBot:", response) # Display the bot’s response
في الكود أعلاه:
السطر 3: يؤدي هذا إلى مسح شاشة المحطة الطرفية للحصول على بداية نظيفة.
السطر 5: هذه قائمة محددة مسبقًا من عبارات الخروج؛ عندما يتم التطابق، ينهي الروبوت الجلسة بسلاسة.
الأسطر 7-11: تلتقط هذه الأسطر إدخال المستخدم بشكل ديناميكي أثناء المحادثة.
السطرين 13-14: يقوم الروبوت بمعالجة إدخال المستخدم وإنشاء استجابة ذات صلة باستخدام محولات المنطق وبيانات التدريب.
تعمل هذه الوظيفة على تمكين التفاعلات في الوقت الفعلي، مما يسمح للمستخدمين باختبار تدريب الروبوت وسلوكه بشكل ديناميكي.
تدفق تنفيذ برنامج المحادثة الآلي
يتم تضمين جميع الوظائف المتعلقة ببرنامج المحادثة الآلية، بما في ذلك إنشاء برنامج المحادثة الآلية وتدريبه وتشغيله، فيfunctions.py الملف، في حينmain.py يُعد الملف نقطة دخول للتنفيذ. يُعد هذا الفصل بين الاهتمامات ممارسة برمجة مقبولة على نطاق واسع، مما يُحسّن سهولة قراءة الكود وصيانته وإعادة استخدامه. من خلال عزل المنطق فيfunctions.py يمكننا إجراء تحديثات أو إضافة ميزات جديدة دون تعديل نص التنفيذ. وبالمثل،main.py يركز فقط على تنظيم سير العمل، والحفاظ على التنفيذ مبسطًا وسهل المتابعة.
في الكود أعلاه:
السطر 1: يقوم هذا باستيراد الوظائف المحددة في
functions.pyللوصول إلى منطق الدردشة الآلية.السطر 4: يتم تهيئة روبوت المحادثة بالاسم
EduBotاستخدامcreate_bot، تم تكوينه للتعلم والاستجابة بشكل ديناميكي.الخط 7: يتم تدريبه باستخدام مجموعة بيانات عامة عبر
train_all_dataللتعامل مع الاستفسارات الشائعة.الأسطر 10-14: بالإضافة إلى ذلك، يتم تدريب الروبوت باستخدام بيانات مخصصة باستخدام
custom_train، وتزويده بالمعرفة الخاصة بالمجال - على سبيل المثال، الإجابة"What is Educative?"مع"An Online Learning Platform!".السطر 17: وأخيرًا،
start_chatbotيقوم بتشغيل الروبوت في وضع تفاعلي حيث يستمع ويتعلم ويستجيب لمدخلات المستخدم في الوقت الفعلي.
يتيح هذا الهيكل المعياري للمستخدمين التركيز على تخصيص روبوت المحادثة الخاص بهم واختباره دون الخوض في التعقيدات الكامنة. هيا بنا نجرب ونشهد كيف يعمل روبوت المحادثة الخاص بنا!
# function to create the chatbot
# we have the read_only to false so the chatbot learns from the user input as
def create_bot(name):
from chatterbot import ChatBot
Bot = ChatBot(name = name,
read_only = False,
logic_adapters = ["chatterbot.logic.BestMatch"],
storage_adapter = "chatterbot.storage.SQLStorageAdapter")
return Bot
# function to train the bot with a variety of topics
# the language we have chosen is english
# we can train the bot for other languages as well
def train_all_data(Bot):
from chatterbot.trainers import ChatterBotCorpusTrainer
corpus_trainer = ChatterBotCorpusTrainer(Bot)
corpus_trainer.train("chatterbot.corpus.english")
# function to train the bot with custom data
# it uses ListTrainer to train data from lists
def custom_train(Bot, conversation):
from chatterbot.trainers import ListTrainer
trainer = ListTrainer(Bot)
trainer.train(conversation)
# function to start and take responses from the chatbot
# the chatbot stays running unless a word is typed from the bye_list
def start_chatbot(Bot):
print('\033c')
print("Hello, I am Edubot. How can I help you")
bye_list = ["bye edubot", "bye", "good bye"]
while (True):
user_input = input("me: ")
if user_input.lower() in bye_list:
print("Edubot: Good bye and have a blessed day!")
break
response = Bot.get_response(user_input)
print("Edubot:", response)هل هذا الروبوت الدردشة ذكي حقا؟
أحيانًا، قد تبدو الدردشة مع روبوتنا أشبه بالتحدث إلى طفل صغير يتعلم ربط الجمل - يحاول، لكنه أحيانًا يُلقي بكلام غير مفهوم يجعلك تحك رأسك. اسأله شيئًا غير متوقع، وقد تحصل على استجابة ذات معنى، تمامًا مثل كعكة الحظ التي تتنبأ بطقس الغد. ليس الأمر مثاليًا، لكنه في الواقع عملية تعلم!
روبوت الدردشة الخاص بنا ليس نظام ذكاء اصطناعي توليدي متقدم. فهو يفتقر إلى الوعي السياقي ، ما يعني أنه لن يستوعب الفروق الدقيقة العميقة أو يتعامل مع استفسارات معقدة مثل "كيف حال الطقس في باريس؟" إلا إذا تم تدريبه صراحةً على مثل هذه السيناريوهات. كما أن تعلمه بسيط للغاية؛ إذ يحفظ الروبوت المدخلات والمخرجات الدقيقة دون القدرة على التعميم أو الاستدلال بما يتجاوز تدريبه. علاوة على ذلك، فإن فهمه محدود - فهو يعالج إدخال كسلاسل وأنماط بسيطة، مفتقرًا إلى قدرات الاستدلال الموجودة في نماذج اللغات الكبيرة المتطورة (LLMs) مثل GPT.
مع ذلك، ورغم محدوديته، يُعدّ هذا الروبوت المحادثة أداةً أساسيةً ممتازةً لتعلم الذكاء الاصطناعي التحادثي. فهو يُساعد على توضيح المفاهيم الأساسية، مثل مجموعات بيانات التدريب، وتوليد استجابة ، والتعلم الديناميكي. علاوةً على ذلك، تُتيح لك قابلية تخصيصه تخصيصه لمجالات مُحددة، سواءً للأسئلة الشائعة، أو الأدوات التعليمية، أو روبوتات خدمة العملاء البسيطة. وأخيرًا، يُسهّل بساطته استخدامه - فعلى عكس برامج الماجستير في القانون (LLM)، لا يتطلب موارد حاسوبية ضخمة أو إعدادات مُعقدة، مما يُمكّنك من التركيز على فهم الأساسيات دون أي تبعيات خارجية.
حقيقة مثيرة للاهتمام: " وادي الغرابة" ظاهرةٌ تظهر فيها كائناتٌ بشريةٌ تشبه الإنسان الحقيقي تقريبًا، ولكن ليس تمامًا، مما يُسبب شعورًا بعدم الارتياح. يهدف المطورون إلى تصميم روبوتات دردشةٍ ودودةٍ وسهلة التواصل دون إثارة هذا التأثير.
مع تقدمك، ستكون هذه الأساسيات بمثابة حجر الأساس لأنظمة روبوتات الدردشة الأكثر تعقيدًا وذكاءً. هل أنت مستعد للخطوة التالية؟ لنواصل البناء!