Professional Documents
Culture Documents
الذكاء األ�سطناعي
التعليم الثانو -نظام امل�سارات
ال�سنة الثالثة
طبعة 2023-1445
ه� وزارة التعليم،
فهرسة مكتبـة امللـك فهد الوطنيـة أثنـاء النـشـر
وزارة التعلـيـم
الذكاء االصطناعي -املرحلة الثانوية -نظام املسارات -السنة
الثالثة / .وزارة التعليم - .الرياض 1444 ،هـ
341ص ؛ 25.5 x 21سم
ردمـك 978-603-511-495-0 :
- 1التعليم -مناهج -السعودية أ .العنوان
1444 / 11122 375.009531
375 ديـوي 009531
2023
Binary
مقدمة
اإن تق��دم ال��دول وتطوره��ا يقا���ص مب��دى قدرته��ا عل��ى اال�س��تثمار يف التعلي��م ،وم��دى ا�س��تجابة نظامه��ا التعليم��ي ملتطلب��ات الع�س��ر
وحر�سا من وزارة التعليم على دمُيومة تطوير اأنظمتها التعليمية ،وا�س��تجابة لروؤية اململكة العربية ال�س��عودية 2030فقد ً ومتغراته.
بادرت الوزارة اإىل اعتماد نظام م�س��ارات التعليم الثانوي بهدف اإحداث تغير فاعل و�س��امل يف املرحلة الثانوية.
أمنوذج��ا تعليم ًي��ا متمي��زًا وحدي ًث��ا للتعلي��م الثان��وي باململك��ة العربي��ة ال�س��عودية ي�س��هم
اإن نظ��ام م�س��ارات التعلي��م الثان��وي يق��دم ا ً
بكف��اءة يف:
تعزي��ز قي��م االنتم��اء لوطنن��ا اململك��ة العربي��ة ال�س��عودية ،وال��والء لقيادت��ه الر�س��يدة حفظه��م ا ،انطال ًق��ا م��ن عقي��دة �سافي��ة
م�س��تندة عل��ى التعالي��م االإ�س��المية ال�س��محة.
تعزي��ز قي��م املواطن��ة م��ن خ��الل الرتكي��ز عليه��ا يف امل��واد الدرا�س��ية واالأن�س��طة ،ات�س��ا ًقا م��ع مطال��ب التنمي��ة امل�س��تدامة ،واخلط��ط
التنموي��ة يف اململك��ة العربي��ة ال�س��عودية الت��ي توؤك��د عل��ى تر�س��يخ ثنائي��ة القيم والهوية ،والقائمة على تعاليم االإ�س��الم والو�س��طية.
تاأهيل الطلبة مبا يتوافق مع التخ�س�سات امل�ستقبلية يف اجَلامعات والكليات اأو املهن املطلوبة؛ ل�سمان ات�ساق خُمرجات التعليم
مع متطلبات �سوق العمل.
متكني الطلبة من متابعة التعليم يف امل�سار املف�سل لديهم يف مراحل مبكرة ،وفق ميولهم وقدراتهم.
متكني الطلبة من االلتحاق بالتخ�س�سات العلمية واالإدارية النوعية املرتبطة ب�سوق العمل ،ووظائف امل�ستقبل.
دم��ج الطلب��ة يف بيئ��ة تعليمي��ة ممتع��ة وحمف��زة داخل املدر�س��ة قائمة على فل�س��فة بنائية ،وممار�س��ات تطبيقي��ة �سمن منا تعليمي
ن�سط.
نق��ل الطلب��ة ع��رب رحل��ة تعليمي��ة متكامل��ة ب��د ًءا م��ن املرحل��ة االبتدائي��ة حت��ى نهاي��ة املرحل��ة الثانوي��ة ،وتُ�س�هِّل عملي��ة انتقاله��م اإىل
مرحل��ة م��ا بعد التعلي��م العام.
تزويد الطلبة باملهارات التقنية وال�سخ�سية التي ت�ساعدهم على التعامل مع احلياة ،والتجاوب مع متطلبات املرحلة.
تو�سيع الفر�ص اأمام الطلبة اخلريجني عرب خيارات متنوعة اإ�سافة اإىل اجَلامعات مثل :احل�سول على �سهادات مهنية ،وااللتحاق
بالكليات التطبيقية ،واحل�سول على دبلومات وظيفية.
ويتكون نظام امل�سارات من ت�سعة ف�سول درا�سية تُد ّر�ص يف ثالث �سنوات ،تت�سمن �سنة اأوىل م�سرتكة يتلقى فيها الطلبة الدرو�ص
يف جماالت علمية واإن�سانية متنوعة ،تليها �سنتان تخ�س�سيتانُ ،ي�س ّكن الطلبة بها يف م�سار عام واأربعة م�سارات تخ�س�سية تت�سق مع
ميولهم وقدراتهم ،وهي :امل�سار ال�سرعي ،م�سار اإدارة االأعمال ،م�سار علوم احلا�سب والهند�سة ،م�سار ال�سحة واحلياة ،وهو ما يجعل
هذا النظام هو االأف�سل للطلبة من حيث:
وج��ود م��واد درا�س��ية جدي��دة تتواف��ق م��ع متطلب��ات الث��ورة ال�سناعي��ة الرابع��ة واخلط��ط التنموي��ة ،وروؤي��ة اململك��ة ،2030ته��دف
لتنمية مهارات التفكر العليا وحل امل�س��كالت ،واملهارات البحثية.
برام��ج املج��ال االختي��اري الت��ي تت�س��ق م��ع احتياج��ات �س��وق العمل وميول الطلبة ،حيث ُمُي ّكن الطلبة م��ن االلتحاق مبجال اختياري
حمدد وفق م�سفوفة مهارات وظيفية حمددة.
مقيا�ص ميول ي�سمن حتقيق كفاءة الطلبة وفاعليتهم ،وي�ساعدهم يف حتديد اجتاهاتهم وميولهم ،وك�سف مكامن القوة لديهم،
مما يعزز من فر�ص جناحهم يف امل�ستقبل.
خ�سي�سا مبا يت�س��ق مع فل�س��فة الن�س��اط يف املدار���ص ،ويعد اأحد متطلبات التخرج؛ مما ي�س��اعد ً العمل التطوعي امل�سمم للطلبة
على تعزيز القيم االإن�سانية ،وبناء املجتمع وتنميته ومتا�سكه.
التج�سر الذي مُيكن الطلبة من االنتقال من م�سار اإىل اآخر وفق اآليات حمددة.
ح�س���ص االإتق��ان الت��ي يت��م م��ن خالله��ا تطوي��ر امله��ارات وحت�س��ني امل�س��توى التح�سيل��ي ،م��ن خالل تق��دمي ح�س�ص اإتق��ان اإثرائية
وعالجية.
خيارات التعليم املدمج ،والتعلم عن بعد ،والذي ُبني يف نظام امل�سارات على اأ�س�ص من املرونة ،واملالءمة والتفاعل والفعالية.
م�سروع التخرج الذي ي�ساعد الطلبة على دمج اخلربات النظرية مع املمار�سات التطبيقية.
مهام حمددة ،واختبارات معينة بال�سراكة مع جهات تخ�س�سية. �سهادات مهنية ومهارية متنح للطلبة بعد اإجنازهم َّ
وبالتايل فاإن م�س ��ار عل ��وم احلا�س ��ب والهند�س ��ة كاأحد امل�س ��ارات امل�س ��تحدثة ف ��ي املرحلة الثانوي ��ة ي�س ��هم يف حتقي ��ق اأف�سل
املمار�سات عرب اال�ستثمار يف راأ�ص املال الب�س ��ري ،وحتوي ��ل الطالب إال ��ى فرد م�س ��ارك ومنت ��ج للعل ��وم واملعارف ،مع اإك�س ��ابه امله ��ارات
واخلربات الالزمة ال�ستكمال درا�س ��ته يف تخ�س�س ��ات تتنا�س ��ب مع ميول ��ه وقدراته اأو االلتحاق ب�س ��وق العم ��ل.
وتعد مادة الذكاء اال�سطناعي اأحد املواد الرئي�س��ة يف م�س��ار علوم احلا�س��ب والهند�س��ة ،حيث ت�س��هم يف تو�سيح مفاهيم الذكاء
اال�سطناعي والتقنيات املرتبطة بها مبا ي�ساعد على توظيف هذه التقنيات يف عدة جماالت حياتية مثل املدن الذكية والتعليم والزراعة
والطب وغرها من املجاالت االقت�سادية املتنوعة .وتهدف املادة اإىل تعريف الطالب باأهمية الذكاء اال�سطناعي ودوره يف اجَليل الرابع
من ال�سناعة .وكذلك تركز على اللبنات االأ�سا�سية لتقنيات الذكاء اال�سطناعي ،ثم تتع َّر�ص ب�سكل تف�سيلي للتطبيقات املتقدمة التي
تتعلق باالأنظمة القائمة على القواعد واأنظمة معاجَلة اللغات الطبيعية .كما ت�ستمل هذه املادة على م�ساريع ومتارين تطبيقية ملا يتعلمه
الطالب؛ حلل م�ساكل واقعية حتاكي م�ستوياته املعرفية ،بتوجيه واإ�سراف من املعلم.
ويتمي��ز كت��اب ال��ذكاء اال�سطناع��ي باأ�س��اليب حديث��ة ،تتواف��ر في��ه عنا�س��ر اجَل��ذب والت�س��ويق ،والت��ي جتع��ل الطلب��ة يقبل��ون عل��ى
تعلم��ه والتفاع��ل مع��ه ،م��ن خ��الل م��ا يقدم��ه م��ن تدريب��ات واأن�س��طة متنوع��ة ،كم��ا يوؤك��د ه��ذا الكت��اب على جوان��ب مهمة يف تعلي��م الذكاء
اال�سطناع��ي وتعلم��ه ،تتمث��ل يف:
الرتابط الوثيق بني املحتويات واملواقف وامل�سكالت احلياتية.
تنوع طرائق عر�ص املحتوى ب�سورة جذابة وم�سوقة.
اإبراز دور املتعلم يف عمليات التعليم والتعلم.
ً
متكامال. االهتمام برتابط حمتوياته مما يجعل منه ًّ
كال
االهتمام بتوظيف التقنيات املنا�سبة يف املواقف املختلفة.
االهتمام بتوظيف اأ�ساليب متنوعة يف تقومي الطلبة مبا يتنا�سب مع الفروق الفردية بينهم.
وملواكب��ة التط��ورات العاملي��ة يف ه��ذا املج��ال ،ف�اإن كت��اب م��ادة ال��ذكاء اال�سطناع��ي �س��وف يوفر للمعلم جمموع��ة متكاملة من املواد
التعليمية املتنوعة التي تراعي الفروق الفردية بني الطلبة ،باالإ�سافة اإىل الربجميات واملواقع التعليمية ،التي توفر للطلبة فر�سة توظيف
التقنيات احلديثة والتوا�سل املبني على املمار�سة؛ مما يوؤكد دوره يف عملية التعليم والتعلم.
ونح��ن اإذ نق��دم ه��ذا الكت��اب الأعزائن��ا الطلب��ة ،ناأم��ل اأن ي�س��تحوذ عل��ى اهتمامه��م ،و ُيلب��ي متطلباته��م ،ويجع��ل تع ّلمه��م له��ذه امل��ادة اأكرث
متعة وفائدة.
اأهداف التعلُّم
بنهاية هذه الوحدة �سيكون الطالب قادرًا على اأن:
يَذكُ ر معامل تاري الذكاء األ�سطناعي (.)AI
ُيعَدِّ د اأمثلة لتطبيقات الذكاء األ�سطناعي (.)AI
ي َِ�سف عمليات هيكل بيانات املُكدّ �ص.
ي َِ�سف عمليات هيكل بيانات الطابور.
يُحدِّ د األختال ات بني هيكل بيانات املُكدّ �ص وهيكل بيانات الطابور.
ي َِ�سف العمليات الرئي�سة املُطبقة على البيانات يف القائمة املرتابطة.
يَ�سر ا�ستخدام هيكل بيانات ال�سجرة.
يُحدِّ د األختال ات بني هيكل بيانات ال�سجرة وهيكل بيانات املُخطط.
يَ�ستخدِ م لغة برجمة البايثون ( )Pythonأل�ستك�ساف هياكل البيانات املُعقدة.
األأدوات
مفكرة جوبيرت ()Jupyter Notebook
10
الدر�ص األأول
مقدمة يف الذكاء األ�سطناعي
تعلُّم الروبوتية
اإلآلة
11
AI and Other Fields الذكاء األ�سطناعي واملجاألت األأخر
يرتبط الذكاء اإل�ضطناعي ( )AIارتباطً ا وثيق ال�سلة بعدة جماالت اأخرى ت�سمل:
الفل�ض��فة ( :)Philosophyهي اأ�سل العلوم احلديثة ،وتُعنى بدرا�س��ة امل�س��كالت التي متثّل اأ�س���ص الذكاء اال�سطناعي،
مث��ل اأ�س��ل ِ
املعرف��ة ومتثيله��ا ،واال�س��تدالل املُ�س��تنِد اإىل القواع��د واملنط��ق ،والتحلي��ل القائ��م عل��ى االأه��داف ،وال�سل��ة ب��ني
والت�سرف.
ُّ املعرِ فة
الريا�ضي��ات ( :)Mathematicsه��ي جوه��ر ال��ذكاء اال�سطناع��ي ،حي��ث تُقدم له لبِنات البناء االأ�سا�س��ية مثل :املنطق،
واحلو�سبة ،ونظرية االحتماالت.
نظري��ة الق��رار ( :)Decision Theoryتُعن��ى بدرا�س��ة اخل�سائ���ص املنطقي��ة والريا�سي��ة لعملي��ة �سن��ع الق��رار ،حي��ث
حت ّل��ل عمل ّي��ة اتخ��اذ الق��رارات يف نظ��ام تك��ون في��ه بيئ��ة الق��رار غ��ر وا�سح��ة ،وتُط َّب��ق ا أُالطُ ر واالأ�س��اليب النظري��ة يف هذا
املجال با�ستمرار حل ّل م�سكالت الذكاء اال�سطناعي.
عل��م اإلأع�ض��اب (ُ :)Neuroscienceيعن��ى بدرا�س��ة اجَله��از الع�سب��ي الب�س��ري ،وق��د تو�س��ل عل��م االأع�س��اب اإىل نتيج��ة
رئي�س��ة عمل��ت كمب��داأ اإر�س��ادي لل��ذكاء اال�سطناع��ي ،وه��ي اأن جمموع��ة م��ن اخلالي��ا الب�س��يطة مُيك��ن اأن ت�وؤدي اإىل نتائ��ج
ُمعق��دة مث��ل :الفك��ر ،والعم��ل ،والوع��ي .كم��ا اأن ال�س��بكات الع�سبي��ة اال�سطناعي��ة ُحتاك��ي البُني��ات الع�سبي��ة املوج��ودة يف
الدما الب�سري.
عل��م النف���س املع��ريف ( :)Cognitive Psychologyه��و اأح��د ف��روع عل��م النف���ص ،ويُعن��ى بدرا�س��ة طريق��ة تفك��ر الب�س��ر.
ولطامل��ا كان الف�س��ل يف حتقي��ق االجن��ازات والتق�دّم يف جمال الذكاء ال�سناعي راجعًا اإىل االكت�س��افات التي ّمت حتقيقها
يف هذا املجال ،والتي �ساعدت على توفر الروؤى التي ت�ساعد اأجهزة احلا�سب على حماكاة التفكر الب�سري.
عل��وم احلا�ض��ب والهند�ض��ة ( :)Computer Science and Engineeringتعت��رب عل��وم احلا�س��ب والهند�س��ة حج��ر
االأ�سا���ص لتوف��ر الربجمي��ات واالأجه��زة الالزم��ة لل��ذكاء اال�سطناع��ي لالنتق��ال م��ن املب��اد النظري��ة اإىل التطبيق��ات
العملية .وقد واكَب التقدم يف الذكاء اال�سطناعي با�ستمرار التطورات يف اأنظمة الت�سغيل ،والربجمة ،واللغات ،وال�سعة
التخزينية ،والذاكرة ،وقوة ُمعاجَلة البيانات.
علم التحكم اإلآيل (ُ :)Cyberneticsيعنى بدرا�س��ة االأنظمة التي حتقق احلالة املرجوة با�س��تالم املعلومات من بيئتها
وتعدي��ل �س��لوكها وف ًق��ا لذل��ك .الف��رق الرئي���ص ب��ني عل��م التح ّك��م االآيل وب��ني ال��ذكاء اال�سطناع� ّ�ي ه��و اأن االأول ي�س��تخدم
الريا�سي��ات لنمذج��ة االأنظم��ة املُغلق��ة الت��ي مُيك��ن و�سفه��ا بالكامل با�س��تخدام متغرات ُحم� َّددة ،بينما ي�س��تخدم الذكاء
اال�سطناعي اال�ستدالل املنطقي واحلو�سبة للتغلب على هذه القيود ودرا�سة امل�سكالت املُعقَّدة مثل :فهم اللغة واملعلومات
املرئية وتوليدهما.
عل��م اللُغوي��ات ( :)Linguisticsه��و الدرا�س��ة العلمي��ة للغ��ة الب�س��رية ،فلطامل��ا كان فه��م اللغ��ة الب�س��ريّة وتوليده��ا جم� ً�اال
رئي�سً ��ا يف تطبيق��ات ال��ذكاء اال�سطناع��ي ،كم��ا اأدى اإىل ن�س��وء حق��ول فرعي��ة مث��ل :معاجل��ة اللغ��ات الطبيعي��ة
( )Natural Language Processing - NLPواللغويات احلا�ضوبية (.)Computational Linguistics
عل��م الروؤي��ة ( :)Vision Scienceه��و الدرا�س��ة العلمي��ة ل�الإدراك الب�س��ري .و ُيع� ّد تعلي��م اأجه��زة احلا�س��ب كيفي��ة فه��م
ال�س��ور ،والر�س��وم املتحرك��ة ،ومقاط��ع الفيدي��و وتوليده��ا أاح��د اأك� ِرث تطبيق��ات ال��ذكاء اال�سطناع��ي إاث��ارة ،وحتدي��دً ا يف
املجاالت الفرعية للتعلُّم العميق وروؤية احلا�سب.
معلومة
ا�ضتُخدِ م م�ضطل الذكاء اإل�ضطناعي ر�ضميًا للمرة اإلأوىل يف عام ,1956ا يجعله اأحد اأحدث املجاإلت العلمية ن�ضبيًا.
12
urin est اختبار تورن
اختبار تورن (:) urin est ق��د يك��ون اختب��ار تورن��غ ه��و الطريق��ة االأك��رث �س��هرة لتعري��ف ال��ذكاء اال�سطناع��ي ،ويع��ود
تاري��خ اقرتاح��ه اإىل ع��ام ،1950حي��ث اأج��رى الع��امل تورن��غ جترب��ة ملعرِ ف��ة م��ا اإذا كان
يقي���ص اختب��ار تورن��غ ق��درة االآل��ة عل��ى احلا�سب ذكيًا اأم ال.
اإظه��ار �س��لوك ذك��ي مكاف��ئ ل�س��لوك
االإن�سان اأو غر قابل للتمييز عنه. واأثناء االختبار ،يتوجب على احلا�س��ب اأن يجيب عن بع�ص االأ�س��ئلة املكتوبة التي يقدمها
امل ُوجِّ ��ه الب�ض��ري ( .)Human Respondentيعت��رب االختب��ار ناجحً ��ا اإذا مل يتمك��ن
وجه من معرفة ما اإذا كانت االإجابة مكتوبة بوا�سطة اإن�سان اأم بوا�سطة احلا�سب. املُ ِّ
الجتياز االختبار بنجاح ،يجب اأن يتمتع احلا�سب باالإمكانات املو�سحة يف اجَلدول التايل:
معاجَلة اللغات الطبيعية؛ لتمكني احلا�سب من فهم االأ�سئلة والرد عليها. 1
متثيل املعرفة لتنظيم املعلومات وتخزينها وا�سرتجاعها خالل اأداء االختبار. 2
تعلُّ��م االآل��ة للتك ّي��ف م��ع هي��اكل اللغ��ات اجَلدي��دة مث��ل :بن��اء جُ م��ل خُمتلف��ة ،اأو اإيجاد مف��ردات لغوي��ة خُمتلفة، 4
مل يرها من قبل ،اأو لي�ست خُمزّنة �سمن املعلومات.
روؤي��ة احلا�س��ب؛ حت��ى يتمك��ن م��ن اال�س��تجابة لالإ�س��ارات الب�سري��ة الت��ي يتلقّاها م��ن املُوجِّ ه عرب و�س��ائط نقل 5
ال�سور والفيديو.
الروبوتية؛ حتّى يتمكّن من ا�ستقبال االأ�سياء التي يتلقّاها من املُوجِّ ه عرب املنفذ ويعاجَلها. 6
تغط ���ي االإمكان ���ات املو�سح ���ة باالأعل ���ى ج ���زءًا كب ��رًا م ���ن جم ���ال ال ���ذكاء اال�سطناع ���ي الوا�س ���ع� .سن�س ���تعر�ص ه ���ذه
االإمكانات فيما يلي:
معاجل��ة اللغ��ات الطبيعي��ة ( )NLPه��و اأح��د ف��روع ال��ذكاء اال�سطناع��ي ال��ذي َمُين��ح اأجه��زة احلا�س��ب الق��درة عل��ى فهم
االإن�سان واللغة الطبيعية.
ثي��ل املع ِرف��ة ( )Knowledge Representationيف ال��ذكاء اال�سطناع��ي ي�س��ر اإىل عملي��ة ترمي��ز املعرفة الب�س��رية
يف �س��كل مق��روء اآل ًي��ا لتتمك��ن االأنظم��ة املُ�س��تنِدة اإىل ال��ذكاء اال�سطناع��ي م��ن معاجَلتها وا�س��تخدامها .تاأتي ه��ذه املعرِ فة
يف �سو ٍر عدة ت�سمل :احلقائق ،والقواعد ،واملفاهيم ،والعالقات ،والعمليات.
اإل�ض��تدإلل املُوؤ ��ت ( )Automated Reasoningيُ�س��ر اإىل ق��درة االأنظم��ة املُ�س��ت ِندة اإىل ال��ذكاء اال�سطناع��ي عل��ى
ا�ستنتاج املعرفة اجَلديدة وتقدمي اال�ستنتاجات املنطقية وفقًا ملجموعة من القواعد والفر�سيات املُقدَ مة.
روؤية احلا�ضب ( )Computer Visionهي جمال الذكاء اال�سطناعي الذي ُمُيكِّن احلا�سب من تف�سر وفهم املعلومات
املرئية من العامل احلقيقي ،مثل ال�سور ومقاطع الفيديو.
الروبوتي��ة ( )Roboticsه��ي ف��رع ال��ذكاء اال�سطناع��ي ال��ذي ُيعن��ى بت�سمي��م الروب��وت ،وبنائه ،وا�س��تخدامه .ويت�سمن
اجَلم��ع ب��ني التقني��ات املتنوع��ة مث��ل :تعلُّ��م االآل��ة ،وروؤي��ة احلا�س��ب ،واأنظم��ة التح ّك��م البت��كار اآالت ذكي��ة ذاتي��ة التح ُّك��م اأو
تتطلب احلد االأدنى من التوجيه الب�سري.
14
الذكاء األ�سطناعي :تاري ُ تد لت�سعة عقود
rti cial ntelli ence: 9 ecades of History
بالرغ��م م��ن اأن عم��ر ال��ذكاء اال�سطناع��ي ال يتج��اوز 100ع��ام ،اإال اأن��ه يتمتع بتاريخ غني َمُيتد منذ االأربعيني��ات من القرن املا�سي حتى
اليوم .وفيما يلي ا�ستعرا�ص لالإجنازات البارزة يف جمال الذكاء اال�سطناعي يف كل ِعقد.
:1987-1993تُعرف هذه الفرتة با�س��م ثاين �س��تاء للذكاء اال�سطناعي. اإلأربعينيات :البداية واأول خلية ع�ضبية ا�ضطناعية
ُ :1943اق��رتح النم��وذج االأول املبن��ي عل��ى اخلالي��ا الع�سبي��ة اال�سطناعي��ة فطبيع��ة اأنظم��ة ال��ذكاء اال�سطناع��ي يف املراحل املُبكرة كانت م�س��تندة على
بحي��ث مُيك��ن ل��كل خلي��ة ع�سبي��ة اأن تك��ون يف حال��ة ن�س��طة (ت�س��غيل) اأو غ��ر القواع��د ،والت��ي بدوره��ا قي��دت م��ن قابليته��ا للتطبي��ق وجعلته��ا غ��ر ق��ادرة
ن�س��طة (اإيق��اف) وذل��ك وف��ق املح��اكاة الت��ي تتلقاه��ا م��ن اخلالي��ا الع�سبي��ة على حل م�ساكل احلياة الواقعية الرئي�سة.
االأخرى املجاورة واملت�سلة بها.
:1997حتق��ق الف��وز االأول لربنام��ج ال��ذكاء اال�سطناع��ي عل��ى بط��ل العامل
:1948يف ه��ذا الع��ام ظه��ر روبوت��ان :اإمل��ر واإل�ض��ي ( )Elmer and Elsieيف ال�س��طر ،حيث جنح احلا�س��ب العمالق ديب بلو ( )Deep Blueيف
وهم��ا روبوت��ان ذاتي��ا التح ُّك��م ،مُيكنهم��ا التنق��ل ح��ول العقب��ات با�س��تخدام هزمُية بطل العامل يف ال�سطر جاري كا�ضبارو (.)Gary Kasparov
اإلألفيني��ات :ف��رتة اإلنت�ض��ار وا�ض��ع ال ّنط��اق ,والدع��م الكب��ري للمك ّون��ات ال�سوء واللم�ص.
املادية والربجمية ,وتطورها خم�ضينات القرن املا�ضي :ن�ضاأة الذكاء اإل�ضطناعي
:1950ظهر اختبار تورنغ وهو اختبار يحدِّ د قدرة االآلة على اإظهار �سلوك :2005ط � َّورت جامع��ة �ض��تانفورد ( )Stanford Universityال�س��يارة
ذكي مكافئ ل�سلوك االإن�سان اأو َي�س ُعب متييزه عنه .اإىل جانب ظهور العديد ذاتية القيادة �ض��تانلي ( )STANLEYالتي فازت يف حتدي ال�س��يارات ذاتية
م��ن مفاهي��م ال��ذكاء اال�سطناع��ي الرئي�س��ة مث��ل تعلُّ��م ا آالل��ة ،واخلوارزميات القيادة .كما بداأ اجَلي�ص االأمريكي اال�ستثمار يف الروبوتات ذاتية التحكّم.
اجَلينية ،والتعلُّم املع َّزز.
:2009ا�ستُخدمت وحدات معاجلة الر�ضومات
�ُ :1951سم��م حا�ض��ب التعزي��ز التناظ��ري الع�ضب��ي الع�ض��وائي ( )Graphics Processing Units - GPUsلتدري��ب ال�س��بكات
( )Stochastic Neural Analog Reinforcement Computer-SNARCالع�سبي��ة للتعلُّ��م العمي��ق للم��رة االأوىل .اأدى ا�س��تخدام املكون��ات املادي��ة
املتخ�س�س��ة اإىل ت�س��ارع وت��رة تدري��ب ال�س��بكات املُع َّق��دة عل��ى جمموع��ات كاأول حا�سب يعمل بال�سبكات الع�سبية.
خ�سي�س��ا كب��رة ج��دً ا م��ن البيان��ات ،مم��ا اأدى ب��دوره اإىل ع�س��رٍ جدي��د م��ن التعلُّ��م
ً :1958طُ ��ورت لغ��ة لي�ض��ب ( ،)Lispوه��ي لغ��ة برجم��ة ُم�س َّمم��ة
لل��ذكاء اال�سطناع��ي .ويف الع��ام نف�س��هُ ،ن�س��رت ورق��ة بحثي��ة ح��ول متلق��ي العميق والذكاء اال�سطناعي.
امل�ض��ورة اإلفرتا�ض��ي ( ،)Hypothetical Advice Takerوه��و نظ��ام العِقدي��ن الث��اين والثال��ث م��ن الق��رن احل��ادي والع�ض��رين :الع�ض��ر
الذهبي الذكاء اال�سطناعي القادر على التعلُّم من التجربة متامً ا مثل الب�سر.
ال�ض��تينيات وال�ض��بعينيات م��ن الق��رن املا�ض��ي :اأول �ض��تاء لل��ذكاء :2011ه��زم نظ��ام االإجاب��ة عل��ى االأ�س��ئلة املع��روف با�س��م وات�ض��ون
( )Watsonاأف�س��ل العب��ني يف الع��امل يف برنام��ج امل�س��ابقات االأمرك��ي اإل�ضطناعي
:1964ظه��ر برنام��ج اإلي��زا ( )ELIZAوه��و اأول برنام��ج ملعاجَل��ة اللغ��ات جيوباردي ( ،)Jeopardyحيث متكّن وات�س��ون من فهم االأ�س��ئلة واالإجابة
عليه��ا بنج��اح ،مم��ا �س �كّل طف��رة يف ا�س��تخدام ال��ذكاء اال�سطناع��ي ِلفه��م تفرع منه جميع روبوتات الدرد�سة اليوم. الطبيعية وهي االأ�سل الذي ّ
اللغة الطبيعية.
ُ :1974-1980تع�رف ه�ذه الف�رتة با�س�م اأول �س�تاء لل�ذكاء اال�سطناع�ي.
حي�ث انخف��ص متوي�ل م�س�روعات ال�ذكاء اال�سطناع�ي يف ه�ذه الف�رتة نظ ًرا :2012ظه��ر نظ��ام ال��ذكاء اال�سطناع��ي ال��ذي ُيرتجِ ��م فور ًي��ا اللغ��ة
لقل�ة التق�دم املُح�رز يف ه�ذا املج�ال ،وانخفا��ص ت أاث�ره يف تطبيق�ات احلي�اة االإجنليزية املنطوقة اإىل اللغة ال�سينية املنطوقة.
اليومية .اأحد االنتقادات الرئي�سة كانت عدم قدرة تقنيات الذكاء اال�سطناعي :2021ظه��ر نظ��ام القي��ادة الذاتي��ة الكام��ل ال��ذي يَ�س��تخدِ م ال�س��بكات
على معاجَلة م�س�كلة االنفجار التوافقي التي جعلت قابلية تطبيقها حمدودة الع�سبية املُدرَّبة على �سلوك مئات االآالف من ال�سائقني.
على بع�ص امل�سكالت وجمموعات البيانات ال�سغرة للغاية.
الثمانيني��ات والت�ض��عينيات م��ن الق��رن املا�ض��ي وث��اين �ض��تاء لل��ذكاء :2022ظه��ر روب��وت درد�ض��ة (املُح �وِّل التولي��دي مُ�ض��بق التدري��ب)
( )Generative Pre-trained Transformer - ChatGPTوه��و اإل�ضطناعي
روب��وت الدرد�س��ة املبن��ي عل��ى جمموع��ة كب��رة م��ن النم��اذج اللغوي��ة .ه��ذه
:1980اُطل��ق اأول نظ��ام خب��ر جت��اري ناج��ح ُم�س َّم��م ملح��اكاة الق��درة على النماذج ُمهيئَّة بدقة با�ستخدام كلٍ من تقنيات التعلّم املُوجّ ه واملُعزّز ملحاكاة
املحادثات الب�سرية. ُ�سنع القرار مثل االإن�سان.
15
تطبيقات الذكاء األ�سطناعي pplications of AI
ال��ذكاء اال�سطناع��ي ه��و تقني��ة �س��ريعة التط��ور لديه��ا الق��درة عل��ى حت� ُّول جمموع��ة وا�س��عة من القطاع��ات وال�سناع��ات .يف هذه
الوح��دة �ست�ستك�س��ف تطبيق��ات ال��ذكاء اال�سطناع��ي املتنوع��ة ،وكيفي��ة ا�س��تخدامها يف إاج��راء حت�س��ينات وابت��كارات يف جمموع��ة
متنوعة من القطاعات وال�سناعات.
رتا�سيني irtual ssistants امل�ساعدين األ
واحدة من اأ�س��هر تطبيقات الذكاء اال�سطناعي هي تطبيقات امل�س��اعدين االفرتا�سيني الذين
ُ�ستخدمني عرب التفاعالت الن�سيّة اأو ال�سوتية ،ومُيكن الو�سول اإليهم مُيكنهم التوا�سل مع امل ِ
ع��رب االأجه��زة املادي��ة مث��ل :الهوات��ف الذكي��ة ،واالأجهزة اللوحي��ة ،اأو مكربات ال�س��وت الذكية،
ومُيك��ن ا�س��تخدامهم الأداء جمموع��ة وا�س��عة م��ن امله��ام مث��ل :اإعداد التذك��رات ،واالإجابة على
االأ�س��ئلة ،وت�س��غيل الو�س��ائط ال�سوتية ،وطلب املنتجات اأو اخلدمات .اأحد االأمثلة االأكرث �سهرة
على تطبيقات الذكاء اال�سطناعي يف هذا املجال هو �ضريي ()Siriمن �سركة اآبل (.)Apple
وهن��اك �س��ركات اأخ��رى ط�وّرت م�س��اعدين افرتا�سي��ني :مث��ل األيك�ض��ا ( )Alexaالتاب��ع ل�س��ركة
اأم��ازون ( ،)Amazonوامل�ض��اعد اإلفرتا�ض��ي لقوق��ل ( ،)Google's Assistantوكورتان��ا
( )Cortanaالتاب��ع ل�س��ركة مايكرو�ض��وفت ( .)Microsoftومب��رور الوق��ت تط � َّورت ق��درة
هذه التطبيقات على الفهم واال�ستجابة لعدد متزايد من االأوامر واال�ستف�سارات والرد عليها.
عل��ى �س��بيل املث��ال ،مُيك��ن ا�س��تخدام امل�س��اعد االفرتا�س��ي للتحك��م يف االأجهزة املنزلي��ة الذكية
مث��ل :التحك��م يف درج��ة احل��رارة ،واالإ�س��اءة ،واالأجه��زة الكهربائي��ة .وق��د يتمث��ل امل�س��اعد
االفرتا�سي يف �سورة روبوتات الدرد�سة املتخ�س�سة املُ�س َّممة عاد ًة لتقدمي املعلومات واالإجابة
�ستخدم روبوتات
على االأ�سئلة يف جمال حم َّدد ،على �سبيل املثال ،يف تطبيقات خدمة العمالء ُت َ
الدرد�سة املبنية على تقنية الذكاء اال�سطناعي يف االإجابة على اأ�سئلة العمالء حول املنتجات
�سكل :1.3املحادثة مع روبوت الدرد�سة
اأو اخلدم��ات ،وحتدي��د امل�س��كالت وعالجه��ا ،وتق��دمي املعلوم��ات ح��ول طلباته��م وح�س��اباتهم.
مُيك��ن الو�س��ول اإىل روبوت��ات الدرد�س��ة ع��رب جمموع��ة وا�س��عة من القن��وات مثل :مواق��ع الويب،
وتطبيق��ات املرا�س��لة ،وو�س��ائل التوا�س��ل االجتماع��ي ،ومُيكنه��ا تق��دمي خدم��ات امل�س��اعدة عل��ى
مدار ال�س��اعة طوال اأيام االأ�س��بوع .مُيكنك االطالع على مثال الأحد تطبيقات روبوت الدرد�س��ة
يف ال�سكل .1.3
الروبوتية o otics
ارتب��ط ال��ذكاء اال�سطناع��ي من��ذ بدايات��ه بالروبوتي��ة ،ف�اإذا كان الروب��وت ه��و الت�سوي��ر املادي للكائ��ن اال�سطناعي ،ف�اإنّ الذّكاء
اال�سطناع��ي مُيث��ل دم��ا الروب��وتَ ،ومُينح��ه الق��درة عل��ى ال�س��عور بالبيئ��ة م��ن حول��ه ،واتخ��اذ الق��رارات ،والتكي��ف م��ع الظ��روف
املتغرة .كما مُيكن للروبوتات الذكية تطبيق هذه االإمكانات والقدرات الأداء جمموعة وا�س��عة من املهام دون التدخل الب�س��ري،
مث��ل :مه��ام الت�سني��ع ،واال�ستك�س��اف ،والبح��ث واالإنق��اذ ،والعدي��د من املهام االأخرى .ال�س��كل 1.4يو�سح خ��ط جتميع روبوتي يف
م�سنع �سيارات.
يف عام 2017كانت الروبوت �ضوفيا ( ) ophiaاأول روبوت يح�ضل على �سكل :1.5الروبوت بيرب
اجلن�ضية ال�ضعودية ,ويف عام 2023طورت اململكة العربية ال�ضعودية
�ضارة ( ,) arahوهي الروبوت التفاعلي اإلأول من نوعه.
ُ�سرة
�سكل :1.8الت�سميد با�ستخدام الطائرات امل َّ
اأمّا النمذجة املُناخية فهي جمال اآخر يرتبط ارتباطً ا وثيقًا بالزراعة ،وقد تاأثر كثرًا بالذّكاء اال�سطناعي الذي بداأت
تطبيقات��ه يف ه��ذا املج��ال يف وق��ت ُمبك��ر ،م��ع تطوي��ر اأنظم��ة التنب� ؤو بالطق���ص القائم��ة علي��ه .والح ًق��ا ،ا�س� ُت ِ
خدم ال��ذكاء
اال�سطناعي لتحليل كميات كبرة من البيانات حول التغرات املُناخية والتنبوؤ باالأمناط امل�ستقبلية ،وتاأتي هذه البيانات
من م�سادر متنوعة ،مبا يف ذلك �سور االأقمار ال�سناعية ،ومالحظات حمطات الطق�ص ،واملحاكاة احلا�سوبية .واليوم،
�تخدم ال��ذكاء اال�سطناع��ي يف جمموع��ة وا�س��عة م��ن تطبيق��ات النمذجة املُناخية مث��ل :التنبوؤ باآثار التغ��رات املُناخية ُي�س� َ
على مناطق حم َّددة ،وحتليل وفهم اأ�س��باب الظواهر اجَلوية املتطرفة وفهمها ،وو�سع اال�س��رتاتيجيات الف ّعالة للتخفيف
من التغرات املُناخية اأو التك ّيف معها.
19
الطاقة ner y
اأ َّث��ر ال��ذكاء اال�سطناع��ي كث�رًا عل��ى جم��ال الطاق��ة ،وذل��ك ع��ن طري��ق متك��ني ال�سّ ��ركات من تر�س��يد ا�س��تخدامها وتقلي��ل ال َه ْدر،
وحت�س��ني الكف��اءة .أاح��د االأمثل��ة عل��ى ذل��ك ا�س��تخدام خوارزميات تعلُّم االآل��ة لتحليل البيانات حول ا�س��تخدامات الطاقة وحتديد
طرق تقليل ال َه ْدر وتر�س��يد اال�س��تهالك .يف الت�س��عينيات من القرن املا�سي ،ا�س�تُخدِ م الذكاء اال�سطناعي للتنبوؤ مبوارد الطاقة
املُتج��ددة وحت�س��ني ا�س��تخدامها .وكان تط��ورًا رئي�سً ��ا م َّك��ن �س��ركات الطاق��ة م��ن التخطي��ط ب�س��ورة اأف�س��ل لدم��ج م��وارد الطاق��ة
املتجددة يف عملياتها.
3ا�ضرح باإيجاز بع�س تطبيقات الذكاء اإل�ضطناعي امل ُ�ضتخدَمة يف احلياة اليومية.
21
و�ض� بع���س اإلأح��داث التاريخي��ة الرئي�ض��ة الت��ي أا ّث��رت يف تط��ور الذكاء اإل�ضطناعي يف اإلأربعينيات واخلم�ض��ينيات من
ِّ 4
القرن املا�ضي.
5ا�ض��رح كي��ف ا�ض��تخدمت التطبيق��ات التجاري��ة تقني��ات ال��ذكاء اإل�ضطناع��ي للم��رة اإلأوىل يف ال ِعق��د الث��اين م��ن الق��رن
احلادي والع�ضرين.
6خلِّ�س كيفية ا�ض��تخدام تطبيقات الذكاء اإل�ضطناعي يف الت�ضدي لتغريات امل ُنا عرب النمذجة امل ُناخية والتح�ض��ينات
يف جمال الطاقة.
22
الدر�ص الثاين
هياكل البيانات يف الذكاء األ�سطناعي
)(Trees ال�سجرة )(Graphs املخطط هياكل البيانات اخلطيَّة )(Linear Data Structures
هي��اكل البيان��ات اخلط ّي��ة اأو امل ُت�ضل�ض��لة (:)Linear or sequential data structures •
معني.
تُخزِّ ن هياكل البيانات اخلطيّة عنا�سر البيانات يف ت�سل�سل ّ
هي��اكل البيان��ات غ��ري اخلط َّي��ة ( :)Non-linear data structuresال حتت��وي هي��اكل •
البيان��ات غ��ر اخلط َّي��ة عل��ى ارتباط ت�سل�س��لي بني عنا�س��ر البياناتُ ،ومُيكن رب��ط اأي زوج اأو
جمموعة من عنا�سر البيانات معًا ،والو�سول اإليها دون ت�سل�سل ُحم َّدد.
24
العمليات يف املُكدّ �ص Operations on the stac
هناك عمليتان رئي�ستان يف املُكدّ�ص:
• اإ�ضافة عن�ضر ( :)Pushتُ�ستخدَ م العملية الإ�سافة عن�سر يف قمة املُكدّ�ص.
• حذف عن�ضر ( :)Popتُ�ستخدَ م العملية حلذف عن�سر من قمة املُكدّ�ص.
اإ�ضافة عن�ضر
يُط َل��ق عل��ى عملي��ة اإ�ساف��ة عن�س��ر جدي��د اإىل املُك ّد���ص ا�س��م اإ�ضاف��ة عن�ض��ر
اإىل امل ُكدّ�س العن�ضر (.)Push
عند القمة
العن�ضر
يَ�س��تخدِ م املُك ّد���ص موؤ�سّ �رًا ُيطل��ق علي��ه موؤ�س��ر اإلأعل��ى ( ،)Topويُ�س��ر اإىل
عند القمة العن�سر املوجود يف قمة املُكدّ�ص ،وعند اإ�سافة عن�سر جديد اإىل املُكدّ�ص:
E E • ت��زداد قيم��ة موؤ�س��ر االأعل��ى بقيم��ة واح��دة الإظه��ار املوق��ع اجَلدي��د ال��ذي
D D D �س ُي�ساف العن�سر فيه.
• يُ�ساف العن�سر اجَلديد اإىل قمة املُكدّ�ص.
C C C
25
املُكدّ �س يف لغة البايثون Stack in Python
ُمتثَّل املُكدّ�صات يف لغة البايثون با�صتخدام القوائم التي بدورها تُقدِّ م بع�ص العمليات التي ُميكن تطبيقها مبا�صر ًة على املُكدّ�صات.
ِ
ا�صتخدم عملية اإ�صافة عن�صر ( )Pushاإىل املُكدّ�ص الإ�صافة عن�صر جديد ( )78اإىل املُكدّ�ص. 3
اإ�صافة عن�صر
اإىل امل ُكدّ�س
اإ�صافة عن�صر العن�صر عند
اإىل امل ُكدّ�س
45 القمة
اإ�صافة عن�صر 45
اإىل امل ُكدّ�س
32
32 32
اإ�صافة عن�صر 21
اإىل امل ُكدّ�س 21 21 21
45
اإ�صافة عن�صر
حذف عن�صر 32 اإىل امل ُكدّ�س
من امل ُكدّ�س
45
حذف عن�صر
من امل ُكدّ�س 78
32 32 78
ال�سفحة الرئي�سة
لمفكرة جوبيتر.
3 �صيتم فتح املفكرة اخلا�صة بك يف عالمة تبويب جديدة يف املت�صفح اخلا�ص بك.
1
يمكنك تحميل مفكرتك من
جهاز الحا�صب الخا�ص بك.
2
3
خلية المقطع البرمجي .يمكنك كتابة ن�ص ،اأو �صريط اأدوات اال�صم االفترا�صي
معادلة ريا�صية اأو اأمر بلغة البايثون. المفكرة. للمفكرة هو "بدون عنوان".
�صكل :1.17اإن�صاء مفكرة جوبيرت جديدة
28
ألإن�صاء برنامج يف مفكرة جوبيرت: االآن وبع��د اأن اأ�صبح��ت مُفكرت��ك جاه��زة ،ح��ان الوق��ت لكتاب��ة
برناجمك االأول وت�صغيله فيها.
1 اأكتب االأوامر داخل خلية املقطع الربجمي.
ا�صغط على ( Runت�صغيل)2 .
مُيكنك احل�صول على العديد من اخلاليا املختلفة التي
حتتاجها يف نف�س املفكرة حيث حتتوي كل خلية على مقطعها
�صيتم عر�ص النتيجة حتت االأوامر3 .
الربجمي اخلا�س.
2
1
3
عند ت�صغيل برنامجك
�صتتم اإ�صافة خلية
مقطع برمجي جديدة
تلقائيًا.
�صكل :1.18اإن�صاء برنامج يف مفكرة جوبيرت
. Enter + Shift ُمُيكنك ت�صغيل برناجمك بال�صغط على حان الوقت حلفظ مفكّرتك.
حلفظ املفكرة اخلا�صة بك:
1 1 ا�صغط على ( Fileملف)
اخرت ( Save asحفظ ك��)2 .
2
myStack=[1,21,32,45]
print("Initial stack:", myStack)
a=len(myStack)
print("size of stack",a)
. لعر�ص طول المُكدّ�صlen تُ�صتخدَ م الدالة
# empty the stack
for i in range(a): يُ�صتخدَ م هذا االأمر لحذف
myStack.pop()
print(myStack)
.كل العنا�صر من المُكدّ�ص
myStack.pop()
def push(stack,element):
stack.append(element)
def pop(stack):
return stack.pop()
def isEmpty(stack):
return len(stack)==0
def createStack():
return []
newStack=createStack()
while True:
print("The stack so far is:",newStack)
print("-----------------------------")
print("Choose 1 for push")
print("Choose 2 for pop")
print("Choose 3 for end")
print("-----------------------------")
choice=int(input("Enter your choice: "))
while choice!=1 and choice!=2 and choice!=3:
print ("Error")
choice=int(input("Enter your choice: "))
if choice==1:
x=int(input("Enter element for push: "))
push(newStack,x)
elif choice==2:
if not isEmpty(newStack):
print("The pop element is:",pop(newStack))
else:
print("The stack is empty")
else:
print("End of program")
break;
31
:َنفِّذ الربنامج ال�صابق كما يلي
The stack so far is: []
----------------------------- .• اأن�صئ مُكدّ�صً ا من ثالثة اأرقام
Choose 1 for push
Choose 2 for pop
.• اأ�صف العنا�صر اإىل املُكدّ�ص
Choose 3 for end
-----------------------------
Enter your choice: 1
Enter element for push: 26
The stack so far is: [26]
-----------------------------
Choose 1 for push
اأ�صف العن�صر
Choose 2 for pop اإىل امل ُكدّ�س
Choose 3 for end
----------------------------- اأ�صف العن�صر
Enter your choice: 1 اإىل امل ُكدّ�س
Enter element for push: 18
The stack so far is: [26, 18] 23
-----------------------------
Choose 1 for push اأ�صف العن�صر
Choose 2 for pop
اإىل امل ُكدّ�س 18
Choose 3 for end 18
-----------------------------
Enter your choice: 1
Enter element for push: 23 26 26 26
The stack so far is: [26, 18, 23]
-----------------------------
اإ�صافة العنا�صر:1.20 �صكل
ثم،ميكن��ك االآن ح��ذف عن�صري��ن م��ن املُك ّد���ص
Choose 1 for push
Choose 2 for pop
.اخلروج من الربنامج
Choose 3 for end
-----------------------------
Enter your choice: 2
The pop element is: 23
The stack so far is: [26, 18]
----------------------------- حذف العن�صر
Choose 1 for push من امل ُكدّ�س
Choose 2 for pop
Choose 3 for end
حذف العن�صر
من امل ُكدّ�س
-----------------------------
23
Enter your choice: 2
The pop element is: 18 23
The stack so far is: [26] 18
-----------------------------
Choose 1 for push 18 18
Choose 2 for pop
Choose 3 for end
----------------------------- 26 26 26
Enter your choice: 3
End of program
9 17 43 21 7 12 56 23 4 14 31
الفهر�س 0 1 2 3 4 5 6 7 8 9 10
�صكل :1.22العمليات يف الطابور
33
عملية اإ�صافة عن�صر للطابور Enqueue Operation
ال مُيكنك اإ�صافة عن�صر اأو يُطل��ق عل��ى عملي��ة اإ�صاف��ة عن�ص��ر جدي��د اإىل الطاب��ور ا�ص��م اإ�صاف��ة عن�ص��ر للطاب��ور
حذفه من و�صط الطابور. ( .)Enqueueالإ�صافة عن�صر جديد اإىل الطابور:
• تت��م زي��ادة قيم��ة املوؤ�ص��ر اخللف��ي بقيم��ة واح��د بحي��ث ي�ص��ر اإىل مو�ص��ع العن�ص��ر اجلدي��د
الذي �صيُ�صاف.
• تتمّ اإ�صافة العن�صر.
A B C D A B C D A B C
0 1 2 3 0 1 2 0 1 2
قبل اأي اإجراء عليك عملية حذف عن�صر من الطابور Dequeue Operation
التحقق مما اإذا كانت هناك
م�صاحة فارغة يف الطابور يُطلق على عملية حذف عن�صر من الطابور ا�صم حذف عن�صر من الطابور (.)Dequeue
الإ�صافة عن�صر جديد، حلذف عن�صر من الطابور:
وتوافر عن�صر واحد على • يُحذف العن�صر املُ�صار اإليه باملوؤ�صر االأمامي.
االأقل لت�صديره.
• تتم زيادة قيمة املوؤ�ص��ر االأمامي بقيمة واحد بحيث ي�ص��ر اإىل العن�صر اجلديد التايل يف
الطابور.
B C D A B C D A B C D
0 1 2 0 1 2 3 0 1 2 3
34
الطابور يف لغة البايثون Queue in Python
ميك��ن متثي��ل الطاب��ور بع��دة ط��رق متنوع��ة يف لغ��ة البايث��ون منه��ا القوائ��م ( .)Listsويرج��ع ذل��ك اإىل حقيق��ة اأن القائم��ة متث��ل
جمموعة من العنا�صر اخلطيّة ،كما ميكن اإ�صافة عن�صر يف نهاية القائمة وحذف عن�صر من بداية القائمة.
�صتتعلم فيما يلي ال�صيغ العامة لبع�ص العمليات التي ميكن تنفيذها على الطابور:
1 21 32 45 1 21 32 45 21 32 45
0 1 2 3 حذف عن�صر 0 1 2 حذف عن�صر 0 1
من الطابور من الطابور
عليك اأن تتحقق دومًا من وجود عنا�صر يف ظهر الخطاأ الأنك حاولت
.الطابور قبل حماولة حذف عن�صر منه .حذف عن�صر من طابور فارغ
36
تطبيقات على الطابور Queue Applications
أاح��د االأمثل��ة عل��ى تطبيق��ات الطاب��ور يف عل��وم احلا�ص��ب هو طابور الطباعة .على �ص��بيل املثال ،لديك معمل حا�ص��ب به 30جهاز حا�ص��ب
مت�صل��ن بطابع��ة واح��دة .عندم��ا يرغ��ب الطلب��ة يف طباع��ة املُ�ص��تندات� ،صت�ص�كّل مه��ا ّم الطّ باع� ِة طاب��ورًا ملعاجلته��ا وف��ق قاع��دة امل ُ�ص��اف
أوال ( ،)FIFOاأي اأنّ تل��ك امله��ام �ص�تُنج ُز بالرتتي��ب الزمن��ي ال��ذي اأُر�ص�لَت ب��ه اإىل الطابع��ة .املهم��ة املُر�ص��لة ا ًأوال �ص��وف ُتطب��ع
أوال َيخ�رُج ا ً
ا ً
قبل املهمة املُر�ص��لة بعدها ولن ُتطبع املهمة يف نهاية الطابور قبل طباعة كل املهام التي قبلها .عندما تنتهي الطابعة من اأحد االأوامر،
�صوف تبحث يف الطابور ملعرِ فة ما اإن كانت هناك اأوامر اأخرى ملعاجلتها.
املُكدّ �س والطابور با�صتخدام وحدة الطابور النمطية
Stack and Queue Using Queue Module
ميكن اعتبار القائمة يف لغة البايثون مبثابة طابور وكذلك مُكدّ�ص .تُقدِّ م لغة البايثون الوحدة النمطية للطابور ()Queue Module
وهي طريقة اأخرى لتنفيذ هيكلَيّ البيانات املو�صحن .تت�صمن الوحدة النمطية للطابور بع�ص الدوال اجلاهزة لال�صتخدام التي ميكن
تطبيقها على كل من املُكدّ�ص والطابور.
37
ويف النهاية، ثم اطبع هذه القي��م،اأن�ص��ئ طاب��ورًا مُك َّو ًن��ا م��ن خم���ص قي��م يق��وم املُ�ص��تخدِ م باإدخالها اأثن��اء تنفيذ الربنام��ج
.اطبع حجم الطابور
from queue import *
myQueue = Queue()
.اأن�صئ برناجمً ا للتحقق مما اإذا كان الطابور فارغً ا اأم ممتلئًا
from queue import *
myQueue = Queue()
myQueue.put("a")
myQueue.put("b")
myQueue.put("c")
myQueue.put("d")
myQueue.put("e")
checkFull=myQueue.full()
print("Is the queue full? ", checkFull)
checkEmpty= myQueue.empty()
print("Is the queue empty? ", checkEmpty)
38
كما ذُ ِكر من قبل فاإن وحدة الطابور حتتوي على بع�ص الوظائف اجلاهزة لال�صتخدام مع املُكدّ�ص اأو الطابور .اجلدول
1.6يو�صح وظائف الوحدة التي ُميكن ا�صتخدامها مع هيكل بيانات املُكدّ�ص.
e
d
c
b
a
Is the stack empty? True
39
:ُميكنك ا�صتخدام اخلوارزمية االآتية
. اأن�صئ طابور اأوامر الطباعة1
A B C D E F G
يفG اإىلA اأدرِج امللفات من2
0 1 2 3 4 5 6 .طابور اأوامر الطباعة
متت طباعته A B C D E F G H
.H واأدرج امللفA اأخرِ ج امللف 3
0 1 2 3 4 5 6
D E F G H I J
اأخرج امللفات التي متت طباعتها 6
0 1 2 3 4 5 6 .) واحدً ا تلو االآخرD-E-F-G-H-I-J(
40
print()
return
printDocument = printQueue.get()
time.sleep(1) # wait one second
print ("OK - ", printDocument, " is printed.")
printQueueSizeMessage()
# print a message with the size of the queue
def printQueueSizeMessage():
printQueueSize = printQueue.qsize()
if printQueueSize == 0:
print ("There are no documents waiting for printing.")
elif printQueueSize == 1:
print ("There is 1 document waiting for printing.")
else:
print ("There are ", printQueueSize, " documents waiting for printing.")
print()
# the main program
# send documents to the print queue for printing
addDocument("Document A")
addDocument("Document B")
addDocument("Document C")
addDocument("Document D")
addDocument("Document E")
addDocument("Document F")
addDocument("Document G")
printDocument()
addDocument("Document H")
printDocument()
addDocument("Document I")
printDocument()
addDocument("Document J")
addDocument("Document K")
printDocument()
printDocument()
printDocument()
printDocument()
printDocument()
printDocument()
printDocument()
printDocument()
41
Document D sent to print queue.
There are 4 documents waiting for printing.
OK - Document A is printed.
There are 6 documents waiting for printing.
OK - Document B is printed.
There are 6 documents waiting for printing.
OK - Document C is printed.
There are 6 documents waiting for printing.
OK - Document D is printed.
There are 6 documents waiting for printing.
OK - Document E is printed.
There are 5 documents waiting for printing.
OK - Document F is printed.
There are 4 documents waiting for printing.
OK - Document G is printed.
There are 3 documents waiting for printing.
OK - Document H is printed.
There are 2 documents waiting for printing.
OK - Document I is printed.
There is 1 document waiting for printing.
OK - Document J is printed.
There are no documents waiting for printing.
42
هياكل البيانات الثابتة واملتغرة Static and Dynamic Data Structures
�ص��بق تو�صيح اأن هياكل البيانات هي طريقة فعالة لتخزين البيانات وتنظيمها ،وباالإ�صافة اإىل ما تعلمته حول ت�صنيف هياكل
أي�صا اإىل ثابتة ( )Staticو متغرة (.)Dynamic البيانات اإىل اأوليّة وغر اأوليّة ،فاإنه ميكن ت�صنيفها ا ً
هياكل البيانات الثابتة Static Data Structure
يف البيان��ات الثابت��ة ،يك��ون حج��م الهي��كل ثاب ًت��ا ،و ُتخ�زَّن عنا�ص��ر البيان��ات يف مواق��ع الذاك��رة املتج��اورةُ .تع� ُّد امل�صفوف��ة
( )Arrayاملثال االأبرز لهياكل البيانات الثابتة.
هياكل البيانات املتغرة Dynamic Data Structure
يف هي��اكل البيان��ات املتغ��رة ،ال يك��ون حج��م الهي��كل ثاب ًت��ا ولك��ن ميك��ن تعديل��ه اأثن��اء تنفي��ذ الربنام��ج ،ح�ص��ب العملي��ات
املُن َّف��ذة علي��ه .تُ�ص َّم��م هي��اكل البيان��ات املتغ��رة لت�ص��هيل تغي��ر حج��م هي��اكل البيان��ات اأثن��اء الت�ص��غيل .و ُتع� ُّد القائم��ة
املرتابطة ( )Linked Listاملثال االأبرز لهياكل البيانات املتغرة.
= بايت واحد من الذاكرة املُ�صتخدَ مة املتغرة = بايت واحد من الذاكرة املُ�صتخدَ مة الثابتة
3
2
5
4
ال حتتاج القوائم املرتابطة اإىل اأن تكون متجاورة حتتاج امل�صفوفات اإىل لبنة ذاكرة متجاورة.
يف الذاكرة ولكن يزداد حجمها بطريقة متغرة.
�صكل :1.26مثال على تخ�صي�صيّ الذاكرة الثابتة واملتغرة.
43
القائمة املرتابطة Linked List
القائمة املرتابطة (:)Linked List القائم��ة املرتابط��ة ه��ي ن��وع م��ن هي��اكل البيان��ات اخلط َّي��ة ،وه��ي واح��دة م��ن هي��اكل
البيان��ات االأك��ر �ص��هرة يف الربجم��ة .القائم��ة املرتابط��ة ت�ص��به �صل�ص��لة م��ن ال ُعق��د.
القائم��ة املرتابط��ة ه��ي ن��وع م��ن هي��اكل حتت��وي كل عُ ق��دة عل��ى حقل��ن :حق��ل البيان��ات حي��ث ُتخ��زن البيان��ات ،وحق��ل يحتوي
البيان��ات اخلط َّي��ة الت��ي ت�ص��به �صل�ص��لة م��ن عل��ى املوؤ�ص��ر ال��ذي ُي�ص��ر اإىل ال ُعق��دة التالي��ةُ .ي�ص��تثنى م��ن هذا ال ُعق��دة االأخرة التي
العُقد. ال يحم��ل فيه��ا حق��ل العن��وان اأي بيان��ات .اإح��دى مزاي��ا القائم��ة املرتابط��ة ه��ي اأن
حجمها يزداد اأو يقل باإ�صافة اأو حذف ال ُعقد.
العُقدة (:)Node الراأ�س القائمة املرتابطة القيمة الفارغة
()Head ()Null
ال ُعق��دة ه��ي اللبن��ة الفردي��ة املُك ِّون��ة لهي��كل
البيان��ات وحتت��وي عل��ى البيان��ات وراب��ط
واح��د اأو اأك��ر م��ن الرواب��ط الت��ي تربطه��ا 5 7.2 -2 ABC
بالعُقد االأخرى. �صكل :1.27ر�صم تو�صيحي للقائمة املرتابطة
العُقدة Node
تتكون كل عُ قدة يف القائمة املرتابطة من جزئن:
• اجلزء االأول يحتوي على البيانات.
12 • اجلزء الثاين يحتوي على موؤ�صر يُ�صر اإىل العُقدة التالية.
حقل البيانات. موؤ�صر اإلى العُقدة التالية. لقراءة حمتوى عُقدة حمددة ،عليك
املرور على كل العُقد ال�صابقة.
�صكل :1.28ر�صم تو�صيحي للعُقد
ال ُعق��د يف القائم��ة ال يك��ون له��ا ا�ص��م ،وم��ا تعرف��ه عنها هو عنوانها (املوقع الذي تخزن في��ة العُقدة يف الذاكرة) .للو�صول
اإىل اأي عُ ق��دة بالقائم��ة ،حتت��اج فق��ط اإىل معرف��ة عن��وان ال ُعق��دة االأوىل .ث��م تتب��ع �صل�ص��لة ال ُعق��د للو�ص��ول اإىل ال ُعق��دة
املطلوبة.
44
عل��ى �ص��بيل املث��ال ،اإن كن��ت ترغب يف الو�ص��ول اإىل العُقدة الثالثة
يف القائم��ة ملعاجل��ة البيان��ات التي حتتوي عليها ،عليك البدء من
الراأ�س القيم الفارغة ال ُعق��دة االأوىل يف القائم��ة ،وم��ن ال ُعق��دة االأوىل للو�ص��ول اإىل
الثانية ،ومن الثانية للو�صول اإىل الثالثة.
• عنوان العُقدة االأوىل ُخمزَّن يف مُتغر خا�ص (مُ�صتقِل) يُطلق
15 25 30 عليه عاد ًة الراأ�س (.)Head
• قيمة موؤ�صر العُقدة االأخرة يف القائمة قيمة فارغة (،)Null
العُقدة االأوىل العُقدة الثانية العُقدة الثالثة ُوميثَّل بالرمز .
• عندما تكون القائمة فارغة ،ي�ص��ر موؤ�ص��ر الراأ���ص اإىل القيمة
�صكل :1.30الو�صول اإىل العُقدة الثالثة يف القائمة املرتابطة الفارغة (.)Null
اإلي��ك مث� ً�اال تو�صيح ًي��ا عل��ى القائم��ة املرتابط��ة يف �ص��كل ،1.31كما ذُ ك��ر من قبل فاإن كل عُ قدة تتكون من بيانات وموؤ�ص��ر
ي�صر اإىل ال ُعقدة التالية ،بحيث تُخزّن كل عُ قدة يف الذاكرة يف عنوان ُحم َّدد.
مثال على العُقدة: لرنب��ط ال ُعق��دة ال�ص��ابقة بال ُعق��دة التالي��ة بقيم��ة بيان��ات ،42
• بيانات العُقدة هي الرقم .15 الت��ي بدوره��ا تُ�ص��ر اإىل ال ُعق��دة الثالث��ة وا أالخ��رة عن��د عن��وان
• عنوان العُقدة يف الذاكرة هو .10 30بقيمة بيانات .37
• عنوان العُقدة التالية هو .20
Monday
اخلطوة التالية هي اإن�ص��اء قائمة مرتابطة حتتوي على عُ قدة واحدة ،وهذه املرة �صتَ�ص��تخدِ م موؤ�ص��ر الراأ���ص لالإ�ص��ارة اإىل
العُقدة االأوىل.
Monday
46
ا ِأ�ص ْف االآن املزيد من العُقد اإىل القائمة املرتابطة.
Monday
Tuesday
Wednesday
# insert the new node after node 12 (the head of the list)
insertAfter(37, L_list.head)
12
37
99
12
99
49
مترينات
1
خاطئة �صحيحة حدِّد اجلملة ال�صحيحة واجلملة اخلاطئة فيما يلي:
.1لغة البايثون تُعرِّف هياكل البيانات غر االأوليّة.
.2هياكل البيانات اخلطيَّة تُخزِّ ن عنا�صر البيانات يف ترتيب ع�صوائي فقط.
.3اإ�صاف�ة العنا�ص�ر وحذفه�ا م�ن القائم�ة املُرتابط�ة ( )Linked Listاأبط�اأ م�ن القائم�ة
(.)List
.4ميكن الو�صول اإىل العنا�صر يف القائمة با�صتخدام رقم الفهر�ص فقط.
ُ .5ميكن تغير حجم هيكل البيانات الثابتة اأثناء تنفيذ الربنامج.
50
امل ُخرَج النهائي امل ُكدّ�س 4لديك مُكدّ�س به �صت م�صاحات فارغة.
5 5
�صتُ�صيف احلروف االآتية Cو Eو Bو Aو Dيف املواقع من 0اإىل .4 •
امالأ امل ُكدّ�س الذي يُ�صر اإىل موقع املوؤ�صر العلوي. •
4 4 َنفِّذ العمليات التالية: •
pop push K push X pop pop
3 3
اظهِر امل ُخرَج النهائي بعد تنفيذ العمليات ال�صابقة لالإ�صارة اإىل موقع
2 2 املوؤ�صر العلوي.
املو�صح باالأعلى ،ثم َنفِّذ العمليات
اكتب الربنامج الذي يُن�صئ امل ُكدّ�س َّ
1 1
املذكورة اأعاله با�صتخدام مكتبة الطابور القيا�صية.
0 0
كم مرة يجب تنفيذ العملية املو�صحَّ ة باالأعلى حلذف العن�صر الذي قيمته 5؟ •
51
6با�صتخدام العُقد التالية ار�صِّ م القائمة املرتابطة ثم اكتب القيم يف القائمة بالرتتيب ال�صليم:
=3 الراأ�س
5 9 2
3 0 4
4 1 5
2 -3
52
الدر�س الثالث
هياكل البيانات غر اخلط َّية
يف الدر���ص ال�ص��ابق تع ّلم��ت بع���ص هي��اكل البيان��ات اخلط َّي��ة ،وفيه��ا كل عن�ص��ر يَتب��ع العن�ص��ر االآخ��ر بطريق��ة خط َّي��ة .ه��ل ميكنك
التفكر يف حالة ال ت�صر فيها االأ�صياء بت�صل�صل خطيّ ؟ على �صبيل املثال ،هل ميكن لعن�صر واحد اأن يتبعه اأكر من عن�صر؟
جدول :1.9الفرق بني هياكل البيانات اخلط َّية وغر اخلط َّية
هياكل البيانات غر اخلطيَّة هياكل البيانات اخلطيَّة
تُر َّت��ب عنا�ص��ر البيان��ات يف ترتي��ب خط��ي يرتب��ط في��ه ميكن ربط عنا�صر البيانات بالعديد من العنا�صر االأخرى.
كل عن�صر بالعن�صرين ال�صابق والتايل له.
ال تُ�صتَعر�ص عنا�صر البيانات يف م�صار واحد. تُ�صتَعر�ص عنا�صر البيانات يف م�صار واحد.
معقّد التنفيذ. �صهل التنفيذ.
53
عُقدة األأ�صجار Trees
حافّة االأ�ص��جار ه��ي ن��وع م��ن هي��اكل البيان��ات غ��ر اخلط َّي��ة ،وتتك��ون ال�ص��جرة م��ن جمموع��ة من
ال ُعق��د املُر َّتب��ة يف ترتي��ب هرم��ي .ترتب��ط كل عُ ق��دة بواح��دة اأو اأك��ر م��ن ال ُعق��د ،وترتب��ط
ال ُعق��د م��ع احل��واف يف من��وذج عالق��ة يرب��ط ب��ن االأ�ص��ل ( )Parentوال َف��رع (.)Child
�تخدم االأ�ص��جار يف العدي��د م��ن جم��االت عل��وم احلا�ص��ب ،مبا يف ذلك اأنظمة الت�ص��غيل، تُ�ص� َ
والر�ص��وميات ،واأنظم��ة قواع��د البيان��ات ،واالألع��اب ،وال��ذكاء اال�صطناع��ي ،و�ص��بكات
�صكل :1.34العالقات يف ال�صجرة احلا�صب.
مُ�صطلحات تقنية ال�صجرة املُ�صتخدمة يف هيكل بيانات ال�صجرة
اجلذر ( :)Rootالعُقدة االأوىل والوحيدة يف ال�ص��جرة التي لي���ص لها اأ�صل وتاأتي يف امل�ص��توى االأول من ال�ص��جرة ،مثل:
ِ •
العُقدة Aيف ال�صكل .1.35
الفَرع ( :)Childالعُقدة املرتبطة مبا�ص��ر ًة ِبعُقدة يف امل�ص��توى االأعلى ،مثل :العُقدة Hهي فرع العُقدة ،Dوالعُقدتان •
Bو Cهما فرعا العُقدة .A
االأ�صل ( :)Parentالعُقدة التي لها فرع اأو اأكر يف امل�صتوى االأقل ،مثل :العُقدة Bهي اأ�صل العُقدتن Dو.E •
الورقة ( :)Leafالعُقدة التي لي�ص لها اأي عُ قدة فرعية ،مثل :الورقة .F •
االأ�صقاء ( :)Siblingsكل العُقد الفرعية التي تنبثق من االأ�صل نف�صه ،مثل:العُقدتان Dو� Eصقيقتان. •
احلواف ( :)Edgesالروابط التي ت�صل بن العُقد وال�صجرة. •
ال�صجرة الفرعية ( :)Sub-Treeال�صجرات التي توجد داخل ال�صجرة االأكرب حجمًا ،مثل:ال�صجرة التي بها العُقدة •
Dهي االأ�صل والعُقدتان Hو Iهما الفرعان.
ِ
اجلذر
ال�صجرة (:)Tree
امل�صتوى االأول
ال�ص��جرة ه��ي ن��وع م��ن هي��اكل A
البيان��ات غ��ر اخلط َّي��ة ،وتتكون
م��ن جمموع��ة من ال ُعق��د املُرتَّبة
يف ترتيب هرمي. احلواف
امل�صتوى الثاين
B C
العُقدة االأ�صقاء
احلافة (:)Edge االأ�صل
احلاف��ة ت�ص��ل ب��ن عُ ق��د هي��كل امل�صتوى الثالث
بيانات ال�صجرة. D E F G
الورقة
قد يكون لديك �صجرة ب�صيطة
تتكون من عُقدة واحدة .تكون امل�صتوى الرابع
H I J
هذه العُقدة يف الوقت نف�صه
جِ ذر هذه ال�صجرة الب�صيطة، العُقدة
أالنّها لي�س لها اأ�صل. الفَرع ال�صجرة �صكل :1.35هيكل بيانات ال�صجرة
الفرعية
54
وفيما يلي مثال على هيكل بيانات ال�صجرة:
أ�صال
قد تكون العُقدة فرعًا وا ً
يف الوقت نف�صه :فرع للعُقدة اجلِ ذر
ال�صابقة واأ�صل للعُقدة التالية.
احليوانات
العُقدة االأ�صل
الفقاريَّات الالفقاريَّات
This PC
HelloWorld.py infinite.py
�صكل :1.37تنظيم امللفات يف نظام الت�صغيل
55
a هيكل بيانات ال�صجرة يف لغة البايثون
Tree Data Structure in Python
b c ومع.ال تُوفِر لغة البايثون نوعً ا حمددًا م�ص��بقًا من البيانات لهيكل بيانات ال�ص��جرة
1.38 يو�ص��ح ال�ص��كل.�صم��م االأ�ص��جار م��ن القوائ��م والقوامي���ص ب�ص��هولة َّ ُت،ذل��ك
d e f .تطبيقًا ب�صيطً ا لل�صجرة با�صتخدام القامو�ص
�صجرة قامو�ص البايثون:1.38 �صكل �ص��تمثّل عُ ق��د. �صتُن�ص��ئ �ص��جرة با�ص��تخدام قامو���ص البايث��ون،يف ه��ذا املث��ال
و�ص��تكون القيم��ة املقابل��ة لكل مفت��اح هي قائمة،ال�ص��جر ِة مفاتي��حَ القامو���ص
.حتتوي على ال ُعقد املُت�صلة بحافة مبا�صرة من هذه العُقدة
myTree = {
"a": ["b", "c"], # node
"b": ["d", "e"],
"c": [None, "f"],
"d": [None, None],
"e": [None, None],
"f": [None, None],
}
print(myTree)
:1.39 يف املثال التايل �صتُن�صئ �صجرة مثل تلك املو�صحة يف ال�صكل
االأ�صل الفَرع
Data Structures myTree = {"Data Structures":["Linear","Non-linear"],
"Linear":["Stack","Queue","Linked List"],
"Non-linear":["Tree", "Graph"]}
g
h i k
C
A
D
B
D
D
يَ�ص��تخدِ م ُحم�رِّك البح��ث قوق��ل ( )Google Search Engineمنهجي��ة مماثل��ة لتحديد االأهمية الن�ص��بية ل�صفحات
الوي��ب وم��ن ث��م ترتي��ب نتائ��ج البح��ث ح�ص��ب اأهميته��ا .اخلوارزمي��ة املُ�ص��تخدَ مة بوا�ص��طة قوق��ل هي خوارزمي��ة ت�صنيف
ال�صفحة اأو بيج رانك ( )PageRankالتي ابتكرها موؤ�صِّ �صو قوقل.
59
في�صبوك Facebook
في�صبوك هو مثال اآخر على املُخطَّ طات غر املُوجَّ هة .يظهر بال�صكل 1.45
امل ُ�صتخدِ م
ال ُعق��د الت��ي ُمت ِّث��ل ُم�ص��تخدمي في�ص��بوك ،بينم��ا ُمت ِّث��ل احل��واف عالق��ات
ال�صداق��ة .عندم��ا تري��د اإ�صافة �صدي��ق ،يجب عليه قبول طلب ال�صداقة؛
ولن يكون ذلك ال�صخ�ص �صديقك على ال�صبكة دون قبول طلب ال�صداقة.
(عقدت��ن) ه��ي عالق��ة ثنائي��ة العالق��ة هن��ا ب��ن اثن��ن م��ن املُ�ص� ِ
�تخدمن ُ
�تخدم خوارزمي��ة مقرتح��ات االأ�صدق��اء يف في�ص��بوك نظري��ة االجت��اهُ .ت�ص� َ
عالقة ال�صداقة املُخطَّ طات .تَدر�ص حتليالت ال�صبكات االجتماعية العالقات االجتماعية
با�صتخدام نظرية املُخطَّ طات اأو ال�صبكات من علوم احلا�صب.
�صكل ُ :1.45خمطَّ ط في�صبوك غر املُوجَّ ه
خرائط قوقل Google Maps
ي�ص��تخدم تطبيق خرائط قوقل وكل التطبيقات املُ�ص��ابهة له املُخطَّ طات لعر�ص اأنظمة النقل واملوا�صالت حل�ص��اب امل�ص��ار
االأق�ص��ر ب��ن موقع��ن .تَ�ص� ِ
�تخدم ه��ذه التطبيق��ات املُخطَّ ط��ات الت��ي حتتوي على عدد كب��ر جدً ا من ال ُعق��د واحلواف التي
ال ُميكن متييزها بالعن املُجردة.
طبقة امل ُخرَجات الطبقات املخف َّية طبقة امل ُدخَ الت
�صكل :1.47هيكل ال�صبكات الع�صبية
60
a املُخطَّ طات يف لغة البايثون Graphs in Python
ال تُو ِف��ر لغ��ة البايث��ون نوعً ��ا حمددًا م�ص��بقًا من البيانات لالأ�ص��جار ،كم��ا اأنّها ال تُو ِفر نو ًعا
b c حم��ددًا م�ص��بقًا م��ن البيان��ات لل ُمخطَّ ط��ات( ،تذك��ر اأن االأ�ص��جار ه��ي ن��وع خا���ص م��ن
املُخطَّ طات) .ومع ذلكُ ،ميكن ِبناء املُخطَّ طات با�صتخدام القوائم والقوامي�ص.
d e يف املثال التايل� ،صتقوم بتنفيذ التايل:
�صكل :1.48مثال على املُخطَّ ط وجه مثل املُو�صح بال�صكل .1.48 .1اإن�صاء ُخمطَّ ط ُم َّ
.2اإن�صاء دالة الإ�صافة عُ قدة اإىل املُخطَّ ط.
.3اإن�صاء دالة حتتوي على كل م�صارات املُخطَّ ط.
"myGraph = { "a : ["b","c"],
"b" : ["c", "d"],
"c" : ["d", "e"],
"d" : [],
"e" : [],
}
)print(myGraph
61
# for each neighbouring node of a single node
for neighbour in graph[node]:
# main program
# initialisation of graph as dictionary
myGraph = {"a" : ["b","c"],
"b" : ["c", "d"],
"c" : ["d", "e"],
"d" : [],
"e" : [],
}
62
مترينات
1
خاطئة �صحيحة حدِّد اجلملة ال�صحيحة واجلملة اخلاطئة فيما يلي:
.1ميكن ربط العن�صر يف هياكل البيانات غر اخلطيَّة باأكر من عن�صر واحد.
.2تنفيذ هياكل البيانات اخلطيَّة يكون اأكر تعقيدً ا من تنفيذ هياكل البيانات غر اخلطيَّة.
�ِ 3صفْ كيف تُ�صتخدَم خوارزميات امل ُخطَّ طات يف التطبيقات التجارية.
63
4امالأ الفراغات باالأ�صماء ال�صحيحة الأجزاء ال�صجرة.
a
b e
f
g
j k
64
5يظهر اأمامك يف ال�صورة التالية �صفحة حمتويات الكتاب.
اأكمل متثيل ال�صجرة. •
Book
Book
C1 C2 C1
C1.1
C1.2
C2
C1.1
C2.1
C2.1.1
C2.1.2
C2.2
C2.3
C3
65
6ار�صم ال�صجرة الناجتة عن املعطيات التالية:
العُقدة Aلها فرعان Bو.C •
العُقدتان Dو Eلهما االأ�صل نف�صه وهو العُقدة .B •
العُقدتان Fو� Gصقيقتان ،ولهما االأ�صل نف�صه وهو العُقدة .C •
العُقدة Hلها عُقدتان فرعيتان Iو Jولها عُقدة اأ�صل .F •
66
با�صتخدام القامو�س يف لغة البايثون اكتب الربنامج املنا�صب لتمثيل هذه ال�صجرة ،ثم اأ�صف العُقدة االأ�صل والعُقد الفرعية.
67
الم�صروع
1
اأن�ص��ئ برناجمً ��ا بلغ��ة البايث��ون ي�ص��تدعي اإح��دى قي��م اال�ص��تراد:
( ENTRYدخول) اأو ( NEXTالتايل).
• اإن اأدخل�ت القيم�ة ( ENTRYدخول) � ،ص�يقراأ الربنامج ا�ص�م
العمي�ل وبعده�ا مبا�ص�ر ًة ُيظهِ �ر ع�دد االأ�ص�خا�ص يف قائم�ة
االنتظ�ار اأمام�ه .اإن كان الطاب�ور ُممتلئً�ا ،تظه�ر ر�ص�الة
( The branch is full. Come another dayالفَ�رع
ُممتلئ .الرجاء العودة يف يوم اآخر).
• اإن اأدخل��ت القيم��ة ( NEXTالت��ايل) ،الب��د اأن يظه��ر ا�ص��م
العميل التايل الذي �صتُق َّدم له اخلدمة.
2
َكرِّر العملية املو�صحة اأعاله حتى ال يكون هناك عمالء يف قائمة
االنتظار.
3
يف النهاية� ،ص َيعر�ص الربنامج على ال�صا�صة:
• عدد العمالء الذين ق ُِّدمت لهم اخلدمة.
• متو�صط وقت انتظار العميل.
68
ماذا تع ّلمت
امل�صطلحات الرئي�صة
اأهداف التعلُّم
بنهاية هذه الوحدة �صيكون الطالب قادرًا على اأن:
يُن�ص مقطعًا برجميا تكراريا.
يُق��ارِن ب��ني خوارزمي��ة البح��ث باأولوية األت�ص��اع وخوارزمية البح��ث باأولوية
العُمق.
ي َِ�صف خوارزميات البحث وتطبيقاتها.
يُقارِن بني خوارزميات البحث.
ي َِ�صف الن ام القائم على القواعد.
يُد ِّر اذج الذكاء األ�صطناعي حتى تتعلّم حل امل�صكالت املُعقدة.
يُقيِّم نتائج املقطع ال جمي وكفاءة ال نامج الذ اأن�صاأه.
يُطوِّر ال امج ملحاكاة حلّ م�صكالت احلياة الواقعية.
يُقارِن بني خوارزميات البحث.
األأدوات
مفكرة جوبيرت ()Jupyter Notebook
70
الدر�س األأول
األ�صتدعاء الذاتي
ال
71
.ل ُتُلقِ نظرة على مثال لدالة ت�صتدعي دالة اأخرى
االأمر
متثيل اال�صتدعاء التكراري:2.2 �صكل اال�صتدعاء التكراري هو عملية
.ا�صتدعاء الدالة لنف�صها
72
تتكون دالة اال�صتدعاء التكرارية من حالتن:
احلالة األأ�صا�صية Base Case
ويف ه��ذه احلال��ة تتوق��ف الدال��ة ع��ن ا�ص��تدعاء نف�ص��ها ،ويتاأ ّك��د الو�صول اإىل ه��ذه احلالة من خالل االأمر امل�ص��روط .بدون
احلالة االأ�صا�صية� ،ص َتتَكرَّر عملية اال�صتدعاء الذاتي اإىل ما ال نهاية.
حالة األ�صتدعاء التكرارية Recursive Case
ويف ه��ذه احلال��ة ت�ص��تدعي الدال� ُة نف�صَ ��ها عندم��ا ال ُحتق��ق �ص��رط التوق��ف ،وتظ��ل الدال��ة يف حالة اال�ص��تدعاء الذاتي حتى
ت�صل اإىل احلالة االأ�صا�صية.
اأمثلة �صائعة على األ�صتدعاء الذاتي Recursion Common Examples
أاح��د االأمثل��ة االأك��ر �ص��يوعً ا عل��ى ا�ص��تخدام اال�ص��تدعاء الذات��ي ه��و عملي��ة ح�ص��اب م�صروب رقم ُمع� ّ�ن .م�ص��روب الرقم هو
عرب ع��ن امل�صروب بالرق��م متبو ًع��ا بالعالمة "!"،
ن��ا �ص��رب جمي��ع االأع��داد الطبيعي��ة االأق��ل م��ن اأو ت�ص��اوي ذل��ك الرق��مُ .ي َّ
على �صبيل املثال ،م�صروب الرقم 5هو ! 5وي�صاوي .1*2*3*4*5
�ص��تالحظ اأن عملي��ة ح�ص��اب امل�ص��روب ت�ص��تند اإىل األأرقام من 0اإىل 5 جدول :2.1م�صرو
القاعدة اأدناه: !0!=1 0
1!= 0! *1 اأو !1!=1*1=1 1
1 ،if n=0 الحالة 2!= 1! *2 اأو !2!=2*1=2 2
= !n االأ�صا�صية
(n-1)! * n if n>0 3!= 2! *3 اأو !3!=3*2*1=6 3
حالة اال�صتدعاء 4!=3! * 4 اأو !4!=4*3*2*1=24 4
التكرارية
�صكل :2.3قاعدة ح�صاب امل�صروب 5!=4! * 5 اأو !5!=5*4*3*2*1=120 5
الإن�صاء برنامج يقوم باحت�صاب م�صروب العدد با�صتخدام حلقة التكرار ،forاتّبع ما يلي:
def factorialLoop(n):
result = 1
for i in range(2,n+1):
result = result * i
return result
73
االآن ِ
اح�صب م�صروب العدد با�صتخدام دالة امل�صروب.
if n==1:
]m = A[n-1
else:
))m = max(A[n-1],findMaxRecursion(A,n-1
return m
def findMaxIteration(A,n):
]m = A[0
for i in range(1,n): ت�صتخرج الدالة () maxالعن�صر ذا القيمة
)]m = max(m,A[i
return m
االأكرب (العن�صر ذو القيمة االأكرب يف .)myList
# main program
]myList = [3,73,-5,42
)l = len(myList
)myMaxRecursion = findMaxRecursion(myList,l
)print("Max with recursion is: ", myMaxRecursion
)myMaxIteration = findMaxIteration(myList,l
)print("Max with iteration is: ", myMaxIteration
def powerFunRecursive(baseNum,expNum):
if(expNum==1):
return(baseNum)
else:
return(baseNum*powerFunRecursive(baseNum,expNum-1))
def powerFunIteration(baseNum,expNum):
numPower = 1
for i in range(exp):
numPower = numPower*base
return numPower
# main program
base = int(input("Enter number: "))
exp = int(input("Enter exponent: "))
numPowerRecursion = powerFunRecursive(base,exp)
print( "Recursion: ", base, " raised to ", exp, " = ",numPowerRecursion)
numPowerIteration = powerFunIteration(base,exp)
print( "Iteration: ", base, " raised to ", exp, " = ",numPowerIteration)
Enter number: 10
Enter exponent: 3
Recursion: 10 raised to 3 = 1000
Iteration: 10 raised to 3 = 1000
76
مترينات
1
خاطئة �صحيحة حدِّد اجلملة ال�صحيحة واجلملة اخلاطئة فيما يلي:
.1تتكون دالة اال�صتدعاء التكرارية من حالتن.
.2ت�صتدعي دالة اال�صتدعاء التكرارية دالة اأخرى.
.3دوال اال�صتدعاء التكرارية اأ�صرع يف التنفيذ.
.4ا�صتدعاء الدوال يجعل لبِنة املقطع الربجمي اأ�صغر حجمًا.
.5كتابة مقطع برجمي مُتكرِّر يتطلب ا�صتدعا ًء ذاتيًّا اأقل.
77
4و َِّ�صح مزايا ا�صتخدام اال�صتدعاء الذاتي وعيوبه.
5اكت��ب دال��ة ا�ص��تدعاء تكراري��ة بلغ��ة البايث��ون تق��وم بح�ص��اب الرق��م االأك��رب برتتي��ب حم��دد (مث� ّ�ال ث��اين اأك��رب رق��م) يف
قائمة من االأرقام.
6اكتُب دالة ا�صتدعاء تكرارية بلغة البايثون حل�صاب جمموع كل االأرقام الزوجية يف قائمة معيّنة.
78
الدر�س الثاين
خوارزمية البحث باأولوية العمق
والبحث باأولوية األت�صاع
البحث يف املُخطَّ طات Searching in Graphs
تفح���ص كل ُعق��دة يف املُخطَّ ��ط إالج��راء
هن��اك بع���ص احل��االت الت��ي حتت��اج فيه��ا اإىل البح��ث ع��ن عُ ق��دة ُحم� َّددة يف املُخطَّ ��ط ،اأو ُّ
عملي��ة بعينه��ا مث��ل طباع��ة ُعق��د املُخطَّ ��ط ،فتك��ون حالت� َ�ك ك�ص��خ� ٍص يبح��ث ع��ن املدين��ة الت��ي يري��د ال�صّ ��فر اإليه��ا؛ و ليتحقق هذا،
حتتاج اإىل فح�ص كل ُعقدة يف املُخطَّ ط حتى جتد تلك التي حتتاج اإليهاُ .يطلق على هذا االإجراء :البحث يف املُخطَّ ط اأو م�ص��ح
ُخطط ،وهناك العديد من خوارزميات البحث التي ت�صاعد على تنفيذه ،مثل: امل َّ
• خوارزمية البحث باأولوية االت�صاع (.)Breadth-First Search - BFS
• خوارزمية البحث باأولوية العمق (.)Depth-First Search - DFS
العُقد االأخرى
العُقد المجاورة
ل ُعقدة البث
مثال على خوارزمية البحث باأولوية العمق ) :(DFSحل املتاهة مثال على خوارزمية البحث باأولوية االت�صاع ) :(BFSالبث ال�صبكي
امل�صتوى 0
خوارزمية البحث باأولوية االت�صاع
A Breadth-First Search (BFS) Algorithm
1
ت�صتك�ص��ف خوارزمي��ة البح��ث باأولوي��ة االت�ص��اع ( )BFSاملُخطَّ ��ط بح�ص��ب
واحدا تلو االآخر ،حيث تبداأ بفح�ص عُ قدة اجلذر (عُ قدة البداية) ،امل�صتوى 1 امل�صتوى ً
2
B C ثم تفح�ص جميع العُقد املرتبطة بها ب�صكل مبا�صر واحدة تلو االأخرى.
3
بع��د االنته��اء م��ن فح���ص كل ال ُعق��د يف امل�ص��توى ،تنتق��ل اإىل امل�ص��توى الت��ايل،
ُو�صحة يف ال�صكل .2.6 وتتبع االإجراءات نف�صها امل ّ
امل�صتوى 2
D E F G �صتخدم الطّ ابور لتت ّبع العُقد التي ّمت فح�صها ،ومبج ّرد ا�صتك�صاف العُقدة، ُي َ
�صتتم اإ�صافة ال ُع َقد الفرعية اإىل الطابور ،ثم حتذف ال ُعقدة التالية املوجودة
4 5 6 يف اأول الطابور التي مت ا�صتك�صافها �صابقًا.
79 �صكل :2.6خوارزمية البحث باأولوية االت�صاع ()BFS
املث��ال الت��ايل يو�ص��ح طريق��ة عم��ل خوارزمي��ة البح��ث باأولوية االت�ص��اع ( .)BFSبا�ص��تخدام املُخطَّ ط الت��ايل ،حدِّ د العُقد
التي يجب فح�صها لالنتقال من عُ قدة اجلذر Aاإىل ال ُعقدة :F
ِ
ا�صتخدم هيكل البيانات املُنا�صب. مالحظة:
A
الطابور املُخطَّ ط
ا ح��ذف ال ُعق��دة م��ن مقد م��ة 3 اح��ذف ال ُعق��دة اجلذر ّي��ة م��ن 2 البداي��ة م��ن ال ُعق��دة اجلذرية 1
الطاب��ور (ال ُعق��دة )Bملعاجلته��ا، الطاب��ور ملعاجلته��ا ،ث��م اأ�ص��ف (ال ُعق��دة .)Aاأ�ص��ف ال ُعق��دة
ث��م اأ�ص��ف ف��روع ه��ذه ال ُعق��دة اإىل ف��روع ه��ذه ال ُعق��دة اإىل الطاب��ور اجلذريّة اإىل الطابور.
الطابور (العُقدتن Dو.)E (العُقدتن Bو.)C
80
احذف العُقدة Eملعاجلتها. 6 احذف العُقدة Dملعاجلتها. 5 اح��ذف ال ُعق��دة Cوعاجله��ا، 4
(لي�ص لديها فروع). (لي�ص لديها فروع). ثم اأ�صف فرعها اإليها.
الحظ كيف ُميكنك تطبيق خوارزمية البحث باأولوية االت�صاع ( )BFSبلغة البايثون ( )Pythonيف املثال التايل:
{ = graph
"A" : ["B","C"],
"B" : ["D","E"],
"C" : ["F"],
"D" : [],
"E" : [],
][ "F" :
}
81
)queue.append(node
while queue:
)n = queue.pop(0
)" " = print (n, end
A B C D E F
تُ�ص��تخدَ م يف ُنظ��م املالح��ة با�ص��تخدام ُحم �دِّد املواق��ع العامل��ي (GPS Navigation
)Systemsللبحث عن االأماكن املتجاورة حتى ُحت ِّدد االجتاهات التي يتبعها املُ�صتخدِ م.
معلومة
ُمُيكن تطوير خوارزمية البحث باأولوية االت�صاع ( )BFSبتحديد نقطة البداية
(احلالة االأوليّة) ونقطة الهدف (احلالة امل ُ�صته َدفة) الإيجاد امل�صار بينهما.
82
امل�صتوى 0
خوارزمية البحث باأولوية العمق
A Depth-First Search (DFS) Algorithm
1
يف البح�ث باأولوي�ة العم�ق (� ،)DFSص�تقوم باتب�اع احلواف ،وتتعمق اأكر
امل�صتوى 1 �صتخدم البحث باأولوية العمق اإجراء ا�صتدعاء تكراري واأكر يف املُخطَّ طَ .ي ِ
B C
للتنقل عرب ال ُعقد .عند الو�صول اإىل ُعقدة ال حتتوي على حواف الأي ُعقدة
2 3 4 5 6 جديدة� ،ص�تعود اإىل ال ُعقدة ال�ص�ابقة وت�ص�تمر العملية .ت ِ
َ�صتخدم خوارزمية
البح�ث باأولوي�ة العم�ق هي�كل بيان�ات املُك ّد��ص لتتب�ع م�ص�ار اال�صتك�ص�اف.
D E F G
امل�صتوى 2 مبجرد ا�صتك�صاف ُعقدة� ،ص ُت�صاف اإىل املُكدّ�ص .عندما ترغب يف العودة،
�صتحذف ال ُعقدة من املُكدّ�ص كما هو مو�صح يف ال�صكل .2.7
�صكل :2.7خوارزمية البحث باأولوية العمق ()DFS
املثال التايل يو�صح طريقة عمل خوارزمية البحث باأولوية العمق ( ،)DFSبا�صتخدام املُخطَّ ط التايلَ ،ت َتبّع ترتيب ا�صتك�صاف
العُقد ( )Traversalبح�صب خوارزمية البحث باأولوية العمق.
ِ
ا�صتخدم هيكل البيانات املُنا�صب. مالحظة:
1عا ِلج اجلذر Aثم اأ�صفه اإىل املُكدّ�ص.
A
A
B C
B C
D E F
D E F A
املُخطَّ ط املُكدّ�ص
عا ِلج العُقدة Dثم اأ�صفها اإىل املُكدّ�ص� .صتُحذَ ف 3 عا ِلج العُقدة Bثم اأ�صفها اإىل املُكدّ�ص. 2
ال ُعق��دة الت��ي ف ُِح َ�ص��ت ولي���ص له��ا ف��روع م��ن
املُكدّ�ص(.احذف العُقدة .)D
A فُحِ َ�صت
A D
D B C
B
B C
B B A
D E F
D E F A A
عا ِل��ج ال ُعق��دة Eثم اأ�صفها اإىل املُك ّد���ص� .ص�تُحذَ ف العُقدة التي 4
ف ُِح َ�صت ولي�ص لها فروع من املُكدّ�ص(.احذف العُقدة .)E
ملحة تاريخية A E
طُ ورّت الن�صخة االأوىل من خوارزمية البحث باأولوية E
العمق ( )DFSيف القرن التا�صع ع�صر بوا�صطة عا B C
B B
ريا�صيات فرن�صي كا�صرتاتيجية حلل املتاهات.
D E F A A
83
عا ِلج العُقدة Cثم اأ�صفها اإىل املُكدّ�ص. 6 احذف العُقدة .B 5
A A
C B
B C B C
C
املُك ّد���ص خ��ايل وبالت��ايل �ص��تتوقف خوارزمي��ة البح��ث 8 عا ِلج العُقدة Fثم اأ�صفها اإىل املُكدّ�ص. 7
باأولوية العمق (.)DFS
A F A F
C F
B C B C
C C C
A
D E F A A D E F A A
العُقد التي فُحِ �صَ ت با�صتخدام خوارزمية البحث واالآن �ص��تتعلّم طريق��ة تنفي��ذ خوارزمي��ة البح��ث باأولوي��ة العم��ق
باأولوية العمق ( )DFSهي.F ،C ،E ،D ،B ،A : ( )DFSيف لغة البايثون.
= graph {
""A : ["B","C"],
""B : ["D","E"],
""C : ["F"],
""D : [],
""E : [],
""F : ][
}
A B D E C F
84
التطبيقات العملية خلوارزمية البحث باأولوية العمق
Practical Applications of the DFS Algorithm
ُمي ِك��ن حتدي��د ال��دورات ( )Cyclesيف املُخطَّ ��ط با�ص��تخدام خوارزمي��ة البح��ث باأولوي��ة
العم��ق م��ن خ��الل وج��ود حاف��ة خلفي��ة (ُ ،)Back Edgeمت��ر م��ن خ��الل ال ُعق��دة نف�ص��ها
مرتن.
جدول :2.4مقارنة بني خوارزمية البحث باأولوية األت�صاع ( )BFSو خوارزمية البحث باأولوية العمق ()DFS
خوارزمية البحث باأولوية االت�صاع ( )BFSخوارزمية البحث باأولوية العمق ()DFS معاير املقارنة
التنقّل ح�صب ُعمق ال�صجرة. التنقّل ح�صب م�صتوى ال�صجرة. طريقة التنفيذ
يتج��ة البح��ث اإىل قاع ال�ص��جرة الفرعية، تبح��ث ع��ن م�ص��ار الوجه��ة با�ص��تخدام اأق��ل
طريقة البحث
ثم يرتاجع. عدد من احلواف.
فح�ص عُ قد الفروع قبل االأ�صقاء. فح�ص عُ قد االأ�صقاء قبل الفروع. العُقد التي تُفح�س يف
البداية
85
مترينات
1
2ا�صرح كيف تعمل خوارزمية البحث باأولوية االت�صاع ( )BFSوخوارزمية البحث باأولوية العمق (.)DFS
3قارن بني خوارزمية البحث باأولوية االت�صاع ( )BFSوخوارزمية البحث باأولوية العمق (.)DFS
86
A 4يف امل ُخطَّ ��ط عل��ى الي�ص��ار ،انت ِق��ل م��ن ُعق��دة البداي��ة Aاإىل
ُعق��دة اله��دف .Gط ِّب��ق خوارزمي��ة البح��ث باأولوي��ة االت�ص��اع
B C D
( )BFSوخوارزمية البحث باأولوية العمق ( )DFSبا�صتخدام
هي��كل البيان��ات املنا�ص��ب (امل ُك ّد���س اأو الطاب��ور) ،م��ع االإ�ص��ارة
E F G H I J
اإىل ال ُعقد التي ف ُِح َ�صت.
K L M
87
5اكت��ب دال��ة بلغ��ة البايث��ون تَ�ص� ِ
�تخدم خوارزمي��ة البح��ث باأولوي��ة االت�ص��اع ( )BFSيف ُخمطَّ ��ط للتحق��ق مم��ا اإذا كان هن��اك
م�صار بني ُعقدتني ُمعطاتني.
6اكت��ب دال��ة بلغ��ة البايث��ون تَ�ص��تخدِ م خوارزمي��ة البح��ث باأولوي��ة العم��ق ( )DFSالإيج��اد امل�ص��ار االأق�ص��ر يف خمط��ط غ��ر
موزون.
88
الدر�س الثالث
اتخاذ القرار القائم على القواعد
# open the mapping JSON file and load it into a dictionary
مر�س مر�س مر�س with open(symptom_mapping_file) as f:
3 2 1 )mapping=json.load(f
الت�صخي�صات
# print the JSON file
�صكل :2.8الت�صخي�ص الطبي بوا�صطة نظام ))print(json.dumps(mapping, indent=2
الذكاء اال�صطناعي القائم على القواعد
{
{ "diseases":
[ "food poisoning":
"vomiting",
"abdominal pain",
"diarrhea",
""fever
],
[ "kidney stones":
"lower back pain",
"vomiting",
""fever
],
[ "appendicitis":
"abdominal pain",
"vomiting",
""fever
]
}
}
90
�ص��يتَّبع االإ�ص��دار االأول القائ��م عل��ى القواع��د قاع��دة ب�ص��يطة اأال وه��ي :اإذا كان ل��دى املري���ص عل��ى االأق��ل ثالثً��ا م��ن جمي��ع
االأعرا���ص املحتمل��ة للمر���ص ،فيج��ب اإ�صاف��ة املر���ص كت�ص��خي�ص ُحم َتم��ل .ميكن��ك العث��ور اأدن��اه عل��ى دال��ة Python
(البايث��ون) الت��ي تَ�ص� ِ
�تخدم ه��ذه القاع��دة إالج��راء الت�ص��خي�ص ،باال�ص��تناد اإىل قاع��دة املعرِ ف��ة املذك��ورة اأع��اله واأعرا���ص
املر�ص الظاهرة على املري�ص.
def diagnose_v1(patient_symptoms:list):
return diagnosis
يف ه��ذه احلال��ة ،تك��ون قاع��دة املعرِ ف��ة حم��دد ًة بتعليم��اتٍ برجمي � ٍة ثابت��ة ( )Hard-Codedداخ��ل الدال��ة يف �ص��كل
َ�صتخدم هذه العبارات االأعرا�ص ال�صائعة بن االأمرا�ص الثالثة للتو�صل تدريجيًا اإىل الت�صخي�ص يف اأ�صرع عبارات .IFت ِ
وق��ت ممك��ن .عل��ى �ص��بيل املث��ال ،عَ ر���ص ( Vomitingالق��يء) م�ص��رتك بن جمي��ع االأمرا�ص .لذل��ك ،اإذا كانت عبارة IF
االأوىل �صحيح��ة فق��د مت بالفع��ل ح�ص��اب أاح��د االأعرا���ص الثالث��ة املطلوب��ة جلمي��ع االأمرا���ص .بع��د ذل��ك� ،ص��وف تب��داأ يف
البح��ث ع��ن ( Abdominal Painاأمل البط��ن) املرتب��ط مبر�ص��ن وت�ص��تمر بالطريق��ة نف�ص��هاحتى يت��م النظ��ر يف جمي��ع
جمموعات االأعرا�ص املمكنة.
91
ُميكنك بعد ذلك اختبار هذه الدالة على ثالثة مر�صى خمتلفن:
الت�صخي�س الطبي با�صتخدام نظام الذكاء اال�صطناعي القائم على القواعد | symptom_mapping_v1.json
ُتغرة يف االإ�صدار الثاين� ،صتُعزِّ ز مرونة وقابلية تطبيق النظام القائم على القواعد بتمكينه من قراءة قاعدة ِ
املعرفة امل ِّ
مبا�ص��ر ًة م��ن مل��ف ( JSONج�ص��ون)� .ص��يوؤدي ه��ذا اإىل احل��د م��ن عملي��ة الهند�ص��ة اليدوي��ة لعبارات IFال�صَ ��رطيَّة ح�ص��ب
قابال للتطبيق على قواعد املعرِ فة االأكرب حجمًا مع تزايد حت�ص ًنا كبرًا يجعل النظام ً االأعرا�ص �صمن الدالة .وهذا ُيع ُّد ُّ
يو�صح قاعدة املعرِ فة.
عدد االأمرا�ص واالأعرا�ص .ويف االأ�صفل ،مثال ّ
'symptom_mapping_file='symptom_mapping_v2.json
))print(json.dumps(mapping, indent=2
{ "headache",
{ "diseases": "tiredness",
[ "covid19": "stuffy nose",
"fever", "sneezing",
"headache", "sore throat",
"tiredness", "cough",
"sore throat", ""runny nose
""cough ],
], [ "allergies":
[ "common cold": "headache",
"stuffy nose", "tiredness",
"runny nose", "stuffy nose",
"sneezing", "sneezing",
"sore throat", "cough",
""cough ""runny nose
], ]
[ "flu": }
"fever", }
قاع��دة املعرِ ف��ة اجلدي��دة ه��ذه اأك��رب قلي� ً�ال م��ن �ص��ابقتها .وم��ع ذل��ك ،يتَّ�ص��ح اأن حماول��ة اإن�ص��اء
عب��ارات IFال�صَ ��رطيَّة يف ه��ذه احلال��ة �ص��تكون اأ�صعب بكثر .على �ص��بيل املث��ال ،ت�صمنت قاعدة
املعرِ ف��ة ال�ص��ابقة رب��ط اأح��د االأمرا���ص باأربعة اأعرا�ص ،ومر�صن بثالث��ة اأعرا�ص .وعند تطبيق
قاع��دة ثالث��ة اأعرا���ص عل��ى االأق��ل املُط َّبق��ة يف االإ�ص��دار االأول ،حت�ص��ل عل��ى 6جمموع��ات
االإ�صدار 1
ثالثي��ة م��ن االأعرا���ص املحتمل��ة الت��ي توؤخَ ��ذ يف االعتب��ار .يف قاع��دة املعرِ ف��ة اجلدي��دة باالأعل��ى،
االإ�صدار 2 تك��ون لالأمرا���ص االأربع��ة 5و 5و 8و 6اأعرا���ص ،عل��ى الت��وايل .وبه��ذا ،حت�ص��ل عل��ى 96
جمموع��ة ثالثي��ة م��ن االأعرا���ص املحتمل��ة .ويف ح��ال التعامل م��ع مئات اأو حت��ى اآالف االأمرا�ص،
�صتج ُد اأنّه من امل�صتحيل اإن�صاء نظام مثل املوجود يف االإ�صدار االأول.
وكذل��ك ،ال يوج��د �ص��بب طب��ي وجي��ه ل ِق َ�ص��ر الت�ص��خي�ص الطب��ي عل��ى جمموع��ات ثالثي��ة م��ن
�صكل :2.10االإ�صدار الثاين ال االأعرا���ص .ولذل��ك� ،ص��تجعل منط��ق الت�ص��خي�س ( )Diagnosis Logicاأك��ر تنوعً ��ا بح�ص��اب
يحتوي على عبارات IFال�صَ رطيَّة �تخدم بتحدي��د ع��دد االأعرا���ص املُطابق��ة ع��دد االأعرا���ص املُطابق��ة ل��كل مر���ص ،وال�ص��ماح لل ُم�ص� ِ
بتعليمات برجمي ٍة ثابتة.
ٍ املحدد ًة التي يجب توافرها يف املر�ص لت�صمينه يف الت�صخي�ص.
93
def diagnose_v2(patient_symptoms:list,
symptom_mapping_file:str,
matching_symptoms_lower_bound:int):
diagnosis=[]
with open(symptom_mapping_file) as f:
mapping=json.load(f)
counter=0
disease_symptoms=disease_info[disease]
counter+=1
if counter>=matching_symptoms_lower_bound:
diagnosis.append(disease)
return diagnosis
بعد حتمي��ل ُخمطَّ ط االأعرا�ص من.�ات برجمي ٍة ثابتة ٍ � ال�صَ ��رطيَّة املح��ددة بتعليمIF ال يحت��وي ه��ذا االإ�ص��دار عل��ى عب��ارات
.FOR يب��داأ االإ�ص��دار يف اأخ��ذ ك ّل مر���ص حمتم��ل يف االعتب��ار با�ص��تخدام حلق��ة التك��رار االأوىل،) (ج�ص��ونJSON مل��ف
) يف كل مرةCounter( تتحق��ق احللق��ة م��ن كل َع ْر���ص عل��ى ح��دة مبقارنت��ه باالأعرا�ص املعروفة للمر�ص وزي��ادة الع� َّداد
.يجد فيها النظام تطابقًا
94
# Patient 1
]"my_symptoms=["stuffy nose", "runny nose", "sneezing", "sore throat
)diagnosis=diagnose_v2(my_symptoms,'symptom_mapping_v2.json' , 3
)print('Most likely diagnosis:',diagnosis
symptom_mapping_v2.json
with open(symptom_mapping_file) as f:
mapping=json.load(f)
print(json.dumps(mapping, indent=2))
{ "fever",
"diseases": { "headache",
"covid19": { "tiredness",
"very common": [ "sore throat",
"fever", "cough"
"tiredness", ],
"cough" "less common": [
], "stuffy nose",
"less common": [ "sneezing",
"headache", "runny nose"
"sore throat" ]
] },
}, "allergies": {
"common cold": { "very common": [
"very common": [ "stuffy nose",
"stuffy nose", "sneezing",
"runny nose", "runny nose"
"sneezing", ],
"sore throat" "less common": [
], "headache",
"less common": [ "tiredness",
"cough" "cough"
] ]
}, }
"flu": { }
"very common": [ }
96
و�صيُ�ص��تبدَ ل بدالة ت�ص��جيل النقاط التي تعطي اأوزانًا ُخم َّ�ص�صة،لن يُنظر اإىل املنطق الذي يقت�صر على عدد االأعرا�ص
�يتم ت�صمن
ّ � �ص. �ص�تَتوفر للم�ص��تخدِ م كذلك املرونة لتحديد االأوزان التي يراها منا�ص��بة.لالأعرا�ص االأكر واالأقل �ص��يوعً ا
.املر�ص اأو االأمرا�ص ذات املجموع املوزون االأعلى يف الت�صخي�ص
from collections import defaultdict
def diagnose_v3(patient_symptoms:list,
symptom_mapping_file:str,
very_common_weight:float=1,
less_common_weight:float=0.5
):
with open(symptom_mapping_file) as f:
mapping=json.load(f)
disease_info=mapping['diseases']
if symptom in very_common_symptoms:
disease_scores[disease]+=very_common_weight
if max_score==0:
return []
else:
# get all diseases that have the max score
diagnosis=[disease for disease in disease_scores if disease_scores
[disease]==max_score]
97
املعرفةُ ،حت ِّدد هذه الدالة اجلديدة االأعرا�ص االأكر واالأقل ظهورًا على املري�ص ،ثم تزيد لكل مر�ص حمتمل يف قاعدة ِ
م��ن درج��ة املر���ص وف ًق��ا ل�الأوزان املُقا ِبل��ة ،ويف االأخ��ر ُت��درَج االأمرا���ص ذات الدرج��ة االأعلى يف الت�ص��خي�صُ .ميكنك االآن
اختبار تنفيذ الدالة مع بع�ص االأمثلة:
# Patient 1
]"my_symptoms=["headache", "tiredness", "cough
)'diagnosis=diagnose_v3(my_symptoms, 'symptom_mapping_v3.json
)print('Most likely diagnosis:',diagnosis
symptom_mapping_v2.json
( Common cold or Fluنزالت الربد اأو االإنفلونزا) ( Common coldنزالت الربد) ( Fluاالإنفلونزا)
�صكل :2.12متثيل االإ�صدار الثالث
ق��د تالح��ظ اأن��ه عل��ى الرغ��م م��ن اأن االأعرا���ص الثالث��ة عل��ى املري���ص ( Headache :1ال�ص��داع) ،وTiredness
(االإعي��اء) ،و( Coughال�ص��عال) تظه��ر عن��د االإ�صاب��ة ب��كل م��ن ( Fluاالإنفلون��زا) ،و ( Covid19كوفي��د.)19 -
واحل�صا�ص��ية ،ا ّإال اأنّ الظّ اه��ر يف نتائ��ج التّ�ص��خي�ص ه��ي االإنفلون��زا فق��ط .هذا الأن جميع االأعرا�ص الثالثة �ص��ائعة جدً ا يف
قاع��دة املعرِ ف��ة ،مم��ا ي�وؤدي اإىل درج��ة ق�ص��وى قدره��ا .3وباملث��ل ،يف ظ��ل معان��اة املري���ص الث��اين والثال��ث م��ن االأعرا�ص
دخالت االأوزان املختلفة لالأعرا�ص االأكر واالأقل �صيوعً ا اإىل ت�صخي�صات خمتلفة .وعلى وجه التحديد، نف�صها ،توؤدي ُم َ
يَنتج عن ا�صتخدام وزن مت�صا ٍو لنوعن من االأعرا�ص اإ�صافة االإنفلونزا اإىل الت�صخي�ص.
98
االإ�صدار 4
ميك��ن حت�ص��ن النظ��ام القائ��م عل��ى القواع��د بزي��ادة كف��اءة قاع��دة املعرِ ف��ة وجترب��ة دوال ت�ص��جيل النق��ا
( )Scoring Functionsاملختلف��ة .وعل��ى الرغ��م م��ن اأن ذل��ك �ص��يوؤدي اإىل حت�ص��ن النظام ،اإال اأنه �ص��يتطلب الكثر من
الوقت واجلهد اليدوي .وحل�صن احلظ ،هناك طريقة اآلية لبناء نظام مبني على القواعد يكون ذكيًا مبا يكفي لت�صميم
قاع��دة معرِ ف��ة ودال��ة ت�ص��جيل نق��اط خا�ص��ة ب��ه :با�ص��تخدام تعلُّ��م االآل��ةُ .يط ِّب��ق تع ُّل��م االآل��ة القائ��م عل��ى القواع��د
بدال من احلاجة اإىل االإن�صان ( )Rule-Based Machine Learningخوارزمية تعلّم لتحديد القواعد املُفيدة تلقائيًاً ،
لتطبيق املعرِ فة واخلربات ال�صابقة يف املجال لبناء القواعد وتنظيمها يدويًا.
�دال م��ن قاع��دة ِ
املعرف��ة ودال��ة ت�ص��جيل النق��اط املُ�ص َّممتان يدويًا ،تَتو َّق��ع خوارزمية تعلّم االآلة مدخ� ً�ال واحدً ا فقط وهو فب� ً
جمموع��ة البيان��ات التاريخ ّي��ة للح��االت املرَ�ص َّي��ة .فالتعلُّ��م م��ن البيان��ات مبا�ص��ر ًة يح�وُل دون ح��دوث امل�ص��كالت املرتبط��ة
باكت�صاب املعرِ فة االأ�صا�صية والتحقق منها .تتكون كل حالة من بيانات اأعرا�ص املري�ص والت�صخي�ص الطبي الذي ميكن
اأن يقدم��ه اأي خب��ر ب�ص��ري مث��ل الطبي��ب .وبا�ص��تخدام جمموع��ة بيان��ات التدري��ب ،تتع ّل��م اخلوارزمي��ة تلقائ ًيا كي��ف تتنباأ
بالت�صخي�ص املُحتمَل حلالة مري�ص جديد.
medical_dataset
يف املث��ال اأع��اله ،حتت��وي جمموع��ة البيان��ات عل��ى 2,000حال��ة مر�صي��ة ،بحي��ث تتك��ون كل حال��ة من 8اأعرا���ص حمتملة:
(ال�ص��داع) ،وStuffy nose(ال�ص��عال) ،و( Tirednessاالإعي��اء) ،وُ Headache حلم��ى) ،وُ Cough ( Feverا ُ
(ان�ص��داد االأن��ف) ،و( Runny noseر�ص��ح االأن��ف) ،و( Sneezingالعُطا���ص) ،و( Sore throatالته��اب احلل��ق).
تُر َّمز كل واحدة من هذه االأعرا�ص يف عمود ثنائي ُمنف�صل .العدد الثنائي 1ي�صر اإىل اأن املري�ص ُيعاين من االأعرا�ص،
بينما العدد الثنائي 0ي�صر اإىل اأن املري�ص ال ُيعاين من االأعرا�ص.
99
: وهناك اأربعة ت�صخي�صات حمتملة،يحتوي العمود االأخر على ت�صخي�ص اخلبر الب�صري
.) (نزالت الربدCommon cold و،) (احل�صا�صيةAllergies و،) (االإنفلونزاFlu و،)19 - (كوفيدCovid19
:ميكنك التحقق من ذلك ب�صهولة با�صتخدام املقطع الربجمي التايل بلغة البايثون
set(medical_dataset['diagnosis'])
،على الرغم من اأن هناك الع�صرات من خوارزميات تعلُّم االآلة املحتملة التي ميكن ا�صتخدامها مع جمموعة البيانات هذه
كم�ا �صتَ�ص�تخدِ م،)Decision Tree( اإال أان�ك �صت�ص�تخدم تل�ك الت�ي تتب�ع املنهجي�ة املُ�ص�ت ِندة عل�ى منط�ق �ص�جرة الق�رار
.) على وجه التحديدSklearn( (م�ص ّنف �صجرة القرار) من مكتبة البايثون �صكلرنDecisionTreeClassifier
from sklearn.tree import DecisionTreeClassifier
def diagnose_v4(train_dataset:pd.DataFrame):
# create a DecisionTreeClassifier
model=DecisionTreeClassifier(random_state=1)
، فهو بب�صاطة يقراأ امللف التدريبي،ُيع ُّد تطبيق البايثون يف االإ�صدار الرابع اأق�صر واأب�صط بكثر من التطبيقات ال�صابقة
منوذج��ا
ً وم��ن َث� َّ�م ينت��ج،وي�ص��تخدمه لبن��اء من��وذج �ص��جرة الق��رار ا�ص��تنادًا اإىل العالق��ات ب��ن االأعرا���ص والت�ص��خي�صات
واحدة، اب��داأ بتق�ص��يم جمموع��ة البيان��ات اإىل جمموعتن منف�صلت��ن، الختب��ار ه��ذا االإ�ص��دار ب�ص��كل �صحي��ح.خم�ص ً�ص��ا َّ
. واأخرى لالختبار،للتدريب
from sklearn.model_selection import train_test_split
# use the function to split the data, get 30% for testing and 70% for training.
train_data, test_data = train_test_split(medical_dataset, test_size=0.3,
random_state=1)
(1400, 9)
(600, 9)
100
. نقطة �صتُ�صتخدَ م الختباره600 نقطة بيانات �صتُ�صتخدَ م لتدريب النموذج و1,400 لديك االآن
:ابداأ بتدريب منوذج �صجرة القرار ومتثيله
from sklearn.tree import plot_tree
import matplotlib.pyplot as plt
الطبية) بعُمق م�صتوين- (البياناتmedical_data منوذج �صجرة القرار ملجموعة بيانات:2.13 �صكل
101
تُ�ص��تخدَ م دالة () plot_treeلر�ص��م وعر�ص �ص��جرة القرار .ولعدم توفر م�ص��احة كافية للعر�ص �ص��يتم متثيل امل�ص��توين
ُتغر .max_depth االأوّلن فقط ،باالإ�صافة اإىل اجلذر .ميكن �صبط هذا الرقم ب�صهولة با�صتخدام امل ِّ
# plot the tree
plot_tree(my_tree,
عُ مق
max_depth=2,
fontsize=10 �صجرة القرار.
كل عُ قدة يف ال�صجرة ُمتثِّل جمموعة فرعية من املر�صى ،فعلى �صبيل املثال،
ُمت ِّث��ل عُ ق��دة اجل��ذر اإجم��ايل ع��دد 1,400مري���ص يف جمموع��ة بيان��ات التدري��ب .م��ن
بينه��م ،354 ،و ،345و ،358و � 343صُ ��خِّ �صوا ب � ( Allergiesاحل�صا�ص��ية)،
و( Common coldن��زالت ال��ربد) ،و( Covid19كوفي��د ،)19-و( Fluاالإنفلون��زا)،
على التوايل.
ُبن َّي��ت ال�ص��جرة با�ص��تخدام من��ط م��ن االأعل��ى اإىل االأ�ص��فل ع��رب التف�رُّع الثنائ��ي ( .)Binary Splitsيَ�ص��ت ِند التف�رُّع االأول
حلم��ى اأم ال .ونظ�رًا الأن كل خ�صائ���ص االأعرا���ص ثنائي��ة ،يك��ون التحق��ق a <=0.5 اإىل م��ا اإذا كان املري���ص ُيع��اين م��ن ا ُ
حلمى (امل�ص��ار االأي�ص��ر) يتف َّرعون
ُ ا من يعانون ال الذين املر�صى �ا
� ماأ �ص.
� � أعرا الا �ن�صحيحً ��ا اإذا مل يك��ن املري���ص يع��اين م�
م��رة اأخ��رى بن��ا ًء عل��ى م��ا اإذا كان��وا يعان��ون من التهاب احللق اأم ال .املر�صى الذين ال يعان��ون من التهاب احللق يتف َّرعون
بن��ا ًء عل��ى م��ا اإذا كان��وا يعان��ون م��ن ر�ص��ح االأن��ف اأم ال .يف ه��ذه املرحل��ة ،حتت��وي ال ُعق��دة عل��ى 526حال��ةّ .مت ت�ص��خي�ص
،354و ،101و ،58و 13من بينهم باحل�صا�صية ،ونزالت الربد ،وكوفيد ،19-واالإنفلونزا ،على التوايل.
يقي�س موؤ�صر جيني ()Gini Index ي�ص��تمر التفرُّع حتى ُحتدِّ د اخلوارزمية احلاالت التي انق�ص��مت بالفعل
ال�صوائب بالعُقدة ،وبالتحديد احتمالية اإىل ُعق��د نق َّي��ة متامً ��ا .ال ُعق��دة النق َّي��ة بالكام��ل حتت��وي عل��ى احل��االت
ت�صنيف حمتويات العُقدة ب�صورة خاطئة. الت��ي له��ا الت�ص��خي�ص نف�ص��هِ .ق َي��م موؤ�ص��ر ( giniجين��ي) املُح� َّددة عل��ى
ي�صر انخفا�س م ِ
ُعامل جيني اإىل ارتفاع كل ُعق��دةُ ،مت ِّث��ل موؤ�ص��رات عل��ى مقيا���ص جين��ي ،وه��ي �صيغ��ة �ص��هرة
درجة تاأكُّد اخلوارزمية من الت�صنيف. ُ�صتخدم لتقييم درجة نقاء العُقدة. ت َ
102
احتماال للمر�صى يف جمموعة االختبار.ً �صتَ�صتخدِ م االآن �صجرة القرار للتنبوؤ بالت�صخي�ص االأكر
تُ�ص��تخدَ م جمموع��ة االختب��ار لتقيي��م اأداء النم��وذج .تَ�ص��ت ِند طريق��ة التقيي��م الدقيقة على م��ا اإذا كان املق�صود من املهمة
االنح��دار ( )Regressionاأم الت�صني��ف ( .)Classificationيف مث��ل م�ص��كالت الت�صني��ف املعرو�ص��ة هن��ا ،تُ�ص��تخدَ م
طرائق التقييم ال�صهرة مثل :ح�صاب دقة النموذج ( )Model's Accuracyوم�صفوفة الدقة (.)Confusion Matrix
• الدق��ة ه��ي ن�ص��بة التنب�وؤات ال�صحيح��ة الت��ي يق��وم به��ا املُ�ص ِّن��فَ .حت ُق��ق دق��ة عالي��ة قريب��ة م��ن 100%يعن��ي اأن معظم
التنبوؤات التي يقوم بها املُ�صنِّف �صحيحة.
• م�صفوف��ة الدق��ة ه��ي ج��دول يق��ارن ب��ن القيم احلقيقية (الفعلية) وبن التنبوؤات الت��ي يقوم بها املُ�صنِّف يف جمموعة
البيانات .يحتوي اجلدول على �صف واحد لكل قيمة �صحيحة وعمود واحد لكل قيمة ُمتوقَّعة .كل ُمدخَ ل يف امل�صفوفة
ُميثِّل عدد احلاالت التي لها قيم فعلية و ُمتوقَّعة.
0.8166666666666667
�ص��تالحِ ظ اأن �ص��جرة الق��رار ُحت ِّق��ق دق��ة ت�ص��ل اإىل ،81.6%وه��ذا يعن��ي اأن��ه م��ن ب��ن 600حال��ة ّمت اختبارها� ،صَ ��خَّ �صت
ال�ص��جرة 490منه��ا ب�ص��كل �صحي��حُ .ميكن��ك كذل��ك طباع��ة م�صفوف��ة الدق��ة للنم��وذج لت�ص��تعر�ص ب�ص��كل اأف�ص��ل االأمثل��ة
املُ�ص َّنفة ب�صكل خاطئ.
)confusion_matrix(test_diagnoses,pred
103
االإنفلونزا امل ُتوقَّعة امل ُتوقَّع كوفيد19 احل�صا�صية امل ُتوقَّعة نزالت الربد امل ُتوقَّعة
االأرق��ام الواقع��ة يف اخل��ط ال ُقط��ري (املُظلل��ة باللون الوردي) ُمتثِّل احلاالت املُتوقَّعة ب�ص��كل �صحيح ،اأما االأرقام التي تقع
خارج اخلط القُطري فتُمثِّل اأخطاء النموذج.
عل��ى �ص��بيل املث��ال ،بالنظ��ر اإىل ترتي��ب الت�ص��خي�صات االأربع��ة املُحتمل��ة [( Allergiesاحل�صا�ص��ية)Common cold ،
(ن��زالت ال��ربد)( Covid19 ،كوفي��د( Flu ،)19-االإنفلون��زا)] ،تو�ص��ح امل�صفوف��ة اأن النم��وذج اأخط �اأ يف ت�صني��ف
48حال��ة م��ن املُ�صاب��ن بن��زالت ال��ربد باأنه��م م�صاب��ون باحل�صا�ص��ية ،كم��ا اأخط� أا يف ت�صني��ف 31حال��ة م��ن املُ�صاب��ن
باالإنفلونزا باأنهم م�صابون بكوفيد.19-
وعل��ى الرغ��م م��ن اأنّ ه��ذا النم��وذج لي���ص مثال ًي��ا ،فم��ن املُث��ر للده�ص��ة اأ ّن��ه قادر على حتقي��ق مثل هذه الدرج��ة العالية من
الدق��ة بتعلُّ��م جمموع��ة القواع��د اخلا�ص��ة ب��ه ،دون احلاج��ة اإىل قاع��دة معرِ ف��ة اأن�ص��ئت يدو ًي��ا .باالإ�صاف��ة اإىل حتقي��ق مث��ل
ه��ذه الدق��ة دون حماول��ة �صب��ط ُمتغ��رات االأداء املتنوع��ة ل � ُ ( DecisionTreeClassifierم�ص ِّن��ف �ص��جرة الق��رار).
وبالت��ايلُ ،ميك��ن حت�ص��ن دق��ة النم��وذج الأف�ص��ل م��ن ذل��ك .كما ُميكن حت�ص��ن النموذج بتج��اوز قيود النم��وذج القائم على
القواعد وجتربة اأنواع خمتلفة من خوارزميات تعلُّم االآلة .و�صتتعلّم بع�ص هذه الطرائق يف الوحدة التالية.
104
مترينات
1اذكر بع�س مزايا وعيوب االأنظمة القائمة على القواعد.
105
4يف ا الإ�ص��دار الث��اين ،ك��م ع��دد ا الأمرا ���س ا مل ُو�صحَّ ��ة يف ت�ص��خي�س كل مري���س اإذا َغ� َّ�ر ت قيم��ة ا مل ُتغ� ِّ�ر
matching_symptoms_lower_boundاإىل 2و 3و4؟ َعدِّل املقطع الربجمي ثم َدوِّن مالحظاتك.
5يف االإ�صدار الثالث ،غ ََّر كال الوزنني اإىل 1للمري�صني االأول والثاين ،متامًا مثل املري�س الثالث.
َعدِّل املقطع الربجمي ثم َدوِّن مالحظاتك.
�ِ 6ص��فْ باإيج��از كي��ف ُمُيك��ن حت�ص��ني كل اإ�ص��دار بالن�ص��بة لالإ�ص��دار ال�ص��ابق ل��ه (االأول اإىل الث��اين ،والث��اين اإىل الثال��ث،
والثالث اإىل الرابع).
106
الدر�س الرابع
خوارزميات البحث امل�صتنرة
تطبيقات خوارزميات البحث
احلالة النهائية Applications of Search Algorithms
خوارزميات البحث هي اأحد املكونات الرئي�صة الأنظمة الذكاء اال�صطناعي ،فبا�صتخدامها
ُميكن اكت�صاف االحتماالت املختلفة الإيجاد احللول املنا�صبة للم�صكالت املُعقدة يف العديد
من التطبيقات ال�صائدة .وفيما يلي اأمثلة على بع�ص تطبيقات خوارزميات البحث:
• الروبوتي�ة ( :)Roboticsق�د يَ�ص�تخدِ م الروب�وت خوارزمي�ة البح�ث لتحدي�د طريق�ه
عرب املتاهة اأو لتحديد موقع اأحد الكائنات يف نطاق بيئته.
• مواقع التجارة االإلكرتونية ( :)E-commerce Websitesت ِ
َ�صتخدم مواقع الت�صوق
ع�رب االإنرتن�ت خوارزمي�ات البح�ث ِلتُطاب�ق ب�ن ا�صتف�ص�ارات العم�الء وب�ن املُنتج�ات
املتوف�رة ،ولت�صفي�ة نتائ�ج البح�ث وف�ق بع�ص املعاير مثل ال�ص�عر ،والعالم�ة التجارية،
والتقييمات ،واقرتاح املُنتجات ذات ال�صلة.
كائن
من�ص�ات مواق�ع التوا�ص�ل االجتماع�ي ( :)Social Media Platformsتَ�ص�تخدِ م • ّ
الروبوت مواق�ع التوا�ص�ل االجتماع�ي خوارزمي�ات البح�ث لعر��ص التدوين�ات ،واالأ�ص�خا�ص،
ُ�صتخدمن وفقًا للكلمات املفتاحية واهتمامات امل ِ
ُ�صتخدم. واملجموعات للم ِ
• متكني االآلة من ممار�صة االألعاب �صتوى ٍ
عال من املهارة
( :)Enabling a machine to play games at a high skill levelيَ�ص�تخدِ م
ال�ذكاء اال�صطناع�ي خوارزمي�ة البح�ث اأثن�اء لع�ب ال�ص�طرجن اأو ق�و ( )Goلتقيي�م
احلركات املختلفة واختيار اخلطوات التي من املرجح اأن توؤدي اإىل الفوز.
احلالة االأوليّة
• ُنظ�م املالح�ة با�ص�تخدام ُحم�دِّد املواق�ع العامل�ي (:)GPS Navigation Systems
�صكل :2.15ا�صتخدام الروبوت خوارزمية تَ�ص�تخدِ م ُنظ�م املالح�ة القائمة على ُحم ِّدد املواق�ع العاملي خوارزميات البحث لتحديد
البحث لتحديد طريقه
اأق�صر واأ�ص�رع طريق بن موقعن ،مع مراعاة بيانات حركة املرور يف الوقت احلايل.
• نُظم اإدارة امللفات (ُ :)File Management Systemsت�صتخدم خوارزميات البحث
يف ُنظ�م اإدارة امللف�ات لتحدي�د موق�ع امللفات با�ص�تخدام ا�ص�م ،وحمت�وى امللف ،وبع�ص
ال�صمات االأخرى.
اأنواع خوارزميات البحث واأمثلتها Types and Examples of Search Algorithms
هناك نوعان رئي�صان من خوارزميات البحث وهما:غر امل ُ�صتنرة ( )Uninformedوامل ُ�صتنرة (.)Informed
خوارزميات البحث غر امل�صتنرة Uninformed Search Algorithms
أي�ص��ا :خوارزميات البح��ث العمياء ،هي تلك التي ال حتتوي عل��ى معلومات اإ�صافية خوارزمي��ات البح��ث غ��ر املُ�ص��تنرة ،وت�ص� ّمى ا ً
حول حاالت امل�ص��كلة باإ�ص��تثناء املعلومات امل�ص��تفادة من تعريف امل�ص��كلة .وتقوم هذه اخلوارزميات باإجراء فح�ص �ص��امل مل�ص��احة
البح��ث ا�ص��تنا ًدا اإىل جمموع��ة م��ن القواع��د املُح�دَّدة ُم�ص��بقًا .و ُتع� ُّد تقني��ات البح��ث باأولوي��ة االت�ص��اع ( )BFSوالبح��ث باأولوي��ة
العمق ( )DFSاملُ�صار اإليها يف الدر�ص الثاين اأمثلة على خوارزميات البحث غر املُ�صتنرة.
107
عل��ى �ص��بيل املث��ال ،تب��داأ خوارزمي��ة البح��ث باأولوي��ة العم��ق ( )DFSعن��د عُ ق��دة اجل��ذر بال�ص��جرة اأو املُخطَّ ��ط وتتو�صَّ ��ع
حت��ى ت�ص��ل لل ُعق��دة االأعم��ق الت��ي مل ُتفحَ ���ص .وي�ص��تمر االأم��ر به��ذه الطريق��ة حت��ى ت�ص��تنفد اخلوارزمي��ة م�ص��احة البح��ث
باأكملها بعد فح�ص كل العُقد املتاحة .ثم ُتخرِ ج احلل االأمثل الذي وجدته اأثناء البحث .فاحلقيقة اأن خوارزمية البحث
باأولوي��ة العم��ق ( )DFSتَتب��ع دومً ��ا ه��ذه القواع��د وال ميك��ن �صبط ا�ص��رتاتيجتها ب�صرف النظر ع��ن نتائج البحث ،وهذا
ما يجعلها خوارزمية غر مُ�صتنرة.
ومث��ال اآخ��ر ملح��و عل��ى ه��ذا الن��وع م��ن اخلوارزمي��ات ه��و خوارزمي��ة البح��ث باأولوي��ة العم��ق التك��راري امل ُتع ِّم��ق
( )Iterative Deepening Depth-First Search - IDDFSالت��ي ميك��ن اعتباره��ا مزيجً ��ا ب��ن خوارزميت��ي البح��ث
�تخدم ا�ص��رتاتيجة ال ُعم��ق ا ًأوال للبح��ث يف جمي��ع باأولوي��ة العم��ق ( )DFSوالبح��ث باأولوي��ة االت�ص��اع ( ،)BFSفه��ي تَ�ص� ِ
اخليارات املوجودة يف النطاق الكامل ب�صورة متكررة حتى ت�صل اإىل ُعقدة ُحم َّددة.
خوارزميات البحث امل�صتنرة Informed Search Algorithms
الدالة األ�صتدأللية
(:)Heuristic function عل��ى النقي���ص م��ن خوارزمي��ات البح��ث غ��ر امل�ص��تنرة ،تَ�ص� ِ
�تخدم
ه��ي الدال��ة الت��ي تُ�ص ِّن��ف البدائ��ل يف خوارزمي��ات البح��ث املُ�ص��تنرة املعلوم��ات ح��ول امل�ص��كلة وم�ص��احة البح��ث
خوارزمي��ات البح��ث عن��د كل مرحل��ة لتوجيه عملية البحث .واالأمثلة على هذه اخلوارزميات ت�صمل:
فرعي��ة ا�ص��تنا ًد ا اإىل تقد ي��رات • خوارزمي��ة البح��ث باأولوي��ة االأف�ص��ل ( )A* searchتَ�ص��تخدِ م دال��ة
ا�ص��تداللية مبني��ة عل��ى البيا ن��ات ا�ص��تداللية لتقدي��ر امل�ص��افة ب��ن كل عُ ق��دة من العُقد املُر�صَّ ��حة والعُقدة
املتو ف��رة لتحد ي��د الف��رع ا ل��ذي املُ�ص��تهدَ فة .ث��م تُو�صِّ ��ع ال ُعق��دة املُر�صَّ ��حة بالتقدي��ر االأق��ل .اإن فعَّالي��ة
�صت�صلكه. خوارزمي��ة البح��ث باأولوي��ة االأف�ص��ل ( )A* searchمرتبط��ة بج��ودة
دالتها اال�ص��تداللية .على �ص��بيل املثال ،اإذا كنت ت�صمن اأن اال�ص��تدالل
ل��ن يتج��اوز امل�ص��افة الفعلي��ة اإىل اله��دف ،فبالت��ايل �ص��وف تع��ر
اخلوارزمية على احلل االأمثل .بخالف ذلك ،قد ال يكون احلل النا من اخلوارزمية هو االأف�صل.
• خوارزمية ديك�صرتا ( )Dijkstra's Algorithmتُو�صِّ ع العُقدة بناء على اأق�صر م�صافة فعلية اإىل الهدف يف كل خطوة.
ولذلك ،على النقي�ص من خوارزمية البحث باأولوية االأف�صل ،حت�صب خوارزمية ديك�صرتا ( )Dijkstraامل�صافة الفعلية
َ�صتخدم التقديرات اال�صتداللية .وبينما يجعل هذا خوارزمية ديك�صرتا اأبط أا من خوارزمية البحث باأولوية االأف�صل، وال ت ِ
(ممثال بامل�صار االأق�صر من البداية حتى الهدف). ً اإال اأن ذلك يعني �صمان العثور على احلل االأمثل دومً ا
• خوارزمية ت�ص�لُّق التالل ( )Hill Climbingتبداأ بتوليد حل ع�ص��وائي ،ثم حتاول حت�ص��ن هذا احلل ب�صورة متكررة
باإج��راء تغي��رات ب�ص��يطة ُحت�صِّ ��ن م��ن دال��ة ا�ص��تداللية ُحم� َّددة .وبالرغ��م م��ن اأن ه��ذه املنهجي��ة ال ت�صم��ن اإيجاد احلل
االأمثل ،اإال اأنها �صهلة التنفيذ وتتميز بفعالية كبرة عند تطبيقها على اأنواع مُعينة من امل�صكالت.
خوارزمية دي�صكرتا ()Dijkstra's Algorithm خوارزمية البحث باأولوية االأف�صل ()A* search
اخلاليا ذات اللون
البنف�صجي هي
اخلاليا التي ّ
فح�صها ،واخللية ذات
اللون االأخ�صرهي
مو�صع البدء ،واخللية
ذات اللون االحمر هي
موقع الهدف ،بينما
اخلاليا ذات اللون
االأ�صفر متثل امل�صار
الذي العثور عليه.
�صكل :2.16حل املتاهة نف�صها با�صتخدام خوارزمية البحث باأولوية االأف�صل وخوارزمية دي�صكرتا
108
يف هذه الوحدة� ،صت�صاهد بع�ص االأمثلة املرئية وتطبيقات البايثون على خوارزمية البحث باأولوية االت�صاع ( )BFSوخوارزمية
البحث باأولوية االأف�صل ( )A* searchملعرِ فة االختالفات بن خوارزميتي البحث املُ�صتنرة وغر املُ�صتنرة.
الهدف اإن�صاء األغاز املتاهة بوا�صطة البايثون
العقبة
Creating Maze Puzzles in Python
0 1 2
تُعرَّف املتاهة يف �صورة اإطار �صبكي .3 3
0 ُيح� َّدد مو�ص��ع البداي��ة بنجم��ة يف اأ�ص��فل ي�ص��ار املتاه��ة.
اله��دف ه��و الو�ص��ول اإىل اخللي��ة املُ�ص��ته َدفة املُح � َّددة
1
بالعالم��ة ،Xوميك��ن ّلالع��ب االنتق��ال اإىل اأي خلي��ة
فارغة جماورة ملوقعه احلايل.
مو�صع 2
البداية
�صكل :2.17لُغز متاهة ب�صيط
املو�صحة يف �ص��كل 2.17حتتوي على 3خاليا ت�ص��غلُها احلواجز تكون اخللية فارغة اإذا مل حتتوي على عائق .على �ص��بيل املثال ،املتاهة َّ
( .)Blocksه��ذه احلواج��ز املل ّون��ة بالل��ون الرم��ادي تُ�ص�كِّل عائ ًق��ا يج��ب عل��ى الالع��ب جت��اوزه للو�ص��ول اإىل اله��دف ،Xوميك��ن ّلالع��ب
االنتقال ب�صكل اأفقي اأو راأ�صي اأو قطري اإىل اأي خلية فارغة جماورة ملوقعه احلايل كما يظهر يف �صكل ،2.18على �صبيل املثال:
0 1 2 0 1 2
0 0
1 1
2 2
�صكل :2.18ميكن لالعب االنتقال ب�صكل اأفقي اأو راأ�صي اأو قطري اإىل اأي خلية فارغة جماورة ملوقعه احلايل
الهدف هو اإيجاد امل�صار االأق�صر واالأق ّل عددًا ملرات
import numpy as np
فح��ص اخلالي�ا .وبالرغ�م م�ن اأن املتاه�ة ال�صغ�رة
# create a numeric 3 x 3 matrix full of zeros. 3 3قد تبدو ب�صيطة ّلالعب الب�صري ،اإال اأنه يتوجب
))small_maze=np.zeros((3,3
عل�ى اخلوارزمي�ة الذكي�ة اإيج�اد حل�ول للتعام�ل م�ع
# coordinates of the cells occupied by blocks املتاه�ات الكب�رة واملُعق�دة للغاي�ة ،مث�ل :متاه�ة
])blocks=[(1, 1), (2, 1), (2, 2
10 . 000 10 . 000الت�ي حتت�وي عل�ى مال ي�ن
for block in blocks: احلواجز املُوزَّعة يف اأ�صكال ُمع َّقدة ومتنوعة.
# set the value of block-occupied cells to be equal to 1
small_maze[block]=1 ميك�ن ا�ص�تخدام املقط�ع الرب جم�ي الت�ايل بلغ�ة
البايث�ون الإن�ص�اء جمموع�ة بيان�ات ُت�ص� ّور املث�ال
small_maze
ُو�صح يف ال�صكل .2.18 امل َّ
array([[0., 0., 0.],
[0., 1., 0.],
)]][0., 1., 1.
109
ميك��ن.)Ones( ) وامل�ص��غولة باالآح��ادZeros( ُمت َّث��ل اخلالي��ا الفارغ��ة باالأ�صف��ار،يف ه��ذا التمثي��ل الرقم��ي للمتاه��ة
: مثل،حتديث املقطع الربجمي نف�صه ب�صهولة الإن�صاء متاهات كبرة ومُعقدة للغاية
import random
random_maze=np.zeros((10,10))
def plot_maze(maze):
ax = plt.gca() # create a new figure
ax.invert_yaxis() # invert the y-axis to match the matrix
ax.axis('off') # hide the axis labels
ax.set_aspect('equal') # make sure the cells are rectangular
plot_maze(random_maze)
المربعات الخ�صراء
فارغة ويُمكن
المربعات ال�صوداء .اجتيازها
م�صغولة بالحواجز وال يُمكن
.اجتيازها
110
ُميكن ا�صتخدام الدالة التالية ال�صتدعاء قائمة حتتوي على كل اخلاليا الفارغ ِة واملُجاورة خللية ُحم َّددة يف اأي متاهة:
# list of accessible neighbors, initialized to empty x-1, y-1 x-1, y x-1, y+1
][=neighbors
x, y-1 x, y x, y+1
x,y=cell x+1, y-1 x+1, y x+1, y+1
# if the adjacent cell is within the bounds of the grid and is not occupied by a block
if i>=0 and j>=0 and i<len(maze) and j<len(maze[0]) and
maze[(i,j)]==0:
))neighbors.append(((i,j),1
return neighbors
يفرت���ص ه��ذا التطبي��ق اأن كل عميل��ة انتق��ال م��ن خلي��ة اإىل اأخ��رى جم��اورة �ص��وا ًء اأفق ًي��ا اأو راأ�ص�يًا اأو قطر ًي��ا يت��م بتكلف��ة
َاح��دَ ة فق��ط� .ص��يتم اإع��ادة النظ��ر يف ه��ذه الفر�صية يف وق��ت الحق من هذا الدر���ص بعر�ص حاالت اأكر مقداره��ا ِوح��دَ ة و ِ
تعقيدً ا مع �صروط انتقال مُتغرة.
تَ�ص��تخدِ م كل خوارزمي��ات البح��ث دال��ة () get_accessible_neighborsيف حماول��ة ح��ل املتاه��ة .يف االأمثل��ة التالي��ة
تُ�ص��تخدم املتاه��ة 3 3املُ�ص َّمم��ة باالأعل��ى للتحق��ق م��ن اأن الدال��ة ت�ص��تدعي اخللي��ة ال�صحيح��ة الفارغ��ة واملج��اورة للخلي��ة
املُحدَّدة.
0 1 2
0
# this cell is the northwest corner of the grid and has only 2 accessible neighbors
1 ))get_accessible_neighbors(small_maze, (0,0
2
])[((0, 1), 1), ((1, 0), 1
2
])[((1, 0), 1
الخلية
المُجاورة بعد اأن تعلّمت كيفية اإن�صاء املتاهات ،وكذلك ا�صتدعاء اخلاليا املجاورة الأي خلية يف املتاهة،
ف�اإنّ اخلط��وة التالي��ة ه��ي تطبيق خوارزميات البحث التي ميكنها حل املتاهة من خالل اإيجاد
خلية البداية امل�صار االأق�صر من خلية البداية اإىل خلية الهدف املُحدَّدة.
�صكل :2.20اخلاليا املجاورة
111
ا�صتخدام خوارزمية البحث باأولوية األت�صاع يف حل األغاز املتاهة
Using BFS to Solve Maze Puzzles
) حل��ل األغ��ازBFS( املُ�ص��ار اإليه��ا يف ه��ذا اجل��زء خوارزمي��ة البح��ث باأولوي��ة االت�ص��اعbfs_maze_solver)( �تخدم دال��ةِ �تَ�ص
املُح�دَّدةget_accessible_neighbors)( �تخدم ه��ذا النم��وذج دال��ة ِ � يَ�ص.املتاه��ة با�ص��تخدام خلي��ة البداي��ة وخلي��ة اله��دف
و مبجرد عثور خوارزمية البحث باأولوية،باالأعلى ال�ص��تدعاء اخلاليا املُجاورة التي ميكن فح�صها عند اأي نقطة اأثناء البحث
املُو�صح��ة باالأ�ص��فل الإع��ادة ِبن��اءreconstruct_shortest_path)( �صتُ�ص��تخدم دال��ة،) عل��ى اخلل ّي��ة اله��دفBFS( االت�ص��اع
: وذلك بتتبع امل�صار ب�صورة عك�صية من خلية الهدف اإىل خلية البداية،امل�صار االأق�صر وا�صتدعائه
def reconstruct_shortest_path(parent:dict, start_cell:tuple, target_cell:tuple):
shortest_path = []
# keep going from parent to parent until the search cell has been reached
while my_parent!=start_cell:
return shortest_path
def bfs_maze_solver(start_cell:tuple,
target_cell:tuple,
maze:np.ndarray,
get_neighbors: Callable,
verbose:bool=False): # by default, suppresses descriptive output text
cell_visits=0 # keeps track of the number of cells that were visited during the search
visited = set() # keeps track of the cells that have already been visited
to_expand = [] # keeps track of the cells that have to be expanded
112
shortest_distance[start_cell] = 0
# remembers the direct parent of each cell on the shortest path from the start_cell to the cell
parent = {}
#the parent of the start cell is itself
parent[start_cell] = start_cell
while len(to_expand)>0:
next_cell = to_expand.pop(0) # get the next cell and remove it from the expansion list
if verbose:
print('\nExpanding cell', next_cell)
if verbose:
print('\tVisiting neighbor cell',neighbor)
cell_visits+=1
if neighbor not in visited: # if this is the first time this neighbor is visited
visited.add(neighbor)
to_expand.append(neighbor)
parent[neighbor]= next_cell
shortest_distance[neighbor]=shortest_distance[next_cell]+cost
# target reached
if neighbor==target_cell:
# if the current shortest distance to the neighbor is longer than the shortest
# distance to next_cell plus the cost of transitioning from next_cell to this neighbor
if shortest_distance[neighbor]>shortest_distance[next_cell]
+cost:
parent[neighbor]=next_cell
shortest_distance[neighbor]=shortest_distance[next_cell]+cost
# search complete but the target was never reached, no path exists
return None,None,None
113
) للبحث يف كل اخليارات يف العُمق احلايل قبل االنتقال اإىل م�صتوىBFS( تتّبع الدالة منهجية البحث باأولوية االت�صاع
.to_expand وقائمة تُ�صمىvisited وتَ�صتخدم هذه املنهجية جمموعة واحدة تُ�ص ّمى،ال ُعمق التايل
بينم��ا تت�صمن القائمة.تت�صم��ن املجموع��ة االأوىل كل اخلالي��ا الت��ي ف ُِح َ�ص��ت م��رة واح��دة عل��ى االأقل من قبل اخلوارزمية
َت�ص��تخدم اخلوارزمي��ة كذل��ك. مم��ا يعن��ي اأن اخلالي��ا املُج��اورة مل تُفح���ص بع��د،الثاني��ة كل اخلالي��ا الت��ي مل ُت َو َّ�ص��ع بع��د
يحف��ظ االأوّل منهم��ا ط��ول امل�ص��ار االأق�ص��ر م��ن خلي��ة البداي��ة اإىل كل خلي��ة،parent وshortest_distance قامو�ص��ن
. بينما يحفظ الثاين عُ قدة اخللية االأ�صل يف امل�صار االأق�صر،اأخرى
طول احللshortest_distance]target_cell[ خزن املتغ� ِّ�ر ِّ �ص� ُي،مبج��رد الو�ص��ول اإىل اخللي��ة الهدف وانتهاء البحث
.والذي ميثل طول امل�صار االأق�صر من البداية اإىل الهدف
:ُو�صحة باالأعلى
َّ امل3 3 حلل املتاهة ال�صغرةbfs_maze_solver)( َ�صتخدم املقطع الربجمي التايل دالة ِ ي
Shortest Path: [(2, 0), (1, 0), (0, 1), (1, 2)]
Cells on the Shortest Path: 4
Shortest Path Distance: 3
Number of cell visits: 10
114
تنجح خوارزمية البحث باأولوية االت�صاع ( )BFSيف اإيجاد امل�صار االأق�صر بعد فح�ص 10خالياُ .ميكن ت�صوير عملية
البحث املطبّقة بخوارزمية البحث باأولوية االت�صاع ( )BFSب�صهولة عند ت�صوير املتاهة بالتمثيل املُ�صت ِند اإىل ُخمطَّ ط.
املثال التايل يعر�ص متاهة 3 3ومتثيلها باملُخطَّ ط:
0 1 2
1,0 0,0 1,2 0
1
115
neighbors=[]
x,y=cell
# if the cell is within the bounds of the grid and it is not occupied by a block
if i>=0 and j>=0 and i<len(maze) and j<len(maze[0]) and maze[(i,j)]==0:
neighbors.append(((i,j), diagonal_weight))
for i,j in [(x-1,y), (x,y-1), (x,y+1), (x+1,y)]: # for horizontal and vertical neighbors
neighbors.append(((i,j), horizontal_vertical_weight))
return neighbors
وكذلك وزن ُخم ّ�ص�ص خمتلف للحركات،ُ�صتخدم بتعين وزن ُخم ّ�ص�ص للحركات االأفقية و احلركات الراأ�صية ِ ت�صمح الدالة للم
) املُ�ص��ار اإليه بوا�ص��طة اأداة احلل يف البحث باأولوية االت�ص��اعWeighted Version( اإذا ا�ص�تُخدِ م االإ�صدار املوزون.القُطرية
: فاإنّ النتائج �صتكون كما يلي،)BFS solver(
from functools import partial
start_cell=(2,0)
target_cell=(1,2)
horz_vert_w=1 # weight for horizontal and vertical moves
diag_w=3 # weight for diagonal moves
Shortest Path: [(2, 0), (1, 0), (0, 1), (1, 2)]
Cells on the Shortest Path: 4
Shortest Path Distance: 7
Number of cell visits: 6
116
وكم��ا ه��و ُمتو َّق��ع ،اأخط �اأت اأداة احل��ل يف البح��ث باأولوي��ة االت�ص��اع ( )BFS solverيف عر���ص امل�ص��ار ال�ص��ابق نف�ص��ه
بال�صب��ط ،عل��ى الرغ��م م��ن اأن التكلف��ة ت�ص��اوي ،7وم��ن الوا�صح اأنه لي���ص امل�ص��ار االأق�صر .ويرجع ذل��ك اإىل الطبيعة غر
امل�ص��تنرة خلوارزمي��ة البح��ث باأولوي��ة االت�ص��اع ( ،)BFSحي��ث ال تاأخ��ذ اخلوارزمي��ة االأوزان بع��ن االعتب��ار عن��د حتدي��د
اخللية املُق َّرر تو�ص��يعها يف اخلطوة التالية؛ الأنها تُطبِّق بب�ص��اطة منهجية البحث بالعر�ص ِ
نف�ص��ها والتي توؤدي اإىل امل�ص��ار
نف�ص��ه ال��ذي وجدت��ه اخلوارزمي��ة يف االإ�ص��دار غ��ر امل��وزون ( )Unweighted Versionم��ن املتاه��ة .الق�ص��م الت��ايل
ي�ص��ف طريق��ة معاجل��ة نقط��ة ال�صع��ف ه��ذه با�ص��تخدام خوارزمي��ة البح��ث باأولوي��ة االأف�ص��ل ( ،)A* searchوه��ي
خوارزمي��ة ُم�ص��تنرة واأك��ر ذكا ًء ت�صب��ط �ص��لوكها وف ًق��ا ل �الأوزان املُح � َّددة ،وبالت��ايل ُميكنه��ا ح��ل املتاه��ات با�ص��تخدام
االنتقاالت املوزونة ( )Weighted Transitionsواالنتقاالت غر املوزونة (.)Unweighted Transitions
ا�صتخدام خوارزمية البحث باأولوية األأف�صل يف حل األغاز املتاهة
Using A* Search to Solve Maze Puzzles
كم�ا يف خوارزمي�ة البح�ث باأولوي�ة االت�ص�اع ( ،)BFSتَفحَ ��ص خوارزمية البح�ث باأولوية االأف�صل ( )A* searchخلية
واح�دة يف كل م�رة بفح��ص كل خلي�ة جم�اورة ميك�ن الو�صول اإليها .فبينما ت�ص�تخدم خوارزمية البحث باأولوية االت�ص�اع
( )BFSمنهجية بحث عمياء باأولوية العر�ص لتحديد اخللية التالية التي �صتَفحَ �صها ،تَفحَ �ص خوارزمية البحث باأولوية
�تهدفة اأق�ص�ر م�ص�افة حم�ص�وبة بوا�ص�طة الدال�ة االأف�ص�ل ( )A* searchاخللي�ة الت�ي يك�ون بينه�ا وب�ن اخللي�ة املُ�ص َ
اال�ص�تداللية ( .)Heuristic Functionيعتم�د التعري�ف الدقي�ق للدال�ة اال�ص�تداللية عل�ى التطبي�ق .يف حال�ة األغ�از
املتاه�ة ،توفِّ�ر الدال�ة اال�ص�تداللية تقدي�رًا دقيقً�ا مل�دى قُ�رب اخللي�ة املُر�صَّ �حة اإىل اخللي�ة املُ�ص�تهدَ فة .ي�صم�ن اال�ص�تدالل
املُطبَّق عدم املبالغة يف تقدير ( )Overestimateامل�ص�افة الفعلية اإىل اخللية املُ�ص�تهدَ فة مثل :عر�ص م�ص�افة تقديرية
اأك�رب م�ن امل�ص�افة احلقيقي�ة اإىل اله�دف ،وبالت�ايل �ص�وف ُحت�دِّ د اخلوارزمي�ة اأق�ص�ر م�ص�ار ُحمتم�ل ل�كلٍ م�ن املُخطَّ ط�ن
املوزون ( )Weightedوغر املوزون ( .)Unweightedاإذا كان اال�صتدالل ُيبالِغ يف بع�ص االأحيان يف تقدير امل�صافة،
حال ،ولكن قد ال يكون االأف�صل .اال�صتدالل املُحتمل االأب�صط �صتُقدِّ م خوارزمية البحث باأولوية االأف�صل (ً )A* search
الذي لن يوؤدي اإىل املُبالغة يف تقدير امل�صافة هو دالة ب�صيطة تعطي دومً ا م�صافة تقديرية قدرها وِحدَ ة واحدة.
def constant_heuristic(candidate_cell:tuple, target_cell:tuple):
return 1
1,0 1 0,0 عل��ى الرغ��م م��ن اأن ه��ذا اال�ص��تدالل �ص��ديد التف��اوؤل ،اإال اأن��ه ل��ن ُيق��دم أاب��دً ا تقدي�رًا اأعل��ى م��ن
1
امل�صافة احلقيقية ،وبالتايل �صيوؤدي اإىل اأف�صل حل ممكن� .صيتم تقدمي ا�صتدالل متطور ُميكنه
العثور على اأف�صل حل ب�صكلٍ �صريع يف هذا الق�صم الحقًا.
0,1
َ�صتخدم الدالة التالية دالة ا�صتداللية معطاة للعثور على اخللية التي يجب تو�صيعها بعد ذلك� :صكل :2.22اال�صتدالل الثابت ت ِ
def get_best_candidate(expansion_candidates:set,
shortest_distance:dict,
heuristic:Callable):
winner = None
# best (lowest) distance estimate found so far. Initialized to a very large number
best_estimate= sys.maxsize
# distance estimate from start to target, if this candidate is expanded next
117
candidate_estimate=shortest_distance[candidate]+heuristic(candidate,target_cell)
if candidate_estimate < best_estimate:
winner = candidate
best_estimate=candidate_estimate
return winner
ِ �َي�ص
. لفح���ص اخلالي��ا املُر�صَّ ��حة يف املجموع��ة وحتدي��د االأف�ص��لFor �تخدم التطبي��ق املُ�ص��ار اإلي��ه باالأعل��ى حلق��ة التك��رار
) يف حتدي��د املُر�صَّ ��ح االأف�ص��ل دون احلاج��ةPriority Queue( ق��د ُي�ص��تخدم طاب��ور االأولوي��ة،و ِلتطبي��ق اأك��ر كف��اءة
كدال� ٍة ُم�ص��اعدة بوا�ص��طة دال��ةget_best_candidate)( �تخدم دال��ة َ � تُ�ص.اإىل فح���ص كل املُر�صَّ � ِ�حن ب�ص��ورة متك��ررة
�تخدم ه��ذا التطبي��ق كذل��ك ِ � يَ�ص، وباالإ�صاف��ة اإىل الدال��ة اال�ص��تداللية.ُو�صح��ة فيم��ا يل��ي
َّ املastar_maze_solver)(
املُ�ص��ارreconstruct_shortest_path)( وget_accessible_neighbors_weighted)( الدالتن املُ�ص��اعدتن
.اإليهما يف الق�صم ال�صابق
import sys
def astar_maze_solver(start_cell:tuple,
target_cell:tuple,
maze:np.ndarray,
get_neighbors: Callable,
heuristic:Callable,
verbose:bool=False):
cell_visits=0
shortest_distance = {}
shortest_distance[start_cell] = 0
parent = {}
parent[start_cell] = start_cell
expansion_candidates = set([start_cell])
fully_expanded = set()
best_cell = get_best_candidate(expansion_candidates,shortest_distance,heuristic)
# if the target cell has been reached, reconstruct the shortest path and exit
if best_cell == target_cell:
118
shortest_path=reconstruct_shortest_path(parent,start_cell,target_cell)
cell_visits+=1
expansion_candidates.add(neighbor)
# this neighbor has been visited before, but a better (shorter) path to it has just been found
elif shortest_distance[neighbor] > shortest_distance[best_cell] + cost:
parent[neighbor] = best_cell
if neighbor in fully_expanded:
fully_expanded.remove(neighbor)
expansion_candidates.add(neighbor)
fully_expanded.add(best_cell)
start_cell=(2,0)
target_cell=(1,2)
Shortest Path: [(2, 0), (1, 0), (0, 1), (1, 2)]
Cells on the Shortest Path: 4
Shortest Path Distance: 3
Number of cell visits: 12
) ع�ن امل�ص�ار املُحتم�ل االأق�ص�ر واالأف�ص�ل بع�دA* search solver( �ص�تبحث اأداة احل�ل يف البح�ث باأولوي�ة االأف�ص�ل
) الت�ي وج�دت احل�ل بع�دBFS solver( وه�ذا اأك�ر قلي ً�ال م�ن اأداة احل�ل يف البح�ث باأولوي�ة االت�ص�اع. خلي�ة12 فح��ص
وكما.astar_maze_solver)( �تخدم الإر�ص�اد َ ه�ذا يع�ود اإىل ب�ص�اطة اال�ص�تدالل الثابت املُ�ص. خالي�ا فق�ط10 فح��ص
ٍ ُميكن ا�صتخدام دالة ا�صتدالل اأخرى لتمكن اخلوارزمية من اإيجاد احلل،�صيت�صح الحقًا يف هذا الق�صم
.ب�صكل اأ�صرع
) ق��ادرة عل��ى ح��ل املتاه��ةA* search( اخلط��وة التالي��ة ه��ي تقيي��م م��ا اإذا كان��ت خوارزمي��ة البح��ث باأولوي��ة االأف�ص��ل
:) يف العثور على اأق�صر م�صار لها اأم الBFS( املوزونة التي ف�صلت خوارزمية البحث باأولوية االت�صاع
start_cell=(2,0)
target_cell=(1,2)
120
)print('\nShortest Path:', solution
))print('Cells on the Shortest Path:', len(solution
)print('Shortest Path Distance:', distance
)print('Number of cell visits:', cell_visits
])Shortest Path: [(2, 0), (1, 0), (0, 0), (0, 1), (0, 2), (1, 2
Cells on the Shortest Path: 6
Shortest Path Distance: 5
Number of cell visits: 12
ُو�صح النتائج قدرة () astar_maze_solverعلى حل احلالة املوزونة بالعثور على امل�صار االأق�صر املُحتمل ت ِّ
يو�ص��ح مزاي��ا ا�ص��تخدام
[( ])2 ،1( ،)2 ،0( ،)1 ،0( ،)0 ،0( ،)0 ،1( ،)0 ،2بتكلف��ة اإجمالي��ة قدره��ا .5وه��ذا ِّ
خوارزمية بحث م�صتنرة ،فهي ُمتكِّنك من اإيجاد احلل االأمثل با�صتخدام اأب�صط طريقة ممكنة.
121
verbose=False)
print('\nBFS unweighted.')
print('\nShortest Path:', solution_bfs_unw)
print('Cells on the Shortest Path:', len(solution_bfs_unw))
print('Shortest Path Distance:', distance_bfs_unw)
print('Number of cell visits:', cell_visits_bfs_unw)
BFS unweighted.
Shortest Path: [(14, 0), (13, 1), (12, 2), (11, 3), (10, 4), (9, 5), (8,
6), (8, 7), (9, 8), (9, 9), (9, 10), (9, 11), (9, 12), (8, 13), (7, 13),
(6, 13), (5, 12), (4, 11), (5, 10)]
Cells on the Shortest Path: 19
Shortest Path Distance: 18
Number of cell visits: 1237
Shortest Path: [(14, 0), (13, 1), (12, 2), (11, 3), (10, 4), (10, 5), (10,
6), (9, 7), (9, 8), (10, 9), (9, 10), (9, 11), (9, 12), (8, 13), (7, 13),
(6, 13), (5, 12), (6, 11), (5, 10)]
Cells on the Shortest Path: 19
Shortest Path Distance: 18
Number of cell visits: 1272
horz_vert_w=1
diag_w=3
122
big_maze,
partial(get_accessible_neighbors_weighted,
horizontal_vertical_weight=horz_vert_w,
diagonal_weight=diag_w),
verbose=False)
print('\nBFS weighted.')
print('\nShortest Path:', solution_bfs_w)
print('Cells on the Shortest Path:', len(solution_bfs_w))
print('Shortest Path Distance:', distance_bfs_w)
print('Number of cell visits:', cell_visits_bfs_w)
BFS weighted.
Shortest Path: [(14, 0), (14, 1), (14, 2), (13, 2), (13, 3), (12, 3), (12,
4), (11, 4), (11, 5), (10, 5), (10, 6), (9, 6), (9, 7), (9, 8), (9, 9), (9,
10), (9, 11), (9, 12), (9, 13), (8, 13), (7, 13), (6, 13), (5, 13), (5,
12), (4, 11), (5, 10)]
Cells on the Shortest Path: 26
Shortest Path Distance: 30
Number of cell visits: 1235
Shortest Path: [(14, 0), (13, 0), (12, 0), (11, 0), (10, 0), (9, 0), (9,
1), (9, 2), (9, 3), (9, 4), (9, 5), (9, 6), (9, 7), (9, 8), (9, 9), (9,
10), (9, 11), (9, 12), (9, 13), (8, 13), (7, 13), (6, 13), (5, 13), (5,
12), (5, 11), (5, 10)]
Cells on the Shortest Path: 26
Shortest Path Distance: 25
Number of cell visits: 1245
123
تتوافق النتائج مع تلك التي ح�صلت عليها يف املتاهة ال�صغرة وهي كالتايل:
• جنح��ت خوارزم ّيت��ا البح��ث باأولوي��ة االت�ص��اع ( )BFSوالبح��ث باأولوي��ة االأف�ص��ل ( )A* searchيف العث��ور عل��ى امل�ص��ار
االأق�صر لالإ�صدار غر املوزون.
• وجدت خوارزمية البحث باأولوية االت�صاع ( )BFSاحلل بعد فح�ص عدد اأق ّل من اخلاليا وهو 1237مقابل 1272
يف خوارزمية البحث باأولوية االأف�صل (.)A* search
• ف�ص��لت خوارزمي��ة البح��ث باأولوي��ة االت�ص��اع ( )BFSيف العث��ور عل��ى امل�ص��ار االأق�ص��ر لالإ�ص��دار امل��وزون ،حي��ث ع��رت
على م�صار بطول 30وحدة.
• ع��رت خوارزمي��ة البح��ث باأولوي��ة االأف�ص��ل ( )A* searchعل��ى امل�ص��ار االأق�ص��ر لالإ�ص��دار امل��وزون ،حي��ث ع��رت
على م�صار بطول 25وحدة.
�تخدم املقطع التايل لتمثيل امل�ص��ار االأق�صر الذي وجدته اخلوارزميتان؛ خوارزمية البحث باأولوية االت�ص��اع ()BFS ُي�ص� َ
وخوارزمية البحث باأولوية االأف�صل ( )A* searchلالإ�صدار املوزون كالتايل:
)(maze_bfs_w=big_maze.copy )(maze_astar_w=big_maze.copy
)plot_maze(maze_bfs_w )plot_maze(maze_astar_w
خوارزمية البحث باأولوية االأف�صل (.)A* search خوارزمية البحث باأولوية االت�صاع (.)BFS
�صكل :2.24مقارنة بن حلَّي خوارزميتي البحث باأولوية االت�صاع والبحث باأولوية االأف�صل
يوؤك��د التّمثي��الن اأن الطبيع��ة املُ�ص��تنرة خلوارزمي��ة البح��ث باأولوي��ة االأف�ص��ل ( )A* searchت�ص��مح لها بتجنب احلركة
ال ُقطري��ة ،الأن تكلفته��ا اأعل��ى م��ن احلركت��ن االأفقي��ة والراأ�ص��ية .وم��ن ناحي��ة اأخ��رى ،تتجاه��ل خوارزمي��ة البح��ث باأولوية
االأف�ص��ل ( )BFSغ��ر امل�ص��تنرة تكلف��ة كل حرك��ة وتُعط��ي ح� ً�ال اأعل��ى تكلف��ة .وفيم��ا يل��ي مقارن��ة عام��ة ب��ن اخلوارزميات
املُ�صتنرة وغر املُ�صتنرة كما هو مو�صح يف جدول :2.6
124
جدول :2.6مقارنة بني اخلوارزميات املُ�صتنرة وغر املُ�صتنرة
غر امل ُ�صتنرة امل ُ�صتنرة معاير املقارنة
التعقيد احل�صابي
اأكر تعقيدً ا ح�صابيًا. اأقل تعقيدً ا.
()Computational Complexity
ُحتقِق احلل االأمثل. حتقّقُ حلوال مُنا�صب ًة ب�صكلٍ عام. الفعالية ()Effectiveness
�كل �ص��ريع بفح�صوم��ع ذل��ك ،تُظهِ ��ر النتائ��ج اأن خوارزمي��ة البح��ث باأولوي��ة االت�ص��اع ( )BFSميكنها العثور على احلل االأمثل ب�ص� ٍ
ع��دد اأق��ل م��ن اخلالي��ا يف احلال��ة غ��ر املوزون��ة .ميك��ن ُمعاجل��ة ذل��ك بتوف��ر ا�ص��تدالل اأك��ر ذكا ًء خلوارزمي��ة البح��ث باأولوي��ة
ا الأف�ص��ل ( .)A* searchواال�ص��تدالل ال�ص��هر يف التطبيق��ات ا ملُ�ص��ت ِندة اإىل امل�ص��افة ه��و م�ص��افة مانها ت��ن
مثاال على ( ،)Manhattan Distanceوه��ي جمم��وع الفروق��ات املُطلق��ة ب��ن اإحدا ِث َّي��ي نقطت��ن ُمعطات��نِّ .
يو�صح ال�ص��كل اأدن��اه ً
كيفية ح�صاب م�صافة مانهاتن:
م�صافة مانهاتن Manhattan Distance
x1,y1=candidate_cell
x2,y2=target_cell
return abs(x1 - x2) + abs(y1 - y2)
astar_maze_solver)( �تخدم املقط��ع الربجم��ي الت��ايل الختب��ار اإمكاني��ة ا�ص��تخدام هذا اال�ص��تدالل الذكي لدع��م
َ �يُ�ص
ٍ يف البحث ب�صكل اأ�صرع يف
:كل من احلاالت املوزونة وغر املوزونة
start_cell=(14,0)
target_cell=(5,10)
126
A* Search unweighted with the Manhattan heuristic.
Shortest Path: [(14, 0), (13, 1), (12, 2), (11, 3), (10, 4), (9, 5), (8,
6), (8, 7), (9, 8), (9, 9), (9, 10), (9, 11), (9, 12), (8, 13), (7, 13),
])(6, 13), (5, 12), (5, 11), (5, 10
Cells on the Shortest Path: 19
Shortest Path Distance: 18
Number of cell visits: 865
Shortest Path: [(14, 0), (14, 1), (13, 1), (12, 1), (12, 2), (12, 3), (12,
4), (12, 5), (12, 6), (12, 7), (11, 7), (11, 8), (10, 8), (9, 8), (9, 9),
(9, 10), (9, 11), (9, 12), (9, 13), (8, 13), (7, 13), (6, 13), (5, 13), (5,
])12), (5, 11), (5, 10
Cells on the Shortest Path: 26
Shortest Path Distance: 25
Number of cell visits: 1033
توؤك��د النتائ��ج اأن ا�ص��تدالل م�ص��افة مانهات��ن ( )Manhattan Distanceميك��ن ا�ص��تخدامه لدع��م خوارزمي��ة البح��ث
كل منباأولوي��ة االأف�ص��ل ( )A* searchيف العث��ور عل��ى امل�ص��ارات االأق�ص��ر املُحت َمل��ة بفح���ص اأق��ل ع��دد م��ن اخلالي��ا يف ٍ
احل��االت املوزون��ة وغ��ر املوزون��ة .عل ًم��ا ب�اأن ا�ص��تخدام ه��ذا اال�ص��تدالل االأك��ر ذكا ًء يفح���ص ع��ددًا اأق��ل م��ن اخلالي��ا م��ن
ذلك املُ�صتخدَ م يف خوارزمية البحث باأولوية االت�صاع (.)BFS
يُلخِّ �ص جدول 2.7النتائج حول مُتغرات اخلوارزميّات املختلفة يف املتاهة الكبرة:
َح�صت 1033
امل�صافة= ،25وف َ َح�صت 1245
امل�صافة= ،25وف َ َح�صت 1235
امل�صافة= ،30وف َ املوزونة
َح�صت865
امل�صافة= ،18وف َ َح�صت 1272
امل�صافة= ،18وف َ َح�صت1237
امل�صافة= ،18وف َ غر املوزونة
ُو�ص��ح اجل��دول مزاي��ا ا�ص��تخدام الطَّ رائ��ق ا أالك��ر ذكا ًء حل��ل امل�ص��كالت املُ�ص��ت ِندة اإىل البح��ث مث��ل تل��ك امل َّ
ُو�صح��ة به��ذا ي ِّ
الدر�ص:
• ال َتح �وُل م��ن خوارزمي��ة البح��ث باأولوي��ة االت�ص��اع ( )BFSغ��ر املوزون��ة اإىل خوارزمي��ة البح��ث باأولوي��ة االأف�ص��ل
نتائج اأف�صل ،كما اأتاح اإمكانية حل امل�صكالت االأكر تعقيدً ا. ( )A* searchاملوزونة َح َّقق َ
• ُميك��ن حت�ص��ن ذكاء خوارزمي��ات البح��ث املُ�ص��تنرة با�ص��تخدام دوال اال�ص��تدالل االأف�ص��ل الت��ي ت�ص��مح له��ا بالعثور على
احلل االأمثل ب�صكلٍ اأ�صرع.
127
مترينات
1اذكر تطبيقني خلوارزميات البحث.
128
3ا�سرح باإيجاز كيف تعمل خوارزمية البحث باأولوية االأف�سل (.)A* search
َ 4عدِّل املقطع الربجمي بتغير الوزن القُطري ( )Diagonal Weightمن 3اإىل .1.5ماذا تُالحظ؟
ه��ل يتغ��ر امل�س��ار االأق�س��ر يف حالت��ي خوارزمي��ة البح��ث باأولوي��ة االت�س��اع ( )BFSوخوارزمي��ة البح��ث باأولوي��ة االأف�س��ل
() A* search؟
َ 5عدِّل املقطع الربجمي بتبديل اإحداثيات خلية البداية مع احداثيات اخللية امل ُ�ستهدَفة .ماذا تُالحظ؟
هل امل�سار هو نف�سه كما كان �سابقًا للحاالت املوزونة من خوارزميتي البحث باأولوية االت�ساع ( )BFSوالبحث باأولوية
االأف�سل () A* search؟
129
الم�سروع
1
ع��دِّ ل املقط��ع الربجم��ي خلوارزمي��ة البح��ث باأولوي��ة االت�س��اع ( )BFSوخوارزمي��ة
البح��ث باأولوي��ة االأف�س��ل ( )A* searchاملوزونت��ني بتغي��ر االأوزان االأفقي��ة والراأ�س��ية
عدل نقطة البداية اإىل (.)7 ،2 اإىل 3واالأوزان ال ُقطرية اإىل .5وكذلك ِّ
م��ا امل�س��ار اجلدي��د ذو امل�س��افة االأق�سر ،وما عدد اخلاليا الت��ي ف ُِح َ�ست يف االإ�سدارات 2
غ��ر املوزون��ة خلوارزميت��ي البحث باأولوية االت�س��اع ( )BFSوالبح��ث باأولوية االأف�سل
()A* searchبا�ستخدام دالة اال�ستدالل الثابت؟ َح ِّدد هذه القيم ود ِّون مالحظاتك.
3
اتب��ع اخلط��وات نف�س��ها لالإ�س��دارات املوزون��ة م��ن خوارزميت��ي البح��ث باأولوية االت�س��اع
( )BFSوالبح��ث باأولوي��ة االأف�س��ل ( )A* searchبا�س��تخدام دال��ة اال�س��تدالل
الثابت.
4
كرِّر العملية لالإ�سدارات غر املوزونة واملوزونة من خوارزميتي البحث باأولوية االت�ساع
( )BFSوالبح��ث باأولوي��ة االأف�س��ل ( )A* searchبا�س��تخدام دال��ة ا�س��تدالل مانهات��ن
(.)Manhattan Heuristic
130
ماذا تع ّلمت
امل�سطلحات الرئي�سة
131
.3معا ة اللغ��ات الطبيعية
�س ��يتعلّم الطال ��ب يف ه ��ذه الوح ��دة عملي ��ة تدري ��ب �س ��املة لنم ��وذج التع ُّل ��م املوجَّ ��ه
والتع ُّل ��م غ ��ري املوجَّ ��ه لفه ��م املعن ��ى الكام ��ن يف اأج ��زاء الن�سو� ��ض .وكذل � �س ��يتعلّم
كيفي ��ة ا�س ��تخدام تع ُّل ��م األل ��ة ( )Machine Learning - MLيف دع ��م التطبيق ��ات
ذات ال�سلة عا ة اللغات الطبيعية (.)Natural Language Processing -NLP
اأهداف التعلُّم
بنهاية هذه الوحدة �سيكون الطالب قادرًا على اأن:
يُعرِّ ف التعلُّم املوجَّ ه.
يُدرِّب منوذج التعلُّم املوجَّ ه على فهم الن�ض.
يُعرِّ ف التعلُّم غري املوجَّ ه.
يُدرِّب منوذج التعلُّم غري املوجَّ ه على فهم الن�ض.
يُن�سئ روبوت درد�سة ب�سيط.
يُنت� ��ج الن�سو�� ��ض با�س� ��تخدام تقني� ��ات تولي� ��د اللغ� ��ات الطبيعي� ��ة
(.)Natural Language ener tion -NLG
األأدوات
مفكرة جوبيرت ()Jupyter Notebook
132
الدر�ض األأول
املوجه
التع ُّلم َّ
ا�ستخدام التع ُلّم املوجَّ ه لفهم الن�سو�ض
Using Supervised Learning to Understand Text
معا جل��ة اللغ��ات الطبيعي��ة ( )Natural Language Processing - NLPه��ي اإ ح��دى جم��االت ا ل��ذكاء اال�سطنا ع��ي
( )Artificial Intelligence - AIالت��ي تر ّك��ز عل��ى متك��ني اأجه��زة احلا�س��ب لت�سب��ح ق��ادرة عل��ى فه��م اللغ��ات الب�س��ريّة ،وتف�س��رها،
واإنتاجها .حيث تُعنى معاجلة اللغات الطبيعية بعدد من املهام ،مثل :ت�سنيف الن�سو�س ،وحُتليل امل�س��اعر ،والرتجمة االآلية ،واالإجابة
عل��ى االأ�س��ئلة� .س��ركز ه��ذا الدر���س ب�س��كل خا���س عل��ى كيفي��ة ا�س��تخدام التع ُّل��م َّ
املوج��ه ال��ذي ُيع� ُّد اأح��د االأن��واع الرئي�س��ة لتع ُّل��م االآل��ة
( )Machine Learning - MLيف حُتقيق الفهم والتنبوؤ التلقائي خل�سائ�س الن�سو�س.
كال من تعلُّم االآلة والتعلُّم العميق ،كما يت�سح يف ال�سكل ،3.1 لقد تعلّمت يف الوحدة االأوىل اأن الذكاء اال�سطناعي هو م�سطلح ي�سم ُل ًّ
فال��ذكاء اال�سطناع��ي ه��و ذل��ك املج��ال الوا�س��ع م��ن علوم احلا�س��ب الذي ُيعنى بابت��كار اآالت ذكية ،بينما تعلُّم االآلة ه��و اأحد فروع الذكاء
اال�سطناع��ي ال��ذي ير ّك��ز عل��ى ت�سمي��م اخلوارزميات وبِناء النم��اذج التي ُمتكِّن االآلة من التعلُّم من البيانات دون احلاجة اإىل برجمتها
ب�سكل �سريح.
مكتبة باندا�س هي مكتبة �سهيرة تُ�ستخدم لقراءة ومعالجة البيانات ال�سبيهة بجداول البيانات.
135
# load the train and testing data.
imdb_train_reviews=pd.read_csv('imdb_data/imdb_train.csv')
imdb_test_reviews=pd.read_csv('imdb_data/imdb_test.csv')
imdb_train_reviews
تقييم اإيجابي
تقييم �سلبي
# extract the text from the 'text' column for both training and testing.
X_train_text=imdb_train_reviews['text']
X_test_text=imdb_test_reviews['text']
عاد ًة يفY وX ت�ستخدم الرموز
عن البياناتX فيعرب
ّ التعلُّم املوجَّ ه
# extract the labels from the 'label' column for both training and testing. عن القيمY و،املدخلة للتنبوؤ
Y_train=imdb_train_reviews['label'] .امل�ستهدفة
Y_test=imdb_test_reviews['label']
X_train_text # training data in text format
# the min_df parameter is used to ignore terms that appear in less than 10 reviews.
)vectorizer_v1 = CountVectorizer(min_df=10
X_train_v1
137
# expand the sparse data into a sparse matrix format, where each column represents a different word.
X_train_v1_dense=pd.DataFrame(X_train_v1.toarray(),
))(columns=vectorizer_v1.get_feature_names_out
X_train_v1_dense
138
وبح�سب املتوقّع حُتتاج امل�سفوفة املتباعدة اإىل ذاكرة اأقل بكثر وحُتديدً ا 0.000048ميجابايت .بينما ت�سغل امل�سفوفة
الكثيفة 7جيجابايت ،كما اأنّ هذه امل�سفوفة لن تُ�ستخدَ م مرة اأخرى وبالتايل مُيكن حذفها لتوفر هذا احلجم الكبر
من الذاكرة:
ي�س��تخدم املقط��ع الربجم��ي الت��ايل تطبي��ق م�س َّن��ف باي��ز ال�س��اذج ( )Multinomial NBم��ن مكتب��ة �س��كلرن
( )Sklearn Libraryلتدريب منوذج التعلُّم املوجَّ ه على بيانات التدريب IMDbباملتَّجَ هات:
# create a prediction pipeline: first vectorize using vectorizer_v1, then use model_v1 to predict.
)prediction_pipeline_v1 = make_pipeline(vectorizer_v1, model_v1
عل��ى �س��بيل املث��ال� ،س�يُنتج ه��ذا املقط��ع الربجم��ي م�سفوف��ة نتائ��ج يرم��ز فيه��ا الرق��م 1للتقيي��م االإيجاب��ي و 0للتقيي��م
ال�سلبي:
prediction_pipeline_v1.predict(['One of the best movies of the year. Excellent
cast and very interesting plot.',
'I was very disappointed with his film. I
)] 'lost all interest after 30 minutes
139
يتنب�اأ خ��ط االأنابي��ب ب�س��كل �سحي��ح بالقيم��ة االإيجابي��ة وال�س��لبية للتقيمي��ني االأول والث��اين عل��ى الت��وايلُ .مُيك��ن ا�س��تخدام
الدال��ة املُ�س ّمن��ة () predict_probaلتحدي��د جمي��ع االحتم��االت الت��ي يقوم خط االأنابي��ب بتخ�سي�سها لكل واحدة من
القيمتني املحتملتني .العن�سر االأول هو احتمال تعيني 0والعن�سر الثاين هو احتمال تعيني :1
array([[0.08310769, 0.91689231],
)]][0.83173475, 0.16826525
predictions_v1
توف�ر لغ�ة البايث�ون العدي�د م�ن االأدوات لتحلي�ل وت�سوي�ر نتائ�ج خط�وط اأنابي�ب الت�سني�ف .ت�س�مل االأمثل�ة دال�ة
() accuracy_scoreمن مكتبة �س�كلرن ومتثيل م�سفوفة الدقة ( )Confusion Matrixمن مكتبة �س�ايكيت بلوت
( ،)Scikit-Plotوهن�اك مقايي��س تقيي�م اأخ�رى مث�ل :الدق�ة ،واال�س�تدعاء ،والنوعية ،واحل�سا�س�ية ،ومقيا��س درجة ،F1
وفقًا حلالة اال�ستخدام التي مُيكن ح�سابها من م�سفوفة الدقة .املُخرَج التايل هو تقريب دقيق لدرجة التنبوؤ:
from sklearn.metrics import accuracy_score
accuracy_score(Y_test, predictions_v1) # get the achieved accuracy.
0.8468
140
%%capture
!pip install scikit-plot; # install the scikit-plot library, if it is missing.
import scikitplot; # import the library
حُتت��وي م�سفوف��ة الدق��ة عل��ى ع��دد الت�سنيف��ات احلقيقي��ة مقاب��ل املُتو َّقع��ة .يف ُمهِ َّم��ة الت�سني��ف الثنائي��ة (مث��ل :م�س�األة
احتواء قيمتني ،املوجودة يف ُمهِ َّمة � ،)IMDbستحتوي م�سفوفة الدقة على اأربع خاليا:
%%capture
# use the prediction pipeline to get the prediction probabilities for this example
))]print(prediction_pipeline_v1.predict_proba([easy_example
]][[0.99874831 0.00125169
142
. يقدم منوذج التنبوؤ تنبوؤًا �سلبيًا موؤكدً ا بدرجة كبرة يف هذا املثال الب�سيط،كما هو مُتوقَّع
[('terrible', -0.07046118794796816),
('horrible', -0.06841672591649835),
('boring', -0.05909016205135171),
('plot', -0.024063095577996376),
('was', -0.014436071624747861),
('movie', -0.011956911011210977),
('actors', -0.011682594571408675),
('this', -0.009712387273986628),
('very', 0.008956707731803237),
('were', -0.008897098392433257)]
معامال في نموذج
ً الدرجة المقابلة لكل كلمة تمثل الخ�سائ�س الع�سرة
.االنحدار الخطي الب�سيط المُ�ستخدَ م لتقديم التف�سير .االأكثر تاأثيرًا
"I personally thought the movie was pretty good, very good acting by
Tadanobu Asano of Ichi the Killer fame. I really can't say much about the
story, but there were parts that confused me a little too much, and overall
I thought the movie was just too lengthy. Other than that however, the
movie contained superb acting great fighting and a lot of the locations
were beautifully shot, great effects, and a lot of sword play. Another
solid effort by Tadanobu Asano in my opinion. Well I really can't say
anymore about the movie, but if you're only outlook on Asian cinema is
Crouching Tiger Hidden Dragon or House of Flying Daggers, I would suggest
you trying to rent it, but if you're a die-hard Asian cinema fan I would
"say this has to be in your collection very good Japanese film.
144
# get the correct labels of this example.
)]]print('Correct Label:', class_names[Y_test[4600
على الرغم من اأن منوذج التن ُّبوؤ ي�ستنبط التاأثر االإيجابي لبع�س الكلمات على نح ٍو �سحيح مثل:
( beautifullyب�س��كل جمي��ل) ،و( greatرائ��ع) ،و( superbمده���س) ،اإال اأ ّن��ه ي ّتخ��ذ يف النهاي��ة ق��رارًا �س��لبيًا ا�س��تنادًا
اإىل العدي��د م��ن الكلم��ات الت��ي يب��دو اأنه��ا ال تع��رب ب�س��كل وا�س��ح ع��ن امل�س��اعر ال�س��لبية مث��ل( Asano :اأ�س��انو) ،وAsian
(اآ�سيوي) ،و( movieفيلم) ،و( actingمتثيل).
املنطق الذي ي�ستخدمه منوذج التن ُّبوؤ لت�سنيف املفردات الواردة يف ن�سو�س التقييمات يو�سح العيوب الكبرة يف ِ وهذا ِّ
ٍ
يو�سح كيف اأن حُت�سني هذا املنطق مُيكن اأن يطور من اأداء منوذج التن ُّبوؤ اإىل حد كبر. املُقدمة .الق�سم التايل ّ
145
�سن الربجمة األ اهية للن�سو�ض
Improving Text ec ori tion
ا�س��تخدم االإ�س��دار االأول خل��ط اأنابي��ب التنب �وؤ اأداة CountVectorizer
التعبري النمطي (:)Regular Expression حل�س��اب ع��دد امل��رات الت��ي تظه��ر فيه��ا كل كلم��ة يف كل تقيي��م .تتجاه��ل ه��ذه
التعب��ر النمط��ي ه��و من��ط ن���س ُي�س��تخدَ م ملطابقة املنهجية حقيقتني اأ�سا�سيتني حول اللغات الب�سرية:
وملعاجل��ة �سال�س��ل الن�سو���س وتق��دمي طريق��ة • قد يتغر معنى الكلمة واأهميّتها ح�سب الكلمات املُ�ستخدَ مة معها.
موج��زة ومرن��ة لتحدي��د اأمن��اط الن�سو���س ،كم��ا • تك��رار الكلم��ة يف املُ�س��تنَد ال ُيع� ُّد دومً ��ا متثي� ً�ال دقيقًا الأهميّتها .على �س��بيل
تُ�س�تَخدم عل��ى نط��اق وا�س��ع يف معاجل��ة الن�سو���س املث��ال ،عل��ى الرغ��م م��ن اأن تك��رار كلم��ة ( greatرائ��ع) مرت��ني ق��د مُيث��ل
وحُتليل البيانات. موؤ�س�رًا اإيجاب ًي��ا يف م�س��تند يحت��وي عل��ى 100كلم��ة ،اإال اأن��ه مُيث��ل موؤ�س�رًا
اأقل اأهمية بكثر يف م�ستند يحتوي على 1000كلمة.
�سي�س��رح ه��ذا اجل��زء كيفي��ة حُت�س��ني الربجم��ة االجتاهي��ة للن�سو���س الأخ��ذ هات��ني احلقيقت��ني يف عني االعتب��ار .ي�س��تدعي املقطع
الربجمي التايل ثالثة مكتبات خمتلفة بلغة البايثون� ،س ُت�ستخدم لتحقيق ذلك:
• nltkو جين�سم ( :)Gensimتُ�ستَخدم هاتان املكتبتان ال�سّ هرتان يف مهام معاجلة اللغات الطبيعية املُتنوّعة.
• :reتُ�ستَخدم هذه املكتبة يف البحث عن النّ�سو�س ،ومعاجلتها با�ستخدام التعبرات النمطية.
%%capture
مُيكن االآن جتميع الدالة () tokenize_docمع اأداة العبارات من مكتبة جين�سم ( )Gensimالإن�ساء منوذج العبارة،
وه��و من��وذج مُيكن��ه التع�رّف عل��ى العب��ارات املكون��ة م��ن ع��دة كلم��ات يف جمل��ة معط��اة .ي�س��تخدم املقطع الربجم��ي التايل
بيانات التدريب IMDBاخلا�سة ب� ( )X_train_textلبناء مثل هذا النموذج:
sentences=[] # list of all the tokenized sentences across all the docs in this dataset
imdb_phrase_model[tokenized_sentences[1]]
،) (طوي��ل ج��دً اtoo_long (�س��قط نائ ًم��ا) وfell_asleep :يح��دِّ د من��وذج العب��ارة ثالث��ة عب��ارات عل��ى النح��و الت��ايل
.�ساعة) وجميعها حُتمل معلومات اأكر من كلماتها املفردة-2( 2_hoursو
�سلبي ُحمايد ُحمايد (طوي��لtoo_long حُتم��ل عب��ارة،عل��ى �س��بيل املث��ال
مُق�سَّ م
too_long long too عل��ى الرغ��م م��ن اأن،ج��دً ا) م�س��اعر �س��لبية وا�سح��ة
�سلبي �سلبي (طوي��ل) ال تع��ربان ع��ن ال�سياقlong (ج��دً ا) وtoo كلمت��ي
fell_asleep
مُق�سَّ م asleep fell فعل��ى الرغ��م م��ن اأن كلم��ة، وباملث��ل،ذل��ك منفردت��ني
، (نائ��م) يف مراجع��ة الفيل��م متثل داللة �س��لبيةasleep
ال�سياق امل ُحدد ال�سياق (�س��قط نائ ًم��ا) تو�س��ل ر�س��الة ال�سياقfell_asleep فالعب��ارة
مُق�سَّ م
2_hours hours 2 2_hours ت�س��تنبط م��ن، و اأ خ �رًا.اأ ك��ر و�سوحً ��ا
امل�ساعر االإيجابية وال�سلبية قبل التق�سيم وبعده:3.12 �سكل 2 �س��اعة) �س��ياقًا اأك��ر حُتدي��دً ا م��ن الكلمت��ني-2(
. كلٍّ على حدةhoursو
:ت�ستخدم الدالة التالية اإمكانية حُتديد العبارات بهذا ال�سكل لتف�سر العبارات يف وثيقة مُعطاه
def annotate_phrases(doc:str, phrase_model):
tokens=[] # list of all the words and phrases found in the doc
for sentence in sentences: # for each sentence
# use the phrase model to get tokens and append them to the list.
tokens+=phrase_model[sentence]
return ' '.join(tokens) # join all the tokens together to create a new annotated document.
لتف�س��ر كلٍ م��ن تقييم��ات التدري��ب واالختب��ار م��نannotate_phrases)( ي�س��تخدم املقط��ع الربجم��ي الت��ايل دال��ة
.IMDb جمموعة بيانات
# annotate all the test and train reviews.
X_train_text_annotated=[annotate_phrases(doc,imdb_phrase_model) for doc in X_
train_text]
X_test_text_annotated=[annotate_phrases(text,imdb_phrase_model)for text in X_
test_text]
148
# an example of an annotated document from the imdb training data
]X_train_text_annotated[0
'i_grew up b 1965 watching and loving the thunderbirds all my_mates at school watched
we played thunderbirds before school during lunch and after school we all wanted to
be virgil or scott no_one wanted to be alan counting down from 5 became an art_form
i took my children to see the movie hoping they would get_a_glimpse of what i_loved
as a child how bitterly disappointing the only high_point was the snappy theme_tune
not that it could compare with the original score of the thunderbirds thankfully
early saturday_mornings one television_channel still plays reruns of the series
gerry_anderson and his_wife created jonatha frakes should hand in his directors chair
his version was completely hopeless a waste of film utter_rubbish a cgi remake may_be
acceptable but replacing marionettes with homo_sapiens subsp sapiens was a huge error
'of judgment
تكرار امل�سطل -تكرار امل�ستند العك�سي ا�ستخدام مقيا�ض تكرار امل�سطل -تكرار املُ�ستنَد
Term Frequency Inverse Document العك�س�ي يف الربجم�ة األ اهي�ة للن�سو��ض
(Frequency )TF-IDF Using TF-IDF for Text Vec ori tion
تك��رار امل�سطل��ح -تك��رار املُ�س��تنَد العك�س��ي ه��و متثيال دقيقًا الأهميتها .الطريقة املُثلى تكرار الكلمة يف املُ�ستنَد ال ُيع ُّد دومً ا ً
طريقة تُ�ستخدم لتحديد اأهمية الرموز يف املُ�ستنَد. لتمثي��ل التك��رار ه��ي املقيا���س ال�س��هر لتك��رار امل�سطل��ح -تك��رار امل ُ�س��تنَد
العك�سي ( .)TF-IDFي�ستخدم هذا املقيا�س �سيغة ريا�سية ب�سيطة لتحديد
الن�سي ()Corpus
االأ�سل ّ اأهمية الرموز مثل :الكلمات اأو العبارات يف املُ�ستنَد بنا ًء على عاملني:
• تكرار الرمز يف املُ�س��تنَد ،بقيا���س عدد مرات ظهوره يف املُ�س��تنَد مق�سومً ا
على اإجمايل عدد الرموز يف جميع املُ�ستنَدات.
• تكرار املُ�ستنَد العك�سي للرمز ،املح�سوب بق�سمة اإجمايل عدد املُ�ستنَدات
يف جمموعة البيانات على عدد املُ�ستنَدات التي حُتتوي على الرمز.
امل ُ�ستنَد الكلمة امل�سطلح
�سكل :3.13الكلمات وامل�سطلحات الواردة يف امل�ستند
العام��ل االأول يتجن��ب املبالغ��ة يف تقدي��ر اأهمي��ة امل�سطلح��ات الت��ي تظه��ر يف
الوثائ��ق االأط��ول ،اأ ّم��ا العام��ل الث��اين في�س��تبعد امل�سطلح��ات الت��ي تظه��ر يف
الن�سي
عدد امل ُ�ستنَدات يف االأ�سل ّ كث ٍر من املُ�س��تنَدات ،مما ي�س��اعد على اإثبات حقيقة اأن بع�س الكلمات هي
تكرار امل ُ�ستنَد العك�سي
عدد امل ُ�ستنَدات التي حتتوي على امل�سطلح
اأكر �سيوعً ا من غرها.
عدد مرات هور امل�سطلح يف امل ُ�ستنَد
تكرار امل�سطلح
عدد الكلمات يف امل ُ�ستنَد
تكرار امل�سطلح تكرار امل ُ�ستنَد العك�سي القيمة
اأداة ec ori er
توف��ر مكتب��ة �س��كلرن ( )Sklearnاأداة تدع��م ه��ذا الن��وع م��ن الربجم��ة االجتاهي��ة لتك��رار امل�سطلح-تك��رار امل ُ�س��تنَد
العك�سي ( .)TF-IDFمُيكن ا�ستخدام اأداة TfidfVectorizerلتمثيل عبارة با�ستخدام املتَّجهات.
from sklearn.feature_extraction.text import TfidfVectorizer
149
مُيك��ن االآن اإدخ��ال اأداة التمثي��ل باملتَّجَ ه��ات يف مُ�س َّن��ف باي��ز ال�س��اذج لبن��اء خ��ط اأنابيب منوذج تن ُّبوؤ جدي��د وتطبيقه على
:IMDb بيانات اختبار
0.8858
print('\nReview:',mistake_example_annotated)
Review: i_personally thought the movie was_pretty good very_good acting by tadanobu_
asano of ichi_the_killer fame i really can_t say much about the story but there_were
parts that confused me a little_too much and overall i_thought the movie was just too
lengthy other_than that however the movie contained superb_acting great fighting and
a lot of the locations were beautifully_shot great effects and a lot of sword play
another solid effort by tadanobu_asano in my_opinion well i really can_t say anymore
about the movie but if_you re only outlook on asian_cinema is crouching_tiger hidden_
dragon or house of flying_daggers i_would suggest_you trying to rent_it but if_you re
a die_hard asian_cinema fan i_would say this has to be in your_collection very_good
japanese film
150
يتنب�اأ خ��ط االأنابي��ب اجلدي��د ب�س��كل �سحي��ح بالقيم��ة االإيجابي��ة له��ذا التقيي��م .يَ�س��تخدم املقط��ع الربجم��ي الت��ايل مُف�سِّ ��ر
النموذج املحايد املحلي القابل للتف�سر وال�سرح ( )LIMEلتف�سر املنطق وراء هذا التنبوؤ:
# explain the prediction of the second pipeline for this example.
_exp = explainer_tf.explain_instance(mistake_example_annotated, prediction
)pipeline_tf.predict_proba, num_features=10
�سكل :3.14تاأثر الكلمة يف مزيج تكرار امل�سطلح -تكرار املُ�ستنَد العك�سي وم�سنّف بايز ال�ساذج
ت ؤوك��د النتائ��ج اأن خ��ط االأنابي��ب اجلدي��د يتب��ع منط ًق��ا اأك��ر ذكا ًء .فه��و ُيح��دد ب�س��كل �سحي��ح امل�س��اعر االإيجابي��ة للعبارات
مث��ل( beautifully_shot :لقط��ة _ جميل��ة) ،و ( superb_actingمتثيل_رائ��ع) ،و( very goodجي��د ج��دً ا) ،وال
مُيكن ت�سليله با�ستخدام الكلمات التي جعلت خط االأنابيب االأول يتنباأ بنتائج خاطئة.
مُيك��ن حُت�س��ني اأداء خ��ط االأنابي��ب لنم��وذج التن ُّبوؤ بطرق متعددة ،باإ�س��تبدال م�سنف بايز الب�س��يط بط��رق اأكر تطورًا مع
�سب��ط متغراته��ا لزي��ادة احتماالته��ا .وث َّم��ة خي��ار اآخر يتلخ�س يف ا�س��تخدام تقنيات الربجمة االجتاهي��ة البديلة التي ال
ت�ستند اإىل تكرار الرمز ،مثل ت�سمني الكلمات و الن�سو�س ،و�س ُي�ستعر�س ذلك يف الدر�س التايل.
151
مترينات
1
خاطئة �سحيحة حدِّد اجلملة ال�سحيحة واجلملة اخلاطئة فيما يلي:
.1يف التعلُّم املوجَّ ه ،تُ�ستخدم جمموعات البيانات املُعنوَنة لتدريب النموذج.
.2الربجمة االجتاهية هي تقنية لتحويل البيانات من تن�سيق متَّجَ ه رقمي اإىل بيانات اأولية.
.3تتطلب امل�سفوفة املتباعدة ذاكرة اأقل بكثر من امل�سفوفة الكثيفة.
.4تُ�ستخدم خوارزمية مُ�سنَّف بايز ال�ساذج لبناء خط اأنابيب التنبوؤ.
.5تكرار الكلمة يف املُ�ستنَد يُع ُّد التمثيل الدقيق الوحيد الأهمية هذه الكلمة.
2ا�سرح ملاذا تتطلب امل�سفوفة الكثيفة م�ساحة من الذاكرة اأكرب من امل�سفوفة املتباعدة.
3ح ِّل��ل كي��ف يُ�س��تخدَم العام��الن الرّيا�س ّي��ان يف تك��رار امل�سطل��ح -تك��رار امل ُ�س��تنَد العك�س��ي ( )TF-IDFلتحدي��د اأهمي��ة
الكلمة يف الن�س.
152
لدي��ك كذل��ك. تت�سم��ن م�س��تندًا واح �دًا يف كل �س��فnumPy وه��ي عب��ارة ع��ن م�سفوف��ةX_train_text لدي��ك4
اأكم��ل املقط��ع الربجم��ي الت��ا بحي��ث مُيك��ن.X_train_text تت�سم��ن قي��م امل ُ�س��تنَدات يفY_train م�سفوف��ة ثاني��ة
وتدري��ب ��وذج ت�سني��ف،) لتمثي��ل البيان��ات باملتَّجَ ه��اتTF-IDF( تك��رار امل ُ�س��تنَد العك�س��ي-ا�س��تخدام تك��رار امل�سطل��ح
ث��م مي��ع اأداة التمثي��ل باملتَّجَ ه��ات و ��وذج الت�سني��ف يف خ��ط، عل��ى االإ�س��دار امل ُ َم َّث��ل باملتَّجَ ه��اتMultinomialNB
:اأنابيب تنبوؤ واحد
vectorizer = (min_df=10)
X_train = vectorizer. (X_train_text) # uses the fitted vectorizer to vectorize the data
model_MNB=MultinomialNB() # a Naive Bayes Classifier
prediction_pipeline = make_pipeline( , )
اأكم��ل املقط��ع الربجم��ي الت��ا بحي��ث مُيكن��ه ِبن��اء مُف�سِّ ��ر ن�سو���س النم��وذج املحاي��د املحل��ي القاب��ل للتف�س��ر وال�س��رح5
لن�س
ٍ وا�ستخدِ م امل ُف�سِّ ر لتف�سر التنبوؤ على مثال،) خلط اأنابيب التنبوؤ الذي قمت ببنائه يف التدريب ال�سابقLIME(
.اآخر
print(exp. ) # prints the words with the highest influence on the prediction
153
الدر�ض الثاين
املوجه
التع ُّلم غري َّ
ا�ستخدام التعلُّم غري املوجَّ ه لفهم الن�سو�ض
Unsupervised Learning to Understand Text
قدم له جمموع��ة من االأمثل��ة التي يتوىل املوج��ه ه��و ن��وع م��ن تعلُّ��م االآل��ة ،ي�س��تخدم في��ه النم��وذج بيان��ات غ��ر ُمعَنونة ،حي� ُ�ث ُي ِّ
التعلُّ��م غ��ر َّ
املوجه يف حُتديدالبحث فيها عن االأمناط والعالقات بني البيانات من تلقاء نف�سه .ويف �سياق فهم الن�س ،مُيكن ا�ستخدام التعلُّم غر َّ
الهي��اكل وا أالمن��اط الكامن��ة �سم��ن جمموع��ة بيانات املُ�س��تنَدات الن�سية .هناك العديد من التقنيات املختلفة التي مُيكن ا�س��تخدامها يف
املوج��ه للبيان��ات الن�سي��ة ،مب��ا يف ذل��ك خوارزمي��ات التجمي��ع ( ،)Clustering Algorithmsوتقني��ات تقلي���س االأبع��اد التعلُّ��م غ��ر َّ
( ،)Dimensionality Reduction Techniquesوالنماذج التوليدية (ُ .)Generative Modelsت�س��تخدم خوارزميات التجميع
ل�سم املُ�ستنَدات املت�سابهة معًا ،بينما تُ�ستخدم تقنيات تقلي�س االأبعاد لتقلي�س اأبعاد
التعلُّم غري املوجَّ ه البيانات وحُتديد اخل�سائ�س الهامة .ومن ناحية اأخرىُ ،ت�ستخدم النماذج التوليدية
(:)Unsupervised Learning لتعلُّم التوزيع االأ�سا�سي للبيانات وتوليد ن�س جديد م�سابه ملجموعة البيانات االأ�سلية.
املوج��هُ ،ي��زوَّد النم��وذج
يف التعلُّ��م غ��ر َّ
بكمي��ات كب��رة من البيانات غر املُعنوَنة Clustering Algorithms
ويتوج��ب علي��ه البح��ث ع��ن االأمن��اط يف مُيكن خلوارزميات التجميع جتميع العمالء املت�سابهني ا�ستنادًا اإىل ال�سلوكيات
البيا ن��ات غ��ر ا ملُرتاكب��ة م��ن خ��الل �تهدف وزي��ادة
اأو الدمُيوغرافي��ا ،اأو �س��جل امل�س��رتيات؛ الأغرا���س الت�س��ويق املُ�س� َ
املالحظة والتجميع. معدالت االحتفاظ بالعمالء.
تقنيات تقلي�ض األأبعاد
i ension i e uction ec ni ues
تقلي�ض األأبعاد
ُت�س��تخدم تقني��ات تقلي���س االأبع��اد يف �سغ��ط ال�س��ورة لتقلي��ل ع��دد وح��دات
(:)Dimensionality e uction البيك�س��ل فيه��ا مم��ا ي�س��اعد عل��ى تقلي���س حج��م البيانات الالزم��ة لتمثيلها مع
تقني��ة تقلي�س االأبع��اد هي اإحدى تقنيات احلفاظ على خ�سائ�سها الرئي�سة.
تعلُّ��م االآل��ة وحُتلي��ل البيان��ات املُ�س��تخدَ مة
ener ti e النماذج التوليدية o e s
لتقلي���س ع��دد اخل�سائ���س (االأبع��اد)
يف جمموع��ة البيان��ات م��ع االحتف��اظ تُ�س��تخدم النماذج التوليدية يف تطبيقات الك�س��ف عن االختالف؛ حيث ُحُت ِّدد
باأكرب قدر ممكن من املعلومات. االختالفات يف البيانات بتعلُّم االأمناط الطبيعية للبيانات با�ستخدام النموذج
التوليدي.
مُدخَ الت البيانات
املعاجلة
َ اخلوارزمية التف�سر االأولية
# open the text file, use encoding='utf8' because articles may include non-ascii characters
with open('bbc/'+folder+'/'+file,encoding='utf8',errors='ignore') as f:
bbc_docs.append(f.read()) # read the text of the article and append to the docs list
# use the name of the folder (news section) as a label for this doc
bbc_labels.append(folder)
# shuffle the docs and labels lists in parallel
merged = list(zip(bbc_docs, bbc_labels)) # link the two lists
random.shuffle(merged) # shuffle them in parallel (with the same random order)
bbc_docs, bbc_labels = zip(*merged) # separate them again into individual lists.
155
ميع املُ�ستنَدات ميع املُ�ستنَدات Document Clustering
(:)Document Clustering االآن بع��د حُتمي��ل جمموع��ة البيان��ات ف�اإن اخلط��وة التالي��ة ه��ي جترب��ة ع��دة ط��رق غ��ر
املوجه ��ة ا أالك ��ر �س ��هرة يف ه ��ذا
موجه ��ة ،ومنه ��ا :التجمي ��ع ال ��ذي ُيع � ّد الطريق ��ة غ ��ر َّ َّ
جتمي��ع املُ�س��تنَدات هو طريقة تُ�س��تخدم النط ��اق .وبال ّنظ ��ر اإىل جمموع ��ة م ��ن املُ�س ��تنَدات غ ��ر املُعن َون ��ة� ،س ��يكون اله ��دف ه ��و
لتجمي��ع املُ�س��تنَدات الن�س ّي��ة يف عناقيد جتميع الوثائق املت�س��ابهة معًا ،ويف الوقت نف�س��ه الف�سل بني الوثائق غر املت�س��ابهة.
بنا ًء على ت�سابه حُمتواها.
جدول :3.2العوامل التي ُ دد جودة النتائج
طريقة متثيل البيانات باملتَّجَ هات .على الرغم من اأن تقنية تكرار امل�سطلح -تكرار امل ُ�ستنَد العك�سي ( )TF-IDFاأثبتت 1
كفاءتها وفعاليتها يف هذا املجال ،اإال اأنّك �ستتعرف يف هذه الوحدة على مزيد من البدائل االأكر تطورًا وتعقيدً ا.
التعري��ف الدقي��ق للت�س��ابه ب��ني م�س��تند واآخ��ر .بالن�س��بة للبيان��ات الن�س ّي��ة املُمثل��ة باملتَّجَ ه��ات ،تك��ون مقايي���س امل�س��افة 2
االإقليدية وجيب التمام هما االأكر �سيوعً ا� .س ُي�ستخدم االأول يف االأمثلة امل�سروحة يف هذه الوحدة.
ع��دد العناقي��د امل ُخت��ارة .يوف��ر التجمي��ع التكتل��ي ( )Agglomerative Clustering - ACطريق��ة وا�سح��ة لتحدي��د 3
العدد املنا�سب من العناقيد �سمن جمموعة حُمددة من البيانات ،وهو التحدي الرئي�س الذي يواجه مهام التجميع.
text_tfidf
االآن حُتوَّلت بيانات الن�س اإىل تن�سيق رقمي متباعد كما اُ�ستخدمت يف الدر�س ال�سابق.
157
يَ�س��تخدِ م املقط��ع الربجم��ي الت��ايل اأداة TSENVisualizerم��ن مكتب��ة yellowbrickالإ�س��قاط وت�سوي��ر الن�سو���س
املُمثلة باملتَّجَ هات يف ف�ساء ثنائي االأبعاد:
%%capture
!pip install yellowbrick
from yellowbrick.text import TSNEVisualizer
يُ�س��تخدَ م املقط��ع الربجم��ي الت��ايل الإ�س��قاط ُ 5,867بع��دً ا يف حُموري��ن فق��ط وهم��ا حُم��وري Xو Yيف الر�س��م البي��اين.
ُي�ستخدَ م املقطع الربجمي التايل لت�سميم ُخمطَّ ط االنت�سار حيث مُيثل كل لون اأحداالأق�سام االإخبارية اخلم�سة.
)]'tsne = TSNEVisualizer(colors=['blue','green','red','yellow','brown
)tsne.fit(text_tfidf,bbc_labels
;)(tsne.show
�سكل :3.18اإ�سقاط ت�سمني املجاور الع�سوائي املوزَّع على �سكل )T-SNE( T
�تخدم ه��ذا الت�س��ور قيم��ة ( ground-truthبيان��ات احلقيق��ة املعتم��دة) من الق�س��م االإخب��اري ()News Section يَ�س� ِ
ِ
يف كل م�س��تند للك�س��ف عن انت�س��ار كل قيمة يف اإ�س��قاط ف�ساء الربجمة االجتاهية ثنائي االأبعاد .يو�سح ال�س��كل اأنه على
الرغ��م م��ن ظه��ور بع���س ال�س��وائب يف فراغ��ات ُحُم� َّددة من ف�س��اء البيانات ،اإال اأن االأق�س��ام االإخبارية اخلم�س��ة منف�سلة
ُح�سنة للحد من هذه ال�سوائب. ب�سكل جيد .و�سن�ستعر�س الحقًا الربجمة االجتاهية امل َّ
159
ميع التكتلي (gg o er ti e Clustering )AC الت
امل�ستوى ال�ساد�س
التجميع التكتلي ( )ACهو الطريقة االأكر انت�سارًا وفعالي ًة يف هذا الف�ساء ،فمن
امل�ستوى اخلام�س خاللها مُيكن التغلّب على هذا التحدي بتوفر طريقة وا�سحة لتحديد العدد املنا�سب
امل�ستوى الرابع من العناقيد .ي�ستند التجميع التكتلي ( )ACاإىل منهجية الت�سميم من اأ�سفل اإىل
امل�ستوى الثالث اأعلى ،حيث تبداأ بح�ساب امل�سافة بني كل اأزواج نقاط البيانات ،ثم اختيار النقطتني
امل�ستوى الثاين االأقرب ودجمهما يف عنقود واحد .تتكرر هذه العملية حتى تُدمج كل نقاط البيانات
امل�ستوى االأول يف عنقود واحد ،اأو حتى الو�سول اإىل العدد املطلوب من العناقيد.
a b c d e f g h i
�سكل :3.19التجميع التكتلي ()AC دالة ()Linkage
تُنفِذ لغة البايثون التجميع التكتلي ( )ACبا�ستخدام دالة ().linkage
يجب توفر متغرين لدالة ():linkage
• البيانات الن�سيّة املُمثلة باملتَّجَ هات ،ومُيكن ا�ستخدام دالة () toarrayلتحويل البيانات اإىل تن�سيق كثيف مُيكن لهذه الدالة
اأن تتعامل معه.
• مقيا���س امل�س��افة الذي يجب ا�س��تخدامه لتحديد العناقيد التي �س�تُدمج اأثناء عملية التجميع التكتلي .تتوفر عدة خيارات من
مقايي���س امل�س��افة لالختيار من بينها وفقًا ملتطلبات وتف�سيالت املُ�س� ِ
�تخدم ،مثل امل�س��افة االإقليدية ( ،)Euclidianوم�س��افة
مانهاتن ( ...)Manhattanاإل ،ولكن يف هذا امل�سروع �ست�ستخدم طريقة وارد ( )wardالقيا�سية.
ي�س��تخدم املقط��ع الربجم��ي الت��ايل دال��ة () linkageم��ن االأداة الهرمي��ة ( )Hierarchyال��واردة باالأعل��ى لتطبي��ق ه��ذه العملية
على بيانات هيئة االإذاعة الربيطانية املُمثَّلة باملتَّجَ هات:
# iteratively merge points and clusters until all points belong to a single cluster
# return the linkage of the produced tree
)'linkage_tfidf=hierarchy.linkage(text_tfidf.toarray(),method='ward
pred_tfidf
الح��ظ اأن قيم��ة ( ground-truthبيان��ات احلقيق��ة املعتم��دة) من الق�س��م االإخباري ( )News Sectionيف كل م�س��تند
�دال م��ن ذلك ،عوجلت عملية التجميع ا�س��تنادًا اإىل ن�س حُمتوى كل وثيقة مل تُ�س��تخدَ م عل��ى االإط��الق يف ه��ذه العملي��ة .وب� ً
عل��ى ح��ده .ا َّإن قي��م بيان��ات احلقيق��ة املعتم��دة مفي��دة يف التطبي��ق العمل��ي ،فه��ي تتي��ح التحق��ق م��ن �سحة نتائ��ج التجميع.
وقيم بيانات احلقيقة املعتمدة احلالية موجودة يف قائمة ( bbc_labelsقيم_ هيئة االإذاعة الربيطانية).
161
يَ�س� ِ
�تخدم املقط��ع الربجم��ي الت��ايل قي��م بيان��ات احلقيق��ة املعتم��دة وثالث��ة دوال خمتلف��ة لت�س��جيل النق��اط م��ن مكتب��ة �س��كلرن
( )Sklearnلتقييم جودة جتميع البيانات:
• تك��ون قي��م موؤ�س��ر التجان���س ( )Homogeneity Scoreب��ني 0و 1ومُيك��ن زي��ادة ه��ذه القيم عندم��ا تكون كل النقاط يف كل
عنقود لها قيمة بيانات احلقيقة املعتمدة .وباملثل ،يحتوي كل عنقود على نقاط البيانات وحيدة الت�سنيف.
• تك��ون قيم��ة موؤ�س��ر ران��د املُع��دل ( )Adjusted Rand Scoreب��ني -0.5و 1.0ومُيك��ن زي��ادة ه��ذه القي��م عندم��ا تق��ع كل
نقاط البيانات ذات القيم نف�سها يف العنقود نف�سه وكل نقاط البيانات ذات القيم املختلفة يف عناقيد خمتلفة.
• تك��ون قيم��ة موؤ�س��ر االكتم��ال ( )Completeness Scoreب��ني 0و 1ومُيك��ن زي��ادة ه��ذه القيم��ة بتعي��ني كل نق��اط البيان��ات
من ت�سنيف ُحُمدد يف العنقود نف�سه.
))print('\nHomogeneity score:',homogeneity_score(bbc_labels,pred_tfidf
))print('\nAdjusted Rand score:',adjusted_rand_score(bbc_labels,pred_tfidf
))print('\nCompleteness score:',completeness_score(bbc_labels,pred_tfidf
Homogeneity score: 0.6224333236569846 الموؤ�سر اأقرب اإلى 1وهذا يعني اأن مجموعة
الن�سو�س في العنقود تنتمي اإلى قيمة واحدة.
Adjusted Rand score: 0.4630492696176891
ال�س��تكمال حُتلي��ل البيان��اتُ ،يع��اد جتمي��ع البيان��ات با�س��تخدام 5عناقي��د ،بالت�س��اوي م��ع الع��دد احلقيق��ي لقي��م
( ground-truthبيانات احلقيقة املعتمدة):
)AC_tfidf=AgglomerativeClustering(linkage='ward',n_clusters=5
))(AC_tfidf.fit(text_tfidf.toarray
_pred_tfidf=AC_tfidf.labels
))print('\nHomogeneity score:',homogeneity_score(bbc_labels,pred_tfidf
))print('\nAdjusted Rand score:',adjusted_rand_score(bbc_labels,pred_tfidf
))print('\nCompleteness score:',completeness_score(bbc_labels,pred_tfidf
عل��ى الرغ��م م��ن اأن نتائ��ج املوؤ�س��ر تُظه��ر اأن التجمي��ع التكتل��ي با�س��تخدام الربجم��ة االجتاهي��ة لتك��رار امل�سطلح-تك��رار
امل ُ�س��تنَد العك�س��ي ( )TF-IDFحُتقق نتائج معقولة ،اإال اأنّه ال يزال باالإمكان حُت�س��ني دقة عملية التجميع� .س��يو�سح الق�س��م
التايل كيف مُيكن اأن نحقق نتائج مبهرة با�ستخدام تقنيات الربجمة االجتاهية املُ�ست ِندة على ال�سبكات الع�سبية.
162
الربجمة األ اهية للكلمات با�ستخدام ال�سبكات الع�سبية
Word ec ori tion with Neural Networks
الربجم��ة االجتاهي��ة لتك��رار امل�سطلح-تك��رار امل ُ�س��تنَد العك�س��ي ( )TF-IDFت�س��تند اإىل ح�س��اب تك��رار الكلم��ات ومعاجلته��ا ع��رب
املُ�س��تنَدات يف جمموع��ة البيان��ات .بالرغ��م م��ن اأن ه��ذا يحق��ق نتائ��ج جي��دة ،اإال اأنّ القي��ود الكب��رة تعي��ب الطرائ��ق امل�س��ت ِندة اإىل
التك��رار .فه��ي تتجاه��ل متامً ��ا العالق��ة الداللي��ة ب��ني الكلم��ات .عل��ى �س��بيل املث��ال ،عل��ى الرغ��م م��ن اأن كلمت��ي ( tripنزه��ة) و
االجتاهيّة املُ�ستنِدة اإىل التّكرار �ستتعامل معهما باعتبارهما كلمتان منف�سلتان ( journeyرحلة) مرتادفتان ،اإال اأنّ الربجمة ّ
متامً ��ا ولهم��ا خ�سائ���س م�س��تقلة .وباملث��ل ،بالرغ��م م��ن اأن كلمت��ي ( appleتفاح��ة) و ( fruitفاكه��ة) مرتابطت��ان دالل ًي��ا؛ الأن
أي�سا.
التفاح نوع من الفاكهة اإال اأنّ ذلك لن يوؤخذ بعني االعتبار ا ً
توؤثر هذه القيود كثرًا على التطبيقات التي ت�ستخدم هذا النوع من الربجمة االجتاهية .فكِّر يف اجلملتني التاليتني:
• ( I have a very high fever، so I have to visit a doctorلديّ حمّى �سديدة ،ويجب عليّ زيارة الطبيب).
• My body temperature has risen significantly، so I need to see a healthcare professional
(ارتفعت درجة حرارة ج�سمي كثرًا ،ويجب عليّ زيارة اأخ�سائي الرعاية ال�سحية).
بالرغ��م م��ن اأن اجلملت��ني ت�سف��ان احلال��ة نف�س��ها اإال اأنهم��ا ال تت�س��اركان اأي كلم��ات داللي��ة .ولذلك� ،ستف�س��ل خوارزميات
التجميع املُ�ست ِندة اإىل تكرار امل�سطلح-تكرار امل ُ�ستنَد العك�سي ( )TF-IDFاأو اأي برجمة اجتاهية (ت�ستند اإىل التكرار)
يف روؤية الت�سابه بني الكلمات ،ومن املحتمل اأال ت�سعها يف نف�س العنقود.
الكلمات املُ�ستبعَدة (:)Stopwords َ ه Word2Vec منوذج الكلمة اإىل امل َّت
الكلم��ات املُ�س��تبعَدة ه��ي كلم��ات �س��ائعة يف مُيك��ن معاجل��ة ه��ذه القي��ود بالطرائق الت��ي تاأخذ بعني االعتبار الت�س��ابه
اللغ��ات تُ�س��تبعد ع��اد ًة اأثن��اء املعاجل��ة املُ�س �بَقة ال��داليل ب��ني الكلم��ات .اإح��دى الط��رق ال�س��هرة املُتبع��ة يف ه��ذا ال�س��دد
للن�سو ���س �سم��ن مه��ام معا جل��ة اللغ��ات �تخدم بُني��ةه��ي ��وذج الكلم��ة اإىل املتَّجَ ��ه ( )Word2Vecالت��ي تَ�س� ِ
الطبيعي��ة ( )NPLمث��ل الربجم��ة االجتاهي��ة تَ�س��تنِد اإىل ال�س��بكات الع�سبي��ة .يَ�س��تنِد ��وذج الكلم��ة اإىل املتَّجَ ��ه
للكلمات .هذه الكلمات ت�س��مل اأدوات التعريف، ( )Word2Vecاإىل فك��رة اأن الكلم��ات املت�س��ابهة دالل ًي��ا ُحُت��اط بكلمات
وح��روف العط��ف ،وح��روف اجل��ر ،والكلم��ات مماثل��ة يف ال�س��ياق نف�س��ه .ولذل��ك ،جن��د ال�س��بكات الع�سبي��ة ت�س��تخدم
الت��ي ال تك��ون مفي��دة لتحدي��د معن��ى الن� ّ��س ،اأو الت�سم��ني اخلف��ي ل��كل كلم��ة للتنبوؤ بال�س��ياق ،مع �سرورة اإن�س��اء الروابط
�سياقه. ب��ني الكلم��ات والت�سمين��ات ال�س��بيهة .عمل ًي��ا ،يخ�سع ��وذج الكلمة اإىل
املتَّجَ ��ه ( )Word2Vecللتدري��ب املُ�س�بَق عل��ى ماليني املُ�س��تنَدات لتعلُّم
الت�سمن (:)Embedding الت�سم��ني ع��ايل الدق��ة للكلم��ات .مُيك��ن حُتمي��ل النم��اذج املُد َّربة م�س� َبقًا
وا�س��تخدامها يف التطبيق��ات املُ�س��تنِدة اإىل الن�سو���س .يَ�س��تخدِ م املقطع
الت�سم��ني ُيع� ِّ�رب ع��ن الكلم��ات اأو الرم��وز يف الربجم��ي الت��ايل مكتب��ة جين�س��م ( )Gensimلتحمي��ل من��وذج �س��هر
ف�س��اء امل َّت َج��ه امل�س��تمر حي��ث ترتب��ط الكلم��ات ُم��د َّر ب م�س � َبقًا عل��ى جممو ع��ة كب��رة ج��دً ا م��ن اأخب��ار قو ق��ل
املت�سابهة دالليًا مع النقاط القريبة. (:)Google News
import gensim.downloader as api
)'model_wv = api.load('word2vec-google-news-300
هذا النموذج يربط كل كلمة ]'fox_emb=model_wv['fox
بت�سمين مكوّن من ُ 300بعد. ))print(len(fox_emb
300
163
االأبعاد الع�سرة االأوىل للت�سمني العددي لكلمة ( foxثعلب) مو�سحة باالأ�سفل:
]fox_emb[:10
يَ�س� ِ
�تخدم النم��وذج ت�سمين��ات الكلم��ات لتقيي��م درج��ة الت�س��ابه .ف ِّك��ر يف املث��ال الت��ايل حي��ث تُظه��ر املقارن��ة ب��ني كلم��ة car
(ال�سيارة) والكلمات االأخرى درجة الت�سابة من خالل تناق�س قيم الت�سابة .عل ًما باأن قيم الت�سابه تقع دومً ا بني 0و .1
[ = pairs
('car', 'minivan'),
('car', 'bicycle'),
('car', 'airplane'),
('car', 'street'),
('car', 'apple'),
]
for w1, w2 in pairs:
))print(w1, w2, model_wv.similarity(w1, w2
ُمُيكن ا�ستخدام املقطع الربجمي التايل للعثور على الكلمات اخلم�سة امل�سابهة الإحدى الكلمات:
))print(model_wv.most_similar(positive=['apple'], topn=5
ُمُيكن ا�ستخدام الت�سوير يف التحقق من �سحة ت�سمينات هذا النموذج املُدرَّب مُ�سبقًاُ ،ومُيكن حُتقيق ذلك عرب:
• حُتديد مناذج الكلمات من جمموعة بيانات هيئة االإذاعة الربيطانية.
• ا�س��تخدام ت�سم��ني املج��اور الع�س��وائي امل��وزَّع عل��ى �س��كل )T-SNE( Tلتخفي���س الت�سم��ني ذي ال � 300بع� ٍ�د ل��كل
كلمة اإىل نقطة ثنائية االأبعاد.
• ت�سوير النقاط يف ُخم َّطط االنت�سار يف الف�ساء ثنائي االأبعاد.
164
%%capture
import nltk # import the nltk library for nlp.
import re # import the re library for regular expressions.
import numpy as np # used for numeric computations
from collections import Counter # used to count the frequency of elements in a given list
from sklearn.manifold import TSNE # Tool used for Dimensionality Reduction.
# download the 'stopwords' tool from the nltk library. It includes very common words for different
languages
nltk.download('stopwords')
حدد
ِّ ُي.تُ�س��تخدَ م الدال��ة االآتي��ة الح ًق��ا لتحدي��د عين��ة من الكلمات التمثيلية من جمموعة بيانات هيئ��ة االإذاعة الربيطانية
املقط��ع الربجم��ي الكلم��ات اخلم�س��ني االأك��ر تك��رارًا عل��ى وج��ه التحدي��د م��ن االأق�س��ام االإخباري��ة اخلم�س��ة لهيئ��ة االإذاعة
) وه��ي الكلمات االإجنليزية ال�س��ائعة ج��دً ا والكلمات التي ملStopwords( الربيطاني��ة م��ع ا�س��تثناء الكلم��ات امل ُ�س��تبعَدة
.) املُدرَّب م�سبقًاWord2Vec( تُ�س َّمن يف وذج الكلمة اإىل املتَّجَ ه
def get_sample(bbc_docs:list,
bbc_labels:list
بع�س الكلمات االإ ليزية ال�سائعة التي تعترب كلمات مُ�ستبعَدة
): .) (يكونونare (يكون) وis (ال) وthe (اأ) وa ) هيStopwords(
word_sample=set() # a sample of words from the BBC dataset
word_sample=get_sample(bbc_docs,bbc_labels)
165
واأخ �رًا� ،ستَ�س� ِ
�تخدم طريق��ة ت�سم��ني املج��اور الع�س��وائي امل��وزَّع عل��ى �س��كل )T-SNE( Tلتخفي���س الت�سمين��ات ذات
بعد للكلمات يف العينة �سمن النقاط ثنائية االأبعاد .بعدهاُ ،متثَّل النقاط يف ُخمطَّ ط انت�سار ب�سيط.ال� ٍ 300
�سكل :3.22متثيل الكلمات االأكر تكرارًا من جمموعة بيانات هيئة االإذاعة الربيطانية
يُثب��ت املُخطَّ ��ط اأن ت�سمين��ات ��وذج الكلم��ة اإىل املتَّجَ ��ه ( )Word2Vecت�س��تنبط االرتباط��ات الداللي��ة ب��ني الكلم��ات ،كم��ا
يت�سح من جمموعات الكلمات الوا�سحة مثل:
• ( economyاالقت�س��اد)( economic،االقت�سادي��ة)( business ،االأعم��ال)( financial ،املالي��ة)( sales ،املبيعات)،
( bankامل�سرف)( firm ،ال�سركة)( firms ،ال�سركات).
• ( Internetاالإنرتن��ت)( mobile ،الهات��ف املحم��ول)( phones ،الهوات��ف)( phone ،الهات��ف)broadband ،
(النطاق العري�س)( online ،مت�سل)( digital ،رقمي).
• ( actorممث��ل)( actress ،ممثل��ة)( film ،فيل��م)( comedy ،كومي��دي)( films ،اأف��الم)(festival ،مهرج��ان)،
( bandفرقة)( movie ،فيلم).
• ( gameلعب��ة)( team ،فري��ق)( match ،مب��اراة)( players ،العب��ون)( coach ،م��درِّب)( injury ،اإ�ساب��ة)،
( clubنادي)( rugby ،الرجبي).
166
الربجمة األ اهية لل ُ مل با�ستخدام التعلُّم العميق
Sentence ec ori tion with Deep Learning
عل��ى الرغ��م م��ن اإمكاني��ة ا�س��تخدام ��وذج الكلم��ة اإىل املتَّجَ ��ه ( )Word2Vecيف منذج��ة الكلم��ات الفردي��ة ،يتطل��ب التجمي��ع
جلمل ثنائية اال ا من الربجمة االجتاهية للن�س باأكمله .اإحدى الطرائق االأكر �س��هرة لتحقيق ذلك هي متثيالت ترميز ا ُ
املحوالت ( )SBERTاملُ�ستنِدة اإىل منهجية التعلُّم العميق.
متثيالت الرتميز ثنائية األ اه من املحوألت
i irection Encoder (e resen tions from Transformers )BERT
متثي��الت الرتمي��ز ثنائي��ة اال ��ا م��ن املح��والت ( )BERTه��ي من��وذج متثي��ل لغ��وي ق��وي طورت��ه �س��ركة قوق��ل ،ويع� ُّد
التدريب املُ�سبَق وال�سبط الدقيق عامالن رئي�سان وراء قدرة متثيالت الرتميز ثنائية اال ا من املحوالت ()BERT
عل��ى تطبي��ق نق��ل التعلُّ��م ،اأي الق��درة عل��ى االحتف��اظ باملعلوم��ات ح��ول م�س��كلة ما واال�س��تفادة منها يف حلِّ م�س��كلة اأخرى،
ويت��مّ التدري��ب املُ�س�بَق ع��رب تغذي��ة النم��وذج بكمي��ة هائلة م��ن البيانات غر املُعنوَنة لع��دة مهام ،مثل التنب�وؤ اللغوي املُقنَّع
دخالت الن�سو�س وامل ُِه َّمة هي التنبوؤ بهذه الكلمات)ُ .يه ِّيئ منوذج متثيالت الرتميز (اإخفاء الكلمات الع�س��وائية يف ُم َ
�تخدم جمموع��ات البيان��ات ُدرب��ة ُم�س��بقًا لل�سب��ط الدقي��ق ،كم��ا ُت�س� َ
ثنائي��ة اال ��ا م��ن املح��والت ( )BERTاملتغ��رات امل َّ
املُعنوَنة من املهام النهائية ل�سبط دقة عمل النموذج ،ويكون لكل ُم ِه َّمة نهائية مناذج دقيقة منف�سلة ،برغم اأنها مُهيئَّة
باملتغ��رات املُد َّرب��ة نف�س��ها م�س��بقًا .عل��ى �س��بيل املث��ال ،تختلف عملية ال�سب��ط الدقيق لنموذج حُتليل امل�س��اعر عن منوذج
االإجابة على االأ�سئلة .ومن املهم معرفة اأن الفروقات يف بنية النماذج ت�سبح �سئيلة اأو منعدمة بعد خطوة �سبط الدقة.
اه من املحوألت SBERT متثيالت ترميز ا ُ مل ثنائية األ
جلم��ل ثنائي��ة اال ��ا م��ن املح��والت ( )SBERTه��ي االإ�س��دار املُع�دَّل م��ن متثيالت الرتمي��ز ثنائية متثي��الت ترمي��ز ا ُ
اال ��ا م��ن املح��والت (ُ .)BERTت��د َّرب متثي��الت الرتمي��ز ثنائي��ة اال ��ا م��ن املح��والت ( )BERTمث��ل ��وذج
جلم��ل ال��واردة به��ا .وم��ن ناحي��ة اأخ��رىُ ،ت��د َّرب
الكلم��ة اإىل املتَّجَ ��ه ( )Word2Vecللتنب�وؤ بالكلم��ات بن��ا ًء عل��ى �س��ياق ا ُ
جلم��ل ثنائي��ة اال ��ا م��ن املح��والت ( )SBERTللتنب �وؤ مب��ا اإذا كان��ت جملت��ان مت�س��ابهتني دالل ًي��ا. متثي��الت ترمي��ز ا ُ
تُ�ستخدَ م متثيالت ترميز اجلُمل ثنائية اال ا من املحوالت ( )SBERTالإن�ساء ت�سمينات الأجزاء الن�سو�س االأطول
جلم��ل ،مث��ل الفق��رات ،اأو الن�سو���س الق�س��رة ،اأو املق��االت يف جمموع��ة بيان��ات هيئ��ة االإذاع��ة الربيطاني��ة حُم��ل م��ن ا ُ
الدرا�س��ة يف ه��ذه الوح��دة .بالرغ��م م��ن اأن النم��اذج الث��الث ت�س��تند جميعه��ا اإىل ال�س��بكات الع�سبي��ة ،اإال اأن متثي��الت
جلم��ل ثنائي��ة اال ��ا م��ن املح��والت ()SBERT الرتمي��ز ثنائي��ة اال ��ا م��ن املح��والت ( )BERTومتثي��الت ترمي��ز ا ُ
تتبعان ُبنية خمتلفة ب�سكل كبر واأكر تعقيدً ا من وذج الكلمة اإىل املتَّجَ ه (.)Word2Vec
ُ مل واملحوألت Sentence_transformers Library مكتبة ا
جلم��ل واملح��والت ( )sentence_transformersالوظائ��ف الكامل��ة لنم��وذج متثي��الت ترمي��ز ا ُ
جلم��ل تُطب��ق مكتب��ة ا ُ
ثنائي��ة اال ��ا م��ن املح��والت ( .)SBERTتاأت��ي املكتب��ة بالعدي��د م��ن من��اذج متثي��الت ترمي��ز ا ُ
جلم��ل ثنائي��ة اال ��ا
م��ن املح��والت ( )SBERTاملُد َّرب��ة ُم�س��بقًا؛ ك ٌل منه��ا ُم��د َّرب عل��ى جمموع��ة بيان��ات خمتلف��ة ولتحقي��ق اأه��داف خمتلف��ة.
يعمل املقطع الربجمي التايل على حُتميل اأحد النماذج العامة ال�س��هرة املُد َّربة ُم�س��بقًا ،وي�س��تخدمها الإن�س��اء ت�سمينات
للم�ستندات يف جمموعة بيانات هيئة االإذاعة الربيطانية:
%%capture
!pip install sentence_transformers
from sentence_transformers import SentenceTransformer
167
لق��د ا�س��تخدمت يف وق��ت �س��ابق يف ه��ذه الوح��دة اأداة ت�سم��ني املج��اور الع�س��وائي امل��وزع عل��ى �س��كل Tوالت��ي ه��ي
( ،)TSNEVisualizerلت�سوي��ر املُ�س��تندات املُمثل��ة باملتُّجَ ه��ات املُنتج��ة با�س��تخدام اأداة تك��رار امل�سطلح-تكرار امل�س��تند
العك�س��ي ( .)TF-IDFمُيكن االآن ا�س��تخدامها للت�سمينات املُنتَجة بوا�س��طة متثيالت ترميز اجلُمل ثنائية اال ا من
املحوالت (:)SBERT
)]'tsne = TSNEVisualizer(colors=['blue','green','red','yellow','brown
)tsne.fit(text_emb,bbc_labels
;)(tsne.show
�سكل :3.23اإ�سقاط ت�سمني املجاور الع�سوائي املوزَّع على �سكل )T-SNE( Tللت�سمينات
املُنتجة بوا�سطة متثيالت ترميز اجلُمل ثنائية االجتاه من املحوالت ()SBERT
اأك��ر و�سوحً ��ا
جلم��ل ثنائي��ة اال ��ا م��ن املح��والت ( )SBERTت �وؤدي اإىل ف�س��لٍ يو�س��ح ال�س��كل اأن متثي��الت ترمي��ز ا ُ
لالأق�س��ام االإخباري��ة املختلف��ة م��ع ع��دد اأق��ل م��ن ال�س��وائب م��ن تك��رار امل�سطلح-تك��رار امل ُ�س��تنَد العك�س��ي (.)TF-IDF
اخلطوة التالية هي ا�ستخدام الت�سمينات لتدريب خوارزمية التجميع التكتلي:
plt.figure() # create a new figure.
# iteratively merge points and clusters until all points belong to a single cluster. Return the the linkage of
the produced tree.
)'linkage_emb=hierarchy.linkage(text_emb, method='ward
�سكل :3.24الر�سم ال�سجري الهرمي لتمثيالت ترميز اجلُمل ثنائية االجتاه من املحوالت ()SBERT
168
مو�س��ح يف ال�س��كل ،3.24ف�اإن اأداة الر�س��م ال�س��جري ت�س��ر اإىل 4عناقي��د ،كل واح��د منه��ا ُممي��ز بل��ون خمتل��ف.
كم��ا ه��و ّ
َ�ستخدم املقطع الربجمي التايل هذا املقرتح حل�ساب العناقيد وح�ساب مقايي�س التقييم: ي ِ
)AC_emb=AgglomerativeClustering(linkage='ward',n_clusters=4
)AC_emb.fit(text_emb
_pred_emb=AC_emb.labels
))print('\nHomogeneity score:',homogeneity_score(bbc_labels,pred_emb
))print('\nAdjusted Rand score:',adjusted_rand_score(bbc_labels,pred_emb
))print('\nCompleteness score:',completeness_score(bbc_labels,pred_emb
اإذا كان��ت البيان��ات ق��د مت اإع��ادة جتميعه��ا با�س��تخدام الع��دد ال�سحي��ح من 5عناقيد ،فالعنقود االأ�سفر املُحدد بال�س��كل
اأعاله �سينق�سم اإىل اثنني ،و�ستكون النتائج على النحو التايل:
)AC_emb=AgglomerativeClustering(linkage='ward',n_clusters=5
)AC_emb.fit(text_emb
_pred_emb=AC_emb.labels
))print('\nHomogeneity score:',homogeneity_score(bbc_labels,pred_emb
))print('\nAdjusted Rand score:',adjusted_rand_score(bbc_labels,pred_emb
))print('\nCompleteness score:',completeness_score(bbc_labels,pred_emb
جلم��ل ثنائي��ة اال ��ا م��ن املح��والت ( )SBERTيف الربجم��ة االجتاهي��ة تُظهِ ��ر النتائ��ج اأن ا�س��تخدام متثي��الت ترمي��ز ا ُ
للن�سو���س يَنت��ج عن��ه نتائ��ج جتمي��ع ُحُم َّ�س��نة باملقارن��ة م��ع تك��رار امل�سطلح-تك��رار امل ُ�س��تنَد العك�س��ي ( .)TF-IDFاإذا كان
ع��دد العناقي��د ه��و 5لتك��رار امل�سطلح-تك��رار امل ُ�س��تنَد العك�س��ي (( )TF-IDFالقيم��ة ال�سحيح��ة) و 4عناقي��د لتمثيالت
ترميز اجلُمل ثنائية اال ا من املحوالت ( ،)SBERTفاإن املقايي�س الثالثة لتمثيالت ترميز اجلُمل ثنائية اال ا
من املحوالت ( )SBERTال تزال هي االأعلى بفارق كبر .ثم تزداد الفجوة اإذا كان العدد 5لكلٍ من الطريقتني.
وه��ذا ُيع� ُّد دلي� ً�ال عل��ى اإمكان��ات ال�س��بكات الع�سبي��ة ،الت��ي ت�س��مح له��ا بُنيته��ا املتط��ورة بفهم االأمن��اط الداللي��ة املُعقدة يف
البيانات الن�سيّة.
169
مترينات
1
خاطئة �سحيحة حدِّد اجلملة ال�سحيحة واجلملة اخلاطئة فيما يلي:
.1يف التعلُّم غر املوجَّ ه ،تُ�ستخدم جمموعات البيانات املُعنوَنة لتدريب النموذج.
.2يتطلب التعلُّم غر املوجَّ ه الربجمة االجتاهية للبيانات.
جلم��ل ثنائي��ة االجت��اه م��ن املح��والت (ُ )SBERTتع� ُّد اأف�س��ل م��ن تك��رار
.3متثي��الت ترمي��ز ا ُ
امل�سطلح-تكرار امل�ستند العك�سي ( )TF-IDFللربجمة االجتاهية للكلمات.
.4يَتبع التجميع التكتلي منهجية الت�سميم من اأعلى اإىل اأ�سفل لتحديد العناقيد.
.5متثيالت ترميز اجلُمل ثنائية االجتاه من املحوالت ( )SBERTمُدرَّبة للتنبوؤ مبا اإذا كانت
جملتان خمتلفتني دالليًا.
3ا�سرح و ائف الربجمة اال اهية ملقيا�س تكرار امل�سطلح-تكرار امل�ستند العك�سي (.)TF-IDF
170
لدي��ك كذل��ك م�سفوف��ة.' تت�سم��ن م�س��تندًا ن�سي��ا واح �دًا يف كل �س��فDocs' تدع��ىnumPy لدي��ك م�سفوف��ة4
اأكم��ل املقط��ع الربجم��ي الت��ا بحي��ث ت�س��تخدم ��وذج متثي��الت ترمي��ز.Docs تت�سم��ن قي��م كل م�س��تند يفlabels
ث��م ا�س��تخدمDocs ) املُ��درَّب مُ�س��بقًا حل�س��اب ت�سمين��ات كل الوثائ��ق يفSBERT( جلم��ل ثنائي��ة اال ��ا م��ن املح��والت ُ ا
، لت�سوي��ر الت�سمين��ات يف الف�س��اء ثنائ��ي االأبع��ادT ت�سم��ني املج��اور الع�س��وائي امل��وزَّع عل��ى �س��كلTSNEVisualizer اأداة
:با�ستخدام لون خمتلف لكل واحد من القيم االأربعة املحتملة
tsne = ( =['blue','green','red','yellow'])
tsne. ( , )
tsne.show();
) ال�ستبدال كل كلمة يف اإحدىWord2Vec( اأكمل املقطع الربجمي التا بحيث تَ�ستخدم وذج الكلمة اإىل املتَّجَ ه5
:اجلُمل باأخرى تكون اأك �سبهًا بها
import gensim.downloader as
import re
model_wv = . ('word2vec-google-news-300')
old_sentence='My name is John and I like basketball.'
new_sentence=''
new_sentence+=
sentence=new_sentence.strip()
171
الدر�ض الثالث
توليد الن�ض
توليد اللغات الطبيعية (Natural Language ener tion )NLG
تولي��د اللغ��ات الطبيعي��ة ( )NLGه��و اأح��د ف��روع معاجل��ة اللغ��ات الطبيعي��ة ( )NLPالت��ي تر ِّك��ز عل��ى تولي��د الن�سو���س الب�س��رية
با�س��تخدام خوارزمي��ات احلا�س��ب .اله��دف م��ن تولي��د اللغ��ات الطبيعي��ة ( )NLGه��و تولي��د اللغ��ات املكتوب��ة اأو املنطوق��ة ب�س��ورة
طبيعي��ة ومفهوم��ة للب�س��ر دون احلاج��ة اإىل تدخ��ل ب�س��ري .توج��د العدي��د م��ن املنهجي��ات املختلف��ة لتولي��د اللغ��ات الطبيعي��ة ،مث��ل
املنهجيات املُ�ست ِندة اإىل القوالب ،واملُ�ست ِندة اإىل القواعد ،واملُ�ستنِدة اإىل تعلُّم االآلة.
مُيكن اال�ستفادة من ذلك يف حُت�سني كفاءة وفعالية روبوت الدرد�سة خلدمة العمالء ومتكينه
من تقدمي ردود طبيعية ومفيدة الأ�سئلتهم وا�ستف�ساراتهم.
مُيك��ن اال�س��تفادة م��ن تولي��د اللغ��ات الطبيعي��ة ( )NLGيف حُت�س��ني اإمكاني��ة الو�س��ول ل��ذوي
االإعاق��ة اأو ل��ذوي احلواج��ز اللغوي��ة ،بتمكينه��م م��ن التوا�س��ل م��ع االآالت بطريق��ة طبيعي��ة
وبديهية تنا�سبهم.
172
هناك اأربع اأنواع من توليد اللغات الطبيعية (:)NLG
تولي��د اللغ��ات الطبيعي��ة املبن��ي عل��ى القوال��ب تولي��د اللغ��ات الطبيعي��ة املبن��ي عل��ى األختي��ار
Se ection se Template-Based NLG
املبني على االختيار حُتديد جمموعة يت�سمن توليد اللغات الطبيعية ّ يت�سم�ن تولي�د اللغ�ات الطبيعي�ة املبن ّ�ي عل�ى القوال�ب ا�س�تخدام
للن�س االأ�سلي االأكرب
جلمل اأو الفقرات الإن�ساء ملخّ �س ّ فرعية من ا ُ قوال�ب ُحُم� َّددة ُم�س�بقًا حُت�دد بنية وحُمت�وى الن�س املتولِّ�د .تُزَ وّد
ن�سو�س��ا جدي��دة ،اإال
ً حج ًم��ا .بالرغ��م م��ن اأن ه��ذه املنهجي��ة ال تُو ِّل��د ه�ذه القوال�ب مبعلوم�ات ُحُم َّددة لتوليد الن�س النهائيُ .تع ُّد هذه
اأنه��ا ُمطب َّق��ة عمل ًي��ا على نطاق وا�س��ع؛ وذلك الأ ّنه��ا تاأخذ العينات من املنهجية ب�سيطة ن�سبيًا وحُتقق فعالية يف توليد الن�سو�س للمهام
جلم��ل املكتوب��ة بوا�س��طة الب�س��ر ،مُيك��ن احل��د م��ن جمموع��ة م��ن ا ُ املُح� َّددة واملُع َّرف�ة جي�دً ا .م�ن ناحية اأخرى ،ق�د تواجه �سعوبة مع
خماط��رة تولي��د الن�سو���س غ��ر املُتنب��ئ به��ا اأو �سعيف��ة البني��ة .على امله�ام املفتوح�ة اأو امله�ام التي تتطلب درجة عالية من التباين يف
�س��بيل املث��الُ ،مو ِّل��د تقري��ر الطق���س املبن� ّ�ي عل��ى االختي��ار ق��د ي�س��م الن��س املُ َولَّ�د .عل�ى �س�بيل املثال ،قالب تقرير حالة الطق��س رمبا
قاع��دة بيان��ات م��ن العب��ارات مث��ل( It is hot outside :الطق���س يبدو كما يليToday in [city]، it is [temperature] degrees :
ح��ار باخل��ارج) ،و ( The temperature is risingدرج��ة احل��رارة ( with [weather condition].الي�وم يف [املدين�ة] ،درج�ة
ترتفع) ،و ( Expect sunny skiesتنبوؤات بطق�س ُم�سم�س). احلرارة هي [درجة احلرارة] مئوية و [حالة الطق�س].).
تولي��د اللغ��ات الطبيعي��ة املبن��ي عل��ى القواع��د توليد اللغات الطبيعية املبني على تعلُّم األلة
Machine Learning-Based NLG Rule-Based NLG
املبني على تعلُّم االآلة تدريب منوذج
يت�سمن ت�وليد اللغات الطبيعية ّ يَ�س��تخدِ م تولي��د اللغ��ات الطبيعي��ة املبن� ّ�ي عل��ى القواع��د جمموع��ة
تعلُّ��م االآل��ة عل��ى جمموع��ة كب��رة م��ن بيان��ات الن�سو���س الب�س��رية. م��ن القواع��د املُح � َّددة مُ�س��بقًا لتولي��د الن���س .ق��د حُت��دد ه��ذه
يتع ّل��م النم��وذج اأمن��اط الن� ّ��س وبنيت��ه ،وم��ن ث��م مُيكن��ه تولي��د الن�س جلم��ل ،اأو
القواع��د طريق��ة جتمي��ع الكلم��ات والعب��ارات لت�س��كيل ا ُ
اجلديد الذي ي�سبه الن�س الب�سري يف االأ�سلوب واملحتوى .قد تكون �تخدمة في��ه .ع��اد ًة
كيفي��ة اختي��ار الكلم��ات وف ًق��ا لل�س��ياق املُ�س� َ
املنهجي��ة اأك��ر فعالي��ة يف املهام التي تتطلب درجة عالية من التباين ُت�س��تخدم ه��ذه القواع��د لت�سمي��م روب��وت الدرد�س��ة خلدم��ة
يف الن���س املُو َّل��د .وق��د تتطل��ب املنهجي��ة جمموعات اأك��رب من بيانات العم��الء .ق��د يك��ون م��ن ال�س��هل تطبي��ق االأنظم��ة املبني��ة عل��ى
التدريب واملوارد احل�سابية. القواعد .ويف بع�س االأحيان قد تت�سم باجلمود وال ُتولِّد ُخم َرجات
تبدو طبيعية.
ا�ستخدام توليد اللغات الطبيعية املبني على القوالب Using Template-Based NLG
فعاال يف توليد الن�سو�س للمهام املُح َّددة واملُع َّرفة مثل اإن�ساء التقارير املبني على القوالب ب�سيط ن�سبيًا وقد يكون ً توليد اللغات الطبيعية ّ
اأو تو�سي��ف البيان��ات .اإح��دى ممي��زات تولي��د اللغ��ات الطبيعي��ة املبن� ّ�ي عل��ى القوال��ب ه��و �س��هولة التطبي��ق وال�سيان��ةُ .ي�س ِّم��م االأ�س��خا�س
القوال��ب ،دون احلاج��ة اإىل خوارزمي��ات تعلُّ��م االآل��ة املُعق� َ�دة اأو جمموعات كبرة من بيانات التدريب .وهذا يجعل توليد اللغات الطبيعية
ن�س حُم ّددين ،دون احلاج��ة اإىل اإجراء تغيرات كبرة. املبن� ّ�ي عل��ى القوال��ب ه��و اخلي��ار املنا�س��ب للمه��ام التي تك��ون ذات بنية وحُمتوى ّ
تَ�س��تنِد قوالب توليد اللغات الطبيعية ( )NLGاإىل اأي ُبنية لغوية ُحُم َّددة ُم�س��بقًا .اإحدى املمار�س��ات ال�س��ائعة هي اإن�س��اء القوالب التي
تتطلب كلمات بو�سوم حُمددة كجزء من الكالم الإدراجها يف الفراغات املُح َّددة �سمن اجلملة.
و�سوم اأق�سام الكالم Part of Speech )POS( Tags
PRON VERB DET ADJ NOUN
و�س�وم اأق�س�ام ال�كالم ( ،)Part Of Speechالت�ي ُتع� َّرف كذل�ك با�س�م
ُخ�س��س للكلم�ات يف الن��س لالإ�س�ارة اإىل البن�اء و�س�وم POSه�ي قي�م ت َّ
I want an early upgrade النح�وي للكلم�ات ،اأو ج�زء ال�كالم يف اجلمل�ة .على �س�بيل املثال ،قد تكون
�سكل :3.26مثال على عملية و�سم اأق�سام الكالم فعال اأو �سف ًة اأو ظرفًا ،اإل ،وتُ�ستخدَ م و�سوم اأق�سام الكالم
الكلمة ا�سمًا اأو ً
الن�س وفهم معناه.يف معاجلة اللغات الطبيعية ( )NLPلتحليل بنية ّ
173
ُ مل Syntax Analysis ليل بِناء ا
ُي�ستخدم حُتليل ِبناء اجلُمل عاد ًة اإىل جانب و�سوم اأق�سام الكالم ( )POSيف توليد اللغات الطبيعية ّ
املبني على القوالب ل�سمان
جلم��ل ،والعالقات
جلم��ل التع�رّف عل��ى اأجزاء ال��كالم يف ا ُ
ق��درة القوال��ب عل��ى تولي��د الن�سو���س الواقعي��ة .يت�سم��ن حُتلي��ل ِبن��اء ا ُ
جلملة اأنواعً ا خمتلفة من عنا�سر بناء اجلُملة .مثل : للجملة .تت�سمن ا ُ بينها لتحديد البناء النحوي ُ
جلملة الذي يحتوي على الفعل .وهو عاد ًة يعرب عمّا يقوم به الفاعل اأو عمّا يحدث. • الفعل ( )Predicateهو ق�سم ا ُ
جلملة الذي ُينفّذ الفعل. • الفاعل ( )Subjectهو ق�سم ا ُ
• املفعول به ( )Direct Objectهو ا�سم اأو �سمر ي�سر اإىل ال�سخ�س اأو ال�سيء الذي يتاأثر مبا�سر ًة بالفعل.
جلم��ل لعر���س بع���س
يَ�س��تخدِ م املقط��ع الربجم��ي الت��ايل مكتب��ة وون��درووردز ( )Wonderwordsالت��ي تتب��ع منهجي��ة ِبن��اء ا ُ
املبني على القوالب.
االأمثلة على توليد اللغات الطبيعية ّ
%%capture
])# generates a sentence with the following template: [subject (noun)] [predicate (verb
)(generator.bare_bone_sentence
174
Paraphrase)( دالة
جلملة بكلمة ُ ثم حُتاول ا�ستبدال كل كلمة يف ا.جلمل ُ تُق�سِّ م الدالة يف البداية الن�س املُكوَّن من فقرة اإىل جمموعة من ا
) ال��ذي در�س��ته يفWord2Vec( ُيق َّي��م الت�س��ابه ال��داليل بوا�س��طة ��وذج الكلم��ة اإىل املتَّجَ ��ه.اأخ��رى مت�س��ابهة دالل ًي��ا
) با�س��تبدال الكلمة يف اجلملة بكلمة اأخرى م�س��ابهةWord2Vec( قد يو�سي منوذج الكلمة اإىل امل َّتجه.الدر���س ال�س��ابق
ولتجن��ب مث��ل ه��ذه احل��االت ُت�س��تخدم دال��ة مكتب��ة،) (تف��احapples � (تفاح��ة) بapple ا�س��تبدال: مث��ل،له��ا
. ال�سهرة لتقييم ت�سابه املُفردات بني الكلمة االأ�سلية والكلمة البديلةfuzzywuzzy
:الدالة نف�سها مُو�سحَّ ة باالأ�سفل
# if the word is a stopword or is not included in the Word2Vec model, do not try to replace it.
if word_l in stop or word_l not in model_wv:
new_words.append(word) # append the original word
else: # otherwise
# if the lexical sim is less than the bound, stop and use this candidate.
if lex_sim<lexical_sim_ubound:
break
175
# quality check: if the chosen candidate is not semantically similar enough to
# the original, then just use the original word.
if sem_sim<semantic_sim_lbound:
new_words.append(word)
else: # use the candidate.
new_words.append(rword)
return ' '.join(new_words) # re-join the new words into a single string and return.
ويف املرب��ع االأبي���سparaphrase)( يُ�س��تخدَ م املقط��ع الربجم��ي الت��ايل ال�س��تراد كل االأدوات الالزم��ة لدع��م دال��ة
:text ) للن�س املُ�سند اإىل املتغرParaphrase( حُت�سل على ُخم َرج طريقة اإعادة ال�سياغة،اأدناه
%%capture
import gensim.downloader as api # used to download and load a pre-trained Word2Vec model
model_wv = api.load('word2vec-google-news-300')
import nltk
# used to split a piece of text into words. Maintains punctuations as separate tokens
from nltk import word_tokenize
nltk.download('stopwords') # downloads the stopwords tool of the nltk library
# used to get list of very common words in different languages
from nltk.corpus import stopwords
stop=set(stopwords.words('english')) # gets the list of english stopwords
'We had brunch at this eatery Monday. It is very close to my bungalow. All
my acquaintances were there, we had a terrific day. The locale is terrific
and the tenderloin were delicious. I will certainly rejoin quickly, hugely
advised!'
مُيك��ن حُت�س��ني النتائ��ج باإ�ساف��ة املزي��د م��ن القي��ود لت�سحي��ح بع���س،كم��ا يف املنهجي��ات االأخ��رى املُ�س��ت ِندة اإىل القوال��ب
يو�س��ح املث��ال اأعاله اأن��ه ُمُيكن با�س��تخدام هذه الدالة الب�س��يطة، وم��ع ذل��ك.البدائ��ل االأق��ل و�سو ًح��ا واملذك��ورة يف االأعل��ى
.توليد ن�سو�س واقعية للغاية
176
ا�ستخدام توليد اللغات الطبيعية املبني على األختيار
Using Se ection-Based NLG
جلمل الفرعية من وثيقة ُحُم َّددة .هذه املنهجية ُجت ِ�سد ا�ستخداميف هذا الق�سم� ،ست�ستعر�س منهجية عملية الختيار منوذج من ا ُ
املبني على االختيار ي�ستند اإىل لبنتني رئي�سيتني:
ومزايا توليد اللغات الطبيعية ّ
ُ�ستخدم لتحديد اأزواج الكلمات املت�سابهة دالليًا.
• وذج الكلمة اإىل املتَّجَ ه ( )Word2Vecامل َ
�ستخدمة الإن�ساء ومعاجلة اأنواع خمتلفة من بيانات ال�سبكة. • مكتبة Networkxال�سهرة �سمن لغة البايثون املُ َ
النَّ�س املُدخَ ل الذي �س ُي�ستخدم يف هذا الف�سل هو مقالة اإخبارية نُ�سرت بعد املباراة النهائية لكاأ�س العامل .2022
# tokenize the document, ignore stopwords, focus only on words included in the Word2Vec model.
tokenized_doc=[word for word in re.findall(r'\b\w\w+\b',text.lower()) if word
]not in stop and word in model_wv
مكتبة Networkx
مطعم 2
مُيكن االآن منذجة مفردات املُ�ستنَد يف ُخمطَّ ط موزون (.)Weighted Graph
منزل تُوف��ر مكتب��ة Networkxيف لغ��ة البايث��ون جمموع��ة وا�س��عة م��ن االأدوات الإن�س��اء
رائع
3 وحُتلي��ل املُخطَّ ط��ات .يف تولي��د اللغ��ات الطبيعي��ة املبن� ّ�ي عل��ى االختي��ارُ ،ي�س��اعد
2 1 متثي��ل مف��ردات الوثيق��ة يف ُخمطَّ ��ط م��وزون يف حُتدي��د العالق��ات ب��ني الكلم��ات
ع�ساء
2 جلم��ل ذات ال�سل��ة .يف املُخطَّ ��ط امل��وزونُ ،متث��ل كلوت�س��هيل اختي��ار العب��ارات وا ُ
2
ُعق��دة كلم� ًة اأو مفهومً ��اُ ،ومتث��ل احل��واف بني ال ُعق��د العالقات بني ه��ذه املفاهيم.
املوقع ُتع��رب االأوزان عل��ى احل��واف ع��ن ق��وة ه��ذه العالق��ات ،مم��ا ي�س��مح لنظ��ام تولي��د
لذيذ 1
اللغ��ات الطبيعي��ة بتحدي��د املفاهي��م االأق��وى ارتبا ًط��ا .عن��د تولي��د الن�سو���س،
3 جلمل ا�س��تنادًا اإىل العالقات ُي�س��تخدم املُخطَّ ��ط امل��وزون للبح��ث عن العب��ارات وا ُ
مُو�سي به �ستخدم النظام املُخطَّ ط للبحث عن الكلمات بني الكلمات .على �سبيل املثال ،قد َي ِ
والعبارات االأكر ارتباطً ا لو�سف كيان ُحُم َّدد ثم ا�ستخدام هذه الكلمات لتحديد
جلملة االأكر مالءم ًة من قاعدة بيانات النظام. ا ُ
�سكل :3.27مثال على ُخمطَّ ط موزون ل � Networkx
177
دالة ()Build_graph
تُ�ستخدم دالة () Build_graphمكتبة NetworkXالإن�ساء ُخمطَّ ط يت�سمن:
• عُ قدة واحدة لكل كلمة �سمن مفردات حُمددة.
• حاف��ة ب��ني كل كلمت��ني .ال��وزن عل��ى احلاف��ة ي�س��اوي الت�س��ابه الداليل بني الكلمات ،املح�س��وب بوا�س��طة اأداة Doc2Vec
الن�س كم َّت َجه وه��ي تعميم ملنهجية وذج الكلم��ة اإىل املتَّجَ ه
وه��ي اأداة معاجل��ة اللغ��ات الطبيعي��ة املُخ�س�س��ة لتمثي��ل ّ
(.)Word2Vec
تَر�س��م الدال��ة خمطّ طً ��ا ذا عُ ق��دة واح��دة ل��كل كلم��ة يف املف��ردات املُح َّددة .توج��د كذلك حافة بني عُ قدتني اإذا كان ت�س��ابه
وذج الكلمة اإىل املتَّجَ ه ( )Word2Vecاأكرب من احلد املُعطى.
# tool used to create combinations (e.g. pairs, triplets) of the elements in a list
from itertools import combinations
import networkx as nx # python library for processing graphs
return G
# creates a graph for the vocabulary of the World Cup document
)G=build_graph(vocab,model_wv
# prints the weight of the edge (semantic similarity) between the two words
]'G['referee']['goalkeeper
}{'weight': 0.40646762
e co unities)( دالة
َحُت�س��ب الدالة كذلك.املبني عل��ى الكلمات
ّ تَ�س��تخدِ م الدال��ة االآتي��ة خوارزمي��ة لوف��ان للبح��ث ع��ن املجت َمع��ات يف املُخطَّ ��ط
: ثم تكون املُخ َرجات يف �سورة قامو�سني.موؤ�سر االأهمية لكل جمتمع على حده
. الذي يربط الكلمة باملجتمعword_to_community •
. الذي يربط املجتمع بدرجة االأهميةcommunity_scores •
5 اإذا كان املجتم��ع يت�سم��ن ثالث��ة كلم��ات تظهر، عل��ى �س��بيل املث��ال.الدرج��ة ت�س��اوي جمم ��وع تك��رار الكلم��ات يف املجتم��ع
الن�س الذي
ّ مُيثل املوؤ�س��ر جزءًا من، ومن ناحية املفهوم.19 فاإنّ موؤ�سّ ��ر املجتمع حينئذٍ ي�س��اوي،الن�س ّ مرات يف6 و8و
.ي�س ُّمه املجتمع
ُ
from networkx.algorithms.community import louvain_communities
from collections import Counter # used to count the frequency of elements in a list
179
word_to_community, community_scores = get_communities(G,tokenized_doc)
word_to_community['player'][:10] # prints 10 words from the community of the word 'team'
('champion',
'stretch',
'finished',
'fifth',
'playing',
'scoring',
'scorer',
'opening',
'team',
'win')
�ستكون اخلطوة التالية هي ا�ستخدام هذه املعلومات، وربط املجتمع مبوؤ�سر االأهمية،االآن بعد ربط كل الكلمات باملجتمع
. مُ�سمَّمة لهذا الغر�سevaluate_sentences)( دالة.لتقييم اأهمية كل جملة يف املُ�ستنَد االأ�سلي
Evaluate_sentences)( دالة
. ا�س��تنادًا اإىل الكلم��ات الت��ي تت�سمنه��ا، ث��م ح�س��اب موؤ�س��ر االأهمي��ة ل��كل ُجمل��ة.تب��داأ الدال��ة بتق�س��يم املُ�س��تنَد اإىل ُجم��ل
.تكت�سب كل كلمة موؤ�سر االأهمية من املجتمع الذي تنتمي اإليه
تنتمي��انw2 وw1 الكلمت��ان.w1، w2، w3، w4، w5 لدي��ك جمل��ة مكون��ة م��ن خم�س��ة كلم��ات،عل��ى �س��بيل املث��ال
تنتم��ي اإىلw5 والكلم��ة،30 تنتمي��ان اإىل جمتم��ع مبوؤ�س��ر قيمت��هw4 وw3 والكلمت��ان،25 اإىل جمتم��ع مبوؤ�س��ر قيمت��ه
ِ � تَ�س.125=15+30+30+25+25 جلم��ل ه��و
�تخدم الدال��ة بع��د ذل��ك هذه ُ جمم��وع موؤ�س��رات ا.15 جمتم��ع مبوؤ�س��ر قيمت��ه
. من االأكر اإىل االأقل اأهمية،جلمل يف ترتيب تنازيل ُ املوؤ�سرات لت�سنيف ا
from nltk import sent_tokenize # used to split a document into sentences
# get all the words in the sentence, ignore stopwords and focus only on words that are in the
Word2Vec model.
sentence_words=[word
for word in re.findall(r'\b\w\w+\b',raw_sent.lower()) # tokenizes
if word not in stop and # ignores stopwords
180
word in model_wv] # ignores words that are not in the Word2Vec model
return scored_sentences
scored_sentences=evaluate_sentences(text,word_to_community,community_
scores,model_wv)
len(scored_sentences)
61
(3368, 'Lionel Messi not only emulated the deity of Argentinian football,
Diego Maradona, by leading the nation to World Cup glory; he finally
plugged the burning gap on his CV, winning the one title that has eluded
him – at the fifth time of asking, surely the last time.')
(2528, 'It will go down as surely the finest World Cup final of all time,
the most pulsating, one of the greatest games in history because of how
Kylian Mbappé hauled France up off the canvas towards the end of normal
time.')
181
print(scored_sentences[-1]) # prints the last sentence with the lowest score
)(print
print(scored_sentences[30]) # prints a sentence at the middle of the scoring scale
(882, 'Di María won the opening penalty, exploding away from Ousmane
)'Dembélé before being caught and Messi did the rest.
QA={
"Q1":"What type of courses are you interested in?",
"A1":[["Courses in Computer Programming","2"],
["Courses in Engineering","3"],
["Courses in Marketing","4"]],
Chat)( دالة
يق��راأ روب��وت، بع��د ط��رح ال�س�وؤال. ملعاجل��ة قاع��دة املعرِ ف��ة وتنفي��ذ روب��وت الدرد�س��ةChat)( �تخدم دال��ة
َ � تُ�س،يف النهاي��ة
ِ الدرد�سة رد امل
.ُ�ستخدم
ُيح َّدد ذلك اخليار وينتقل روبوت الدرد�سة،• اإن كان الرد م�سابهًا دالليًا الأحد خيارات االإجابات املقبولة لهذا ال�سوؤال
.اإىل ال�سوؤال التايل
ِ ُيطلب من امل،• اإن مل يت�سابه الرد مع ا ٍأي من اخليارات
.ُ�ستخدم اإعادة �سياغة الرد
) لتقيي��م موؤ�س��ر الت�س��ابه ال��داليل ب��نيSBERT( جلم��ل ثنائي��ة اال ��ا م��ن املح��والت ُ تُ�س��تخدَ م دال��ة متثي��الت ترمي��ز ا
. sim_lbound ُيع ُّد اخليار مت�سابهًا اإذا كان املوؤ�سر اأعلى من ُمتغر احلد االأدنى.الرد وكل اخليارات املُر�سَّ حة
qa_id='1' # the QA id
183
candidate_embeddings = model_sbert.encode([x for x,y in candidates],
convert_to_tensor=True)
# if the score of the winner is less than the bound, ask again.
if similarity_scores[0][winner_index]<sim_lbound:
print('>> Apologies, I could not understand you. Please rephrase
your response.')
continue
ِ � يفه ��م روب ��وت الدرد�س ��ة اأن املُ�س،يف التفاع ��ل االأول
روب ��وت، وكذل ��ك.�تخدم يبح ��ث ع ��ن دورات تدريبي ��ة يف الت�س ��ويق
Search Engine Optimization ي�س ��به دالل ًي ��ا م�سطل ��حSEO الدرد�س ��ة ذك ��ي بالق ��در ال ��كايف ليفه ��م اأن امل�سطل ��ح
.(حُت�سني حُمركات البحث) مما يوؤدي اإىل اإنهاء املناق�سة بنجاح
184
التفاعل الثاين
)chat(QA,model_sbert, 0.5
يف التفاع��ل الث��اين ،يفه��م روب��وت الدرد�س��ة اأن ( Cooking Classesدرو���س الطهي) ال ت�س��به دالل ًي��ا اخليارات املوجودة
املعرف��ة .وه��و ذك��ي بالق��در ال��كايف ليفه��م اأن ( Software coursesال��دورات التدريبي��ة يف الربجم��ة) يج��ب يف قاع��دة ِ
اأن ترتب��ط بخي��ار ( Courses on Computer Programmingال��دورات التدريبي��ة يف برجم��ة احلا�س��ب) .اجل��زء
�تخدم C++و .Javaعل��ى االأخ��ر م��ن التفاع��ل ي�س��لط ال�س��وء عل��ى نق��اط ال�سع��ف :يرب��ط روب��وت الدرد�س��ة ب��ني رد املُ�س� ِ
الرغ��م م��ن اأن لغت��ي الربجم��ة مرتبطت��ان بالفع��ل ومُيكن القول باأنهما اأكر ارتباطً ا من لغتي البايثون و ،C++اإال اأن الرد
املنا�س��ب يجب اأن ُيو�سح اأن روبوت الدرد�س��ة ال يتمتع بالدراية الكافية للتو�سية بالدورات التدريبية يف لغة .C++اإحدى
�دال م��ن الت�س��ابه ال��داليل للمقارن��ة ب��ني ال��ردود
الطرائ��ق ملعاجل��ة ه��ذا الق�س��ور ه��ي ا�س��تخدام الت�س��ابه ب��ني املف��ردات ب� ً
واخليارات ذات ال�سلة ببع�س االأ�سئلة.
ا�ستخدام تعلُّم األلة لتوليد ن�ض واقعي
Using Machine Learning to Generate Re istic Text
الطرائق املو�سحة يف االأق�سام ال�سابقة ت ِ
َ�ستخدم القوالب ،والقواعد ،اأو تقنيات التحديد لتوليد الن�سو�س للتطبيقات املختلفة.
ُ�ستخدمة يف توليد اللغات الطبيعية (.)NLG
يف هذا الق�سم� ،ستتع َّرف على اأحدث تقنيات تعلُّم االآلة امل َ
جدول :3.5تقنيات تعلُّم األلة املُتقدمة املُ�ستخدَ مة يف توليد اللغات الطبيعية
الو�سف التقنية
�س��بكة الذاك��رة امل ُطو ّل��ة ق�س��رة تتكون �سبكة الذاكرة امل ُطولّة ق�سرة املدى ( )LSTMمن خاليا ذاكرة ()Memory Cells
امل��دى ( Long Short-Termمرتبط�ة ببع��س .عن�د اإدخ�ال �سل�س�لة من البيانات اإىل ال�س�بكة ،تت�وىل معاجلة كل عن�سر
يف ال�سل�س�لة واح�دًا تل�و االآخ�رُ ،وحُت ِّ�دث ال�س�بكة خالي�ا الذاك�رة لتوليد ُخم� َرج لكل عن�سر )Memory - LSTM
على حده� .س�بكات الذاكرة امل ُطولّة ق�سرة املدى ( )LSTMتنا�س�ب مهام توليد اللغات
الطبيعية ( )NLGلقدرتها على االحتفاظ باملعلومات من �سال�سل البيانات (مثل التع ّرف
على الكالم اأو الكتابة اليدوية) ومعاجلة تعقيد اللغات الطبيعية.
النماذج املبنية على املحوالت النماذج املبنية على املحوالت هي تلك التي تفهم اللغات الب�س�ريّة وتولّدها ،وتَ�س�ت ِند هذه
النم�اذج يف عمله�ا اإىل تقني�ة االنتب�ا الذات�ي ( )Self-Attentionالتي متكِّنها من فهم (Transformer-Based
جلمل.العالقات بني الكلمات املختلفة يف ا ُ )Models
185
امل ُرمِّز OUTPUT N OUTPUT 2 OUTPUT 1
مُفكِّك الرتميز
()DECODERS ()ENCODERS LSTM LSTM LSTM
امل ُخرَج امل ُدخَ ل INPUT N INPUT 2 INPUT 1
اأنا طالب I am a student ""today ""am ""I
�سكل :3.30املُحوِّل �سكل :3.29الذاكرة املُطولّة ق�سرة املدى
املُحوِّألت Transformers
املُحوِّالت منا�سبة ملهام توليد اللغات الطبيعية لقدرتها على معاجلة البيانات املُدخَ لة املُت�سل�سلة بكفاءة .يف منوذج املُحوِّالت،
ُمت� َّرر البيان�ات املُدخَ ل�ة ع�رب املُرمِّ �ز ال�ذي يُحوّل املُدخَ الت اإىل متثيل م�س�تمر .ثم ُمُي َّرر التمثيل عرب ُمفكِّك الرتميز الذي
ُيولِّد الت�سل�سل املُخرَج .اإحدى اخل�سائ�س الرئي�سة لهذه النماذج هي ا�ستخدام اآليات االنتباه التي ت�سمح للنموذج بالرتكيز
عل�ى االأج�زاء املُهِ َّم�ة م�ن الت�سل�س�ل يف ح�ني تتجاه�ل االأجزاء االأقل دالل�ةً .اأظهرت مناذج املُح ِّوالت كف�اءة يف توليد الن�س
عايل الدقة للعديد من مهام توليد اللغات الطبيعية مبا يف ذلك ترجمة االآلة ،والتلخي�س ،واالإجابة على االأ�سئلة.
منوذج األإ�سدار الثاين من املُحوِّل التوليدي مُ�سبَق التدريب OpenAI GPT-2 Model
يف هذا الق�س��م� ،س��وف ت�س��تخدم االإ�سدار الثاين من وذج امل ُحوِّل التوليدي مُ�س�بَق التدريب ( )GPT-2وهو منوذج
لغ��وي ق��وي طورت��ه �س��ركة اأوب��ن اأي اآي ( )OpenAIلتولي��د الن�سو���س املُ�س��تنِدة اإىل الن���س التلقين��ي املُدخَ ��ل بوا�س��طة
ُ�ستخدم .االإ�سدار الثاين من امل ُحوِّل التوليدي مُ�سبق التدريب ()GenerativePre-trainingTransformer2-GPT-2 امل ِ
ُم��د َّرب عل��ى جمموع��ة بيان��ات ت�س��م اأك��ر م��ن ثم��ان مالي��ني �سفحة ويب ويتمي��ز بالقدرة على اإن�س��اء الن�سو�س الب�س��رية
بعدَّة لغات واأ�ساليبُ .بنية االإ�سدار الثاين من امل ُحوِّل التوليدي مُ�سبق التدريب ( )GPT-2املبنية على املُحوِّل ت�سمح
بتحدي��د التبع َّي��ات ( )Dependenciesبعي��دة امل��دى وتولي��د الن�سو���س ا ُملتَّ�س��قة ،وهو ُمد َّرب للتنبوؤ بالكلم��ة التالية وفقًا
لكل الكلمات ال�س��ابقة �سمن الن�س ،وبالتايل ،مُيكن ا�س��تخدام النموذج لتوليد ن�سو�س طويلة ج ًدا عرب التنبوؤ امل�س��تمر
واإ�سافة املزيد من الكلمات.
%%capture
!pip install transformers
!pip install torch
import torch # an open-source machine learning library for neural networks, required for GPT2.
from transformers import GPT2LMHeadModel, GPT2Tokenizer
يُقدَّم الن�س التايل كاأ�سا�س ي�ستند اإليه االإ�سدار الثاين من امل ُحوِّل التوليدي مُ�سبق التدريب (:)GPT-2
186
excellent and the steaks were delicious. I will definitely return soon, highly
recommended!'
I've been coming here for a while now and I've been coming here for a while
now and I've been coming here for a while now and I've been coming here for
a while now and I've been coming here for a while now and I've been coming
here for a while now and I've been coming here for a while now and I've
been coming here for a while now and I've been coming here for a while now
and I've been coming here for a while now and I've been coming here for a
while now and I've been coming here for a while now and I've been coming
here for a while now and I've been coming here for a while now and I've
been coming here for a while now and
print(tokenizer.decode(generated_tokens[0],skip_special_tokens=True))
If you just found this place helpful. If you like to watch videos or
go to the pool while you're there, go for it! Good service - I'm from
Colorado and love to get in and out of this place. The food was amazing!
Also, we were happy to see the waitstaff with their great hands - I went
for dinner. I ordered a small side salad (with garlic on top), and had a
slice of tuna instead. When I was eating, I was able to get up and eat my
salad while waiting for my friend to pick up the plate, so I had a great
time too. Staff was welcoming and accommodating. Parking is cheap in this
neighborhood, and it is in the neighborhood that it needs to
187
ي�ستخدم الن�س مفردات غنية وهوِ حيث، مع احلفاظ على دقة و�سالمة الن�س املوَّلد،يحقّق هذا ُخمرَجات اأكر تنوعً ا
.) بتخ�سي�س املُخ َرج ب�سكل اأف�سلGPT-2( ي�سمح االإ�سدار الثاين من امل ُحوِّل التوليدي مُ�سبق التدريب.�سليم نحويًا
(درج�ة احل�رارة) ال�ذي ي�س�مح للنم�وذج بتقبل املزيد م�ن املخاطرtemperature يت�س�ح ذل�ك عن�د ا�س�تخدام ُمتغ�ر
: مثل. القيم االأعلى لهذا املُتغر توؤدي اإىل ن�سو�س اأكر تنوعً ا.احتماال
ً بل واأحيانًا اختيار بع�س الكلمات االأقل
print(tokenizer.decode(generated_tokens[0], skip_special_tokens=True))
Worth a 5 I thought a steak at a large butcher was the end story!! We were
lucky. The price was cheap!! That night though as soon as dinner was on
my turn that price cut completely out. At the tail area they only have
french fries or kiwifet - no gravy - they get a hard egg the other day too
they call kawif at 3 PM it will be better this summer if I stay more late
with friends. When asked it takes 2 or 3 weeks so far to cook that in this
house. Once I found a place it was great. Everything I am waiting is just
perfect as usual....great prices especially at one where a single bite
would suffice or make more as this only runs on the regular hours
فاإنّ النموذج �سيتجاهل االإر�سادات االأ�سا�سية التي تظهر يف امل ُدخَ ل، اإذا كانت درجة احلرارة مرتفعة للغاية،ومع ذلك
:) ويُولِّد ُخمرجً ا اأقل واقعية ولي�س له معنىOriginal Seed( ّ االأو
print(tokenizer.decode(generated_tokens[0], skip_special_tokens=True))
188
مترينات
1
خاطئة �سحيحة حدِّد اجلملة ال�سحيحة واجلملة اخلاطئة فيما يلي:
املبني على تعلُّم االآلة يتطلب جمموعات كبرة من بيانات التدريب
.1توليد اللغات الطبيعية ّ
واملوارد احل�سابية.
.2الفعل هو نوع من و�سوم اأق�سام الكالم (.)POS
جلم��ل لتولي��د اللغ��ات الطبيعي��ة املبن��يّ عل��ى القوال��ب ،يُ�س��تخدَ م التحلي��ل
.3يف حُتلي��ل ِبن��اء ا ُ
ب�سورة منف�سلة عن و�سوم اأق�سام الكالم (.)POS
.4املجت َمعات هي عناقيد العُقد التي ُمتثِّل الكلمات املختلفة دالليًا.
.5ي�سب��ح روب��وت الدرد�س��ة اأك��ر ذكا ًء كلم��ا ازداد ع��دد م�س��تويات االأ�س��ئلة واالأجوب��ة املُ�سافة
اإىل قاعدة املعرِ فة.
189
مف��ردات ُحم � َّددة م��ن الكلم��ات و ��وذج الكلم��ةbuild_graph)( اأكم��ل املقط��ع الربجم��ي الت��ا حت��ى تقب��ل الدال��ة4
يج��ب اأن يحت��وي.) املُ��د َّرب لر�س��م ُخمطَّ ��ط ذي ُعق��دة واح��دة ل��كل كلم��ة يف املف��ردات املُح� َّددةWord2Vec( اإىل املتَّجَ ��ه
) اأك��رب م��ن م�س��توى الت�س��ابهWord2Vec( امل ُخطَّ ��ط عل��ى حاف��ة ب��ني عُقدت��ني اإذا كان ت�س��ابه ��وذج الكلم��ة اإىل املتَّجَ ��ه
. يجب اأال تكون هناك اأوزان على احلواف.امل ُعطى
similarity_threshold:float
):
sim=model_wv. (w1, w2)# gets the similarity between the two words
if :
G. (w1,w2)
return G
190
جلم��ل ثنائي��ة
ُ ��وذج متثي��الت ترمي��ز اget_max_sim)( �تخدم الدال��ة ِ � اأكم��ل املقط��ع الربجم��ي الت��ا حت��ى تَ�س5
جلم��ل ال��واردة يف قائم��ة اأخ��رى
ُ وكل اmy_sentence ) للمقارن��ة ب��ني جُ مل��ة ُحم� َّددةSBERT( اال ��ا م��ن املح��والت
.my_sentence اإىلL1 يجب اأن تُعيد الدالة اجلُملة ذات ُموؤ�سر الت�سابه االأعلى من.L جلمل ُ من ا
model_sbert = ('all-MiniLM-L6-v2')
def get_max_sim(L1,my_sentence):
# embeds my_sentence
similarity_scores = .cos_sim( , )
winner_index=np.argmax(similarity_scores[0])
return
191
الم�سروع
يج��ب متثي��ل الن�سو���س يف كل م��ن جمموعات بيانات التدريب واالختبار باملتَّجَ هات قبل ا�س��تخدامها .تُ�س��تخدَ م
اأدوات CountVectorizerاأو TfidfVectorizerمن مكتبة �سكلرن ( )Sklearnيف الربجمة االجتاهية.
تُقدِّ م مكتبة �سكلرن ( )Sklearnيف لغة البايثون قائمة طويلة من مناذج الت�سنيف .مثل:
> ()GradientBoostingClassifier
> ()DecisionTreeClassifier
> ()RandomForestClassifier
مهمت��ك ه��ي ا�س��تخدام جمموع��ة بيان��ات التدري��ب IMDBاملُ�س��تخدَ مة يف ه��ذا الدر���س لتدري��ب النم��وذج ال��ذي
يحق��ق اأعل��ى درج��ة م��ن الدق��ة عل��ى جمموع��ة بيان��ات االختب��ار .)imdb_data imdb_ test.csv( IMDB
مُيكنك حُتقيق ذلك عرب:
1
ا�س��تبدال املُ�س ِّن��ف MultinomialNBبنم��اذج ت�سني��ف اأخ��رى م��ن مكتب��ة �س��كلرن ()Sklearn
مثل املو�سحة باالأعلى.
2
اإعادة ت�سغيل املفكرة التفاعلية لديك بعد اال�ستبدال ،حل�ساب دقة كل منوذج جديد بعد جتربته.
3
اإن�ساء تقرير للمقارنة بني دقة كل النماذج التي ج َّربتها وحُتديد النموذج الذي حقق نتائجَ دقيقة.
192
ماذا تع ّلمت
امل�سطلحات الرئي�سة
193
ا زء الثاين
الوحدة الرابعة
التعرّف على ال�سور
الوحدة اخلام�سة
خوارزميات التح�سني واتخاذ القرار
الوحدة ال�ساد�سة
الذكاء اال�سطناعي واملجتمع
.4التع� ّ�رف على ال�سور
�س ��يتعرّ ف الطال ��ب يف ه ��ذه الوح ��دة عل ��ى التع ُّل ��م املوجَّ ��ه وغ ��ري املوجَّ ��ه ،وكيفي ��ة
تو يفهم� ��ا للتع� ��رّ ف عل� ��ى ال�س� ��ور ( )Image ecognitionع� ��ن طري� ��ق اإن�س� ��اء
من��وذج وتدريب��ه لي�سب� قادرًا على ت�سنيف �سور لروو���ض احليوان��ات اأو ميعها.
أي�س ��ا عل ��ى تولي ��د ال�س ��ور ( )Image ener tionوكيفي ��ة تغيريه ��ا، و�س ��يتعرّ ف ا ً
اأو اإكمال األأجزاء الناق�سة فيها مع احلفا على واقعيتها.
اأهداف التعلُّم
بنهاية هذه الوحدة �سيكون الطالب قادرًا على اأن:
يُعالج ال�سور معا ة اأولية وي�ستخل�ض خ�سائ�سها.
موجه خا�ض بت�سنيف ال�سور. درب منوذج تعلُّم َّ
ُي ِّ
عرف هيكل ال�سبكة الع�سبية. ُي ِّ
موجه خا�ض بت ميع ال�سور. درب منوذج تعلُّم غري َّ ُي ِّ
ن�سي.
يولِّد �سورًا بناءً على توجيه ّ
يُكمل األأجزاء الناق�سة يف �سورة ُمعطاة بطريقة واقعية.
األأدوات
مفكرة جوبيرت ()Jupyter Notebook
قوقل كوألب ()Google Colab
196
الدر�ض األأول
املوجه لتحليل ال�سور
التع ُّلم َّ
التعلُّم املوجَّ ه يف روية احلا�سب Supervised Learning for Computer Vision
ُتع� ُّد روؤي��ة احلا�س��ب ( )Computer Visionجم� ً�اال فرع ًي��ا م��ن جم��االت ال��ذكاء اال�سطناع��ي ،والذي ُيركّز على تعليم اأجهزة احلا�س��ب
طريق��ة تف�س��ر ال َع� َ�امل املرئ��ي وفهم��ه ،ويت�سمن ا�س��تخدام ال�سور الرقمي��ة ومقاطع الفيديو؛ لتدريب االآالت عل��ى التع ّرف على املعلومات
املرئية وحُتليلها مثل :االأ�س��ياء واالأ�س��خا�س واملَ�س��اهد .ويتمثّل الهدف النهائي الذي ت�س��عى روؤية احلا�س��ب اإىل حُتقيقه يف متكني االآالت
من "روؤية" الع ََامل كما يراه الب�سر ،وا�ستخدام هذه املعلومات؛ التخاذ قرارات ،اأو للقيام باإجراءات.
هناك جمموعة كبرة من التطبيقات التي تُ�ستخدم فيها روؤية احلا�سب ،مثل:
• الت�سوير الطبي :مُيكن اأن ت�ساعد روؤية احلا�سب االأطباء واملخت�سني يف الرعاية ال�سحية على ت�سخي�س االأمرا�س من خالل حُتليل
ال�سور الطبية مثل :االأ�س ّعة ال�سينية ،والت�سوير بالرنني املغناطي�سي ،واالأ�س ّعة املقطعية.
�تخدم ال�س��يارات ذاتية القيادة والطائرات املُ�س� َّ�رة روؤية احلا�س��ب للتعرف على اإ�س��ارات املرور واأ�س��كال • املركبات ذاتية القيادة :ت�س� ِ
الطرق العامة وطرق امل�ساة والعقبات يف الطريق واجلو ،ولِتمكينها من التنقل باأمان وكفاءة.
ال�سناعات ،مثل� :سناعة • �سبط اجلودةُ :ت�ستخدم روؤية احلا�سب لفح�س املنتجات وحُتديد عيوب الت�سنيع ،وذلك يف ُخمتلف اأنواع ّ
ال�سيارات واالإلكرتونيات واملن�سوجات.
• الروبوتية :تُ�ستخدم روؤية احلا�سب مل�ساعدة الروبوتات على التنقل والتفاعل مع بيئتها عن طريق التعرّف على االأ�سياء والتعامل معها.
املوج��ه نوع��ني رئي�س��ني م��ن تعلُّ��م االآل��ة ُي�س��تخدمان بطريق��ة �س��ائعة يف تطبيق��ات روؤي��ة احلا�س��ب ،ويت�سم��ن كال
املوج��ه وغ��ر َّ ُيع� ُّد التعلُّ��م َّ
النوعني خوارزميات تدريب على جمموعات كبرة من ال�سور اأو مقاطع الفيديو؛ لكي تتمكن االآالت من التع ّرف على املعلومات املرئية
املوج��ه يف الدر�س��ني االأول والثاين م��ن الوحدة الثالثة ،وكالهم��ا طُ ِّبق يف معاجلة املوج��ه وغ��ر َّ
وتف�س��رها� .س��بق اأن تع ّرف��ت عل��ى التعلُّ��م َّ
اللغات الطبيعية ( )NLPوتوليداللغات الطبيعية ( ،)NLGو�سيتم تطبيقهما يف هذا الدر�س على حُتليل ال�سور.
املوج��ه خوارزمي��ات تدري��ب عل��ى جمموع��ات بيانات غ��ر ُمعَنوَنة -اأي ال توجد فيها عناوي��ن اأو فئات �سريحة ،-ثم يت�س َّم��ن التعلُّ��م غ��ر َّ
تتع ّل��م اخلوارزمي��ة حُتدي��د ا أالمن��اط املت�س��ابهة يف البيان��ات دون اأن تك��ون لديه��ا اأي معرف��ة م�س��بقة بالعناوي��ن .عل��ى �س��بيل املث��ال :مُيك��ن
املوجه لتجميع ال�سور املت�سابهة معًا بنا ًء على ال�سمات امل�سرتكة بينها مثل :اللون اأو النق�س ()Texture ا�ستخدام خوارزمية التعلُّم غر َّ
املوجه بالتف�سيل يف الدر�س الثاين.اأو ال�سكل .و�سيتم تو�سيح التعلُّم غر َّ
املوج��ه تدري��ب اخلوارزمي��ات على جمموعات بيان��ات ُمعَنوَنة؛ حيث يُخ�س�س عنوان اأو فئة مع ّينة لكل �سورة يف املقاب��ل ،يت�سم��ن التعلُّ��م َّ
اأو مقطع فيديو ،ثم تقوم اخلوارزمية بعد ذلك بالتع ّرف على اأمناط وخ�سائ�س كل عنوان؛ لتتمكن
امل ُخرَج املُعَنون وذج ت�سنيف تعلُّم االآلة �سورة خام
ر عربي 98%
1%تفاحة
� 1%سيارة
�سكل :4.1ت�سنيف ال�سور با�ستخدام روؤية احلا�سب
197
املوجه على التع ّرف
من ت�سنيف ال�سور اأو مقاطع الفيديو اجلديدة بدقة .فعلى �سبيل املثال :قد ُتد َّرب خوارزمية التعلُّم َّ
عل��ى �س��الالت ُخمتلف��ة م��ن القط��ط بن��ا ًء عل��ى ال�س��ور املُعَن َون��ة لكل �س��اللة (انظ��ر ال�س��كل ،)4.1و�س��يتم الرتكيز يف هذا
املوجه.
الدر�س على التعلُّم َّ
املوجه عادة على اأربع خطوات رئي�سة وهي :جمع البيانات ،وعَ نوَنتها ،والتدريب عليها ،ثم االختبار. ت�ستمل عملية التعلُّم َّ
اأثن��اء جم��ع البيان��ات وو�س��ع امل�س��مياتُ ،جتم��ع ال�س��ور اأو مقاطع الفيديو وتنظّ م يف جمموعة بيان��ات ،ثم تُعنون كل �سورة
اأو مقطع فيديو بعنوان �سنف اأو فئة ،مثل(eagle :الن�سر) اأو ( catالقطّ ة).
وت�س� ِ
�تخدم خوارزمي��ة تعلُّ��م االآل��ة اأثن��اء مرحل��ة التدريب جمموعة البيان��ات املُعَنوَنة "لتتعلّم" االأمناط وال�س��مات املرتبطة
ب��كل �سن��ف اأو فئ��ة ،وكلم��ا زادت بيان��ات التدري��ب الت��ي ُتق��دم للخوارزمي��ة اأ�سبح��ت اأك��ر دق��ة يف التع� ّرف عل��ى الفئ��ات
يتح�سن اأداوؤها.
املُختلفة يف جمموعة البيانات ،وبالتايل ُّ
ومبج��رد اأن ُي��د َّرب النم��وذج ،يت��م اختب��اره عل��ى جمموع��ة منف�سل��ة غ��ر الت��ي مت التدري��ب عليه��ا م��ن ال�س��ور اأو مقاط��ع
الفيدي��و؛ لتقيي��م اأدائ��ه ،وتختل��ف جمموع��ة االختب��ار عن جمموعة التدري��ب؛ للتاأكد من قدرة النم��وذج على التعميم على
البيان��ات اجلدي��دة .عل��ى �س��بيل املث��ال :حُتت��وي البيان��ات اخلا�س��ة ب � ( catالقطّ ��ة) عل��ى خ�سائ���س مث��ل :ال��وزن والل��ون
وال�ساللة وما اإىل ذلك ،وتُقيّم دقة النموذج بنا ًء على مدى كفاءة اأَدائه يف جمموعة االختبار.
املوجه الأنواع ُخمتلفة من البيانات مثل الن�سو�س ،ولكن ت�سبه العملية ال�سابقة اإىل حد كبر العملية املُتّبعة يف مهام التعلُّم َّ
مو�سح يف اجلدول .4.1 َّ هو كما متعددة أ�سباب ال الن�س
البيانات املرئية عادة ما ُتع ُّد اأكر �سعوبة يف التعامل معها من ّ
حُتت��وي ال�س��ور عل��ى كمي��ة كب��رة م��ن البيان��ات ،مم��ا يجع��ل معاجلته��ا وحُتليله��ا اأك��ر البيان��ات املرئي��ة عالي��ة
�سعوب��ة م��ن البيان��ات الن�س َّي��ة ،فف��ي حني اأن العنا�سر االأ�سا�س��ية للم�س��تند الن�سيّ هي االأبعاد
الكلم��ات ،ف �اإن عنا�س��ر ال�س��ورة ه��ي وح��دات البك�س��ل ،و�س��رتى يف ه��ذا الف�س��ل اأنّ
ال�سغرة منها.ال�سورة مُيكن اأن تتكون من اآالف وحدات البك�سل ،حتّى ّ
مُيك��ن اأن تتاأث��ر ال�س��ور بالتفا�سي��ل الكث��رة ،واالإ�س��اءة ،والت�سوي���س ،وعوام��ل اأخ��رى البيان��ات املرئي��ة حُتت��وي
جتع��ل ت�سنيفه��ا بدق��ة عملي��ة �سعب��ة .باالإ�ساف��ة اإىل ذل��ك ،هن��اك جمموعة وا�س��عة من عل��ى تفا�سي��ل كث��رة
البيانات املرئية املتن ّوعة ذات العديد من العنا�سر ،وامل�ساهد ،وال�سياقات التي ي�سعب ومتن ّوعة للغاية
ت�سنيفها بدقة.
يتب��ع الن� ّ��س بُني��ة لغوي��ة وقواع��د نحو ّي��ة عامة ،بينم��ا ال تخ�سع البيان��ات املرئية لقواعد البيان��ات املرئي��ة ال تتب��ع
ثابتة؛ مما يجعل عملية التحليل اأكر تعقيدً ا و�سعوبة وتكلفة. هيكلة حُمددة
198
.• حُتليل البيانات؛ ال�ستخراج اأمناط وخ�سائ�س مفيدة
.• ا�ستخدام البيانات امل�ستخل�سة؛ لتدريب مناذج الت�سنيف التي مُيكن ا�ستخدامها للتنبوؤ بعناوين ال�سور اجلديدة
) �سورة لوجوه �ستّة ع�سر نوعً ا ُخمتلفًا1,730( حُتتوي جمموعة البيانات التي �ست�ستخدمها على األف و�سبعمئة وثالثني
.املوجه لتطبيق التقنيات املذكورة �سابقًا
َّ وبالتايل فهي جمموعة مثالية للتعلُّم،من احليوانات
Loading and Preprocessing Images تها األأولية ميل ال�سور ومعا
ي�س��تورد املقط��ع الربجم��ي الت��ايل جمموع��ة م��ن املكتب��ات الت��ي تُ�س��تخدم لتحمي��ل ال�س��ور م��ن جمموع��ة بيان��ات
: (وجوه _احليوانات) وحُتويلها اإىل �سيغة رقميةLHI-Animal- Faces
%%capture
import matplotlib.pyplot as plt # used for visualization
from os import listdir # used to list the contents of a directory
ولذل�ك ف�اإن املقط�ع،تتطل�ب خوارزمي�ات التعلُّ�م املوجَّ �ه اأن تك�ون كل ال�س�ور يف جمموع�ة البيان�ات له�ا االأبع�اد نف�س�ها
(جمل�د_ املُدخَ �الت) و ُيغ ِّ�ر حج�م كل منه�ا بحي�ث تك�ون له�ا اأبع�ادinput_folder الربجم�ي الت�ايل يق�راأ ال�س�ور م�ن
:الطول والعر�س نف�سها
def resize_images(input_folder:str,
width:int,
height:int
):
print(subfolder)
path = input_folder + '/' + subfolder
199
resized_images, labels, filenames = resize_images("AnimalFace/Image",
width=100, height=100) # retrieves the images with their labels and resizes them to 100 x 100
تك�س��ف طباع��ة �س��كل ال�س��ورة ع��ن م�سفوف��ة ،169 × 169باإجم��ايل :ثماني��ة وع�س��رين األ ًف��ا وخم�س��مئة وواح��د و�س��تني
( )28,561بك�سل ،ومُيثِّل الرقم 3يف العمود الثالث القنوات الثالث (اأحمر اأخ�سر اأزرق) لنظام االألوان .RGB
على �سبيل املثال� ،سيطبع املقطع الربجمي التايل قيمة االألوان للبك�سل االأول من هذه ال�سورة:
# the pixel at the first column of the first row [102 68 ]66
)]print(image[0][0
200
يوؤدي تغير احلجم اإىل حُتويل ال�سور من تن�سيق RGBاإىل تن�سيق مُ�ستنِد على عدد حقيقي (:)Float-based
عل��ى الرغ��م م��ن اأن ال�س��ورة ق��د غُ � ّ�ر حجمه��ا اإىل م�سفوف��ة ذات اأبع��اد ،100 × 100ف�اإن قي��م القن��وات الث��الث RGB
ل��كل بك�س��ل مت ت�س��ويتها ( )Normalizedلتك��ون ذات قيم��ة ب��ني 0و ،1ومُيك��ن اإع��ادة حُتويله��ا م��رة اأخ��رى اإىل تن�س��يق
البايت بدون اإ�سارة من خالل املقطع الربجمي التايل:
)resized = img_as_ubyte(resized )(100, 100, 3
)print(resized.shape ][104 70 68
)]print(resized[0][0 ][102 68 66
)]print(image[0][0
قبل بدء التدريب على خوارزميات التعلُّم املوجَّ ه ،من اجليد التحقق
�سكل � :4.3سورة راأ�س اأ�سد غُ ّر حجمها مم��ا اإذا كان��ت اأي �س��ورة م��ن ال�س��ور املوج��ودة يف جمموعة البيانات
غر مطابقة للتن�سيق (.)100 ،100 ،3
violations = [index for index in range(len(resized_images)) if
])resized_images[index].shape != (100,100,3
violations
][455, 1587
يك�س��ف ه��ذا املقط��ع الربجم��ي ع��ن وج��ود �سورت��ني غ��ر مطابقت��ني لتل��ك ال�سيغ��ة ،وه��ذا غ��ر متوق��ع الأن دال��ة
()َّ resize_imageمت تطبيقه��ا عل��ى جمي��ع ال�س��ور املوج��ودة يف جمموعة البيانات .يقوم املقطعان الربجميان التاليان
بطباعة هاتني ال�سورتني ،باالإ�سافة اإىل اأبعادهما وا�سمي ملفيهما:
201
]pos1 = violations[0
]pos2 = violations[1
)]print(filenames[pos1
)print(resized_images[pos1].shape
)]plt.imshow(resized_images[pos1
)]plt.title(labels[pos1
cow1.gif
)(100, 100, 4
;)]print(filenames[pos2
;)print(resized_images[pos2].shape
;)]plt.imshow(resized_images[pos2
;)]plt.title(labels[pos2
tiger0000000168.jpg
)(100, 100
ال�سورة االأوىل :لها �سكل ذو اأبعاد ( ،)100 ،100 ،4ويد ُّل الرقم
�دال م�ن تن�س�يق ، RGBو ه�ذا التن�س�يق 4اأنه�ا بتن�س�يق RGBAب ً
يحت�وي عل�ى قن�اة اإ�سافي�ة رابع�ة تدع�ى قن�اة األف�ا ( )Alphaالت�ي
تبني �سفافية كل بك�سل
�سكل � :4.5سورة ّ
ُمتثِّل �س�فافية كل بك�س�ل .على �س�بيل املثال:
202
(بدال من قنوات RGBالثالث) ،وقيمة كل بك�سل عبارة عن رقم واحد يرتاوح �سور التدرج الرمادي لها قناة واحدة فقط ً
من 0اإىل ،255حيث ُمتثِّل قيمة البك�سل 0اللون االأ�سود ،بينما ُمتثِّل قيمة البك�سل 255اللون االأبي�س .على �سبيل املثال:
]resized_images[pos2][0][0
100
وكاختب��ار اإ�س��ايف جل��ودة البيان��ات ،يق��وم املقط��ع الربجم��ي الت��ايل بح�س��اب تك��رار عن��وان كل �س��ورة حي��وان يف جمموعة
البيانات:
# used to count the frequency of each element in a list. Counter({'Bear': 101,
from collections import Counter 'Cat': 160,
'Chicken': 100,
)label_cnt = Counter(labels 'Cow': 104,
label_cnt 'Deer': 103,
'Duck': 103,
'Eagle': 101,
'Elephant': 100,
'Lion': 102,
'Monkey': 100,
هنا يمكنك روؤية القيمة المتطرفة وهي فئة 'Nat': 8,
'Panda': 119,
Nature( Natاأو الطبيعة) ،وتحتوي على 'Pigeon': 115,
ثمانية عنا�سر فقط مقارنة بالفئات االأخرى. 'Rabbit': 100,
'Sheep': 100,
'Tiger': 114,
)}'Wolf': 100
حُتت�وي جمموع�ة البيان�ات عل�ى �س�ور حيوان�ات و�س�ور أاخ�رى م�ن الطبيعة؛ وذل�ك بهدف التعرّف عل�ى ال�سور التي ت�س�ذ عن �سور
احليوان�ات .يك�س�ف ( Counterالع�داد) ع�ن فئ�ة �سغ�رة جدًا عنوانها ( Natالطبيع�ة) ،وحُتتوي على ثماين �سور فقط ،وعندما
تقوم بك�سف �سريع يت�سح لك اأن هذه الفئة ذات قيم متطرفة ( )Outlierحُتتوي على �سور ملناظر طبيعية وال يوجد بها اأي وجه
الأي حيوان.
يق�وم املقط�ع الربجم�ي الت�ايل باإزال�ة �سورة RGBAو�سورة الت�درج الرمادي ،وكذلك كل ال�سور التي تنتمي لفئة ( Natالطبيعة)
من قوائم اأ�سماء امللفات ،والعناوين ،وال�سور التي غُ ّر حجمها.
)N = len(labels
203
تتم ّث��ل اخلط��وة التالي��ة يف حُتوي��ل ( resized_imagesال�س��ور _ املُع� َّدل حجمه��ا) وقوائ��م العناوي��ن اإىل م�سفوف��ات
أي�سا ( Numpyمنب��اي) ح�س��ب م��ا تتوقع��ه العدي��د م��ن خوارزمي��ات ر ؤوي��ة احلا�س��ب .ي�س� ِ
�تخدم املقط��ع الربجمي الت��ايل ا ً
املوجه:
املتغرات ( )X، Yالتي تُ�س��تخدم يف العادة لتمثيل البيانات والعناوين على التوايل يف مهام التعلُّم َّ ِّ
import numpy as np
)X = np.array(resized_images
)Y = np.array(labels
X.shape
يو�س��ح �س��كل جمموع��ة بيان��ات Xالنهائي��ة ا�س��تمالها عل��ى األ��ف و�س��بعمئة وع�س��رين �س��ورة بتن�س��يق ،RGBبن��ا ًء عل��ى عدد
ِّ
القنوات ،وجميعها باأبعاد ( 100 × 100اأي ع�س��رة اآالف بك�س��ل) .اأخرًا ،مُيكن ا�س��تخدام دالة ()train_test_split
من مكتبة sklearnلتق�سيم جمموعة البيانات اإىل جمموعة تدريب وجمموعة اختبار.
نظرًا الأن جملدات �سور احليوانات حُ مّلت جملّدً ا تلو االآخر ،فاإن ال�سور من كل جملد جُ معت معًا يف القوائم ال�س��ابقة،
وقد يوؤدي ذلك اإىل ت�سليل العديد من اخلوارزميات ،خا�سة يف جمال روؤية احلا�سب ،و�سبط ( shuffle=Trueتفعيل
اإعادة الرتتيب) يف املقطع الربجمي ال�س��ابق يحل هذه امل�س��كلة ،وبوجه عام ،من اجليد اإعادة ترتيب البيانات ع�س��وائيًا
قبل اإجراء اأي حُتليل.
التنبو بدون هند�سة اخل�سائ�ض re iction without Feature Engineering
عل��ى الرغ��م م��ن اأن اخلط��وات املتَّبع��ة يف الق�س��م ال�س��ابق ق��د ح َّول��ت البيان��ات اإىل تن�س��يق رقم��ي ،اإال اأن��ه لي���س بالتن�س��يق
القيا�س��ي اأح��ادي ال ُبع��د ال��ذي تتوقع��ه العدي��د م��ن خوارزمي��ات تعلُّم االآلة .على �س��بيل املثال ،و�سفتْ الوح��دة الثالثة كيف
يج��ب حُتوي��ل كل م�س��تند اإىل متَّجَ ��ه رقم��ي اأح��ادي ال ُبع��د قبل ا�س��تخدام البيانات يف تدريب مناذج تعلُّ��م االآلة واختبارها،
بينما حُتتوي كل نقطة بيانات يف جمموعة البيانات املرئية هنا على تن�سيق ثالثي االأبعاد.
X_train[0].shape
204
ف��كل �س��ورة،) كل �س��ورة يف متَّجَ ��ه أاح��ادي ال ُبع��دFlatten( لذل��ك مُيك��ن ا�س��تخدام املقط��ع الربجم��ي الت��ايل لت�س��طيح
. قيمة30,000 = 100 × 100 × 3 االآن ممثَّلة كمتَّجَ ه رقمي م�سطح قيمته
X_train_flat = np.array([img.flatten() for img in X_train])
X_test_flat = np.array([img.flatten() for img in X_test])
X_train_flat[0].shape
(30000,)
مُيكن ا�س��تخدام هذا التن�س��يق امل�س��طح مع اأي خوارزمية ت�سنيف قيا�س��ية دون بذل اأي جهد اإ�سايف لهند�س��ة خ�سائ�س
وي�س��تخدم املقط��ع الربجم��ي،�يو�سح الق�س��م الت��ايل مث� ً�اال عل��ى هند�س��ة اخل�سائ���س لبيان��ات �س��ورة
ِّ � و�س،تنبوؤي��ة اأخ��رى
أي�س��ا لت�سني��ف البيان��ات الن�س َّي��ة يف الوح��دة
ً ) ال��ذي ا�س �تُخدم اNaive Bayes - NB( الت��ايل مُ�س ِّن��ف باي��ز ال�س��اذج
:الثالثة
model_MNB = MultinomialNB()
model_MNB.fit(X_train_flat,y_train) # fits the model on the flat training data
MultinomialNB()
pred = model_MNB.predict(X_test_flat) # gets the predictions for the flat test set
accuracy_score(y_test,pred)
0.36046511627906974
:)اخلا�سة بالنتائج الإعطاء روؤية اإ�سافيةConfusion Matrix( يعر�س املقطع الربجمي التايل م�سفوفة الدقة
%%capture
!pip install scikit-plot
import scikitplot
205
ت�ساعد القيم الم�سوّاة
()Normalized Values
على روؤية العنا�سر على
هيئة ن�سب مئوية.
)(model_sgd = SGDClassifier
)model_sgd.fit(X_train_flat, y_train
)pred=model_sgd.predict(X_test_flat
)accuracy_score(y_test,pred
0.46511627906976744
ي�ستخدِ م املقطع الربجمي التايل اأداة ( StandardScalerاملُحجِّ م القيا�سي) من مكتبة sklearnلتحجيم البيانات:
)(scaler = StandardScaler
)X_train_flat_scaled = scaler.fit_transform(X_train_flat
)X_test_flat_scaled = scaler.fit_transform(X_test_flat
مُيكن االآن تدريب منوذج جديد واختباره با�ستخدام جمموعات البيانات التي مت حُتجيمها:
حُت�س��ن بع��د التحجي��م ،وم��ن املحتم��ل اأن يح��دث حُت�س��ني اإ�س��ايف بوا�س��طة جتري��ب خوارزمي��ات
ت��دل النتائ��ج عل��ى وج��ود ُّ
متغراتها حتّى تتنا�سب مع جمموعة البيانات ب�سكل اأف�سل. اأخرى و�سبط ِّ
207
التنبو بانتقاء اخل�سائ�ض re iction with Feature Se ection
ر َّك��ز الق�س��م ال�س��ابق عل��ى تدري��ب النم��اذج ع��ن طري��ق ت�س��طيح البيان��ات ،يف ح��ني �س��ي�سف ه��ذا الق�س��م كيفية حُتويل
البيان ��ات االأ�سلي ��ة لهند�س ��ة اخل�سائ� ��س الذكي ��ة
املخططات التكرارية للتدرجات املوجَّ هة الت��ي تلتق��ط ال�سف��ات الرئي�س��ة لبيان��ات ال�س��ورة،
(:)Histogram of Oriented Gradients -HOG يو�س ��ح الق�س ��م تقني ��ة
وعل ��ى و ج ��ه التحد ي ��د ِّ
املوجه��ة بتق�س��يم هة املوجَّ للتدرجات التكراري �سائعة ت�سمى املخطط
تق��وم املخطط��ات التكراري��ة للتدرج��ات َّ
ال�س��ورة اإىل اأق�س��ام �سغ��رة وحُت ِّل��ل توزي��ع تغ��رات الكثافة (.)Histogram of Oriented Gradients -HOG
حُتدد وتفهم �سكل الكائن يف ال�سورة. يف كل ق�سم حتّى ِّ تتم ّث ��ل اخلط ��وة االأوىل يف هند�س ��ة املخطط ��ات
املوجه ��ة يف حُتوي ��ل ال�س ��ور
التكراري ��ة للتدرج ��ات َّ
م ��ن تن�س ��يق RGBاإىل �س ��ور ذات ت ��درج رم ��ادي ،ومُيك ��ن القي ��ام بذل ��ك با�س ��تخدام الدال ��ة () rgb2grayم ��ن مكتب ��ة
:sckit-image
from skimage.color import rgb2gray # used to convert a multi-color (rgb) image to grayscale
# converts the training data
)]X_train_gray = np.array([rgb2gray(img) for img in X_train
# converts the testing data
)]X_test_gray = np.array([rgb2gray(img) for img in X_test
;)'plt.imshow(X_train_gray[0],cmap='gray ;)]plt.imshow(X_train[0
)print(X_train_gray[0].shape
)print(X_train[0].shape
)(100, 100
)(100, 100, 3
208
تتمثّل اخلطوة التالية يف اإن�ساء خ�سائ�س املخطط التكراري للتدرجات املوجَّ هة لكل �سورة يف البيانات ،ومُيكن حُتقيق
مثاال على ال�س��ورة االأوىل يف
ويو�س��ح املقط��ع الربجم��ي التايل ً
ذل��ك م��ن خ��الل دال��ة () hogم��ن مكتب��ة ِّ ،sckit-image
جمموعة بيانات التدريب:
)(8100,
ي�س� ِّور ه��ذا التمثي��ل اجلدي��د ح��دود االأ�س��كال االأ�سا�س��ية يف ال�س��ورة ،ويح��ذف التفا�سي��ل االأخ��رى و ُير ِّك��ز عل��ى ا أالج��زاء
املفي��دة الت��ي مُيكنه��ا اأن ت�س��اعد املُ�س ِّن��ف عل��ى اأن يق��وم بالتنب�وؤ ،ويط ِّب��ق املقط��ع الربجم��ي الت��ايل ه��ذا التغي��ر عل��ى كل
ال�سور يف كل من جمموعة التدريب وجمموعة االختبار:
0.7418604651162791
209
scikitplot.metrics.plot_confusion_matrix(y_test, # actual labels
pred, # predicted labels
title = "Confusion Matrix", # title to use
cmap = "Purples", # color palette to use
figsize = (10,10), # figure size
x_tick_rotation = 90
;)
حُت�س��ن هائ��ل يف الدق��ة الت��ي قف��زت لت�س��ل اإىل اأك��ر م��ن ،70 %وجت��اوزت بكث��ر الدق��ة تك�س��ف النتائ��ج اجلدي��دة ع��ن ُّ
أي�س��ا يف
التح�س��ن ا ً
ُّ �ح
�س ويت� �س،
� � للخ�سائ �ة
� س هند� أي ا� ب �ام
� ي الق دون �طحة
� س امل� �ات
� ن البيا الت��ي حققه��ا املُ�س ِّن��ف نف�س��ه عل��ى
ويو�س��ح ذل��ك اأهمي��ة
م�سفوف��ة الدق��ة املُح َّدث��ة الت��ي ت�س��مل ع��ددًا اأق��ل م��ن االأخط��اء (التنب�وؤات االإيجابي��ة اخلاطئ��ة)ِّ ،
ا�ستخدام تقنيات روؤية احلا�سب لهند�سة خ�سائ�س ذكية تلتقط ال�سفات املرئية املُختلفة للبيانات.
210
التنبو با�ستخدام ال�سبكات الع�سبية re iction Using Neural Networks
يو�س��ح ه��ذا الق�س��م كيفي��ة ا�س��تخدام ال�س��بكات الع�سبي��ة لت�سميم مُ�س ِّنف��ات خم�س�سة لبيانات ال�س��ور ،وكيف مُيكنها ِّ
يف كث��ر م��ن االأحي��ان اأن تتف�وّق عل��ى التقني��ات عالي��ة الفعالي��ة مث��ل :عملي��ة املخط��ط التك��راري للتدرج��ات املوجَّ ه��ة الت��ي
ُو�سفت يف الق�سم ال�سابق ،و ُت�ستخدم مكتبة TensorFlowومكتبة Kerasال�سهرتان لهذا الغر�س.
مكتب��ة tensorflowه��ي مكتب��ة منخف�س��ة امل�س��توى تُو ِّف��ر جمموع��ة وا�س��عة م��ن اأدوات تعلُّ��م االآل��ة وال��ذكاء اال�سطناعي،
�تخدمني بتعري��ف احل�س��ابات العددي��ة الت��ي تت�سم��ن م َّتجَ ه��ات متع��ددة االأبع��اد( )Tensorsومعاجلته��ا، وت�س��مح للم�س� ِ
وه��ي م�سفوف��ات متع��ددة االأبع��اد م��ن البيانات.م��ن ناحي��ة أاخ��رىُ ،تع� ُّد مكتب��ة Kerasذات م�س��توى اأعل��ى وتُو ِّف��ر واجه��ة
اأب�س ��ط لبن ��اء النم ��اذج وتدريبه ��ا ،وه ��ي مبني ��ة با�س ��تخدام مكتب ��ة ( TensorFlowاأو مكتب ��ات خلفي ��ة اأخ ��رى) و ُتو ِّف ��ر
و�سممت مكتبة جمموعة من الطبقات والنماذج املع َّرفة م�س��بقًا والتي مُيكن جتميعها ب�س��هولة لبناء منوذج تعلُّم عميقُ .
�تخدم و�س��هلة اال�س��تخدام؛ مم��ا يجعلها خيارًا رائجً ا للممار�س��ني. Kerasلتك��ون �سديق��ة للم�س� ِ
دوال التن�س��يط ( )Activation Functionsه��ي دوال ريا�سي��ة تُطَ َّب��ق عل��ى ُخم َرج��ات كل خلي��ة ع�سبي��ة يف ال�س��بكة
الع�سبية،كم��ا تتمي��ز باأنه��ا ت�سي��ف خ�سائ� َ��س غ��ر خطي��ة ( )Non-linearللنم��وذج وت�س��مح لل�س��بكة بتعلُّ��م االأمن��اط
املعق��دة يف البيان��ات ،و ُيع� ُّد اختي��ار دال��ة التن�س��يط اأم�رًا مه ًم��ا ومُيك��ن اأن يوؤث��ر عل��ى اأداء ال�س��بكة ،حي��ث تتلق��ى اخلالي��ا
املُخ َرج دالة التن�سيط متغرات الع�سبي ��ة املُدخَ ��الت وتعاجله ��ا م ��ن خ ��الل
متغري التح ُّيز دخالت
املُ َ
االأوزان متغ��رات االأوزان والتح ُّي��زات وتنت��ج ُخم َرجات
بن��اء عل��ى دال��ة التن�س��يط كم��ا يظهر يف ال�س��كل
x1 .4.12تُن�س��اأ ال�س ��بكات الع�سبي ��ة م ��ن خ ��الل
x2 رب ��ط العدي ��د م ��ن اخلالي ��ا الع�سبي ��ة م ًع ��ا يف
طبق��ات ،و ُت��د َّرب عل��ى �سب��ط متغ��رات االأوزان
والتح ُّيزات وحُت�سني اأدائها مبرور الوقت.
xn
�سكل :4.12دالة التن�سيط
يُث ِّب��ت املقط��ع الرب جم��ي الت��ايل مكتب��ة
%%capture
!pip install tensorflow tensorflowومكتبة :keras
!pip install keras
يف الوح��دة ال�س��ابقة ،تع ّرف��ت عل��ى اخلالي��ا الع�سبي��ة اال�سطناعي��ة وعل��ى معماري��ات ال�س��بكات الع�سبي��ة ،وعل��ى وج��ه
التحدي��د تع ّرف��ت عل��ى من��وذج الكلم��ة اإىل امل َّتجَ ��ه ( )Word2Vecال��ذي َي�س��تخدم طبق��ة خمفي��ة وطبق��ة ُخم َرج��ات؛
ليتنب�اأ ب�س��ياق الكلم��ات لكلم��ة ُمعط��اة يف جمل��ة .وبع��د ذل��ك تُ�س��تخدم مكتب��ة Kerasالإن�س��اء معماري��ة ع�سبي��ة م�س��ابهة
لل�سور .ا ًأوالُ :حُت َّول العناوين يف y_trainاإىل تن�سيق اأعداد �سحيحة ،طبقًا ملتطلبات مكتبة .keras
# gets the set of all distinct labels
))classes=list(set(y_train
)print(classes
)(print
# replaces each label with an integer (its index in the classes lists) for both the training and testing data
)]y_train_num = np.array([classes.index(label) for label in y_train
)]y_test_num = np.array([classes.index(label) for label in y_test
)(print
# example:
print(y_train[:5]) # first 5 labels
print(y_train_num[:5]) # first 5 labels in integer format
211
['Elephant', 'Duck', 'Monkey', 'Cow', 'Sheep', 'Wolf', 'Tiger', 'Deer',
]''Cat', 'Lion', 'Rabbit', 'Panda', 'Pigeon', 'Chicken', 'Eagle', 'Bear
ومُيكن االآن ا�ستخدام اأداة ( Sequentialالتتابع) من مكتبة Kerasلبناء �سبكة ع�سبية يف �سكل طبقات متتابعة.
from keras.models import Sequential # used to build neural networks as sequences of layers
# every neuron in a dense layer is connected to every other neuron in the previous layer.
from keras.layers import Dense
"Model: "sequential
_________________________________________________________________
)Layer (type Output Shape Param #
=================================================================
)dense (Dense )(None, 200 1620200
=================================================================
Total params: 1,623,416
Trainable params: 1,623,416
Non-trainable params: 0
_________________________________________________________________
للمتغرات التي يجب اأن يتعلّمها النم��وذج من خالل �سبطها على بيانات ِّ يك�س��ف ملخ���س النم��وذج ع��ن الع��دد االإجم��ايل
دخ��ل ،وه��ي اأبع��اد �س��ور املخط��ط التك��راري ُدخ��الت حُتت��وي عل��ى ثماني��ة اآالف ومئ��ة (ُ )8,100م َ التدري��ب ،ومب��ا اأن امل َ
املوجه��ة X_train_hogوحُتت��وي الطبق��ة املخفي��ة عل��ى مئت��ي خلي��ة ع�سبي��ة ،وه��ي طبق��ة كثيف��ة مت�سل��ة للتدرج��ات َّ
(متغراتها). ِّ أوزانها ا مُّ ل تع يجب موزونة و�سلة 1,620,000 = 200 × 8,100 املجموع إن ا ف ،كامال
ً ات�ساال
ً باملُدخَ الت
مت��ت اإ�ساف��ة مئت��ي متغ� ِّ�ر حت ُّي��ز ( )Biasاإ�س��ايف ،بواق��ع متغ� ِّ�ر ل��كل خلي��ة ع�سبي��ة يف الطبق��ة املخفي��ة ،ومتغ� ِّ�ر التح ُّي��ز
دخالت كل خلية ع�سبية يف ال�س��بكة الع�سبية ،و ُت�س��تخدم لتوجيه دالة تن�س��يط اخلاليا الع�سبية هو قيمة ُت�ساف اإىل ُم َ
اإىل اجلان��ب ال�س��لبي اأو االإيجاب��ي ،مم��ا ي�س��مح لل�س��بكة بنمذج��ة عالق��ات اأك��ر تعقي��دً ا ب��ني بيان��ات املُدخَ ��الت وعناوي��ن
املُخرَجات.
212
ومبا اأن طبقة املُخرَجات حُتتوي على �ستّ ع�سرة خلية ع�سبية مت�سلة بالكامل مبئتي خلية ع�سبية موجودة يف الطبقة
املخفي��ة ،ف�اإن جمم��وع الو�س��الت املوزون��ة يبل��غ .3,216 = 200 × 16و ُي�س��اف �س��تة ع�س��ر متغ� ِّ�ر حُت ُّي��ز اإ�س��ايف ،بواق��ع
متغر واحد لكل خلية ع�سبية يف طبقة املُخرَجات ،و ُي�ستخدم ال�سطر الربجمي التايل لتجميع ( )Compileالنموذج: ِّ
# compiling the model
= model.compile(loss = 'sparse_categorical_crossentropy', metrics
)'['accuracy'], optimizer = 'adam
تُ�س��تخدم دال��ة اإع��داد النم��وذج الذك��ي يف مكتب��ة Kerasواملعروف��ة بالتجمي��ع (() )model.compileيف عملي��ة
حُتدي��د اخل�سائ���س االأ�سا�س��ية للنم��وذج الذك��ي واإع��داده للتدري��ب والتحق��ق والتنب�وؤ ،وتتخ��ذ ثالثة مُعامِ الت رئي�س��ة كما
مو�سح يف اجلدول .4.2هو َّ
ه��ي الدال��ة الت��ي تُ�س��تخدم لتقيي��م اخلط�اأ يف النم��وذج اأثن��اء التدري��ب ،وتقي���س م��دى تطاب��ق
تنب�وؤات النم��وذج م��ع العناوي��ن احلقيقي��ة ملجموع��ة معيّنة من بيانات املُدخَ ��الت .الهدف من
التدريب تقليل دالة اخل�سارة مما يت�سمن يف العادة تعديل اأوزان النموذج ومقدار التح ُّيز، اخل�سارة
ويف ه��ذه احلال��ة تك��ون دال��ة اخل�س��ارة ه��ي sparse_categorical_crossentropy :وهي ()loss
متعددة الفئات؛ حيث تكون العناوين اأعدادًا �سحيحة دالة خ�سارة منا�سبة ملهام الت�سنيف ِّ
كما يف .y_train_num
ه��ي قائم��ة املقايي���س امل�س��تخدَ مة لتقيي��م النم��وذج اأثن��اء التدري��ب واالختب��ارُ ،وحُت�س��ب ه��ذه
املقايي���س با�س��تخدام ُخم َرج��ات النم��وذج والعناوي��ن احلقيقي��ة ،ومُيك��ن ا�س��تخدامها ملراقبة املقايي�س
اأداء النم��وذج وحُتدي��د املج��االت الت��ي مُيك��ن حُت�س��ينه فيه��ا .مقيا���س الدق��ة ()Accuracy ()metrics
هو مقيا�س �سائع ملهام الت�سنيف يقي�س ن�سبة التنبوؤات ال�سحيحة التي قام بها النموذج.
ه��و خوارزمي��ة التح�س��ني الت��ي تُ�س��تخدم يف �سب��ط اأوزان النم��وذج ومق��دار التح ُّي��ز اأثن��اء
املح�سن دالة اخل�سارة واملقايي�س الإر�ساد عملية التدريب ،ويقوم ب�سبط التدريب .وي�ستخدم ِّ
متغ� ِّ�رات النم��وذج يف حُماول��ة لتقلي��ل اخل�س��ارة وزي��ادة اأداء النم��وذج اإىل احل��د االأق�س��ى. امل ُح�سِّ ن
()optimizer
ويف ه��ذه احلال��ة فق��د مت ا�س��تخدام املُح�سِّ ��ن ،adamال��ذي ُيع� ُّد خوارزمي��ة �س��ائعة لتدري��ب
ال�سبكات الع�سبية.
213
Epoch 1/40
17/17 ]==============================[ - 1s 16ms/step - loss: 2.2260 - accuracy: 0.3333
Epoch 2/40
17/17 ]==============================[ - 0s 15ms/step - loss: 1.1182 - accuracy: 0.7256
Epoch 3/40
17/17 ]==============================[ - 0s 15ms/step - loss: 0.7198 - accuracy: 0.8155
Epoch 4/40
17/17 ]==============================[ - 0s 15ms/step - loss: 0.4978 - accuracy: 0.9031
Epoch 5/40
17/17 ]==============================[ - 0s 16ms/step - loss: 0.3676 - accuracy: 0.9388
...
Epoch 36/40
17/17 ]==============================[ - 0s 15ms/step - loss: 0.0085 - accuracy: 1.0000
Epoch 37/40
17/17 ]==============================[ - 0s 21ms/step - loss: 0.0080 - accuracy: 1.0000
Epoch 38/40
17/17 ]==============================[ - 0s 15ms/step - loss: 0.0076 - accuracy: 1.0000
Epoch 39/40
17/17 ]==============================[ - 0s 15ms/step - loss: 0.0073 - accuracy: 1.0000
Epoch 40/40
17/17 ]==============================[ - 0s 15ms/step - loss: 0.0071 - accuracy: 1.0000
تُ�س��تخدم دال��ة () fitلتدري��ب من��وذج عل��ى جمموع��ة مع ّين��ة م��ن بيان��ات االإدخ��ال والعناوي��ن ،وتتخ��ذ اأرب��ع مُعامِ ��الت
مو�سح يف اجلدول .4.3 رئي�سة ،كما هو َّ
هو مُعامِ ل بيانات االإدخال امل�ستخدَ مة لتدريب النموذج ،وتتكون من البيانات املحوَّلة
أي�س��ا لتدري��ب
املوجه��ة الت��ي ا�س�تُخدمت ا ً
ع��ن طري��ق املخط��ط التك��راري للتدرج��ات َّ X_train_hog
اأحدث اإ�سدار من خوارزمية SGDClassifierيف الق�سم ال�سابق.
هو مُعامِ ل يت�سمّن عنوانًا لكل �سورة بتن�سيق اأعداد �سحيحة. y_train_num
ه��و ع��دد العين��ات الت��ي مت��ت معاجلته��ا يف كل دُفع��ة اأثن��اء التدري��ب ،ويق��وم النم��وذج
بتحدي��ث اأوزان��ه ومق��دار التح ُّي��ز بع��د كل ُدفع��ة ،ومُيك��ن اأن يوؤث��ر حج��م ال ُدفع��ة عل��ى
�س��رعة عملي��ة التدري��ب ،وا�س��تقراراها ،كم��ا مُيك��ن اأن ت�وؤدي اأحج��ام ال ُدفع��ات االأكرب batch_size
اإىل تدريب اأ�س��رع ،ولكنها قد تكون اأكر تكلفة من الناحية احل�س��ابية وقد توؤدي اإىل
تدرجات اأقل ا�ستقرارًا.
هو عدد املرات التي يتكرر فيها تدريب النموذج با�ستخدام جمموعة البيانات باأكملها،
وتتك�ون الف�رتة ( )epochم�ن م�رور واح�د ع�رب جمموع�ة البيان�ات باأكمله�ا .ويقوم
النموذج بتحديث اأوزانه ومقدار التح ُّيز بعد كل دورة ،كما مُيكن اأن يوؤثر عدد الفرتات epochs
متغر مهم
على قدرة النموذج على التعلُّم والتعميم على البيانات اجلديدة ،والفرتة ِّ
يجب اختياره بعناية ،ويف هذه احلالة ُيد َّرب النموذج على اأربعني دورة.
214
ومُيكن االآن ا�ستخدام منوذج التدريب للتنبوؤ بعناوين ال�سور يف جمموعة االختبار.
)pred = model.predict(X_test_hog
pred[0] # prints the predictions for the first image
1
Duck
0.7529021558872305
حُتق��ق ه��ذه ال�س��بكة الع�سبي��ة الب�س��يطة دق��ة تبل��غ ح��وايل ،75%وه��ي دق��ة م�س��ابهة لدق��ة ،SGDClassifierولك��ن
ميزة املعماريات الع�سبية تنبع من براعتها ،وهو ما ي�سمح لك بتجربة معماريات ُخمتلفة للعثور على اأف�سل ما ينا�سب
جمموع��ة بيانات��ك .مت حُتقي��ق ه��ذه الدق��ة م��ن خ��الل معماري��ة ب�س��يطة ت�سمن��ت طبق��ة خمفي��ة واح��دة حُتت��وي عل��ى مئتي
خلية ع�سبية ،واإ�سافة طبقات اإ�سافية جتعل ال�سبكة اأعمق ،بينما توؤدي اإ�سافة املزيد من اخلاليا الع�سبية لكل طبقة
اإىل جعلها اأو�سع ،و ُيع ُّد اختيار عدد الطبقات وعدد اخلاليا الع�سبية لكل طبقة عنا�سر مهمة لت�سميم ال�سبكة الع�سبية،
وله��ا تاأث��ر كب��ر عل��ى اأدائه��ا ،ولكنه��ا لي�س��ت الطريق��ة الوحي��دة لتح�س��ني االأداء ،ويف بع���س احل��االت ق��د يكون ا�س��تخدام
نوع ُخمتلف من معمارية ال�سبكة الع�سبية اأكر فاعلية.
التنبو با�ستخدام ال�سبكات الع�سبية الرت�سيحية
re iction Using on o ution Neural Networks
أاح��د ه��ذه االأن��واع م��ن املعماري��ات الت��ي تنا�س��ب ت�سني��ف ال�س��ور ب�س��كلٍ ج ّي��د يتم ّث��ل يف ال�س��بكة الع�سبي��ة الرت�س��يحية
( ،)Convolutional Neural Network -CNNومبا اأن ال�س��بكة الع�سبية الرت�س��يحية تعالج بيانات االإدخال ،فاإنها
املر�س� َ�حة الكت�س��اف االأمناط بنا ًء على البيانات التي تراها؛ حتّى تتمكن ب�س��كلمتغرات الفالتر َّ تقوم با�س��تمرار ب�سبط ِّ
اأف�س��ل م��ن اكت�س��اف اخل�سائ���س املهم��ة ،ث��م تنقل ُخم َرج��ات كل طبقة اإىل الطبقة التالية التي يُكت�س��ف فيها خ�سائ�س
تعقيدا اإىل اأن تُنتج املُخرَجات النهائية.
اأكر ً
215
عل��ى الرغ��م م��ن فوائ��د ال�س��بكات الع�سبي��ة املعق��دة مث��ل:
ال�سبكة الع�سبية الرت�سيحية ال�س��بكات الع�سبية الرت�س��يحية اإال اأنه من املهم مالحظة
(:) on o ution Neural Network -CNN ما يلي:
ه��ي �س��بكات ع�سبي��ة عميق��ة تتع ّل��م تلقائ ًي��ا ت�سل�س��ل • تكمن قوة ال�سبكات الع�سبية الرت�سيحية يف قدرتها على
اخل�سائ���س م��ن البيان��ات اخل��ام ،مث��ل ال�س��ور ،ع��ن اأن ت�ستخرج اخل�سائ�س املهمة ذات ال�سلة من ال�سور
طري��ق تطبي��ق �سل�س��لة م��ن الفالت��ر الرت�س��يحية عل��ى ب�س�كل تلقائ�ي ،دون احلاج�ة اإىل هند�س�ة اخل�سائ��س
بيان��ات االإدخ��ال ،الت��ي يت��م ت�سميمه��ا بحي��ث تكت�س��ف اليدوية (.)Manual Feature Engineering
خ�سائ�س حُم َّددة.
َ اأمناطً ا اأو • حُتت��وي املعماري��ات الع�سبية االأكر تعقيدً ا على املزيد
م��ن املتغ� ِّ�رات الت��ي يج��ب تعلُّمه��ا م��ن البيان��ات اأثن��اء
التدري��ب ،ويتطل��ب ذل��ك جمموع��ة بيان��ات تدري��ب اأك��رب ق��د ال تك��ون متاح��ة يف بع�س احل��االت ،ويف مثل ه��ذه احلاالت
من غر املحتمل اأن يكون اإن�ساء معمارية معقدة للغاية اأمرًا فع ًَّاال.
• عل��ى الرغ��م م��ن اأن ال�س��بكات الع�سبي��ة ق��د حقق��ت بالفع��ل نتائ��ج مبه��رة يف معاجل��ة ال�س��ور واملهام االأخ��رى ،اإال اأنها
ال ت�سمن تقدمي اأف�سل اأداء جلميع امل�سكالت وجمموعات البيانات.
• حتّى لو كانت معمارية ال�سبكة الع�سبية اأف�سل حل ممكن ملُهِ مَّة حُمددة ،فقد ي�ستغرق االأمر كثرًا من الوقت واجلهد
وامل��وارد احلا�س��وبية لتجرب��ة خي��ارات ُخمتلف��ة اإىل اأن يتم العث��ور على هذه املعمارية .لذلك من االأف�سل البدء بنماذج
اأب�سط (لكنها ال تزال فعّالة) ،مثل :منوذج SGDClassifierوغره من النماذج االأخرى الكثرة املتوفرة يف املكتبات
مث��ل :مكتب��ة ،sklearnومبج��رد ح�سول��ك عل��ى تن ُّب�وؤ اأف�س��ل ملجموع��ة البيان��ات وو�سول��ك اإىل النقط��ة الت��ي ال مُيك��ن
فيها حُت�سني هذه النماذج اأكر من ذلك ،فاإن التجريب على املعماريات الع�سبية االأخرى ُي ُّعد خطوة ممتازة.
معلومة
من املزايا االأ�سا�سية لل�سبكات الع�سبية الرت�سيحية اأنها جيدة جدًا يف التعلُّم من كميات كبرة
من البيانات ،ومُيكنها يف العادة اأن حتقق م�ستويات عليا يف دقة املهام مثل :ت�سنيف ال�سور
دون احلاجة اإىل هند�سة اخل�سائ�س اليدوية مثل :املخطط التكراري للتدرجات املوجَّ هة.
216
امل ُخرَجات ا�ستخراج اخل�سائ�س والتعلُّم امل ُدخَ الت
�سكل � :4.14سبكة ع�سبية تر�سيحية من دون هند�سة اخل�سائ�س اليدوية
اإحالل
التنبوؤ وتقييم تدريب حتميل ال�سبكة
ن�سر النتائج الطبقات
دقة ال�سبكة ال�سبكة املدرَّبة م�سبقًا
النهائية
217
مترينات
1ما حتديّات ت�سنيف البيانات املرئية؟
لدي��ك م�سفوفت��ا قي��م ،Numpyوهم��ا م�سفوف��ة X_trainوم�سفوف��ة .Y_trainكل �س��ف يف م�سفوف��ة X_train 2
�س��كله ( )100 ،100،3مُي ِّث��ل �س��ورة باأبع��اد 100x100وبتن�س��يق .RGBوال�س��ف nيف امل�سفوف��ة Y_trainمُي ِّث��ل
ت�س��مية �س��ورة nيف م�سفوف��ة .X_trainاأكم��ل املقط��ع الربجم��ي الت��ا ،بحي��ث يُ�س��طّ ح X_trainث��م ُي��درِّب النم��وذج
MultinomialNBعلى جمموعة البيانات هذ :
from sklearn.naive_bayes import MultinomialNB # imports the Naive Bayes Classifier from sklearn
�ِ 3سف باخت�سار طريقة عمل ال�سبكات الع�سبية الرت�سيحية واإحدى مميزاتها الرئي�سة.
218
X_train كل �س��ف يف م�سفوف��ة.Y_train وم�سفوف��ةX_train وهم��ا م�سفوف��ة،Numpy لدي��ك م�سفوفت��ا قي��م 4
مُي ِّث��لY_train يف امل�سفوف��ةn وال�س��ف.RGB وبتن�س��يق199x100 ) مُي ِّث��ل �س��ورة باأبع��اد100،100،3( �س��كله
بحي��ث يط ِّب��ق حتوي��الت املخط��ط التك��راري، اأكم��ل املقط��ع الربجم��ي الت��ا.X_train يف م�سفوف��ةn ت�س��مية �س��ورة
: للتدرجات املوجَّ هة ثم ي�ستخدم البيانات املحوّلة يف تدريب وذج
from sklearn.naive_bayes import MultinomialNB # imports the Naive Bayes Classifier from sklearn
X_train_hog =
scaler = StandardScaler()
X_train_hog_scaled = .fit_transform(X_train_hog)
model_MNB = MultinomialNB()
model_MNB.fit(X_train_flat_scaled, )
219
الدر�ض الثاين
املوجه لتحليل ال�سور
التع ُّلم غري َّ
50%
العنقود الثاين
90%
العنقود الثالث
40%
_ (جمل��دinput_folder (وج��وه _احليوان��ات) م��نLHI-Animal-Faces تق��راأ الدال��ة التالي��ة �س��ور جمموع��ة بيان��ات
ثم تقوم بتح�س��ني دالة، و ُتع� ِّ�دل حج��م كل منه��ا بحي��ث تك��ون له��ا اأبع��اد الط��ول والعر�س نف�س��ها،املُدخَ ��الت) اخلا���س به��ا
ِ � م��ن الدر���س ال�س��ابق بال�س��ماح للم�سresize_images)(
�تخدم ب�اأن يح� ِّ�دد قائم��ة فئ��ات احليوان��ات الت��ي يج��ب اأن توؤخذ
كم��ا اأنه��ا ت�س��تخدم �س��طرًا واح��دً ا م��ن املقط��ع الربجم��ي بلغ��ة البايث��ون؛ لك��ي تق��راأ كل �س��ورة وتع� ِّ�دل حجمه��ا،باالعتب��ار
:وتخزنها
ِّ
def resize_images_v2(input_folder:str,
width:int,
height:int,
labels_to_keep:list
):
labels = [] # a list with the label for each image
resized_images = [] # a list of resized images in np array format
filenames = [] # a list of the original image file names
print(subfolder)
path = input_folder + '/' + subfolder
return resized_images,labels,filenames
222
البيان��ات غ��ر امل ُنظّ م��ة ( )Unstructured Dataمتن ّوع��ة ،ومُيك��ن اأن حُتت��اج اإىل كث��ر م��ن الوقت واملوارد احلا�س��وبية،
و ُيع� ُّد ه��ذا �سحي ًح��ا ب�س��كلٍ خا���س عن��د معاجلته��ا ع��ن طري��ق اأ�س��اليب تعلُّ��م عميق��ة ومعق��دة ،كم��ا �س� ُينفذ الح ًق��ا يف ه��ذا
الدر���س ،ولتقلي��ل الوق��ت احل�س��ابي يت��م تطبي��ق دال��ة () resize_images_v2عل��ى جمموع��ة فرعي��ة م��ن ال�س��ور م��ن
فئات احليوانات:
(resized_images,labels,filenames=resize_images_v2
"AnimalFace/Image",
width = 224,
height = 224,
labels_to_keep=['Lion', 'Chicken', 'Duck', 'Rabbit', 'Deer',
]''Cat', 'Wolf', 'Bear', 'Pigeon', 'Eagle
)
BearHead MonkeyHead
CatHead Natural هذه العناوين الع�سرة
ChickenHead PandaHead التي �سيتم ا�ستخدامها.
CowHead PigeonHead
DeerHead RabbitHead
DuckHead SheepHead
EagleHead TigerHead
ElephantHead WolfHead
LionHead
مُيكن��ك ب�س��هولة تعدي��ل املتغ� ِّ�ر ( labels_to_keepالعناوي��ن _ املحتف��ظ به��ا)؛ للرتكي��ز عل��ى فئ��ات معيّنة ،و�س��تالحظ
�دال م��ن ال�س��كل 100 × 100ال��ذي ا�س�تُخدم يف الدر���س اأن عر���س ال�س��ور وارتفاعه��ا مت �سبطهم��ا عل��ى ،224 × 224ب� ً
ال�س��ابق؛ الأن اإح��دى طرائ��ق التجمي��ع القائم��ة عل��ى التعلُّم العميق -الواردة يف هذا الدر���س -تتطلب اأن تكون لل�سور هذه
االأبعاد ،ولذا اعتُمد ال�سكل 224 × 224؛ ل�سمان منح حق الو�سول جلميع الطرائق اإىل املُدخَ الت نف�سها.
كم��ا ذُ كِ ��ر يف الدر���س ال�س��ابق ف �اإن القوائ��م االأ�سلي��ة( resized_images :ال�س��ور _املُع � َّدل حجمه��ا) ،وlabels
(العناوي��ن) ،و( filenamesاأ�س��ماء امللف��ات) ت�س��تمل عل��ى ال�س��ور الت��ي تنتم��ي ل��كل فئ��ة ُجم َّمعة معًا .على �س��بيل املثال،
تظه��ر جمي��ع �س��ور ( Lionاالأ�س��د) م ًع��ا يف بداي��ة القائم��ة املُع� َّدل حجمه��ا ،وق��د يُ�س ِل��ل ذل��ك العدي��د م��ن اخلوارزمي��ات،
خا�س��ة يف جم��ال ر ؤوي��ة احلا�س��ب ،وطامل��ا اأن��ه مُيك��ن فهر�س��ة ال�س��ور ع�س��وائيًا ل��كل قائمة م��ن القوائم الث��الث ،فمن املهم
التاأكد من ا�ستخدام الرتتيب الع�سوائي نف�سه لهذه القوائم .وبخالف ذلك ،من امل�ستحيل العثور على العنوان ال�سحيح
ل�سورة مع ّينة اأو ا�سم امللف ال�سحيح لها.
يف الدر���س ال�س��ابق ،مت اإج��راء اإع��ادة الرتتي��ب ( )Shufflingبا�س��تخدام الدال��ة () ، train_test_splitومب��ا اأن ه��ذه
الدالة غر قابلة للتطبيق على مهام التجميع ،ف�ست�ستخدم املقطع الربجمي التايل الإعادة الرتتيب:
import random
#connects the three lists together, so that they are shuffled in the same order
))connected = list(zip(resized_images,labels,filenames
)random.shuffle(connected
# disconnects the three lists
)resized_images,labels,filenames= zip(*connected
223
تتم ّث��ل اخلط��وة التالي��ة يف حُتوي��ل قائمت��ي ( resized_imagesال�س��ور _املُع�دَّل حجمه��ا) ،و( labelsالعناوي��ن) اإىل
م�سفوف��ات ،numpyوكم��ا ه��و احل��ال يف الدر���س ال�س��ابق ُي�س��تخدم اال�س��مان املتغ� ِّ�ران القيا�س��يان ( )X،Yلتمثي��ل
البيانات والعناوين:
X.shape
يتحق��ق �س��كل البيان��ات م��ن اأنه��ا ت�س��مل � 1,085س��ورة ،كل �س��ورة منه��ا ذات اأبع��اد ،224 × 224وذات ث��الث قن��وات
األوان .RGB
ميع من دون هند�سة اخل�سائ�ض Clustering without Feature Engineering الت
�س��رتكز حُماول��ة التجمي��ع االأوىل عل��ى القي��ام بت�س��طيح ال�س��ور؛ لتحوي��ل كل منه��ا اإىل م َّتجَ ��ه اأح��ادي ال ُبع��د اأرقام��ه
150,528 = 3 × 224 × 224رقمًا.
وعل��ى غ��رار خوارزمي��ات الت�سني��ف الت��ي مت تو�سيحها يف الدر���س ال�س��ابق ،ف�اإن معظم خوارزمي��ات التجميع تتطلب هذا
النوع من التن�سيق امل َّتجَ هي.
)]X_flat = np.array([img.flatten() for img in X
X_flat[0].shape
)(150528,
كل قيم��ة عددي��ة يف ه��ذا التن�س��يق امل�س��طح ذات قيم��ة األ��وان RGBت��رتاوح ب��ني 0و ،255ويف الدر���س ال�س��ابقّ ،مت
تو�سيح اأن التحجيم القيا�سي والت�سوية يوؤديان اأحيانًا اإىل حُت�سني نتائج بع�س خوارزميات التعلُّم االآيل.
مُيكن ا�ستخدام املقطع الربجمي التايل لت�سوية القيم وجعلها ما بني 0و:1
X_norm = X_flat / 255
]X_norm[0
224
مُيك��ن االآن ت�سوي��ر البيان��ات ب�سر ًي��ا با�س��تخدام اأداة TSNEVisualizerاملاألوف��ة م��ن مكتب��ة ،yellowbrickومت
أي�سا يف الدر�س الثاين من الوحدة الثالثة؛ لت�سوير العناقيد ب�سريًا يف البيانات الن�سيَّة.
ا�ستخدام هذه االأداة ا ً
%%capture
!pip install yellowbrick
from yellowbrick.text import TSNEVisualizer
الت�سوي��ر التمهي��دي ه��ذا لي���س كم��ا ه��و متو َّق��ع ،فيبدو اأن فئ��ات احليوانات املُختلف��ة خمتلطة ببع�سه��ا ،دون متييز وا�سح
بينه��ا وب��دون عناقي��د وا�سح��ة له��ا ،وي��دل ذل��ك عل��ى اأن جم��رد القي��ام بت�س��طيح بيانات ال�س��ورة االأ�سلية م��ن املحتمل اأال
يوؤدي اإىل نتائج ذات جودة عالية.
بع��د ذل��ك� ،ستُ�س��تخدم خوارزمي��ة التجمي��ع التكتل��ي ( )Agglomerative Clusteringنف�س��ها الت��ي ا�س �تُخدمت يف
الدر���س الث��اين م��ن الوح��دة الثالث��ة؛ لتجمي��ع البيان��ات يف متغ� ِّ�ر ،X_normوي�س��تورد املقط��ع الربجم��ي الت��ايل جمموعة
االأدوات املطلوبة ،وي�س ِّور الر�سم ال�سجري ملجموعة البيانات:
225
from sklearn.cluster import AgglomerativeClustering # used for agglomerative clustering
import scipy.cluster.hierarchy as hierarchy
# iteratively merges points and clusters until all points belong to a single cluster
linkage_flat = hierarchy.linkage(X_norm, method = 'ward')
hierarchy.dendrogram(linkage_flat) (وارد) عبارة عنward
plt.show() طريقة ربط تُ�ستخدم في
.التجميع التكتلي الهرمي
pred
Adjusted Rand و،) (االكتم��الCompleteness و،) (التجان���سHomogeneity : تُ�س��تخدم موؤ�س��رات،و أاخ �رًا
.(راند املُع َّدل) وكلها تع ّرفت عليها يف الدر�س الثاين من الوحدة الثالثة؛ لتقييم جودة العناقيد الناجتة
226
from sklearn.metrics import homogeneity_score, adjusted_rand_score,
completeness_score
كما �س��بق تو�سيحه بالتف�سيل يف الدر���س الثاين من الوحدة الثالثة ،فاإن موؤ�س��ري التجان���س واالكتمال ياأخذان قيمًا بني
0و ،1وترتفع قيمة موؤ�سر التجان�س اإىل اأق�سى حد عندما يكون جلميع نقاط العنقود الواحد العنوان احلقيقي االأ�سا�سي
نف�س��ه ،كم��ا ترتف��ع قيم��ة موؤ�س��ر االكتم��ال اإىل احل��د االأق�س��ى عندم��ا تنتم��ي جمي��ع نق��اط البيان��ات الت��ي حُتم��ل العن��وان
احلقيقي االأ�سا�س��ي نف�س��ه اإىل العنقود نف�س��ه ،واأخرًا ياأخذ موؤ�س��ر راند املُع َّدل قيمًا بني -0.5و ،1.0وترتفع اإىل احلد
االأق�سى عندما تكون جميع نقاط البيانات التي لها العنوان نف�سه يف العنقود نف�سه ،وتكون جميع النقاط ذات العناوين
املُختلفة يف عناقيد متباينة ،وكما هو متوقَّع تف�سل اخلوارزمية بعد ت�سوير البيانات يف العثور على عناقيد عالية اجلودة
تتطابق مع فئات احليوانات الفعلية ،حيث اأن قيم املوؤ�سرات الثالث منخف�سة للغاية ،وعلى الرغم من اأن جمرد القيام
بت�سطيح البيانات كان كافيًا للح�سول على نتائج معقولة لت�سنيف ال�سور ،اإال اأن جتميع ال�سور يف عناقيد ُمُيثِّل م�سكلة
اأكر �سعوبة.
ميع بانتقاء اخل�سائ�ض Clustering with Feature Se ection الت
يف الدر���س ال�س��ابق مت تو�سي��ح اأنّ ا�س��تخدام حُتوي��ل املخط��ط التك��راري للتدرج��ات املوجَّ ه��ة ( )HOGلتحوي��ل بيان��ات
ال�سور اإىل �سيغة اأكر داللة يوؤدي اإىل اإجناز اأعلى ب�سكل ملحوظ يف ت�سنيف ال�سور ،و�س ُيط َّبق التحويل نف�سه الختبار
أي�سا حُت�سني نتائج مهام جتميع ال�سور. ما اإذا كان باإمكانه ا ً
from skimage.color import rgb2gray
from skimage.feature import hog
# converts the list of resized images to an array of grayscale images
)]X_gray = np.array([rgb2gray(img) for img in resized_images
# computes the HOG features for each grayscale image in the array
)]X_hog = np.array([hog(img) for img in X_gray
X_hog.shape
)(1085, 54756
يك�س��ف �س��كل البيانات املحوَّلة اأن كل �سورة ُمتثَّل االآن على هيئة م َّتجَ ه بقيمة عددية هي :اأربعة وخم�س��ون األفًا و�س��بعمئة
و�ستة وخم�سون (.)54,756
ي�ستخدم املقطع الربجمي التايل اأداة TSNEVisualizerلت�سوير هذا التن�سيق اجلديد: ِ
)tsne = TSNEVisualizer(colors = color_palette
)tsne.fit(X_hog, y
;)(tsne.show
227
�سكل :4.20ت�سوير العناقيد
ُيع� ُّد ه��ذا الت�سوي��ر اأك��ر م�سداقي��ة م��ن ال��ذي مت اإنتاج��ه للبيانات غ��ر املح َّولة ،وعل��ى الرغم من وجود بع�س ال�س��وائب،
جيدا ،ومُيكن االآن ح�ساب الر�سم ال�سجري ملجموعة البيانات هذه. فاإن ال�سكل ُيظهر عناقيد وا�سحة ومف�سولة ً
)(plt.figure
)'linkage_2 = hierarchy.linkage(X_hog,method = 'ward
)hierarchy.dendrogram(linkage_2
)(plt.show
املوجهة ()HOG
�سكل :4.21الر�سم ال�سجري لفئات وجوه احليوانات املُختلفة با�ستخدام خمطط تكراري للتدرجات َّ
228
يق��رتح الر�ص��م ال�ص��جري خم�ص��ة عناقي��د ،وه��و بال�صب��ط ن�ص��ف الع��دد ال�صحي��ح البال��غ ع�ص��رة عناقي��د .يتبن��ى املقط��ع
الربجمي التايل هذا االقرتاح ويط ِّبق اأداة ( AgglomerativeClusteringالتجميع التكتلي) و ُيظهر نتائج املوؤ�ص��رات
الثالثة:
تك�ص��ف النتائ��ج أان��ه عل��ى الرغ��م م��ن اأن ع��دد العناقي��د الت��ي مت ا�ص��تخدامها كان اأق��ل بكث��ر م��ن الع��دد ال�صحي��ح ،اإال اأن
النتائج اأف�صل بكثر من النتائج التي ظهرت عند ا�صتخدام الرقم ال�صحيح على البيانات غر املح َّولة.
املوجهة ،ويُثبت اأنه ميكن اأن يوؤدي اإىل حت�ص��ينات ويو�صح ذلك ذكاء التحويل بوا�ص��طة املخطط التكراري للتدرجات َّ ِّ
املوج��ه يف روؤي��ة احلا�ص��ب ،والإكم��ال التحلي��ل ُيعي��د
املوج��ه ومه��ام التعلُّ��م غ��ر َّ
رائع��ة يف االأداء ل��كل م��ن مه��ام التعلُّ��م َّ
املقط��ع الربجم��ي الت��ايل جُتميع البيانات املح َّول��ة بالعدد ال�صحي��ح للعناقيد:
)AC = AgglomerativeClustering(linkage = 'ward', n_clusters = 10
)AC.fit(X_hog
_pred = AC.labels
وكما هو متوقَّع ،زادت قيم املوؤ�ص��رات ب�ص��كل عام ،فعلى �ص��بيل املثال جُتاوز كل من التجان���ص واالكتمال االآن ،0.55مما
ي��دل عل��ى اأن اخلوارزمي��ة تق��وم بعم��ل اأف�ص��ل فيم��ا يتعل��ق ب��كل م��ن :و�ص��ع احليوان��ات الت��ي تنتمي لفئ��ة واح��دة يف العنقود
نف�صه ،واإن�صاء عناقيد نقية ( )Pureتتكون يف الغالب من فئة احليوان نف�صِ ه.
229
ميع با�ستخدام ال�سبكات الع�سبية Clustering Using Neural Networks الت
أاح�دث ا�س�تخدام من�اذج التعلُّ�م العمي�ق (ال�س�بكات الع�سبي�ة العميق�ة ذات الطبقات املتعددة) ثورة يف جم�ال جتميع ال�سور من خالل
توفر خوارزميات قوية وعالية الدقة ،ومُيكنها جتميع ال�سور املت�سابهة معًا تلقائيًا دون احلاجة اإىل هند�سة اخل�سائ�س .تعتمد العديد
م�ن الطرائ�ق التقليدي�ة لتجمي�ع ال�س�ور عل�ى خا�سي�ة امل�س�تخرِجات ( )Extractorsال�س�تخراج معلوم�ات ذات مغ�زى م�ن �س�ورة م�ا،
طويال وتتطلب خربة يف املجال لت�سميم وا�ستخدام هذه املعلومات لتجميع ال�سور املت�سابهة معًا ،ومُيكن اأن ت�ستغرق هذه العملية وقتًا ً
خا�سي�ة امل�س�تخرِ جات بخ�سائ��س فعّال�ة .باالإ�ساف�ة اإىل ذل�ك -وكم�ا مت التو�سي�ح يف الدر��س ال�س�ابق -عل�ى الرغ�م م�ن اأن خا�سي�ة
الوا�سفات ( )Descriptorsمثل :حُتويل املخطط التكراري للتدرجات املوجَّ هة مُيكنها بالفعل حُت�سني النتائج ،اإال اأنها بعيدة كل ال ُبعد ِ
ع�ن الكم�ال ،وبالتاأكي�د يوج�د جم�ال للتح�س�ني .م�ن ناحي�ة اأخ�رى ،يتمت�ع التعلُّ�م العمي�ق بالق�درة عل�ى تعلُّ�م متثي�الت اخل�سائ��س م�ن
البيانات اخلام تلقائيًا ،ويتيح ذلك لطرائق التعلُّم العميق معرفة اخل�سائ�س �سديدة التمايز التي تلتقط االأمناط الهامة وراء البيانات،
مما يوؤدي اإىل جتميع اأكر دقة وقوة ،ولتحقيق ذلك تُ�ستخدم عدة طبقات ُخمتلفة يف ال�سبكة الع�سبية مبا فيها:
• الطبقات الكثيفة ()Dense Layers
• طبقات التجميع ()Pooling Layers
• طبقات االإق�ساء ()Dropout Layers
يف ال�سبكة الع�سبية يف الدر�س االأول من الوحدة الثالثة ،مت ا�ستخدام طبقة خمفية
الطبقة الكثيفة (:)Dense Layer مكون�ة م�ن ث�الث مئ�ة خلية ع�سبي�ة من من�وذج الكلم�ة اإىل امل َّتجَ �ه()Word2Vec؛
ه�ي طبق�ة يف ال�س�بكات الع�سبي�ة ترتب�ط لتمثيل كل كلمة ،ويف تلك احلالة ُد ِّرب منوذج الكلمة اإىل امل َّتجَ ه م�سبقًا على جمموعة
فيها كل ال ُعقد التي يف الطبقة ال�سابقة بكل بيانات كبرة جدًا حُتتوي على ماليني االأخبار من اأخبار قوقل (.)Google News
ال ُعق�د الت�ي يف الطبق�ة احلالي�ة ،حي�ث يتم أي�سا يف جمال روؤية احلا�س�ب، تُع ُّد مناذج ال�س�بكات الع�سبية املد َّربة م�س�بقًا �س�ائعة ا ً
متري�ر االإ�س�ارات م�ن ال ُعق�د يف الطبق�ة وم�ن االأمثل�ة املعه�ودة عل�ى ذل�ك من�وذج VGG16ال�ذي ي�س�يع ا�س�تخدامه يف مه�ام
ال�س�ابقة يف ال�س�بكة اإىل ال ُعق�د يف الطبق�ة التع�رّف عل�ى ال�س�ور ،ويتب�ع من�وذج VGG16معماري�ة عميق�ة قائمة على ال�س�بكات
احلالي�ة بوا�س�طة وزني�ة حُم� َّددة ،وتُط َّب�ق موج ًه�ا ُد ِّرب على
منوذجا َّ
ً الع�سبي�ة الرت�س�يحية يوج�د به�ا �س�ت ع�س�رة طبق�ة ،و ُيع� ُّد
دالَّة التن�سيط ()Activation Function جمموعة بيانات كبرة من ال�سور املُعَنوَنة ت�سمى �سبكة ال�سور( ،)ImageNetومع
املر�سلة اإىل الطبقة الكثيفةعلى االإ�سارات َ ذلك ،تتكون جمموعة بيانات التدريب اخلا�سة بنموذج VGG16من ماليني ال�سور
لتوليد نتائج االإخراج النهائية. يح�سن ب�سكل كبر من قدرة النموذج على فهم االأجزاء ومئات العناوين املُختلفة ،مما ِّ
املو�سحة
املُختلف�ة م�ن ال�س�ورة ،وعلى غرار ال�س�بكة الع�سبية الرت�س�يحية الب�س�يطة َّ
أي�س�ا طبق�ة كثيف�ة نهائية حُتتوي على �تخدم من�وذج VGG16ا ً يف ال�س�كل ،4.22وي�س ِ
طبقة الت ميع (:)Pooling Layer اأربعة اآالف و�ستة وت�سعني خلية ع�سبية لتمثيل كل �سورة قبل اإدخالها يف طبقة امل ُخرَج
ه��ي طبق��ة يف ال�س��بكات الع�سبي��ة ويو�سح هذا الق�سم كيف مُيكن تكييف منوذج VGG16لتجميع (ِّ ،)Output Layer
تُ�س��تخدم لتقلي��ل ا الأبع��اد الفراغي��ة ال�سور ،على الرغم من اأنه ُ�س ِّمم يف االأ�سل لت�سنيف ال�سور:
لبيانات املُدخَ الت. 1حمِّل النموذج VGG16الذي ُدرِّب م�سبقًا.
2احذف طبقة املُخرَج من النموذج ،فذلك يجعل الطبقة االأخرة الكثيفة هي طبقة
املُخرَج اجلديدة.
طبقة األإق�ساء (:)Dropout Layer
ه�ي طريق�ة تنظي�م تُ�س�تخدم ملن�ع ف�رط 3ا�س�تخدم النم�وذج املقتط�ع (- )Truncated Modelالنم�وذج ال�س�ابق ال�ذي
التخ�سي��س يف من�وذج ملجموعة بيانات يف اقتُطع�ت الطبق�ة ا أالخ�رة من�ه -؛ لتحوي�ل كل �س�ورة يف جمموع�ة بيان�ات
ال�س�بكات الع�سبية عن طريق اإق�ساء عُ قد و�ست وت�سعون
( Animal Facesوجوه احليوانات) اإىل م َّتجَ ه عددي له اأرب ُع اآالف ٌ
موجودة يف الطبقة خالل ك ّل دورة تدريب. قيمة.
4ا�ستخدم التجميع التكتلي ؛ لتجميع امل َّتجَ هات الناجتة عن ذلك.
230
Conv 1-1
Conv 1-1
Conv 2-1
Conv 2-2
Conv 3-1
Conv 3-2
Conv 3-3
Conv 4-1
Conv 4-2
Conv 4-3
Conv 5-1
Conv 5-2
Conv 5-3
Pooling
Pooling
Pooling
Pooling
Pooling
Dense
Dense
Dense
امل ُدخَ ل امل ُخرَج
يط ِّبق املقطع الربجمي التايل املعاجلة االأولية االأ�صا�ص��ية نف�ص��ها التي يتطلبها منوذج VGG16مثل :حتجيم قيم األوان
RGBلتكون بني 0و.1
from keras.applications.vgg16 import preprocess_input )(1085, 224, 224, 3
)X_prep = preprocess_input(X
X_prep.shape
الح��ظ اأن �ص��كل البيان��ات يظ��ل كم��ا ه��و ،اأي :األ��فٌ وخم�� ٌ�ص وثمان��ون �ص��ورة ،كل �ص��ورة منها اأبعاده��ا ،224 × 224وثالث
قنوات األوان ،RGBوبعد ذلك ميكن ا�صتخدام النموذج املقتطع لتحويل كل �صورة اإىل م َّتجه مكّون من 4,096عدد.
)(1085, 4096
ُي�صب��ط متغ� ِّ�ر املعاجل��ة املتع��ددة ( multiprocessing=Trueتفعي��ل املعاجل��ة املتع��ددة) لت�ص��ريع العملي��ة م��ن خ��الل
ح�ص��اب امل َّتجَ ه��ات لل�ص��ور املتع��ددة بالت��وازي ،وقب��ل اإكم��ال خط��وة التجمي��ع ُي�ص��تخدم املقط��ع الربجم��ي الت��ايل لت�صوي��ر
البيانات املتّجِ هة(:)vectorized data
231
�صكل :4.23ت�صوير العناقيد املت�صابهه
تُع ُّدالنتائج مذهلة؛ الأن الت�صوير اجلديد يك�صف عناقيد مف�صولة عن بع�صها بو�صوح وتكاد تكون كاملة ،كما اأن الف�صل
املوجهة.
هنا اأف�صل بكثر من الف�صل الذي كان يف البيانات التي ُح ِّولت بوا�صطة املخطط التكراري للتدرجات َّ
)'linkage_3 = hierarchy.linkage(X_VGG16, method = 'ward
)(plt.figure
)hierarchy.dendrogram(linkage_3
)(plt.show
�صكل :4.24الر�صم ال�صجري الهرمي لفئات وجوه احليوانات املُختلفة با�صتخدام منوذج VGG16
يق��رتح الر�ص��م ال�ص��جري اأربع��ة عناقي��د ،ويف ه��ذه احلال��ة ميك��ن للممار���ص اأن يتجاهل االقرتاح ب�ص��هولة ،وي ّتب��ع الت�صوير
يبني بو�صوح وجود ع�صرة عناقيد. بدال منه والذي ّ ال�صابق ً
232
ويو�صح قيم املوؤ�صرات لكل من العناقيد االأربعة والعناقيد الع�صرة:
ي�صتخدِ م املقطع الربجمي التايل التجميع التكتلي ِّ
)AC = AgglomerativeClustering(linkage = 'ward',n_clusters = 4
)AC.fit(X_VGG16
_pred=AC.labels
تثب��ت النتائ��ج �صح��ة االأدل��ة الت��ي قدمه��ا الت�صوي��ر ،وت�وؤدي التح��والت الت��ي اأنتجه��ا من��وذج VGG16اإىل نتائ��ج مذهل��ة
اإىل حد كبر لكل من العناقيد االأربعة والعناقيد الع�صرة .يف الواقع ،ظهرت نتائج �صبه مثالية جلميع املوؤ�صرات الثالثة
عند ا�صتخدام ع�صرة عناقيد ،مما يثبت اأن النتائج غالبًا تتوافق متامً ا مع فئات احليوانات يف جمموعة البيانات.
ُيع� ُّد من��وذج VGG16م��ن اأق��دم مناذج ال�ص��بكات الع�صبية الرت�ص��يحية عالية الذكاء املد َّربة م�ص��بقًا لغر�ص ا�ص��تخدامها
يف تطبيقات روؤية احلا�ص��ب ،ومع ذلك نُ�ص��رت العديد من مناذج ال�ص��بكات الع�صبية الرت�ص��يحية الذكية االأخرى املد َّربة
م�صبقًا والتي جُتاوز اأداوؤها اأداء منوذج .VGG16
233
مترينات
1اذكر امليزة التي تتمتع بها تقنيات التعلُّم غر املوجَّ ه مقارنة بتقنيات التعلُّم املوجَّ ه يف حتليل ال�صور.
2لدي��ك م�صفوف��ة قي��م موح��دة X_flatت�ص��مل �ص��ورًا مُ�ص��طحة� ،كل �ص��ف يف امل�صفوف��ة مي ِّث��ل �ص��ورة م�ص��طحة ُخُمتلف��ة
عل��ى هيئ��ة متتالي��ة م��ن اآلأع��داد ال�صحيح��ة ت��را�ح ب��ني .255� 0اأكم��ل املقط��ع الربجم��ي الت��ايل ،بحي��ث ي�ص��تخدِ م
التجميع التكتلي يف ت�صنيف ال�صور التي من X_flatاإىل خم�صة عناقيد ُخُمتلفة:
3عدِّد بع�ش مزايا ا�صتخدام التعلُّم العميق التي ميتاز بها على طرائق جتميع ال�صور التقليدية.
234
4لدي��ك م�صفوف��ة قي��م موح��دة X_flatت�ص��مل �ص��ورًا م�ص��طحة� ،كل �ص��ف يف امل�صفوف��ة مي ِّث��ل �ص��ورة م�ص��طحة ُخُمتلف��ة
عل��ى هيئ��ة متتالي��ة م��ن اآلأع��داد ال�صحيحةت��را�ح ب��ني .255� 0اأكم��ل املقط��ع الربجم��ي الت��ايل ،بحي��ث ي�ص��تخدم
طريقة �ارد ( )wardآلإن�صاء �ت�صوير ر�صم �صجري لل�صور يف هذه امل�صفوفة:
import scipy.cluster.hierarchy as hierarchy # visualizes and supports hierarchical clustering tasks
hierarchy. )(linkage_flat
�ِ 5صف الطريقة التي يُطبَّق بها التجميع بال�صبكات الع�صبية يف حتليل ال�صور.
235
الدر�ص الثالث
توليد البيانات املرئية
ا�س��تخدام ال��ذكاء األ�سطناع��ي يف تولي��د
ال�سور Using AI to Generate Images
بينم��ا رك��زت خوارزمي��ات روؤي��ة احلا�ص��ب الت��ي مت تو�صيحه��ا يف الدر�ص��ني
ال�ص��ابقني م��ن ه��ذه الوح��دة عل��ى فه��م اجلوان��ب املُختلف��ة ل�ص��ورة مع ّين��ة،
ُير ّك��ز جم��ال تولي��د ال�ص��ور ( )Image Generationيف ه��ذا الدر���ص
على اإن�صاء �صور جديدة .فمجال توليد ال�صور ()Image Generation
ل��ه تاري��خ طوي��ل يع��ود اإىل اخلم�ص��ينيات وال�ص��تينيات من القرن الع�ص��رين،
عندم��ا ب��داأ الباحث��ون الأول م��رة يف اإج��راء جُت��ارب عل��ى مع��ادالت ريا�صي��ة
الإن�ص��اء ال�ص��ور ،ويف ع�صرن��ا احل��ايل من��ا ه��ذا املج��ال لي�ص��مل جمموع��ة
وا�ص��عة م��ن التقني��اتُ .يع� ُّد ا�ص��تخدام الفراكت��الت ( )Fractalsمن اأقدم
واأ�صهر تقنيات اإن�صاء ال�صور ،والفراكتل هو �صكل اأو منط هند�صي م�صابه
لذاته ،مما يعني اأنه يبدو مت�ص��ابهًا عند تكبره مبقايي���ص ُخُمتلفة ،واأ�ص��هر
�صكل :4.25فراكتال ماندلربوت
املو�صح
فراكت��ل ه��و ال��ذي ي�صم جمموعة ماندل��رب�ت (َّ )Mandelbrot
يف ال�صكل .4.25
يف اأواخر القرن الع�صرين ،بداأ الباحثون يف ا�صتك�صاف اأ�صاليب اأكر تقدمً ا لتوليد ال�صور مثل ال�صبكات الع�صبية.
ن�ش ( )Text-to-Image Synthesisمن اأكر التقنيات �ص��يوعً ا الإن�ص��اء ال�صور با�ص��تخدام ال�ص��بكات الع�صبية، ُيع ُّد اإن�ص��اء �صورة من ّ
وتت�صم��ن ه��ذه التقني��ة تدري��ب �ص��بكة ع�صبي��ة عل��ى تولي��د �ص��ور م��ن اأو�صاف ن�ص َّي��ة ،فتُد َّرب ال�ص��بكة الع�صبية على جمموع��ة بيانات من
ال�ص��ور واالأو�ص��اف الن�ص َّي��ة املرتبط��ة به��ا .وتتعلّم ال�ص��بكة ربط كلمات اأو عبارات معيّنة بخ�صائ�ص معيّنة لل�صورة مثل� :ص��كل العن�صر
اأو لون��ه ،ومبج��رد اأن ُت��د َّرب ال�ص��بكة ي�صب��ح م��ن املمك��ن ا�ص��تخدامها يف اإن�ص��اء �ص��ور جدي��دة بن��ا ًء عل��ى االأو�ص��اف ال��واردة يف الن���ص،
وتُ�صتخدم هذه التقنية يف اإن�صاء جمموعة وا�صعة من ال�صور ترتاوح ما بني العنا�صر الب�صيطة اإىل امل�صاهد املعقدة.
وهن��اك تقني��ة اأخ��رى لتولي��د ال�ص��ورة تتم ّث��ل يف اإن�ص��اء �ص��ورة م��ن �ص��ورة ( ،)Image-to-Image Synthesisوتت�صم��ن ه��ذه التقني��ة
تدري��ب �ص��بكة ع�صبي��ة عل��ى جمموع��ة بيان��ات م��ن ال�ص��ور؛ لتتع ّل��م التع�رّف عل��ى اخل�صائ�ص الفري��دة لل�ص��ورة حتّى تولّد �ص��ورًا جديدة
م�ص��ابهة لل�ص��ورة املوج��ودة ،ولك��ن م��ع وج��ود اختالف��ات .يف االآون��ة ا أالخ��رة ا�صتك�ص��ف الباحث��ون اإن�ص��اء �ص��ورة م��ن �ص��ورة باآل�صر�ص��اد
بن�� ّ�ش ( ،)Text-Guided Image-to-Image Synthesisمم��ا يجم��ع ب��ني نق��اط الق��وة يف طرائ��ق اإن�ص��اء �ص��ورة م��ن ن� ّ��ص ،وطرائ��ق
اإن�ص��اء �ص��ورة م��ن �ص��ورة م��ن خ��الل ال�ص��ماح للم�ص��تخدِ م بتوجي��ه عملي��ة االإن�ص��اء با�ص��تخدام توجيه��ات ن�ص َّي��ة (،)Text Prompts
وتُ�ص��تخدم ه��ذه التقني��ة يف تولي��د �ص��ور عالي��ة اجل��ودة تتواف��ق م��ع التوجي��ه الن�ص� ّ�ي ،وتك��ون يف الوق��ت ذات��ه م�ص��ابهة ب�صر ًي��ا لل�ص��ورة
الطبيعية.
و اأ خ � ًر ا ،هن��اك تقني��ة اأ خ��رى م��ن اأ ح��دث التقني��ات يف ه��ذا املج��ال تتم ّث��ل يف ر�ص��م �ص��ورة باآل�صر�ص��اد بن�� ّ�ش
( ،)Text-Guided Image-Inpaintingويُر ِّك��ز عل��ى م��لء االأج��زاء املفق��ودة اأو التالف��ة م��ن ال�ص��ورة بن��ا ًء عل��ى و�ص��ف ن�ص��يٍّ مع��ني،
ويقدِّ م الو�صف الن�صيّ معلومات عن ال�ص��كل الذي يجب اأن تبدو عليه االأجزاء املفقودة اأو التالفة من ال�صورة ،والهدف من خوارزمية
الر�ص��م ه��ذه اأن تُ�ص��تخدم املعلوم��ات؛ الإن�ص��اء �ص��ورة واقعي��ة ومرتابط��ة .يق��دم ه��ذا الدر���ص اأمثل��ة عملي��ة عل��ى تولي��د ال�ص��ور م��ن خ��الل:
بن�ص ،ور�صم �صور باال�صرت�صاد بن�ص. ن�ص ،واإن�صاء �صورة من �صورة باال�صرت�صاد ّ اإن�صاء �صورة من ّ
236
توليد ال�سور واملوارد احلا�سوبية
Image Generation and Computational Resources
وحدة معاجلة الر�سومات اإن�ص��اء ال�صور م ُِه َّمة مكلِّفة من الناحية احلا�ص��وبيّة؛ الأنها تت�صمن ا�ص��تخدام
(:)Graphics Processing Unit - GPU خوارزمي��ات معق��دة تتطل��ب ق��درات عالي��ة م��ن ق��وة املعاجل��ة ،وع��اد ًة تت�صم��ن
املعاجلات م�صمَّم
هي نوع خا�ص من اأنواع ِ ه��ذه اخلوارزمي��ات معاجل��ة كمي��ات كب��رة م��ن البيان��ات مث��ل :من��اذج ثالثي��ة
للتعامل مع كميات كبرة من العمليات احل�صابية أي�صا اإىل زيادة
االأبع��اد ،والنقو���ص ،ومعلوم��ات االإ�صاءة ،مما ميك��ن اأن يوؤدي ا ً
املطلوبة ملعاجلة ال�صور والفيديوهات. املتطلب��ات احلا�ص��وبية للمُهِ َّم��ةُ .يع� ُّد ا�ص��تخدام �ح��دات معاجل��ة الر�ص��ومات
( )Graphics Processing Units - GPUsاأح��د التقني��ات الرئي�ص��ة الت��ي
تُ�ص��تخدم لت�ص��ريع تولي��د ال�ص��ور .وعل��ى عك���ص �ح��دة املعاجل��ة املركزي��ة
( )Central Processing Unit - CPUالتقليدي��ة املُ�ص َّمم��ة للتعام��ل م��ع جمموع��ة وا�ص��عة م��ن امله��ام ،مت حت�ص��ني وح��دة معاجل��ة
الر�ص��ومات حتّى تتنا�ص��ب مع اأنواع العمليات احل�ص��ابية املطلوبة ملعاجلة ال�صور واملهام االأخرى املتعلقة بالر�ص��ومات ،مما يجعلها اأكر
كفاءة يف التعامل مع كميات كبرة من البيانات واإجراء عمليات ح�صابية معقدة ،و ُيع ُّد هذا �صببًا يف ا�صتخدامها عادة يف توليد ال�صور
يو�ص��ح ه��ذا الدر���ص كي��ف ميكن��ك ا�ص��تخدام من�ص��ة قوق��ل ك��وآلب ( )Google Colabال�ص��هرة وامله��ام االأخ��رى املك ِّلف��ة حا�ص��وبيًّاِّ .
للو�ص��ول اإىل بُني��ة حتتي��ة قوي��ة قائم��ة عل��ى وح��دة معاجل��ة الر�ص��ومات دون اأي تكلفة ،وذلك با�ص��تخدام ح�ص��اب عادي عل��ى قوقل ،وقوقل
ك��والب ه��و من�ص��ة جماني��ة تعتم��د عل��ى التقني��ة ال�ص��حابية ،وتتيح للم�ص� ِ
�تخدمني كتاب��ة املقاطع الربجمي��ة ،وتنفيذها ،و إاج��راء التجارب،
وتدريب النماذج يف بيئة مفكرة جوبير (.)Jupyter Notebook
للو�سول اإىل من�سة قوقل كوألب:
اذهب اإىل.https://colab.research.google.com :
1
1 2
3
4 5
4 ميكنك االآن كتابة مقطعك الربجمي بلغة البايثون داخل خلية املقطع الربجمي،
ثم �صغِّله من خالل ال�صغط على الزر املوجود بجانبه5 .
1
4
5
2
3
بالعامَل) التقليدي:
تعمل بيئة قوقل كوالب ب�صكل م�صابه لعمل مفكرة جوبيرت ،وفيما يلي جُتد مثال ( Hello Worldمرحبًا َ
خوارزميات توليد ال�صور ()Image Generation
التي ��صفناها يف هذا الف�صل م�صممة بطريقة جتعلها
اإبداعيًة �بالتايل فهي لي�صت ثابتة ،مما يعني اأنه من
غر امل�صمون اأن تقوم دائما بتوليد ال�صورة نف�صها
للمدخالت نف�صها� .عليه ،فاإن ال�صور املو َّلدَة املدرجة
يف هذا الف�صل جمرد اأمثلة على ال�صور التي ميكن
توليدها با�صتخدام املقطع الربجمي.
�صكل :4.27ا�صتخدام مفكرة البايثون
239
حقَّق ك ٌّل من منوذج ال�ص��بكة التوليدية التناف�ص��ية ومنوذج االنت�ص��ار امل�ص��تقر نتائج مبهرة يف جمال توليد ال�صور ،ويُركِّز
اجلزء املتبقي من هذا الدر�ص على تقدمي اأمثلة عملية بلغة البايثون على النهج القائم على اآلنت�صار ()Diffusion-Based
وال��ذي ُيع� ُّد حال ًي��ا أاح��دث م��ا تو�صل��ت اإلي��ه التقني��ة .كم��ا مت التو�صي��ح م��ن قبلُ ،يع� ُّد توليد ال�ص��ور مُهِ مَّة مكلِّفة حا�ص��وبيًّا،
ولذل��ك نو�صي��ك ب�ص��دة ب�اأن تطب��ق جمي��ع اأمثل��ة البايث��ون عل��ى نظ��ام قوق��ل ك��والب االأ�صا�ص��ي اأو اأي بني��ة اأ�صا�ص��ية ُخُمتلف��ة
تدعمها وحدة معاجلة ر�صومات يكون لديك حق الو�صول اإليها.
�تخدم ه��ذا الف�ص��ل مكتب��ة diffusersالت��ي تُع ُّد حال ًي��ا اأف�صل مكتبة مفتوحة امل�صدر للنماذج القائمة على االنت�ص��ار، ي�ص� ِ
ويقوم املقطع الربجمي التايل بتثبيت املكتبة ،وكذلك بع�ص املكتبات االإ�صافية املطلوبة:
%%capture
!pip install diffusers
!pip install transformers
!pip install accelerate
معلومة
معمارية اأجهزة احلا�صب املوحد ()Compute Unified Device Architecture - CUDA
هي من�صة حو�صبة موازية تتيح ا�صتخدام �حدات معاجلة الر�صومات (.)GPUs
�صكل � :4.29صورة مولَّدة الأ�صد اأبي�ص يف الغابة
240
ي�صيف التوجيه ( )promptالتايل بُعدً ا اإ�صافيًّا لعملية التوليد ،اإذ يطلب اأن يُر�صم اأ�صد اأبي�ص بطريقة بابلو بيكا�صو
( ،)Pablo Picassoوهو من اأ�صهر الر�صامني يف القرن الع�صرين.
image = generator("A painting of a white lion in the style of Picasso.").
]images[0
;)plt.imshow(image
# pipeline used for image to image generation with stable diffusion
from diffusers import StableDiffusionImg2ImgPipeline
# loads a pretrained generator model
generator = StableDiffusionImg2ImgPipeline.from_pretrained("runwayml/stable-
)"diffusion-v1-5
# moves the generator model to the GPU (CUDA) for faster processing
)"generator.to("cuda
)"init_image = Image.open("landscape.jpg
init_image.thumbnail((768, 768)) # resizes the image to prepare it as input of the model
;)plt.imshow(init_image
241
ِ
ي�صتخدم النموذج املثال املوجود يف ال�صكل 1.30
املدرَّب م�صبقًا stable-diffusion-v1-4املنا�صب
لتوليد �صورة من �صورة من خالل التوجيه الن�صي.
image = generator(prompt=prompt,
image = init_image, strength=0.75).
]images[0
;)plt.imshow(image
243
بن�ص Text-Guided Image-Inpainting
ر�سم �سورة باأل�سرت�ساد ّ
الن�صي باأجزاء
ّ يُركِّز املثال التايل على ا�صتخدام منوذج االنت�صار امل�صتقر ال�صتبدال �صكل ب�صري جديد ي�صفه التوجيه
حم��ددة م��ن �ص��ورة مع ّين��ة ،و ُي�ص��تخدم له��ذا الغر���ص النم��وذج امل��د َّرب م�ص��بقًا ( stable-diffusion-inpaintingر�ص��م
-االنت�ص��ار -امل�ص��تقر)،ويقوم املقط��ع الربجم��ي الت��ايل بتحمي��ل �ص��ورة قطّ ��ة عل��ى مقع��د ،وهن��اك قن��اع ( )Maskيع��زل
االأجزاء املحددة من ال�صورة التي تغطيها القطّ ة:
# tool used for text-guided image in-painting
from diffusers import StableDiffusionInpaintPipeline
))init_image = Image.open("cat_on_bench.png").resize((512, 512
;)plt.imshow(init_image
))mask_image = Image.open("cat_mask.jpg").resize((512, 512
;)plt.imshow(mask_image
القناع ()Maskهو �صورة ب�صيطة باالأبي�ص واالأ�صود لها نف�ص اأبعاد ال�صورة االأ�صلية بال�صبط ،واالأجزاء التي ا�صتُبدلت
يف ال�صورة اجلديدة ُمتيز باللون االأبي�ص ،يف حني اأن االأجزاء االأخرى من القناع �صوداء .بعد ذلك ،يتم حتميل النموذج
امل��درَّب م�ص��بقًا ،ويت��م اإن�ص��اء ( promptالتوجي��ه) لك��ي تو�ص��ع �ص��ورة رائ��د الف�ص��اء م��كان القط��ة الت��ي يف ال�ص��ورة
االأ�صلية ،كما يظهر يف ال�صكل .4.38
generator = StableDiffusionInpaintPipeline.from_pretrained("runwayml/stable-
)"diffusion-inpainting
)"generator = generator.to("cuda
244
جنح��ت ال�ص��ورة اجلدي��دة يف اأن تظه��ر �ص��ورة واقعي��ة للغاي��ة
لرائد الف�صاء الذي و�صعته مكان القطة التي كانت يف ال�صورة
االأ�صلية ،كما ميتزج هذا ال�ص��كل الب�صري ب�صال�ص��ة مع عنا�صر
اخللفية واالإ�صاءة يف ال�صورة.
يف الواق��ع ،ح ّت��ى ل��و كان القن��اع اأب�ص��ط واأق��ل دق��ة ،ميك��ن اإنت��اج
بديل واقعي .الحظ �صورة املُدخَ ل والقناع التاليني:
يف ه��ذا املث��ال ،يغط��ي القن��اع جه��از احلا�ص��ب املحم��ول املوج��ود يف و�ص��ط ال�ص��ورة ،ث��م يُ�ص��تخدم ( promptالتوجي��ه)
التايل واملقطع الربجمي ليتم و�صع �صورة الكتاب مكان جهاز احلا�صب املحمول املوجود يف ال�صورة االأ�صلية:
"prompt = "A photo of a book
image = generator(prompt=prompt, image=init_image, mask_image=mask_image).
]images[0
;)plt.imshow(image
246
�ِ 3صف املولِّد �املميِّز يف ال�صبكة التوليدية التناف�صية.
4ا�ص��تخدم اأداة DiffusionPipelineم��ن مكتب��ة diffusersآلإن�ص��اء �ص��ورة حليوان��ك املف�ص��ل �ه��و ي �اأكل طعام��ك
املف�صل .ميكنك ا�صتخدام من�صة قوقل كوآلب يف هذه امل ُ ِهمَّة.
247
الم�سروع
ال ت�ص��تجيب كل جمموع��ة بيان��ات بالطريقة نف�ص��ها للتدريب ب��كل خوارزميات الت�صنيف،
ولكي حت�صل على اأف�صل النتائج ملجموعة بياناتك عليك اأن جُت ِّرب ا�صتخدام خوارزميات
ُخُمتلف��ة ،و ُتق��دم ل��ك مكتب��ة Sklearnيف البايث��ون جمموع��ة متن ّوع��ة م��ن اخلوارزمي��ات
التي ميكنك جُتريبها ،مبا فيها اخلوارزميات التالية:
من sklearn.ensemble.forestا�صتورد خوارزمية .RandomForestClassifier
من sklearn.naive_bayesا�صتورد خوارزمية .GaussianNB
من sklearn.svmا�صتورد خوارزمية .SVC
ا�ص� ِ
�تخدم جمموع��ة تدري��ب وج��وه احليوانات لتدريب من��وذج يحقق اأكرب دقة ممكنة على 1
جمموعة االختبار.
ا�ص� ِ 2
�تبدل خوارزمي��ة SGDClassifierب��كل م��ن اخلوارزمي��ات املذك��ورة أاع��اله
حتدد اأف�صلها.
( )RandomForestClassifier، GaussianNB، SVCوحاول اأن ِّ
3
ا ِأعد ت�صغيل مفكرتك بعد كل عملية ا�صتبدال حل�صاب دقة كل منوذج جديد جُت ِّربه.
4
وحدد النموذج الذي حقق اأف�صل دقة.
اأن�صئ تقريرًا يقارن دقة كل النماذج التي جرّبتَها ِّ
248
ماذا تع ّلمت
امل�سطلحات الرئي�سة
249
.5خوارزميات التح�س
واتخاذ القرار
�س��يتعرّ ف الطال��ب يف ه��ذه الوح��دة على عدة خوارزمي��ات وتقنيات ت�س��اعده يف اإيجاد اأك
احللول كفاءة مل�س��كالت التح�س� املعقدة ،كما �س��يتعلّم طريقة عمل خوارزميات التح�س� ،
وخوارزمي��ات اتخ��اذ الق��رار ،وطريق��ة تطبيقه��ا حل��لّ م�س��كالت متعلق��ة بالع��ا الواقع��ي
ترتب بتخ�سي�ص املوارد واجلدولة وحت�س امل�سارات.
اأهداف التعلُّم
بنهاية هذه الوحدة �سيكون الطالب قادرًا على اأن:
يُ�سنّف طرائق التح�س ملعاجلة م�سكالت معقدة.
ي�سف خوارزميات اتخاذ القرار املُختلفة.
ِ
ي�ستخدم البايثون حللّ م�سكالت تخ�سي�ص املوارد املتعلقة بفِر العمل.
يحلّ م�سكالت اجلدولة با�ستخدام خوارزميات التح�س .
ي�ستخدم البايثون حللّ م�سكالت اجلدولة.
ة الريا سية حللّ م�سكالت التح�س . ي�ستخدم ال
يُعرّ ف م�سكلة حقيبة ال هر (.)Knapsack problem
يُعرّ ف م�سكلة البائع املُتجوّل (.)Traveling Salesman problem
األأدوات
مفكّرة جوبيرت ()Jupyter Notebook
250
الدر�ص األأول
م�سكلة تخ�سي�ص املوارد
على �صبيل املثال ،تخيل �صيناريو ب�صيطً ا يوجد فيه خم�صة عمال:
العامل اخلام�ش العامل الرابع العامل الثالث العامل الثاين العامل اآلأ�ل
املهارات :م ،2م4 املهارات :م ،1م ،2م3 املهارات :م ،2م3 املهارات :م ،1م ،3م6
املهارات :م5
القوة املُفرطة (:)Brute-force تتطل�ب امل ُِه َّم�ة امل�راد اإجنازه�ا كل امله�ارات :م ،1م ،2م ،3م ،4م ،5م.6
هي طريقة من طرائق ح ّل امل�صكالت تت�صمن يتمثّ�ل احل� ّل القائ�م عل�ى الق�وة امل ُفرط�ة ( )Brute Forceيف اأخ�ذ كل
التجري�ب املنهج�ي جلمي�ع احلل�ول املمكن�ة فِ�رق العمّ�ال املُمكن�ة يف االعتب�ار ،والرتكي�ز عل�ى ال ِف�رق الت�ي تتوفّر فيها
للم�ص�كلة به�دف الو�ص�ول اإىل احل� ّل االأمث�ل، جمي�ع امله�ارات املطلوبة ،واختيار الفري�ق االأقل عددًا ،وعلى افرتا�ص اأن
بغ�ص النظر عن التكلفة احلا�صوبية.ّ كل فريق يتكون من �ص�خ�ص واحد على االأقل ،فيُمكنك اأن تُ�ص�كِّل واحدًا
وثالثني فريقًا خُمتلفًا يتكون كل منهم من خم�صة ع ّمال.
العدد اآلإجمايل للفِرق بالن�صبة للفريق املُكوَّن من عامل واحد ،هناك خم�ص طرائق الختيار عامل واحد من بني العمّال اخلم�صة. •
امل ُختلفة التي ُميكنك بالن�صبة للفريق املُكوَّن من عاملني اثنني ،هناك ع�صر طرائق الختيار عاملني من بني الع ّمال اخلم�صة. •
تكوينها هو: بالن�صبة للفريق املُكوَّن من ثالثة ع ّمال ،هناك ع�صر طرائق الختيار ثالثة ع ّمال من بني الع ّمال اخلم�صة. •
،5 10 10 5 1 31
�ميكن ح�صاب العدد ُ بالن�صبة للفريق املُكوَّن من اأربعة ع ّمال ،هناك خم�ص طرائق الختيار اأربعة ع ّمال من بني العمّال اخلم�صة. •
أي�صا �فقًا للمعادلة:
ا ً بالن�صبة للفريق املُكوَّن من خم�صة ع ّمال ،هناك طريقة واحدة الختيار كل الع ّمال اخلم�صة. •
.25 - 1
يك�ص��ف تقيي��م كل ال ِف��رق االإح��دى والثالثني عن اأف�صل ح ّل ممكن
يتم ّث��ل يف تكوي��ن فري��ق ي�ص��مل الع ّم��ال:االأول والراب��ع واخلام���ص،
و�ص��يغطي ه��ذا الفري��ق كل امله��ارات ال�ص��ت املطلوب��ة ،و�صي�ص��مل
الفري��ق ثالث��ة ع ّم��ال ،وال ُميك��ن تغطي��ة كل املهارات بفريق ي�ص��تمل
العامل اخلام�ش العامل الرابع العامل اآلأ�ل عل��ى ع��دد ع ّم��ال اأق��ل م��ن ذل��ك ،مم��ا يجع��ل ه��ذا احل� ّل ه��و احل� ّل
املهارات :م5 املهارات :م ،2م4 املهارات :م ،1م ،3م6
اآلأمثل (.)Optimal Solution
وهناك ح ّل اآخر يتمثّل يف تكوين فريق ي�ص�مل العمّال:
االأول والثاين والثالث واخلام�ص ،وعلى الرغم من اأن
هذا الفريق يغطي كل املهارات ال�ص�ت ،اإال اأنه يتطلب
العامل الثالث العامل اخلام�ش العامل الثاين العامل اآلأ�ل أي�صا ع ّم ًاال اأكر ،مما يجعل هذا احل ّل ممكنًا ،ولكنه ا ً
املهارات :م ،1م ،2م 3املهارات :م5 املهارات :م ،1م ،3م 6املهارات :م ،2م3 لي�ص احل ّل االأمثل.
253
اخلا�ص��ة باأ�ص��لوب الق��وة املُفرط��ة ت�صم��ن دائ ًم��ا اإيج��اد احل� ّل االأمث��ل ،مت��ى اأمك��ن ذلك ،ولك��نّ فح�ص كل ال ِف��رق املُمكنة
ّ الطبيع��ة
فمثال:
ُيع ُّد عملية مكلّفة حا�صوبيًاً ،
• اإذا كان لديك �صتة ع ّمال ،ف�صيكون عدد ال ِفرق املُمكنة.26 - 1 = 63 :
• اإذا كان لديك ع�صرة ع ّمال ،ف�صيكون عدد ال ِفرق املُمكنة.210 – 1 = 1,023 :
عامال ،ف�صيكون عدد ال ِفرق املُمكنة.215 – 1 = 32,767 : • اإذا كان لديك خم�صة ع�صر ً
عامال ،ف�صيكون عدد ال ِفرق املُمكنة.2 – 1 = 1,048,575 :
20
• اإذا كان لديك ع�صرون ً
عامال ،ف�صيكون عدد ال ِفرق املُمكنة.2 – 1 = 1,125,899,906,842,623 :
50
• اإذا كان لديك خم�صون ً
من الوا�صح يف مثل هذه املواقف اأن ح�صر عدد ال ِفرق لكل احللول املُمكنة لي�ص
عامال،
حتى بالن�صبة لعدد معتدل من ً 50 خيارًا عمليًّا ،ولذلك مت اقرتاح طرائق حت�صني اأخرى ملعاجلة امل�صكالت املعقدة
فاإن عدد الفرق املحتملة يت�صخم اإىل اأك
من كوادريليون ( .)Quadrillion 10
15 ع�ن طري�ق البح�ث يف خي�ارات احلل�ول املُمكن�ة باأ�ص�لوب اأكر كفاءة من اأ�ص�لوب
القوة املُفرطةُ ،وميكن بوجه عام ت�صنيف هذه الطرائق يف ثالث فئات:
• طرائق اآل�صتدآلل ()Heuristic Methods
• الربجمة القيدية ()Constraint Programming
• الربجمة الريا�صية ()Mathematical Programming
األأمثل Optimal Solution احللّ
م��ن املمك��ن اأن تك��ون هن��اك العدي��د م��ن احلل��ول املُثل��ى ،كاأن يك��ون لدي��ك ع��دة ِف��رق ت�ص��مل ثالث��ة ع ّم��ال وباإمكانه��ا اأن ت�ص��تويف كل
املهارات املطلوبة ،كما اأنه من املمكن اأال يوجد ح ّل لبع�ص امل�صكالت ،على �صبيل املثال :اإذا كانت املُهِ َّمة تتطلب املهارة ال�صابعة
وهي ال تتُوفّر يف اأي عامل من العمّال ،فلن يكون هناك ح ّل للم�صكلة.
األإيجابيات طرائق األ�ستدألل ()Heuristic Methods
تتميز اال�ص��تدالالت بالكفاءة احلا�ص��وبية،
ُوميكنه��ا اأن تتن��اول امل�ص��كالت املعق��دة، تقوم طرائق اآل�صتدآلل ( )Heuristic Methods - HMيف العادة على التجربة،
�وال ذات ج��ودة
كم��ا ُميكنه��ا اأن جُت��د حل� ً اأو البديه�ة ،اأو الفط�رة ال�ص�ليمة ،ولي��ص عل�ى التحلي�ل الريا�ص�ي الدقي�قُ ،وميك�ن
عالي��ة اإذا ا�ص �تُخدمت له��ا ا�ص��تدالالت ا�ص�تخدامها الإيج�اد حل�ول جي�دة ب�ص�كل �ص�ريع ،ولكنه�ا ال ت�صم�ن الو�ص�ول اإىل احل ّل
معقولة. االأمثل (اأف�صل حل ميكن احل�صول عليه) ،ومن االأمثلة على اخلوارزميات اال�صتداللية؛
-ال�سلبيات
اخلوارزمي�ات اجل�ص�عة ( ،)Greedy Algorithmsو �اكاة التلد ي�ن
ال ت�صم��ن الو�ص��ول اإىل احل� ّل االأمث��ل ،كما ( ،)Simulated Annealingواخلوارزميات اجلينية (،)Genetic Algorithms
اأن بع���ص اال�ص��تدالالت تتطل��ب �صبطً ��ا وحت�صني م�صتعمرة النمل ( .)Ant Colony Optimizationت�صتخدم هذه الطرائق
كبرًا حتى ُتوؤدي اإىل نتائج جيدة. طويال ج� ًّدا ،ولكن ال
يف الع�ادة حل� ّل امل�ص�كالت املعق�دة الت�ي ت�ص�تغرق وقتًا حا�ص�وبيًا ً
ُميكنها اإيجاد حلول دقيقة ،و�صتتعلّم يف الدرو�ص القادمة املزيد عن هذه اخلوارزميات.
األإيجابيات ة القيدية ()Constraint Programming ال
ُميك��ن للربجم��ة القيدي��ة اأن تتعام��ل م��ع
الربجم��ة القيدي��ة ( )Constraint Programming - CPحت � ّل م�ص��كالت قيود معقدة واأن جُتد اأف�صل احللول.
التح�ص��ني ع��ن طري��ق منذج��ة القي��ود واإيج��اد ح � ّل يخ�ص��ع جلمي��ع القي��ود ،وه��ذا
االأ�ص��لوب مفي��د ب�ص��كل خا���ص يف امل�ص��كالت الت��ي به��ا ع��دد كبر م��ن القي��ود اأو التي -ال�سلبيات
ُميك��ن اأن تك��ون ه��ذه الطرائ��ق مك ِّلف��ة تتطلب حت�صني عدة اأهداف.
حا�صوبيًا يف امل�صكالت الكبرة.
254
األإيجابيات ة الريا سية ()Mathematical Programming ال
تتعام��ل الربجم��ة الريا�صية مع
الربجم��ة الريا�صي��ة ( )Mathematical Programming - MPه��ي جمموع��ة م��ن جمموع��ة وا�ص��عة من م�ص��كالت
التقنيات التي تَ�صتخدم مناذج ريا�صية؛ حل ّل م�صكالت التح�صني ،وت�صمل :الربجمة اخلطية التح�ص��ني وه��ي غال ًب��ا ت�صم��ن
(� ،)Linear Programmingالربجم��ة الرباعي��ة ( ،)Quadratic Programmingالو�صول اإىل احل ّل االأمثل.
�الربجم��ة غ��ر اخلطي��ة (� )Nonlinear Programmingبرجم��ة اآلأع��داد ال�صحيح��ة
املختلط��ة ( ،)Mixed-Integer Programmingوتُ�ص��تخدم ه��ذه التقني��ات عل��ى نط��اق -ال�سلبيات
وا�ص��ع يف الكث��ر م��ن املج��االت؛ مب��ا فيه��ا عل��م االقت�ص��اد والهند�ص��ة وعملي��ات البح��ث .تلع��ب ُيع� ُّد ك ٌّل من التكلفة احلا�ص��وبية
اأ�ص��اليب الربجم��ة الريا�صي��ة دورًا مه ًّم��ا يف التع ُّل��م العمي��ق ( ،)Deep Learningومتتل��ك للم�ص��كالت الكب��رة وتعقي��د
ُعام��الت الت��ي حتت��اج اأن تتع ّل��م م��ن البيان��ات ،حيث اإن�ص��اء ال�صيغ��ة الريا�صي��ة
من��اذج التعلُّ��م العمي��ق ع��ددًا كب�رًا م��ن امل ِ
ُعام��الت النم��وذج من اأجل تقليل دال��ة التكلفة التي املنا�ص��بة مرتف َع��ني بالن�ص��بة ُت�ص��تخدم خوارزمي��ات التح�ص��ني لتعدي��ل م ِ
تقي���ص ال َف��رق ب��ني ُخُم َرج��ات النم��وذج املتن ّب�اأ به��ا واملُخ َرج��ات ال�صحيح��ة .مت تطوي��ر العدي��د مل�ص��كالت الع��امَل الواقع��ي
م��ن خوارزمي��ات التح�ص��ني اخلا�ص��ة بنم��اذج التعلُّ��م العمي��ق مث��ل :خوارزمي��ة اآدم ( ،)Adamاملعقدة.
وخوارزمي��ة اآل�ص��تقاق التك ُّيف��ي ( ،)AdaGradوخوارزمي��ة ن�ص��ر متو�ص��ط اجل��ذر الربيعي
(.)RMSprop
import random
255
# creates the global list of skills s1, s2, s3, ...
skills = ['s' + str(i) for i in range(1, skill_number+1)]
worker_skills = dict() # dictionary that maps each worker to their set of skills
# randomly decides the number of skills that this worker should have (at least 1)
my_skill_number = random.randint(1, max_skills_per_worker)
# randomly samples the set of required skills that the team has to cover
required_skills = set(random.sample(skills, required_skill_number))
، ع�صر مهارات اإجمالية:�صتقوم االآن باختبار الدالة الواردة �صابقًا من خالل اإن�صاء ن�صخة من م�صكلة معطياتها كالتايل
.كحد اأق�صى لكل عامل
ٍّ وتتطلب خم�ص مهارات،و�صتة ع ّمال
x10
حتتاج امل�صكلة اإىل
ع�صر مهارات
اإجمالية
x5 x5 x6
بحدٍّ اأق�صى خم�ص مهارات ع ّمال
مهارات لكل عامل مطلوبة
ر�صم تو�صيحي للمثال اخلا�ص بامل�صكلة:5.2 �صكل
256
# the following code represents the above test
sample_problem = create_problem_instance(10, 6, 5, 5)
print()
w1 {'s10'}
w2 {'s2', 's8', 's5', 's6'}
w3 {'s7', 's2', 's4', 's5', 's1'}
w4 {'s9', 's4'}
w5 {'s7', 's4'}
w6 {'s7', 's10'}
وه��ي خوارزمي��ة حت�ص��ني ُميكنه��ا اأن حت��دِّ د اأقل عدد ممكن،)Solver( تتمث��ل اخلط��وة التالي��ة يف اإن�ص��اء خوارزمي��ة ح� ّل
.لفريق الع ّمال الذي ُميكن اعتماده الإ�صتيفاء كل املهارات املطلوبة
اتخاذ القرار بخوارزمية القوة املُفرطة
Decision Making with a Brute-Force Algorithm
�ص�تُطبِّق اأول خوارزمي��ة ح� ّل اأ�ص��لوب الق��وة املُفرط��ة ال��ذي يعتم��د عل��ى التع��داد ال�ص��امل ل��كل ال ِف��رق املُمكن��ة واأخذه��ا بعني
؛ لتولي��د كل ال ِف��رقitertools (توافي��ق) م��ن وح��دةcombinations و�صَ تَ�ص��تخدم ه��ذه اخلوارزمي��ة اأدوات،االعتب��ار
.املُمكنة ذات العدد املح َّدد
:�صيتم تو�صيح االأداة باملثال الب�صيط اأدناه
# used to generate all possible combinations in a given list of elements
from itertools import combinations
pairs [('w1', 'w2'), ('w1', 'w3'), ('w1', 'w4'), ('w2', 'w3'), ('w2',
'w4'), ('w3', 'w4')]
triplets [('w1', 'w2', 'w3'), ('w1', 'w2', 'w4'), ('w1', 'w3', 'w4'),
('w2', 'w3', 'w4')]
257
وهذه اخلوارزمية تاأخذ بعني، ُميكن اإن�ص��اء الدالة التالية حل ّل م�ص��كلة تكوين الفريق باأ�ص��لوب القوة املُفرطة،بعد ذلك
ث��م حت�ص��ر ال ِف��رق التي ت�ص��تويف كل، و تن�ص��ىء ال ِف��رق بن��ا ًء عل��ى االأع��داد املمكن��ة،االعتب��ار جمي��ع اأحج��ام الف��رق املمكن��ة
:وحتدد الفريق االأقل عددًاِّ املهارات املطلوبة
def brute_force_solver(problem):
worker_skills = problem['worker_skills']
required_skills = problem['required_skills']
فاإذا كانت جمموعة املهارات املطلوبة ت�ص��مل مه��ارة ال ميتلكها،م��ن املمك��ن اأال يك��ون هن��اك ح� ّل لن�ص��خة امل�ص��كلة ال��واردة
ويف مث��ل ه��ذه احل��االت �ص�تُظهر، فل��ن جُت��د طريق��ة الإن�ص��اء فري��ق يغط��ي كل امله��ارات،اأي عام��ل م��ن الع ّم��ال املتواجدي��ن
.ّاخلوارزمية املذكورة �صابقًا النتيجة بعدم وجود حل
ُميكن��ك االآن ا�ص��تخدام املقط��ع الربجم��ي الت��ايل الختب��ار خوارزمي��ة احل� ّل بالق��وة املُفرط��ة وف ًق��ا للمث��ال ال��ذي مت اإن�ص��اوؤه
:�صابقًا
# uses the brute-force solver to find the best team for the sample problem
best_team = brute_force_solver(sample_problem)
print(best_team)
258
، ٌ اأق ّل الفرق عددًا طاملا اأن هناك ح ٌّل ممكن: اأي، من املوؤكد اأن خوارزمية احل ّل بالقوة املُفرطة �صتجد اأف�صل ح ّل ممكن
ولكن كما مت مناق�صته يف بداية هذا الدر�ص فاإن طبيعة اخلوارزمية ال�صمولية ُتوؤدي اإىل زيادة هائلة يف التكلفة احلا�صوبية
.كلما زاد حجم امل�صكلة
و ُميك��ن ا�ص��تخدام املقط��ع،ُميك��ن تو�صي��ح ذل��ك م��ن خ��الل اإن�ص��اء نُ�ص��خ مل�ص��كالت متع��ددة م��ن حي��ث تزاي��د ع��دد الع ّم��ال
ثم،20 و15 و10 و5 : حيث يتن��وع عدد الع ّم��ال ليك��ون،الربجم��ي الت��ايل لتولي��د نُ�ص��خ متنوع��ة م��ن م�ص��كلة تكوي��ن الفري��ق
واخلم���ص، واملهارات الثمان املطلوبة، وت�ص��مل كل النُ�ص��خ املهارات االإجمالية الع�ص��ر، ن�ص��خة بعدد الع ّمال100 يتم توليد
:كحد اأق�صى لكل عامل ٍّ مهارات
problems_with_5_workers = [] # 5 workers
problems_with_10_workers = [] # 10 workers
problems_with_15_workers = [] # 15 workers
problems_with_20_workers = [] # 20 workers
problems_with_5_workers.append(create_problem_instance(10, 5, 8, 5))
problems_with_10_workers.append(create_problem_instance(10, 10, 8, 5))
problems_with_15_workers.append(create_problem_instance(10, 15, 8, 5))
problems_with_20_workers.append(create_problem_instance(10, 20, 8, 5))
وتُ�ص��تخدم هذه اخلوارزمية الإجراء العمليات،تَقبل الدالة التالية قائمة بنُ�ص��خ امل�ص��كلة وخوارزمية احل ّل بالقوة املُفرطة
كم��ا اأنه��ا تُ�ص��جل الوق��ت االإجم��ايل املطل��وب (بالث��واين) حل�ص��اب احلل��ول،احل�ص��ابية ث��م ا�ص��تخراج احل� ّل جلمي��ع النُ�ص��خ
:وكذلك العدد االإجمايل للنُ�صخ التي ُميكن اإيجاد ح ّل منها
import time
def gets_solutions(problems,solver):
total_seconds = 0 # total seconds required to solve all problems with this solver
total_solved = 0 # total number of problems for which the solver found a solution
solutions = [] # solutions returned by the solver
return solutions
259
ي�ص� ِ
�تخدم املقط��ع الربجم��ي الت��ايل ه��ذه الدال��ة وخوارزمي��ة احل� ّل بالق��وة املُفرط��ة حل�ص��اب احلل��ول املُمكن��ة ملجموع��ات
البيان��ات الت��ي مت اإن�ص��اوؤها �ص��ابقًا واملُك َّون��ة م��ن ( 5-workersخم�ص��ة _ع ّم��ال) ،و( 10-workersع�ص��رة _ع ّم��ال)،
عامال):
عامال) ،و( 20-workersع�صرين _ ً و( 15-workersخم�صة ع�صر _ ً
brute_solutions_5 = gets_solutions(problems_with_5_workers,
)solver = brute_force_solver
brute_solutions_10 = gets_solutions(problems_with_10_workers,
)solver = brute_force_solver
brute_solutions_15 = gets_solutions(problems_with_15_workers,
)solver = brute_force_solver
brute_solutions_20 = gets_solutions(problems_with_20_workers,
)solver = brute_force_solver
عل��ى الرغ��م م��ن اأن االأع��داد املطلوب��ة �صُ ��جلت بوا�ص��طة الدال��ة () gets_solutionsاإال اأنه��ا �ص��تكون متفاوت��ة نظ�رًا للطبيع��ة
الع�صوائية ملجموعات البيانات ،و�صيكون هناك منطان ثابتان على الدوام هما:
• زي��ادة ع��دد الع ّم��ال ُت�وؤدي اإىل ع��دد اأك��رب من نُ�ص��خ امل�ص��كالت التي من املمك��ن اإيجاد ح ّل لها ،وهذا النم��ط من احللول معقول
واحد على االأقل ميتلك مه��ارة واحدة مطلوبة �صمن عامل ٍ
ومتو َّق��ع؛ الأن وج��ود ع��دد كب��ر م��ن الع ّم��ال يزي��د من احتم��ال وجود ٍ
جمموعة الع ّمال املتاحة.
• زي��ادة ع��دد الع ّم��ال ي�وؤدي اإىل زي��ادة كب��رة (اأُ�صِّ �يَّة) يف الزم��ن احلا�ص��وبي ،وه��ذا متوق��ع ح�ص��ب التحلي��ل ال��ذي مت اإج��راوؤه يف
عامال ،ف�اإن عدد
بداي��ة ه��ذا الدر���ص ،وبالن�ص��بة ملجم��وع الع ّم��ال مم��ن ه��م بع��دد :خم�ص��ة ،وع�ص��رة ،وخم�ص��ة ع�ص��ر ،وع�ص��رون ً
الفِرق املُمكنة ي�صاوي ،32767 ،1023 ،31 :و 1048575على الرتتيب.
ب�صف� ٍة عام��ة ،وبالنظ��ر اإىل ع��دد الع ّم��ال املُعط��ى ،Nف�اإن عدد ال ِفرق املُمكنة ي�ص��اوي ،2N-1وهذا العدد �ص��ي�صبح كبرًا لتقييمه
حتى بالن�ص��بة للقيم ال�صغرة ل� .Nكذلك بالن�ص��بة الأي م�ص��كلة ب�ص��يطة بها قيد واحد (يغطي جميع املهارات املطلوبة) وهدف
واح��د (تقلي��ل حج��م الفري��ق) ،ف�اإن الق��وة املُفرطة قابلة للتطبي��ق فقط على جمموعات البيانات ال�صغرة ج��دً ا ،وذلك بالتاأكيد
حال عمل ًّيا الأي من م�صكالت التح�صني املعقدة التي نواجها يف الواقع والتي اأ�صرنا اإليها يف بداية هذا الدر�ص. لي�ص ً
اتخاذ القرار با�ستخدام خوارزمية ا�ستدأللية ج�سعة
Decision Making with a Greedy Heuristic Algorithm
تتعام��ل الدال��ة التالي��ة م��ع ه��ذا القي��د بوا�ص��طة تنفي��ذ خوارزمي��ة حت�ص��ني تعتم��د عل��ى االأ�ص��لوب اال�ص��تداليل اجل�ص��ع ،حي��ث تق��وم
اخلوارزمي��ة تدريجيًابتكوي��ن الفري��ق ع��ن طري��ق اإ�صاف��ة ع�ص��و واح��د يف كل م��رة ،فالع�ص��و ال��ذي اأ�صي��ف موؤخرًا يك��ون دائمًا هو
الع�صو الذي ميتلك معظم املهارات التي مَل توجد يف �صابقه ،وت�صتمر العملية حتى ت�صتويف جميع املهارات املطلوبة.
الدالة اآل�صتدآللية اجل�صعة ( )Greedy Heuristicامل�صتخدمة يف هذا املثال هي معيار آلختيار عامل يتوفر فيه اأكرب عدد من املهارات التي
أ�آل.
تُ�صتوفى يف الفريق اإىل اآلآن� ،ميكن ا�صتخدام دالة ا�صتدآللية اأخرى ،مبنية على اإ�صافة العامل الذي يتوفر فيه العدد اآلأكرب من املهارات ا ً
260
def greedy_solver(problem):
worker_skills = problem['worker_skills']
required_skills = problem['required_skills']
# remembers only the required uncovered skills that this worker has
uncovered_worker_skills[worker_id] = worker_skills[worker_id].
intersection(uncovered_required_skills)
intersections)( تُظهر الدالة
# while there are still required skills to cover مجموعة جديدة تحتوي فقط على
while len(uncovered_required_skills) > 0: المهارات الم�صتركة من جميع
best_worker_id = None # the best worker to add next
مهارات الع ّمال الموجودة في
# number of uncovered skills required for the best worker to cover والمهارات،worker_skills
best_new_coverage = 0 ُ�صتوف في
َ المطلوبة التي لم ت
.uncovered_worker_skills
for worker_id in uncovered_worker_skills:
# if this worker can cover more uncovered required skills than the best worker so far
if len(my_uncovered_skills) > best_new_coverage:
best_worker_id=worker_id # makes this worker the best worker
best_new_coverage=len(my_uncovered_skills)
# remembers only the required uncovered skills that this worker has
uncovered_worker_skills[worker_id] =
uncovered_worker_skills[worker_id].intersection(uncovered_required_skills)
else: # no best worker has been found and some required skills are still uncovered
return None # no solution could be found
return best_team
261
َّ ولكنها كما هو،ال تاأخذ خوارزمية احل ّل اجل�ص��عة كل ال ِفرق املُمكنة بعني االعتبار وال ت�صمن اإيجاد احل ّل االأمثل
مو�صح
هي يف،�وال جيدة
ً � وم��ع ذلك ُميكنه��ا اأن تُنتج حل،اأدن��اه اأ�ص��رع بكث��ر م��ن خوارزمي��ة احل� ّل الت��ي تعتم��د عل��ى الق��وة املُفرطة
.حال اإذا كان موجودًا ًّ ومن املوؤكد اأن جُتد هذه الطريقة،الغالب حلو ٌل مثلى
(خم�ص��ة5-workers :ي�ص��تخدِ م املقط��ع الربجم��ي الت��ايل خوارزمي��ة احل ّل اجل�ص��عة حل�ص��اب حلول جمموع��ات البيانات
(ع�ص��رين20-workers و،) (خم�ص��ة ع�ص��ر _عام� ً�ال15-workers و،) (ع�ص��رة _ع ّم��ال10-workers و،)_ع ّم��ال
:عامال) التي مت ا�صتخدامها �صاب ًقا لتقييم خوارزمية احل ّل بالقوة املُفرطة ً _
greedy_solutions_5 = gets_solutions(problems_with_5_workers,
solver = greedy_solver)
greedy_solutions_10 = gets_solutions(problems_with_10_workers,
solver = greedy_solver)
greedy_solutions_15 = gets_solutions(problems_with_15_workers,
solver = greedy_solver)
greedy_solutions_20 = gets_solutions(problems_with_20_workers,
solver = greedy_solver)
واالآن يت�ص��ح الف��رق يف ال�ص��رعة ب��ني اخلوارزميت��ني؛ حي��ث ُميك��ن تطبي��ق خوارزمي��ة احل� ّل اجل�ص��عة عل��ى النُ�ص��خ املتعلق��ة
: كما يف املثال التايل،بامل�صكالت الكبرة جدً ا
# creates 100 problem instances of a team formation problem with 1000 workers
problems_with_1000_workers = []
262
مقارنة اخلوارزميات Comparing the Algorithms
بع��د اأن مت تو�صي��ح مي��زة ال�ص��رعة خلوارزمي��ة احل� ّل اال�ص��تداللية اجل�ص��عة ،تتم ّث��ل اخلط��وة التالي��ة يف التحق��ق م��ن ج��ودة
احلل��ول الت��ي تُنتجه��ا ،حي��ث تَقب��ل الدال��ة التالي��ة احلل��ول الت��ي اأنتجته��ا اخلوارزمي��ة اجل�ص��عة وخوارزمي��ة الق��وة املُفرط��ة
تبني النِّ�ص��ب املئوية للنُ�ص��خ التي تقوم كلتا اخلوارزميتني بذكر احل ّل االأمثل لها على نف���ص جمموعة نُ�ص��خ امل�ص��كالت ،ثم ّ
(الفريق االأقل عد ًدا):
def compare(brute_solutions,greedy_solutions):
total_solved = 0
same_size = 0
for i in range(len(brute_solutions)):
ُميك��ن االآن ا�ص��تخدام الدال��ة () compareملقارن��ة فاعلي��ة اخلوارزميت��ني املطبقت��ني عل��ى :اخلم�ص��ة ع ّم��ال ،والع�ص��رة
عامال.
عامال ،والع�صرين ً
ع ّمال ،واخلم�صة ع�صر ً
))print(compare(brute_solutions_5,greedy_solutions_5
))print(compare(brute_solutions_10,greedy_solutions_10
))print(compare(brute_solutions_15,greedy_solutions_15
))print(compare(brute_solutions_20,greedy_solutions_20
1.0
0.82
0.88
0.85
تو�ص��ح النتائ��ج اأن اخلوارزمي��ة اال�ص��تداللية اجل�ص��عة ُميكنه��ا اأن جُت��د با�ص��تمرار احل� ّل االأمث��ل حل��وايل 80 %اأو اأكر من ِّ
كل نُ�ص��خ امل�ص��كالت القابل��ة للح�لّ .ويف الواق��عُ ،ميك��ن التحق��ق ب�ص��هولة م��ن اأن حج��م الفري��ق ال��ذي تُنتج��ه اخلوارزمي��ة
اال�ص��تداللية اجل�ص��عة حت��ى يف النُ�ص��خ الت��ي تف�ص��ل يف اإيج��اد احلل��ول املُثل��ى له��ا يك��ون قري ًب��ا ج��دً ا م��ن حج��م اأف�ص��ل فري��ق
ممكن.
عملي اأكر للتطبيقات الواقعية، اإذا متت اإ�صافة ذلك اإىل ميزة ال�صرعة الهائلة ،جُتد اأن اخلوارزمية اال�صتداللية خيار ّ
و�صتكت�صف يف الدر�ص التايل تقنيات حت�صني اأكر ذكا ًء ،و�صتتعرّف على كيفية تطبيقها على م�صكالت ُخُمتلفة.
263
مترينات
1م��ا مزاي��ا �عي��وب ا�ص��تخدام كل م��ن :خوارزمي��ة الق��وة املفرط��ة �اخلوارزمي��ة اآل�ص��تدآللية اجل�ص��عة يف ح� ّل م�ص��كالت
التح�صني؟
2حلِّل طريقة ا�صتخدام اخلوارزميات اآل�صتدآللية اجل�صعة آلإيجاد احللول امل ُثلى يف م�صكالت التح�صني.
264
م��ن خ��الل اإكمال املقطع الربجم��ي التايل بحيث، اأن�ص� خوارزمي��ة ح� ّل ج�ص��عة لتح�ص��ني م�ص��كلة تكوي��ن اأع�ص��اء فري��ق3
:ت�صتخدِ م خوارزمية احل ّل اآل�صتدآللية اجل�صعة لتكليف اأع�صاء الفريق بامل ُ ِهمَّة
def greedy_solver(problem):
worker_skills=problem['worker_skills'] # worker skills for this problem
required_skills=problem['required_skills'] # required skills for this problem
uncovered_worker_skills[worker_id]=worker_skills[worker_id].
(uncovered_required_skills)
while len(uncovered_required_skills) > 0:
best_new_coverage= (my_uncovered_skills)
# remembers only the required uncovered skills that this worker has
uncovered_worker_skills[worker_id]=uncovered_worker_
skills[worker_id]. (uncovered_required_skills)
else: # no best worker has been found and some required skills are still uncovered
265
4اذكر ثال م�صكالت حت�صني ُخُمتلفة من العا الواقعي� ،يف كل م�صكلة:
مثاآل على دالة مو�صوعية.ا�صرب ً •
ا�صرب مثالني على القيود اإن �ُجِ دَت. •
5اإذا قم��تَ بزي��ادة ع��دد الع ّم��ال يف خوارزمي��ة الق��وة امل ُفرط��ة ،كي��ف يوؤث��ر ذل��ك عل��ى امل�ص��كلة من حيث ع��دد احللول �الزمن
احل�صابي؟
266
الدر�ص الثاين
م�سكلة جدولة املوارد
التباطُ ؤو املوز�ن التاأخر موعد ت�صليمها املوعد املح َّدد آلإ ازها امل ُ ِهمَّة
--------------- --------- -------------- ------------ -------
0 0 11 14 م1
3 3 23 20 م2
2 1 18 17 م3
�صكل :5.5ح�صاب التباطُ ؤو املوزون
# generates a random duration, deadline, and weight for each job
])durations = [random.randint(*duration_range) for i in range(job_num
])deadlines = [random.randint(*deadline_range) for i in range(job_num
])weights = [random.randint(*weight_range) for i in range(job_num
269
تُ�ص��تخدم الدال��ة ( random.randint)x,yلتولي��د ع��دد �صحي��ح ع�ص��وائي ب��ني xو ،yوهناك طريقة ُخُمتلفة ال�ص��تخدام
ه��ذه الدال��ة تتم ّث��ل يف توف��ر قائم��ة [ ]x,yاأو جمموع��ة ( ،)x,yويف ه��ذه احلال��ة ال ب��د م��ن كتاب��ة الرم��ز * قب��ل القائم��ة،
مو�صح يف الدالة ال�صابقة ،على �صبيل املثال: كما هو َّ
for i in range(5):# prints 5 random integers between 1 and 10 6
))]print(random.randint(*[1, 10 5
5
10
1
يَ�صتخدم املقطع الربجمي التايل دالة () create_problem_instanceلتوليد ن�صخة مل�صكلة يتوفّر فيها ما يلي:
• ت�صتمل ك ّل ن�صخة على ع�صرة مهام.
• ُميك��ن ل��كل مُهِ َّم��ة اأن ت�ص��تمر م��ا ب��ني 5وح��دات زمني��ة و 20وح��دة زمني��ة ،و�ص��يتم افرتا���ص اأن ال�ص��اعة ه��ي الوح��دة
امل�صتخدمة فيما تبقى من هذا الدر�ص. َ الزمنية
• كل م ُِه َّم��ة له��ا موع��د نهائ��ي ي��رتاوح م��ا ب��ني � 5ص��اعات و� 50ص��اعة ،وتب��داأ �ص��اعة املوعد النهائ��ي من حلظة ب��دء املُ ِه َّمة
االأوىل يف ا�ص��تخدام االآل��ة ،عل��ى �ص��بيل املث��ال :اإذا كان املوع��د النهائ��ي ملُهِ َّمة ما ي�ص��اوي ع�ص��ر �ص��اعات ،فه��ذا يعني اأنه
ال بد من اإكمال املُهِ َّمة يف غ�صون ع�صر �صاعات من بداية املُهِ َّمة االأوىل يف اجلدول.
• وزن كل مُهِ مَّة هو عدد �صحيح يرتاوح بني 1و.3
نطاق مدة
عدد المهام المراد اإن�صاوؤها. المُهِ مَّة.
ُميك��ن ا�ص��تخدام الدال��ة التالي��ة لتقيي��م ج��ودة اأي جدول اأنتجته اإحدى اخلوارزميات لن�ص��خة م�ص��كلة حم� َّددة ،حيث تَقبل
وجدوال ملهامها ،ثم متر على كل املهام برتتيب جدولتها نف�صه حتى َحت�صب اأزمنة اإجنازها وجمموع ً الدالة ن�صخة امل�صكلة
التباطُ وؤ املوزون لكامل اجلدول ،و ُيح�صب هذا التباطُ وؤ بح�صاب تباطوؤ كل مُهِ َّمة (مع مراعاة املوعد النهائي لها) و�صربه
يف وزن املُهِ َّمة واإ�صافة الناجت اإىل املجموع:
# computes the total weighted tardiness of a given schedule for a given problem instance
)if pos == 0: # if this is the job that was scheduled first (position 0
# the finish time of the job that starts first is equal to its run time
]finish_times[pos] = durations[job_id
else: # for all jobs except the one that was scheduled first
# the finish time is equal to the finish time of the previous time plus the job's run time
]finish_times[pos] = finish_times[pos-1] + durations[job_id
# computes the weighted tardiness of this job and adds it to the schedule's overall tardiness
schedule_tardiness += weights[job_id] * max(finish_times[pos] -
)deadlines[job_id], 0
return schedule_tardiness,finish_times
�صتُ�ص��تخدم الدال��ة () compute_schedule_tardinessلتقيي��م اجل��داول ،و�ص��تكون ه��ذه الدال��ة مبثاب��ة اأداة مفي��دة
لكل اخلوارزميات التي �صيتم تقدميها يف هذا الدر�ص حل ّل م�صكلة التباطُ وؤ املوز�ن لالآلة الواحدة (.)SMWT
Itertools.Permutations)( Function دالة التباديل
ت�ص ِ
�تخدم خوارزمي�ة ح� ّل الق�وة املُفرط�ة الدال�ة () itertools.permutationsالإن�ص�اء كل اجل�داول املُمكنة (جُتميعات
املهام) ،ثم َحت�صب تباط ؤو كل جدول ممكن وت�صتخرج اأف�صل جدول (اجلدول ذو التباطوؤ الكُليّ االأدنى).
تَقبل الدالة () itertools.permutationsعن�صرًا واحدًا متكررًا (مثل :قائمة) وتُن�صئ كل تبديل ممكن لقيم املُدخَ الت،
ويو�صح املثال الب�صيط التايل ا�صتخدام دالة () permutationsويُظهِ ر التبديالت لكل عناوين املهام املُعطاة:
ِّ
تُ�صتخدم خوارزميات ح ّل القوة امل ُفرطة ب�صكل job_ids = [0,1,2] # the ids of 3 jobs
اأف�صل حل ّل امل�صكالت ال�صغرة ،فالن�صخة for schedule in itertools.permutations(job_ids):
اخلا�صة �صكلة التباط ؤو املوز�ن لالآلة )print(schedule
الواحدة ذات عدد Nمن املهام ،لديها عدد !N
من اجلدا�ل املمكنة ،فعندما يكون ،N = 5 (0, 1, )2
جد�آل� ،لكن هذا
ً �صيكون النا 5! = 120 (0, 2, )1
العدد يتزايد ب�صكل كبر عندما يكون N = 10 (1, 0, )2
اإىل� ، 10! = 3,628,800عندما يكون N = 11 (1, 2, )0
(2, 0, )1
اإىل .11! = 39,916,800 (2, 1, )0
def brute_force_solver(problem):
# 'inf' stands for 'infnity'. Python will evaluate all numbers as smaller than this value.
best_tardiness = float('inf')
if tardiness < best_tardiness: # this schedule is better than the best so far
best_tardiness = tardiness
best_schedule = schedule
best_finish_times = finish_times
{'schedule': (0, 2, 1, 3, 4), .نطاق مدة المُهِ مَّة .مدى اأهمية الوزن
'tardiness': 164,
'finish_times': [5, 11, 21, 36, 51]}
272
األ�ستدأللية اجل�سعة Greedy Heuristic Solver خوارزمية احللّ
ت�صتخدم خوارزمية احل ّل اجل�صعة اأ�صلوبًا ا�صتدالليًا ب�صيطً ا لفرز املهام واتخاذ قرار الرتتيب الذي يجب جدولتها وفقًا ِ
ل��ه ،ث��م تُرت��ب امله��ام حل�ص��اب زم��ن اإكم��ال كل ُم ِه َّم��ة وجمم��وع التباطُ �وؤ امل��وزون لكام��ل اجل��دول ،ويف ه��ذا املث��ال اخلا���ص
تُظهر خوارزمية احل ّل اجل�صعة نوع املُخ َرجات نف�صه الذي اأظهرته خوارزمية ح ّل القوة املُفرطة .
�تخدم (معيار فرز ُعامالن هما :ن�ص��خة امل�ص��كلة املراد حلّها ،ودالة اال�ص��تدالل التي �صت�ص� ِ تَقبل خوارزمية احل ّل اجل�ص��عة م ِ
امله��ام) ،مم��ا ي�ص��مح للم�ص� ِ
�تخدم ب�اأن ُيط ِّب��ق اأي دال��ة ا�ص��تدالل يختاره��ا كدال��ة بايث��ون ،ث��م مي� ِّرره اإىل خوارزمي��ة احل� ّل
اجل�صعة باعتباره ُم ِ
عام ًال.
تُطبِّق الدالة التالية خوارزمية حت�صني ت�صتخدم دال ًة ا�صتداللي ًة ج�صع ًة حل ّل امل�صكلة:
def greedy_solver(problem, heuristic):
# Creates a list of job indices sorted by their deadline in non-decreasing order
))schedule = sorted(range(job_num), key = lambda j: heuristic(j, problem
تُظهر الدالة التالية املوعد النهائي ملُهِ مَّة حمدَّدة يف ن�صخة م�صكلة مُعطاة:
# accesses the deadlines for this problem and returns the deadline for the job
]return problem['deadlines'][job
متري��ر دال��ة deadline_heuristicك ُمعَامِ ��ل اإىل خوارزمي��ة احل� ّل اجل�ص��عة ( )greedy_solverيعني اأن اخلوارزمية
�ص�تُجدوِل (تف��رز) امله��ام وف��ق ترتي��ب ت�صاع��دي ح�ص��ب املوعد النهائ��ي ،مما يعني اأن املهام التي له��ا اأقرب موعد نهائي
273 �صتُجَ دوَل ا ًأوال.
)greedy_sol = greedy_solver(sample_problem, deadline_heuristic
greedy_sol
بديال ياأخذ يف اعتباره اأوزان املهام عند اتخاذ قرار ترتيبها يف اجلدول:
ا�صتدالال ً
ً تُطبِّق الدالة التالية
# accesses the deadlines for this problem and returns the deadline for the job
]return problem['deadlines'][job] / problem['weights'][job
)weighted_greedy_sol=greedy_solver(sample_problem, weighted_deadline_heuristic
weighted_greedy_sol
274
البحث املحلّي Local_search_solver)( Function دالة خوارزمية حلّ
تطب��ق الدال��ة التالي��ة () local_search_solverخوارزمي��ة ح� ّل البح��ث املح ّل��ي القائ��م عل��ى املبُادل��ة ملِ �ص��كلة التباطُ �وؤ
عامالت وهي: املوز�ن لالآلة الواحدة ( ،)SMWTحيث تَقبل هذه الدالة اأربعة ُم ِ
• ن�صخة امل�صكلة.
• خوارزمية ا�صتداللية ج�صعة ت�صتخدمها دالة ) ( greedy_solverحل�صاب ح ّل اأوّيل.
• دال��ة swap_selectorامل�ص��تخدَ مة النتق��اء مُهِ َّمت��ني �ص��تتبادالن موقعيهم��ا يف اجل��دول .عل��ى �ص��بيل املث��ال ،اإذا كان
احل� ّل احل��ايل للم�ص��كلة املُك َّون��ة م��ن اأرب��ع مه��ام ه��و [ ،]0، 2، 3، 1وق�رَّرت دال��ة swap_selectorاأن يح��دث مبادل��ة
بني املُهِ َّمة االأوىل واملُهِ َّمة االأخرة� ،صيكون احل ّل املر�صَّ ح هو [.]1، 2، 3، 0
• max_iterationsع��دد �صحي��ح ُيح� ِّ�دد ع��دد املب��ادالت التي يجب جُتربتها قب��ل اأن تتو�صل اخلوارزمية للح ّل االأف�صل
يف حينه.
�صلوك خوارزميات التح�صني القائمة جدوال
يف كل تك��رار ،تنتق��ي اخلوارزمي��ة مُهِ َّمت��ني للتبدي��ل بينهم��ا ،ث��م تُن�ص��ئ ً
على البحث املحلي يتاأثر ب�صكل كبر جدي��دً ا تت��م في��ه ه��ذه املبادل��ة ،وكل �ص��يء يف اجل��دول اجلدي��د بخ��الف ذلك
باآل�صراتيجية امل�صتخدَمة بطريقة �ص��يكون ُمطاب ًق��ا للج��دول االأ�صل��ي .اإذا كان للج��دول اجلدي��د تباط�وؤ م��وزون
تكرارية لتعديل احللّ. اأق��ل م��ن اجل��دول االأف�ص��ل ال��ذي مت اإيج��اده حت��ى االآن ،فاإن اجل��دول اجلديد
�دال من��ه .خوارزمي��ة احل� ّل ه��ذه له��ا نف���ص ُخُم َرج��ات
ُي�صب��ح ه��و االأف�ص��ل ب� ً
خوارزمية احل ّل اجل�صعة وخوارزمية ح ّل القوة املُفرطة.
_def local_search_solver(problem, greedy_heuristic, swap_selector, max
iterations):
275
# computes the new tardiness after the swap
new_tardiness, new_finish_times = compute_schedule_tardiness(problem,
new_schedule)
:تُطبِّق الدالة التالية مبادلة ع�صوائية بانتقاء مُهِ مَّتني ع�صوائيتني يف اجلدول املُعطى الذي ي�صتوجب تبديل مكانيهما
def random_swap(schedule):
pos2 = pos1
while pos2 == pos1: # keeps sampling until it finds a position other than pos1
pos2 = random.randint(0, job_num - 1) # samples another random position
return pos1, pos2 # returns the two positions that should be swapped
�تخدم الدال��ة التالي��ة ا�ص��رتاتيجية ُخُمتلف��ة وذل��ك باختياره��ا الدائ��م مل ُِه َّمت��ني ع�ص��وائيتني متجاورت��ني يف اجل��دول ِ �ت�ص
ف�اإن،]0، 3، 1، 2[ اإذا كان اجل��دول احل��ايل لن�ص��خة م�ص��كلة ُمك َّون��ة م��ن اأرب��ع مه��ام ه��و، عل��ى �ص��بيل املث��ال.لتبادلهم��ا
.2><1 و1><3 و3><0 املبادالت املُر�صحة �صتكون فقط
def adjacent_swap(schedule):
276
ي�ص� ِ
�تخدم املقطع الربجمي التايل ا�ص��رتاتيجيتي املبادلة مع خوارزمية ح ّل البحث املحلّي حل ّل امل�ص��كلة التي مت اإن�ص��اوؤها
يف بداية هذا الدر�ص:
_print(local_search_solver(sample_problem, weighted_deadline_heuristic, random
))swap, 1000
print(local_search_solver(sample_problem, weighted_deadline_heuristic,
))adjacent_swap, 1000
تُظه��ر النتائ��ج اأف�ص��ل ج��دول [ ]3 ،4 ،2 ،1 ،0له��ذا املث��ال ،واإجم��ايل التباطُ �وؤ ،83واأزمن��ة اإكم��ال امله��ام (�ص��تنتهي
املُهِ َّمة 3يف الوحدة 15من الزمن ،وتنتهي املُهِ َّمة 4يف الوحدة 21منه ،وهكذا).
Comparing Solvers مقارنة خوارزميات احللّ
ي�صتخدم املقطع الربجمي التايل الدالة () create_problem_instanceلتوليد جمموعتي بيانات: ِ
• جمموعة بيانات من 100ن�صخة مل�صكلة التباطُ وؤ املوزون لالآلة الواحدة ،ويف كل منها 7مهام.
• جمموعة بيانات من 100ن�صخة مل�صكلة التباطُ وؤ املوزون لالآلة الواحدة ،ويف كل منها 30مُهِ مَّة.
املو�صحة يف هذا الدر�ص: �صيتم ا�صتخدام جمموعة البيانات االأوىل ملقارنة اأداء جميع خوارزميات احل ّل َّ
.1خوارزمية ح ّل القوة املُفرطة .
.2خوارزمية احل ّل اجل�صعة املُت�صمنة على ا�صتدالل خا�ص باملوعد النهائي.
.3خوارزمية احل ّل اجل�صعة املُت�صمنة على ا�صتدالل خا�ص باملوعد النهائي املوزون.
.4خوارزمية ح ّل البحث املحلّي املُت�صمنة على مبادالت ع�صوائية وخوارزمية احل ّل اجل�صعة ذات ا�صتدالل خا�ص باملوعد
النهائي الإيجاد احل ّل االأوّيل.
.5خوارزمية ح ّل البحث املحلّي املُت�صمنة على مبادالت ع�صوائية وخوارزمية احل ّل اجل�صعة ذات ا�صتدالل خا�ص باملوعد
النهائي املوزون.
.6خوارزمية ح ّل البحث املحلّي املُت�صمنة على مبادالت متجاورة وخوارزمية احل ّل اجل�صعة ذات ا�صتدالل خا�ص باملوعد
النهائي.
.7خوارزمية ح ّل البحث املحلّي املُت�صمنة على مبادالت متجاورة وخوارزمية احل ّل اجل�صعة ذات ا�صتدالل خا�ص باملوعد
النهائي املوزون.
�صيتم ا�صتخدام جمموعة البيانات الثانية ملقارنة جميع خوارزميات احل ّل با�صتثناء خوارزمية ح ّل القوة املُفرطة البطيئة
جدً ا بالن�صبة للم�صكالت امل�صتملة على 30مُهِ َّمة.
#Dataset 1
][ = problems_7
for i in range(100):
))]problems_7.append(create_problem_instance(7, [5, 20], [5, 50], [1, 3
#Dataset 2
][ = problems_30
for i in range(100):
))]problems_30.append(create_problem_instance(30, [5,20], [5, 50], [1, 3
277
Compare)( Function دالة املقارنة
ثم تُظهر، كل خوارزمي��ات احل�لّ؛ حل� ّل كل امل�ص��كالت يف جمموع��ة بيان��ات معيّنةCompare)( ت�ص��تخدِ م الدال��ة التالي��ة
وتَقبل الدال��ة كذلك املُعامِ ل،متو�ص��ط التباطُ �وؤ ال��ذي حتقق��ه كل خوارزمي��ة ح� ّل عل��ى كل امل�ص��كالت يف جمموعة البيان��ات
: لتحديد اإمكانية ا�صتخدام خوارزمية احل ّل بالقوة املُفرطة اأم الuse_brute املنطقي
def compare(problems,use_brute):
# comparison on Dataset 1
# maps each solver to a list of all tardiness values it achieves for the problems in the given dataset
results = defaultdict(list)
for problem in problems: # for each problem in this datset
278
مترينات
�ِ 1صف ا�ص��راتيجيتني ُخُمتلفتني (مبادلة ،انعكا���ش ،حتويل ،اإل ) آلأ�ص��لوب البحث املحلي ِحل ّل م�ص��كلة التباطوؤ املوز�ن
لالآلة الواحدة.
2كم عدد اجلدا�ل امل ُمكنة (احللول) لن�صخة م�صكلة التباطوؤ املوز�ن لالآلة الواحدة �التي ت�صتمل على ت�صع مهام؟
279
م��ن خ��الل اإكم��ال املقط��ع الربجم��ي، اأن�ص� خوارزمي��ة ح� ّل بالق��وة امل ُفرط��ة مل�ص��كلة التباط�وؤ امل��وز�ن لالآل��ة الواح��دة3
.التايل بحيث ت�صتخدم الدال ُة القو َة امل ُفرطة آلإيجاد تبديل اجلد�لة اآلأمثل
def brute_force_solver(problem):
# gets the information for this problem
durations, weights, deadlines=problem['durations'], problem['weights'],
problem['deadlines']
best_tardiness=
best_schedule=
best_finish_times=
280
من خالل اإكمال املقطع الربجمي التايل، اأن�ص خوارزمية ح ّل البحث املحلّي مل�صكلة التباطوؤ املوز�ن لالآلة الواحدة4
.بحيث ت�صتخدم الدال ُة البحث املحلّي آلإيجاد تبديل اجلد�لة اآلأمثل
def local_search_solver(problem, greedy_heuristic, swap_selector, max_
iterations):
# gets the information for this problem
durations, weights, deadlines=problem['durations'], problem['weights'],
problem['deadlines']
# local search
for i in range( ): # for each of the given iterations
# chooses which two positions to swap
pos1,pos2= (best_schedule)
best_schedule =
best_tardiness =
best_finish_times=
281
�ِ 5صف طريقة عمل البحث املحلّي.
6اكت��ب مالحظات��ك ع��ن نتائ��ج خوارزمي��ات احل� ّل اجل�ص��عة مقارن��ة بخوارزمي��ات ح� ّل البح��ث املح ّل��ي يف م�ص��كلة ت�ص��تمل
عل��ى ثالث��ني ُم ِه َّم��ة .م��ن �جه��ة نظ��رك ،مل��اذا تُ�ص��تخدم خوارزمي��ة ح� ّل الق��وة امل ُفرط��ة يف ه��ذه امل�ص��كلة املك ّون��ة م��ن
ثالثني ُم ِهمَّة؟
282
الدر�ص الثالث
م�سكلة حت�س امل�سار
v0=20
w0=5 w3=8 v3=15
v1=10
w1=10 v4=7
w4=11
v2=23
7
w2=19 =w5=2 v5
�صكل :5.6م�صكلة حقيبة الظهر
يو�ص��ح ال�ص��كل 5.6مث� ً�اال عل��ى م�ص�األة حقيب��ة ظه��ر مُك َّون��ة م��ن �ص��تة عنا�ص��ر ب�اأوزان و ِقي��م حم�دَّدة ،وحقيب��ة ظه��ر ب�ص��عة
ِّ
ق�ص��وى ت�ص��اوي اأربع��ني وح��دة .يق��وم املقط��ع الربجم��ي الت��ايل بتثبي��ت مكتب��ة البايث��ون املفتوح��ة امل�ص��در mipاخلا�ص��ة
بربجمة االأعداد ال�صحيحة املختلطة حل ّل ن�صخة م�صكلة حقيبة الظهر ،1/0وي�صتورد الوحدات ال�صرورية:
284
C = 40 # knapsack capacity
# for each items creates and appends a binary decision variable
for i in I:
))x.append(solver.add_var(var_type = BINARY
><OptimizationStatus.OPTIMAL: 0
متغرات القرار الثنائية للعنا�صر ،وتُوفِّر املكتبة mipيف البايثون ما يلي: يُن�صئ املقطع الربجمي القائمة xلتخزين ِّ
املتغرات الثنائية واإ�صافتها اإىل خوارزمية احللّ. • اأداة ( add_var)var_type=BINARYالإن�صاء ِّ
• اأداة () maximizeمل�ص��كالت التح�ص��ني الت��ي حتت��اج لزي��ادة دال��ة مو�صوعي��ة ،اأم��ا م�ص��كالت التح�ص��ني الت��ي تتطل��ب
ت�صغر الدالة املو�صوعية ،فت�صتخدم االأداة ().minimize
• اأداة () xsumالإن�ص��اء التعب��رات الريا�صي��ة الت��ي تت�صم��ن املجامي��ع( ،)sumsويف املث��ال ال�ص��ابق مت ا�ص��تخدام ه��ذه
ال�صعة وحلّه.
االأداة حل�صاب جمموع الوزن االإجمايل للعنا�صر يف اإن�صاء قيد ّ
يح�ص��ن الدال��ة املو�صوعي��ة يف ظ��ل االلت��زام بالقيود ،وتَ�ص��تخدم االأداة برجم َة االأعداد
• اأداة () optimizeالإيج��اد ح� ّل ِّ
ملتغرات القرار والإيجاد التوليفة التي ُحت ِّ�صن الهدف. ال�صحيحة املختلطة للنظر بكفاءة يف توليفات القيم املُختلفة ِّ
• املُعامِ ل = الإ�صافة قيود اإ�صافية اإىل خوارزمية احل ّل املوجودة.
متغر
يف املقط��ع الربجم��ي اأدن��اه حتت��وي القائم��ة xعل��ى متغ� ِّ�ر ثنائ��ي واح��د ل��كل عن�صر ،وبعد ح�ص��اب احل ّل �ص��يكون كل ِّ
م�ص��اويًا للواح��د اإذا اأُدرج العن�ص��ر يف احل� ّل ،و�ص ُي�ص��اوي �صف� ًرا بخ��الف ذل��ك .تَ�ص��تخدم املكتب��ة ِ mipبن��اء اجلمل��ة
x]i[.xالإظه��ار القيم��ة الثنائي��ة للعن�ص��ر ذي الفهر���ص َ ،iوحت�ص��ب خوارزمي��ة احل � ّل متغ� ِّ�ر الق��رار ،xث��م جُت��د القيم��ة
متغر القرار َ ،xوجُتمع االأوزان والقيم لكل عن�صر االإجمالية والوزن االإجمايل للعنا�صر املنتقاة عن طريق التكرار على ِّ
مو�صح يف املقطع الربجمي التايل: منتقى ،iا�صتنادًا اإىل [ ،x]iوتَعر�صها كما هو َّ
total_weight = 0 # stores the total weight of the items in the solution
total_value = 0 # stores the total value of the items in the solution
285
for i in I: # for each item
if x[i].x == 1: # if the item was selected
)'print('item', i, 'was selected
# updates the total weight and value of the solution
]total_weight += weights[i
]total_value += values[i
# returns the distance matrix, location ids and the startstop vertix
return dist_matrix, location_ids, random.randint(0, num_locations - 1)
8 بحي��ث يت�صم��ن،ي�ص��تخدِ م املقط��ع الربجم��ي الت��ايل الدال��ة ال��واردة �ص��ابقًا الإن�ص��اء ن�ص��خة م��ن م�ص��كلة البائ��ع املُتج�وّل
:20 و5 وم�صافات ثنائية ترتاوح بني،مواقع
dist_matrix, location_ids, startstop = create_problem_instance(8, (5, 20))
print(dist_matrix)
print(startstop)
287
اإن�ساء خوارزمية حلّ القوة املُفرطة مل�سكلة البائع املُتجوّل
Creating a Brute-Force Solver for the Traveling Salesman Problem
وتَقبل هذه الدالة،ت�صتخدِ م الدالة التالية خوارزمية ح ّل القوة املُفرطة لتعداد جميع الطُ رق املُمكنة (التباديل) واإظهار اأق�صر م�صار
الحظ اأن احلل املمكن لن�صخة.create_problem_instance)( م�صفوفة امل�صافة وموقع االنطالق والتوقف الذي ُتظهره الدالة
. (االنطالق والتوقف) ثم ينتهي اإليهاstartstop يبداأ من مدينة،) هي تبديل مدنTSP(م�صكلة البائع امل ُتجوّل
# adds the startstop location at the beginning and end of the best route and returns
return [startstop] + list(best_route) + [startstop], best_distance
ِ
startstop الحظ اأن موقع. الإن�صاء كل الطُ رق املُمكنةpermutations)( ت�صتخدم خوارزمية ح ّل القوة املُفرطة اأداة
، فعلى �ص��بيل املثال،(االنط��الق والتوق��ف) ُي�ص��تبعد م��ن التبادي��ل؛ الأن��ه يج��ب اأن يظه��ر دائ ًم��ا يف بداية ك ّل طري��ق ونهايته
�ص��تكون،) (االنط��الق والتوق��فstartstop ه��و موق��ع0 وكان املوق��ع،3 و،2 و،1 و،0 اإذا كان��ت لدي��ك اأربع��ة مواق��ع
:قائمة التباديل املُمكنة كما يلي
for route in permutations({1,2,3}):
print(route)
(1, 2, 3)
(1, 3, 2)
(2, 1, 3)
(2, 3, 1)
(3, 1, 2)
(3, 2, 1)
288
َحت�ص��ب خوارزمي��ة ح� ّل الق��وة املُفرط��ة امل�ص��افة االإجمالي��ة ل��كل طري��ق ،وتُظه��ر يف النهاي��ة الطري��ق ذا امل�ص��افة االأق�ص��ر.
ُيط ِّبق املقطع الربجمي التايل خوارزمية احل ّل على ن�صخة م�صكلة البائع املُتجوّل التي مت اإن�صاوؤها �صابقًا:
)brute_force_solver(dist_matrix, location_ids, startstop
عل��ى غ��رار خوارزمي��ات ح� ّل الق��وة املُفرط��ة الت��ي مت تو�صيحه��ا يف الدرو���ص ال�ص��ابقة ،ال تُط َّب��ق ه��ذه اخلوارزمي��ة اإال عل��ى
نُ�ص��خ م�ص��كلة البائ��ع املُتج�وّل ال�صغ��رة؛ الأن ع��دد الطُ ��رق املُمكن��ة يتزاي��د اأ�صعا ًف��ا م�صاعف��ة كلم��ا زاد العدد ، Nوي�ص��اوي
!( ، )N−1وعلى �صبيل املثال ،عندما يكون ،N = 15فاإن عدد الطُ رق املُمكنة ي�صاوي .14! = 87,178,291,200
ا�ستخدام بر ة األأعداد ال�سحيحة املختلطة حللّ م�سكلة البائع املُتجوّل
Using MIP to Solve the Traveling Salesman Problem
ال�ص��تخدام برجم��ة اآلأع��داد ال�صحيح��ة املختلط��ة ( )MIPحل� ّل م�ص��كلة البائ��ع امل ُتج�وّل ( ،)TSPيج��ب اإن�ص��اء �صيغ��ة
كال من الدالة املو�صوعية وقيود م�صكلة البائع املُتجوّل. ريا�صية تُغطي ً
تتطل��ب ال�صيغ��ة متغ� ِّ�ر ق��رار ثنائ��ي xijل��كل انتق��ال حمتم��ل i→jم��ن موق��ع iاإىل موق��ع اآخ��ر ،jواذا كان��ت امل�ص��كلة
به��ا ع��دد Nم��ن املواق��ع ،ف�اإن ع��دد االنتق��االت املُمكن��ة ي�ص��اوي ( .N×)N−1اإذا كان��ت xijت�ص��اوي ،1ف�اإن احل� ّل يت�صم��ن
االنتقال من املوقع iاإىل املوقع ،jوخالف ذلك اإذا كانت xijت�صاوي ،0فلن يُدرج هذا االنتقال يف احللّ.
ُميك��ن الو�ص��ول ب�ص��هولة اإىل العنا�ص��ر يف م�صفوف��ة numpyثنائي��ة االأبع��اد ع��رب ال�صيغ��ة الربجمي��ة [ ]i,jفعل��ى �ص��بيل
املثال:
arr = numpy.full((4,4), 0) # creates a 4x4 array full of zeros [[0 0 0 ]0
[0 0 0 ]0
)print(arr [0 0 0 ]0
[0 0 0 ]]0
arr[0, 0] = 1
arr[3, 3] = 1 [[1 0 0 ]0
[0 0 0 ]0
)(print [0 0 0 ]0
)print(arr [0 0 0 ]]1
ي�ص� ِ
�تخدم املقط��ع الربجم��ي االأداة () productم��ن املكتب��ة itertoolsحل�ص��اب جمي��ع انتق��االت املواق��ع املحتمل��ة ،فعل��ى
�صبيل املثال:
}ids = {0, 1, 2 0 0
for i, j in list(product(ids, ids)): 0 1
)print(i, j 0 2
1 0
1 1
1 2
2 0
2 1
2 2
289
، الإن�ص��اء خوارزمي��ة ح� ّل برجم��ة ا أالع��داد ال�صحيح��ة املختلط��ةmip ي�ص��تخدِ م املقط��ع الربجم��ي الت��ايل مكتب��ة البايث��ون
:متغر قرار ثُنائي لكل انتقال ممكن يف ن�صخة م�صكلة البائع املُتجوّل التي مت اإن�صاوؤها �صابقًا ِّ ثم ي�صيف
from itertools import product # used to generate all possible transition
from mip import BINARY
from mip import Model,INTEGER
# 'product' creates every transition from every location to every other location
transitions = list(product(location_ids, location_ids))
لتخزي�ن املتغ ِّ�راتNxN بحج�مnumpy الإن�ص�اء م�صفوف�ةnumpy.full)( ي�ص�تخدِ م املقط�ع الربجم�ي ال�ص�ابق اأداة
.x الثنائية
ُميك�ن ا�ص�تخدام املقط�ع الربجم�ي الت�ايل ل�صياغ�ة وح�ص�اب الدال�ة املو�صوعي�ة مل�ص�كلة،x بع�د اإ�صاف�ة متغ ِّ�رات الق�رار
متغر
ِّ معdist_matrix]i,j[ وتُ�صرب م�صافتهاj і i حيث تقوم الدالة بالتكرار على كل انتقال ممكن،البائع املُتجوّل
وبخ�الف ذل�ك، بع�ني االعتب�ارdist_matrix]i,j[ وx]i,j[=1 واإذا مت اإدراج االنتق�ال يف احل� ّل �ص�يوؤخذ،x]i,j[ قراره�ا
: يف �صفر ليتم جُتاهُ لُهاdist_matrix]i,j[ �صتُ�صرب
# the minimize tool is used then the objective function has to be minimized
from mip import xsum, minimize
،ته��دف اخلط��وة التالي��ة اإىل التاأك��د ب�اأن اخلوارزمي��ة تُظه��ر احلل��ول الت��ي ت�صم��ن زي��ارة كل املواق��ع مل�رَّة واح��دة فق��ط
وزي ��ارة كل موق ��ع م ��رة، (االنط ��الق والتوقف)ح�ص ��ب م ��ا تتطلب ��ه م�ص ��كلة البائ ��ع املُتج �وّلstartstop با�ص ��تثناء موق ��ع
:واحدة تعني اأن الطريق ال�صحيح ُميكن اأن
.• ي�صل اإىل كل موقع مرة واحدة فقط
.• يغادر من كل موقع مرة واحدة فقط
:ُوميكن اإ�صافة قيود الو�صول واملغادرة هذه ب�صهولة كما يلي
# for each location id
for i in location_ids:
solver += xsum(x[i,j] for j in location_ids - {i}) == 1 # exactly 1 arrival
solver += xsum(x[j,i] for j in location_ids - {i}) == 1 # exactly 1 departure
290
ت�ص��مل ال�صيغة الكاملة مل�ص��كلة البائع املُتجوّل نوعً ا اإ�صافيًا اآخرًا من القيود ل�صمان ح�ص��اب الطُ رق املت�صلة ،ففي ن�ص��خة
م�صكلة البائع املُتجوّل الواردة يف ال�صكل ُ 5.8يفرت�ص اأن املوقع 0هو موقع االنطالق والتوقف.
يف ه�ذا املث�ال ،اأق�ص�ر طري�ق ممك�ن ه�و ،2 і 1 і 4 і 3 і 0
2 مب�ص�افة �ص�فر اإجمالي�ة قدره�ا ،24ولك�ن عند عدم وج�ود قيد ات�صال
5
�ص�يكون هن�اك ح� ّل �صحي�ح اآخ�ر ي�ص�مل طريق�ني غ�ر مت�صل�ني هم�ا:
0 і 4 і 3 і 0و ،1 і 2 і 1وهذا احل ّل املتمثل يف وجود طريقني
5 6
1 ميتث�ل لقي�ود الو�ص�ول واملغ�ادرة الت�ي مت تعريفه�ا يف املقط�ع الربجم�ي
4 ال�ص�ابق؛ الأن كل موق�ع يدخ�ل ل�ه ويخ�رج من�ه م�رة واح�دة فق�ط ،ولكن
7 5 هذا احل ّل غر مقبول مل�صكلة البائع املُتجوّل.
0 3 3 ُميك�ن فر��ص ح� ّل ي�ص�مل طريقً�ا واح�دً ا مت�ص ً�ال باإ�صافة متغ ِّ�ر القرار
yiل�كل موق�ع ،iو�ص�تحافظ ه�ذه املتغ ِّ�رات عل�ى ترتيب زي�ارة كل موقع
�صكل :5.8ن�صخة م�صكلة البائع املُتجوّل يف احللّ.
عل��ى �ص��بيل املث��ال ،اإذا كان احل� ّل ه��و ،0 і 2 і 1 і 4 і 3 і 0 :ف�ص��تكون قي��م yكم��ا يل��يy3=0، y4=1، y1=2، :
،y2=3واملوقع 0هو موقع االنطالق والتوقف ،ولذلك ال توؤخذ قيمة yاخلا�صة به بعني االعتبار.
ُميك��ن ا�ص��تخدام متغ� ِّ�رات الق��رار اجلدي��دة ه��ذه ل�صم��ان االت�ص��ال م��ن خ��الل اإ�صاف��ة قي��د جدي��د ل��كل انتق��ال j і iال
ي�صمل موقع ( startstopاالنطالق والتوقف).
# adds a connectivity constraint for every transition that does not include the startstop
for (i, j) in product(location_ids - {startstop}, location_ids - {startstop}):
# ignores transitions from a location to itself
if i != j:
solver += y[j] - y[i] >= (N+1) * x[i, j] - N
اإذا كان��ت xij=1النتق��ال j і iومت اإدراج ه��ذا االنتق��ال يف احل � ّل ،ف �اإن املتباين��ة ال��واردة يف االأعل��ى ت�صب��ح
،y]j[ <= y]i[ 1ومعن��ى ذل��ك اأن املواق��ع الت��ي �ص�تُزا ُر الح ًق��ا ال ب��د اأن تك��ون قيم��ة yاخلا�ص��ة به��ا اأعل��ى ،باالإ�صاف��ة اإىل
قيود الو�صول واملغادرة ،و�صيكون الطريق الذي ال ي�صمل موقع االنطالق والتوقف �صحيحً ا فقط اإذا:
• بداأ وانتهى باملوقع نف�صه؛ ل�صمان اأن يكون لكل موقع و�صو ٌل واح ٌد ومغادرة واحدة فقط.
• خُ �ص�ص��ت قي��م yاأعل��ى ل��كل املواق��ع الت��ي �ص�تُزا ُر الح ًق��ا؛ الأن [ y]jيج��ب اأن تك��ون اأك��رب م��ن [ y]iل��كل االنتق��االت الت��ي
أي�ص��ا اإىل جُتن��ب اإ�صاف��ة احلاف��ة نف�ص��ها م��ن اجُت��اه ُخُمتل��ف ،عل��ى �ص��بيل املث��ال:مت اإدراجه��ا يف الطري��ق ،وي�وؤدي ه��ذا ا ً
jіiوiіj
ولك��ن اإذا كان املوق��ع ميث��ل بداي��ة الطري��ق ونهايت��ه ،ف��ال ب� ّد اأن تك��ون قيم��ة yاخلا�ص��ة ب��ه ه��ي اأك��رب واأ�صغ��ر م��ن قي��م كل
املواقع الباقية يف الطريق ،ونظرًا ال�ص��تحالة هذا االأمر ،ف�ص� ُتوؤدي اإ�صافة قيد االت�صال اإىل ا�ص��تبعاد اأية حلول بها طُ رق
ال ت�صمل موقع االنطالق والتوقف.
291
ال��وارد يف احل� ّل املُك�وَّن م��ن طريق��ني لن�ص��خة م�ص��كلة البائ��ع املُتج�وّل1 і 2 і 1 ف ِّك��ر يف الطري��ق،عل��ى �ص��بيل املث��ال
، وه��ذا م�ص��تحيل،y1 ш y2 1 واأن تك��ونy2 ш y1 1 حي��ث يتطل��ب قي��د االت�ص��ال اأن تك��ون،املو�صح��ة يف ال�ص��كل ال�ص��ابق
.ّفلذلك �صيتم ا�صتبعاد احلل
،y1 ш y4 1 واأن تك��ونy4 ш y3 1 اأن تك��ون0 і 2 і 1 і 4і 3 і 0 يتطل��ب احل � ّل ال�صحي��ح،يف املقاب��ل
وال تنطب��ق،y2=3 وy1=2 وy4=1 وy3=0 : كم��ا ي أات��يy ُوميك��ن حتقي��ق ذل��ك ب�صب��ط قي��م،y2 ш y1 1 واأن تك��ون
.) (االنطالق والتوقفstartstop قيود االت�صال على االنتقاالت التي ت�صمل موقع
:َجُتمع الدالة التالية كل االأ�صياء معًا الإن�صاء خوارزمية ح ّل برجمة االأعداد ال�صحيحة املختلطة مل�صكلة البائع املُتجوّل
from itertools import product
from mip import BINARY,INTEGER
from mip import Model
from mip import xsum, minimize
1.0
توؤك��د النتائ��ج اأن خوارزمي��ة ح � ّل برجم��ة االأع��داد ال�صحيح��ة املختلط��ة تُظهِ ��ر احل � ّل االأمث��ل بن�ص��بة 100%ل��كل نُ�ص��خ
ويو�صح املقطع الربجمي التايل �صرعة خوارزمية ح ّل برجمة االأعداد ال�صحيحة املختلطة من خالل ا�صتخدامها امل�صكلةِّ ،
حل ّل 100ن�صخة كبرة تت�صمن ك ٌّل منها 20موقعًا:
import time
188.90074133872986
عل��ى الرغ��م م��ن اأن وق��ت التنفي��ذ الدقي��ق �ص��يعتمد عل��ى ق��وة معاجلة اجلهاز ال��ذي ت�ص��تخدِ مه لتنفيذ مفكرة جوبي��رت ،اإال اأنه من
املفرت�ص اأن ي�صتغرق التنفيذ ب�صع دقائق حل�صاب احل ّل جلميع جمموعات البيانات املئة.
و ه ��ذا ب ��دوره مذ ه ��ل اإذا مت ا أال خ ��ذ يف االعتب ��ار اأن ع ��دد الطُ ��رق ا ملُمكن ��ة ل ��كل ن�ص ��خة م ��ن النُ�ص ��خ املئ ��ة ه ��ي:
19͑ = 121,645,100,000,000,000طري ًق��ا ُخُمتل ًف��ا ،ومث��ل ه��ذا الع��دد الكب��ر من الطُ رق يفوق بكثر قدرات اأ�ص��لوب القوة
املُفرط��ة ،وم��ع ذل��ك فاإن��ه ع��ن طري��ق البح��ث الف ّع��ال يف ه��ذه امل�ص��احة الهائل��ة اخلا�ص��ة بجميع احلل��ول املُمكنة ُميك��ن خلوارزمية
ح ّل برجمة االأعداد ال�صحيحة املختلطة اأن جُتد الطريق االأمثل ب�صرعة.
أي�ص��ا ،فهي تتطلب فه ًم��ا قويًا للنمذج��ة الريا�صية وقد وعل��ى الرغ��م م��ن مزاي��ا الربجم��ة الريا�صي��ة اإال اأنه��ا متل��ك قي��ودًا خا�صة ا ً
ال تك��ون منا�ص��بة للم�ص��كالت املعق��دة الت��ي ي�صع��ب فيه��ا التعبر عن الدالة املو�صوعية والقيود بوا�ص��طة ال�صي��غ الريا�صية ،وعلى
الرغم من اأن الربجمة الريا�صية اأ�صرع بكثر من اأ�صلوب القوة املُفرطة اإال اأنها قد تظل بطيئة جدً ا بالن�صبة ملجموعات البيانات
بديال اأكر �صرعة.املو�صح يف الدر�صني ال�صابقني ً يقدم االأ�صلوب اال�صتداليل َّ الكبرة ،ويف مثل هذه احلاالت ِّ
293
مترينات
1ا�صرح طريقة ا�صتخدام الربجمة الريا�صية حل ّل م�صكالت التح�صني املعقدة.
2ما مزايا �عيوب اأ�صلوب برجمة اآلأعداد ال�صحيحة املختلطة يف ح ّل م�صكالت التح�صني؟
294
متغرات احلالة
3قم بتحليل م�ص��كلتني من م�ص��كالت التح�ص��ني ُميكن حلهما با�ص��تخدام الربجمة الريا�صية ،ثم حدِّد ِّ
�متغرات القرار اخلا�صة بهما.
ِّ
295
م��ن خ��الل اإكم��ال املقط��ع الربجم��ي الت��ايل بحي��ث، اأن�ص� دال��ة خوارزمي��ة ح� ّل الق��وة امل ُفرط��ة مل�ص��كلة البائ��ع امل ُتج�وّل5
:تُظهر الدالة امل�صار اآلأف�صل �امل�صافة اآلإجمالية امل ُثلى
location_ids = - { }
all_routes = ( )
if distance < best_distance: # if this route has lower distance than the best route
best_distance = distance
best_route = route
# adds the startstop location at the beginning and end of the best route and returns
296
من خالل اإكمال املقطع الربجمي، اأن�ص خوارزمية ح ّل برجمة اآلأعداد ال�صحيحة املختلطة مل�صكلة البائع امل ُتجوّل6
:متغرات القرار �قيود اآلت�صال انتقا ًء �صحيحً ا
ِّ بحيث تنتقي،التايل
# Arrive/Depart Constraints
for i in location_ids:
# Adds connectivity constraints for transitions that do not include the startstop
for (i, j) in product(location_ids - {startstop}, location_ids -
{startstop}):
if i != j: # ignores transitions from a location to itself
solver += y[j] - y[i] >= (N + 1) * x[i, j] - N
297
الم�سروع
افرت���ص اأن��ك تعم��ل يف �ص��ركة تو�صي��ل ،وطل��ب من��ك مدي��رك اأن جُت��د امل�ص��ار االأك��ر
كفاءة لتو�صيل الطرود اإىل مواقع متعددة يف املدينة.
يتم ّث��ل اله��دف يف اإيج��اد اأق�ص��ر م�ص��ار ممك��ن لزيارة كل موقع م��رة واحدة فقط ومن
ثمَّ العودة اإىل موقع البدء .هذه امل�صكلة مثال على م�صكلة البائع امل ُتجوّل (.)TSP
1
�ص��تقوم باإن�ص��اء اأمثل��ة متع��ددة على م�ص��كلة البائع املُتجوّل ت�ص��مل مواق��ع عددها من 3
اإىل ،12و�صترتاوح امل�صافة يف كل مثال من 5وحدات اإىل 20وحدة.
2
اأن�ص��ئ دال��ة ر�ص��م نق��اط با�ص��تخدام مكتب��ة matplotlibتر�ص��م اأف�ص��ل م�ص��ار تُنتج��ه
خوارزمي��ة احل�لّ ،ميكن��ك ا�ص��تخدام ه��ذه الدال��ة فق��ط م��ع الن�ص��خة الت��ي ت�ص��مل 20
موقعًا.
3
اأن�ص��ئ دال��ة ر�ص��م نق��اط با�ص��تخدام مكتب��ة matplotlibتر�ص��م نق��اط اأداء كل م��ن
خوارزمي��ة ح� ّل الق��وة املُفرط��ة وخوارزمي��ة ح� ّل برجم��ة االأع��داد ال�صحيح��ة املختلطة
باملقارنة بينهما.
4
اكت��ب تقري�رًا موج��زً ا تناق���ص في��ه النتائ��ج الت��ي تو�صل��ت اإليه��ا بخ�صو���ص كف��اءة اأداء
خوارزميتي احللّ ،ومزايا وعيوب كل منهما.
298
ماذا تع ّلمت
امل�سطلحات الرئي�سة
Constraint
Mixed Integer برجمة اآلأعداد ال�صحيحة
Programming
الربجمة القيدية Programming املختلطة
ptimi ation
Greed euristic خوارزمية ا�صتدآللية Problem
م�صكلة التح�صني
Algorithm ج�صعة uadratic
الربجمة الرباعية
Greedy Solver خوارزمية ح ّل ج�صعة Programing
Scheduling
Problem Team
جد�لة م�صكلة تكوين
Integer
برجمة اآلأعداد ال�صحيحة Formation فريق
Programming
Traveling
Knapsack خوارزمية ح ّل م�صكلة Salesman م�صكلة البائع امل ُتجوّل
Problem Solver حقيبة الظهر Problem
299
.6ال��ذكاء األ�سطناعي واملجتمع
�سيتعرّ ف الطالب يف هذه الوحدة على اأخالقيات الذكاء األ�سطناعي وتاأ ريها على تطوير
اأن مته املتقدمة وحتديد توجهاتها ،و�سيُقيِّم مدى تاأ ري اأن مة الذكاء األ�سطناعي وا�سعة
النطا على املجتمعات والبي ة ،وكيفية تن يم مثل هذه األأن مة لال�س�تخدام األأخالقي
ُ�س�رية على
ة طائرة م َّ املُ�س�تدام ،و�سي�س�تخدِ م بعد ذل ُحماكي ويبوت��ص ( )Webotsل
احلركة الذاتية وا�ستك�ساف منطقة ما من خالل حتليل ال�سور.
اأهداف التعلُّم
بنهاية هذه الوحدة �سيكون الطالب قادرًا على اأن:
يُعرِّ ف اأخالقيات الذكاء األ�سطناعي.
يُف�سِّ ��ر م��دى تاأ ��ري التح ُّي��ز واألإن�س��اف عل��ى األ�س��تخدام األأخالقي ألأن م��ة الذكاء
األ�سطناعي.
يُقيِّم كيفية حل م�س��كلة ال�س��فافية وقابلية التف�س��ري يف الذكاء األ�سطناعي.
يُح ِّل ��ل كيفي ��ة تاأ ��ري اأن م ��ة ال ��ذكاء األ�سطناع ��ي وا�س ��عة النط ��ا عل ��ى املجتم ��ع
وكيفية و سع قوان لتن يمها.
ُ�سرية على احلركة الذاتية. ُي مج جهاز الطائرة امل َّ
ُ�سرية تُ�ستخدم يف ا�ستطالع منطقة معينة . يُطوِّر ن ام حتليل ال�سور لطائرة م َّ
األأدوات
ويبوت�ص ()Webots
مكتبة اأوبن �سي يف ()OpenCV
300
الدر�ص األأول
مقدمة يف اأخالقيات الذكاء األ�سطناعي
ن رة عامة على اأخالقيات الذكاء األ�سطناعي
اأخالقيات الذكاء األ�سطناعي Overview of AI Ethics
(:)AI Ethics مع ا�ص�تمرار تق ُّدم الذكاء اال�صطناعي تزايدت اأهمية التفكر يف االآثار االأخالقية املرتتبة
ت�ص��ر اأخالقيات ال��ذكاء اال�صطناعي عل�ى ا�ص�تخدام ه�ذه التقني�ة ،وم�ن امله�م اأن يفه�م املواط�ن يف عَ املَ ن�ا احلدي�ث ال�دور اله�ام
اإىل املب��اد ،والقي��م ،واملعا ي��ر الأخالقيات الذكاء اال�صطناعي اإذا اأردنا تطوير اأنظمة ذكاء ا�صطناعي م�صوؤولة وا�صتخدامها.
االأخالقي��ة الت��ي تُنظّ ��م تطوي��ر اأنظم��ة اإن أاح�د االأ�ص�باب الرئي�ص�ة للتاأكي�د عل�ى اأهمي�ة اأخالقي�ات ال�ذكاء اال�صطناع�ي ه�و التاأثر
ا ل��ذكاء اال�صطنا ع��ي وانت�ص��ارها الكبر الأنظمة الذكاء اال�صطناعي على حياة االن�ص�ان .على �ص�بيل املثالُ ،ميكن ا�ص�تخدام
وا�صتخدامها. خوارزمي�ات ال�ذكاء اال�صطناعي التخ�اذ قرارات التوظيف والعالج الطبي ،واإذا كانت هذه
اخلوارزميات ُمتح ِّيزة اأو متييزية ،فقد ُتوؤدي اإىل نتائج غر عادلة ُت�صر باالأفراد واملجتمعات.
ال الذكاء األ�سطناعي اأمثلة من العا الواقعي على املخاوف األأخالقية يف
Real-World Examples of Ethical Concerns in AI
اخلوارزميات التمييزية
هناك مواقف تدل على اأن اأنظمة الذكاء اال�صطناعي متيل اإىل التح ُّيز والتمييز �صد فئات معيّنة من الب�ص�ر .على �ص�بيل املثال،
وج�دت درا�ص�ة اأجراه�ا املعه�د الوطن�ي للمعاي�ر �التقني�ة ( )National Institute of Standards and Technologyاأن
ِن�صب اخلطاأ يف تقنية التع ُّرف على الوجه تكون اأعلى عند التع ُّرف على وجوه االأ�صخا�ص ذوي الب�صرة الداكنة؛ مما قد ُيوؤدي اإىل
حتدي�د هوي�ات خاطئ�ة واعتق�االت خاطئ�ة .وم�ن االأمثل�ة االأخ�رى عل�ى ذلك ا�ص�تخدام خوارزميات ال�ذكاء اال�صطناع�ي يف نظام
العدالة اجلنائية ،اإذ اأظهرت الدرا�صات اأن هذه اخلوارزميات ُميكن اأن تكون ُمتح ِّيزة �صد االأقليات مما ُيوؤدي اإىل عقوبات اأق�صى.
اخل�سو�سية
ُ انتها
للخ�صو�صية ال�ص��خ�صية .على ُميكن اأن تكون اأنظمة الذكاء اال�صطناعي التي جُتمع البيانات ُوحتلِّلها م�صدر تهديد ُ
�تخدمي في�ص��بوك �ص��بيل املث��ال :جمع��ت �ص��ركة ا�صت�ص��ارات �صيا�ص��ية يف ع��ام 2018م بيان��ات املالي��ني م��ن م�ص� ِ
( )Facebookدون موافقته��م وا�ص��تخدمتها للتاأث��ر عل��ى احلم��الت ال�صيا�ص��ية ،و أاث��ار ه��ذا احل��ادث املخ��ا ِوف ب�ص�اأن
ا�صتخدام الذكاء اال�صطناعي وحتليالت البيانات يف التالعب بالراأي العام ،وانتهاك حقوق خ�صو�صية االأفراد.
األأ�سلحة ذاتية التحكم
تطوي��ر االأ�ص��لحة ذاتي��ة التحك��م الت��ي ُميك��ن اأن تعم��ل دون تدخ��ل ب�ص��ري ل��ه خُم��اوف اأخالقية ب�ص�اأن ا�ص��تخدام الذكاء
اال�صطناع��ي يف احل��روب ،حي��ث ي��رى فري��ق م��ن املنتقدي��ن اأن ه��ذه االأ�ص��لحة ُميك��ن اأن تتخ��ذ ق��رارات م�صري��ة دون
اإ�ص��راف ب�ص��ري ُوميكن برجمتها ال�ص��تهداف جمموعات معيّنة من النا���ص ،مما قد ينتهك القانون االإن�ص��اين الدويل،
و ُيوؤدي اإىل وقوع اإ�صابات يف �صفوف املدنيني.
الت�سريح من الوظائف
اأثاراال�ص��تخدام املتزاي��د لل��ذكاء اال�صطناع��ي واآلأ ت��ة ( )Automationيف خُمتل��ف ال�صناع��ات املخ��ا ِوف ب�ص�اأن
ت�ص��ريح الب�ص��ر م��ن وظائفه��م وتاأث��ره عل��ى ُ�ص��بل عي���ص العامل��ني ،فعل��ى الرغ��م م��ن اأن ال��ذكاء اال�صطناع��ي ُميكن��ه اأن
أي�صا اإىل فقدان الب�صر لوظائفهم وتزايد عدم امل�صاواة ُيوؤدي اإىل حت�صني الكفاءة واالإنتاجية ،اإال اأنه ُميكن اأن ُيوؤدي ا ً
يف الدخل؛ مما قد يكون له عواقب اجتماعية واقت�صادية �صلبية.
301
التح ُّيز واألإن�ساف يف الذكاء األ�سطناعي Bias and Fairness in AI
ُميكن اأن يظهر التحيُّز ( )Biasيف اأنظمة الذكاء اال�صطناعي عندما تكون البيانات
حتيُّز الذكاء األ�سطناعي (:)AI Bias �تخدمة لتدري�ب اخلوارزم ّي�ة ناق�ص�ة التمثي�ل اأو حتت�وي على حت ُّيزات اأ�صا�ص�ية، امل�ص َ
يف جم��ال ال��ذكاء اال�صطناع��ي ،ي��دل التح ُّيز ُوميكن اأن يظهر يف اأية بيانات ُمتثِّلها ُخُم َرجات النظام ،فعلى �صبيل املثال ال احل�صر:
عل��ى مي��ل خوارزميات التعلُّم االآيل اإىل اإنتاج املُنتَجات واالآراء واملجتمعات واالجُتاهات كلها ميكن اأن يظهر فيها التح ُّيز.
نتائ��ج حتاب��ي بدائ��ل ،اأو فئ��ات مع ّين��ة ،اأو �تخدم ال�ذكاء اال�صطناع�ي لفح��ص املر�ص�حني ُيع� ُّد نظ�ام التوظي�ف االآيل ال�ذي ي�ص ِ
تظلمه��ا باأ�ص��لوب منهج��ي؛ مم��ا ي �وؤدي اإىل للوظائف من اأبرز االأمثلة على اخلوارزم ّية املُتح ِّيزة .افرت�ص اأن اخلوارزم ّية مُدرَّبة
القي��ام بتنب �وؤات خاطئ��ة واإىل احتمالي��ة ُف�ص�ل جمموع�ات عل�ى بيان�ات ُمتح ِّي�زة ،مث�ل أامن�اط التوظي�ف التاريخي�ة الت�ي ت ِّ
التميي��ز �ص��د مُنتَجات معيّنة اأو فئات ب�ص��رية دميوغرافية معيّنة ،ففي هذه احلالة قد يعمل الذكاء اال�صطناعي على ا�صتمرار تلك
حم َّددة. متجاهال
ً التح ُّيزات وي�صتبعد املر�صّ حني املو ّؤهلني ب�صكل غر عادل من بني املجموعات
الفئات غر املمثَّلة جيدًا يف جمموعة البيانات .على �صبيل املثال ،افرت�ص اأن اخلوارزم ّية تُف�صل املر�صحني الذين التحقوا بجامعات النخبة،
اأو عملوا يف �صركات مرموقة ،ففي هذه احلالة قد يلحق ذلك ال�صرر باملر�صحني الذين مَل يحظوا بتلك ال ُفر�ص ،اأو الذين ينتمون اإىل بيئات
أاق�ل حظًّ �اُ ،وميك�ن اأن ُي�وؤدي ذل�ك اإىل نق��ص التن�وع يف م�كان العم�ل واإىل ا�ص�تمرارية ع�دم امل�ص�اواة ،ولذل�ك م�ن امله�م تطوي�ر وا�ص�تخدام
خوارزميات توظيف للذكاء اال�صطناعي تَ�صت ِند على معاير عادلة و�صفافة ،وغر مُتح ِّيزة.
ي�صر اآلإن�صاف ( )Fairnessيف الذكاء اال�صطناعي اإىل كيفية تقدمي اأنظمة الذكاء اال�صطناعي لنتائج غر ُمتح ِّيزة وعلى معاملتها جلميع
ُن�صفة ،ولتحقيق االإن�صاف يف الذكاء اال�صطناعي يتطلب ذلك حتديد التح ُّيزات يف البيانات واخلوارزميات عاملة م ِ
االأفراد واملجموعات ُم َ
وعملي�ات اتخ�اذ الق�رار ومعاجلته�ا .عل�ى �ص�بيل املثال ،تتمثّ�ل اإحدى طرائق حتقيق االإن�ص�اف يف الذكاء اال�صطناعي يف ا�ص�تخدام عملية
تُ�صمى اإلغاء اآلنحياز ( ،)Debiasingحيث يتم حتديد البيانات املُتحيِّزة واإزالتها اأو تعديلها مبا ي�صمن و�صول اخلوارزم ّية اإىل نتائج اأكر
دقة دون حت ُّيز.
ox إاج��راء التح�ص��ينات والت أاك��د م��ن اأنه��ا تعمل بطريق��ة �صحيحة ،وهناك ا�ص��رتاتيجيات عديدة
a ck-B ملعاجلة م�صكلة ال�صندوق االأ�صود يف الذكاء اال�صطناعي .تتمثّل اإحدى تلك اال�صرتاتيجيات
Bl
? يف ا�ص��تخدام تقني��ات ذكاء ا�صطناع��ي قابل��ة للتف�ص��ر جلع��ل من��اذج تعلُّ��م االآلة اأكر �ص��فافية
واأك ��ر قابلي ��ة للتف�ص ��ر ،وق ��د ت�ص ��مل ه ��ذه التقني ��ات :مُف�ص ��رات اللغ ��ات الطبيعي ��ة
) ( )Natural Language Explanationاأو ت�صوي ��ر البيان ��ات للم�ص ��اعدة يف فه ��م عملي ��ة
اتخاذ القرار ،وهناك اأ�صلوب اآخر يتمثل يف ا�صتخدام مناذج تعلُّم االآلة االأكر قابلية للتف�صر
امل ُخرَجات مث ��ل :اأ�ص ��جار الق ��رار ( )Decision Treesاأو اآلنح ��دار اخلط ��ي (،)Linear Regression
�صكل :6.1نظام ال�صندوق االأ�صود ورمب��ا تك��ون ه��ذه النم��اذج اأق��ل تعقي��دًا واأ�ص��هل يف الفهم ،ولكنها قد ال تكون قوي��ة اأو دقيقة مثل
النم��اذج االأك��ر تعقي��دًا .تعترب معاجلة م�ص��كلة ال�صندوق االأ�ص��ود يف ال��ذكاء اال�صطناعي اأم ًرا
مه ًّما لبناء الثقة يف مناذج تعلُّم االآلة و�صمان ا�صتخدامها باأ�صلوب اأخالقي وعادل.
طرائق تعزيز �سفافية مناذج الذكاء األ�سطناعي وقابليتها للتف�سري
Methods for Enhancing the Transparency and Explainability of AI Models
النموذج املحايد املحلي القابل للتف�سري وال�سر
النم��وذج املحاي��د املحل��ي القاب��ل للتف�ص��ر �ال�ص��رح ( )Local Interpretable Model-Agnostic Explanations -LIMEمت
ا�صتخدامه م�صبقًا يف مهام معاجلة اللغات الطبيعية( ،)NLPوتقوم هذه التقنية بتوليد تف�صرات حملية لتنبوؤات مفردة يتم اإجراوؤها
وقابال للتف�ص��ر يقارب منوذج ال�صندوق االأ�ص��ود املُعقَّد حول تنبوؤ حم َّدد ،ثم
بوا�ص��طة منوذج ،و ُتن�ص��ئ هذه التف�ص��رات منوذجً ا اأب�ص��ط ً
تو�صل اإىل قراره ب�ص�اأن هذا التنبوؤ املحدَّد .تتمثّل ميزة هذه التقنية يف اأنها ُتوفر تف�ص��رات
ُي�ص��تخدم هذا النموذج الب�ص��يط ل�ص��رح كيف ّ
ُميك��ن لالإن�ص��ان قراءته��ا ،وبالت��ايل ُميك��ن الأ�صحاب امل�صلحة غر املتخ�ص�صني فهمها ب�ص��هولة؛ حتى فيم��ا يتعلق بالنماذج املُع َّقدة مثل:
ال�صبكات الع�صبية العميقة (.)Deep Neural Networks
تف�سيرات �سابلي األإ سافية
تف�ص��رات �ص��ابلي اآلإ�صافي��ة ( )SHapley Additive exPlanations - SHAPه��ي طريق��ة اأخ��رى لتف�ص��ر ُخُم َرج��ات من��اذج تعلُّ��م
ُخ�ص���ص قيم��ة (اأو وَز ًن��ا) ل��كل خا�صي��ة
االآل��ة ،وتعتم��د عل��ى املفه��وم اخلا���ص بقي��م �ص��ابلي م��ن نظري��ة اآلألع��اب ( )Game Theoryوت ِّ
305
تبني اأهميّة اخل�صائ�ص، تف�صرات يف �صكل درجات ّ ٍ م�صاهمة يف التنبوؤُ .ميكن ا�صتخدام الطريقة مع اأي منوذج ،كما تقدم صخة،
مما ُميكن اأن ي�صاعد يف حتديد اخل�صائ�ص االأكر تاأثرًا يف ُخُم َرجات النموذج. إج��راء
وهن��اك تقني��ة أاخ��رى لتح�ص��ني قابلي��ة تف�ص��ر الذكاء اال�صطناعي مثل :اأ�ص��جار القرار وقواعد الق��رار ،وهي مناذج قابلة ميكن
للتف�ص��ر ُميك��ن ت�صويره��ا ب�ص��هولة ،حي��ث تق��وم اأ�ص��جار الق��رار بتق�ص��يم ف�ص��اء اخل�صائ���ش ( )Feature Spaceبن��ا ًء صعه��ا
عل��ى اخلا�صي��ة االأك��ر دالل��ة ،وتق� ِّ�دم قواع��د وا�صح��ة التخ��اذ القرارات ،و ُتع ُّد اأ�ص��جار الق��رار مفيدة ب�ص��كل خا�ص عندما عاية ال�صحية
أي�صا؛ الأن قابلية
تتخذ البيانات �صكل اجلداول ويكون هناك عدد حمدود من اخل�صائ�ص .ولكن هذه النماذج حمدودة ا ً الآث��ار
تف�ص��ر �ص��جرة القرار التي مت اإن�ص��اوؤها تتنا�ص��ب تنا�ص� ًبا عك�ص� ًّيا مع حجم ال�ص��جرة .على �ص��بيل املثال ،من ال�صعب فهم وم��ن ثمّ تتخذ
ي�صتخدم تقنيات مثل� :كالء الذكاء ِ االأ�صجار التي تتكون من اآالف العقد ومئات امل�صتويات .واأخرًا ،هناك اأ�صلوب اآخر مة يف التموي��ل
اآل�صطناع��ي ( )Artificial Intelligence Agentsاأو حتلي��ل احل�صا�ص��ية ( )Sensitivity Analysisللم�ص��اعدة
يف فه��م كيفي��ة تاأث��ر تغي��ر املُدخَ ��الت اأو االفرتا�ص��ات عل��ى ُخُم َرج��ات النم��وذجُ ،وميك��ن اأن يك��ون ه��ذا االأ�ص��لوب مفي��دً ا صوؤول
ب�صكل خا�ص يف حتديد م�صادر الغمو�ص يف النموذج ويف فهم حدوده.
األ�ستدألل القائم على ال ِقيم يف اأن مة الذكاء األ�سطناعي
Value-Based Reasoning in AI Systems
األ�ستدألل القائم على ال ِقيم
(:)Value-Based Reasoning يتمثّل الهدف من ذلك يف اإن�صاء اأنظمة ذكاء ا�صطناعي اأكر ات�صاقًا مع القيم
واالأخالقي��ات الب�ص��رية؛ بحي��ث تتعام��ل ه��ذه االأنظم��ة بطرائ��ق مفي��دة ومن�صف��ة
اال�ص�تدالل القا ئ�م عل�ى ال ِقي�م يف
اأنظم�ة ال�ذكاء اال�صطناع�ي ي�ص�ر اإىل وم�صوؤولة .تت�صمن اخلطوة االأوىل يف اال�صتدالل القائم على ال ِقيمَ ،
فهم ومتثيل
العملي�ة التي ي�ص ِ ال ِقي��م االأخالقي��ة داخ��ل اأنظم��ة ال��ذكاء اال�صطناع��ي ،حي��ث يج��ب اأن تك��ون هذه
�تخدمها وكالء الذكاء االأنظم��ة ق��ادرة على تف�ص��ر وتوطني القي��م اأو املباد التوجيهية االأخالقية التي
اال�صطنا ع�ي التخ�اذ ق�رارات اأو ُيقدمه��ا من�ص�وؤها الب�ص��ريون اأو اأ�صح��اب امل�صلح��ة ،وق��د تت�صم��ن ه��ذه العملي��ة
ا�ص�تخال�ص نتائ�ج بن�ا ًء عل�ى جمموع�ة التعلُّ��م م��ن االأمثل��ة اأو التغذي��ة الراجع��ة الب�ص��رية اأو القواع��د الوا�صحة ،وعندما
حم� َّددة م�ص�بقًا م�ن القي�م اأو املب�اد تفه��م اأنظم��ة ال��ذكاء اال�صطناعي هذه القيم بو�ص��وحُ ،ميكنها اأن تقوم مبواءمة
اأو االعتب�ارات االأخالقية. اأفعالها بطريقة اأف�صل مع املباد االأخالقية املن�صودة.
ا
امل ُخرَجات امل لقيم منوذج الذكاء اآل�صطناعي امل ُدخَ الت
م ح َّددة
�صب ًقا
307
ألُطر التن يمية ومعايري ال�سناعة
ا أ
Regulatory Frameworks and Industry Standards
تلعب االأُطر التنظيمية ومعاير ال�صناعة دورًا مهمًّا يف تعزيز تطبيقات الذكاء اال�صطناعي االأخالقية ،فباإمكان التنظيمات امل ِ
ُ�صاعدة
اأن ت�صم��ن َحت ُّم��ل املنظم��ات الت��ي تق��وم بتطوي��ر وا�ص��تخدام اأنظم��ة الذكاء اال�صطناعي امل�ص�وؤولية عن اأفعالها عن طري��ق حتديد توقُّعات
وعواق��ب وا�صح��ة لع��دم االمتث��ال ،وباإم��كان التنظيم��ات واملعاي��ر اأن ُحتف��ز املنظم��ات عل��ى اإعط��اء االأولوي��ة لالعتب��ارات االأخالقي��ة عن��د
تطوير وا�صتخدام اأنظمة الذكاء اال�صطناعي.
ال�سفافية
ُميكن اأن تعزِّ ز التنظيمات واملعاير ال�صفافية يف اأنظمة الذكاء اال�صطناعي مبطالبة املوؤ�ص�صات بالك�صف عن كيفية عمل اأنظمتها وعن
ِ
ت�صتخدمهاُ ،وميكن اأن ي�صاعد ذلك يف بِناء الثقة مع اأ�صحاب امل�صلحة وتقليل املخاوف من التح ُّيزات املحتملة اأو التمييز البيانات التي
املحتمل يف اأنظمة الذكاء اال�صطناعي.
تقييم املخاطر
ُميكن تقليل خُماطر العواقب غر املق�صودة اأو النتائج ال�ص��لبية الناجُتة عن ا�ص��تخدام الذكاء اال�صطناعي بو�صع التنظيمات واملعاير
املنا�صبة ،وذلك مبطالبة املنظمات باإجراء تقييمات للمخاطر ،وهذا يعني حتديد املخاطر واالأخطار املحتملة وتنفيذ �صمانات منا�صبة،
مما ُميكِّن التنظيمات واملعاير من امل�صاعدة يف تقليل االأ�صرار املحتملة على االأفراد واملجتمع.
تطوير ون�سر اأُطر عمل وا سحة للذكاء األ�سطناعي
ُميكن اأن ت�صجِّ ع التنظيمات واملعاير االبتكار بتوفر اإطار عمل وا�صح لتطوير اأنظمة الذكاء اال�صطناعي وا�صتخدامها؛ اإذ اأن ا�صتخدام
التنظيم��ات واملعاي��ر لتاأ�صي���ص فر���ص متكافئ��ة وتقدمي التوجيه بخ�صو�ص االعتبارات االأخالقية ُميكن اأن ي�ص��اعد املنظمات على تطوير
اأنظم��ة ال��ذكاء اال�صطناع��ي ون�ص��رها بطرائ��ق تتف��ق م��ع القي��م االأخالقي��ة واالجتماعي��ة .تلع��ب االأُطر التنظيمي��ة ومعاي��ر ال�صناعة دو ًرا
مه ًّم��ا يف تعزي��ز تطبيق��ات ال��ذكاء اال�صطناع��ي االأخالقي��ة ،وذل��ك بتوف��ر اإر�ص��ادات وحواف��ز وا�صح��ة للموؤ�ص�ص��ات حت��ى ُتعط��ي االأولوي��ة
لالعتب��ارات االأخالقي��ة والتنظيم��ات واملعاي��ر؛ مم��ا ي�صم��ن تطوير اأنظمة الذكاء اال�صطناعي وا�ص��تخدامها بطرائق تتما�ص��ى مع القيم
االجتماعية واالأخالقية.
التنمية امل�ستدامة للذكاء األ�سطناعي يف اململكة العربية ال�سعودية
Sustainable AI Development in the Kingdom of Saudi Arabia
م��ن املتو َّق��ع اأن ت�صب��ح تقني��ات ال��ذكاء اال�صطناع��ي واأنظمت��ه اأح��د العوامل الرئي�ص��ة
الت��ي ُت�وؤدي اإىل اإح��داث خل��ل يف القطاع��ات املالي��ة يف العدي��د من البل��دان ،وقد توؤثر
ب�ص��كل كب��ر عل��ى �ص��وق العم��ل ،وم��ن املتو َّق��ع يف ال�ص��نوات القادم��ة اأن ي�صب��ح ح��وايل
70 %م��ن االأعم��ال الروتيني��ة الت��ي يق��وم به��ا العم��ال موؤمتت��ة بالكام��ل .كم��ا اأن��ه م��ن
املتو َّق��ع اأن تخل��ق �صناع��ة ال��ذكاء اال�صطناع��ي �ص��بعة وت�ص��عني ملي��ون وظيف��ة جدي��دة
وت�صيف �صتة ع�صر تريليون دوالر اأمريكي اإىل الناجت املحلي االإجمايل العَاملَ ي.
لقد طوَّرت الهيئة ال�صعودية للبيانات �الذكاء اآل�صطناعي ()Saudi Data and Artificial Intelligence Authority - SDAIA
اأهدافًا ا�صرتاتيجية للمملكة ال�صتخدام تقنيات الذكاء اال�صطناعي املُ�صتدامة يف تنمية اململكة ،و�صتكون اململكة العربية ال�صعودية
مركزً ا عامليًا للبيانات والذكاء اال�صطناعي ،كما اأن اململكة ا�صت�صافت اأول قمة عاملية لهُ ،حيث ُميكن للقادة واملبتكرين مناق�صة
م�ص�تقبل الذكاء اال�صطناعي وت�ص�كيله ل�صالح املجتمع .اأما الهدف االآخر فيتمثل يف حتويل القوى العاملة يف اململكة من خالل
تطوي�ر البيان�ات املحلي�ة ودع�م املواه�ب يف ال�ذكاء اال�صطناع�ي .ومبا اأن الذكاء اال�صطناعي يقوم بتحويل اأ�ص�واق العمل عامليًا،
ف�اإن معظ�م القطاع�ات حتت�اج اإىل تكيي�ف البيان�ات وال�ذكاء اال�صطناعي ودجمه�ا يف التعليم والتدريب املهن�ي واملعرِ فة العامة،
وبذلك ُميكن اأن تكت�صب اململكة العربية ال�صعودية ميزة تناف�صية من حيث التوظيف واالإنتاجية واالبتكار.
308
اأم��ا اله��دف النهائ��ي فيتم ّث��ل يف ج��ذب ال�ص��ركات وامل�ص��تثمرين ع��ن طري��ق اأُط��ر عم��ل وحواف��ز تنظيمي��ة مرن��ة وم�ص��تقرة،
حيث �ص��رتكز االأنظمة على تطوير �صيا�ص��ات ومعاير للذكاء اال�صطناعي ،مبا فيها ا�ص��تخدامه ب�ص��كل اأخالقي .و�ص��يعمل
اإط��ار العم��ل عل��ى تعزي��ز التطوي��ر االأخالق��ي الأبح��اث وحلول ال��ذكاء اال�صطناعي ودعمه يف ظل توفر اإر�ص��ادات ومعاير
حلماية البيانات واخل�صو�صية؛ مما �ص ُيوفر اال�صتقرار والتوجيه الأ�صحاب امل�صلحة العاملني يف اململكة.
مثال
تُخط��ط المملك��ة العربي��ة ال�ص��عودية آل�ص��تخدام اأنظم��ة �تقني��ات ال��ذكاء اآل�صطناع��ي كاأ�صا���ش
لم�ص��ر�عي المدينتين العمالقتين نيوم (� )NEOMذا آلين ( .)THE LINEم�ص��ر�ع نيوم هو
مدينة م�صتقبلية �صيتم ت�صغيلها بالطاقة النظيفة� ،بها اأنظمة نقل متطورة� ،تقدِّم خدمات ذات
ِ
��صت�صتخدم تقنية عالية�� ،صتكون من�صة للتقنيات المتطورة ،بما في ذلك الذكاء اآل�صطناعي،
حل��ول الم��دن الذكي��ة لتح�ص��ين ا�ص��تهالك الطاق��ة �اإدارة حرك��ة الم��ر�ر �الخدم��ات المتقدم��ة
اآلأخ��رى�� .ص��يتم ا�ص��تخدام اأنظم��ة ال��ذكاء اآل�صطناع��ي فيه��ا لتح�ص��ين ج��ودة الحي��اة لل�ص��كان
�لتعزيز اآل�ص��تدامة.
�بالمث��ل� ،ص��تكون مدين��ة ذا آلي��ن مدين��ة خطي��ة خالي��ة م��ن الكرب��ون مبني��ة بتقني��ات ال��ذكاء
اآل�صطناع��ي�� ،صت�ص� ِ
�تخدم اأنظم��ة ال��ذكاء اآل�صطناع��ي آلأتمت��ة بنيته��ا التحتي��ة �اأنظم��ة النق��ل
فيها مما يجعل حياة المقيمين فيها تت�ص��م بال�صال�ص��ة �الكفاءة�� ،ص��تكون الطاقة التي �صتُ�ص�غِّل
المدينة طاقة نظيفة ،كما اأن اآلأ�لوية �ص��تكون للمعي�ص��ة الم�ص��تدامة�� ،ص��يتم ا�ص��تخدام اآلأنظمة
الت��ي تعم��ل بال��ذكاء اآل�صطناع��ي لمراقب��ة ا�ص��تخدام الطاقة �تح�ص��ينه �ان�ص��يابية حركة المر�ر
�الخدم��ات المتقدم��ة اآلأخ��رى.
�بوجه عام� ،صتلعب اأنظمة الذكاء اآل�صطناعي �تقنياته د�رًا حا�صمًا في تطوير م�صر�عي هاتين
المدينتي��ن العمالقتي��ن� ،تمكينهم��ا م��ن اأن ت�صبح��ا مدينتي��ن م�ص��تدامتين م��ن م��دن الم�ص��تقبل
تت�صمان بالكفاءة �اآلبتكار.
�ِ 2صف كيف يوؤدي الذكاء اآل�صطناعي �اآلأ تة اإىل ت�صريح الب�صر من � ائفهم.
310
3ا�صرح كيف ميكن اأن ت�صاهم بيانات التدريب امل ُتحيِّزة يف حتقيق نتائج ذكاء ا�صطناعي مُتحيِّزة.
5قارن بني اآلآثار اآلإيجابية �ال�صلبية آلأنظمة الذكاء اآل�صطناعي على البيئة.
311
الدر�ص الثاين
التطبيقات الروبوتية 1
ورة يف العا با�ستخدام الروبوتية اإحدا
Revolutioni ing the World with Robotics
الروبوتي��ة ه��ي جم��ال �ص��ريع النم��و اأح��دث ث��ورة يف طريق��ة عم��ل النا���ص ويف عي�ص��هم
الروبوتية (:)Robotics وتفاعله��م م��ع بيئته��م وتطبيقاته��ا ،وت�ص��مل جمموع��ة وا�ص��عة م��ن املج��االت :بداي��ة من
تهتم الروبوتية بدرا�ص��ة الروبوتات ،وهي الت�صني��ع وحت��ى ا�صتك�ص��اف الف�ص��اء ،وم��ن االإج��راءات الطبي��ة اإىل تنظي��ف املن��زل،
اآالت ميكنه��ا اأداء جمموع��ة متنوع��ة م��ن وم��ن الرتفي��ه اإىل امله��ام الع�ص��كرية .وتتم ّث��ل امليزة الرئي�ص��ة للروبوتي��ة يف قدرتها على
امله��ام بطريق��ة م�ص��تقلة اأو �ص��به م�ص��تقلة اأداء املهام املتكررة بدرجة عالية من الدقة واالإتقان ،حيث ُميكن اأن تعمل الروبوتات
اأو حتت ت�ص ُّرف الب�صر. ب��ال تع��ب وب��دون اأخط��اء؛ مم��ا يجعله��ا مثالي��ة للقي��ام باملهام اخلط��رة اأو الت��ي ي�صعب
على الب�ص��ر القيام بها .على �ص��بيل املثال ،يف العمليات امل�صنعية ُت�ص��تخدم الروبوتات
الأداء بع�ص املهام مثل :اللحام والطالء وجُتميع املُنتَجات ،ويف املجال الطبي ُت�صتخدم
الروبوت��ات الإج��راء العملي��ات اجلراحية بدقة اأكرب ،ويف ا�صتك�ص��اف الف�صاء ُت�ص��تخدم
الروبوتات ال�صتك�صاف ودرا�صة الكواكب البعيدة.
الروبوتية واملُحاكِيات Robotics and Simulators
هناك حتديان مهمان يف جمال الروبوتية هما :التكلفة والوقت الالزمان لبناء
املُحاكي (:)Simulator اأجهزة الروبوت املاد ّية واختبارها ،وهنا ياأتي دور امل ُحا ِكيات ()Simulators
برنام ��ج ي�ص ��مح للمطوِّري ��ن باختب ��ار التي تُ�صتخدم على نطاق وا�صع يف اأبحاث الروبوتية وتعليمها و�صناعتها؛ الأنها
ت�صميماته ��م وخوارزمياته ��م الروبوتي ��ة توف�ر طريق�ة فعّال�ة م�ن حي�ث التكلف�ة ،كم�ا اأنه�ا اآمن�ة الختب�ار الروبوت�ات
وحت�ص��ينها يف ع��امَل افرتا�ص��ي قب��ل ِبن��اء وجُتربته�ا ،حي�ث تتي�ح امل ِ
ُحاكي�ات للمط ِّوري�ن اإن�ص�اء بيئ�ات افرتا�صي�ة ُحتاك�ي
الروبوتات املاديّة. َ�امَل احلقيق�ي؛ مم�ا ي�ص�مح له�م باختب�ار ق�درات الروبوت�ات �ص�يناريوهات الع َ
واأدائه�ا يف جمموع�ة متنوع�ة م�ن املواقفُ ،وميكنها حم�اكاة خُمتلف الظروف
اجلوية والت�صاري�ص والعقبات التي قد تواجهها الروبوتات يف الع ََامَل احلقيقي.
حاكي�ات اأن ُحتاك�ي التفاع�الت ب�ني الروبوت�ات املتع�ددة وب�نيكم�ا ُميك�ن لل ُم ِ
الروبوت�ات والب�ص�ر؛ مم�ا ي�ص�مح للمط ِّوري�ن بدرا�ص�ة وحت�ص�ني الطرائ�ق الت�ي
تتفاعل بها الروبوتات مع بيئتها.
ويبوت�ص Webots
ويبوت���ص اأداة برجمي��ة قوي��ة ُميكن ا�ص��تخدامها يف حماكاة الروبوت��ات وبيئاتها ،وهي من�صة ممتازة
ت�ص��تحق اإدخاله��ا يف عَ � َ�امَل الروبوت��ات وال��ذكاء اال�صطناعي ،حيث ي�ص��تطيع الطلب��ة ت�صميم االأنظمة
واخلوارزمي��ات الروبوتي��ة وحماكاته��ا واختباره��ا با�ص��تخدام ه��ذه االأداة ،دون احلاج��ة اإىل مع��دات
حا�صوبية باهظة الثمن.
ُيع� ُّد ا�ص��تخدام اأداة ويبوت���ص يف ال��ذكاء اال�صطناع��ي مفي��دً ا ب�ص��كل خا���ص؛ الأنها تتي��ح للطلبة جُتربة
خوارزمي��ات تعلُّ��م االآل��ة واختب��ار اأدائه��ا يف بيئ��ة تعتم��د عل��ى املُح��اكاة ،فم��ن خ��الل اإن�ص��اء روبوت��ات
وبيئات افرتا�صية ي�ص��تطيع الطلبة اأن ي�صتك�ص��فوا اإمكانيات وقيود الذكاء اال�صطناعي ،واأن يتعلَّموا
كيفية برجمة االأنظمة الذكية التي ُميكِ نها اتخاذ القرارات بنا ًء على بيانات الزمن الواقعي.
ُميكنك تنزيل اأداة ويبوت�ص من الرابط التايل:
https://github.com/cyberbotics/webots/releases/download/R2023a/webots-R2023a_setup.exe
315
اأوال :علي��ك اأن تق��وم بتثبي��ت املكتب��ات الالزم��ة الت��ي �صت�ص� ِ
�تخدمها يف م�ص��روعك .ميكن��ك تثبي��ت مكتب��ة اأ�ب��ن �ص��ي يف
( )OpenCVعن طريق باي ت�صارم (:)PyCharm
لتن�سيب مكتبة اأوبن �سي يف (:)OpenCV
1 يف نافذة ( PyCharmباي ت�صارم) ،ا�صغط على ( Packagesحِ زم).
اكتب "( "opencvاأوبن �صي يف) يف �صريط البحث2 .
4 اخرت ( opencv-pythonاأوبن �صي يف -بايثون) 3 ،ثم ا�صغط على ( installتثبيت).
�صتظهر لك ر�صالة تخربك باكتمال التن�صيب5 .
5
2 4
3
1
316
دعونا نُلقي نظرة على امل�صروع .اأوال :عليك اأن تبحث عن ملف عَ َامَل ويبوت�ص وتقوم بتحميله.
لفتح عا ويبوت�ص:
1 من �( Menu barصريط القائمة) ،ا�صغط على ( Fileملف) ،ثم على ( Open Worldافتح عَ َامَل).
3 َوامَل) 2 ،ثم افتحه.ُ�صرة_ الع ََامَل) يف جملد ( worldsالع ِ
ابحث عن ملف ( drone_world.wbtالطائرة امل َّ
1
2
3
317
ُ�صرة.
الن�ص الربجمي بلغة البايثون الذي �صيُ�صتخدم يف التحكم يف الطائرة امل َّ
بعدها افتح ملف ّ
ي للمُ تحكِّم: الن�ص ال
لفتح ّ
ن�صي) من �صريط القائمة.
1 ا�صغط على ( Fileملف) ،ثم ( Open Text Fileافتح ملف ّ
ُ�صرة)يف جملد ( controllersاملُتحكِّمات) ثم جملد
ابحث عن ملف ( drone_controller.pyمُتحكِّم_الطائرة امل َّ
ُ�صرة) 2 ،ثم افتحه3 . ( drone_controllerمُتحكِّم_الطائرة امل َّ
1
2
3
ُميكن لوحدة القيا�ش بالق�صور الذاتي ()Inertial Measurement Unit - IMU وحدة القيا�ص بالق�صور
الكاميرا
قيا���ص الت�ص��ارع اخلط��يّ للطائ��رة املُ�ص� َّ�رة و�ص��رعتها الزاو ّي��ة ،وقيا���ص الق��وى مث��ل (.)Camera الذاتي (.)IMU
اجلاذبي��ة ،باالإ�صاف��ة اإىل ق��وى ال��دوران املوؤث��رة على الطائرة املُ�ص� َّ�رة ،كما ُميكنها اأن
توف��ر معلوم��ات ع��ن و�ص��ع الطائ��رة املُ�ص� َّ�رة (االنح��دار ،وااللتفاف ،واالنع��راج) ،وهو
اأمر بالغ االأهمية لتحقيق اال�صتقرار والتحكم.
نظ��ام حتدي��د املواق��ع العَا َمل��ي ( )Global Positioning System - GPSه��و نظ��ام
مالح��ة يعتم��د عل��ى القم��ر ال�صناع��ي ويُوف��ر للطائ��رة املُ�ص� َّ�رة معلوم��ات دقيق��ة ع��ن
املواق��ع ،ومي ِّك��ن نظ��ام حتدي��د املواق��ع العَاملَ ��ي الطائ��رة املُ�ص� َّ�رة م��ن معرف��ة موقعه��ا
احل��ايل وارتفاعه��ا و�ص��رعتها بالن�ص��بة اإىل االأر���ص ،وه��ذه املعلوم��ات مهم��ة؛ للتنق��ل
ُ�صرة.
والتحكم يف الطائرة امل َّ
امل�صت�صعرات ( )Sensorsهي اأجهزة تك�صف الكميات الفيزيائية اأ� اآلأحوال البيئية
�تقي�صها� ،حتوّلها اإىل اإ�صارة كهربائية للمراقبة اأ� التحكم.
بينما تقي�ش ال�صرعة اخلطية امل�صافة التي يقطعها اجل�صم خالل الثانية ،ف إا َّن �صرعة نظام تحديد
الزا�ية تقي�ش �صرعة د�ران اجل�صم حول نقطة مركزية اأ� ور ،حيث تقي�ش مقدار المواقع العالمي الجيرو�صكوب
التغر يف الزا�ية املركزية جل�صم خالل �حدة الزمن� ،عاد ًة ما تُقا�ش بالراديان يف (.)GPS (.)Gyroscope
الثانية ( )rad/sاأ� الدرجات يف الثانية (.)° /s
ُ�صرة مبُ�صت�صعرات وكامرا
�صكل :6.12طائرة م َّ
319
معني ،و ُيع ُّد اجلرو�ص��كوب مفيدً ا اجلر��ص��كوب ( )Gyroscopeه��و م�صت�ص��عر يقي���ص ال�ص��رعة الزاو َّي��ة ،اأو مع��دل ال��دوران ح��ول حم��ور ّ
ب�ص��كل خا���ص يف اكت�ص��اف التغ��رات ال�صغ��رة يف اجُت��اه الطائرة املُ�ص� َّ�رة وت�صحيحه��ا ،وهو اأمر مهم للحفاظ على اال�ص��تقرار والتحكم
اأثناء الطران.
كام��را الطائ��رة امل ُ�ص� َّ�رة ( )Drone's Cameraتُ�ص��تخدم اللتق��اط ال�ص��ور اأثن��اء الط��رانُ ،وميك��ن تثبيته��ا عل��ى الطائ��رة املُ�ص� َّ�رة،
بحي��ث تتم ّك��ن م��ن التق��اط �ص��و ٍر م��ن جه��ات وزواي��ا خُمتلف��ة ع��ن طري��ق �صب��ط زاوي��ة انح��دار الكام��را ( )Camera Pitchبا�ص��تخدام
الدالة () .setPositionويف هذا امل�صروع�ُ ،صبط املو�صع على ،0.7اأي حوايل 45درجة بالنظر اإىل االأ�صفل.
المروحيات ُ�صرة هي مُ�صغِّالت تتحكم
اأجهزة املر�حيات اآلأربعة ( )Four Propellerيف الطائرة امل َّ
(.)Propellers �صرة م
ُ َّ طائرات وهي واجُتاهها، يف �صرعة دوران املر�حية الرباعية ()Quadcopter
ُجمهزة باأربعة د�َّارات ( ،)Rotorsاثنان منهما يدوران يف اجُتاه عقارب ال�صاعة واالثنان
االآخران يدوران عك�ص اجُتاهها ،حيث يولِّد دوَران هذه الد َّوارات قوة رفع ( )Liftوي�صمح
للطائرة املُ�ص َّ�رة باالإقالع واملناورة يف الهواء .وكما هو احلال مع باقي االأجهزة ،تُ�ص�رتد
املح�رِّكات وتو�ص�ع يف مو�صعه�ا ،ولك�ن الدال�ة ()ُ setVelocityت�ص�تخدم كذل�ك ل�صب�ط
ال�صرعة االأولية لالأجهزة املروحية.
ُ�صرة باأربع مروحيات
�صكل :6.13طائرة م َّ
320
from controller import Robot
import numpy as np # used for mathematic operations
import os # used for folder creation
import cv2 # used for image manipulation and human detection تحتوي مكتبة برنامج المُتحكِّم على
from PIL import Image # used for image object creation (روبوت) التي �صتُ�صتخدمRobot فئة
from datetime import datetime # used for date and time .طرائقها للتحكم في الطائرة المُ�صيَّرة
# auxiliary function used for calculations
def clamp(value, value_min, value_max):
return min(max(value, value_min), value_max)
def __init__(self):
# initializes the drone and sets the time interval between updates of the simulation
Robot.__init__(self)
self.time_step = int(self.getBasicTimeStep())
self.gps = self.getDevice("gps")
self.gps.enable(self.time_step)
self.gyro = self.getDevice("gyro")
self.gyro.enable(self.time_step)
321
self.current_pose = 6 * [0] # X, Y, Z, yaw, pitch, roll
self.target_position = [0, 0, 0] ) ودورانهx، y، z( تهيئة مو�صع المُ�صيَّرة
self.target_index = 0 .) االنعراج، االنحدار،(االلتفاف
self.target_altitude = 0
self.target_index += 1
if self.target_index > len(waypoints) - 1:
self.target_index = 0
self.target_position[0:2] = waypoints[self.target_index]
# computes the angle between the current position of the drone and its target position
# and normalizes the resulting angle to be within the range of [-pi, pi]
self.target_position[2] = np.arctan2(
self.target_position[1] - self.current_pose[1],
self.target_position[0] - self.current_pose[0])
angle_left = self.target_position[2] - self.current_pose[5]
angle_left = (angle_left + 2 * np.pi) % (2 * np.pi)
if (angle_left > np.pi):
angle_left -= 2 * np.pi
# turns the drone to the left or to the right according to the value
# and the sign of angle_left and adjusts pitch_disturbance
yaw_disturbance = self.MAX_YAW_DISTURBANCE * angle_left / (2 * np.pi)
pitch_disturbance = clamp(
np.log10(abs(angle_left)), self.MAX_PITCH_DISTURBANCE, 0.1)
def run(self):
# time intevals used for adjustments in order to reach the target altitude
t1 = self.getTime()
roll_disturbance = 0
pitch_disturbance = 0
yaw_disturbance = 0
322
# specifies the patrol coordinates
waypoints = [[-30, 20], [-60, 30], [-75, 0], [-40, -10]]
# target altitude of the drone in meters
self.target_altitude = 8
) (نقاط الطريقwaypoints
while self.step(self.time_step) != -1: الخا�صة بالم�صار الذي �صتطير
# reads sensors .فيه الطائرة المُ�صيَّرة
roll, pitch, yaw = self.imu.getRollPitchYaw()
x_pos, y_pos, altitude = self.gps.getValues()
roll_acceleration, pitch_acceleration, _ = self.gyro.getValues()
self.current_pose = [x_pos, y_pos, altitude, roll, pitch, yaw]
# sets the velocity of each motor based on the motors' input values calculated above
self.front_left_motor.setVelocity(front_left_motor_input)
self.front_right_motor.setVelocity(-front_right_motor_input)
self.rear_left_motor.setVelocity(-rear_left_motor_input)
self.rear_right_motor.setVelocity(rear_right_motor_input)
robot = Mavic()
robot.run()
323
ُ�صرة وت�صغيل املُحاكاة:
الن�ص الربجمي يف الطائرة امل َّ
حان الوقت االآن الإدراج ّ
ألإدراج برنامج املُتحكِّم وت�سغيل املُحاكاة:
ثم ا�صغط 1 من �( Scene treeصجرة امل�صهد) ،ا�صغط على "،Mavic2Pro "Mavic 2 Pro
على "2 .controller "mavic2pro
عند اإجراء تغيرات (حمرِّر احلقل) ،ا�صغط على ( Select ...اختيار)3 . من ُ Field editor
على الن�صو�ش ُ�صرة) 4 ،ثم ا�صغط على ( OKموافق)5 . حدِّ د ( drone_controllerمُتحكِّم_الطائرة امل َّ
تن�ش اأن
الربجمية ،آل َ
ت�صغط على .Ctrl S من �( Toolbarصريط االأدوات) ،ا�صغط على �( Run the simulation in real-timeصغّل
املحاكاة ب�صكل فوري)6 .
6
4
1 5
2
3
ُ�صرة
�صكل :6.15اإقالع الطائرة امل َّ
325
مترينات
1ح ِّل��ل الدال��ة ( )� move_to_targetا�ص��رح كيفي��ة قي��ام الطائ��رة امل ُ�ص� َّ�رة بح�ص��اب مو�صعه��ا الت��ايل يف قائم��ة نق��ا
ُ�صرة لتقليل زمن الطران بني نقا الطريق؟ الطريق .كيف ميكن حت�صني م�صار الطائرة امل َّ
2ق ِّي��م عي��وب خوارزم ّي��ة التح ُّك��م احلالي��ة يف الطائ��رة امل ُ�ص� َّ�رة عن��د مواجه��ة عوام��ل خارجي��ة مث��ل :الري��اح اأ� العوائ��ق اأ�
عدم دقة نظام حتديد املواقع العاملي ،ثم اقرح �ناق�ش التح�صينات التي ميكن القيام بها يف خوارزم ّية التحكم جلعل
ُ�صرة اأك �صمودًا يف �جه هذه التحديات. الطائرة امل َّ
326
3ا�صتك�ص��ف ا آآلث��ار اآلأخالقي��ة للطائ��رات امل ُ�ص� َّ�رة الهوائي��ة يف التطبيق��ات الواقعي��ة مث��ل :املراقب��ة �تو�صي��ل الط��ر�د
�عملي��ات البح��ث �اآلإنق��اذ ،ث��م اكت��ب ع��ن املخ��ا�ف املحتمل��ة اخلا�ص��ة باخل�صو�صي��ة� ،ق�صاي��ا ال�ص��المة� ،احتم��اآلت
اإ�صاءة ا�صتخدام هذه التقنية.
4اأ�ص��ف خا�صي��ة تُ�ص��جِّ ل مو�ص��ع الطائ��رة امل ُ�ص� َّ�رة �ارتفاعه��ا �اجتاهه��ا عل��ى ف��رات منتظم��ة اأثن��اء الط��ران ،ث��م اكت��ب
كل اآلأمنا التي قد جتدها يف بيانات ال�صجل.
5ج �رِّب ا�ص��تخدام قي��م خُمتلف��ة لثواب��ت PIDيف برنام��ج امل ُتح ِّك��م (.)K_VERTICAL_P، K_ROLL_P، K_PITCH_P
�آلح� كيفي��ة تاأث��ر ه��ذا التغ��رات عل��ى ا�ص��تقرار الطائ��رة امل ُ�ص� َّ�رة �ا�ص��تجابتها ،ث��م ناق���ش املوازن��ات ب��ني اآل�ص��تقرار
�اآل�صتجابة.
327
الدر�ص الثالث
التطبيقات الروبوتية 2
328
ُ�صرة.
لن�صتعر�ص التغيرات التي �صتُجريها الإ�صافة وظائف روؤية احلا�صب للطائرة امل َّ
سافة املوؤقِّ ت Adding a Timer اإ
ُميك��ن اأن يك��ون التق��اط �ص��ورة ومعاجلته��ا وحفظه��ا مكل ًف��ا م��ن الناحي��ة احلا�ص��وبية اإذا ُح�ص��ب ل��كل اإط��ار م��ن اإط��ارات
خم�ص ثوانٍ فقط. املُحاكاة ،ولذلك �صت�صيف موؤ ِّقتًا زمنيًا ال�صتخدامه؛ لتنفيذ هذه االإجراءات كل ِ
# time intervals used for adjustments in order to reach the target altitude
)(t1 = self.getTime
# time intervals between each detection for human figures
)(t2 = self.getTime
329
بعد التحقق من ا�صرتداد ال�صورة بنجاح ،تنتقل اخلوارزم ّية اإىل تعديل بع�ص خ�صائ�صها ،بحيث تكون ال�صورة ثالثية
االأبعاد ،ولها اأبعاد طول وعر�ص وقنوات األوان ،حيث تلتقط كامرا الطائرة املُ�ص َّ�رة �صورًا بارتفاع 240بك�ص�ل وعر�ص
ت�صتخدم 3قنوات األوان حلفظ معلومات ال�صورة وهي :االأحمر واالأخ�صر واالأزرق. ِ 400بك�صل ،كما اأنها
يج�ب معاجل�ة ال�ص�ورة ا ًأوال حت�ى يت�م ا�ص�تخدامها يف الك�ص�ف ،ولك�ي يت�م تطبيق الدوال ب�ص�كل �صحي�ح يف وقت الحق ،ال
ُب ّد اأن حتقق ال�صورة تركي ًبا مع ّينًا .يف هذا املثال ،يجب اأن يتغر ت�صل�صل االأبعاد من (الطول ،والعر�ص ،وقنوات االألوان)
اإىل (قنوات االألوان ،والطول ،والعر�ص) با�صتخدام الدالة () ،transposeحيث تُقدَّم �صورة الكامرا (،)CameraImg
عامالت لهذه الدالة ،بافرتا�ص اأن الرتتيب االأ�صلي كان (.)0 ،1 ،2 والت�صل�صل اجلديد ( )2 ،0 ،1ك ُم ِ
كم��ا يج��ب تعدي��ل اأحج��ام االأبع��اد بع��د تغي��ر الت�صل�ص��ل ،حي��ث تُ�ص��تخدم الدال��ة () reshapeبالطريق��ة نف�ص��ها ،ولك��ن
عامل الثاين منها تكون (.)3 ،240 ،400 اأحجام االأبعاد املعنيّة كاملُ ِ
الطول
400
3
400
قنوات اآلألوان العر�ش
�صكل :6.18اأبعاد ال�صورة
330
بعد ذلك ،يجب تغيري ال�صورة اإىل التدرج الرمادي حيث اأن األكت�ص��اف ي�ص��تلزم ذلك ،مع وجوب تخزينها ا ًأوأل يف كائن
�صورة ووجوب اجلمع بن قنوات األوانها الثالثة ،وهنا يجب دمج قنوات األألوان وتخزينها با�صتخدام الدالة ()merge
�دأل م��ن (اأحم��ر ،اأخ�ص��ر ،اأزرق) ،واأن يك��ون
يف ت�صل�ص��ل عك�ص��ي :اأي اأن يك��ون ت�صل�ص��ل األأل��وان (اأزرق ،اأخ�ص��ر ،اأحم��ر) ب� ً
بدأل من ( )0 ،1 ،2على الرتتيب. ت�صل�صلها الرقمي (ً )2 ،1 ،0
# creates RGB image from merged channels
))img = Image.new('RGB', (400, 240
))]img = cv2.merge((cameraImg[2], cameraImg[1], cameraImg[0
واأخ �ريًا ،يت��م حتوي��ل ال�ص��ورة اإىل الت��درج الرم��ادي با�ص��تخدام الدال��ة () cvtColorالت��ي ت�ص� ِ
�تخدم ُم ِ
عام��ل
COLOR_BGR2GRAYلتغيري األألوان من األأزرق واألأخ�صر واألأحمر اإىل التدرج الرمادي.
# converts image to grayscale
)gray = cv2.cvtColor(np.uint8(img), cv2.COLOR_BGR2GRAY
تغريات :وهي الزوج xو yاللذان مُيثِّالن األإحداثين بوا�صطة اأربعة ُم ِّ
اللذي��ن يف ال�ص��ورة وذل��ك يف الزاوي��ة العُلي��ا م��ن اجله��ة اليُ�ص��رى
للم�ص��تطيل ،وكذل��ك ال��زوج wو ،hال��ذي مُي ِّث��ل عر���ص امل�ص��تطيل
وارتفاع��ه .يف جمي��ع األكت�ص��افات املوج��ودة يف ال�ص��ورة ُحت� ِّ�دد الدال��ة
() rectangleالب�ص��ر مب�ص��تطيل اأزرق ،حي��ث تنظ��ر الدال��ة اإىل
مُتغ� ِّ�ريات ال�ص��ورة عل��ى اأنه��ا تتم ّث��ل يف الزاوي��ة الي�ص��رى العُلوي��ة
()x+w, y+h ال�ص��فلية ( )x+w، y+hم��ن امل�ص��تطيل، ( )x، yوالزاوي��ة اليمن��ى ُ
w املو�صح��ة تالح��ظ اأن ل��ون ول��ون امل�ص��تطيل وعر�ص��ه ،ويف ال�ص��ورة َّ
امل�صتطيل اأزرق ( )B=255، G=0، R=0وعر�صه .2
ُتغريات امل�صتطيل
�صكل :6.20م ِّ �صيقوم نظام التقرير با�صرتجاع التاريخ والوقت احلالين با�صتخدام
الدال��ة ) ( datetime.nowوطباعته��ا عل��ى وح��دة التحك��م ،باألإ�صاف��ة اإىل اإحداثي��ات الطائ��رة املُ�ص� َّ�رية يف وق��ت التقري��ر ،ويت��م
ال�ص��فلية (_) أل�ص��تخدامها تعديل تن�ص��يق التاريخ والوقت بطريقة ب�ص��يطة عن طريق اإدراج ال�ص��رطات العُلوية ( )-وال�ص��رطات ُ
كج��زء م��ن ا�ص��م املل��ف املحف��وظ ،ث��م يت��م حفظه��ا يف املجلد با�ص��تخدام الدال��ة ) ( ،imwriteوعند اكتمال كل �ص��يء تقوم الدالة
) ( getTimeباإعادة �صبط املوؤقِّت.
# loop, through detected human images, annotates them with a bounding box
# and prints a timestamp and an info message on the console
for (x, y, w, h) in humans:
# the image, the top left corner, the bottom right corner, color and width of the rectangle
)cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2
)(current_time = datetime.now
)print(current_time
"]}print("Found a person in coordinates [{:.2f}, {:.2f
)).format(x_pos, y_pos
def run(self):
# time intervals used for adjustments in order to reach the target altitude
t1 = self.getTime()
# time intervals between each detection for human figures
t2 = self.getTime()
roll_disturbance = 0
pitch_disturbance = 0
yaw_disturbance = 0
if not os.path.exists(folder_path):
# creates the folder if it doesn't exist already
os.makedirs(folder_path)
print(f"Folder \"detected\" created!")
else:
print(f"Folder \"detected\" already exists!")
# reads sensors
roll, pitch, yaw = self.imu.getRollPitchYaw()
x_pos, y_pos, altitude = self.gps.getValues()
roll_acceleration, pitch_acceleration, _ = self.gyro.getValues()
self.current_pose = [x_pos, y_pos, altitude, roll, pitch, yaw]
333
# reshapes image array to (channels, height, width) format
cameraImg = np.transpose(cameraImg, (2, 0, 1))
cameraImg = np.reshape(cameraImg, (3, 240, 400))
# loads and applies the Haar cascade classifier to detect humans in image
human_cascade = cv2.CascadeClassifier('haarcascade_fullbody.xml')
humans = human_cascade.detectMultiScale(gray)
# loop, through detected human images, annotates them with a bounding box
# and prints a timestamp and an info message on the console
for (x, y, w, h) in humans:
t2 = self.getTime()
# calculates the motors' input values based on the desired roll, pitch, yaw, and altitude values
front_left_motor_input = self.K_VERTICAL_THRUST
+ vertical_input - yaw_input + pitch_input - roll_input
front_right_motor_input = self.K_VERTICAL_THRUST
+ vertical_input + yaw_input + pitch_input + roll_input
rear_left_motor_input = self.K_VERTICAL_THRUST + vertical_input
+ yaw_input - pitch_input - roll_input
rear_right_motor_input = self.K_VERTICAL_THRUST + vertical_input
- yaw_input - pitch_input + roll_input
# sets the velocity of each motor based on the motors' input values calculated above
self.front_left_motor.setVelocity(front_left_motor_input)
self.front_right_motor.setVelocity(-front_right_motor_input)
self.rear_left_motor.setVelocity(-rear_left_motor_input)
self.rear_right_motor.setVelocity(rear_right_motor_input)
334
األآن �ص�غِّل املُح��اكاة ل��رتى الطائ��رة املُ�ص� َّ�رية وه��ي تُقل��ع ُوحت ِّل��ق ح��ول املن��زل .ألح� ْ�ظ ُخم َرج��ات وح��دة التحك��م اجلدي��دة
وال�صور التي مت اإن�صاوؤها يف املجلد.
�صكل :6.21
335
مترينات
1عدِّل برنامج امل ُتحكِّم اخلا�ص بك بحيث أل يتحقق من وجود املجلد بالفعل يف امل�سار .هل يت�سبب ذلك يف اأية تعقيدات
يف تنفيذ امل ُحاكاة؟
2ع�دِّل برنام��ج امل ُتح ِّك��م بحي��ث يق��وم باألكت�س��اف كل 10ث��وانٍ .ه��ل تاًلح��ظ اأي َف��رق يف تك��رار م��ا تطبع��ه وح��دة التحك��م
ويف ال�سور املحفوظة؟
336
�دأل م��ن الت�سل�س��ل املعكو���ص؟
3م��اذا �س��يحدث مل ُخ َرج��ات ال�س��ورة اإذا قم��ت بدم��ج اأبع��اد األأل��وان ح�س��ب الت�سل�س��ل املعت��اد ب� ً
دوِّن ماًلحظاتك وفقًا لذلك.
4اأج ِر جتارب على امل ُعامِ لني الرابع واخلام�ص يف الدالة () .rectangleدوِّن ماًلحظاتك وفقًا لذلك.
ع�دِّل برنام��ج امل ُتح ِّك��م اخلا���ص ب��ك بحي��ث يطب��ع قي��م األلتف��اف واألنح��دار واألنع��راج للطائ��رة امل ُ�س� َّ�رة عن��د اكت�س��اف 5
اأي �سخ�ص.
337
الم�صروع
يف الوق��ت احلا�ص��ر ،هن��اك العدي��د م��ن م�ص��اريع تكام��ل ال��ذكاء األ�صطناع��ي كبرية
احلج��م الت��ي يت��م تطويره��ا ملختل��ف ال�صناع��ات والقطاع��ات املختلف��ة يف البل��دان،
و ُيع ُّد القطاع ال�صحي من اأهم القطاعات التي تتبنى تقنيات الذكاء األ�صطناعي،
وه��ذا يعن��ي اأن تطوي��ر امل�ص��اريع يف ه��ذا القط��اع أل ُب� ّد اأن ياأخ��ذ اأخالقي��ات ال��ذكاء
األ�صطناعي بعن األعتبار.
اأجرِ بحثًا عن اأنظمة الرعاية ال�صحية التي تعمل بالذكاء األ�صطناعي وعن اآثارها 1
األأخالقي��ة ،وح� ِّ�دد املناف��ع واملخاط��ر املحتمل��ة لتطبي��ق نظ��ام تقني��ة معلوم��ات يعم��ل
بالذكاء األ�صطناعي يف موؤ�ص�صة �صحية.
2
ح ِّل��ل املخ��اوف األأخالقي��ة الت��ي تن�ص�اأ عند ا�ص��تخدام ال��ذكاء األ�صطناع��ي يف اتخاذ
قرارات توؤثر على �صحة املري�ص ،و�ص ْع جمموعة من املبادئ األأخالقية أل�ص��تخدام
الذكاء األ�صطناعي يف الرعاية ال�صحية تعطي األأولوية ل�صالمة املري�ص و�صحته.
3
عر�ص��ا تقدمُي ًي��ا يح��دِّ د املبادئ األأخالقية املقرتحة واألأ�ص��باب التي تدعو اإىل
اأن�ص��ئ ً
األلت��زام به��ا ،واعر���ص املب��ادئ عل��ى زمالئ��ك يف الف�ص��ل ،ث��م ناق���ص معه��م مزاي��ا
وحتديات املبادئ املقرتحة.
338
ماذا تع ّلمت
امل�صطلحات الرئي�صة
339