النّظام الخبير (Expert System)

التدّقيق العلمي: د. م. دانيا صغير، م. محمّد سرميني
التدّقيق اللّغوي: هبة الله فلّاحة

المقدّمة:

عمليّة الحصول على المعرفة (knowledge) أو المهارة من خلال العمل أو الرّؤية والملاحظة أو حتّى الشّعور بالأشياء، تندرج تحت مسمّى الخبرة (Experienceوالشّخص الخبير (Expert) من لديه مستوًى عالٍ من تلك المعرفة أو المهارة المتعلّقة بمجالٍ معيّنٍ.

إذًا، هل يا ترى سيطر علينا الفضول لوهلةٍ إزاء هذه المصطلحات لقيادة أطراف حديثٍ شيّقٍ محفّزٍ للخيال والإبداع، من أجل القيام بمحاكاة عمليّة صنع القرار لخبيرٍ بشريٍّ باستخدام أجهزة الحاسب والرّوبوتات الشّائعة؟!

هذا ما سنتعرّف عليه في مقالتنا اليوم من خلال تسليط الضّوء على مفهوم “النّظم الخبيرة ” وتداعيات ظهورها، والمكوّنات الرّئيسيّة والأساسيّة لبناء أيّ نظامٍ خبيرٍ، مع طرح بعض الأمثلة النّظريّة لنظمٍ خبيرةٍ في مجالاتٍ ومواضيع معيّنةٍ.

1- النّظام الخبير Expert System:

وجِدت النّظم الخبيرة لمساعدة البشر أو المنظّمات في إصدار أحكامهم والقيام بالمهام السّلوكيّة، حيث أنّها تحتفظ بالمعلومات (information) في قاعدة المعرفة (knowledge base) لاستخدامها لاحقًا بحلّ مشاكل المستخدم وقضايا العالم الحقيقيّ وكلّ هذا بكفاءةٍ وذكاءٍ عاليين [1].

لقد تمّ تقديم مفهوم النّظم الخبيرة في الذّكاء الاصطناعيّ في جامعة ستانفورد  (Stanford university) قسم علوم الحاسب من قبل  (Edward Feigenbaum) الملقّب بأب النّظم الخبيرة (father of AI expert systems).

إذًا فالنّظام الخبير هو برنامج ذكاءٍ اصطناعيٍّ صُمّم وطُوّر من أجل حلّ المشاكل المعقّدة في مجالٍ معيّنٍ مثل الطّبّ، العلوم، الهندسة وغيرها الكثير، ودعم القدرة على اتّخاذ القرار الصّائب تمامًا مثل الخبير البشريّ وذلك من خلال استخراج المعرفة من قاعدة المعرفة باستخدام قواعد الاستدلال (inference rules) _الممثّلة على أنّها قواعد إذا_ فإنّ (if_then rules) _اعتمادًا على طلبات واستفسارات المستخدم [3].

بالطّبع أداء أيّ نظامٍ خبيرٍ يعتمد على معرفة الخبير المخزّنة في قاعدة المعرفة (KB)، فكلّما زادت هذه المعرفة المخزّنة، كلّما زاد وتحسّن أداء النّظام، ومن أشهر الأمثلة الشّائعة على نظامٍ خبيرٍ (ES)، اقتراح الأخطاء الإملائيّة أثناء الكتابة في مربّع بحث جوجل (Google).

ومن الجدير ذكره عزيزي القارئ الإشارة إلى أنّ النّظام الخبير لا يستخدم ليحلّ محلّ الخبراء البشريّين، وإنّما يتمّ استخدامه ليمدّ يد العون للإنسان لمساعدته في اتّخاذ قرارٍ معقّدٍ، حيث أنّه لا يمتلك قدراتٍ بشريّةٍ في التّفكير بل يعمل على أساس قاعدة المعرفة (knowledge base) المخصّصة لمجالٍ معيّنٍ [1].

2- سبب الحاجة للأنظمة الخبيرة:

هناك العديد من الأسباب الّتي تجعلنا بأمسّ الحاجة والطّلب لهذه النّظم الخبيرة وسنعرضها كالآتي:

  • قدرتها الهائلة على تخزين البيانات مع عدم وجود قيودٍ على الذّاكرة.
  • أخذها بعين الاعتبار كلّ الحقائق (facts) في التّعامل مع موقفٍ معيّنٍ.
  • غنى هذه النّظم بالخبرة والمهارة في مجالٍ معيّنٍ.
  • الكفاءة الرّائعة والاستثنائيّة الّتي تقدّمها.
  • تحديثات النّظام المنتظمة والدّائمة.
  • عدم تحيّزها وتأثّرها بالمشاعر [1].

3- خصائص النّظام الخبير: 

  • الخبير البشريّ يمكن أن يتغيّر، في حين أنّ النّظام الخبير قد يستمرّ ويدوم للأبد [1] [3].
  • يسهّل النّظام الخبير توزيع الخبرات البشريّة.
  • يعتبر النّظام الخبير عالي الاستجابة بفضل الإجابة الّتي يقدّمها للمستخدم حول أيّ استعلامٍ معقّدٍ وذلك في غضون ثوانٍ.
  • يعمل النّظام الخبير على مزج ودمج المعرفة (Knowledge) من عدّة خبراءٍ بشريّين وهذا من شأنه زيادة فعاليّة ودقّة الإجابات المتعلّقة بطلبات المستخدمين.
  • يقلّل النّظام الخبير من تكلفة طلب الحصول على نصيحةٍ من خبيرٍ بشريٍّ؛ في مختلف المجالات ومن ضمنها التّشخيص الطّبّيّ.
  • امتلاك النّظام الخبير القدرة على التّعامل مع القضايا المعقّدة من خلال استنتاج حقائق جديدةٍ من قاعدة المعرفة، والّتي من المعتاد تمثيل المعارف بداخلها كما أسلفنا سابقًا بقواعد إذا_فإنّ (if_then rules).

4- العناصر البشريّة الأساسيّة لتصميم النّظام الخبير:

تتمثّل هذه العناصر في تحديد الأشخاص الّذين سيشاركون في تصميم وبناء وتطوير النّظام وهم:

  • مهندس المعرفة (Knowledge Engineer): يحتلّ مهندس المعرفة الدّور الرّئيسيّ في أيّ برنامجٍ لإدارة المعرفة، حيث يركّز على تحليل عمليّة صنع القرار المعقّدة الّتي يتمّ تطبيقها من قبل الخبراء ويقوم يجمع المعرفة منهم، ثمّ يعمل على تحويلها إلى قواعد وإرشاداتٍ يستطيع فيها الأشخاص ذوي الخبرة الأقلّ استخدامها.
  • الخبير في مجال المشكلة (Domain Expert): هو شخصٌ لديه من المعرفة أو المهارات في مجالٍ معيّنٍ ما يجعله خبيرًا وطنيًّا به، على سبيل المثال لا الحصر يعتبر المحاسب خبيرًا في مجال المحاسبة.
  • المستخدم النّهائيّ (End User): هو شخصٌ أو مجموعةٌ من الأفراد (ليسوا بالضرورة اختصاصيّين) الّذين يستخدمون ويتفاعلون مع النّظام الخبير وذلك للحصول على حلٍ أونصيحةٍ ومشورةٍ _الّتي لن يتمّ تزويدها من قبل الخبير البشريّ_ لأجل أسئلتهم المعقّدة  [1] [3].

5- مكوّنات النّظام الخبير:

يتألّف النّظام الخبير من ثلاثة أجزاءٍ رئيسيّةٍ هامّةٍ وهي موضّحةٌ وفق الشّكل (1) ضمن المرجع [2]:

بالإضافة إلى جزأين آخرين هما:

الشّكل (1): معماريّة النّظام الخبير [2].

1-5- قاعدة المعرفة (Knowledge Base):

إنّ البيانات والمعلومات والخبرات السّابقة تتضافر مع بعضها لتشكّل ما يعرف بالمعرفة (knowledge).

 أمّا قاعدة المعرفة هي نوعٌ من التّخزين الّذي يحتفظ  بجميع المعلومات المجمّعة من عدّة خبراءٍ واختصاصيّين في موضوعٍ معيّنٍ، أي يمكن النّظر إليها وكأنّها مستودعٌ  كبيرٌ للمعرفة، حيث أنّ مدى فعّاليّة النّظام الخبير تتوقّف على قاعدة المعرفة الخاصّة به بالإضافة إلى دقّة المعلومات المخزّنة فيه [1].

وقاعدة المعرفة هذه بدورها تتألّف من عدّة مكوّناتٍ نستطيع إيضاحها وفق التّالي:

  1. المعرفة الواقعيّة (Factual knowledge): وهي المعرفة الّتي يتمّ قبولها من قبل خبراء المجال ومهندسي المعرفة، وترتكز بشكلٍ أساسيٍّ على الحقائق (facts) و القواعد (rules). 
  2. المعرفة الحدسيّة (Heuristic Knowledge): وهي المعرفة الّتي تعتمد على الممارسة والقدرة على التّخمين والتّقييم والخبرات.
  3. تمثيل المعرفة (Knowledge Representation): وهي الطّريقة الّتي تُخزَّن وتنظَّم من خلالها المعرفة لإضفاء صياغةٍ وشكلٍ وطابعٍ رسميٍّ عليها، وهذه التّقنيّة المتّبعة تُلخّص في شكل قواعد إذا_فإنّ (If_then rules).
  4. اكتساب المعرفة (Knowledge Acquisition): تتمّ من خلال حصول مهندس المعرفة على بياناتٍ دقيقةٍ وصحيحةٍ من خبير المجال، عن طريق استخدامه لطرقٍ وأساليبٍ متنوّعةٍ، كالتّسجيل وإجراء المقابلات معه ومراقبته في العمل  [1] [3].

2-5- واجهة المستخدم (User Interface):

لكي يستطيع المستخدم التّواصل والتّفاعل مع النّظام الخبير، لابدّ من وجود واجهةٍ تفاعليّةٍ تأخذ طلبات المستخدم كدخلٍ للنّظام بصيغةٍ وتنسيقٍ قابلٍ للقراءة والفهم، ومن ثمّ تقوم بتمريره إلى محرّك الاستدلال (Inference Engine)، وبعد الحصول على استجابةٍ من المحرّك، تقوم الواجهة بعرض الخرج للمستخدم، أي يمكن اعتبارها مثل الجسر المساعد للتّواصل بين المستخدم غير الخبير والنّظام الخبير للعمل على إيجاد حلٍّ لاستفساره  [1] [3].

3-5- محرّك الاستدلال (Inference Engine):

يعرف أيضًا باسم محرّك الواجهة (Interface Engine)، يعمل وكأنّه دماغ النّظام الخبير لذلك يعتبر بمثابة وحدة المعالجة الرّئيسيّة ضمن النّظام، فهو يحتوي على قواعد من أجل حلّ مشكلةٍ معيّنةٍ أمّا المعرفة الخاصّة به تأتي من قاعدة المعرفة ليقوم باشتقاق نتيجةٍ أو استنتاج معلوماتٍ جديدةٍ  [1].

أضف إلى ذلك عزيزي القارئ أنّ محرّك الاستدلال يتمتّع أيضًا بقدراتٍ لها علاقةٌ بالتّفسير وتصحيح الأخطاء  [2].

بالطّبع تقسّم محرّكات الاستدلال أيضًا إلى نوعين هما:

  • محرّك الاستدلال الحتميّ (Deterministic Inference Engine): الاستنتاجات المستخلصة بواسطة هذا النّوع يفترض أنّها صحيحةٌ حيث يعتمد في آليّة عمله على الحقائق والقواعد.
  • محرّك الاستدلال الاحتماليّ (Probabilistic Inference Engine): في هذا النّوع نلاحظ أنّه يغلب طابع “عدم اليقين” (Uncertainty) على الاستنتاجات حيث يعتمد على الاحتمالات  [3].

ليستطيع محرّك الاستدلال اشتقاق الحلول يجب عليه اعتماد إحدى هاتين الاستراتيجيّتين واللّتين سنوضّحهما من خلال إنشاء الجدول (1) بأهمّ الفروق بينهما وذلك وفق المرجع [4]:

الجدول (1): مقارنةٌ بين السّلسلة الأماميّة والسّلسلة الخلفيّة [4].

السّلسلة الأماميّة (Forward Chaining)
السّلسلة الخلفيّة (Backward Chaining)
في هذه الاستراتيجيّة يأخذ محرّك الاستدلال بعين الاعتبار كلّ الحقائق والقواعد ثمّ يقوم بترتيبهم قبل الوصول إلى الحلّ ومشاركة الاستنتاج، حيث يعبَّر عنها في هذه الحالة بسلسلةٍ من المواقف والاشتقاقات للحصول على النّتيجة النّهائيّة لقضيّةٍ أو مشكلةٍ ما؛ مثل التّنبّؤ بحالة سوق الأسهم ومدى تأثيرها في تغيير أسعار الفائدة.في هذه الاستراتيجيّة يبدأ محرّك الاستدلال بالهدف (goal)، ثمّ يحدّد الشّروط (الحقائق) الّتي من الممكن أن تحدث في الماضي وتساعد في إثبات النّتيجة النّهائيّة، واكتشاف السّبب الكامن وراء حدوث شيءٍ ما.
على سبيل المثال، تشخيص أنواعٍ مختلفةٍ من السّرطان لدى البشر.
تعرف هذه التّقنيّة بأنّها مقادةٌ بالبيانات وذلك لأنّنا نصل إلى الهدف باستخدام البيانات المتوفّرة.تعرف هذه التّقنيّة بأنّها مقادةٌ بالأهداف؛ وذلك لأنّنا نبدأ من الهدف للوصول إلى الحالة الأوّليّة من أجل استخراج الحقائق.
نهجٌ متّبعٌ من الأسفل إلى الأعلى (bottom_up).نهجٌ متّبعٌ من الأعلى إلى الأسفل (top_down).
تطبّق استراتيجيّة البحث بالعرض أوّلًا.تطبّق استراتيجيّة البحث بالعمق أوّلًا.
هدفها هو الحصول على الاستنتاج.هدفها هو الحصول على الحقائق الممكنة أو البيانات المطلوبة.
تقنيّةٌ بطيئةٌ لأنّه يجب عليها استخدام جميع القواعد.تقنيّةٌ سريعةٌ لأنّه يجب عليها استخدام قواعد قليلةٍ فقط.
تعمل من الحالة الأوّليّة إلى القرار النّهائيّ.تعمل من الهدف لتصل للحالة الأوّليّة.
تستخدم من أجل التّخطيط، المراقبة، التّحكّم، التّفسير.تستخدم في محرّكات الاستدلال الآليّ، البراهين النّظريّة، مساعدي البرهان وتطبيقات الذّكاء الاصطناعيّ الأخرى.

4-5- وحدة التّعلّم واكتساب المعرفة (Knowledge Acquisition and learning module):

تكمن أهمّيّة هذا المكوّن من ناحية أنّه يسمح للأنظمة الخبيرة باكتساب المزيد من البيانات من مصادر عديدةٍ ومتنوّعةٍ ثمّ القيام بتخزينها في قاعدة المعرفة  [2] [3].

5-5- وحدة الشّرح والتّفسير (Explanation module):

كما يوحي لنا  اسم هذا المكوّن، فإنّه يساعد في تزويد المستخدم بشرحٍ حول النّتيجة الّتي توصّل إليها النّظام والّتي تمّ إنجازها  [2] [3]. 

6- أمثلةٌ شائعةٌ حول النّظم الخبيرة:

هناك العديد من الأمثلة حول النّظم الخبيرة….

إذًا هيّا بنا لنلقِ نظرة خاطفة على البعض منها: 

  • MYCIN: هو أحد أقدم النّظم الخبيرة الّتي اعتمدت على تقنيّة السّلسلة الخلفيّة؛ لديه القدرة في تحديد البكتيريا المختلفة الّتي تسبّب عدوًى وإصاباتٍ شديدةٍ، كما أنّه قادرٌ على التّوصية بالعقاقير اعتمادًا على وزن الشّخص، وأيضًا يعمل على حماية الأشخاص الذّين لديهم حساسيّةٌ من المضادات الحيويّة من البنسلين، ولديهم تاريخٌ من الأمراض الرّوماتيزميّة أو أمراض القلب الخلقيّة أو أمراض القلب الصّمّاميّة المكتسبة الأخرى [2] [3].
  • DENDRAL: هو نظام ذكاءٍ اصطناعيٍّ تمّ إنشاؤه كنظامٍ خبيرٍ في التّحليل الكيميائيّ (CAES=Chemical Analysis Expert System)، يستخدمه الكيميائيّون العضويّون من أجل العثور على جزيئاتٍ عضويّةٍ غير معروفةٍ باستخدام قاعدة المعرفة المختصّة بعلم الكيمياء [1].
  • CaDet: هو نظام دعمٍ تشخيصيٍّ للكشف عن  مرض السّرطان في مراحله الأوّليّة [2].
  • PXDES: هذا النّظام هو واحدٌ من الأمثلة عن النّظم الخبيرة الّتي تشارك في الكشف عن سرطان الرّئة بالأشعّة السّينيّة مع تحديد نوعه ودرجته؛ وذلك من خلال التقاط صورةٍ للجزء العلويّ من الجسم، حيث تساعد هذه المسحة في الكشف عن الضّرر [1].
  • DXplain: هو نظام دعمٍ سريريٍّ  قادرٌ على اقتراح مجموعةٍ متنوّعةٍ من الأمراض اعتمادًا على نتائج الطّبيب [2].
  • R1/XCON: هذا النّظام الخبير لديه القدرة على تحديد برنامجٍ معيّنٍ من أجل إنشاء نظامٍ حاسوبيٍّ حسب تفضيلات المستخدم  [2].

7- أمثلةٌ عمليّةٌ بسيطةٌ للتّعرّف على كيفيّة إنشاء الحقائق (facts) والقواعد (rules) واستخدام محرّك الاستدلال (inference engine) للمطابقة والاستنتاج:

بداية وقبل كلّ شيءٍ، يجب عليك عزيزي القارئ تحميل مكتبة بايثون للنّظم الخبيرة اكسبيرتا  (experta) _يمكن الاطّلاع عليها من خلال المرجع [5]- وهي المكتبة المسؤولة عن بناء النّظم الخبيرة والمستوحاة بقوّةٍ من (CLIPS) _ لغة برمجةٍ قائمةٌ على القواعد ومفيدةٌ في إنشاء نظمٍ خبيرةٍ وبرامج أخرى وتعتمد على منهج السّلسلة الأماميّة، ولمزيدٍ من المعلومات حولها يمكن الاطّلاع على المرجع [7] ضمن قائمة المراجع أدناه_ ويتمّ ذلك من خلال كتابة الأمر التّالي ضمن موجّه الأوامر:

كما نعلم فإنّ النّظام الخبير (ES) يعتمد بهيكليّة عمله على الحقائق (facts) و القواعد (rules لذلك سنقوم الآن بالتّطبيق العمليّ من أجل ترسيخ المفاهيم النّظريّة الّتي تمّ تداولها سابقًا والمساعدة في بناء نظامٍ خبيرٍ بسيطٍ لاحقًا، حيث أنّ هذه الشّيفرات البرمجيّة معتمدةٌ من المرجع [5].

حسب طبيعة النّظام، المعطيات، المعلومات وتشخيص الأعراض مثلًا لمريضٍ ما، يتمّ تعريف الحقائق بعدّة طرقٍ:

الطّريقة الأولى: من خلال استيراد كلّ شيءٍ موجودٍ ضمن مكتبة اكسبيرتا (experta) ثمّ استدعاء باني الصّنف (Fact) المعرّف مسبقًا فيها وتمرير الحقائق المراد تعريفها كمعاملاتٍ للصّنف بشكل مفتاح_قيمة (key_value)، وبعد ذلك يمكننا الوصول لتلك الحقائق عن طريق المفتاح الخاصّ بكلّ حقيقةٍ كالتّالي:

from experta import *
import numpy as np
# we will create fact depending on the key_values
# way 1
f=Fact(a=1,b=2)
f['a']

الطّريقة الثّانية: من خلال تمرير قيم الحقائق مباشرةً كمعاملاتٍ من دون مفاتيحٍ (keys) لباني الصّنف (Fact) وبالتّالي هذا الصّنف سينشئ فهارس رقميّةٍ للقيم الممرّرة من أجل سهولة الوصول إليها:

#create fact without keys(only values)
# This will create numeric index for your values
# way 2
f=Fact('x','y','z')
f[0]

يمكننا أيضّا الدّمج بين هاتين الطّريقتين، ولكن يجب علينا أوّلًا التّصريح عن القيم الرّقميّة ثمّ أزواج مفتاح_قيمة كما الآتي:

# we can merge numeric values with key_values
# but numeric values must be declared first
f=Fact('x','y','z',a=1,b=2)
# using index to access the fact
print(f[1],'',f['b'])

سننتقل الآن لكشف السّتار حول الطّريقة الثّالثة لكيفيّة تعريف حقائق خاصّةٍ بنا، وهذا يتمّ بكلّ بساطةٍ من خلال إنشاء صفوفٍ جديدةٍ (مثل Alert و Status) ترث الخصائص والطّرق المعرّفة في صنف الأب (Fact) ثمّ نقوم بأخذ أغراضٍ من هذه الصّفوف لتمرير الحقائق (red, critical) كمعاملاتٍ لها وطباعتها:

#define Facts
class Alert (Fact):
    """ The alert level!."""
    pass
class Status (Fact):
    """ The system status!."""
    pass
f1=Alert('red')
f2=Status('critical')
print(f1,'\n',f2)

إنّ النّظام الخبير في غالب الوقت يحتاج لمجموعةٍ من الحقائق المعرّفة بشكلٍ مسبقٍ يتمّ تقديمها له من أجل أن يعمل، وهذا هو الهدف الأساسيّ ل (DefFacts)-أي لايتمّ الاكتفاء بالتّصريح عن حقيقةٍ واحدةٍ لكي يعمل النّظام من خلال استدعاء دالّة (declare) على المحرّك (engine)، وإنّما نقوم عادةً بتعريف مجموعةٍ من الحقائق حسب حاجتنا وذلك إمّا باستدعاء باني الصّنف (Fact) أو أيّ صنفٍ آخر مخصّصٍ من قبلنا وتمرير الحقائق المضافة كمعاملاتٍ له- حيث نقوم بتعريف دالّة (needed_data) نضمّن فيها كلّ الحقائق الّتي نحتاجها للنّظام بحيث يتمّ إدخالها بشكلٍ اوتوماتيكيٍّ إليه في كلّ مرّةٍ نقوم فيها باستدعاء دالّة (reset) على المحرّك (engine).

قد تلاحظ عزيزي القارئ استخدام الكلمة المفتاحيّة (yield ) الّتي تستخدم عادة لإعادة أغراضٍ مولّدةٍ (objects) بدلًا من مجرّد إرجاع قيمٍ كما في حالتنا التّالية:

# DefFacts for a set of facts
@DefFacts()
def needed_data():
    yield Fact(best_color='red')
    yield Fact(best_body='medium')
    yield Fact(best_sweetness='dry')

بعد أن انتهينا من التّعرّف على طرق توليد حقائق النّظام الخبير في قاعدة البيانات (Data Base)، سنعطي أحقيّة الاهتمام والحديث الآن للقواعد (rules) الواجب إنشاؤها بصيغة إذا_ثمّ في قاعدة المعرفة (Knowledge Base).

القواعد بشكلٍ عامٍ في مكتبة اكسبيرتا (experta) قابلة للاستدعاء، وتتألّف من مكوّنين هما الجانب الأيسر (LHS=Left_Hand_Side) و الجانب الأيمن (RHS=Right Hand_Side).

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

في الشّيفرة البرمجيّة التّالية قمنا ببناء قاعدتين؛ جعلنا الأولى منها تقوم بعمل مطابقةٍ للحقائق عن طريق استدعاء الباني للصّنف (MyFact) طبعًا بعد أن قمنا بتعريفه وهذا ما يمثلّه الجانب الأيسر هنا، في حين أنّ الجانب الأيمن قامت بتمثيله عبارة (pass) لكي لا يبقى جسم الدّالة فارغًا، أمّا القاعدة الثّانية تقوم بعمل مطابقةٍ لحقائق تمّ تعريفها استنادًا إلى صنف (Fact) والّتي هي f[0] = ‘animal وأيضًا f[‘family’] = ‘felinae’ وتمثّلان الجانب الأيسر فيها، والجانب الأيمن عند مطابقة هذه القاعدة قمنا بالإشارة إليه بعبارة الطّباعة:

#define Rules
class MyFact(Fact):
    pass
@Rule(MyFact())       #this is the LHS
def match_with_every_myfact():
    """ this rule will match with every instance of "MyFact"""
    # this is the RHS
    pass
@Rule(Fact('animal',family='felinae'))
def match_with_cats():
    """ match with every 'Fact' which:
    f[0]=='animal'
    f['family']=='felinea'
    """
    print('Meow!')

كما نعلم المكوّن المسؤول عن عمليّة المطابقة بين الحقائق والقواعد لاشتقاق حقائق جديدةٍ واستنتاج الحلّ هو محرّك الاستدلال (inference engine)، وقمنا باستخدامه من خلال أخذ غرضٍ أيضًا من صنف (KnowledgeEngine) المعرّف مسبقًا ضمن مكتبة اكسبيرتا (experta)، ثمّ التّصريح عن الحقائق الابتدائيّة وتهيئة المحرّك للتّنفيذ من خلال دالّة  (reset).

يمكننا أن نصرّح عن حقيقةٍ معيّنةٍ باستدعاء دالّة (declare) على المحرّك (engine) وبعد ذلك يمكننا عرض قائمةٍ بالحقائق المتوفّرة باستخدام خاصّيّة (facts) الموجودة في صنف (KnowledgeEngine).

كما نستطيع أيضًا إجراء تعديلٍ على حقيقةٍ معيّنةٍ من خلال تمريرها وفق رقم فهرسٍ محدّدٍ لها، ثمّ تحديد القيم الجديدة وكلّ ذلك وفق دالّة (modify):

# Knowledge Engine
engine=KnowledgeEngine()
engine.reset()
engine.declare(Fact(color='blue'))
engine.facts
# modify some facts in the Knowledge Engine
engine.modify(engine.facts[1],_0='yellow',blink=True)
# show the facts after they have been modified.
engine.facts

سنوضّح من خلال المثال التّالي عمل المكوّنات الثّلاثة المتكامل (facts,rules,inference engine).

المثال يتحدّث عن إشارات المرور (traffic lights)، حيث قمنا بالتّصريح عن صنف (Light) الّذي يرث صنف (Fact)، وصنف (RobotCrossStreet) الّذي يرث صنف (KnowledgeEngine) ليعبّر عنه والحاوي على مجموعةٍ من القواعد الّتي قمنا بتخصيصها كالآتي:

القاعدة الأولى تقوم بعمل مطابقةٍ مع حقيقة أنّه إذا كان اللّون أخضرًا، يتمّ استدعاء دالّة (green_light) لتطبع (walk)، وإذا كانت الحقيقة (color= red) يتمّ تطبيق القاعدة الثّانية واستدعاء دالّة  (red_light) لتطبع (don’t walk)، في حين أنّه إذا كان اللّون أصفرًا أو وميضًا منه يتمّ تنشيط القاعدة الثّالثة وتطبيق دالّة (cautious) وفق المتغيّر (light) الّذي قمنا بتعريفه من خلال غرض (AS) الّذي توفّره مكتبة اكسبيرتا (experta)، حيث يسمح بتوليد متغيّراتٍ قابلةٍ للرّبط مع معامل (>>) بالإضافة لاستخدام عنصر (L) ضمن المكتبة والذّي يقوم بعمل مطابقةٍ تامّةٍ مع القيمة المعطاة له.

ملاحظةٌ أخيرةٌ ضمن هذه الشّيفرة البرمجيّة؛ هي استخدام تابع (choice) من مكتبة العشوائيّة (random) والممرّر له قائمة بالقيم المحتملة لألوان إشارة المرور (green,yellow,blinking-yellow,red)، من أجل إسناد قيمةٍ مختلفةٍ عشوائيّةٍ في كلّ مرّةٍ لمتحوّل (color_now) ثمّ المتابعة وفق ما تمّ شرحه سابقًا ضمن السّياق، مع الإشارة إلى أنّ المقطع البرمجيّ التّالي معتمدٌ من المرجع [6]:

# simple example about traffic light
from random import choice
from experta import *

class Light(Fact):
    """Information about the traffic light."""
    pass

class RobotCrossStreet(KnowledgeEngine):
    @Rule(Light(color='green'))
    def green_light(self):
        print('Walk')
    @Rule(Light(color='red'))
    def red_light(self):
        print("Don't Walk")
    @Rule(AS.light <<Light(color=L('yellow')|L('blinking-yellow')))
    def cautious(self,light):
        print("Be cautious because light is",light['color'])

engine=RobotCrossStreet()
engine.reset()
color_now=choice(['green','yellow','blinking-yellow','red'])
print('color_now:',color_now)
engine.declare(Light(color=color_now))
engine.run()
engine.facts

وفي ختام مقالتنا الغنيّة بالمعلومات، أودّ التّنويه على فكرةٍ أخيرةٍ وهي أنّنا نستطيع ربط القواعد مع بعضها (إنشاء سلسلة تفعيلٍ للقواعد) من أجل استنتاج حقائق جديدةٍ تتمّ إضافتها لاحقًا إلى قاعدة البيانات، وبالتّالي تنشيط وتفعيل قواعد أخرى كما يشير إليه مثالنا الآتي، فعند تفعيل القاعدة الأولى يتمّ التّصريح مباشرةً عن حقيقةٍ جديدةٍ باستدعاء دالّة (declare) على العنصر (self) المعبّر عن الغرض المنشأ لاحقًا من صنف (KnowledgeEngine)؛ والذّي بدوره يحرّض القاعدة الثّانية لتفعيلها وتنفيذ عبارتي الطّباعة بعد عرضٍ لكلّ الحقائق المصّرح عنها بواسطة الخاصّيّة (facts):

# conclude a fact
class Animal(Fact):
    """Info about animal type"""
    pass

class AnimalKE3(KnowledgeEngine):
    @Rule(AND(Animal(has='feathers'),Animal(has='webbed-feet')))
    def guess_animal(self):
        self.declare(Animal('duck'))
        print(self.facts)
    @Rule(Animal('duck'))
    def it_is_duck(self):
        print('Animal is duck')
        print("Sound is quack")
        
engine=AnimalKE3()
engine.reset()
engine.declare(Animal(has='feathers'),Animal(has='webbed-feet'))
engine.run()

8- الخاتمة:

يمكنك عزيزي القارئ الاطلاع على كامل الشّيفرات البرمجيّة من هنا.

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

وعلى الرّغم من أنّ عمليّة إنشاء وصيانة النّظم الخبيرة مكلفةٌ للغاية، لا يسعنا إنكار فوائدها الجمّة في البيئة المناسبة كما نظام (MYCIN) الخبير والغنيّ عن التّعريف في مجال التّشخيص الطّبّيّ.

9- المراجع:

  1. Expert Systems in Artificial Intelligence
  2. What are Expert Systems in Artificial Intelligence? 2023
  3. Expert Systems in AI – Python Geeks
  4. Difference between Backward and Forward Chaining. – GeeksforGeeks
  5. experta Documentation
  6. experta · PyPI
  7. CLIPS Python binding
  8. https://github.com/AIArabicProjects/Expert-System
0 Shares:
4 تعليقات
اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

You May Also Like
Missing Vaue
اقرأ المزيد

الاستراتيجيّات الفعّالة للتّعامل مع القيم المفقودة في تحليل البيانات Effective Strategies for Handling Missing Values in Data Analysis

التدّقيق العلمي: د.م. حسن قزّاز، م. محمّد سرمينيالتدّقيق اللّغوي: هبة الله فلّاحةِ ما هي القيمة المفقودة Missing Value:…