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-1445
مقدمة
اإن تق��دم ال��دول وتطوره��ا يقا���ص مب��دى قدرته��ا عل��ى اال�س��تثمار يف التعلي��م ،وم��دى ا�س��تجابة نظامه��ا التعليم��ي ملتطلب��ات الع�س��ر
وحر�سا من وزارة التعليم على دمُيومة تطوير اأنظمتها التعليمية ،وا�س��تجابة لروؤية اململكة العربية ال�س��عودية 2030فقد ً ومتغراته.
بادرت الوزارة اإىل اعتماد نظام م�س��ارات التعليم الثانوي بهدف اإحداث تغير فاعل و�س��امل يف املرحلة الثانوية.
أمنوذج��ا تعليم ًي��ا متمي��زً ا وحدي ًث��ا للتعلي��م الثان��وي باململك��ة العربي��ة ال�س��عودية ي�س��هم
اإن نظ��ام م�س��ارات التعلي��م الثان��وي يق��دم ا ً
بكف��اءة يف: 2022/0003
تعزي��ز قي��م االنتم��اء لوطنن��ا اململك��ة العربي��ة ال�س��عودية ،وال��والء لقيادت��ه الر�س��يدة حفظه��م ا ،انطال ًق��ا م��ن عقي��دة �سافي��ة 2023
م�س��تندة عل��ى التعالي��م االإ�س��المية ال�س��محة.
تعزي��ز قي��م املواطن��ة م��ن خ��الل الرتكي��ز عليه��ا يف امل��واد الدرا�س��ية واالأن�س��طة ،ات�س��ا ًقا م��ع مطال��ب التنمي��ة امل�س��تدامة ،واخلط��ط
التنموي��ة يف اململك��ة العربي��ة ال�س��عودية الت��ي توؤك��د عل��ى تر�س��يخ ثنائي��ة القيم والهوية ،والقائمة على تعاليم االإ�س��الم والو�س��طية.
تاأهيل الطلبة مبا يتوافق مع التخ�س�سات امل�ستقبلية يف اجَلامعات والكليات اأو املهن املطلوبة؛ ل�سمان ات�ساق خُمرجات التعليم
مع متطلبات �سوق العمل.
Binary
متكني الطلبة من متابعة التعليم يف امل�سار املف�سل لديهم يف مراحل مبكرة ،وفق ميولهم وقدراتهم.
متكني الطلبة من االلتحاق بالتخ�س�سات العلمية واالإدارية النوعية املرتبطة ب�سوق العمل ،ووظائف امل�ستقبل.
دم��ج الطلب��ة يف بيئ��ة تعليمي��ة ممتع��ة وحمف��زة داخل املدر�س��ة قائمة على فل�س��فة بنائية ،وممار�س��ات تطبيقي��ة �سمن منا تعليمي
ن�سط.
نق��ل الطلب��ة ع��رب رحل��ة تعليمي��ة متكامل��ة ب��د ًءا م��ن املرحل��ة االبتدائي��ة حت��ى نهاي��ة املرحل��ة الثانوي��ة ،وتُ�س�هِّل عملي��ة انتقاله��م اإىل
مرحل��ة م��ا بعد التعلي��م العام.
تزويد الطلبة باملهارات التقنية وال�سخ�سية التي ت�ساعدهم على التعامل مع احلياة ،والتجاوب مع متطلبات املرحلة.
تو�سيع الفر�ص اأمام الطلبة اخلريجني عرب خيارات متنوعة اإ�سافة اإىل اجَلامعات مثل :احل�سول على �سهادات مهنية ،وااللتحاق
بالكليات التطبيقية ،واحل�سول على دبلومات وظيفية.
ويتكون نظام امل�سارات من ت�سعة ف�سول درا�سية تُدرّ�ص يف ثالث �سنوات ،تت�سمن �سنة اأوىل م�سرتكة يتلقى فيها الطلبة الدرو�ص
يف جماالت علمية واإن�سانية متنوعة ،تليها �سنتان تخ�س�سيتان ،يُ�س ّكن الطلبة بها يف م�سار عام واأربعة م�سارات تخ�س�سية تت�سق مع
ميولهم وقدراتهم ،وهي :امل�سار ال�سرعي ،م�سار اإدارة االأعمال ،م�سار علوم احلا�سب والهند�سة ،م�سار ال�سحة واحلياة ،وهو ما يجعل
هذا النظام هو االأف�سل للطلبة من حيث:
وج��ود م��واد درا�س��ية جدي��دة تتواف��ق م��ع متطلب��ات الث��ورة ال�سناعي��ة الرابع��ة واخلط��ط التنموي��ة ،وروؤي��ة اململك��ة ،2030ته��دف
لتنمية مهارات التفكر العليا وحل امل�س��كالت ،واملهارات البحثية.
برام��ج املج��ال االختي��اري الت��ي تت�س��ق م��ع احتياج��ات �س��وق العمل وميول الطلبة ،حيث ُمُي ّكن الطلبة م��ن االلتحاق مبجال اختياري
حمدد وفق م�سفوفة مهارات وظيفية حمددة.
مقيا�ص ميول ي�سمن حتقيق كفاءة الطلبة وفاعليتهم ،وي�ساعدهم يف حتديد اجتاهاتهم وميولهم ،وك�سف مكامن القوة لديهم،
مما يعزز من فر�ص جناحهم يف امل�ستقبل.
خ�سي�سا مبا يت�س��ق مع فل�س��فة الن�س��اط يف املدار���ص ،ويعد اأحد متطلبات التخرج؛ مما ي�س��اعد ً العمل التطوعي امل�سمم للطلبة
على تعزيز القيم االإن�سانية ،وبناء املجتمع وتنميته ومتا�سكه.
التج�سر الذي مُيكن الطلبة من االنتقال من م�سار اإىل اآخر وفق اآليات حمددة.
ح�س���ص االإتق��ان الت��ي يت��م م��ن خالله��ا تطوي��ر امله��ارات وحت�س��ني امل�س��توى التح�سيل��ي ،م��ن خالل تق��دمي ح�س�ص اإتق��ان اإثرائية
وعالجية.
خيارات التعليم املدمج ،والتعلم عن بعد ،والذي بُني يف نظام امل�سارات على اأ�س�ص من املرونة ،واملالءمة والتفاعل والفعالية.
م�سروع التخرج الذي ي�ساعد الطلبة على دمج اخلربات النظرية مع املمار�سات التطبيقية.
مهام حمددة ،واختبارات معينة بال�سراكة مع جهات تخ�س�سية. �سهادات مهنية ومهارية متنح للطلبة بعد اإجنازهم َّ
وبالتايل فاإن م�س ��ار عل ��وم احلا�س ��ب والهند�س ��ة كاأحد امل�س ��ارات امل�س ��تحدثة ف ��ي املرحلة الثانوي ��ة ي�س ��هم يف حتقي ��ق اأف�سل
املمار�سات عرب اال�ستثمار يف راأ�ص املال الب�س ��ري ،وحتوي ��ل الطالب إال ��ى فرد م�س ��ارك ومنت ��ج للعل ��وم واملعارف ،مع اإك�س ��ابه امله ��ارات
واخلربات الالزمة ال�ستكمال درا�س ��ته يف تخ�س�س ��ات تتنا�س ��ب مع ميول ��ه وقدراته اأو االلتحاق ب�س ��وق العم ��ل.
وتعد مادة الذكاء اال�سطناعي اأحد املواد الرئي�س��ة يف م�س��ار علوم احلا�س��ب والهند�س��ة ،حيث ت�س��هم يف تو�سيح مفاهيم الذكاء
اال�سطناعي والتقنيات املرتبطة بها مبا ي�ساعد على توظيف هذه التقنيات يف عدة جماالت حياتية مثل املدن الذكية والتعليم والزراعة
والطب وغرها من املجاالت االقت�سادية املتنوعة .وتهدف املادة اإىل تعريف الطالب باأهمية الذكاء اال�سطناعي ودوره يف اجَليل الرابع
من ال�سناعة .وكذلك تركز على اللبنات االأ�سا�سية لتقنيات الذكاء اال�سطناعي ،ثم تتع َّر�ص ب�سكل تف�سيلي للتطبيقات املتقدمة التي
تتعلق باالأنظمة القائمة على القواعد واأنظمة معاجَلة اللغات الطبيعية .كما ت�ستمل هذه املادة على م�ساريع ومتارين تطبيقية ملا يتعلمه
الطالب؛ حلل م�ساكل واقعية حتاكي م�ستوياته املعرفية ،بتوجيه واإ�سراف من املعلم.
ويتمي��ز كت��اب ال��ذكاء اال�سطناع��ي باأ�س��اليب حديث��ة ،تتواف��ر في��ه عنا�س��ر اجَل��ذب والت�س��ويق ،والت��ي جتع��ل الطلب��ة يقبل��ون عل��ى
تعلم��ه والتفاع��ل مع��ه ،م��ن خ��الل م��ا يقدم��ه م��ن تدريب��ات واأن�س��طة متنوع��ة ،كم��ا يوؤك��د ه��ذا الكت��اب على جوان��ب مهمة يف تعلي��م الذكاء
اال�سطناع��ي وتعلم��ه ،تتمث��ل يف:
الرتابط الوثيق بني املحتويات واملواقف وامل�سكالت احلياتية.
تنوع طرائق عر�ص املحتوى ب�سورة جذابة وم�سوقة.
اإبراز دور املتعلم يف عمليات التعليم والتعلم.
ً
متكامال. االهتمام برتابط حمتوياته مما يجعل منه ًّ
كال
االهتمام بتوظيف التقنيات املنا�سبة يف املواقف املختلفة.
االهتمام بتوظيف اأ�ساليب متنوعة يف تقومي الطلبة مبا يتنا�سب مع الفروق الفردية بينهم.
وملواكب��ة التط��ورات العاملي��ة يف ه��ذا املج��ال ،ف�اإن كت��اب م��ادة ال��ذكاء اال�سطناع��ي �س��وف يوفر للمعلم جمموع��ة متكاملة من املواد
التعليمية املتنوعة التي تراعي الفروق الفردية بني الطلبة ،باالإ�سافة اإىل الربجميات واملواقع التعليمية ،التي توفر للطلبة فر�سة توظيف
التقنيات احلديثة والتوا�سل املبني على املمار�سة؛ مما يوؤكد دوره يف عملية التعليم والتعلم.
ونح��ن اإذ نق��دم ه��ذا الكت��اب الأعزائن��ا الطلب��ة ،ناأم��ل اأن ي�س��تحوذ عل��ى اهتمامه��م ،ويُلب��ي متطلباته��م ،ويجع��ل تع ّلمه��م له��ذه امل��ادة اأكرث
متعة وفائدة.
تعلُّم الروبوتية
اإلآلة األأدوات
مفكرة جوبيرت ()Jupyter Notebook
�سكل :1.1بع�ص جماالت الذكاء اال�سطناعي
11 10
urin est اختبار تورن AI and Other Fields الذكاء األ�سطناعي واملجاألت األأخر
اختبار تورن (:) urin est ق��د يك��ون اختب��ار تورن��غ ه��و الطريق��ة االأك��رث �س��هرة لتعري��ف ال��ذكاء اال�سطناع��ي ،ويع��ود يرتبط الذكاء اإل�ضطناعي ( )AIارتباطً ا وثيق ال�سلة بعدة جماالت اأخرى ت�سمل:
تاري��خ اقرتاح��ه اإىل ع��ام ،1950حي��ث اأج��رى الع��امل تورن��غ جترب��ة ملعرِ ف��ة م��ا اإذا كان الفل�ض��فة ( :)Philosophyهي اأ�سل العلوم احلديثة ،وتُعنى بدرا�س��ة امل�س��كالت التي متثّل اأ�س���ص الذكاء اال�سطناعي،
يقي���ص اختب��ار تورن��غ ق��درة االآل��ة عل��ى احلا�سب ذكيًا اأم ال.
اإظه��ار �س��لوك ذك��ي مكاف��ئ ل�س��لوك مث��ل اأ�س��ل ِ
املعرف��ة ومتثيله��ا ،واال�س��تدالل املُ�س��تنِد اإىل القواع��د واملنط��ق ،والتحلي��ل القائ��م عل��ى االأه��داف ،وال�سل��ة ب��ني
االإن�سان اأو غر قابل للتمييز عنه. واأثناء االختبار ،يتوجب على احلا�س��ب اأن يجيب عن بع�ص االأ�س��ئلة املكتوبة التي يقدمها والت�سرف.
ُّ املعرِ فة
امل ُوجِّ ��ه الب�ض��ري ( .)Human Respondentيعت��رب االختب��ار ناجحً ��ا اإذا مل يتمك��ن الريا�ضي��ات ( :)Mathematicsه��ي جوه��ر ال��ذكاء اال�سطناع��ي ،حي��ث تُقدم له لبِنات البناء االأ�سا�س��ية مثل :املنطق،
ُوجه من معرفة ما اإذا كانت االإجابة مكتوبة بوا�سطة اإن�سان اأم بوا�سطة احلا�سب. امل ِّ واحلو�سبة ،ونظرية االحتماالت.
الجتياز االختبار بنجاح ،يجب اأن يتمتع احلا�سب باالإمكانات املو�سحة يف اجَلدول التايل: نظري��ة الق��رار ( :)Decision Theoryتُعن��ى بدرا�س��ة اخل�سائ���ص املنطقي��ة والريا�سي��ة لعملي��ة �سن��ع الق��رار ،حي��ث
حت ّل��ل عمل ّي��ة اتخ��اذ الق��رارات يف نظ��ام تك��ون في��ه بيئ��ة الق��رار غ��ر وا�سح��ة ،وتُط َّب��ق االأُطُ ر واالأ�س��اليب النظري��ة يف هذا
احلا�ضب امل ُجيب املجال با�ستمرار حل ّل م�سكالت الذكاء اال�سطناعي.
عل��م اإلأع�ض��اب (ُ :)Neuroscienceيعن��ى بدرا�س��ة اجَله��از الع�سب��ي الب�س��ري ،وق��د تو�س��ل عل��م االأع�س��اب اإىل نتيج��ة
اإلإن�ضان امل ُجيب رئي�س��ة عمل��ت كمب��داأ اإر�س��ادي لل��ذكاء اال�سطناع��ي ،وه��ي اأن جمموع��ة م��ن اخلالي��ا الب�س��يطة مُيك��ن اأن ت�وؤدي اإىل نتائ��ج
ُمعق��دة مث��ل :الفك��ر ،والعم��ل ،والوع��ي .كم��ا اأن ال�س��بكات الع�سبي��ة اال�سطناعي��ة ُحتاك��ي البُني��ات الع�سبي��ة املوج��ودة يف
الدما الب�سري.
عل��م النف���س املع��ريف ( :)Cognitive Psychologyه��و اأح��د ف��روع عل��م النف���ص ،ويُعن��ى بدرا�س��ة طريق��ة تفك��ر الب�س��ر.
امل ُوجِّ ه الب�ضري ولطامل��ا كان الف�س��ل يف حتقي��ق االجن��ازات والتق�دّم يف جمال الذكاء ال�سناعي راجعًا اإىل االكت�س��افات التي ّمت حتقيقها
يف هذا املجال ،والتي �ساعدت على توفر الروؤى التي ت�ساعد اأجهزة احلا�سب على حماكاة التفكر الب�سري.
عل��وم احلا�ض��ب والهند�ض��ة ( :)Computer Science and Engineeringتعت��رب عل��وم احلا�س��ب والهند�س��ة حج��ر
االأ�سا���ص لتوف��ر الربجمي��ات واالأجه��زة الالزم��ة لل��ذكاء اال�سطناع��ي لالنتق��ال م��ن املب��اد النظري��ة اإىل التطبيق��ات
العملية .وقد واكَب التقدم يف الذكاء اال�سطناعي با�ستمرار التطورات يف اأنظمة الت�سغيل ،والربجمة ،واللغات ،وال�سعة
التخزينية ،والذاكرة ،وقوة ُمعاجَلة البيانات.
علم التحكم اإلآيل (ُ :)Cyberneticsيعنى بدرا�س��ة االأنظمة التي حتقق احلالة املرجوة با�س��تالم املعلومات من بيئتها
وتعدي��ل �س��لوكها وف ًق��ا لذل��ك .الف��رق الرئي���ص ب��ني عل��م التح ّك��م االآيل وب��ني ال��ذكاء اال�سطناع� ّ�ي ه��و اأن االأول ي�س��تخدم
الريا�سي��ات لنمذج��ة االأنظم��ة املُغلق��ة الت��ي مُيك��ن و�سفه��ا بالكامل با�س��تخدام متغرات ُحم� َّددة ،بينما ي�س��تخدم الذكاء
اال�سطناعي اال�ستدالل املنطقي واحلو�سبة للتغلب على هذه القيود ودرا�سة امل�سكالت املُعقَّدة مثل :فهم اللغة واملعلومات
املرئية وتوليدهما.
عل��م اللُغوي��ات ( :)Linguisticsه��و الدرا�س��ة العلمي��ة للغ��ة الب�س��رية ،فلطامل��ا كان فه��م اللغ��ة الب�س��ريّة وتوليده��ا جم� ً�اال
رئي�سً ��ا يف تطبيق��ات ال��ذكاء اال�سطناع��ي ،كم��ا اأدى اإىل ن�س��وء حق��ول فرعي��ة مث��ل :معاجل��ة اللغ��ات الطبيعي��ة
( )Natural Language Processing - NLPواللغويات احلا�ضوبية (.)Computational Linguistics
عل��م الروؤي��ة ( :)Vision Scienceه��و الدرا�س��ة العلمي��ة ل�الإدراك الب�س��ري .و ُيع� ّد تعلي��م اأجه��زة احلا�س��ب كيفي��ة فه��م
املُجيب اإلأول ال�س��ور ،والر�س��وم املتحرك��ة ،ومقاط��ع الفيدي��و وتوليده��ا اأح��د اأك� ِرث تطبيق��ات ال��ذكاء اال�سطناع��ي اإث��ارة ،وحتدي��دً ا يف
املُجيب الثاين املجاالت الفرعية للتعلُّم العميق وروؤية احلا�سب.
معلومة
ا�ضتُخدِ م م�ضطل الذكاء اإل�ضطناعي ر�ضميًا للمرة اإلأوىل يف عام ,1956ا يجعله اأحد اأحدث املجاإلت العلمية ن�ضبيًا.
:1987-1993تُعرف هذه الفرتة با�س��م ثاين �س��تاء للذكاء اال�سطناعي. اإلأربعينيات :البداية واأول خلية ع�ضبية ا�ضطناعية متثيل املعرفة لتنظيم املعلومات وتخزينها وا�سرتجاعها خالل اأداء االختبار. 2
ُ :1943اق��رتح النم��وذج االأول املبن��ي عل��ى اخلالي��ا الع�سبي��ة اال�سطناعي��ة فطبيع��ة اأنظم��ة ال��ذكاء اال�سطناع��ي يف املراحل املُبكرة كانت م�س��تندة على
بحي��ث مُيك��ن ل��كل خلي��ة ع�سبي��ة اأن تك��ون يف حال��ة ن�س��طة (ت�س��غيل) اأو غ��ر القواع��د ،والت��ي بدوره��ا قي��دت م��ن قابليته��ا للتطبي��ق وجعلته��ا غ��ر ق��ادرة
ن�س��طة (اإيق��اف) وذل��ك وف��ق املح��اكاة الت��ي تتلقاه��ا م��ن اخلالي��ا الع�سبي��ة على حل م�ساكل احلياة الواقعية الرئي�سة. اال�ستدالل املُوؤمتت؛ ال�ستخدام املعلومات املُخزَّنة لالإجابة عن االأ�سئلة. 3
االأخرى املجاورة واملت�سلة بها.
:1997حتق��ق الف��وز االأول لربنام��ج ال��ذكاء اال�سطناع��ي عل��ى بط��ل العامل
:1948يف ه��ذا الع��ام ظه��ر روبوت��ان :اإمل��ر واإل�ض��ي ( )Elmer and Elsieيف ال�س��طر ،حيث جنح احلا�س��ب العمالق ديب بلو ( )Deep Blueيف تعلُّ��م االآل��ة للتك ّي��ف م��ع هي��اكل اللغ��ات اجَلدي��دة مث��ل :بن��اء جُ م��ل خُمتلف��ة ،اأو اإيجاد مف��ردات لغوي��ة خُمتلفة، 4
وهم��ا روبوت��ان ذاتي��ا التح ُّك��م ،مُيكنهم��ا التنق��ل ح��ول العقب��ات با�س��تخدام هزمُية بطل العامل يف ال�سطر جاري كا�ضبارو (.)Gary Kasparov مل يرها من قبل ،اأو لي�ست خُمزّنة �سمن املعلومات.
اإلألفيني��ات :ف��رتة اإلنت�ض��ار وا�ض��ع ال ّنط��اق ,والدع��م الكب��ري للمك ّون��ات ال�سوء واللم�ص.
املادية والربجمية ,وتطورها خم�ضينات القرن املا�ضي :ن�ضاأة الذكاء اإل�ضطناعي
:1950ظهر اختبار تورنغ وهو اختبار يحدِّ د قدرة االآلة على اإظهار �سلوك :2005ط � َّورت جامع��ة �ض��تانفورد ( )Stanford Universityال�س��يارة
روؤي��ة احلا�س��ب؛ حت��ى يتمك��ن م��ن اال�س��تجابة لالإ�س��ارات الب�سري��ة الت��ي يتلقّاها م��ن املُوجِّ ه عرب و�س��ائط نقل 5
ذكي مكافئ ل�سلوك االإن�سان اأو َي�س ُعب متييزه عنه .اإىل جانب ظهور العديد ذاتية القيادة �ض��تانلي ( )STANLEYالتي فازت يف حتدي ال�س��يارات ذاتية ال�سور والفيديو.
م��ن مفاهي��م ال��ذكاء اال�سطناع��ي الرئي�س��ة مث��ل تعلُّ��م ا آالل��ة ،واخلوارزميات القيادة .كما بداأ اجَلي�ص االأمريكي اال�ستثمار يف الروبوتات ذاتية التحكّم.
اجَلينية ،والتعلُّم املعزَّز.
:2009ا�ستُخدمت وحدات معاجلة الر�ضومات الروبوتية؛ حتّى يتمكّن من ا�ستقبال االأ�سياء التي يتلقّاها من املُوجِّ ه عرب املنفذ ويعاجَلها. 6
( )Graphics Processing Units - GPUsلتدري��ب ال�س��بكات �وائي �ض الع� �ي � ب الع�ض �ري � ظ التنا �ز � ي التعز �ب � �ُ :1951سم��م حا�ض
( )Stochastic Neural Analog Reinforcement Computer-SNARCالع�سبي��ة للتعلُّ��م العمي��ق للم��رة االأوىل .اأدى ا�س��تخدام املكون��ات املادي��ة
املتخ�س�س��ة اإىل ت�س��ارع وت��رة تدري��ب ال�س��بكات املُع َّق��دة عل��ى جمموع��ات كاأول حا�سب يعمل بال�سبكات الع�سبية.
خ�سي�س��ا كب��رة ج��دً ا م��ن البيان��ات ،مم��ا اأدى ب��دوره اإىل ع�س��رٍ جدي��د م��ن التعلُّ��م تغط ���ي االإمكان ���ات املو�سح ���ة باالأعل ���ى ج ���زءًا كب ��رًا م ���ن جم ���ال ال ���ذكاء اال�سطناع ���ي الوا�س ���ع� .سن�س ���تعر�ص ه ���ذه
ً :1958طُ ��ورت لغ��ة لي�ض��ب ( ،)Lispوه��ي لغ��ة برجم��ة ُم�س َّمم��ة االإمكانات فيما يلي:
لل��ذكاء اال�سطناع��ي .ويف الع��ام نف�س��هُ ،ن�س��رت ورق��ة بحثي��ة ح��ول متلق��ي العميق والذكاء اال�سطناعي.
امل�ض��ورة اإلفرتا�ض��ي ( ،)Hypothetical Advice Takerوه��و نظ��ام العِقدي��ن الث��اين والثال��ث م��ن الق��رن احل��ادي والع�ض��رين :الع�ض��ر معاجل��ة اللغ��ات الطبيعي��ة ( )NLPه��و اأح��د ف��روع ال��ذكاء اال�سطناع��ي ال��ذي َمُين��ح اأجه��زة احلا�س��ب الق��درة عل��ى فهم
الذهبي الذكاء اال�سطناعي القادر على التعلُّم من التجربة متامً ا مثل الب�سر. االإن�سان واللغة الطبيعية.
ال�ض��تينيات وال�ض��بعينيات م��ن الق��رن املا�ض��ي :اأول �ض��تاء لل��ذكاء :2011ه��زم نظ��ام االإجاب��ة عل��ى االأ�س��ئلة املع��روف با�س��م وات�ض��ون ثي��ل املع ِرف��ة ( )Knowledge Representationيف ال��ذكاء اال�سطناع��ي ي�س��ر اإىل عملي��ة ترمي��ز املعرفة الب�س��رية
( )Watsonاأف�س��ل العب��ني يف الع��امل يف برنام��ج امل�س��ابقات االأمرك��ي اإل�ضطناعي يف �س��كل مق��روء اآل ًي��ا لتتمك��ن االأنظم��ة املُ�س��تنِدة اإىل ال��ذكاء اال�سطناع��ي م��ن معاجَلتها وا�س��تخدامها .تاأتي ه��ذه املعرِ فة
:1964ظه��ر برنام��ج اإلي��زا ( )ELIZAوه��و اأول برنام��ج ملعاجَل��ة اللغ��ات جيوباردي ( ،)Jeopardyحيث متكّن وات�س��ون من فهم االأ�س��ئلة واالإجابة يف �سو ٍر عدة ت�سمل :احلقائق ،والقواعد ،واملفاهيم ،والعالقات ،والعمليات.
عليه��ا بنج��اح ،مم��ا �س �كّل طف��رة يف ا�س��تخدام ال��ذكاء اال�سطناع��ي ِلفه��م تفرع منه جميع روبوتات الدرد�سة اليوم. الطبيعية وهي االأ�سل الذي ّ
اللغة الطبيعية. اإل�ض��تدإلل املُوؤ ��ت ( )Automated Reasoningيُ�س��ر اإىل ق��درة االأنظم��ة املُ�س��ت ِندة اإىل ال��ذكاء اال�سطناع��ي عل��ى
ُ :1974-1980تع�رف ه�ذه الف�رتة با�س�م اأول �س�تاء لل�ذكاء اال�سطناع�ي. ا�ستنتاج املعرفة اجَلديدة وتقدمي اال�ستنتاجات املنطقية وفقًا ملجموعة من القواعد والفر�سيات املُقدَ مة.
حي�ث انخف��ص متوي�ل م�س�روعات ال�ذكاء اال�سطناع�ي يف ه�ذه الف�رتة نظ ًرا :2012ظه��ر نظ��ام ال��ذكاء اال�سطناع��ي ال��ذي ُيرتجِ ��م فور ًي��ا اللغ��ة
لقل�ة التق�دم املُح�رز يف ه�ذا املج�ال ،وانخفا��ص تاأث�ره يف تطبيق�ات احلي�اة االإجنليزية املنطوقة اإىل اللغة ال�سينية املنطوقة. روؤية احلا�ضب ( )Computer Visionهي جمال الذكاء اال�سطناعي الذي ُمُيكِّن احلا�سب من تف�سر وفهم املعلومات
املرئية من العامل احلقيقي ،مثل ال�سور ومقاطع الفيديو.
اليومية .اأحد االنتقادات الرئي�سة كانت عدم قدرة تقنيات الذكاء اال�سطناعي :2021ظه��ر نظ��ام القي��ادة الذاتي��ة الكام��ل ال��ذي يَ�س��تخدِ م ال�س��بكات
على معاجَلة م�س�كلة االنفجار التوافقي التي جعلت قابلية تطبيقها حمدودة الع�سبية املُدرَّبة على �سلوك مئات االآالف من ال�سائقني. الروبوتي��ة ( )Roboticsه��ي ف��رع ال��ذكاء اال�سطناع��ي ال��ذي ُيعن��ى بت�سمي��م الروب��وت ،وبنائه ،وا�س��تخدامه .ويت�سمن
على بع�ص امل�سكالت وجمموعات البيانات ال�سغرة للغاية. اجَلم��ع ب��ني التقني��ات املتنوع��ة مث��ل :تعلُّ��م االآل��ة ،وروؤي��ة احلا�س��ب ،واأنظم��ة التح ّك��م البت��كار اآالت ذكي��ة ذاتي��ة التح ُّك��م اأو
الثمانيني��ات والت�ض��عينيات م��ن الق��رن املا�ض��ي وث��اين �ض��تاء لل��ذكاء :2022ظه��ر روب��وت درد�ض��ة (املُح �وِّل التولي��دي مُ�ض��بق التدري��ب) تتطلب احلد االأدنى من التوجيه الب�سري.
( )Generative Pre-trained Transformer - ChatGPTوه��و اإل�ضطناعي
روب��وت الدرد�س��ة املبن��ي عل��ى جمموع��ة كب��رة م��ن النم��اذج اللغوي��ة .ه��ذه
:1980اُطل��ق اأول نظ��ام خب��ر جت��اري ناج��ح ُم�س َّم��م ملح��اكاة الق��درة على النماذج ُمهيئَّة بدقة با�ستخدام كلٍ من تقنيات التعلّم املُوجّ ه واملُعزّز ملحاكاة
املحادثات الب�سرية. ُ�سنع القرار مثل االإن�سان.
15 14
اإنّ اأح��د اأق��دم االأمثل��ة عل��ى تطبي��ق ال��ذكاء اال�سطناع��ي يف الروبوتية هو تطوير روبوتات امل�سانع املُ�س��تخدَ مة يف اأداء املهام تطبيقات الذكاء األ�سطناعي pplications of AI
مث��ل :اللح��ام ،والدهان��ات ،والتجمي��ع .من��ذ ذل��ك احل��ني ،تط� َّور ا�س��تخدام ال��ذكاء اال�سطناع��ي يف الروبوتي��ة اإىل حد كبر،
مع تطور اخلوارزميات املتقدمة وا�ستخدام تعلُّم االآلة لتح�سني اأداء الروبوت .وكانت اإحدى االإجنازات البارزة يف ا�ستخدام ال��ذكاء اال�سطناع��ي ه��و تقني��ة �س��ريعة التط��ور لديه��ا الق��درة عل��ى حت� ُّول جمموع��ة وا�س��عة من القطاع��ات وال�سناع��ات .يف هذه
ال��ذكاء اال�سطناع��ي يف الروبوتي��ة تطوي��ر الروبوت��ات الب�س��رية ،مث��ل :روب��وت هون��دا اأ�ض��يمو ( )Honda's ASIMOوق��د الوح��دة �ست�ستك�س��ف تطبيق��ات ال��ذكاء اال�سطناع��ي املتنوع��ة ،وكيفي��ة ا�س��تخدامها يف اإج��راء حت�س��ينات وابت��كارات يف جمموع��ة
ُ�س� ّمي بذل��ك اخت�س��ارًا ملفه��وم اخلط��وة املتقدم��ة يف النق��ل اإلإبداع��ي ()Advanced Step in Innovative Mobility متنوعة من القطاعات وال�سناعات.
والذي ق ُِّدم للمرة االأوىل يف عام 2000وكان قاد ًرا على ال�سر واأداء املهام االأ�سا�سية. رتا�سيني irtual ssistants امل�ساعدين األ
الروبوتات ال�سبيهة بالب�سر Humanli e o ots
واحدة من اأ�س��هر تطبيقات الذكاء اال�سطناعي هي تطبيقات امل�س��اعدين االفرتا�سيني الذين
ُ�ستخدمني عرب التفاعالت الن�سيّة اأو ال�سوتية ،ومُيكن الو�سول اإليهم مُيكنهم التوا�سل مع امل ِ
ط � ّورت �س��ركة الدب��ران روبوتك���س ( )Aldebaran Roboticsالروبوت��ان ال�س��بيهان ع��رب االأجه��زة املادي��ة مث��ل :الهوات��ف الذكي��ة ،واالأجهزة اللوحي��ة ،اأو مكربات ال�س��وت الذكية،
بالب�س��ر بي��رب ( )Pepperون��او ( ،)Naoال ّل��ذانِ ُ�س ّمم��ا الأغرا���ص البح��ث والتطوي��ر يف ومُيك��ن ا�س��تخدامهم الأداء جمموع��ة وا�س��عة م��ن امله��ام مث��ل :اإعداد التذك��رات ،واالإجابة على
جمال التفاعل بني االإن�سان والروبوت ،وقد ا�ستخدما على نطاق وا�سع يف جماالت البحث، االأ�س��ئلة ،وت�س��غيل الو�س��ائط ال�سوتية ،وطلب املنتجات اأو اخلدمات .اأحد االأمثلة االأكرث �سهرة
والتعلي��م ،والرتفي��ه .اأمّ ��ا بي��رب ( )Pepperفه��و روب��وت اجتماع��ي ُم�س َّم��م للتفاع��ل م��ع على تطبيقات الذكاء اال�سطناعي يف هذا املجال هو �ضريي ()Siriمن �سركة اآبل (.)Apple
االأ�سخا�ص ب�سورة طبيعية با�ستخدام كامرا ،وميكروفونات ،وم�ست�سعرات اللم�ص الإدراك وهن��اك �س��ركات اأخ��رى ط�وّرت م�س��اعدين افرتا�سي��ني :مث��ل األيك�ض��ا ( )Alexaالتاب��ع ل�س��ركة
البيئة من حوله ،واال�ستجابة لت�سرفات وعواطف االأ�سخا�ص من حوله .يتمتع هذا الروبوت اأم��ازون ( ،)Amazonوامل�ض��اعد اإلفرتا�ض��ي لقوق��ل ( ،)Google's Assistantوكورتان��ا
بالعديد من اخل�سائ�ص التي ت�س��مح له بالتع ّرف على الوجوه ،وفهم الكالم ،واال�س��تجابة ( )Cortanaالتاب��ع ل�س��ركة مايكرو�ض��وفت ( .)Microsoftومب��رور الوق��ت تط � َّورت ق��درة
لالإمُي��اءات .ال�س��كل 1.5يعر���ص �س��ورة للروب��وت بي��رب .اأ ّما ناو ( )Naoفه��و روبوت ُمدمج هذه التطبيقات على الفهم واال�ستجابة لعدد متزايد من االأوامر واال�ستف�سارات والرد عليها.
اأ�سغر حجمًا ُم�س َّمم للتفاعل مع الب�سر .ويحتوي هذا الروبوت مثل ال�سابق على جمموعة عل��ى �س��بيل املث��ال ،مُيك��ن ا�س��تخدام امل�س��اعد االفرتا�س��ي للتحك��م يف االأجهزة املنزلي��ة الذكية
م��ن امل�ست�س��عرات الت��ي ت�س��مح ل��ه ب �اإدراك البيئ��ة م��ن حول��ه ،اإىل جان��ب الكام��رات، مث��ل :التحك��م يف درج��ة احل��رارة ،واالإ�س��اءة ،واالأجه��زة الكهربائي��ة .وق��د يتمث��ل امل�س��اعد
وامليكروفون��ات للتع� ّرف عل��ى ال��كالم والوجوه .ومُيتاز هذا الروب��وت باأنّه قابل للتخ�سي�ص االفرتا�سي يف �سورة روبوتات الدرد�سة املتخ�س�سة املُ�س َّممة عاد ًة لتقدمي املعلومات واالإجابة
والربجم��ة بدرج��ة توافقي��ة عالي��ة ،مم��ا يجعل��ه اخلي��ار االأمثل للباحث��ني والدار�س��ني الذين �ستخدم روبوتات
على االأ�سئلة يف جمال حم َّدد ،على �سبيل املثال ،يف تطبيقات خدمة العمالء ُت َ
يرغبون يف درا�سة وتطوير تطبيقات جديدة للروبوتات ال�سبيهة بالب�سر. الدرد�سة املبنية على تقنية الذكاء اال�سطناعي يف االإجابة على اأ�سئلة العمالء حول املنتجات
�سكل :1.3املحادثة مع روبوت الدرد�سة
اأو اخلدم��ات ،وحتدي��د امل�س��كالت وعالجه��ا ،وتق��دمي املعلوم��ات ح��ول طلباته��م وح�س��اباتهم.
يف عام 2017كانت الروبوت �ضوفيا ( ) ophiaاأول روبوت يح�ضل على �سكل :1.5الروبوت بيرب
مُيك��ن الو�س��ول اإىل روبوت��ات الدرد�س��ة ع��رب جمموع��ة وا�س��عة من القن��وات مثل :مواق��ع الويب،
اجلن�ضية ال�ضعودية ,ويف عام 2023طورت اململكة العربية ال�ضعودية وتطبيق��ات املرا�س��لة ،وو�س��ائل التوا�س��ل االجتماع��ي ،ومُيكنه��ا تق��دمي خدم��ات امل�س��اعدة عل��ى
�ضارة ( ,) arahوهي الروبوت التفاعلي اإلأول من نوعه. مدار ال�س��اعة طوال اأيام االأ�س��بوع .مُيكنك االطالع على مثال الأحد تطبيقات روبوت الدرد�س��ة
يف ال�سكل .1.3
el - ri in ال�سيارات ذاتية القيادة ars
الروبوتية o otics
كان االإجناز املهم االآخر هو تطوير ال�سيارات ذاتية القيادة كما يف ال�سكل 1.6
وه�ي �س�يارات تَ�س�تخدِ م ال�ذكاء اال�سطناع�ي لالنتق�ال عرب الط�رق واتخاذ ارتب��ط ال��ذكاء اال�سطناع��ي من��ذ بدايات��ه بالروبوتي��ة ،ف�اإذا كان الروب��وت ه��و الت�سوي��ر املادي للكائ��ن اال�سطناعي ،ف�اإنّ الذّكاء
القرارات حول كيفية التفاعل االآمن مع املركبات االأخرى ومع املُ�ساة .اأحد اال�سطناع��ي مُيث��ل دم��ا الروب��وتَ ،ومُينح��ه الق��درة عل��ى ال�س��عور بالبيئ��ة م��ن حول��ه ،واتخ��اذ الق��رارات ،والتكي��ف م��ع الظ��روف
املتطلبات الرئي�سة لهذه التطبيقات هو القدرة على معاجَلة البيانات املرئية املتغرة .كما مُيكن للروبوتات الذكية تطبيق هذه االإمكانات والقدرات الأداء جمموعة وا�س��عة من املهام دون التدخل الب�س��ري،
مث�ل ال�س�ور ومقاط�ع الفيدي�و وفهمه�ا ،وي�س�ار اإىل ذل�ك ع�ادة با�س�م روؤي�ة مث��ل :مه��ام الت�سني��ع ،واال�ستك�س��اف ،والبح��ث واالإنق��اذ ،والعدي��د من املهام االأخرى .ال�س��كل 1.4يو�سح خ��ط جتميع روبوتي يف
احلا�ض�ب ( ،)Computer Visionو مُيك�ن ا�س�تخدام خوارزمي�ات روؤي�ة م�سنع �سيارات.
احلا�س�ب للتع� ُّرف عل�ى الكائن�ات ،واالأ�س�خا�ص ،واخل�سائ��ص االأخ�رى يف
ال�س�ور ومقاط�ع الفيدي�و ،اإىل جان�ب فه�م �س�ياق املحت�وى ومعن�اه .وله�ذا
املج�ال العدي�د م�ن التطبيق�ات غ�ر الروبوتي�ة مث�ل :التع� ُّرف عل�ى الوج�ه،
واإدارة املحت�وى ،وحتلي�ل الو�س�ائط .وكان اأح�د ا إالجن�ازات الب�ارزة يف
ا�س�تخدام ال�ذكاء اال�سطناع�ي يف حتلي�ل ال�س�ور ومقاط�ع الفيدي�و تطوي�ر
خوارزمي�ات التعلُّ�م العمي�ق ،الت�ي ُمُيكنها حتليل كمي�ات كبرة من البيانات
وحتديد االأمناط املُع َّقدة يف ال�سور ومقاطع الفيديو.
�سكل � :1.6سيارة ذاتية القيادة �سكل :1.4خط جتميع روبوتي يف م�سنع �سيارات
17 16
riculture and limate Modelin ال راعة والنمذجة املناخية ndustries رّ ت بالذكاء األ�سطناعي ected by AI املجاألت التي ت أا
ُي�س��تخدَ م الذكاء اال�سطناعي يف الزراعة لتح�س��ني اإنتاج املحا�سيل الزراعية ورفع كفاءة املمار�س��ات الزراعية .ويتحقق التعليم ducation
ذل��ك بالتحلي��ل امل�س��تمر للبيان��ات ح��ول حال��ة الرتب��ة ،واأمن��اط الطق���ص ،والعوام��ل االأخ��رى للتنب�وؤ باأف�س��ل وق��ت لزراع��ة
�تخدم ال��ذكاء اال�سطناع��ي يف مراقب��ة املحا�سي��ل ط��وال الوق��ت وحتديد على مدى العقود القليلة املا�سية ،كانت هناك العديد من االإجنازات الرئي�سة
املحا�سي��ل الزراعي��ة ور َّيه��ا وح�ساده��ا .كم��ا ُي�س� َ مزايا الذكاء اإل�ضطناعي يف التعليم ال�س��تخدام ال��ذكاء اال�سطناع��ي يف التعلي��م .مب��ا يف ذل��ك تطوي��ر اأنظم��ة
امل�سكالت التي قد ت�سيبها مثل :االآفات اأو االأمرا�ص ،مما ي�سمح للمزارعني باتخاذ الالزم قَبل اأن توؤثر تلك امل�سكالت
عل��ى ج��ودة املحا�سي��ل الزراعي��ة ،واأح��د االأمثل��ة املُبتك��رة عل��ى تطبيق��ات ال��ذكاء اال�سطناع��ي يف الزراع��ة ه��و ا�س��تخدام AI ene its in education التدري���ص القائم��ة عل��ى ال��ذكاء اال�سطناع��ي الت��ي ت�س��تخدم تقني��ات معاجَل��ة
خوارزمي��ة ُ�سن��ع الق��رارات الب�س��يطة لتح�س��ني مواعي��د ال��ري .وم��ن االإجن��ازات الرئي�س��ة ا أالخ��رى ا�س��تخدام �س��بكات يو ّف ��ر وق ��ت املُع ِّلم ��ني واالأ�س ��اتذة •
اللغ��ات الطبيعي��ة للتفاع��ل م��ع الطلب��ة وتق��دمي املالحظ��ات ح��ول اأعمالهم .ثم
امل�ست�س��عرات ملراقب��ة املحا�سي��ل الزراعي��ة ،ومعاي��رة التطبيق��ات العالجي��ة الرئي�س��ة مثل االأ�س��مدة واملبي��دات .ويف االآونة اجَلامعيني. من�س��ات التعلُّ��م التك ُّيف��ي الت��ي تَ�س��تخدِ م خوارزمي��ات تعلُّ��م االآل��ة
ظه��رت ّ
ُخدمت ال�س��ور املُلتقط��ة بالطائ��رات املُ�س� َّ�رة واالأقم��ار ال�سناعي��ة لتحلي��ل املحا�سي��ل الزراعي��ة على نطاق االأخ��رة ،ا�س�ت ِ لتخ�سي���ص العملي��ة التعليمي��ة ل��كل طال��ب ا�س��تنادًا اإىل نق��اط قوت��ه و�سعف��ه.
ُمُيك��ن مل ُع ِّلم��ي ال��ذكاء اإل�ضطناع��ي • بعده��ا ،طُ �وِّرت اأنظم��ة الت�سحي��ح القائم��ة عل��ى ال��ذكاء اال�سطناع��ي الت��ي
�ستخدم لت�سميد اأحد احلقول.�سرة ُت َ وا�سع ،كما يف ال�سكل 1.8الذي يعر�ص طائرة ُم َّ ( )AI tutorsم�ساعدة الطلبة. تَ�س��تخدِ م خوارزمي��ات معاجَل��ة اللغ��ات الطبيعي��ة وتعلُّ��م االآل��ة لت�سحي��ح
ي�س��اعد املُع ِّل��م عل��ىاأن ي�سب��ح مع ّل ًم��ا • الواجب��ات املكتوب��ة وتق��دمي املالحظ��ات .ويف االآون��ة االأخ��رة ،ح��دث دم��ج بني
حمفّزً ا. امل�ساعدين االفرتا�سيني وروبوتات الدرد�سة يف جمال التعليم لتقدمي الدعم
ُتق ��دِّ م الوظائ ��ف املُ�س ��ت ِندة عل ��ى • املخ�س���ص للطلب��ة واالإجاب��ة عل��ى اأ�س��ئلتهم ب�س��كل ف��وري .مُيك��ن ا�س��تخدام
ال ��ذكاء اال�سطناع ��ي املالحظ ��ات ال��ذكاء اال�سطناع��ي لتحلي��ل البيان��ات حول اأداء الطلب��ة ،وخياراتهم املف�سلة
لكل من الطلبة واملُعلِّمني. يف التعلي��م ،وغره��ا م��ن العوام��ل االأخ��رى الالزم��ة لو�س��ع خط��ط تعليمي��ة
خُم�س�س��ة للطلب��ة ،وتق��دمي التو�سي��ات ب�س �اأن امل��واد اأو االأن�س��طة الت��ي م��ن
املرجح اأن تفيدهم بفعالية.
الرعاية ال�سحية Healthcare
الرعاي��ة ال�سحي��ة ه��ي جم��ال اآخ��ر ح َّق��ق تقدمً ��ا كب�رًا بف�س��ل ال��ذكاء اال�سطناع��ي .كان��ت االبت��كارات االأوىل يف �س��ورة
االأنظم��ة الت�س��خي�سية القائم��ة عل��ى ال��ذكاء اال�سطناع��ي وا�س��تخدامه يف اكت�س��اف االأدوي��ة .ث��م دجم��ه م��ع ال�س��جالت
ال�سحي��ة االإلكرتوني��ة ال�س��تخراج املعلوم��ات ذات ال�سل��ة ،ويف ال ِعقد الثاين من القرن احلادي والع�س��رينُ ،ط ِّورت اأنظمة
التطبي��ب ع��ن ُبع��د القائم��ة عل��ى ال��ذكاء اال�سطناع��ي .والي��ومُ ،ي�س��اعد ال��ذكاء اال�سطناع��ي احلدي��ث يف اإن�س��اء خط��ط
عالجي��ة ُخُم�س�س��ة للمري���ص ،وا�س��تخدام اأجه��زة تقني��ة يرتديه��ا ملتابع��ة حالت��ة ال�سحي��ة .ويلع��ب ال��ذكاء اال�سطناع��ي
دورًا كب�رًا يف جم��ال الرعاي��ة ال�سحي��ة ،فه��و ُمُي ِّك��ن االأطب��اء ومق ّدم��ي خدم��ات الرعاي��ة ال�سحي��ة االآخري��ن م��ن حتلي��ل
كميات كبرة من البيانات واتخاذ القرارات حول رعاية املر�سى .قد تاأتي البيانات من م�سادر متنوعة مثل :ال�سجالت
�ستخدم خوارزميات روؤيةالطبية ،والفحو�سات املعملية ،وكذلك ال�سور مثل :االأ�سعة ال�سينية اأو االأ�سعة املقطعية ،كما ُت َ
احلا�سب احلديثة ب�سورة متكررة للك�سف عن الت�سوهات وامل�ساعدة يف الت�سخي�ص الطبي.
6خلِّ�س كيفية ا�ض��تخدام تطبيقات الذكاء اإل�ضطناعي يف الت�ضدي لتغريات امل ُنا عرب النمذجة امل ُناخية والتح�ض��ينات
هياكل البيانات غري اإلأوليّة هياكل البيانات اإلأوليّة يف جمال الطاقة.
)(Non-Primitive Data Structures )(Primitive Data Structures
)(Trees ال�سجرة )(Graphs املخطط هياكل البيانات اخلطيَّة )(Linear Data Structures
عملية اإ�ضافة عن�ضر ush operation تُ�ضتخدَم اأنوا خمتلفة من اإلأرقام ( :)Numbersتُ�ستخدَ م االأرقام لتمثيل البيانات الرقمية وهي: •
هياكل البيانات لتطبيقات
يُط َل��ق عل��ى عملي��ة اإ�ساف��ة عن�س��ر جدي��د اإىل املُك ّد���ص ا�س��م اإ�ضاف��ة عن�ض��ر احلا�ضب ومهامّه املختلفة -االأعداد ال�سحيحة
اإ�ضافة عن�ضر بنا ًء على ما يتطلبه
اإىل امل ُكدّ�س العن�ضر (.)Push -االأرقام الع�سرية
عند القمة امل�ضرو والقيود املفرو�ضة
يَ�س��تخدِ م املُك ّد���ص موؤ�سّ �رًا ُيطل��ق علي��ه موؤ�س��ر اإلأعل��ى ( ،)Topويُ�س��ر اإىل على الذاكرة. ال�ضاًل�ضل الن�ضيّة ( :)Stringsال�سال�سل الن�سيّة هي جمموعات من االأحرف والكلمات. •
العن�ضر
عند القمة العن�سر املوجود يف قمة املُكدّ�ص ،وعند اإ�سافة عن�سر جديد اإىل املُكدّ�ص: البيانات املنطقية ( :)Booleanتكون قيم البيانات املنطقية اإما �سحيحة اأو خاطئة. •
E E • ت��زداد قيم��ة موؤ�س��ر االأعل��ى بقيم��ة واح��دة الإظه��ار املوق��ع اجَلدي��د ال��ذي
�س ُي�ساف العن�سر فيه.
D D D هياكل البيانات ري األأوليّة Non- rimiti e ata tructures
• يُ�ساف العن�سر اجَلديد اإىل قمة املُكدّ�ص.
C C C ُربمج وال
هي��اكل البيان��ات غ��ر االأول ّي��ة ه��ي هي��اكل متخ�س�س��ة ُتخ��زِّ ن جمموع��ة من القي��م .يكتبه��ا امل ِّ
َفيْ�س امل ُكدّ�س tac O er lo
تُع َّرف بلغة البايثون مثل هياكل البيانات االأوليّة.
B B B
يتميز املُكدّ�ص ب�سعة تخزينية ُحمدَّدة تعتمد على ذاكرة احلا�سب .اإذا مُيكن تق�سيم هياكل البيانات غر االأوليّة كذلك اإىل نوعني:
A A A
كانت الذاكرة ممتلئة ،فاإن اإ�سافة عن�سر جديد �سينتج عنها م�سكلة
املُكدّ�ص االأ ّويل املُكدّ�ص النهائي َفيْ�س امل ُكدّ�س ( .)Stack Overflowويق�سد بها جتاوز ال�سعة؛ لذا هي��اكل البيان��ات اخلط ّي��ة اأو امل ُت�ضل�ض��لة (:)Linear or sequential data structures •
يجب التحقق من امتالء ذاكرة املُكدّ�ص قبل اإ�سافة اأي عن�سر جديد. معني.
تُخزِّ ن هياكل البيانات اخلطيّة عنا�سر البيانات يف ت�سل�سل ّ
�سكل :1.13عملية اإ�سافة عن�سر اإىل املُكدّ�ص
هي��اكل البيان��ات غ��ري اخلط َّي��ة ( :)Non-linear data structuresال حتت��وي هي��اكل •
البيان��ات غ��ر اخلط َّي��ة عل��ى ارتباط ت�سل�س��لي بني عنا�س��ر البياناتُ ،ومُيكن رب��ط اأي زوج اأو
جمموعة من عنا�سر البيانات معًا ،والو�سول اإليها دون ت�سل�سل ُحم َّدد.
حذف عن�ضر عملية حذف عن�ضر Pop operation
من امل ُكدّ�س
العن�ضر هياكل البيانات اخلطية inear ata tructures
عند القمة يُطلق على عملية حذف عن�سر من املُكدّ�ص ا�سم حذف عن�ضر (.)Pop
العن�ضر عند حذف عن�سر من املُكدّ�ص: ُتخ��زِّ ن هي��اكل البيان��ات اخلط َّي��ة عنا�س��ر البيان��ات يف ت�سل�س��ل مع� ّ�ني .يف هذا الدر���ص �س��تتعلّم
عند القمة
E بع���ص هي��اكل البيان��ات اخلط ّي��ة مث��ل امل ُك ّد���س ( )Stackوالطاب��ور ( ،)Queueوهم��ا نوع��ان
E • يُحذَ ف العن�سر من قمة املُكدّ�ص. من هياكل البيانات االأكرث ا�ستخدامً ا يف احلياة اليومية.
D D D
• تنخف�ص قيمة موؤ�س��ر االأعلى بقيمة واحد الإظهار العن�سر التايل عند قمة
املُكدّ�ص. �سكل :1.12كومة من الكتب كمثال املُكدّ �ص tac
C C C واقعي على املُكدّ�ص
مُيك��ن متثي��ل املُك ّد���ص يف الواق��ع مبجموع��ة م��ن الكت��ب ُر َّ�س��ت ف��وق بع�سه��ا البع���ص ،كم��ا ه��و
َغيْ�س امل ُكدّ�س tac nder lo مو�س��ح يف ال�س��كل .1.12فالإن�س��اء تل��ك املجموع��ة ،علي��ك اأن ت�س��ع الكت��ب بع�سها فوق بع�ص، ّ
B B B
اإذا كن�ت ترغ�ب يف ح�ذف عن�س�ر من املُك ّد��ص ،عليك التّحقّ�ق ا ًأوال من قاعدة املُ ساف اآخرً ا وعندم��ا تري��د ا�س��تخدام اأح��د الكت��ب ،علي��ك اأخ��ذ الكت��اب من اأعل��ى املجموع��ة .وللو�سول اإىل
A A A اأن املُك ّد��ص يحت�وي عل�ى عن�س�ر واح�د عل�ى االأق�ل؛ ف�اإذا كان املُك ّد��ص أوأل
َخرج ا ً
ي ُ الكتب االأخرى عليك اإنزال الكتب من اأعلى املجموعة.
املُكدّ�ص االأ ّويل املُكدّ�ص النهائي فارغًا� ،سوف ينتج عن ذلك م�سكلة َغيْ�س امل ُكدّ�س ()StackUnderflow (:) ast In First Out-LIFO
ويق�سد بها االنخفا�ص عن احلد االأدنى لل�سعة. اآخر عن�سر ُم�ساف مُيكن متغريًا ديناميكيًا.
قد يكون حجم امل ُكدّ�س ثابتًا اأو ّ
�سكل :1.14عملية حذف عن�سر من املُكدّ�ص الو�سول اإليه ا ًأوال. تُطبِّق لغة البايثون امل ُكدّ�ضات با�ضتخدام القوائم.
25 24
مفكرة جوبيرت Jupyter Notebook املُكدّ �س يف لغة البايثون Stack in Python
يف ه��ذه الوح��دة �س��تكتب مقط ًع��ا برجم ًّي��ا بلغ��ة البايث��ون با�س��تخدام مفك��رة جوبي��رت ُمتثَّل املُكدّ�صات يف لغة البايثون با�صتخدام القوائم التي بدورها تُقدِّ م بع�ص العمليات التي ُميكن تطبيقها مبا�صر ًة على املُكدّ�صات.
( .)Jupyter Notebookوه��ي تطبي��ق الوي��ب املُ�س� َ
�تخدم الإن�س��اء املُ�س��تندات احلا�س��وبية
وم�س��اركتها .كل ُم�س��تند ُي�س��مى مفك��رة ،ويحت��وي عل��ى املقط��ع الربجم��ي ال��ذي كتب َت��ه، جدول :1.2عمليات املُكدّ �س
والتعليق��ات ،والبيان��ات االأول ّي��ة واملُعاجَل��ة ،وت�س�وّرات البيان��ات� .ستَ�س��تخدِ م االإ�س��دار غ��ري الو�صف العملية
امل ُت�ض��ل باإلإنرتن��ت ( )Offlineم��ن مفك��رة جوبي��رت ،واأ�س��هل طريقة لتثبيت��ه حمليًا هي من تُطبَّق عملية اإ�صافة عن�صر
خ��الل اأناكون��دا ( )Anacondaوه��ي من�س��ة توزي��ع مفتوح��ة امل�س��در للطلب��ة واله��واة، للمُكدّ�س يف لغة البايثون اإ�صافة العن�صر xاإىل نهاية القائمة. (listName.append)x
ومُيكنك تنزيلها وتثبيتها من الرابط التايل: َ با�صتخدام دالة .append حذف العن�صر االأخر من القائمة. ()listName.pop
https://www.anaconda.com/products/distribution
2
و�سيتم تثبيت لغة البايثون ومفكرة جوبيرت تلقائيًا.
مثاال على تطبيق املُكدّ�ص يف لغة البايثون:
�صت�صاهد ً
1اأن�صئ املُكدّ�ص لتخزين جمموعة من االأرقام (.)45 ،32 ،21 ،1
3 لفت مفكرة جوبيرت (:)Jupyter Notebook ِ 2
ا�صتخدم عملية حذف عن�صر ( )Popمن املُكدّ�ص مرتن حلذف العن�صرين االأخرين ( )45 ،32من املُكدّ�ص.
2 ا�سغط على ( Startبدء) 1 ،ثم ا�سغط على ( Anaconda3اأناكوندا .)3 ا�صتخدم عملية اإ�صافة عن�صر ( )Pushاإىل املُكدّ�ص الإ�صافة عن�صر جديد ( )78اإىل املُكدّ�ص.ِ 3
اخرت ( Jupyter Notebookمفكرة جوبيرت)3 .
45
اإ�صافة عن�صر
حذف عن�صر 32 اإىل امل ُكدّ�س
من امل ُكدّ�س
45
حذف عن�صر
من امل ُكدّ�س 78
32 32 78
2
1
1 يمكنك تحميل مفكرتك من
3 جهاز الحا�صب الخا�ص بك.
عند ت�صغيل برنامجك
�صتتم اإ�صافة خلية 2
مقطع برمجي جديدة
تلقائيًا.
�صكل :1.18اإن�صاء برنامج يف مفكرة جوبيرت
. Enter + Shift ُمُيكنك ت�صغيل برناجمك بال�صغط على حان الوقت حلفظ مفكّرتك.
حلفظ املفكرة اخلا�صة بك:
3
1 1 ا�صغط على ( Fileملف)
اخرت ( Save asحفظ ك��)2 .
2
تُ�ص��تخدَ م طريق��ة () listName.popل��كلٍ م��ن هي��اكل بيان��ات املُك ّد���ص والطاب��ور .عندم��ا تُ�ص��تخدَ م م��ع املُك ّد���ص ،ال A B C D A B C D A B C
تتطل��ب الطريق��ة اأي مُعام��ل .بينم��ا تتطل��ب الطريق��ة اإ�صاف��ة �صف��ر اإىل املُعام��ل عندم��ا تُ�ص��تخدم م��ع الطاب��ور:
0 1 2 3 0 1 2 0 1 2
ُو�صح يف اجلدول 1.4اأدناه. ( .listName.pop)0الفرق بن الدالتن م ّ
بعد اإ�صافة عن�صر للطابور قبل
جدول :1.4طريقة () listName.popمقابل طريقة (listName.pop)0 �صكل :1.23عملية اإ�صافة عن�صر للطابور
الو�صف الطريقة
اإذا كان ُم ِ
عامل الدالة فارغً اُ ،يحذف العن�صر االأخر من نهاية القائمة التي متثل املُكدّ�ص. ()listName.pop
اإذا كان ُم ِ
عامل الدالة �صف ًراُ ،يحذف العن�صر االأول من القائمة التي متثل الطابور. (listName.pop)0 قبل اأي اإجراء عليك عملية حذف عن�صر من الطابور Dequeue Operation
التحقق مما اإذا كانت هناك
مثاال على تطبيق الطابور يف لغة البايثون:
�صن�صتعر�ص لك ً م�صاحة فارغة يف الطابور يُطلق على عملية حذف عن�صر من الطابور ا�صم حذف عن�صر من الطابور (.)Dequeue
• اأن�صئ طابورًا لتخزين جمموعة من االأرقام (.)45 ،32 ،21 ،1 الإ�صافة عن�صر جديد، حلذف عن�صر من الطابور:
وتوافر عن�صر واحد على • يُحذف العن�صر املُ�صار اإليه باملوؤ�صر االأمامي.
• ا�صتخدم عملية حذف عن�صر من الطابور مرتن حلذف العن�صرين االأ َّولَن منه. االأقل لت�صديره.
• ا�صتخدم عملية اإ�صافة عن�صر اإىل الطابور الإ�صافة عن�صر جديد اإليه. • تتم زيادة قيمة املوؤ�ص��ر االأمامي بقيمة واحد بحيث ي�ص��ر اإىل العن�صر اجلديد التايل يف
الطابور.
االأمامي اخللفي االأمامي اخللفي اخللفي االأمامي
االأمامي اخللفي االأمامي اخللفي االأمامي اخللفي
1 21 32 45 1 21 32 45 21 32 45
0 1 2 3 حذف عن�صر 0 1 2 حذف عن�صر 0 1 B C D A B C D A B C D
من الطابور من الطابور 0 1 2 0 1 2 3 0 1 2 3
جدول :1.5وظائف وحدة الطابور النمطية عليك ا ًأوال اأن تُفرِ غ الطابور من العنا�صر.
لكي ت�صاهد ما قد يحدث عندما حتاول حذف عن�صر من طابور فارغَ ،
الو�صف الوظيفة
]myQueue=[1,21,32,45
() queueName=queue.Queueتن�صئ طابورًا جديدً ا ا�صمه .queueName )print("Initial queue: ", myQueue
ت�صيف العن�صر xاإىل الطابور. (queueName.put)x )a=len(myQueue
)print("size of queue ",a
تعود بقيمة حجم الطابور. ()queueName.qsize # empty the queue
تعر�ص وحتذف العن�صر االأول من الطابور والعن�صر االأخر من املُكدّ�ص. ()queueName.get for i in range(a):
)myQueue.pop(0
تع��ود بقيم��ة �( Trueصحي��ح) اإن كان الطاب��ور ممتل ًئ��ا ،وقيم��ة ( Falseخط�اأ) ()queueName.full )print(myQueue
اإن كان الطابور فارغً ا ،وميكن تطبيقها على املُكدّ�ص كذلك. )myQueue.pop(0
تع��ود بقيم��ة �( Trueصحي��ح) اإن كان الطاب��ور فارغً ��ا والقيم��ة ( Falseخط�اأ) ()queueName.empty
اإن كان الطابور ممتلئًا ،ميكن تطبيقها على املُكدّ�ص كذلك. ]Initial queue: [1, 21, 32, 45
size of queue 4
][
* from queue import تُ�صتخدَم وظائف مكتبة الطابور مع كلٍ من امل ُكدّ�س والطابور.
--------------------------------------------------------------------
)(myQueue = Queue IndexError )Traceback (most recent call last
# add the elements in the queue )(>Input In [6], in <cell line: 9
�صت ِ
َ�صتخدم وحدة الطابور النمطية الإن�صاء طابور. 7 )(myQueue.pop
)"myQueue.put("a
)"myQueue.put("b يف هذا املثال عليك: )8 print(myQueue
)"myQueue.put("c )(----> 9 myQueue.pop
)"myQueue.put("d • ا�ص��تراد مكتب��ة الطاب��ور ( )Queueال�ص��تخدام
)"myQueue.put("e IndexError: pop from empty list
طُ رُق الطابور.
# print the elements of the queue • اإن�صاء طابور فارغ با�صم ( myQueueطابوري).
for element in list(myQueue.queue):
)print(element • اإ�صاف��ة العنا�ص��ر e ،d ،c ،b ،aاإىل الطاب��ور
( myQueueطابوري). عليك اأن تتحقق دومًا من وجود عنا�صر يف ظهر الخطاأ الأنك حاولت
الطابور قبل حماولة حذف عن�صر منه. حذف عن�صر من طابور فارغ.
a • طباعة عنا�صر الطابور.
b عليك ا�صتيراد وحدة
c الطابور في بداية
d المقطع البرمجي.
e
37 36
كما ذُ ِكر من قبل فاإن وحدة الطابور حتتوي على بع�ص الوظائف اجلاهزة لال�صتخدام مع املُكدّ�ص اأو الطابور .اجلدول اأن�ص��ئ طاب��ورًا مُك َّو ًن��ا م��ن خم���ص قي��م يق��وم املُ�ص��تخدِ م باإدخالها اأثن��اء تنفيذ الربنام��ج ،ثم اطبع هذه القي��م ،ويف النهاية
1.6يو�صح وظائف الوحدة التي ُميكن ا�صتخدامها مع هيكل بيانات املُكدّ�ص. اطبع حجم الطابور.
* from queue import
جدول :1.6وظائف الوحدة املُ�صتخدمة ُ
للمكدّ �س
الو�صف الوظيفة )(myQueue = Queue
() stackName=queue.LifoQueueتن�صئ مُكدّ�صً ا جديدً ا ا�صمه .stackName # the user enters the elements of the queue for i in range(5):
for i in range(5):
حتذف العن�صر االأخر من املُكدّ�ص. ()stackName.get )" element=input("enter queue element:
)myQueue.put(element
�صتَ�صتخدِ م وحدة الطابور الإن�صاء مُكدّ�ص فارغ. # print the elements of the queue
for element in list(myQueue.queue):
* from queue import )print(element
تذكّر اأن العمليات يف امل ُكدّ�س تعمل وفقًا
)(myStack = LifoQueue ))(print ("Queue size is: ",myQueue.qsize
أوال (.)LIFO
لقاعدة امل ُ�صاف اآخرًا يَخرُج ا ً
)"myStack.put("a
)"myStack.put("b enter queue element: 5
)"myStack.put("c
عند ا�صتخدام دالة getمع الطابور، enter queue element: f
)"myStack.put("d �صتَ�صتنِد عمليات اال�صتدعاء والطباعة اإىل enter queue element: 12
)"myStack.put("e أوال (.)FIFO
أوال يَخرُج ا ً
قاعدة امل ُ�صاف ا ً enter queue element: b
enter queue element: 23
for i in range(5): 5
)(k=myStack.get f
)print(k 12
b
# empty the stack 23
)(checkEmpty= myStack.empty Queue size is: 5
)print("Is the stack empty?", checkEmpty
اأن�صئ برناجمً ا للتحقق مما اإذا كان الطابور فارغً ا اأم ممتلئًا.
e
d * from queue import
c
b )(myQueue = Queue
a
Is the stack empty? True )"myQueue.put("a
)"myQueue.put("b
)"myQueue.put("c
مثال :الطباعة Print )"myQueue.put("d
)"myQueue.put("e
يظه��ر اأمام��ك يف املث��ال الت��ايل حم��اكاة لطاب��ور الطباع��ة يف الطابعة .عندما ي ِ
ُر�ص��ل املُ�ص� ِ
�تخدمون اأوام��ر طباعة ،تُ�صاف
اإىل طابور الطباعة .ت ِ
َ�صتخدم الطابعة هذا الطابور لتحديد امللف الذي �ص ُيطبع ا ًأوال. )(checkFull=myQueue.full
)print("Is the queue full? ", checkFull
• افرت���ص اأن �ص��عة الطابع��ة ه��ي فق��ط 7ملف��ات ،ولك��ن يف الوق��ت نف�ص��ه ،حتت��اج اإىل طباع��ة 10ملف��ات م��ن املل��ف A )(checkEmpty= myQueue.empty
اإىل امللف .J )print("Is the queue empty? ", checkEmpty
• اكتب برناجمً ا ُميثّل طابور الطباعة منذ بدء اأمر الطباعة االأول Aحتى االنتهاء من كل اأوامر الطباعة.
Is the queue full? False
• اأ�صف اللبنة التي توؤكد اأن طابور اأوامر الطباعة فارغ. Is the queue empty? False
39 38
:ُميكنك ا�صتخدام اخلوارزمية االآتية
print()
return . اأن�صئ طابور اأوامر الطباعة1
printDocument = printQueue.get()
time.sleep(1) # wait one second A B C D E F G
يفG اإىلA اأدرِج امللفات من2
print ("OK - ", printDocument, " is printed.") 0 1 2 3 4 5 6 .طابور اأوامر الطباعة
printQueueSizeMessage()
# print a message with the size of the queue متت طباعته A B C D E F G H
.H واأدرج امللفA اأخرِ ج امللف 3
def printQueueSizeMessage():
printQueueSize = printQueue.qsize() 0 1 2 3 4 5 6
if printQueueSize == 0:
.I واأدرج امللفB اأخرِ ج امللف 4
print ("There are no documents waiting for printing.") متت طباعته B C D E F G H I
elif printQueueSize == 1: 0 1 2 3 4 5 6
print ("There is 1 document waiting for printing.")
else:
C D E F G H I J
.J واأدرج امللفC اأخرِ ج امللف 5
print ("There are ", printQueueSize, " documents waiting for printing.")
متت طباعته
print() 0 1 2 3 4 5 6
# the main program
اأخرج امللفات التي متت طباعتها 6
# send documents to the print queue for printing D E F G H I J
addDocument("Document A") .) واحدً ا تلو االآخرD-E-F-G-H-I-J(
0 1 2 3 4 5 6
addDocument("Document B")
addDocument("Document C")
addDocument("Document D")
addDocument("Document E") # import the queue library
addDocument("Document F") from queue import *
addDocument("Document G") # import the time library to use the sleep function
printDocument() import time
addDocument("Document H") # initialize the variables and the queue
printDocument() printDocument = " "
addDocument("Document I") printQueueSize = 0
printDocument() printQueueMaxSize = 7
addDocument("Document J") printQueue = Queue(printQueueMaxSize)
addDocument("Document K") # add a document to print the queue
printDocument()
def addDocument(document):
printDocument()
printQueueSize = printQueue.qsize()
printDocument()
if printQueueSize == printQueueMaxSize:
printDocument()
printDocument() print("!! ", document, " was not sent to print queue.")
printDocument() print("The print queue is full.")
printDocument() print()
printDocument() return
printQueue.put(document)
time.sleep(0.5) #Wait 5.0 seconds
Document A sent to print queue. print(document, " sent to print queue.")
There is 1 document waiting for printing. printQueueSizeMessage()
# print a document from the print queue
Document B sent to print queue.
There are 2 documents waiting for printing. def printDocument():
printQueueSize = printQueue.qsize()
Document C sent to print queue. if printQueueSize == 0:
There are 3 documents waiting for printing. print("!! The print queue is empty.")
41 40
هياكل البيانات الثابتة واملتغرة Static and Dynamic Data Structures Document D sent to print queue.
�ص��بق تو�صيح اأن هياكل البيانات هي طريقة فعالة لتخزين البيانات وتنظيمها ،وباالإ�صافة اإىل ما تعلمته حول ت�صنيف هياكل There are 4 documents waiting for printing.
أي�صا اإىل ثابتة ( )Staticو متغرة (.)Dynamic البيانات اإىل اأوليّة وغر اأوليّة ،فاإنه ميكن ت�صنيفها ا ً Document E sent to print queue.
There are 5 documents waiting for printing.
هياكل البيانات الثابتة Static Data Structure
Document F sent to print queue.
يف البيان��ات الثابت��ة ،يك��ون حج��م الهي��كل ثاب ًت��ا ،و ُتخ�زَّن عنا�ص��ر البيان��ات يف مواق��ع الذاك��رة املتج��اورةُ .تع� ُّد امل�صفوف��ة There are 6 documents waiting for printing.
( )Arrayاملثال االأبرز لهياكل البيانات الثابتة.
Document G sent to print queue.
There are 7 documents waiting for printing.
هياكل البيانات املتغرة Dynamic Data Structure
يف هي��اكل البيان��ات املتغ��رة ،ال يك��ون حج��م الهي��كل ثاب ًت��ا ولك��ن ميك��ن تعديل��ه اأثن��اء تنفي��ذ الربنام��ج ،ح�ص��ب العملي��ات OK - Document A is printed.
There are 6 documents waiting for printing.
املُن َّف��ذة علي��ه .تُ�ص َّم��م هي��اكل البيان��ات املتغ��رة لت�ص��هيل تغي��ر حج��م هي��اكل البيان��ات اأثن��اء الت�ص��غيل .و ُتع� ُّد القائم��ة
املرتابطة ( )Linked Listاملثال االأبرز لهياكل البيانات املتغرة. Document H sent to print queue.
There are 7 documents waiting for printing.
جدول :1.7مقارنة بني هياكل البيانات الثابتة واملتغرة OK - Document B is printed.
There are 6 documents waiting for printing.
املتغرة الثابتة
Document I sent to print queue.
ميكن تغير حجم الذاكرة اأثناء الت�صغيل. حجم الذاكرة ثابت. حجم الذاكرة There are 7 documents waiting for printing.
ُتخ�زَّن العنا�ص��ر يف مواقع متجاورة ُتخ � َّزن العنا�ص��ر يف مواق��ع ع�ص��وائية يف الذاك��رة OK - Document C is printed.
الرئي�صة. يف الذاكرة الرئي�صة. اأنواع ذاكرة التخزين There are 6 documents waiting for printing.
اأبطاأ. �صرعة الو�صول اإىل البيانات اأ�صرع. Document J sent to print queue.
There are 7 documents waiting for printing.
مثال على العُقدة: لرنب��ط ال ُعق��دة ال�ص��ابقة بال ُعق��دة التالي��ة بقيم��ة بيان��ات ،42
• بيانات العُقدة هي الرقم .15 الت��ي بدوره��ا تُ�ص��ر اإىل ال ُعق��دة الثالث��ة واالأخ��رة عن��د عن��وان
30بقيمة بيانات .37 العُقدة Node
• عنوان العُقدة يف الذاكرة هو .10 تتكون كل عُ قدة يف القائمة املرتابطة من جزئن:
• عنوان العُقدة التالية هو .20
12 • اجلزء االأول يحتوي على البيانات.
• اجلزء الثاين يحتوي على موؤ�صر يُ�صر اإىل العُقدة التالية.
10 15 20
10 20 30
15 20 42 30 37
حقل البيانات. موؤ�صر اإلى العُقدة التالية. لقراءة حمتوى عُقدة حمددة ،عليك
العنوان/الراأ�س البيانات العنوان التايل املرور على كل العُقد ال�صابقة.
�صكل :1.28ر�صم تو�صيحي للعُقد
�صكل :1.31املوؤ�صرات يف القائمة املرتابطة
جدول :1.8األختالفات بني القائمة والقائمة املرتابطة القيمة الفارغة تعني اأنها
مثاال على القائمة املرتابطة لالأعداد ال�صحيحة.
لت�صاهد ً
القائمة املرتابطة القائمة االختالفات بال قيمة ،اأو غر ُحمدَّدة ،اأو تتكون القائمة املرتابطة من خم�ص عُ قد.
فارغة .على الرغم من اأنه يف
املواقع ع�صوائية يف الذاكرة. طريقة تخزين الذاكرة املواقع متجاورة يف الذاكرة. بع�س االأحيان ن�صتخدم الرقم الراأ�س القيمة الفارغة
ميكن الو�صول اإىل العنا�صر من خالل املوؤ�صر ميكن الو�صول اإىل كل عن�صر برقم الهيكل 0لالإ�صارة اإىل القيمة الفارغة،
(.)Pointer الفهر�س (.)Index اإال اأنه رقم حمدَّد وقد ي�صر
اإىل قيمة حقيقية. 3 12 1 95 21
ُتخ �زَّن الكائن��ات يف �ص��ورة عُ ق��د حتت��وي عل��ى يُخزَّن كل عن�صر تلو االآخر. احلجم
البيانات وعنوان العن�صر التايل. �صكل :1.29ر�صم تو�صيحي ُميثّل قائمة مرتابطة لالأعداد ال�صحيحة
تُخزَّن البيانات واملوؤ�صرات يف الذاكرة. تُخ َّزن البيانات وحدَ ها يف الذاكرة. ا�صتخدام الذاكرة ال ُعق��د يف القائم��ة ال يك��ون له��ا ا�ص��م ،وم��ا تعرف��ه عنها هو عنوانها (املوقع الذي تخزن في��ة العُقدة يف الذاكرة) .للو�صول
نوع الو�صول اإىل البيانات الو�صول الع�صوائي اإىل اأي عن�صر بالقائمة .الو�صول املت�صل�صل اإىل العنا�صر. اإىل اأي عُ ق��دة بالقائم��ة ،حتت��اج فق��ط اإىل معرف��ة عن��وان ال ُعق��دة االأوىل .ث��م تتب��ع �صل�ص��لة ال ُعق��د للو�ص��ول اإىل ال ُعق��دة
�صرعة اإ�صافة العنا�صر وحذفها. �صرعة االإ�صافة واحلذف بطء اإ�صافة العنا�صر وحذفها. املطلوبة.
45 44
ا ِأ�ص ْف االآن املزيد من العُقد اإىل القائمة املرتابطة. القائمة املرتابطة يف لغة البايثون Linked List in Python
الفئة (:)Class
الفئ��ة ه��ي هي��كل بيان��ات مع�رّف ال تُوف��ر لغ��ة البايث��ون ن��وع بيان��ات ُحم َّدد ُم�ص��بقًا للقوائ��م املرتابطة .عليك اإن�ص��اء نوع البيانات
# single node
class Node: بوا�ص��طة امل�ص��تخدم ،ويحت��وي متثيال لهذا النوع من البيانات .الإن�صاء
اخلا�ص بك ،اأو ا�صتخدام مكتبات البايثون التي توفر ً
def __init__(self, data = None, next=None):
عل��ى اأع�صاء البيانات (ال�ص��مات قائم��ة مرتابط��ة ،ا�ص��تخدم فئ��ات البايث��ون .يف املث��ال املو�ص��ح بال�ص��كل � ،1.32صتُن�ص��ئ قائم��ة
self.data = data مرتابطة مكونة من ثالث ُعقد ،كل واحدة ت�صم يومً ا من اأيام االأ�صبوع.
self.next = next ،)Propertiesوالطرا ئ��ق
( ا ل�ص��لو ك )B e h a v i o r
# an empty linked list with a head node.
class LinkedList:
اخلا�ص��ة بها .وتُ�ص��تخدَ م الفئات Monday Tuesday Wednesday
def __init__(self): كقوالب الإن�صاء الكائنات.
self.head = None �صكل :1.32مثال على القائمة املرتابطة
Monday
Tuesday اخلطوة التالية هي اإن�ص��اء قائمة مرتابطة حتتوي على عُ قدة واحدة ،وهذه املرة �صتَ�ص��تخدِ م موؤ�ص��ر الراأ���ص لالإ�ص��ارة اإىل
Wednesday العُقدة االأوىل.
.3ار ُب��ط ال ُعق��دة 12بال ُعق��دة 37 لدي��ك قائم��ة مرتابط��ة م��ن عن�صري��ن 12 :و ،99وتري��د اإدراج العن�ص��ر 37كعن�ص��ر
(متت اإ�صافة العُقدة اجلديدة). ثانٍ بالقائمة .يف النهاية� ،صيكون لديك قائمة من ثالثة عنا�صر 12 :و 37و.99 Monday
47 46
# single node # single node
class Node: 12 37 99 class Node:
def __init__(self, data = None, next=None): def __init__(self, data = None, next=None):
self.data = data node node.next node.next.next self.data = data
self.next = next self.next = next
.99 بالعُقدة12 اربُط موؤ�صر العُقدة.1
# linked list with one head node # linked list with one head node
class LinkedList: .37 احذف العُقدة.2 class LinkedList:
def __init__(self): def __init__(self):
self.head = None self.head = None
1
12 99
def deleteNode(key, follow): def insertAfter(new, prev):
node node.next # create the new node
# store the head node new_node = Node(new)
temp = follow.head
2 # make the next of the new node the same as the next of the previous node
37 new_node.next = prev.next
# find the key to be deleted,
node.next # make the next of the previous node the new node
# the trace of the previous node to be changed
prev.next = new_node
while(temp is not None):
if temp.data == key: النتيجة النهائية.3
break
# create the linked list
prev = temp L_list = LinkedList()
temp = temp.next 3
12 99 # add the first two nodes
# unlink the node from the linked list L_list.head = Node(12)
node node.next
prev.next = temp.next second = Node(99)
temp = None L_list.head.next = second
# create the linked list # insert the new node after node 12 (the head of the list)
L_list = LinkedList() insertAfter(37, L_list.head)
51 50
الدر�س الثالث 6با�صتخدام العُقد التالية ار�صِّ م القائمة املرتابطة ثم اكتب القيم يف القائمة بالرتتيب ال�صليم:
هياكل البيانات غر اخلط َّية
=3 الراأ�س
5 9 2
3 0 4
4 1 5
2 -3
يف الدر���ص ال�ص��ابق تع ّلم��ت بع���ص هي��اكل البيان��ات اخلط َّي��ة ،وفيه��ا كل عن�ص��ر يَتب��ع العن�ص��ر االآخ��ر بطريق��ة خط َّي��ة .ه��ل ميكنك
التفكر يف حالة ال ت�صر فيها االأ�صياء بت�صل�صل خطيّ ؟ على �صبيل املثال ،هل ميكن لعن�صر واحد اأن يتبعه اأكر من عن�صر؟
�صكل :1.33الر�صم التو�صيحي لهياكل البيانات اخلطيَّة وغر اخلطيَّة ِ�صفْ العملية املطلوبة حلذف العُقدة الثانية من القائمة. •
جدول :1.9الفرق بني هياكل البيانات اخلط َّية وغر اخلط َّية
هياكل البيانات غر اخلطيَّة هياكل البيانات اخلطيَّة
تُر َّت��ب عنا�ص��ر البيان��ات يف ترتي��ب خط��ي يرتب��ط في��ه ميكن ربط عنا�صر البيانات بالعديد من العنا�صر االأخرى. ار�صم القائمة املرتابطة النهائية. •
كل عن�صر بالعن�صرين ال�صابق والتايل له.
ال تُ�صتَعر�ص عنا�صر البيانات يف م�صار واحد. تُ�صتَعر�ص عنا�صر البيانات يف م�صار واحد.
معقّد التنفيذ. �صهل التنفيذ.
53 52
وفيما يلي مثال على هيكل بيانات ال�صجرة: عُقدة األأ�صجار Trees
أ�صال
قد تكون العُقدة فرعًا وا ً
يف الوقت نف�صه :فرع للعُقدة اجلِ ذر حافّة االأ�ص��جار ه��ي ن��وع م��ن هي��اكل البيان��ات غ��ر اخلط َّي��ة ،وتتك��ون ال�ص��جرة م��ن جمموع��ة من
ال�صابقة واأ�صل للعُقدة التالية. ال ُعق��د املُر َّتب��ة يف ترتي��ب هرم��ي .ترتب��ط كل عُ ق��دة بواح��دة اأو اأك��ر م��ن ال ُعق��د ،وترتب��ط
احليوانات ال ُعق��د م��ع احل��واف يف من��وذج عالق��ة يرب��ط ب��ن االأ�ص��ل ( )Parentوال َف��رع (.)Child
�تخدم االأ�ص��جار يف العدي��د م��ن جم��االت عل��وم احلا�ص��ب ،مبا يف ذلك اأنظمة الت�ص��غيل، تُ�ص� َ
العُقدة االأ�صل والر�ص��وميات ،واأنظم��ة قواع��د البيان��ات ،واالألع��اب ،وال��ذكاء اال�صطناع��ي ،و�ص��بكات
�صكل :1.34العالقات يف ال�صجرة احلا�صب.
الفقاريَّات الالفقاريَّات
مُ�صطلحات تقنية ال�صجرة املُ�صتخدمة يف هيكل بيانات ال�صجرة
اجلِ ذر ( :)Rootالعُقدة االأوىل والوحيدة يف ال�ص��جرة التي لي���ص لها اأ�صل وتاأتي يف امل�ص��توى االأول من ال�ص��جرة ،مثل: •
العُقدة Aيف ال�صكل .1.35
الطيور االأ�صماك الثد ِييَّات احل�صرات العنكبوتيات
الفَرع ( :)Childالعُقدة املرتبطة مبا�ص��ر ًة ِبعُقدة يف امل�ص��توى االأعلى ،مثل :العُقدة Hهي فرع العُقدة ،Dوالعُقدتان •
العُقدة الفَرع الورقة Bو Cهما فرعا العُقدة .A
االأ�صل ( :)Parentالعُقدة التي لها فرع اأو اأكر يف امل�صتوى االأقل ،مثل :العُقدة Bهي اأ�صل العُقدتن Dو.E •
اجلَمل احل�صان النمر الورقة ( :)Leafالعُقدة التي لي�ص لها اأي عُ قدة فرعية ،مثل :الورقة .F •
االأ�صقاء االأ�صقاء ( :)Siblingsكل العُقد الفرعية التي تنبثق من االأ�صل نف�صه ،مثل:العُقدتان Dو� Eصقيقتان. •
�صكل :1.36مثال على هيكل بيانات ال�صجرة
احلواف ( :)Edgesالروابط التي ت�صل بن العُقد وال�صجرة. •
ال�صجرة الفرعية ( :)Sub-Treeال�صجرات التي توجد داخل ال�صجرة االأكرب حجمًا ،مثل:ال�صجرة التي بها العُقدة •
خ�صائ�س هيكل بيانات ال�صجرة Tree Data Structure Features Dهي االأ�صل والعُقدتان Hو Iهما الفرعان.
يُ�صتخدم لتمثيل املُخطَّ ط الهرمي. • ِ
اجلذر
يتميّز باملرونة ،فمن ال�صهل اإ�صافة عن�صر من ال�صجرة اأو حذفه. • ال�صجرة (:)Tree
امل�صتوى االأول
�صهولة البحث عن العنا�صر فيه. • ال�ص��جرة ه��ي ن��وع م��ن هي��اكل A
يعك�ص العالقات الهيكلية بن البيانات. • البيان��ات غ��ر اخلط َّي��ة ،وتتكون
م��ن جمموع��ة من ال ُعق��د املُرتَّبة
مثال يف ترتيب هرمي. احلواف
تنظي��م امللف��ات يف نظ��ام الت�ص��غيل ه��و مث��ال عمل��ي عل��ى ال�ص��جرة .كم��ا يت�ص��ح يف ال�ص��كل ،1.37يوج��د داخ��ل جمل��د امل�صتوى الثاين
( Documentsامل�صتندات) ُجملد اآخر ا�صمه ( Python Projectsم�صروعات البايثون) يحتوي على ملفن اآخرين. B C
العُقدة االأ�صقاء
This PC احلافة (:)Edge االأ�صل
احلاف��ة ت�ص��ل ب��ن عُ ق��د هي��كل امل�صتوى الثالث
بيانات ال�صجرة. D E F G
2
جدول :1.11الفرق بني األأ�صجار واملُخطَّ طات
D 1
B امل ُخطَّ طات االأ�صجار
D
ت�ص�كّل ال ُعق��د املتّ�صل��ة فيه��ا منوذجً ��ا ت�صكّل العُقد املتّ�صلة فيها
D
3 منوذجً ا �صبكيًّا. هرميًّا.
ال توجد فيها عُ قدة فريدة يف االأ�صجار اجلذرية توجد عُ قدة
اأو جذرية. فريدة تُ�صمى اجلِ ذر.
�صكل � :1.44صبكة الويب العاملية 5 4 ترتب��ط ال ُعق��د يف �ص��ورة عالق��ة ب��ن ال تنطبق عالقة االأ�صل
والفَرع بن العُقد. االأ�صل والفَرع.
يَ�ص��تخدِ م ُحم�رِّك البح��ث قوق��ل ( )Google Search Engineمنهجي��ة مماثل��ة لتحديد االأهمية الن�ص��بية ل�صفحات تركيب املخطّ طات اأكر تتميز بب�صاطة الرتكيب.
الوي��ب وم��ن ث��م ترتي��ب نتائ��ج البح��ث ح�ص��ب اأهميته��ا .اخلوارزمي��ة املُ�ص��تخدَ مة بوا�ص��طة قوق��ل هي خوارزمي��ة ت�صنيف 6 تعقيدً ا.
ال�صفحة اأو بيج رانك ( )PageRankالتي ابتكرها موؤ�صِّ �صو قوقل. قد حتتوي على احللقات. ال ُي�صمح فيها باحللقات.
�صكل :1.42مثال على ُخمطَّ ط به �صت عُ قد وع�صر حواف
59 58
a املُخطَّ طات يف لغة البايثون Graphs in Python في�صبوك Facebook
ال تُو ِف��ر لغ��ة البايث��ون نوعً ��ا حمددًا م�ص��بقًا من البيانات لالأ�ص��جار ،كم��ا اأنّها ال تُو ِفر نو ًعا في�صبوك هو مثال اآخر على املُخطَّ طات غر املُوجَّ هة .يظهر بال�صكل 1.45
امل ُ�صتخدِ م
b c حم��ددًا م�ص��بقًا م��ن البيان��ات لل ُمخطَّ ط��ات( ،تذك��ر اأن االأ�ص��جار ه��ي ن��وع خا���ص م��ن ال ُعق��د الت��ي ُمت ِّث��ل ُم�ص��تخدمي في�ص��بوك ،بينم��ا ُمت ِّث��ل احل��واف عالق��ات
املُخطَّ طات) .ومع ذلكُ ،ميكن بِناء املُخطَّ طات با�صتخدام القوائم والقوامي�ص. ال�صداق��ة .عندم��ا تري��د اإ�صافة �صدي��ق ،يجب عليه قبول طلب ال�صداقة؛
ولن يكون ذلك ال�صخ�ص �صديقك على ال�صبكة دون قبول طلب ال�صداقة.
d e يف املثال التايل� ،صتقوم بتنفيذ التايل: (عقدت��ن) ه��ي عالق��ة ثنائي��ة العالق��ة هن��ا ب��ن اثن��ن م��ن املُ�ص� ِ
�تخدمن ُ
�صكل :1.48مثال على املُخطَّ ط وجه مثل املُو�صح بال�صكل .1.48 .1اإن�صاء ُخمطَّ ط ُم َّ �تخدم خوارزمي��ة مقرتح��ات االأ�صدق��اء يف في�ص��بوك نظري��ة االجت��اهُ .ت�ص� َ
.2اإن�صاء دالة الإ�صافة عُ قدة اإىل املُخطَّ ط. عالقة ال�صداقة املُخطَّ طات .تَدر�ص حتليالت ال�صبكات االجتماعية العالقات االجتماعية
.3اإن�صاء دالة حتتوي على كل م�صارات املُخطَّ ط. با�صتخدام نظرية املُخطَّ طات اأو ال�صبكات من علوم احلا�صب.
�صكل ُ :1.45خمطَّ ط في�صبوك غر املُوجَّ ه
"myGraph = { "a : ["b","c"], خرائط قوقل Google Maps
"b" : ["c", "d"],
"c" : ["d", "e"], ي�ص��تخدم تطبيق خرائط قوقل وكل التطبيقات املُ�ص��ابهة له املُخطَّ طات لعر�ص اأنظمة النقل واملوا�صالت حل�ص��اب امل�ص��ار
"d" : [], االأق�ص��ر ب��ن موقع��ن .تَ�ص� ِ
�تخدم ه��ذه التطبيق��ات املُخطَّ ط��ات الت��ي حتتوي على عدد كب��ر جدً ا من ال ُعق��د واحلواف التي
"e" : [],
}
ال ُميكن متييزها بالعن املُجردة.
)print(myGraph
طبقة امل ُخرَجات الطبقات املخف َّية طبقة امل ُدخَ الت
�صكل :1.47هيكل ال�صبكات الع�صبية
61 60
مترينات # for each neighbouring node of a single node
for neighbour in graph[node]:
) االأهمي��ة الن�ص��بية ل�صفح��ةPageRank( َحت�صِ ��ب خوارزمي��ة قوق��ل ت�صني��ف ال�صفح��ة.4 # print the graph contents
print("The graph contents")
.ويب على �صبكة الويب العاملية print(generate_edges(myGraph))
. ال�صبكات الع�صبية هي نوع املُخطَّ طات املُ�صتخدَ م لت�صوير امل�صكالت االأخرى.5 # add more edges to the graph
addEdge(myGraph,'a','e')
addEdge(myGraph,'c','f')
63 62
5يظهر اأمامك يف ال�صورة التالية �صفحة حمتويات الكتاب. 4امالأ الفراغات باالأ�صماء ال�صحيحة الأجزاء ال�صجرة.
اأكمل متثيل ال�صجرة. •
Book
Book
C1 a
C1 C2
C1.1
C1.2
C2
C1.1
C2.1 b e
C2.1.1
C2.1.2
C2.2
C2.3 f
C3
g
j k
هل هي �صجرة ثنائية؟ َعلِّل اإجابتك. •
65 64
با�صتخدام القامو�س يف لغة البايثون اكتب الربنامج املنا�صب لتمثيل هذه ال�صجرة ،ثم اأ�صف العُقدة االأ�صل والعُقد الفرعية. 6ار�صم ال�صجرة الناجتة عن املعطيات التالية:
العُقدة Aلها فرعان Bو.C •
العُقدتان Dو Eلهما االأ�صل نف�صه وهو العُقدة .B •
العُقدتان Fو� Gصقيقتان ،ولهما االأ�صل نف�صه وهو العُقدة .C •
العُقدة Hلها عُقدتان فرعيتان Iو Jولها عُقدة اأ�صل .F •
67 66
ماذا تع ّلمت الم�صروع
األأدوات
مفكرة جوبيرت ()Jupyter Notebook
71 70
تتكون دالة اال�صتدعاء التكرارية من حالتن: ل ُتُلقِ نظرة على مثال لدالة ت�صتدعي دالة اأخرى.
احلالة األأ�صا�صية Base Case
ويف ه��ذه احلال��ة تتوق��ف الدال��ة ع��ن ا�ص��تدعاء نف�ص��ها ،ويتاأ ّك��د الو�صول اإىل ه��ذه احلالة من خالل االأمر امل�ص��روط .بدون def mySumGrade (gradesList):
sumGrade=0
احلالة االأ�صا�صية� ،ص َتتَكرَّر عملية اال�صتدعاء الذاتي اإىل ما ال نهاية. )l=len(gradesList
for i in range(l):
حالة األ�صتدعاء التكرارية Recursive Case
]sumGrade=sumGrade+gradesList[i
ويف ه��ذه احلال��ة ت�ص��تدعي الدال� ُة نف�صَ ��ها عندم��ا ال ُحتق��ق �ص��رط التوق��ف ،وتظ��ل الدال��ة يف حالة اال�ص��تدعاء الذاتي حتى return sumGrade
ت�صل اإىل احلالة االأ�صا�صية. ا�صتدعاء الدالة
def avgFunc (gradesList):
اأمثلة �صائعة على األ�صتدعاء الذاتي Recursion Common Examples )s=mySumGrade(gradesList .mySumGrade
)l=len(gradesList
أاح��د االأمثل��ة االأك��ر �ص��يوعً ا عل��ى ا�ص��تخدام اال�ص��تدعاء الذات��ي ه��و عملي��ة ح�ص��اب م�صروب رقم ُمع� ّ�ن .م�ص��روب الرقم هو avg=s/l
عرب ع��ن امل�صروب بالرق��م متبو ًع��ا بالعالمة "!"،
ن��ا �ص��رب جمي��ع االأع��داد الطبيعي��ة االأق��ل م��ن اأو ت�ص��اوي ذل��ك الرق��مُ .ي َّ return avg
ت�صتخدم دالة () lenقائمة
على �صبيل املثال ،م�صروب الرقم 5هو ! 5وي�صاوي .1*2*3*4*5 # program section
كم ِ
ُعامل مُدخَ ل ،حل�صاب وحتديد
]grades=[89,88,98,95 عدد العنا�صر يف القائمة.
�ص��تالحظ اأن عملي��ة ح�ص��اب امل�ص��روب ت�ص��تند اإىل األأرقام من 0اإىل 5 جدول :2.1م�صرو )averageGrade=avgFunc(grades
)print ("The average grade is: ",averageGrade
القاعدة اأدناه: !0!=1 0
1!= 0! *1 اأو !1!=1*1=1 1 The average grade is: 92.5
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 دالة األ�صتدعاء التكرارية Recursive Function
حالة اال�صتدعاء 4!=3! * 4 اأو !4!=4*3*2*1=24 4 يف بع���ص احل��االت ت�ص��تدعي الدّال� ُة نف�صَ ��ها وه��ذه اخلا�صي��ة تُ�ص��مى
التكرارية الربنامج الرئي�س اال�صتدعاءات التكرارية (.)Recursive Calls
�صكل :2.3قاعدة ح�صاب امل�صروب 5!=4! * 5 اأو !5!=5*4*3*2*1=120 5
يك��ون ِبن��اء اجلمل��ة الع��ام لدال��ة اال�ص��تدعاء التكراري��ة عل��ى النح��و
الإن�صاء برنامج يقوم باحت�صاب م�صروب العدد با�صتخدام حلقة التكرار ،forاتّبع ما يلي: التايل:
# calculate the factorial of an integer using iteration # recursive function
)(recurseFunction def recurseFunction():
def factorialLoop(n): if (condition): # base case
result = 1 statement
for i in range(2,n+1): خاطئ else:
result = result * i #recursive call
)(recurseFunction
return result ال�صر
# main program
# main program .......
))" num = int(input("Type a number:
)f=factorialLoop(num �صحيح # normal function call
)print("The factorial of ", num, " is:", f )(recurseFunction
.........
73 72
متى ت ِ
َ�صتخدم اال�صتدعاء الذاتي؟ االآن ِ
اح�صب م�صروب العدد با�صتخدام دالة امل�صروب.
• يُع ُّد اال�صتدعاء الذاتي الطريقة االأكر مالئمة للتعامل مع امل�صكلة يف العديد من احلاالت.
م�صروب )(3 # calculate the factorial of an integer using a
• يَ�صهُل ا�صتك�صاف بع�ص هياكل البيانات با�صتخدام اال�صتدعاء الذاتي. # recursive function
• بع���ص خوارزمي��ات الت�صني��ف ( ،)Sorting Algorithmsتَ�ص� ِ
�تخدم اال�ص��تدعاء الذات��ي ،مث��ل :الت�صني��ف ال�ص��ريع def factorial(x):
if x == 0: الحالة االأ�صا�صية.
(.)Quick Sort 3 م�صروب )(2 return 1
يف املثال التايل� ،صت�صتخرج اأكرب رقم موجود يف قائمة مكونة من االأرقام با�صتخدام دالة اال�صتدعاء التكرارية. else: حالة اال�صتدعاء
))return (x * factorial(x-1
كما يظهر يف ال�صطر االأخر من املثال دالة اأخرى للتكرار لغر�ص املقارنة. التكرارية.
2 م�صروب )(1 # main program
def findMaxRecursion(A,n): ))" num = int(input("Type a number:
)f=factorial(num
if n==1: )print("The factorial of ", num, " is: ", f
]m = A[n-1 1 م�صروب )(0
else:
))m = max(A[n-1],findMaxRecursion(A,n-1 Type a number: 3
return m 1 The factorial of 3 is: 6
3! = 3*2*1 = 6
def findMaxIteration(A,n): �صكل � :2.4صجرة اال�صتدعاء الذاتي
]m = A[0
جدول :2.2مزايا األ�صتدعاء الذّ اتي ،وعيوبه
for i in range(1,n):
)]m = max(m,A[i
ت�صتخرج الدالة () maxالعن�صر ذا القيمة العيوب املزايا
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
األ�صتدعاء الذاتي والتكرار Recursion and Iteration
Max with recursion is: 73 ُي�ص��تخدم كل م��ن اال�ص��تدعاء الذات��ي والتك��رار يف تنفي��ذ جمموع��ة م��ن التعليم��ات لع��دة م��رات ،والف��ارق الرئي���ص ب��ن
Max with iteration is: 73 اال�صتدعاء الذاتي والتكرار هو طريقة اإنهاء الدالة التكرارية .دالة اال�صتدعاء التكرارية ت�صتدعي نف�صها وتُنهي التنفيذ
عندم��ا ت�ص��ل اإىل احلال��ة االأ�صا�ص��ية .اأم��ا التك��رار فيُن ِّف��ذ ل ِب َن� َة املقط��ع الربجم��ي با�ص��تمرارحتى يتحق��ق �ص��رط ُحم� َّدد اأو
))max(A[3], findMaxRecursion(A, 3 ينق�صي عدد ُحم َّدد من التكرارات.
اجلدول التايل يعر�ص بع�ص االختالفات بن اال�صتدعاء الذاتي والتكرار.
> 42 ))max(A[2], findMaxRecursion(A, 2
جدول :2.3التكرار واأل�صتدعاء الذاتي
اال�صتدعاء الذاتي التكرار
-5 > ))max(A[1], findMaxRecursion(A, 1 بطيء التنفيذ مقارن ًة بالتكرار. �صريع التنفيذ.
يتطلب حجم ذاكرة اأكرب. يتطلب حجم ذاكرة اأقل.
حجم املقطع الربجمي اأ�صغر. حجم املقطع الربجمي اأكرب.
73 > 3 ينتهي مبجرد الو�صول اإىل احلالة االأ�صا�صية. �ق� ي حتق أو
ا �رارات� ك الت �ن� م ددَّ � حينته��ي با�ص��تكمال الع��دد املُ
�صرط ُم َّعن.
�صكل � :2.5صجرة اال�صتدعاء الذاتي لدالة ا�صتخراج اأكرب رقم يف قائمة مكونة من االأرقام
75 74
مترينات يف الربنامج التايل� ،صتُن�صئ دالة ا�صتدعاء تكرارية حل�صاب مُ�صاعَ ف الرقم.
�ص��تقوم باإدخ��ال رق ًم��ا (االأ�صا���ص) وفهر�صً ��ا (االأُ���ص اأو ال ُق� ّوَّة) يقبلهم��ا الربنام��ج ،وم��ن َث��مَّ �صتَ�ص� ِ
�تخدم دال��ة اال�ص��تدعاء
�صاعف الرق��م .ميكن حتقيق االأمر �تخدم هذي��ن املدخَ َل��ن حل�ص��اب ُم َ التكراري��ة () powerFunRecursiveالت��ي �صتَ�ص� ِ
1 يو�صح ذلك: نف�صه با�صتخدام التكرار ،واملثال التايل ّ
خاطئة �صحيحة حدِّد اجلملة ال�صحيحة واجلملة اخلاطئة فيما يلي:
def powerFunRecursive(baseNum,expNum):
if(expNum==1):
.1تتكون دالة اال�صتدعاء التكرارية من حالتن.
)return(baseNum
else:
.2ت�صتدعي دالة اال�صتدعاء التكرارية دالة اأخرى.
))return(baseNum*powerFunRecursive(baseNum,expNum-1
.4ا�صتدعاء الدوال يجعل لبِنة املقطع الربجمي اأ�صغر حجمًا. numPower = 1
for i in range(exp):
.5كتابة مقطع برجمي مُتكرِّر يتطلب ا�صتدعا ًء ذاتيًّا اأقل. numPower = numPower*base
return numPower
3متى يجب ا�صتخدام اال�صتدعاء الذاتي؟ دالة األ�صتدعاء التكرارية الالنهائية Infinite Recursive Function
يج��ب اأن تك��ون ح��ذرًا للغاي��ة عن��د تنفي��ذ اال�ص��تدعاء التك��راري ،كما يجب عليك ا�ص��تخدام طريقة معين��ة الإيقاف التكرار
عن��د حتقي��ق �ص��رط ُحم� َّدد لتجن��ب ح��دوث اال�ص��تدعاء التك��راريّ الالنهائ� ّ�ي ،ال��ذي ي�ص� ّبب تو َّق��ف النظ��ام عن اال�ص��تجابة
ب�صبب كرة ا�صتدعاءات الدالة ،مما يوؤدي اإىل َفيْ�س الذاكرة ( )Memory Overflowواإنهاء التطبيق.
77 76
الدر�س الثاين 4و َِّ�صح مزايا ا�صتخدام اال�صتدعاء الذاتي وعيوبه.
خوارزمية البحث باأولوية العمق
والبحث باأولوية األت�صاع
البحث يف املُخطَّ طات Searching in Graphs
تفح���ص كل ُعق��دة يف املُخطَّ ��ط إالج��راء
هن��اك بع���ص احل��االت الت��ي حتت��اج فيه��ا اإىل البح��ث ع��ن عُ ق��دة ُحم� َّددة يف املُخطَّ ��ط ،اأو ُّ
عملي��ة بعينه��ا مث��ل طباع��ة ُعق��د املُخطَّ ��ط ،فتك��ون حالت� َ�ك ك�ص��خ� ٍص يبح��ث ع��ن املدين��ة الت��ي يري��د ال�صّ ��فر اإليه��ا؛ و ليتحقق هذا،
حتتاج اإىل فح�ص كل ُعقدة يف املُخطَّ ط حتى جتد تلك التي حتتاج اإليهاُ .يطلق على هذا االإجراء :البحث يف املُخطَّ ط اأو م�ص��ح
املُخطَّ ط ،وهناك العديد من خوارزميات البحث التي ت�صاعد على تنفيذه ،مثل:
• خوارزمية البحث باأولوية االت�صاع (.)Breadth-First Search - BFS
• خوارزمية البحث باأولوية العمق (.)Depth-First Search - DFS
5اكت��ب دال��ة ا�ص��تدعاء تكراري��ة بلغ��ة البايث��ون تق��وم بح�ص��اب الرق��م االأك��رب برتتي��ب حم��دد (مث� ّ�ال ث��اين اأك��رب رق��م) يف
عُ قدة البث قائمة من االأرقام.
العُقد االأخرى
العُقد المجاورة
ل ُعقدة البث
مثال على خوارزمية البحث باأولوية العمق ) :(DFSحل املتاهة مثال على خوارزمية البحث باأولوية االت�صاع ) :(BFSالبث ال�صبكي
6اكتُب دالة ا�صتدعاء تكرارية بلغة البايثون حل�صاب جمموع كل االأرقام الزوجية يف قائمة معيّنة.
امل�صتوى 0
خوارزمية البحث باأولوية االت�صاع
A Breadth-First Search (BFS) Algorithm
1
ت�صتك�ص��ف خوارزمي��ة البح��ث باأولوي��ة االت�ص��اع ( )BFSاملُخطَّ ��ط بح�ص��ب
2
واحدا تلو االآخر ،حيث تبد أا بفح�ص عُ قدة اجلذر (عُ قدة البداية) ،امل�صتوى 1 امل�صتوى ً
B C ثم تفح�ص جميع العُقد املرتبطة بها ب�صكل مبا�صر واحدة تلو االأخرى.
3
بع��د االنته��اء م��ن فح���ص كل ال ُعق��د يف امل�ص��توى ،تنتق��ل اإىل امل�ص��توى الت��ايل،
وتتبع االإجراءات نف�صها املُو�صحّ ة يف ال�صكل .2.6
امل�صتوى 2
D E F G �صتخدم الطّ ابور لتت ّبع العُقد التي ّمت فح�صها ،ومبج ّرد ا�صتك�صاف العُقدة، ُي َ
�صتتم اإ�صافة ال ُع َقد الفرعية اإىل الطابور ،ثم حتذف ال ُعقدة التالية املوجودة
4 5 6 يف اأول الطابور التي مت ا�صتك�صافها �صابقًا.
79 �صكل :2.6خوارزمية البحث باأولوية االت�صاع ()BFS 78
احذف العُقدة Eملعاجلتها. 6 احذف العُقدة Dملعاجلتها. 5 اح��ذف ال ُعق��دة Cوعاجله��ا، 4 املث��ال الت��ايل يو�ص��ح طريق��ة عم��ل خوارزمي��ة البح��ث باأولوية االت�ص��اع ( .)BFSبا�ص��تخدام املُخطَّ ط الت��ايل ،حدِّ د العُقد
(لي�ص لديها فروع). (لي�ص لديها فروع). ثم اأ�صف فرعها اإليها. التي يجب فح�صها لالنتقال من عُ قدة اجلذر Aاإىل ال ُعقدة :F
ِ
ا�صتخدم هيكل البيانات املُنا�صب. مالحظة:
A A A
A
B C B C B C
عليك فح�س كل العُقد يف امل�صتوى 1 B C
D E F D E F D E F قبل االنتقال اإىل العُقد يف امل�صتوى .2
0 1 2 D E F
E F D E F C D E الطابور املُخطَّ ط
0 0 1 0 1
D E F ا ح��ذف ال ُعق��دة م��ن مقد م��ة 3 اح��ذف ال ُعق��دة اجلذر ّي��ة م��ن 2 البداي��ة م��ن ال ُعق��دة اجلذرية 1
0 1 2 الطاب��ور (ال ُعق��دة )Bملعاجلته��ا، الطاب��ور ملعاجلته��ا ،ث��م اأ�ص��ف (ال ُعق��دة .)Aاأ�ص��ف ال ُعق��دة
ث��م اأ�ص��ف ف��روع ه��ذه ال ُعق��دة اإىل ف��روع ه��ذه ال ُعق��دة اإىل الطاب��ور اجلذريّة اإىل الطابور.
A اح��ذف ال ُعق��دة Fملعاجلته��ا ،وبذل��ك اأ�صب��ح 7 الطابور (العُقدتن Dو.)E (العُقدتن Bو.)C
الطابور االآن فارغً ا وانتهت عملية البحث.
B C
F العُقد التي فُحِ �صَ ت با�صتخدام خوارزمية البحث
D E F باأولوية االت�صاع ( )BFSهي.F ،E ،D ،C ،B ،A : فُحِ َ�صت
A A A
الحظ كيف ُميكنك تطبيق خوارزمية البحث باأولوية االت�صاع ( )BFSبلغة البايثون ( )Pythonيف املثال التايل: B C B C B C
{ = graph
"A" : ["B","C"], D E F D E F D E F
"B" : ["D","E"],
"C" : ["F"],
"D" : [], B C A B C A
"E" : [], 0 0 1 0
][ "F" :
}
C D E A B C
0 1 2 0 1 2
visitedBFS = [] # List to keep track of visited nodes
][ = queue # Initialize a queue
81 80
امل�صتوى 0
خوارزمية البحث باأولوية العمق )queue.append(node
A Depth-First Search (DFS) Algorithm
1
while queue:
يف البح�ث باأولوي�ة العم�ق (� ،)DFSص�تقوم باتب�اع احلواف ،وتتعمق اأكر
)n = queue.pop(0
امل�صتوى 1 �صتخدم البحث باأولوية العمق اإجراء ا�صتدعاء تكراري واأكر يف املُخطَّ طَ .ي ِ
B C )" " = print (n, end
للتنقل عرب ال ُعقد .عند الو�صول اإىل ُعقدة ال حتتوي على حواف الأي ُعقدة
2 3 4 5 6 جديدة� ،ص�تعود اإىل ال ُعقدة ال�ص�ابقة وت�ص�تمر العملية .ت ِ
َ�صتخدم خوارزمية for neighbor in graph[n]:
البح�ث باأولوي�ة العم�ق هي�كل بيان�ات املُك ّد��ص لتتب�ع م�ص�ار اال�صتك�ص�اف. if neighbor not in visited:
املثال التايل يو�صح طريقة عمل خوارزمية البحث باأولوية العمق ( ،)DFSبا�صتخدام املُخطَّ ط التايلَ ،ت َتبّع ترتيب ا�صتك�صاف # main program
)"bfs(visitedBFS, graph, "A
العُقد ( )Traversalبح�صب خوارزمية البحث باأولوية العمق.
ِ
ا�صتخدم هيكل البيانات املُنا�صب. مالحظة:
1عا ِلج اجلذر Aثم اأ�صفه اإىل املُكدّ�ص.
A B C D E F
A
A
B C
B C التطبيقات العملية خلوارزمية البحث باأولوية األت�صاع
D E F Practical Applications of the BFS Algorithm
D E F A
املُخطَّ ط املُكدّ�ص
تُ�ص��تخدَ م يف �ص��بكات ال ّنظ��ر لل ّنظ��ر ( )Peer-to-Peer Networksللعث��ور عل��ى كل
عا ِلج العُقدة Dثم اأ�صفها اإىل املُكدّ�ص� .صتُحذَ ف 3 عا ِلج العُقدة Bثم اأ�صفها اإىل املُكدّ�ص. 2 ال ُعقد املجاورة من اأجل تاأ�صي�ص االت�صال.
ال ُعق��دة الت��ي ف ُِح َ�ص��ت ولي���ص له��ا ف��روع م��ن
املُكدّ�ص(.احذف العُقدة .)D
A فُحِ َ�صت تُ�ص��تخدَ م يف و�ص��ائل التوا�ص��ل االجتماع��ي ( )Social Mediaلرب��ط عُ ق��د املُ�ص� ِ
�تخدمن
A D املُرتبطن ،مثل اأولئك الذين لهم االهتمامات نف�صها اأو املوقع نف�صه.
D B C
B
B C
B B A
D E F
تُ�ص��تخدَ م يف ُنظ��م املالح��ة با�ص��تخدام ُحم �دِّد املواق��ع العامل��ي (GPS Navigation
D E F A A
)Systemsللبحث عن االأماكن املتجاورة حتى ُحت ِّدد االجتاهات التي يتبعها املُ�صتخدِ م.
عا ِل��ج ال ُعق��دة Eثم اأ�صفها اإىل املُك ّد���ص� .ص�تُحذَ ف العُقدة التي 4
ف ُِح َ�صت ولي�ص لها فروع من املُكدّ�ص(.احذف العُقدة .)E
تُ�صتخدَ م للح�صول على البث ال�صبكي ( )Network Broadcastingلبع�ص احلُزم.
ملحة تاريخية A E
طُ ورّت الن�صخة االأوىل من خوارزمية البحث باأولوية E معلومة
العمق ( )DFSيف القرن التا�صع ع�صر بوا�صطة عا B C
B B ُمُيكن تطوير خوارزمية البحث باأولوية االت�صاع ( )BFSبتحديد نقطة البداية
ريا�صيات فرن�صي كا�صرتاتيجية حلل املتاهات.
D E F A A (احلالة االأوليّة) ونقطة الهدف (احلالة امل ُ�صته َدفة) الإيجاد امل�صار بينهما.
83 82
التطبيقات العملية خلوارزمية البحث باأولوية العمق عا ِلج العُقدة Cثم اأ�صفها اإىل املُكدّ�ص. 6 احذف العُقدة .B 5
Practical Applications of the DFS Algorithm
A A
C B
تُ�ص��تخدَ م خوارزمي��ة البح��ث باأولوي��ة العم��ق يف اإيج��اد امل�ص��ارات ()Path Finding B C B C
C
ال�صتك�صاف امل�صارات املختلفة يف العمق للخرائط والطرقات والبحث عن امل�صار االأف�صل.
D E F A A D E F A
املُك ّد���ص خ��ايل وبالت��ايل �ص��تتوقف خوارزمي��ة البح��ث 8 عا ِلج العُقدة Fثم اأ�صفها اإىل املُكدّ�ص. 7
تُ�ص��تخدَ م خوارزمي��ة البح��ث باأولوي��ة العم��ق يف حل املتاه��ات ( )Solve Mazesمن خالل
اجتياز كل الطُ ُرق املمكنة. باأولوية العمق (.)DFS
A F A F
C F
ُمي ِك��ن حتدي��د ال��دورات ( )Cyclesيف املُخطَّ ��ط با�ص��تخدام خوارزمي��ة البح��ث باأولوي��ة B C B C
C C C
العم��ق م��ن خ��الل وج��ود حاف��ة خلفي��ة (ُ ،)Back Edgeمت��ر م��ن خ��الل ال ُعق��دة نف�ص��ها
مرتن. A
D E F A A D E F A A
العُقد التي فُحِ �صَ ت با�صتخدام خوارزمية البحث واالآن �ص��تتعلّم طريق��ة تنفي��ذ خوارزمي��ة البح��ث باأولوي��ة العم��ق
باأولوية العمق ( )DFSهي.F ،C ،E ،D ،B ،A : ( )DFSيف لغة البايثون.
جدول :2.4مقارنة بني خوارزمية البحث باأولوية األت�صاع ( )BFSو خوارزمية البحث باأولوية العمق ()DFS
خوارزمية البحث باأولوية االت�صاع ( )BFSخوارزمية البحث باأولوية العمق ()DFS معاير املقارنة = graph {
""A : ["B","C"],
""B : ["D","E"],
التنقّل ح�صب عُ مق ال�صجرة. التنقّل ح�صب م�صتوى ال�صجرة. طريقة التنفيذ ""C : ["F"],
""D : [],
""E : [],
""F : ][
تَ�ص��تخدِ م هي��كل بيان��ات املُك ّد���ص لتت ُّب��ع تَ�ص� ِ
�تخدم هيكل بيانات الطابور لتت ُّبع املوقع }
املوقع التايل لفح�صه. التايل لفح�صه. هيكل البيانات
visitedDFS = [] # list to keep track of visited nodes
85 84
A 4يف امل ُخطَّ ��ط عل��ى الي�ص��ار ،انت ِق��ل م��ن ُعق��دة البداي��ة Aاإىل
مترينات
ُعق��دة اله��دف .Gط ِّب��ق خوارزمي��ة البح��ث باأولوي��ة االت�ص��اع
B D
C ( )BFSوخوارزمية البحث باأولوية العمق ( )DFSبا�صتخدام 1
هي��كل البيان��ات املنا�ص��ب (امل ُك ّد���س اأو الطاب��ور) ،م��ع االإ�ص��ارة
E F G H I J
اإىل ال ُعقد التي ف ُِح َ�صت. خاطئة �صحيحة حدِّد اجلملة ال�صحيحة واجلملة اخلاطئة فيما يلي:
K L M .1تُنفَّذ خوارزمية البحث باأولوية االت�صاع ( )BFSوخوارزمية البحث باأولوية العمق ()DFS
با�صتخدام اال�صتدعاء الذاتي.
.2ال ميكن ا�ص��تخدام خوارزمية البحث باأولوية االت�ص��اع ( )BFSوخوارزمية البحث باأولوية
العمق ( )DFSيف هيكل بيانات ال�صجرة.
.3تُنفَّذ خوارزمية البحث باأولوية االت�صاع ( )BFSمب�صاعدة هيكل بيانات القائمة املرتابطة.
.4ميكن تنفيذ خوارزمية البحث باأولوية العمق ( )DFSمب�صاعدة هيكل بيانات املُكدّ�ص.
.5ال ميكن ا�صتخدام خوارزمية البحث باأولوية االت�صاع ( )BFSيف البث ال�صبكي.
2ا�صرح كيف تعمل خوارزمية البحث باأولوية االت�صاع ( )BFSوخوارزمية البحث باأولوية العمق (.)DFS
3قارن بني خوارزمية البحث باأولوية االت�صاع ( )BFSوخوارزمية البحث باأولوية العمق (.)DFS
87 86
الدر�س الثالث 5اكت��ب دال��ة بلغ��ة البايث��ون تَ�ص� ِ
�تخدم خوارزمي��ة البح��ث باأولوي��ة االت�ص��اع ( )BFSيف ُخمطَّ ��ط للتحق��ق مم��ا اإذا كان هن��اك
اتخاذ القرار القائم على القواعد م�صار بني ُعقدتني ُمعطاتني.
91 90
االإ�صدار 2
ُميكنك بعد ذلك اختبار هذه الدالة على ثالثة مر�صى خمتلفن:
يف االإ�صدار الثاين� ،صتُعزِّ ز مرونة وقابلية تطبيق النظام القائم على القواعد بتمكينه من قراءة قاعدة املعرِ فة امل ِّ
ُتغرة # Patient 1
مبا�ص��ر ًة م��ن مل��ف ( JSONج�ص��ون)� .ص��يوؤدي ه��ذا اإىل احل��د م��ن عملي��ة الهند�ص��ة اليدوي��ة لعبارات IFال�صَ ��رطيَّة ح�ص��ب ]'my_symptoms=['abdominal pain', 'fever', 'vomiting
قابال للتطبيق على قواعد املعرِ فة االأكرب حجمًا مع تزايد حت�صنًا كبرًا يجعل النظام ً االأعرا�ص �صمن الدالة .وهذا ُيع ُّد ُّ )diagnosis=diagnose_v1(my_symptoms
يو�صح قاعدة املعرِ فة.
عدد االأمرا�ص واالأعرا�ص .ويف االأ�صفل ،مثال ّ )print('Most likely diagnosis:',diagnosis
symptom_mapping_v2.json
return diagnosis
بعد حتمي��ل ُخمطَّ ط االأعرا�ص من.�ات برجمي ٍة ثابتة ٍ � ال�صَ ��رطيَّة املح��ددة بتعليمIF ال يحت��وي ه��ذا االإ�ص��دار عل��ى عب��ارات
? ( )نزالت الربدCommon cold Common cold or Flu or Allergies
( )نزالت الربد اأو االإنفلونزا اأو احل�صا�صية
.FOR يب��داأ االإ�ص��دار يف اأخ��ذ ك ّل مر���ص حمتم��ل يف االعتب��ار با�ص��تخدام حلق��ة التك��رار االأوىل،) (ج�ص��ونJSON مل��ف
متثيل االإ�صدار الثاين:2.11 �صكل ) يف كل مرةCounter( تتحق��ق احللق��ة م��ن كل َع ْر���ص عل��ى ح��دة مبقارنت��ه باالأعرا�ص املعروفة للمر�ص وزي��ادة الع� َّداد
ُيع ُّد هذا االإ�صدار اأك��ر قابلية للتطبيق على، ومع ذل��ك.الح��ظ اأن االإ�ص��دار الث��اين ه��و ن�ص��خة ُمع َّمم��ة م��ن االإ�صدار االأول .يجد فيها النظام تطابقًا
حتى ل��و كانت ت�ص��مل االآالف من، وميك��ن ا�ص��تخدامه كم��ا ه��و م��ع اأي قاع��دة معرِ ف��ة أاخ��رى بالتن�ص��يق نف�ص��ه،نط��اق وا�ص��ع
ِ � كم��ا َي�ص��مح لل ُم�ص.االأمرا���ص م��ع ع��دد �صخ��م م��ن االأعرا���ص
�تخدم بزي��ادة اأو تقلي��ل ع��دد القي��ود على الت�ص��خي�ص ب�صبط
فعل��ى:2 واملري���ص1 ميك��ن مالحظ��ة ذل��ك يف حال��ة املري���ص.matching_symptoms_lower_bound املُتغ� ِّ�ر
. �صتح�صل على ت�صخي�ص خمتلف متامً ا،ُتغر ِّ اإال اأنه عند �صبط هذا امل،الرغم من اأنهما يعانيان من االأعرا�ص نف�صها
متثيال دقيقًا للت�صخي�ص
ً وال ُيع ُّد،اإال اإنّ بع�ص العيوب ال تزال موجودة يف هذا االإ�صدار،على الرغم من هذه التح�صينات
.الطبي احلقيقي
95 94
و�صيُ�ص��تبدَ ل بدالة ت�ص��جيل النقاط التي تعطي اأوزانًا ُخم َّ�ص�صة،لن يُنظر اإىل املنطق الذي يقت�صر على عدد االأعرا�ص 3 االإ�صدار
�يتم ت�صمن
ّ � �ص. �ص�تَتوفر للم�ص��تخدِ م كذلك املرونة لتحديد االأوزان التي يراها منا�ص��بة.لالأعرا�ص االأكر واالأقل �ص��يوعً ا
.املر�ص اأو االأمرا�ص ذات املجموع املوزون االأعلى يف الت�صخي�ص ُف�صل من قاعدة
َّ �ص��تزيد م��ن ذكاء النظ��ام القائ��م عل��ى القواع��د مبنحه اإمكاني��ة الو�صول اإىل ن��وع م،يف االإ�ص��دار الثال��ث
ً � اإنّ بع���ص االأعرا�ص تكون اأكر �ص: ه��ذا الن��وع اجلدي��د ياأخ��ذ بع��ن االعتب��ار احلقيقة الطبي��ة التي تقول.املعرِ ف��ة
�يوعا من
from collections import defaultdict .اأخرى للمر�ص نف�صه
def diagnose_v3(patient_symptoms:list, symptom_mapping_file='symptom_mapping_v3.json'
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'] { "fever",
"diseases": { "headache",
# holds a symptom-based score for each potential disease "covid19": { "tiredness",
disease_scores=defaultdict(int)
"very common": [ "sore throat",
"fever", "cough"
for disease in disease_info:
"tiredness", ],
# get the very common symptoms of the disease "cough" "less common": [
very_common_symptoms=disease_info[disease]['very common'] ], "stuffy nose",
"less common": [ "sneezing",
# get the less common symptoms for this disease
"headache", "runny nose"
less_common_symptoms=disease_info[disease]['less common']
"sore throat" ]
for symptom in patient_symptoms: ] },
}, "allergies": {
if symptom in very_common_symptoms: "common cold": { "very common": [
disease_scores[disease]+=very_common_weight "very common": [ "stuffy nose",
"stuffy nose", "sneezing",
elif symptom in less_common_symptoms:
"runny nose", "runny nose"
disease_scores[disease]+=less_common_weight
"sneezing", ],
# find the max score all candidate diseases "sore throat" "less common": [
max_score=max(disease_scores.values()) ], "headache",
"less common": [ "tiredness",
if max_score==0: "cough" "cough"
return []
] ]
else: }, }
# get all diseases that have the max score "flu": { }
diagnosis=[disease for disease in disease_scores if disease_scores "very common": [ }
[disease]==max_score]
97 96
االإ�صدار 4
لكل مر�ص حمتمل يف قاعدة املعرِ فةُ ،حتدِّ د هذه الدالة اجلديدة االأعرا�ص االأكر واالأقل ظهورًا على املري�ص ،ثم تزيد
م��ن درج��ة املر���ص وف ًق��ا ل�الأوزان املُقا ِبل��ة ،ويف االأخ��ر ُت��درَج االأمرا���ص ذات الدرج��ة االأعلى يف الت�ص��خي�صُ .ميكنك االآن
ميك��ن حت�ص��ن النظ��ام القائ��م عل��ى القواع��د بزي��ادة كف��اءة قاع��دة املعرِ ف��ة وجترب��ة دوال ت�ص��جيل النق��ا اختبار تنفيذ الدالة مع بع�ص االأمثلة:
( )Scoring Functionsاملختلف��ة .وعل��ى الرغ��م م��ن اأن ذل��ك �ص��يوؤدي اإىل حت�ص��ن النظام ،اإال اأنه �ص��يتطلب الكثر من
الوقت واجلهد اليدوي .وحل�صن احلظ ،هناك طريقة اآلية لبناء نظام مبني على القواعد يكون ذكيًا مبا يكفي لت�صميم # Patient 1
قاع��دة معرِ ف��ة ودال��ة ت�ص��جيل نق��اط خا�ص��ة ب��ه :با�ص��تخدام تعلُّ��م ا آالل��ةُ .يط ِّب��ق تع ُّل��م ا آالل��ة القائ��م عل��ى القواع��د ]"my_symptoms=["headache", "tiredness", "cough
بدال من احلاجة اإىل االإن�صان ( )Rule-Based Machine Learningخوارزمية تعلّم لتحديد القواعد املُفيدة تلقائيًاً ، )'diagnosis=diagnose_v3(my_symptoms, 'symptom_mapping_v3.json
لتطبيق املعرِ فة واخلربات ال�صابقة يف املجال لبناء القواعد وتنظيمها يدويًا. )print('Most likely diagnosis:',diagnosis
�دال م��ن قاع��دة املعرِ ف��ة ودال��ة ت�ص��جيل النق��اط املُ�ص َّممتان يدويًا ،تَتو َّق��ع خوارزمية تعلّم االآلة مدخ� ً�ال واحدً ا فقط وهوفب� ً # Patient 2
جمموع��ة البيان��ات التاريخ ّي��ة للح��االت املرَ�ص َّي��ة .فالتعلُّ��م م��ن البيان��ات مبا�ص��ر ًة يح�وُل دون ح��دوث امل�ص��كالت املرتبط��ة ]"my_symptoms=["stuffy nose", "runny nose", "sneezing", "sore throat
باكت�صاب املعرِ فة االأ�صا�صية والتحقق منها .تتكون كل حالة من بيانات اأعرا�ص املري�ص والت�صخي�ص الطبي الذي ميكن )'diagnosis=diagnose_v3(my_symptoms, 'symptom_mapping_v3.json
اأن يقدم��ه اأي خب��ر ب�ص��ري مث��ل الطبي��ب .وبا�ص��تخدام جمموع��ة بيان��ات التدري��ب ،تتع ّل��م اخلوارزمي��ة تلقائ ًيا كي��ف تتنباأ )print('Most likely diagnosis:',diagnosis
بالت�صخي�ص املُحتمَل حلالة مري�ص جديد.
# Patient 3
import pandas as pd # import pandas to load and process spreadsheet-type data ]"my_symptoms=["stuffy nose", "runny nose", "sneezing", "sore throat
)diagnosis=diagnose_v3(my_symptoms, 'symptom_mapping_v3.json', 1, 1
medical_dataset=pd.read_csv('medical_data.csv') # load a medical dataset. )print('Most likely diagnosis:',diagnosis
medical_dataset
)Most likely diagnosis: (['flu'], 3
)Most likely diagnosis: (['common cold'], 4
)Most likely diagnosis: (['common cold', 'flu'], 4
symptom_mapping_v2.json
( Common cold or Fluنزالت الربد اأو االإنفلونزا) ( Common coldنزالت الربد) ( Fluاالإنفلونزا)
�صكل :2.12متثيل االإ�صدار الثالث
يف املث��ال اأع��اله ،حتت��وي جمموع��ة البيان��ات عل��ى 2,000حال��ة مر�صي��ة ،بحي��ث تتك��ون كل حال��ة من 8اأعرا���ص حمتملة: ق��د تالح��ظ اأن��ه عل��ى الرغ��م م��ن اأن االأعرا���ص الثالث��ة عل��ى املري���ص ( Headache :1ال�ص��داع) ،وTiredness
(ال�ص��داع) ،وStuffy nose(ال�ص��عال) ،و( Tirednessاالإعي��اء) ،وُ Headache حلم��ى) ،وُ Cough ( Feverا ُ (االإعي��اء) ،و( Coughال�ص��عال) تظه��ر عن��د االإ�صاب��ة ب��كل م��ن ( Fluاالإنفلون��زا) ،و ( Covid19كوفي��د.)19 -
(ان�ص��داد االأن��ف) ،و( Runny noseر�ص��ح االأن��ف) ،و( Sneezingالعُطا���ص) ،و( Sore throatالته��اب احلل��ق). واحل�صا�ص��ية ،ا ّإال اأنّ الظّ اه��ر يف نتائ��ج التّ�ص��خي�ص ه��ي االإنفلون��زا فق��ط .هذا الأن جميع االأعرا�ص الثالثة �ص��ائعة جدً ا يف
تُر َّمز كل واحدة من هذه االأعرا�ص يف عمود ثنائي ُمنف�صل .العدد الثنائي 1ي�صر اإىل اأن املري�ص ُيعاين من االأعرا�ص، قاع��دة املعرِ ف��ة ،مم��ا ي�وؤدي اإىل درج��ة ق�ص��وى قدره��ا .3وباملث��ل ،يف ظ��ل معان��اة املري���ص الث��اين والثال��ث م��ن االأعرا�ص
بينما العدد الثنائي 0ي�صر اإىل اأن املري�ص ال ُيعاين من االأعرا�ص. نف�صها ،توؤدي ُمدخَ الت االأوزان املختلفة لالأعرا�ص االأكر واالأقل �صيوعً ا اإىل ت�صخي�صات خمتلفة .وعلى وجه التحديد،
يَنتج عن ا�صتخدام وزن مت�صا ٍو لنوعن من االأعرا�ص اإ�صافة االإنفلونزا اإىل الت�صخي�ص.
99 98
. نقطة �صتُ�صتخدَ م الختباره600 نقطة بيانات �صتُ�صتخدَ م لتدريب النموذج و1,400 لديك االآن : وهناك اأربعة ت�صخي�صات حمتملة،يحتوي العمود االأخر على ت�صخي�ص اخلبر الب�صري
:ابداأ بتدريب منوذج �صجرة القرار ومتثيله .) (نزالت الربدCommon cold و،) (احل�صا�صيةAllergies و،) (االإنفلونزاFlu و،)19 - (كوفيدCovid19
:ميكنك التحقق من ذلك ب�صهولة با�صتخدام املقطع الربجمي التايل بلغة البايثون
from sklearn.tree import plot_tree
import matplotlib.pyplot as plt
set(medical_dataset['diagnosis'])
، فهو بب�صاطة يقراأ امللف التدريبي،ُيع ُّد تطبيق البايثون يف االإ�صدار الرابع اأق�صر واأب�صط بكثر من التطبيقات ال�صابقة
وم��ن َث� َّ�م ينت��ج منوذجً ��ا،وي�ص��تخدمه لبن��اء من��وذج �ص��جرة الق��رار ا�ص��تنادًا اإىل العالق��ات ب��ن االأعرا���ص والت�ص��خي�صات
واحدة، اب��داأ بتق�ص��يم جمموع��ة البيان��ات اإىل جمموعتن منف�صلت��ن، الختب��ار ه��ذا االإ�ص��دار ب�ص��كل �صحي��ح.خم�ص ً�ص��ا َّ
. واأخرى لالختبار،للتدريب
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)
الطبية) بعُمق م�صتوين- (البياناتmedical_data منوذج �صجرة القرار ملجموعة بيانات:2.13 �صكل (1400, 9)
(600, 9)
101 100
احتماال للمر�صى يف جمموعة االختبار.ً �صتَ�صتخدِ م االآن �صجرة القرار للتنبوؤ بالت�صخي�ص االأكر تُ�ص��تخدَ م دالة () plot_treeلر�ص��م وعر�ص �ص��جرة القرار .ولعدم توفر م�ص��احة كافية للعر�ص �ص��يتم متثيل امل�ص��توين
تُ�ص��تخدَ م جمموع��ة االختب��ار لتقيي��م اأداء النم��وذج .تَ�ص��ت ِند طريق��ة التقيي��م الدقيقة على م��ا اإذا كان املق�صود من املهمة ُتغر .max_depth ا أالوّلن فقط ،باالإ�صافة اإىل اجلذر .ميكن �صبط هذا الرقم ب�صهولة با�صتخدام امل ِّ
االنح��دار ( )Regressionاأم الت�صني��ف ( .)Classificationيف مث��ل م�ص��كالت الت�صني��ف املعرو�ص��ة هن��ا ،تُ�ص��تخدَ م
# plot the tree
طرائق التقييم ال�صهرة مثل :ح�صاب دقة النموذج ( )Model's Accuracyوم�صفوفة الدقة (.)Confusion Matrix plot_tree(my_tree,
عُ مق
• الدق��ة ه��ي ن�ص��بة التنب�وؤات ال�صحيح��ة الت��ي يق��وم به��ا املُ�ص ِّن��فَ .حت ُق��ق دق��ة عالي��ة قريب��ة م��ن 100%يعن��ي اأن معظم max_depth=2,
التنبوؤات التي يقوم بها املُ�صنِّف �صحيحة. fontsize=10 �صجرة القرار.
• م�صفوف��ة الدق��ة ه��ي ج��دول يق��ارن ب��ن القيم احلقيقية (الفعلية) وبن التنبوؤات الت��ي يقوم بها املُ�صنِّف يف جمموعة
البيانات .يحتوي اجلدول على �صف واحد لكل قيمة �صحيحة وعمود واحد لكل قيمة ُمتوقَّعة .كل ُمدخَ ل يف امل�صفوفة كل عُ قدة يف ال�صجرة ُمتثِّل جمموعة فرعية من املر�صى ،فعلى �صبيل املثال،
ُميثِّل عدد احلاالت التي لها قيم فعلية و ُمتوقَّعة. ُمت ِّث��ل عُ ق��دة اجل��ذر اإجم��ايل ع��دد 1,400مري���ص يف جمموع��ة بيان��ات التدري��ب .م��ن
بينه��م ،354 ،و ،345و ،358و � 343صُ ��خِّ �صوا ب � ( Allergiesاحل�صا�ص��ية)،
# functions used to evaluate a classifier و( Common coldن��زالت ال��ربد) ،و( Covid19كوفي��د ،)19-و( Fluاالإنفلون��زا)،
from sklearn.metrics import accuracy_score,confusion_matrix على التوايل.
# drop the diagnosis column to get only the symptoms
)]'test_patient_symptoms=test_data.drop(columns=['diagnosis
)confusion_matrix(test_diagnoses,pred
االأرق��ام الواقع��ة يف اخل��ط ال ُقط��ري (املُظلل��ة باللون الوردي) ُمتثِّل احلاالت املُتوقَّعة ب�ص��كل �صحيح ،اأما االأرقام التي تقع
خارج اخلط القُطري فتُمثِّل اأخطاء النموذج.
عل��ى �ص��بيل املث��ال ،بالنظ��ر اإىل ترتي��ب الت�ص��خي�صات االأربع��ة املُحتمل��ة [( Allergiesاحل�صا�ص��ية)Common cold ،
(ن��زالت ال��ربد)( Covid19 ،كوفي��د( Flu ،)19-االإنفلون��زا)] ،تو�ص��ح امل�صفوف��ة اأن النم��وذج اأخط �اأ يف ت�صني��ف
48حال��ة م��ن املُ�صاب��ن بن��زالت ال��ربد باأنه��م م�صاب��ون باحل�صا�ص��ية ،كم��ا اأخط�اأ يف ت�صني��ف 31حال��ة م��ن املُ�صاب��ن
مري�ص��ا ُيع��اين م��ن االأعرا�س التالية
ً 3اأ�ص��ف اإىل املقط��ع الربجم��ي اخلا���س باالإ�ص��دار االأول لنظ��ام قائ��م عل��ى القواع��د باالإنفلونزا باأنهم م�صابون بكوفيد.19-
[( Vomitingالق��يء) ،و ( Abdominal painاآالم البط��ن) ،و ( Diarrheaاالإ�ص��هال) ،و ( Feverا ُ
حلم��ى)، وعل��ى الرغ��م م��ن اأنّ ه��ذا النم��وذج لي���ص مثال ًي��ا ،فم��ن املُث��ر للده�ص��ة اأ ّن��ه قادر على حتقي��ق مثل هذه الدرج��ة العالية من
و( Lower back painاأ باأ�صفل الظهر)] .ما الت�صخي�س الطبي حلالة املري�س؟ َدوِّن مالحظاتك باالأ�صفل. الدق��ة بتعلُّ��م جمموع��ة القواع��د اخلا�ص��ة ب��ه ،دون احلاج��ة اإىل قاع��دة معرِ ف��ة اأن�ص��ئت يدو ًي��ا .باالإ�صاف��ة اإىل حتقي��ق مث��ل
ه��ذه الدق��ة دون حماول��ة �صب��ط ُمتغ��رات االأداء املتنوع��ة ل � ُ ( DecisionTreeClassifierم�ص ِّن��ف �ص��جرة الق��رار).
وبالت��ايلُ ،ميك��ن حت�ص��ن دق��ة النم��وذج الأف�ص��ل م��ن ذل��ك .كما ُميكن حت�ص��ن النموذج بتج��اوز قيود النم��وذج القائم على
القواعد وجتربة اأنواع خمتلفة من خوارزميات تعلُّم االآلة .و�صتتعلّم بع�ص هذه الطرائق يف الوحدة التالية.
105 104
الدر�س الرابع 4يف ا الإ�ص��دار الث��اين ،ك��م ع��دد ا الأمرا ���س ا مل ُو�صحَّ ��ة يف ت�ص��خي�س كل مري���س اإذا َغ� َّ�ر ت قيم��ة ا مل ُتغ� ِّ�ر
خوارزميات البحث امل�صتنرة matching_symptoms_lower_boundاإىل 2و 3و4؟ َعدِّل املقطع الربجمي ثم َدوِّن مالحظاتك.
# 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:
املُ�ص َّمم��ة باالأعل��ى للتحق��ق م��ن اأن الدال��ة ت�ص��تدعي اخللي��ة ال�صحيح��ة الفارغ��ة واملج��اورة للخلي��ة3 3 تُ�ص��تخدم املتاه��ة plot_maze(random_maze)
.املُحدَّدة
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)]
0 1 2
0
المربعات الخ�صراء
# the starting cell (in the southwest corner) has only 1 accessible neighbor
1 get_accessible_neighbors(small_maze, (2,0))
فارغة ويُمكن
المربعات ال�صوداء .اجتيازها
2
[((1, 0), 1)]
م�صغولة بالحواجز وال يُمكن
الخلية .اجتيازها
المُجاورة ، وكذلك ا�صتدعاء اخلاليا املجاورة الأي خلية يف املتاهة،بعد اأن تعلّمت كيفية اإن�صاء املتاهات
ف�اإنّ اخلط��وة التالي��ة ه��ي تطبيق خوارزميات البحث التي ميكنها حل املتاهة من خالل اإيجاد
خلية البداية .امل�صار االأق�صر من خلية البداية اإىل خلية الهدف املُحدَّدة
با�صتخدام حواجز ع�صوائية10 10 متثيل متاهة:2.19 �صكل
اخلاليا املجاورة:2.20 �صكل
111 110
shortest_distance[start_cell] = 0 ا�صتخدام خوارزمية البحث باأولوية األت�صاع يف حل األغاز املتاهة
# remembers the direct parent of each cell on the shortest path from the start_cell to the cell
Using BFS to Solve Maze Puzzles
parent = {} ) حل��ل األغ��ازBFS( املُ�ص��ار اإليه��ا يف ه��ذا اجل��زء خوارزمي��ة البح��ث باأولوي��ة االت�ص��اعbfs_maze_solver)( �تخدم دال��ةِ �تَ�ص
#the parent of the start cell is itself
parent[start_cell] = start_cell
املُح�دَّدةget_accessible_neighbors)( �تخدم ه��ذا النم��وذج دال��ة ِ � يَ�ص.املتاه��ة با�ص��تخدام خلي��ة البداي��ة وخلي��ة اله��دف
و مبجرد عثور خوارزمية البحث باأولوية،باالأعلى ال�ص��تدعاء اخلاليا املُجاورة التي ميكن فح�صها عند اأي نقطة اأثناء البحث
while len(to_expand)>0: املُو�صح��ة باالأ�ص��فل الإع��ادة ِبن��اءreconstruct_shortest_path)( �صتُ�ص��تخدم دال��ة،) عل��ى اخلل ّي��ة اله��دفBFS( االت�ص��اع
next_cell = to_expand.pop(0) # get the next cell and remove it from the expansion list : وذلك بتتبع امل�صار ب�صورة عك�صية من خلية الهدف اإىل خلية البداية،امل�صار االأق�صر وا�صتدعائه
if verbose:
def reconstruct_shortest_path(parent:dict, start_cell:tuple, target_cell:tuple):
print('\nExpanding cell', next_cell)
shortest_path = []
# for each neighbor of this cell
for neighbor,cost in get_neighbors(maze, next_cell): my_parent=target_cell # start with the target_cell
if verbose: # keep going from parent to parent until the search cell has been reached
print('\tVisiting neighbor cell',neighbor) while my_parent!=start_cell:
if neighbor not in visited: # if this is the first time this neighbor is visited my_parent=parent[my_parent] # get the parent of the current parent
# search complete but the target was never reached, no path exists # add the start cell to the two lists
return None,None,None visited.add(start_cell)
to_expand.append(start_cell)
# remembers the shortest distance from the start cell to each other cell
shortest_distance = {}
# the shortest distance from the start cell to itself, zero
113 112
تنجح خوارزمية البحث باأولوية االت�صاع ( )BFSيف اإيجاد امل�صار االأق�صر بعد فح�ص 10خالياُ .ميكن ت�صوير عملية تتّبع الدالة منهجية البحث باأولوية االت�صاع ( )BFSللبحث يف كل اخليارات يف العُمق احلايل قبل االنتقال اإىل م�صتوى
البحث املطبّقة بخوارزمية البحث باأولوية االت�صاع ( )BFSب�صهولة عند ت�صوير املتاهة بالتمثيل املُ�صت ِند اإىل ُخمطَّ ط. ال ُعمق التايل ،وتَ�صتخدم هذه املنهجية جمموعة واحدة تُ�ص ّمى visitedوقائمة تُ�صمى .to_expand
املثال التايل يعر�ص متاهة 3 3ومتثيلها باملُخطَّ ط: تت�صم��ن املجموع��ة االأوىل كل اخلالي��ا الت��ي ف ُِح َ�ص��ت م��رة واح��دة عل��ى االأقل من قبل اخلوارزمية .بينم��ا تت�صمن القائمة
0 1 2 الثاني��ة كل اخلالي��ا الت��ي مل ُت َو َّ�ص��ع بع��د ،مم��ا يعن��ي اأن اخلالي��ا املُج��اورة مل تُفح���ص بع��د .تَ�ص��تخدم اخلوارزمي��ة كذل��ك
1,0 0,0 قامو�ص��ن shortest_distanceو ،parentيحف��ظ االأوّل منهم��ا ط��ول امل�ص��ار االأق�ص��ر م��ن خلي��ة البداي��ة اإىل كل خلي��ة
1,2 0 اأخرى ،بينما يحفظ الثاين عُ قدة اخللية االأ�صل يف امل�صار االأق�صر.
1 خزن املتغ� ِّ�ر [ shortest_distance]target_cellطول احلل مبج��رد الو�ص��ول اإىل اخللي��ة الهدف وانتهاء البحث� ،ص� ُي ِّ
والذي ميثل طول امل�صار االأق�صر من البداية اإىل الهدف.
2,0 0,1 0,2 2 َ�صتخدم املقطع الربجمي التايل دالة () bfs_maze_solverحلل املتاهة ال�صغرة 3 3امل َّ
ُو�صحة باالأعلى: ي ِ
ُو�ص��ح القيم��ة عل��ى ال ُعق��د اإحداثي��ات خلي��ة امل�صفوف��ة
يت�صم��ن متثي��ل املُخطَّ ��ط عُ ق��دة واح��دة ل��كل خلي��ة غ��ر م�ص��غولة .ت ِّ start_cell=(2,0) # start cell, marked by a star in the 3x3 maze
وجه��ة م��ن عُ ق��دة اإىل اأخ��رى يف حال كانت اخلالي��ا املُقابِلة ُميكن الو�ص��ول اإليها من خالل املُقابل��ة� .ص��تظهر حاف��ة غ��ر ُم َّ target_cell=(1,2) # target cell, marked by an "X" in the 3x3 maze
االنتق��ال م��ن واح��دة اإىل االأخ��رى .اإح��دى املالحظ��ات املُه ّم��ة ح��ول خوارزمي��ة البح��ث باأولوي��ة االت�ص��اع ( )BFSه��ي اأن��ه
solution, distance, cell_visits=bfs_maze_solver(start_cell,
يف حال��ة امل ُخطَّ ط��ات غ��ر املوزون��ة ( )Unweighted Graphsيك��ون امل�ص��ار االأول ال��ذي ُحت��دِّ ده اخلوارزمي��ة ب��ن خلي��ة target_cell,
البداي��ة واأي خلي��ة اأخ��رى ه��و امل�ص��ار ال��ذي يت�صم��ن اأق��ل ع��دد من اخلالي��ا التي ّمت فح�صه��ا .وهذا يعني اأن��ه اإذا كانت ك ّل small_maze,
احلواف يف املُخطَّ ط لها الوزن نف�صه،اأي كان لك ّل االنتقاالت من خلية اإىل اأخرى التكلفة نف�صها ،فاإنّ امل�صار االأول الذي get_accessible_neighbors,
)verbose=True
ُحت��دِّ ده اخلوارزمي��ة اإىل ُعق��دة ُحم� َّددة يك��ون ه��و امل�ص��ار االأق�ص��ر اإىل تل��ك ال ُعق��دة .وله��ذا ال�ص��بب ،تتوق��ف دال��ة _bfs
ُ�صتهدفة.
َح�صت فيها العُقدة امل َ () maze_solverعن البحث ،و َتعر�ص نتيجة املرة االأوىل التي ف َ )print('\nShortest Path:', solution
))print('Cells on the Shortest Path:', len(solution
وم��ع ذل��ك ،ال ميك��ن تطبي��ق ه��ذه املنهجي��ة عل��ى امل ُخطَّ ط��ات املوزون��ة ( .)Weighted Graphsاملث��ال الت��ايل ِّ
يو�ص��ح )print('Shortest Path Distance:', distance
اإ�صدارًا موزونًا ( )Weighted Versionلتمثيل ُخمطَّ ط متاهة :3 3 )print('Number of cell visits:', cell_visits
0 1 2
1,0 1 0,0 1,2 0 )Expanding cell (2, 0
)Visiting neighbor cell (1, 0
1 3 1 3 1 1
)Expanding cell (1, 0
)Visiting neighbor cell (0, 0
2,0 0,1 1 0,2 2 )Visiting neighbor cell (0, 1
)Visiting neighbor cell (2, 0
�صكل :2.21املتاهة ُ
وخمطَّ طها املوزون
�صماال ،غربًا� ،صرقًا) ي�صاوي .1
يف هذا املثال ،يكون وزن كل احلواف املُقابلة للحركات الراأ�صية اأو االأفقية (جنوبًاً ، )Expanding cell (0, 0
)Visiting neighbor cell (0, 1
ومع ذلك ،يكون وزن كل احلواف املُقابلة للحركات القُطرية (جنوبية غربية ،جنوبية �ص��رقية� ،ص��مالية غربية� ،ص��مالية )Visiting neighbor cell (1, 0
�ص��رقية) ي�ص��اوي .3يف ه��ذه احلال��ة املوزون��ة� ،ص��يكون امل�ص��ار االأق�ص��ر ه��و [(،)0,2( ،)0,1( ،)0,0( ،)1,0( ،)2,0
)Expanding cell (0, 1
( ،])1,2مب�صافة اإجمالية.5=1 1 1 1 1 : Visiting neighbor cell (0, )0
ميك��ن ترمي��ز ه��ذه احلال��ة االأك��ر تعقي��دً ا با�ص��تخدام االإ�ص��دار امل��وزون م��ن الدال��ة ()get_accessible_neighbors Visiting neighbor cell (0, )2
Visiting neighbor cell (1, )0
ُو�صحة باالأ�صفل.
امل َّ Visiting neighbor cell (1, )2
def get_accessible_neighbors_weighted(maze:np.ndarray, ])Shortest Path: [(2, 0), (1, 0), (0, 1), (1, 2
cell:tuple, Cells on the Shortest Path: 4
horizontal_vertical_weight:float, Shortest Path Distance: 3
diagonal_weight:float): Number of cell visits: 10
115 114
وكم��ا ه��و ُمتو َّق��ع ،اأخط �اأت اأداة احل��ل يف البح��ث باأولوي��ة االت�ص��اع ( )BFS solverيف عر���ص امل�ص��ار ال�ص��ابق نف�ص��ه
][=neighbors
بال�صب��ط ،عل��ى الرغ��م م��ن اأن التكلف��ة ت�ص��اوي ،7وم��ن الوا�صح اأنه لي���ص امل�ص��ار االأق�صر .ويرجع ذل��ك اإىل الطبيعة غر x,y=cell
امل�ص��تنرة خلوارزمي��ة البح��ث باأولوي��ة االت�ص��اع ( ،)BFSحي��ث ال ت أاخ��ذ اخلوارزمي��ة االأوزان بع��ن االعتب��ار عن��د حتدي��د
اخللية املُق َّرر تو�ص��يعها يف اخلطوة التالية؛ الأنها تُطبِّق بب�ص��اطة منهجية البحث بالعر�ص نف�صِ ��ها والتي توؤدي اإىل امل�ص��ار for i,j in [(x-1,y-1), (x-1,y+1), (x+1,y-1), (x+1,y+1)]: # for diagonal neighbors
نف�ص��ه ال��ذي وجدت��ه اخلوارزمي��ة يف االإ�ص��دار غ��ر امل��وزون ( )Unweighted Versionم��ن املتاه��ة .الق�ص��م الت��ايل # if the cell is within the bounds of the grid and it is not occupied by a block
ي�ص��ف طريق��ة معاجل��ة نقط��ة ال�صع��ف ه��ذه با�ص��تخدام خوارزمي��ة البح��ث باأولوي��ة االأف�ص��ل ( ،)A* searchوه��ي 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
االنتقاالت املوزونة ( )Weighted Transitionsواالنتقاالت غر املوزونة (.)Unweighted Transitions
for i,j in [(x-1,y), (x,y-1), (x,y+1), (x+1,y)]: # for horizontal and vertical neighbors
ا�صتخدام خوارزمية البحث باأولوية األأف�صل يف حل األغاز املتاهة
if i>=0 and j>=0 and i<len(maze) and j<len(maze[0]) and maze[(i,j)]==0:
Using A* Search to Solve Maze Puzzles
كم�ا يف خوارزمي�ة البح�ث باأولوي�ة االت�ص�اع ( ،)BFSتَفحَ ��ص خوارزمية البح�ث باأولوية االأف�صل ( )A* searchخلية ))neighbors.append(((i,j), horizontal_vertical_weight
واح�دة يف كل م�رة بفح��ص كل خلي�ة جم�اورة ميك�ن الو�صول اإليها .فبينما ت�ص�تخدم خوارزمية البحث باأولوية االت�ص�اع return neighbors
( )BFSمنهجية بحث عمياء باأولوية العر�ص لتحديد اخللية التالية التي �صتَفحَ �صها ،تَفحَ �ص خوارزمية البحث باأولوية
االأف�ص�ل ( )A* searchاخللي�ة الت�ي يك�ون بينه�ا وب�ن اخللي�ة املُ�ص�تهدَ فة اأق�ص�ر م�ص�افة حم�ص�وبة بوا�ص�طة الدال�ة ُ�صتخدم بتعين وزن ُخم ّ�ص�ص للحركات االأفقية و احلركات الراأ�صية ،وكذلك وزن ُخم ّ�ص�ص خمتلف للحركات ت�صمح الدالة للم ِ
اال�ص�تداللية ( .)Heuristic Functionيعتم�د التعري�ف الدقي�ق للدال�ة اال�ص�تداللية عل�ى التطبي�ق .يف حال�ة األغ�از القُطرية .اإذا ا�ص�تُخدِ م االإ�صدار املوزون ( )Weighted Versionاملُ�ص��ار اإليه بوا�ص��طة اأداة احلل يف البحث باأولوية االت�ص��اع
املتاه�ة ،توفِّ�ر الدال�ة اال�ص�تداللية تقدي�رًا دقيقً�ا مل�دى قُ�رب اخللي�ة املُر�صَّ �حة اإىل اخللي�ة املُ�ص�تهدَ فة .ي�صم�ن اال�ص�تدالل ( ،)BFS solverفاإنّ النتائج �صتكون كما يلي:
املُطبَّق عدم املبالغة يف تقدير ( )Overestimateامل�ص�افة الفعلية اإىل اخللية املُ�ص�تهدَ فة مثل :عر�ص م�ص�افة تقديرية
اأك�رب م�ن امل�ص�افة احلقيقي�ة اإىل اله�دف ،وبالت�ايل �ص�وف ُحت�دِّ د اخلوارزمي�ة اأق�ص�ر م�ص�ار ُحمتم�ل ل�كلٍ م�ن املُخطَّ ط�ن from functools import partial
املوزون ( )Weightedوغر املوزون ( .)Unweightedاإذا كان اال�صتدالل ُيبالِغ يف بع�ص االأحيان يف تقدير امل�صافة،
حال ،ولكن قد ال يكون االأف�صل .اال�صتدالل املُحتمل االأب�صط �صتُقدِّ م خوارزمية البحث باأولوية االأف�صل (ً )A* search )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
def constant_heuristic(candidate_cell:tuple, target_cell:tuple):
solution, distance, cell_visits=bfs_maze_solver(start_cell,
return 1 target_cell,
small_maze,
1,0 1 0,0 عل��ى الرغ��م م��ن اأن ه��ذا اال�ص��تدالل �ص��ديد التف��اوؤل ،اإال اأن��ه ل��ن ُيق��دم اأب��دً ا تقدي�رًا اأعل��ى م��ن partial(get_accessible_neighbors_weighted,
horizontal_vertical_weight=horz_vert_w,
1
امل�صافة احلقيقية ،وبالتايل �صيوؤدي اإىل اأف�صل حل ممكن� .صيتم تقدمي ا�صتدالل متطور ُميكنه diagonal_weight=diag_w),
العثور على اأف�صل حل ب�صكلٍ �صريع يف هذا الق�صم الحقًا. )verbose=False
0,1
َ�صتخدم الدالة التالية دالة ا�صتداللية معطاة للعثور على اخللية التي يجب تو�صيعها بعد ذلك� :صكل :2.22اال�صتدالل الثابت ت ِ )print('\nShortest Path:', solution
))print('Cells on the Shortest Path:', len(solution
)print('Shortest Path Distance:', distance
def get_best_candidate(expansion_candidates:set, )print('Number of cell visits:', cell_visits
shortest_distance:dict,
heuristic:Callable):
])Shortest Path: [(2, 0), (1, 0), (0, 1), (1, 2
winner = None Cells on the Shortest Path: 4
# best (lowest) distance estimate found so far. Initialized to a very large number
Shortest Path Distance: 7
best_estimate= sys.maxsize
Number of cell visits: 6
for candidate in expansion_candidates:
# distance estimate from start to target, if this candidate is expanded next
117 116
shortest_path=reconstruct_shortest_path(parent,start_cell,target_cell)
candidate_estimate=shortest_distance[candidate]+heuristic(candidate,target_cell)
if candidate_estimate < best_estimate:
return shortest_path, shortest_distance[target_cell],cell_visits
winner = candidate
for neighbor,cost in get_neighbors(maze, best_cell): best_estimate=candidate_estimate
cell_visits+=1
ِ �َي�ص
. لفح���ص اخلالي��ا املُر�صَّ ��حة يف املجموع��ة وحتدي��د االأف�ص��لFor �تخدم التطبي��ق املُ�ص��ار اإلي��ه باالأعل��ى حلق��ة التك��رار
# first time this neighbor is reached ) يف حتدي��د املُر�صَّ ��ح االأف�ص��ل دون احلاج��ةPriority Queue( ق��د ُي�ص��تخدم طاب��ور االأولوي��ة،و ِلتطبي��ق اأك��ر كف��اءة
if neighbor not in expansion_candidates and neighbor not in fully_expanded: كدال� ٍة ُم�ص��اعدة بوا�ص��طة دال��ةget_best_candidate)( �تخدم دال��ة َ � تُ�ص.اإىل فح���ص كل املُر�صَّ � ِ�حن ب�ص��ورة متك��ررة
expansion_candidates.add(neighbor) �تخدم ه��ذا التطبي��ق كذل��ك ِ � يَ�ص، وباالإ�صاف��ة اإىل الدال��ة اال�ص��تداللية.ُو�صح��ة فيم��ا يل��ي
َّ املastar_maze_solver)(
املُ�ص��ارreconstruct_shortest_path)( وget_accessible_neighbors_weighted)( الدالتن املُ�ص��اعدتن
parent[neighbor] = best_cell # mark the best_cell as this neighbor's parent .اإليهما يف الق�صم ال�صابق
# update the shortest distance for this neighbor
shortest_distance[neighbor] = shortest_distance[best_cell] + cost import sys
# this neighbor has been visited before, but a better (shorter) path to it has just been found def astar_maze_solver(start_cell:tuple,
elif shortest_distance[neighbor] > shortest_distance[best_cell] + cost: target_cell:tuple,
maze:np.ndarray,
shortest_distance[neighbor] = shortest_distance[best_cell] + cost get_neighbors: Callable,
heuristic:Callable,
parent[neighbor] = best_cell verbose:bool=False):
fully_expanded.remove(neighbor) shortest_distance = {}
shortest_distance[start_cell] = 0
expansion_candidates.add(neighbor)
parent = {}
# all neighbors of best_cell have been inspected at this point parent[start_cell] = start_cell
expansion_candidates.remove(best_cell)
expansion_candidates = set([start_cell])
fully_expanded.add(best_cell)
fully_expanded = set()
return None, None, None # no solution was found
# while there are still cells to be expanded
while len(expansion_candidates) > 0:
shortest_distance ُو�صحة باالأعلى كذلك القامو�صن ِ ت،bfs_maze_solver)( وكما احلال يف الدالة
َّ َ�صتخدم الدالة امل
وحفظ عُ قدة اأ�صل اخللية يف هذا امل�ص��ار، حلف��ظ ط��ول امل�ص��ار االأق�ص��ر م��ن خلي��ة البداي��ة اإىل اأي خلي��ة اأخ��رىparentو best_cell = get_best_candidate(expansion_candidates,shortest_distance,heuristic)
.االأق�صر if best_cell == None: break
ِ � فه��ي تَ�ص، منهجي��ة خمتلف��ة لفح���ص اخلالي��ا وتو�ص��يعهاastar_maze_solve)( تَتب��ع الدال��ة،ورغ��م ذل��ك
�تخدم
if verbose: print('\nExpanding cell', best_cell)
تُ�ص��تخدَ م دال��ة، يف كل تك��رار. لتت ُّب��ع كل اخلالي��ا الت��ي ميك��ن تو�ص��يعها بع��د ذل��كexpansion_candidates
ِّ لتحديد اأي من اخلاليا املُر�صَّ حة �ص ُتget_best_candidate)(
.و�ص ُعها بعد ذلك # if the target cell has been reached, reconstruct the shortest path and exit
if best_cell == target_cell:
اإذا كانت اخللية. لفح�ص كل اخلاليا املجاورة لهاFor تُ�صتخدَ م حلقة التكرار،best_cell بعد اختيار اخللي ِة املر�صح ِة
. عُ قدة االأ�صل للخلية املجاورة يف امل�صار االأق�صرbest_cell ف�صت�صبح،فح�ص للمرة االأوىل َ املجاورة ُت
119 118
يحدث االأمر نف�صه اإذا مت فح�ص الدالة املجاورة من قبل ،ولكن فقط اإذا كان امل�صار اإىل هذه اخللية املجاورة من خالل
)print('\nShortest Path:', solution
best_cellاأق�صر من امل�صار ال�صابق .اإذا عرت الدالة بالفعل على م�صار اأف�صل ،ف�صيتعن على اخللية املجاورة العودة
))print('Cells on the Shortest Path:', len(solution اإىل جمموع�ة expansion_candidatesالإع�ادة تقيي�م امل�ص�ار االأق�ص�ر اإىل اخلالي�ا املج�اورة له�اُ .ي�ص�تخدم املقط�ع
)print('Shortest Path Distance:', distance الربجمي التايل () astar_maze_solverحلل احلالة غر املوزونة ( )Unweighted Caseللُغز املتاهة :3x3
)print('Number of cell visits:', cell_visits
)start_cell=(2,0
])Shortest Path: [(2, 0), (1, 0), (0, 0), (0, 1), (0, 2), (1, 2 )target_cell=(1,2
Cells on the Shortest Path: 6
Shortest Path Distance: 5 solution, distance, cell_visits=astar_maze_solver(start_cell,
Number of cell visits: 12 target_cell,
small_maze,
get_accessible_neighbors,
ُو�صح النتائج قدرة () astar_maze_solverعلى حل احلالة املوزونة بالعثور على امل�صار االأق�صر املُحتمل ت ِّ constant_heuristic,
[( ])2 ،1( ،)2 ،0( ،)1 ،0( ،)0 ،0( ،)0 ،1( ،)0 ،2بتكلف��ة اإجمالي��ة قدره��ا .5وه��ذا ِّ
يو�ص��ح مزاي��ا ا�ص��تخدام )verbose=False
خوارزمية بحث م�صتنرة ،فهي ُمتكِّنك من اإيجاد احلل االأمثل با�صتخدام اأب�صط طريقة ممكنة. )print('\nShortest Path:', solution
))print('Cells on the Shortest Path:', len(solution
)print('Shortest Path Distance:', distance
( target_cellالخلية الم�صتهدَ فة) املقارنة بني اخلوارزميات Algorithm Comparison )print('Number of cell visits:', cell_visits
اخلطوة التالية هي املقارنة بن خوارزمية البحث باأولوية االت�صاع ( )BFSوخوارزمية
البح�ث باأولوي�ة االأف�ص�ل ( )A* searchيف متاه�ة أاك�رب حجمً�ا و أاك�ر تعقي�دً ا.
])Shortest Path: [(2, 0), (1, 0), (0, 1), (1, 2
�صتخدم املقطع الربجمي التايل بلغة البايثون الإن�صاء متثيل رقمي لهذه املتاهة:
ُي َ Cells on the Shortest Path: 4
Shortest Path Distance: 3
))big_maze=np.zeros((15,15 Number of cell visits: 12
121 120
big_maze, verbose=False)
partial(get_accessible_neighbors_weighted,
horizontal_vertical_weight=horz_vert_w, print('\nBFS unweighted.')
diagonal_weight=diag_w), print('\nShortest Path:', solution_bfs_unw)
verbose=False) print('Cells on the Shortest Path:', len(solution_bfs_unw))
print('Shortest Path Distance:', distance_bfs_unw)
print('\nBFS weighted.') print('Number of cell visits:', cell_visits_bfs_unw)
print('\nShortest Path:', solution_bfs_w)
print('Cells on the Shortest Path:', len(solution_bfs_w)) solution_astar_unw, distance_astar_unw, cell_visits_astar_unw=astar_maze_solver(
print('Shortest Path Distance:', distance_bfs_w) start_cell,
print('Number of cell visits:', cell_visits_bfs_w) target_cell,
big_maze,
solution_astar_w, distance_astar_w, cell_visits_astar_w=astar_maze_solver(start_cell, get_accessible_neighbors,
target_cell, constant_heuristic,
big_maze, verbose=False)
partial(get_accessible_neighbors_weighted,
horizontal_vertical_weight=horz_vert_w, print('\nA* Search unweighted with a constant heuristic.')
diagonal_weight=diag_w), print('\nShortest Path:', solution_astar_unw)
constant_heuristic, print('Cells on the Shortest Path:', len(solution_astar_unw))
verbose=False) print('Shortest Path Distance:', distance_astar_unw)
print('Number of cell visits:', cell_visits_astar_unw)
print('\nA* Search weighted with constant heuristic.')
print('\nShortest Path:', solution_astar_w)
print('Cells on the Shortest Path:', len(solution_astar_w)) BFS unweighted.
print('Shortest Path Distance:', distance_astar_w)
print('Number of cell visits:', cell_visits_astar_w) 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)]
BFS weighted. Cells on the Shortest Path: 19
Shortest Path Distance: 18
Shortest Path: [(14, 0), (14, 1), (14, 2), (13, 2), (13, 3), (12, 3), (12, Number of cell visits: 1237
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, A* Search unweighted with a constant heuristic.
12), (4, 11), (5, 10)]
Cells on the Shortest Path: 26
Shortest Path: [(14, 0), (13, 1), (12, 2), (11, 3), (10, 4), (10, 5), (10,
Shortest Path Distance: 30
6), (9, 7), (9, 8), (10, 9), (9, 10), (9, 11), (9, 12), (8, 13), (7, 13),
Number of cell visits: 1235
(6, 13), (5, 12), (6, 11), (5, 10)]
Cells on the Shortest Path: 19
A* Search weighted with constant heuristic.
Shortest Path Distance: 18
Number of cell visits: 1272
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)] start_cell=(14,0) االإ�صدار املوزون
Cells on the Shortest Path: 26 target_cell=(5,10)
Shortest Path Distance: 25
Number of cell visits: 1245 horz_vert_w=1
diag_w=3
123 122
تتوافق النتائج مع تلك التي ح�صلت عليها يف املتاهة ال�صغرة وهي كالتايل:
جدول :2.6مقارنة بني اخلوارزميات املُ�صتنرة وغر املُ�صتنرة
• جنح��ت خوارزم ّيت��ا البح��ث باأولوي��ة االت�ص��اع ( )BFSوالبح��ث باأولوي��ة االأف�ص��ل ( )A* searchيف العث��ور عل��ى امل�ص��ار
غر امل ُ�صتنرة امل ُ�صتنرة معاير املقارنة االأق�صر لالإ�صدار غر املوزون.
• وجدت خوارزمية البحث باأولوية االت�صاع ( )BFSاحلل بعد فح�ص عدد اأق ّل من اخلاليا وهو 1237مقابل 1272
التعقيد احل�صابي يف خوارزمية البحث باأولوية االأف�صل (.)A* search
اأكر تعقيدً ا ح�صابيًا. اأقل تعقيدً ا.
()Computational Complexity • ف�ص��لت خوارزمي��ة البح��ث باأولوي��ة االت�ص��اع ( )BFSيف العث��ور عل��ى امل�ص��ار االأق�ص��ر لالإ�ص��دار امل��وزون ،حي��ث ع��رت
على م�صار بطول 30وحدة.
اأبط أا من اخلوارزميات املُ�صتنرة. اأ�صرع يف عمليات البحث. الكفاءة ()Efficiency • ع��رت خوارزمي��ة البح��ث باأولوي��ة االأف�ص��ل ( )A* searchعل��ى امل�ص��ار االأق�ص��ر لالإ�ص��دار امل��وزون ،حي��ث ع��رت
على م�صار بطول 25وحدة.
ُي�ص��تخدَ م املقطع التايل لتمثيل امل�ص��ار االأق�صر الذي وجدته اخلوارزميتان؛ خوارزمية البحث باأولوية االت�ص��اع ()BFS
غ��ر عملي��ة حل��ل م�ص��كالت البح��ث اأف�صل يف حل م�ص��كالت البحث وا�ص��ع وخوارزمية البحث باأولوية االأف�صل ( )A* searchلالإ�صدار املوزون كالتايل:
وا�صع النطاق. النطاق. االأداء ()Performance
)(maze_bfs_w=big_maze.copy )(maze_astar_w=big_maze.copy
ُحتقِق احلل االأمثل. حتقّقُ حلوال مُنا�صب ًة ب�صكلٍ عام. الفعالية ()Effectiveness for cell in solution_bfs_w: for cell in solution_astar_w:
maze_bfs_w[cell]=2 maze_astar_w[cell]=2
)plot_maze(maze_bfs_w )plot_maze(maze_astar_w
وم��ع ذل��ك ،تُظهِ ��ر النتائ��ج اأن خوارزمي��ة البح��ث باأولوي��ة االت�ص��اع ( )BFSميكنها العثور على احلل االأمثل ب�ص��كلٍ �ص��ريع بفح�ص
ع��دد اأق��ل م��ن اخلالي��ا يف احلال��ة غ��ر املوزون��ة .ميك��ن ُمعاجل��ة ذل��ك بتوف��ر ا�ص��تدالل أاك��ر ذكا ًء خلوارزمي��ة البح��ث باأولوي��ة خوارزمية البحث باأولوية االأف�صل (.)A* search خوارزمية البحث باأولوية االت�صاع (.)BFS
ا الأف�ص��ل ( .)A* searchواال�ص��تدالل ال�ص��هر يف التطبيق��ات ا ملُ�ص��ت ِندة اإىل امل�ص��افة ه��و م�ص��افة مانها ت��ن
مثاال على ( ،)Manhattan Distanceوه��ي جمم��وع الفروق��ات املُطلق��ة ب��ن اإحدا ِث َّي��ي نقطت��ن ُمعطات��نِّ .
يو�صح ال�ص��كل اأدن��اه ً
كيفية ح�صاب م�صافة مانهاتن:
م�صافة مانهاتن Manhattan Distance
�صكل :2.24مقارنة بن حلَّي خوارزميتي البحث باأولوية االت�صاع والبحث باأولوية االأف�صل
يوؤك��د التّمثي��الن اأن الطبيع��ة املُ�ص��تنرة خلوارزمي��ة البح��ث باأولوي��ة االأف�ص��ل ( )A* searchت�ص��مح لها بتجنب احلركة
)A (x1, y1 القُطري��ة ،الأن تكلفته��ا اأعل��ى م��ن احلركت��ن االأفقي��ة والراأ�ص��ية .وم��ن ناحي��ة اأخ��رى ،تتجاه��ل خوارزمي��ة البح��ث باأولوية
االأف�ص��ل ( )BFSغ��ر امل�ص��تنرة تكلف��ة كل حرك��ة وتُعط��ي ح� ً�ال اأعل��ى تكلف��ة .وفيم��ا يل��ي مقارن��ة عام��ة ب��ن اخلوارزميات
�صكل :2.25م�صافة مانهاتن املُ�صتنرة وغر املُ�صتنرة كما هو مو�صح يف جدول :2.6
125 124
:ميكن تطبيق هذا ب�صهولة يف �صورة دالة البايثون كما يلي
A* Search unweighted with the Manhattan heuristic.
Shortest Path: [(14, 0), (13, 1), (12, 2), (11, 3), (10, 4), (9, 5), (8, def manhattan_heuristic(candidate_cell:tuple,target_cell:tuple):
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)] x1,y1=candidate_cell
Cells on the Shortest Path: 19 x2,y2=target_cell
Shortest Path Distance: 18 return abs(x1 - x2) + abs(y1 - y2)
Number of cell visits: 865
A* Search weighted with the Manhattan heuristic. astar_maze_solver)( �تخدم املقط��ع الربجم��ي الت��ايل الختب��ار اإمكاني��ة ا�ص��تخدام هذا اال�ص��تدالل الذكي لدع��م
َ �يُ�ص
:يف البحث ب�صكل اأ�صرع يف كلٍ من احلاالت املوزونة وغر املوزونة
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, start_cell=(14,0)
12), (5, 11), (5, 10)] target_cell=(5,10)
Cells on the Shortest Path: 26
Shortest Path Distance: 25 solution_astar_unw_mn, distance_astar_unw_mn, cell_visits_astar_unw_mn=astar_
Number of cell visits: 1033 maze_solver(start_cell,
target_cell,
big_maze,
) ميك��ن ا�ص��تخدامه لدع��م خوارزمي��ة البح��ثManhattan Distance( توؤك��د النتائ��ج اأن ا�ص��تدالل م�ص��افة مانهات��ن get_accessible_neighbors,
كل منٍ ) يف العث��ور عل��ى امل�ص��ارات االأق�ص��ر املُحت َمل��ة بفح���ص أاق��ل ع��دد م��ن اخلالي��ا يفA* search( باأولوي��ة االأف�ص��ل manhattan_heuristic,
verbose=False)
عل ًم��ا ب�اأن ا�ص��تخدام ه��ذا اال�ص��تدالل االأك��ر ذكا ًء يفح���ص ع��ددًا أاق��ل م��ن اخلالي��ا م��ن.احل��االت املوزون��ة وغ��ر املوزون��ة
.)BFS( ذلك املُ�صتخدَ م يف خوارزمية البحث باأولوية االت�صاع print('\nA* Search unweighted with the Manhattan heuristic.')
print('\nShortest Path:', solution_astar_unw_mn)
: النتائج حول مُتغرات اخلوارزميّات املختلفة يف املتاهة الكبرة2.7 يُلخِّ �ص جدول print('Cells on the Shortest Path:', len(solution_astar_unw_mn))
print('Shortest Path Distance:', distance_astar_unw_mn)
print('Number of cell visits:', cell_visits_astar_unw_mn)
مقارنة بني اأداء اخلوارزميات:2.7 جدول
خوارزمية البحث باأولوية خوارزمية البحث باأولوية horz_vert_w=1 # weight for horizontal and vertical moves
)A* search( االأف�صل )A* search( االأف�صل خوارزمية البحث باأولوية diag_w=3 # weight for diagonal moves
با�صتدالل مانهاتن باال�صتدالل الثابت )BFS( االت�صاع
solution_astar_w_mn, distance_astar_w_mn, cell_visits_astar_w_mn=astar_maze_
solver(start_cell,
1033 َح�صت
َ وف،25=امل�صافة 1245 َح�صت
َ وف،25=امل�صافة 1235 َح�صت
َ وف،30=امل�صافة املوزونة target_cell,
big_maze,
partial(get_accessible_neighbors_weighted,
horizontal_vertical_weight=horz_vert_w,
865َح�صت
َ وف،18=امل�صافة 1272 َح�صت
َ وف،18=امل�صافة 1237َح�صت
َ وف،18=امل�صافة غر املوزونة diagonal_weight=diag_w),
manhattan_heuristic,
verbose=False)
َّ ُو�ص��ح اجل��دول مزاي��ا ا�ص��تخدام الطَّ رائ��ق االأك��ر ذكا ًء حل��ل امل�ص��كالت املُ�ص��ت ِندة اإىل البح��ث مث��ل تل��ك امل
ُو�صح��ة به��ذا ِّ ي print('\nA* Search weighted with the Manhattan heuristic.')
:الدر�ص print('\nShortest Path:', solution_astar_w_mn)
print('Cells on the Shortest Path:', len(solution_astar_w_mn))
) غ��ر املوزون��ة اإىل خوارزمي��ة البح��ث باأولوي��ة االأف�ص��لBFS( • ال َتح �وُل م��ن خوارزمي��ة البح��ث باأولوي��ة االت�ص��اع print('Shortest Path Distance:', distance_astar_w_mn)
. كما اأتاح اإمكانية حل امل�صكالت االأكر تعقيدً ا،نتائج اأف�صل َ ) املوزونة حَ قَّقA* search( print('Number of cell visits:', cell_visits_astar_w_mn)
• ُميك��ن حت�ص��ن ذكاء خوارزمي��ات البح��ث املُ�ص��تنرة با�ص��تخدام دوال اال�ص��تدالل االأف�ص��ل الت��ي ت�ص��مح له��ا بالعثور على
.احلل االأمثل ب�صكلٍ اأ�صرع
127 126
3ا�سرح باإيجاز كيف تعمل خوارزمية البحث باأولوية االأف�سل (.)A* search
مترينات
1اذكر تطبيقني خلوارزميات البحث.
َ 4عدِّل املقطع الربجمي بتغير الوزن القُطري ( )Diagonal Weightمن 3اإىل .1.5ماذا تُالحظ؟
ه��ل يتغ��ر امل�س��ار االأق�س��ر يف حالت��ي خوارزمي��ة البح��ث باأولوي��ة االت�س��اع ( )BFSوخوارزمي��ة البح��ث باأولوي��ة االأف�س��ل
() A* search؟
2حدِّد االختالفات بني خوارزميات البحث امل ُ�ستنرة وغر امل ُ�ستنرة ،ثم اذكر ً
مثاال على كل خوارزمية.
َ 5عدِّل املقطع الربجمي بتبديل اإحداثيات خلية البداية مع احداثيات اخللية امل ُ�ستهدَفة .ماذا تُالحظ؟
هل امل�سار هو نف�سه كما كان �سابقًا للحاالت املوزونة من خوارزميتي البحث باأولوية االت�ساع ( )BFSوالبحث باأولوية
االأف�سل () A* search؟
129 128
ماذا تع ّلمت الم�سروع
امل�سطلحات الرئي�سة
3
اتب��ع اخلط��وات نف�س��ها لالإ�س��دارات املوزون��ة م��ن خوارزميت��ي البح��ث باأولوية االت�س��اع
A* Search البحث باأولوية االأف�سل Model Training تدريب النموذج ( )BFSوالبح��ث باأولوي��ة االأف�س��ل ( )A* searchبا�س��تخدام دال��ة اال�س��تدالل
Algorithm
اأداء اخلوارزمية Path Finding اإيجاد امل�سار الثابت.
Performance
Breadth-First Recursion اال�ستدعاء الذاتي
)Search (BFS
البحث باأولوية االت�ساع
Rule-Based االأنظمة القائمة على
Confusion Systems القواعد 4
Matrix
م�سفوفة الدقة كرِّر العملية لالإ�سدارات غر املوزونة واملوزونة من خوارزميتي البحث باأولوية االت�ساع
Depth-First
Scoring Function دالة ت�سجيل النقاط ( )BFSوالبح��ث باأولوي��ة االأف�س��ل ( )A* searchبا�س��تخدام دال��ة ا�س��تدالل مانهات��ن
)Search (DFS
البحث باأولوية العمق Search (.)Manhattan Heuristic
Algorithms
خوارزميات البحث
Heuristic
Function
دالة ا�ستداللية Uninformed
Search
البحث غر امل ُ�ستنر
Informed Search البحث امل ُ�ستنر Unweighted
Knowledge Base قاعدة املعرِفة Graph
ُخمطَّ ط غر موزون
Maze Solving حل املتاهات Weighted Graph ُخمطَّ ط موزون
131 130
التع ُّلم َّ
املوجه
الدر�ض األأول
.3معا ة اللغ��ات الطبيعية
ا�ستخدام التع ُلّم املوجَّ ه لفهم الن�سو�ض �س ��يتعلّم الطال ��ب يف ه ��ذه الوح ��دة عملي ��ة تدري ��ب �س ��املة لنم ��وذج التع ُّل ��م املوجَّ ��ه
Using Supervised Learning to Understand Text والتع ُّل ��م غ ��ري املوجَّ ��ه لفه ��م املعن ��ى الكام ��ن يف اأج ��زاء الن�سو� ��ض .وكذل � �س ��يتعلّم
معا جل��ة اللغ��ات الطبيعي��ة ( )Natural Language Processing - NLPه��ي اإ ح��دى جم��االت ا ل��ذكاء اال�سطنا ع��ي كيفي ��ة ا�س ��تخدام تع ُّل ��م األل ��ة ( )Machine Learning - MLيف دع ��م التطبيق ��ات
( )Artificial Intelligence - AIالت��ي تر ّك��ز عل��ى متك��ني اأجه��زة احلا�س��ب لت�سب��ح ق��ادرة عل��ى فه��م اللغ��ات الب�س��ريّة ،وتف�س��رها،
واإنتاجها .حيث تُعنى معاجلة اللغات الطبيعية بعدد من املهام ،مثل :ت�سنيف الن�سو�س ،وحُتليل امل�س��اعر ،والرتجمة االآلية ،واالإجابة ذات ال�سلة عا ة اللغات الطبيعية (.)Natural Language Processing -NLP
عل��ى االأ�س��ئلة� .س��ركز ه��ذا الدر���س ب�س��كل خا���س عل��ى كيفي��ة ا�س��تخدام التع ُّل��م َّ
املوج��ه ال��ذي ُيع� ُّد اأح��د االأن��واع الرئي�س��ة لتع ُّل��م االآل��ة
( )Machine Learning - MLيف حُتقيق الفهم والتنبوؤ التلقائي خل�سائ�س الن�سو�س.
كال من تعلُّم االآلة والتعلُّم العميق ،كما يت�سح يف ال�سكل ،3.1 لقد تعلّمت يف الوحدة االأوىل اأن الذكاء اال�سطناعي هو م�سطلح ي�سم ُل ًّ
فال��ذكاء اال�سطناع��ي ه��و ذل��ك املج��ال الوا�س��ع م��ن علوم احلا�س��ب الذي ُيعنى بابت��كار اآالت ذكية ،بينما تعلُّم االآلة ه��و اأحد فروع الذكاء اأهداف التعلُّم
اال�سطناع��ي ال��ذي ير ّك��ز عل��ى ت�سمي��م اخلوارزميات وبِناء النم��اذج التي ُمتكِّن االآلة من التعلُّم من البيانات دون احلاجة اإىل برجمتها
ب�سكل �سريح. بنهاية هذه الوحدة �سيكون الطالب قادرًا على اأن:
يُعرِّ ف التعلُّم املوجَّ ه.
التعلُّم العميق (:)Deep learning الذكاء األ�سطناعي
التعلُّ��م العمي��ق ه��و اأح��د اأن��واع تعلُّ��م ا آالل��ة ال��ذي ي�س� ِ
�تخدم تعلُّم األلة
يُدرِّب منوذج التعلُّم املوجَّ ه على فهم الن�ض.
ال�سبكات الع�سبية العميقة للتعلُّم تلقائيًا من جمموعات يُعرِّ ف التعلُّم غري املوجَّ ه.
كب��رة م��ن البيان��ات ،فه��و ي�س��مح الأجه��زة احلا�س��ب
بالتع ّرف على االأمناط واتخاذ القرارات بطريقة حُتاكي التعلُّم العميق يُدرِّب منوذج التعلُّم غري املوجَّ ه على فهم الن�ض.
االإن�سان ،عرب ت�سميم مناذج ُمعقدة من البيانات. يُن�سئ روبوت درد�سة ب�سيط.
�سكل :3.1فروع الذكاء اال�سطناعي
يُنت� ��ج الن�سو�� ��ض با�س� ��تخدام تقني� ��ات تولي� ��د اللغ� ��ات الطبيعي� ��ة
تعلُّم األلة Machine Learning
تعلُّم االآلة هو اأحد فروع الذكاء اال�سطناعي املعني بتطوير اخلوارزميات التي ُمتكِّن اأجهزة احلا�سب من التعلُّم من البيانات
(.)Natural Language ener tion -NLG
بدال من اتباع التعليمات الربجمية ال�سريحة ،فهو يعمل على تدريب مناذج احلا�سب للتعرُّف على االأمناط والقيام املُدخَ لةً ،
بالتنبوؤات وفقًا للبيانات املُدخَ لة مما ي�سمح للنموذج بتح�سني الدقة مع مرور الوقت ،وكذلك يتيح لالآلة اأداء مهام متعددة ،مثل:
الت�سنيف ،واالنحدار ،والتجميع ،وتقدمي التو�سيات دون احلاجة اإىل برجمة االآلة ب�سكل �سريح للقيام بكل مُهِ مَّة على حدة.
مُيكن ت�سنيف تعلُّم االآلة اإىل ثالثة اأنواع رئي�سة:
التع ُّل��م املوجَّ ��ه ( )Supervised learningه��و ن��وع م��ن تعلُّ��م االآل��ة تتع ّل��م فيه اخلوارزمية م��ن بيانات تدريب مُعن َون��ة ()Labelled
به��دف القي��ام بالتنب�وؤات ح��ول بيان��ات جدي��دة غ��ر موج��ودة يف جمموعة التدري��ب اأو االختبار كما هو مو�سح يف �س��كل ،3.2ومن
األأدوات
االأمثلة عليه: مفكرة جوبيرت ()Jupyter Notebook
• ت�سنيف ال�سور ( ،)Image Classificationمثل :التعرف على الكائنات يف ال�سور.
• ك�سف االحتيال ( ،)Fraud Detectionمثل :حُتديد املُعامَ الت املالية امل�سبوهة.
• ت�سفية الربيد االإلكرتوين الع�سوائي ( ،)Spam Filteringمثل :حُتديد ر�سائل الربيد االإلكرتوين غر املرغوب فيها.
133 132
التعلُّم املوجَّ ه Supervised Learning املوج��ه ( )Unsupervised learningه��و ن��وع م��ن تعلُّ��م االآل��ة تعم��ل التع ُّل��م غ��ر َّ
التعلُّ��م املوجَّ ��ه ه��و اأح��د اأن��واع تعلُّ��م االآل��ة ال��ذي يعتمد عل��ى ا�س��تخدام البيانات في��ه اخلوارزمي��ة مبوج��ب بيان��ات غ��ر مُعن َون��ة ( )Unlabeledيف حُماول��ة
التعلُّم املوجَّ ه املُعنوَنة لتدريب اخلوارزميات للقيام بالتنبوؤات .يتم تدريب اخلوارزمية على الإيجاد االأمناط والعالقات بني البيانات ،ومن االأمثلة عليه:
(:)Supervised Learning جمموع��ة م��ن البيان��ات املُعن َون��ة ث��م اختبارها على جمموع��ة بيانات جديدة مل امل ُخرَج املتوقّع • الك�س��ف ع��ن االخت��الف ( ،)Anomaly Detectionمث��ل :حُتدي��د االأمن��اط
�ست�س��تخدم يف التعلُّ��م املوجَّ ��ه جمموع��ات املوج��ه ع��اد ًة يف معاجل��ة
�تخدم التعلُّ��م َّ
تك��ن ج��زءًا م��ن بيان��ات التدري��بُ .ي�س� َ غر العادية يف البيانات.
البيان��ات املُعن َون��ة واملُنظم��ة ب�س��كل ي��دوي اللغ��ات الطبيعي��ة للقي��ام مبه��ام مث��ل :ت�سني��ف الن�سو���س ،وحُتلي��ل امل�س��اعر، النموذج • التجميع ( ،)Clusteringمثل :جتميع البيانات ذات اخل�سائ�س املت�سابهة.
لتدري��ب خوارزميات احلا�س��ب على التنبوؤ والتعرّف على الكيانات امل�سماة (.)Named Entity Recognition - NER • تقلي���س االأبع��اد ( ،)Dimensionality Reductionمث��ل :اختي��ار االأبع��اد
بالقيم اجلديدة. يف ه��ذه امله��ام يت��م تدري��ب اخلوارزمي��ة عل��ى جمموع��ة م��ن البيان��ات املُعن َون��ة، املُ�ستخدَ مة للحدِّ من تعقيد البيانات.
حيث يتم اإدراج كل مثال حُتت عنوان الت�سنيف املنا�سب اأو امل�ساعر املنا�سبة. جمموعة بيانات
االختبار التع ُّل��م املع �زَّز ( )Reinforcement learningه��و ن��وع م��ن تعلُّ��م االآل��ة تتفاع��ل
املوج��ه ا�س��م االنح��دار ( )Regressionعندم��ا يُط َل��ق عل��ى عملي��ة التعلُّ��م َّ اخلوارزمية في��ه االآل��ة م��ع البيئ��ة املحيط��ة وتتع ّل��م ع��رب املحاول��ة واخلط �اأ اأو تل ّق��ي املكاف �اأة
تك��ون القي��م الت��ي تتنب�اأ به��ا االآل��ة رقم ّي��ة ،بينم��ا يطل��ق عليه��ا ا�س��م الت�سني��ف والعقاب ،ومن االأمثلة عليه:
( )Classificationعندما تكون القيم متقطّ عه.
جمموعة بيانات • لعب االألعاب ،مثل :لعبة ال�سطرجن اأو لعبة قو (. )GO
األنحدار التدريب
• الروبوتية ،مثل :تعليم الروبوت كيف يتنقل يف البيئة املحيطة به.
على �س��بيل املثال ،قد ُي�س��تخدم االنحدار يف التنبوؤ ب�س��عر بيع املنزل وفقًا مل�س��احته ،وموقعه ،وعدد غرف النوم فيه .كما امل ُخرَج املطلوب
مُيك��ن ا�س��تخدامه يف التنب�وؤ بحج��م الطل��ب عل��ى اأح��د املنتج��ات ا�س��تنادًا اإىل بيان��ات املبيع��ات التاريخي��ة وحج��م االإنف��اق • تخ�سي�س املوارد ،مثل :حُت�سني ا�ستخدام املوارد يف �سبكة ما.
�تخدم االنح��دار الن�سو���س املُدخَ ل��ة املتوفرة للتنب�وؤ بتقييم اجلمهوراالإع��الين .ويف جم��ال معاجل��ة اللغ��ات الطبيعي��ةَ ،ي�س� ِ جدول 3.1يلخ�س مزايا وعيوب اأنواع تعلُّم االآلة.
للفيلم اأو مدى التفاعل مع املن�سورات اخلا�سة به على و�سائل التوا�سل االجتماعي. �سكل :3.2متثيل التعلُّم املوجَّ ه
الت�سنيف جدول :3.1مزايا اأنواع تعلّم األلة ،وعيوبها
من ناحية اأخرىُ ،ي�ستخدم الت�سنيف يف التطبيقات مثل :ت�سخي�س احلاالت الطبية وفقًا لالأعرا�س ونتائج الفحو�سات. العيوب املزايا
املوجه يف ت�سنيف الن�سو�س املُدخَ لة اإىل فئات اأو عناوين وعندما يتعلق االأمر بفهم الن�سو�س ،مُيكن ا�ستخدام التعلُّم َّ التعلُّم املوجَّ ه
املوجه
اأو التنب�وؤ به��ا بن��ا ًء عل��ى الكلم��ات اأو العب��ارات املوج��ودة يف املُ�س��تنَد .على �س��بيل املثال ،مُيكن تدريب من��وذج التعلُّم َّ • يتطلب بيانات مُعنوَنة ،والتي قد تكون مرتفعة التكلفة. • اأثبت كفاءة وفعالية كبرة ويُ�ستخدم على نطاق وا�سع.
�تخدمة يف ر�س��الة
لت�سنيف ر�س��ائل الربيد االإلكرتوين اإىل ر�س��ائل مزعجة اأو غر مزعجة وفقًا للكلمات اأو العبارات املُ�س� َ • يقت�سر ا�س��تخدامه على املُهِ َّمة التي مت تدريبه عليها ،وقد • �سهل الفهم والتطبيق.
الربي��د االإلك��رتوين .و ُيع� ّد ت�سني��ف امل�س��اعر اأح��د التطبيق��ات ال�س��هرة كذل��ك ،حي��ث مُيك��ن التنب� ؤو باالنطب��اع العام حول ال مُيكنه اإعطاء التنب ؤو ال�سحيح للبيانات اجلديدة. • ُمُيكن��ه التعام��ل م��ع البيان��ات اخلطي��ة وغ��ر اخلطي��ة عل��ى
و�س ُي�س��تخدم ه��ذا التطبي��ق كمث��ال عمل��ي يف ه��ذه الوح��دة ،ل�س��رح كل خط��وات م�س��تند م��ا �س��واء كان �س��لب ًّيا اأم اإيجاب ًّي��اَ . • ي�سع��ب تكيف��ه م��ع امل�س��كالت االأخ��رى يف ح��االت النم��اذج حد �سواء.
املوجه ب�سكل �سامل من بداية رحلة التعلم حتى نهايتها. عملية بِناء وا�ستخدام منوذج التعلُّم َّ املُعقدة جدً ا.
يف ه��ذه الوح��دة �ستَ�س��تخدم جمموع��ة بيان��ات م��ن مراجع��ات االأف��الم على موقع IMDb.comال�س��هر� .س��تجد البيانات التعلُّم غر املوجَّ ه
حُت ّمل
مُق�سّ ��مه اإىل جمموعت��ني؛ االأوىل �ستُ�س��تخدم لتدري��ب النم��وذج ،والثاني��ة الختب��ار اأداء النم��وذج .يف البداية البد اأن ُ َ • اأ�سعب من التعلُّم املوجَّ ه من حيث الفهم والتف�سر. • ال يتطلب بيانات مُعنوَنة ،مما يجعله اأكر مرونة.
البيان��ات اإىل ِ ،DataFrameل��ذا علي��ك ا�س��تخدام مكتب��ة باندا���س بايث��ون ( )Pandas Pythonوالت��ي ا�س��تخدمتها • يقت�سر على التحليل اال�ستك�س��ايف ،وقد ال ينا�س��ب عمليات • ُمُيكنه اكت�ساف االأمناط اخلفية يف البيانات.
�س��ابقًا .مكتب��ة باندا���س ه��ي اإح��دى االأدوات ال�س��هرة الت��ي تُ�س��تخدم للتعام��ل م��ع جداول البيان��ات .التعليم��ات الربجمية �سنع القرار. • ُمُيكنه التعامل مع البيانات ال�سخمة واملُعقدة.
التالية �ستقوم با�ستراد املكتبة اإىل الربنامج ،ثم حُتميل جمموعتي البيانات: • ي�سع��ب تكيف��ه م��ع امل�س��كالت االأخ��رى يف ح��االت النم��اذج
املُعقدة جدً ا.
%%capture # capture is used to suppress the installation output. التعلُّم املعزَّز
# install the pandas library, if it is missing.
• يتّ�س��م باملرون��ةُ ،ومُيكن��ه التعام��ل م��ع البيئ��ات املُعق��دة • اأكر تعقيدً ا من التعلّم املوجَّ ه وغر املوجَّ ه.
!pip install pandas • �سعوب��ة ت�سمي��م نظ��م مكاف �اآت ُحُت��دد ال�س��لوك املطل��وب واملتغرة با�ستمرار.
import pandas as pd • مُيكن��ه التعلُّ��م م��ن التج��ارب ال�س��ابقة وحُت�س��ني الكف��اءة مع ب�سكل دقيق.
• ق��د يتطل��ب جمموع��ات كبرة م��ن بيانات التدري��ب واملوارد مرور الوقت.
مكتبة باندا�س هي مكتبة �سهيرة تُ�ستخدم لقراءة ومعالجة البيانات ال�سبيهة بجداول البيانات. • يتنا�س��ب م��ع عملي��ات �سن��ع الق��رار مث��ل لع��ب االألع��اب احل�سابية.
والروبوتية.
135 134
هيز البيانات واملعا ة املُ�سبقة Data re r tion and Pre-Processing # load the train and testing data.
على الرغم من اأن تن�س��يق الن�س االأويل كما يف �س��كل 3.4بديهي للقار الب�س��ري ،اإال اأنَّ خوارزميات التعلُّم املوجَّ ه ال ت�س��تطيع التعامل )'imdb_train_reviews=pd.read_csv('imdb_data/imdb_train.csv
)'imdb_test_reviews=pd.read_csv('imdb_data/imdb_test.csv
فبدال من ذلك ،حُتتاج اخلوارزميات اإىل حُتويل هذه املُ�ستنَدات اإىل تن�سيق متَّجَ ه رقمي (.)Numeric Vector معه ب�سورته احلاليةً .
فيم��ا ُيع��رف بعملي��ة الربجم��ة اال اهي��ة ( .)Vectorizationومُيك��ن تطبيق عملية الربجمة االجتاهي��ة بعدة طرائق خمتلفة ،وتتميز imdb_train_reviews
باأن لها تاأثرًا اإيجابيًّا كبرًا على اأداء النموذج املُد ّرب.
مكتبة �سكلرين Sklearn Library وكم��ا يت�س��ح يف ال�س��كل ،3.3ف �اإن
جمموع��ة بيان��ات DataFrame
املوجه با�ستخدام مكتبة �سكلرن وتُعرف كذلك با�سم مكتبة �سايكيت لرن ( ،)Scikit-Learnوهي �سيتم بناء النموذج َّ
مكتبة �س�هرة يف بايثون تخت�س بتعلُّم االآلة .توفر املكتبة جمموعة من االأدوات واخلوارزميات الأداء مهام متعددة ،مثل: حُتتوي على عمودين:
الت�سني�ف ،واالنح�دار ،والتجمي�ع ،وتقلي��س االأبع�اد .اإح�دى االأدوات املفي�دة يف مكتب�ة �س�كلرن ه�ي اأداة تُ�س�مى • ّ
ن�س التقييم.
،CountVectorizerومُيكن ا�ستخدامها يف تهيئة عملية املعاجلة ومتثيل البيانات الن�سية باملتَّجَ هات. • القيم َّ
(ال�سنف).
اأداة CountVectorizer
الربجمة األ اهية
(:) ec ori tion تُ�س��تخدم اأداة CountVectorizerيف حُتويل جمموعة من املُ�س��تنَدات الن�سية تقييم اإيجابي
اإىل م�سفوف��ة م��ن رم��وز متع��ددة ،حي��ث مُي ّث��ل ك ّل �س� ّ�ف م�س��تندً ا وكل عم��ود مُيثل
الربجم��ة االجتاهي��ة ه��ي عملي��ة حُتوي��ل خا�س��ا .ق��د تك��ون الرم��وز كلم��ات فردي��ة اأو عب��ارات اأو بُني��ات اأك��ر تعقي��دً ا
رم��زً ا ً
ال�سال�س��ل الن�سية املك َون��ة من الكلمات تقييم �سلبي
تقوم بالتقاط االأمناط املتعددة من البيانات الن�سية االأ�سا�سية .تُ�سر املُدخَ الت
اأو العب��ارات (الن���س) اإىل متَّجَ ��ه أي�س��ا
يف امل�سفوف��ة اإىل ع��دد م��رات ظه��ور الرم��ز يف كل م�س��تند .و ُيع��رف ذل��ك ا ً
متجان���س م��ن ا الأر ق��ام احلقيقي��ة با�س��م متثي��ل حقيب��ة الكلم��ات ( ،"bag-of-words" )BoWحي��ث يتجاه��ل القيمة 0متثل تقييمًا �سلبيًّا
ي�س��تخدم لرتمي��ز خ�سائ���س الن���س ترتي��ب الكلم��ات يف الن���س م��ع املحافظ��ة عل��ى تكراره��ا في��ه .على الرغ��م من اأن
با�س��تخدام تن�س��يق تفهم��ه خوارزمي��ات بينما القيمة 1متثل تقييمًا اإيجابيًّا.
متثي��ل حقيب��ة الكلم��ات ه��و تب�س��يط �س��ديد للغ��ة الب�س��رية ،اإال اأن��ه يحق��ق نتائ��ج �سكل :3.3جمموعة بيانات التدريب املُعنوَنة
تعلُّم االآلة. تناف�سية للغاية عند التطبيق العملي. اخلطوة التالية هي اإ�سناد اأعمدة الن�س والقيم اإىل متغرات م�ستقلة يف اأمثلة التدريب واالختبار املُمثّلة كمجموعة
حقيبة كلمات ن�سية متَّجَ هة
0 apples بيانات DataFrameكما يلي:
1 do
1 I
"?"I like oranges, do you like oranges 2 like
# extract the text from the 'text' column for both training and testing.
]'X_train_text=imdb_train_reviews['text
("اأنا اأحب الربتقال ،هل حُتب الربتقال؟") 2
1
oranges
you
]'X_test_text=imdb_test_reviews['text
ت�ستخدم الرموز Xو Yعاد ًة يف
فيعرب Xعن البيانات
التعلُّم املوجَّ ه ّ
�سكل :3.5متثيل حقيبة الكلمات ()bag-of-words # extract the labels from the 'label' column for both training and testing. املدخلة للتنبوؤ ،و Yعن القيم
]'Y_train=imdb_train_reviews['label امل�ستهدفة.
ي�ستخدم املقطع الربجمي التايل اأداة CountVectorizerلتمثيل جمموعة بيانات التدريب IMDbباملتَّجَ هات: ]'Y_test=imdb_test_reviews['label
X_train_text # training data in text format
from sklearn.feature_extraction.text import CountVectorizer
# 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
)array([1, 0], dtype=int64 MegaBytes of RAM memory used by the sparse format: 4.8e-05
139 138
يتنب�اأ خ��ط االأنابي��ب ب�س��كل �سحي��ح بالقيم��ة االإيجابي��ة وال�س��لبية للتقيمي��ني االأول والث��اين عل��ى الت��وايلُ .مُيك��ن ا�س��تخدام
%%capture
!pip install scikit-plot; # install the scikit-plot library, if it is missing.
الدال��ة املُ�س ّمن��ة () predict_probaلتحدي��د جمي��ع االحتم��االت الت��ي يقوم خط االأنابي��ب بتخ�سي�سها لكل واحدة من
import scikitplot; # import the library القيمتني املحتملتني .العن�سر االأول هو احتمال تعيني 0والعن�سر الثاين هو احتمال تعيني :1
class_names=['neg','pos'] # pick intuitive names for the 0 and 1 labels.
القيم prediction_pipeline_v1.predict_proba(['One of the best movies of the year. Ex
الحقيقية. cellent cast and very interesting plot.',
# plot the confusion matrix.
'I was very disappointed with his film.
(scikitplot.metrics.plot_confusion_matrix
)] 'I lost all interest after 30 minutes
[class_names[i] for i in Y_test],
[class_names[i] for i in predictions_v1],
title="Confusion Matrix", # title to use
القيم المُتوقَّعة. array([[0.08310769, 0.91689231],
cmap="Purples", # color palette to use
)]][0.83173475, 0.16826525
figsize=(5,5) # figure size
;)
التقييم الثاين التقييم االأول
حُتت��وي م�سفوف��ة الدق��ة عل��ى ع��دد الت�سنيف��ات احلقيقي��ة مقاب��ل املُتو َّقع��ة .يف ُمهِ َّم��ة الت�سني��ف الثنائي��ة (مث��ل :م�س�األة 16.8% 8.3%
احتواء قيمتني ،املوجودة يف ُمهِ َّمة � ،)IMDbستحتوي م�سفوفة الدقة على اأربع خاليا: النموذج يوؤكد بن�سبة 8.3%اأن التقييم االأول
�سلبي بينما يوؤكد بن�سبة 91.6%اأنه اإيجابي.
التنبوؤات ال�سالبة ال�سحيحة (اأعلى الي�سار): وبالمثل ،يوؤكد النموذج بن�سبة 83.1%اأن
التقييم الثاني �سلبي بينما يوؤكد بن�سبة 16.8%
ع��دد امل��رات الت��ي تنب �اأ فيه��ا املُ�س ِّن��ف باحل��االت 83.1% 91.6% اأنه اإيجابي.
ال�سالبة ب�سكل �سحيح.
�سلبي اإيجابي
التنبوؤات ال�سالبة اخلاطئة (اأعلى اليمني): �سكل ُ :3.7خمطَّ طان دائريان يو�سحان الن�سب املئوية للتقييمني
ع��دد امل��رات الت��ي تنب �اأ فيه��ا املُ�س ِّن��ف باحل��االت اخلط��وة التالي��ة ه��ي اختب��ار دق��ة خ��ط االأنابي��ب اجلدي��د يف ت�سني��ف التقييم��ات يف جمموع��ة بيان��ات اختب��ار .IMDb
ال�سالبة ب�سكل خاطئ. املُخرَج هو م�سفوفة ت�سمل جميع قيم نتائج ت�سنيف التقييمات الواردة يف بيانات االختبار:
التنبوؤات املوجبة اخلاطئة (اأ�سفل الي�سار): # use the pipeline to predict the labels of the testing data.
ع��دد امل��رات الت��ي تنب �اأ فيه��ا املُ�س ِّن��ف باحل��االت predictions_v1 = prediction_pipeline_v1.predict(X_test_text) # vectorize the text
املوجبة ب�سكل خاطئ. data, then predict.
�سكل :3.8نتائج م�سفوفة الدقة بتطبيق م�سنَّف بايز ال�ساذج على بيانات االختبار با�ستخدام جمموعة بيانات .IMDb توف�ر لغ�ة البايث�ون العدي�د م�ن االأدوات لتحلي�ل وت�سوي�ر نتائ�ج خط�وط اأنابي�ب الت�سني�ف .ت�س�مل االأمثل�ة دال�ة
() accuracy_scoreمن مكتبة �س�كلرن ومتثيل م�سفوفة الدقة ( )Confusion Matrixمن مكتبة �س�ايكيت بلوت
تُظه��ر النتائ��ج اأن��ه عل��ى الرغ��م م��ن اأن خ��ط االأنابي��ب ( ،)Scikit-Plotوهن�اك مقايي��س تقيي�م اأخ�رى مث�ل :الدق�ة ،واال�س�تدعاء ،والنوعية ،واحل�سا�س�ية ،ومقيا��س درجة ،F1
الدقة (:)Accuracy االأول يحق��ق دق��ة تناف�س��ية ت�س��ل اإىل ،84.68%اإال وفقًا حلالة اال�ستخدام التي مُيكن ح�سابها من م�سفوفة الدقة .املُخرَج التايل هو تقريب دقيق لدرجة التنبوؤ:
الدقة هي ن�سبة التنبوؤات ال�سحيحة اإىل اإجمايل عدد التنبوؤات. اأن��ه ال ي��زال ُيخط��ئ يف ت�سني��ف مئ��ات التقييم��ات.
(التنبوؤات املوجبة ال�سحيحة +التنبوؤات ال�سالبة ال�سحيحة) فهن��اك 331تن ّب �وؤًا غ��ر �سحي��ح يف الرب��ع االأمُي��ن from sklearn.metrics import accuracy_score
الدقة = العل��وي و 435تن ّب �وؤًا غ��ر �سحي��ح يف الرب��ع االأي�س��ر accuracy_score(Y_test, predictions_v1) # get the achieved accuracy.
(التنب�وؤات املوجب��ة ال�سحيح��ة +التنب�وؤات ال�س��البة ال�سحيح��ة
+التنبوؤات املوجبة اخلاطئة +التنبوؤات ال�سالبة اخلاطئة) ال�س��فلي .باإجم��ايل 766تن ّب �وؤً ا غ��ر �سحي��ح.
اخلطوة االأوىل نحو حُت�س��ني االأداء هي درا�س��ة �س��لوك 0.8468
الن�س
خط اأنابيب التنبوؤ ،ملعرفة كيف يقوم مبعاجلة ّ
141 وفهمه. 140
كما هو مُتوقَّع ،يقدم منوذج التنبوؤ تنبوؤًا �سلبيًا موؤكدً ا بدرجة كبرة يف هذا املثال الب�سيط. �سر مُتن ِّب ات ال�سندوق األأ�سود Explaining Black-Box Predictors
ي�س��تخدم م�س َّن��ف باي��ز ال�س��اذج ال�سي��غ الريا�سي��ة الب�س��يطة لتجمي��ع احتماالت اآالف الكلمات وتق ��دي� ��م تنبوؤاته��ا .وبالرغم من
# explain the prediction for this example.
exp = explainer_v1.explain_instance(easy_example.lower(), ب�س��اطة النم��وذج ،اإال اأن��ه ال ي��زال غ��ر ق��ادر عل��ى تق��دمي �س��رح ب�س��يط ومبا�س��ر لكيفي��ة قي��ام النم��وذج بتو ُّق��ع القيم��ة املوجب��ة اأو
prediction_pipeline_v1.predict_proba, ال�س��البة جل��زء حُم��دد م��ن الن���س .ق��ا ِرن ذلك مع ُم�سنِّفات �س��جرة القرار االأكر و�سوحً ا ،حيث يتم متثي��ل القواعد التي تعلمها
)num_features=10 النم��وذج يف الهي��كل ال�س��جري ،مم��ا ُي�س� ِّهل عل��ى االأ�س��خا�س فه��م كي��ف يق��وم املُ�س ِّن��ف بالتنب�وؤات .يتي��ح هي��كل ال�س��جرة كذل��ك
# print the words with the strongest influence on the prediction.
)(exp.as_list احل�س��ول عل��ى ت�س��ور مرئ��ي للق��رارات املُتخ��ذَّ ة يف كل فرع ،ممّ ا يكون مفيدً ا يف فهم العالقات بني اخل�سائ�س املُدخَ لة واملتغر
امل�ستهدف.
[('terrible', -0.07046118794796816), االفتق��ار اإىل ق��درة التف�س��ر متث��ل حُتد ًي��ا كب�رًا يف اخلوارزمي��ات االأك��ر تعقي��دً ا ،كتل��ك املُ�س��ت ِندة اإىل التجميع��ات مث��ل:
('horrible', -0.06841672591649835), توليف��ات م��ن اخلوارزمي��ات املتع��ددة اأو ال�س��بكات الع�سبي��ة .فب��دون الق��درة عل��ى التف�س��ر ،تتقل���س خوارزمي��ات التعلُّ��م
('boring', -0.05909016205135171), املوجه اإىل متنبئات ال�سندوق االأ�سود :على الرغم من اأنها تفهم الن�س ب�سكل ٍ
('plot', -0.024063095577996376),
كاف للتنبوؤ بالقيم ،اإال اأنها ال تزال غر َّ
('was', -0.014436071624747861), ق��ادرة عل��ى تف�س��ر كي��ف تق��وم باتخ��اذ القرار .اأجريت العديد م��ن االأبحاث للتغلب على هذه التحديات بت�سميم و�س��ائل
('movie', -0.011956911011210977), ق��ادرة عل��ى التف�س��ر ت�س��تطيع فه��م من��اذج ال�سن��دوق االأ�س��ود .واح��دة م��ن الو�س��ائل االأك��ر �س��هرة ه��ي النم��وذج املحاي��د
('actors', -0.011682594571408675),
('this', -0.009712387273986628),
املحلي القابل للتف�سر وال�سرح (.)Local Interpretable Model-Agnostic Explanations - LIME
('very', 0.008956707731803237),
])('were', -0.008897098392433257
النموذج املحايد املحلي القابل للتف�سري وال�سر
Local Interpretable Model- gnostic n tions - LIME
معامال في نموذج
ً الدرجة المقابلة لكل كلمة تمثل الخ�سائ�س الع�سرة النموذج املحايد املحلي القابل للتف�سر وال�سرح ( )LIMEهو طريقة لتف�سر التنبوؤات التي قامت بها مناذج ال�سندوق
االنحدار الخطي الب�سيط المُ�ستخدَ م لتقديم التف�سير. االأكثر تاأثيرًا. االأ�س��ود .وذل��ك م��ن خ��الل النظ��ر يف نقط��ة بيان��ات واح��دة يف وق��ت حُم��دد ،واإج��راء تغي��رات ب�س��يطة عليه��ا ملعرف��ة كيف
يوؤث��ر ذل��ك عل��ى ق��درة تنب�وؤ النم��وذج ،ث��م تُ�س��تخدم ه��ذه املعلومات لتدري��ب منوذج مفهوم وب�س��يط مثل االنح��دار اخلطي
على تف�س��ر هذه التنبوؤات .بالن�س��بة للبيانات الن�سية ،يقوم النموذج املحايد املحلي القابل للتف�س��ر وال�س��رح بالتع ّرف
مُيكن احل�سول على ت�سور مرئي اأكر دق ًة على النحو التايل: على الكلمات اأو العبارات التي لها االأثر االأكرب على القيام بالتنبوؤات.
يو�سح ذلك:وفيما يلي ،تطبيق بلغة البايثون ّ
# visualize the impact of the most influential words.
)(fig = exp.as_pyplot_figure %%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
"I personally thought the movie was pretty good, very good acting by
�سكل :3.11الكلمات التي اأثرت على القرار اخلاطئ 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
( beautifullyب�س��كل جمي��ل) ،و( greatرائ��ع) ،و( superbمده���س) ،اإال اأ ّن��ه ي ّتخ��ذ يف النهاي��ة ق��رارًا �س��لبيًا ا�س��تنادًا were beautifully shot, great effects, and a lot of sword play. Another
اإىل العدي��د م��ن الكلم��ات الت��ي يب��دو اأنه��ا ال تع��رب ب�س��كل وا�س��ح ع��ن امل�س��اعر ال�س��لبية مث��ل( Asano :اأ�س��انو) ،وAsian 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
(اآ�سيوي) ،و( movieفيلم) ،و( actingمتثيل). 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.
حد كبر. يو�سح كيف اأن حُت�سني هذا املنطق مُيكن اأن يطور من اأداء منوذج التن ُّبوؤ اإىل ٍ املُقدمة .الق�سم التايل ّ
145 144
• \wتتطابق مع كل الرموز االأبجدية الرقمية ( )0-9، A-Z، a-zوال�سَ رطة ال�سفلية. �سن الربجمة األ اهية للن�سو�ض
hello123_world • \w+تُ�س �تَخدم للبح��ث ع��ن واح��د اأو اأك��ر م��ن رم��وز .\wلذل��ك ،يف ال�سل�س��لة الن�سي��ة
(مرحبًا _123العامل) ،النمط � \w+سيتطابق مع الكلمات ( helloمرحبًا) و 123و( worldالعامل). Improving Text ec ori tion
• \bمتث��ل الفا�س��ل ( )boundryب��ني رم��ز \wورم��ز لي���س ، \wوكذل��ك يف بداي��ة اأو نهاي��ة ال�سل�س��لة الن�سي��ة املُعط��اة .عل��ى ا�س��تخدم االإ�س��دار االأول خل��ط اأنابي��ب التنب �وؤ اأداة CountVectorizer
التعبري النمطي (:)Regular Expression حل�س��اب ع��دد امل��رات الت��ي تظه��ر فيه��ا كل كلم��ة يف كل تقيي��م .تتجاه��ل ه��ذه
�س��بيل املث��ال� :س��وف يتطاب��ق النم��ط \bcat\bم��ع الكلم��ة ( catالقط��ة) يف ال�سل�س��لة الن�سي��ة (The cat is cuteالقط��ة
لطيف��ة) ،ولكن��ه ل��ن يتطاب��ق م��ع الكلم��ة ( catالقط��ة) يف ال�سل�س��لة الن�سي��ة ( The category is petsفئ��ة احليوان��ات التعب��ر النمط��ي ه��و من��ط ن���س ُي�س��تخدَ م ملطابقة املنهجية حقيقتني اأ�سا�سيتني حول اللغات الب�سرية:
االأليفة). وملعاجل��ة �سال�س��ل الن�سو���س وتق��دمي طريق��ة • قد يتغر معنى الكلمة واأهميّتها ح�سب الكلمات املُ�ستخدَ مة معها.
موج��زة ومرن��ة لتحدي��د اأمن��اط الن�سو���س ،كم��ا • تك��رار الكلم��ة يف املُ�س��تنَد ال ُيع� ُّد دومً ��ا متثي� ً�ال دقيقًا الأهميّتها .على �س��بيل
مثاال على التق�سيم با�ستخدام الدالة ().tokenize_doc اأدناه ً تُ�س�تَخدم عل��ى نط��اق وا�س��ع يف معاجل��ة الن�سو���س املث��ال ،عل��ى الرغ��م م��ن اأن تك��رار كلم��ة ( greatرائ��ع) مرت��ني ق��د مُيث��ل
'raw_text='The movie was too long. I fell asleep after the first 2 hours.
وحُتليل البيانات. موؤ�س�رًا اإيجاب ًي��ا يف م�س��تند يحت��وي عل��ى 100كلم��ة ،اإال اأن��ه مُيث��ل موؤ�س�رًا
)tokenized_sentences=tokenize_doc(raw_text
tokenized_sentences
اأقل اأهمية بكثر يف م�ستند يحتوي على 1000كلمة.
�سي�س��رح ه��ذا اجل��زء كيفي��ة حُت�س��ني الربجم��ة االجتاهي��ة للن�سو���س الأخ��ذ هات��ني احلقيقت��ني يف عني االعتب��ار .ي�س��تدعي املقطع
[['the', 'movie', 'was', 'too', 'long'], الربجمي التايل ثالثة مكتبات خمتلفة بلغة البايثون� ،س ُت�ستخدم لتحقيق ذلك:
]]'['i', 'fell', 'asleep', 'after', 'the', 'first', '2', 'hours
• nltkو جين�سم ( :)Gensimتُ�ستَخدم هاتان املكتبتان ال�سّ هرتان يف مهام معاجلة اللغات الطبيعية املُتنوّعة.
مُيكن االآن جتميع الدالة () tokenize_docمع اأداة العبارات من مكتبة جين�سم ( )Gensimالإن�ساء منوذج العبارة، • :reتُ�ستَخدم هذه املكتبة يف البحث عن النّ�سو�س ،ومعاجلتها با�ستخدام التعبرات النمطية.
وه��و من��وذج مُيكن��ه التع�رّف عل��ى العب��ارات املكون��ة م��ن ع��دة كلم��ات يف جمل��ة معط��اة .ي�س��تخدم املقطع الربجم��ي التايل
بيانات التدريب IMDBاخلا�سة ب� ( )X_train_textلبناء مثل هذا النموذج: %%capture
for doc in X_train_text: # for each doc in this dataset import nltk # import nltk
sentences+=tokenize_doc(doc) # get the list of tokenized sentences in this doc nltk.download('punkt') # install nltk's tokenization tool, used to split a text into sentences.
# build a phrase model on the given data import re # import re
imdb_phrase_model = Phrases(sentences, 1
connector_words=ENGLISH_CONNECTOR_WORDS, 2 from gensim.models.phrases import Phrases, ENGLISH_CONNECTOR_WORDS # import tools
scoring='npmi', 3 from the gensim library.
threshold=0.25).freeze() 4
كما هو مو�سح باالأعلى ،ت�ستقبل الدالة () Phrasesاأربعة متغرات: ديد العبارات e ecting Phrases
التق�سيم (:) o eni tion
ُق�سمة من جمموعة الن�سو�س املُعطاة. 1قائمة ا ُ
جلمل امل َّ مُيك��ن ا�س��تخدام الدال��ة االآتي��ة لتق�س��يم م�س��تند حُم��دد
يق�س��د ب��ه :عملي��ة تق�س��يم البيان��ات الن�سي��ة اإىل اأج��زاء مث��ل ُق�س��مة ،حي��ث مُيك��ن متثي��ل كل
2قائمة بالكلمات االإجنليزية ال�سائعة التي تظهر ب�سورة متكررة يف العبارات (مثل ،the :و ،)ofولي�س لها اأي قيمة موجبة وجمل ،ورموز ،وعنا�سر اأخرى يطلق عليها الرموز. كلماتُ ، جلم��ل امل َّ
اإىل قائم��ة م��ن ا ُ
اأو �سالبة ،ولكن مُيكنها اإ�سفاء امل�ساعر ح�سب ال�سياق ،ولذلك يتم التعامل معها ب�سورة خمتلفة. ق�سمة بقائمة من الكلمات: جملة ُم َّ
3تُ�ستَخدم دالة ت�سجيل النقاط لتحديد ما اإذا كان ت�سمني جمموعة من الكلمات يف العبارة نف�سها واجبًا .املقطع الربجمي دالة () sent_tokenizeتُق�سِّ م
باالأعلى َي�ستخدم مقيا�س املعلومات النقطية امل�سرتكة امل ُعايَر ()Normalized Pointwise Mutual Information - NPMI # convert a given doc to a list of tokenized sentences.
def tokenize_doc(doc:str):
الجمل. المُ�ستنَد اإلى قائمة من ُ
له��ذا الغر���س .ي�س��تند ه��ذا املقيا���س عل��ى تك��رار ت��وارد الكلم��ات يف العب��ارة املُر�س��حة وتك��ون قيمت��ه ب��ني -1و يرم��ز اإىل return [re.findall(r'\b\w+\b',
اال�ستقاللية الكاملة ( ،)Complete Independenceو +1ويرمز اإىل التوارد الكامل (.)Complete Co-occurrence ])sent.lower()) for sent in nltk.sent_tokenize(doc
4يف ح��دود دال��ة ت�س��جيل النق��اط يت��م جتاه��ل العب��ارات ذات النق��اط ا أالق��ل .وم��ن الناحي��ة العملي��ة ،مُيك��ن �سبط ه��ذه احلدود دالة () sent_tokenizeمن مكتبة nltkتُق�سِّ م املُ�ستنَد اإىل قائمة من اجلُمل.
لتحديد القيمة التي تُعطي اأف�سل النتائج يف التطبيقات النهائية مثل :النمذجة التنبوؤية. بع��د ذل��ك ،يت��م كتاب��ة كل جمل��ة باأح��رف �سغ��رة وتغذيته��ا اإىل دال��ة () findallم��ن مكتب��ة reلتق��وم بتحدي��د تك��رارات
ُحُتوِّل دالة () freezeمنوذج العبارة اإىل تن�سيق غر قابل للتغير اأي ُجممّد ( )Frozenلكنّه اأكر �سرعة. التعبرات النمطية '� .'\b\w+\bستختربها على ال�سل�سلة الن�سية املوجودة يف متغر . raw_textيف هذا ال�سياق:
147 146
: �س ُيحقق منوذج العبارة النتائج التالية،عند تطبيقها على اجلملتني املُق�سَّ متني باملثال املُو�سح باالأعلى
# an example of an annotated document from the imdb training data
X_train_text_annotated[0]
imdb_phrase_model[tokenized_sentences[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 ['the', 'movie', 'was', 'too_long']
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 imdb_phrase_model[tokenized_sentences[1]]
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 ['i', 'fell_asleep', 'after', 'the', 'first', '2_hours']
acceptable but replacing marionettes with homo_sapiens subsp sapiens was a huge error
of judgment'
،) (طوي��ل ج��دً اtoo_long (�س��قط نائ ًم��ا) وfell_asleep :يح��دِّ د من��وذج العب��ارة ثالث��ة عب��ارات عل��ى النح��و الت��ايل
.�ساعة) وجميعها حُتمل معلومات اأكر من كلماتها املفردة-2( 2_hoursو
تكرار امل�ستند العك�سي- تكرار امل�سطل تكرار املُ�ستنَد- ا�ستخدام مقيا�ض تكرار امل�سطل
Term Frequency Inverse Document العك�س�ي يف الربجم�ة األ اهي�ة للن�سو��ض �سلبي
مُق�سَّ م
ُحمايد ُحمايد (طوي��لtoo_long حُتم��ل عب��ارة،عل��ى �س��بيل املث��ال
Frequency )TF-IDF( too_long long too عل��ى الرغ��م م��ن اأن،ج��دً ا) م�س��اعر �س��لبية وا�سح��ة
Using TF-IDF for Text Vec ori tion
تك��رار املُ�س��تنَد العك�س��ي ه��و-تك��رار امل�سطل��ح الطريقة املُثلى.متثيال دقيقًا الأهميتها ً تكرار الكلمة يف املُ�ستنَد ال ُيع ُّد دومً ا �سلبي �سلبي (طوي��ل) ال تع��ربان ع��ن ال�سياقlong (ج��دً ا) وtoo كلمت��ي
.طريقة تُ�ستخدم لتحديد اأهمية الرموز يف املُ�ستنَد fell_asleep
مُق�سَّ م asleep fell فعل��ى الرغ��م م��ن اأن كلم��ة، وباملث��ل،ذل��ك منفردت��ني
تك��رار امل ُ�س��تنَد- لتمثي��ل التك��رار ه��ي املقيا���س ال�س��هر لتك��رار امل�سطل��ح ، (نائ��م) يف مراجع��ة الفيل��م متثل داللة �س��لبيةasleep
ي�ستخدم هذا املقيا�س �سيغة ريا�سية ب�سيطة لتحديد.)TF-IDF( العك�سي ال�سياق امل ُحدد ال�سياق (�س��قط نائ ًم��ا) تو�س��ل ر�س��الة ال�سياقfell_asleep فالعب��ارة
)Corpus( الن�سي
ّ االأ�سل : الكلمات اأو العبارات يف املُ�ستنَد بنا ًء على عاملني:اأهمية الرموز مثل م َُّق�س
م
2_hours hours 2 2_hours ت�س��تنبط م��ن، و اأ خ �رًا.اأ ك��ر و�سوحً ��ا
بقيا���س عدد مرات ظهوره يف املُ�س��تنَد مق�سومً ا،• تكرار الرمز يف املُ�س��تنَد امل�ساعر االإيجابية وال�سلبية قبل التق�سيم وبعده:3.12 �سكل 2 �س��اعة) �س��ياقًا اأك��ر حُتدي��دً ا م��ن الكلمت��ني-2(
.على اإجمايل عدد الرموز يف جميع املُ�ستنَدات . كلٍّ على حدةhoursو
املح�سوب بق�سمة اإجمايل عدد املُ�ستنَدات،• تكرار املُ�ستنَد العك�سي للرمز :ت�ستخدم الدالة التالية اإمكانية حُتديد العبارات بهذا ال�سكل لتف�سر العبارات يف وثيقة مُعطاه
.يف جمموعة البيانات على عدد املُ�ستنَدات التي حُتتوي على الرمز
امل ُ�ستنَد الكلمة امل�سطلح def annotate_phrases(doc:str, phrase_model):
الكلمات وامل�سطلحات الواردة يف امل�ستند:3.13 �سكل
العام��ل االأول يتجن��ب املبالغ��ة يف تقدي��ر اأهمي��ة امل�سطلح��ات الت��ي تظه��ر يف
اأ ّم��ا العام��ل الث��اين في�س��تبعد امل�سطلح��ات الت��ي تظه��ر يف،الوثائ��ق االأط��ول sentences=tokenize_doc(doc)# split the document into tokenized sentences.
الن�سي
ّ عدد امل ُ�ستنَدات يف االأ�سل مما ي�س��اعد على اإثبات حقيقة اأن بع�س الكلمات هي،كث ٍر من املُ�س��تنَدات
تكرار امل ُ�ستنَد العك�سي
عدد امل ُ�ستنَدات التي حتتوي على امل�سطلح 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]
ec ori er اأداة return ' '.join(tokens) # join all the tokens together to create a new annotated document.
تك��رار امل ُ�س��تنَد-) اأداة تدع��م ه��ذا الن��وع م��ن الربجم��ة االجتاهي��ة لتك��رار امل�سطلحSklearn( توف��ر مكتب��ة �س��كلرن لتف�س��ر كلٍ م��ن تقييم��ات التدري��ب واالختب��ار م��نannotate_phrases)( ي�س��تخدم املقط��ع الربجم��ي الت��ايل دال��ة
. لتمثيل عبارة با�ستخدام املتَّجهاتTfidfVectorizer مُيكن ا�ستخدام اأداة.)TF-IDF( العك�سي .IMDb جمموعة بيانات
from sklearn.feature_extraction.text import TfidfVectorizer # annotate all the test and train reviews.
# Train a TF-IDF model with the IMDb training dataset X_train_text_annotated=[annotate_phrases(doc,imdb_phrase_model) for doc in X_
vectorizer_tf = TfidfVectorizer(min_df=10) train_text]
vectorizer_tf.fit(X_train_text_annotated) X_test_text_annotated=[annotate_phrases(text,imdb_phrase_model)for text in X_
X_train_tf = vectorizer_tf.transform(X_train_text_annotated) test_text]
149 148
يَ�س��تخدم املقط��ع الربجم��ي الت��ايل مُف�سِّ ��ر.يتنب�اأ خ��ط االأنابي��ب اجلدي��د ب�س��كل �سحي��ح بالقيم��ة االإيجابي��ة له��ذا التقيي��م مُيك��ن االآن اإدخ��ال اأداة التمثي��ل باملتَّجَ ه��ات يف مُ�س َّن��ف باي��ز ال�س��اذج لبن��اء خ��ط اأنابيب منوذج تن ُّبوؤ جدي��د وتطبيقه على
:) لتف�سر املنطق وراء هذا التنبوؤLIME( النموذج املحايد املحلي القابل للتف�سر وال�سرح :IMDb بيانات اختبار
# create an explainer. # train a new Naive Bayes Classifier on the newly vectorized data.
explainer_tf = LimeTextExplainer(class_names=class_names) model_tf =MultinomialNB()
model_tf.fit(X_train_v2, Y_train)
# explain the prediction of the second pipeline for this example.
exp = explainer_tf.explain_instance(mistake_example_annotated, prediction_ # create a new prediction pipeline.
pipeline_tf.predict_proba, num_features=10) prediction_pipeline_tf = make_pipeline(vectorizer_tf, model_tf)
0.8858
print('\nReview:',mistake_example_annotated)
فه��و ُيح��دد ب�س��كل �سحي��ح امل�س��اعر االإيجابي��ة للعبارات.توؤك��د النتائ��ج اأن خ��ط االأنابي��ب اجلدي��د يتب��ع منط ًق��ا اأك��ر ذكا ًء Review: i_personally thought the movie was_pretty good very_good acting by tadanobu_
وال،) (جي��د ج��دً اvery good و،) (متثيل_رائ��عsuperb_acting و،) (لقط��ة _ جميل��ةbeautifully_shot :مث��ل 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
151 150
4لدي��ك X_train_textوه��ي عب��ارة ع��ن م�سفوف��ة numPyتت�سم��ن م�س��تندًا واح �دًا يف كل �س��ف .لدي��ك كذل��ك
مترينات
م�سفوف��ة ثاني��ة Y_trainتت�سم��ن قي��م امل ُ�س��تنَدات يف .X_train_textاأكم��ل املقط��ع الربجم��ي الت��ا بحي��ث مُيك��ن
ا�س��تخدام تك��رار امل�سطل��ح -تك��رار امل ُ�س��تنَد العك�س��ي ( )TF-IDFلتمثي��ل البيان��ات باملتَّجَ ه��ات ،وتدري��ب ��وذج ت�سني��ف 1
MultinomialNBعل��ى االإ�س��دار امل ُ َم َّث��ل باملتَّجَ ه��ات ،ث��م مي��ع اأداة التمثي��ل باملتَّجَ ه��ات و ��وذج الت�سني��ف يف خ��ط
اأنابيب تنبوؤ واحد: خاطئة �سحيحة حدِّد اجلملة ال�سحيحة واجلملة اخلاطئة فيما يلي:
.1يف التعلُّم املوجَّ ه ،تُ�ستخدم جمموعات البيانات املُعنوَنة لتدريب النموذج.
from .naive_bayes import MultinomialNB
from sklearn.pipeline import make_pipeline
.2الربجمة االجتاهية هي تقنية لتحويل البيانات من تن�سيق متَّجَ ه رقمي اإىل بيانات اأولية.
from sklearn.feature_extraction.text import .3تتطلب امل�سفوفة املتباعدة ذاكرة اأقل بكثر من امل�سفوفة الكثيفة.
= vectorizer )(min_df=10
.4تُ�ستخدم خوارزمية مُ�سنَّف بايز ال�ساذج لبناء خط اأنابيب التنبوؤ.
(vectorizer.fit ) # fits the vectorizer on the training data
.5تكرار الكلمة يف املُ�ستنَد يُع ُّد التمثيل الدقيق الوحيد الأهمية هذه الكلمة.
X_train = vectorizer. (X_train_text) # uses the fitted vectorizer to vectorize the data
model_MNB=MultinomialNB() # a Naive Bayes Classifier
model_MNB.fit(X_train, ) # fits the classifier on the vectorized training data 2ا�سرح ملاذا تتطلب امل�سفوفة الكثيفة م�ساحة من الذاكرة اأكرب من امل�سفوفة املتباعدة.
(prediction_pipeline = make_pipeline , )
5اأكم��ل املقط��ع الربجم��ي الت��ا بحي��ث مُيكن��ه ِبن��اء مُف�سِّ ��ر ن�سو���س النم��وذج املحاي��د املحل��ي القاب��ل للتف�س��ر وال�س��رح
( )LIMEخلط اأنابيب التنب ؤو الذي قمت ببنائه يف التدريب ال�سابق ،وا�ستخدِ م امل ُف�سِّ ر لتف�سر التنب ؤو على مثال ٍ
لن�س
اآخر.
from import LimeTextExplainer 3ح ِّل��ل كي��ف يُ�س��تخدَم العام��الن الرّيا�س ّي��ان يف تك��رار امل�سطل��ح -تك��رار امل ُ�س��تنَد العك�س��ي ( )TF-IDFلتحدي��د اأهمي��ة
"text_example="I really enjoyed this movie, the actors were excellent الكلمة يف الن�س.
class_names=['neg','pos'] # creates a local explainer for explaining individual predictions
print(exp. ) # prints the words with the highest influence on the prediction
153 152
املوجه هي اأنه مُيكن ا�س��تخدامهواإحدى املزايا الرئي�س��ة ال�س��تخدام التعلُّم غر َّ
العنقود (:)Cluster للك�س��ف ع��ن االأمن��اط والعالق��ات الت��ي ق��د ال تب��دو وا�سح��ة على الف��ور للمراقب الدر�ض الثاين
العنق��ود ه��و جمموع��ة من االأ�س��ياء
املت�س��ابهة .ويف تعلُّ��م االآل��ة ،ي�س��ر
الب�س��ري .وق��د يك��ون ه��ذا مفي��دً ا ب�س��كل خا���س يف فه��م جمموع��ات البيان��ات
الكب��رة املكون��ة م��ن الن�سو���س غ��ر املُرتاكبة ،حيث يكون التحلي��ل اليدوي غر
املوجه
التع ُّلم غري َّ
التجمي��ع ( )Clusteringاإىل عملي .يف هذه الوحدة� ،ستَ�ستخدم جمموعة بيانات متوافرة للعا ّمة من املقاالت
عملي��ة جتمي��ع البيا ن��ات غ��ر االإخبارية من هيئة االإذاعة الربيطانية ( )BBCبوا�سطة جرين وكوننجهام،
املُعنوَنة يف عناقيد متجان�سة. ()Greene & Cunningham،2006لتو�سي��ح بع���س التقني��ات الرئي�س��ة ا�ستخدام التعلُّم غري املوجَّ ه لفهم الن�سو�ض
املوجهُ .ي�ستخدم املقطع الربجمي التايل لتحميل جمموعة البيانات، للتعلُّم غر َّ
املُنظّ مة يف خم�س��ة جملدات اإخبارية خمتلفة متثل مقاالت من اأق�س��ام اإخبارية Unsupervised Learning to Understand Text
خمتلف��ة ،ه��ي :االأعم��ال التجاري��ة ،وال�سيا�س��ة ،والريا�س��ة ،والتقني��ة ،والرتفي��ه. قدم له جمموع��ة من االأمثل��ة التي يتوىل املوج��ه ه��و ن��وع م��ن تعلُّ��م االآل��ة ،ي�س��تخدم في��ه النم��وذج بيان��ات غ��ر ُمعَنونة ،حي� ُ�ث ُي ِّ
التعلُّ��م غ��ر َّ
ُ�ستخدمة يف هذه
لن ت�ستخدم القيم اخلم�سة يف توجيه اأيٍ من اخلوارزميات امل َ املوجه يف حُتديدالبحث فيها عن االأمناط والعالقات بني البيانات من تلقاء نف�سه .ويف �سياق فهم الن�س ،مُيكن ا�ستخدام التعلُّم غر َّ
�دال م��ن ذل��ك� ،س ُت�س��تخدم فق��ط الأغرا���س الت�سوي��ر وامل�سادق��ة. الوح��دة .وب� ً الهي��اكل واالأمن��اط الكامن��ة �سم��ن جمموع��ة بيانات املُ�س��تنَدات الن�سية .هناك العديد من التقنيات املختلفة التي مُيكن ا�س��تخدامها يف
يت�سم��ن كل جمل��د اإخب��اري مئ��ات امللف��ات الن�سي��ة ،وكل مل��ف يت�سم��ن حُمت��وى املوج��ه للبيان��ات الن�سي��ة ،مب��ا يف ذل��ك خوارزمي��ات التجمي��ع ( ،)Clustering Algorithmsوتقني��ات تقلي���س االأبع��اد التعلُّ��م غ��ر َّ
مقالة واحدة حُمددة .وقد ُحملّت جمموعة البيانات بالفعل اإىل مفكرة جوبيرت ( ،)Dimensionality Reduction Techniquesوالنماذج التوليدية (ُ .)Generative Modelsت�س��تخدم خوارزميات التجميع
( )Jupyter Notebookو�س��تقوم لبنة التعليمات الربجمية بفتح وا�س��تخراج ل�سم املُ�ستنَدات املت�سابهة معًا ،بينما تُ�ستخدم تقنيات تقلي�س االأبعاد لتقلي�س اأبعاد
كل املُ�ستنَدات والقيم املطلوبة يف تركيبتني لبيانات القوائم ،على التوايل. التعلُّم غري املوجَّ ه البيانات وحُتديد اخل�سائ�س الهامة .ومن ناحية اأخرى ،تُ�ستخدم النماذج التوليدية
�سكل :3.16متثيل عنقود
(:)Unsupervised Learning لتعلُّم التوزيع االأ�سا�سي للبيانات وتوليد ن�س جديد م�سابه ملجموعة البيانات االأ�سلية.
املوج��هُ ،ي��زوَّد النم��وذج
َّ �ر � غ �م�ُّ ل التع يف
BBC open dataset بكمي��ات كب��رة من البيانات غر املُعنوَنة Clustering Algorithms
https: www.kaggle.com datasets shivamkushwaha bbc-full-text-document-classification ويتوج��ب علي��ه البح��ث ع��ن االأمن��اط يف مُيكن خلوارزميات التجميع جتميع العمالء املت�سابهني ا�ستنادًا اإىل ال�سلوكيات
D. Greene and P. Cunningham. "Practical Solutions to the Problem of Diagonal Dominance in Kernel Document Clustering",Proc.
ICML 2006. All rights, including copyright, in the content of the original articles are owned by the BBC. البيا ن��ات غ��ر ا ملُرتاكب��ة م��ن خ��الل �تهدف وزي��ادة
اأو الدمُيوغرافي��ا ،اأو �س��جل امل�س��رتيات؛ الأغرا���س الت�س��ويق املُ�س� َ
املالحظة والتجميع. معدالت االحتفاظ بالعمالء.
# used to list all the files and subfolders in a given folder تقنيات تقلي�ض األأبعاد
from os import listdir i ension i e uction ec ni ues
# used for generating random number
تقلي�ض األأبعاد
تُ�س��تخدم تقني��ات تقلي���س االأبع��اد يف �سغ��ط ال�س��ورة لتقلي��ل ع��دد وح��دات
import random shuffling lists (:)Dimensionality e uction البيك�س��ل فيه��ا مم��ا ي�س��اعد عل��ى تقلي���س حج��م البيانات الالزم��ة لتمثيلها مع
تقني��ة تقلي�س االأبع��اد هي اإحدى تقنيات احلفاظ على خ�سائ�سها الرئي�سة.
bbc_docs=[] # holds the text of the articles
bbc_labels=[] # holds the news section for each article
تعلُّ��م االآل��ة وحُتلي��ل البيان��ات املُ�س��تخدَ مة
ener ti e النماذج التوليدية o e s
لتقلي���س ع��دد اخل�سائ���س (االأبع��اد)
for folder in listdir('bbc'): # for each news-section folder يف جمموع��ة البيان��ات م��ع االحتف��اظ تُ�س��تخدم النماذج التوليدية يف تطبيقات الك�س��ف عن االختالف؛ حيث ُحُتدِّ د
for file in listdir('bbc/'+folder): # for each text file in this folder باأكرب قدر ممكن من املعلومات. االختالفات يف البيانات بتعلُّم االأمناط الطبيعية للبيانات با�ستخدام النموذج
التوليدي.
# 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.
�سكل :3.15متثيل التعلُّم غر املوجَّ ه
155 154
يف التعلُّ��م غ��ر املوجَّ ��ه ،ي�س��ر ع��دد العناقي��د اإىل ع��دد املجموع��ات اأو ميع املُ�ستنَدات Document Clustering
الت ميع الهرمي الت�سنيف��ات الت��ي تنق�س��م اإليه��ا البيان��ات بوا�س��طة اخلوارزمي��ة .و ُيع� ُّد ميع املُ�ستنَدات
(:)Hierarchical Clustering حُتدي��د ع��دد العناقي��د ال�سحي��ح اأمرًا مه ًم��ا الأنه يوؤثر عل��ى دقة النتائج (:)Document Clustering االآن بع��د حُتمي��ل جمموع��ة البيان��ات ف�اإن اخلط��وة التالي��ة ه��ي جترب��ة ع��دة ط��رق غ��ر
التجمي��ع الهرم��ي ه��و خوارزمي��ة التجمي��ع املُ�س��تخدَ مة
وقابليتها للتف�سر .اإذا كان عدد العناقيد كبرًا للغاية ،فاإنّ املجموعات املوجه ��ة االأك ��ر �س ��هرة يف ه ��ذا
موجه ��ة ،ومنه ��ا :التجمي ��ع ال ��ذي ُيع � ّد الطريق ��ة غ ��ر َّ َّ
جتمي��ع املُ�س��تنَدات هو طريقة تُ�س��تخدم النط ��اق .وبال ّنظ ��ر اإىل جمموع ��ة م ��ن املُ�س ��تنَدات غ ��ر املُعن َون ��ة� ،س ��يكون اله ��دف ه ��و
لتجمي��ع البيان��ات يف عناقي��د بن��ا ًء عل��ى الت�س��ابه .يف
�س��تكون حُم� ّدد ًة ج��دً ا وب��دون معن��ى .يف ح��ني اأنه اإذا كان ع��دد العناقيد لتجمي��ع املُ�س��تنَدات الن�س ّي��ة يف عناقيد
التجميع الهرمي ،تُنظّ م نقاط البيانات يف تركيب ي�سبه منخف� ًس��ا للغاي��ة ،ف �اإنّ املجموع��ات �س��تكون ممت��دة عل��ى نط��اق وا�س��ع جتميع الوثائق املت�س��ابهة معًا ،ويف الوقت نف�س��ه الف�سل بني الوثائق غر املت�س��ابهة.
بنا ًء على ت�سابه حُمتواها.
جدً ا ،ولن ت�ستنبط الرتكيب االأ�سا�سي للبيانات .من ال�سروري حُتقيق
ال�س��جرة ،حي��ث تك��ون كل ُعق��دة مبثاب��ة عنق��ود ،وتك��ون
العُقدة االأم هي نقطة التقاء ال ُعقد املتفرعة منها. كاف من العناقيد ال�ستنباط اأمناط ذات معنى، عدد ٍ التوازن بني توفر ٍ جدول :3.2العوامل التي ُ دد جودة النتائج
واأال تك��ون كث��رة يف الوق��ت نف�س��ه بالق��در ال��ذي يجع��ل النتائ��ج ُمعق��دة
للغاية وغر مفهومة. طريقة متثيل البيانات باملتَّجَ هات .على الرغم من اأن تقنية تكرار امل�سطلح -تكرار امل ُ�ستنَد العك�سي ( )TF-IDFاأثبتت 1
كفاءتها وفعاليتها يف هذا املجال ،اإال اأنّك �ستتعرف يف هذه الوحدة على مزيد من البدائل االأكر تطورًا وتعقيدً ا.
ُي�ستخدَ م املقطع الربجمي التايل ال�ستراد مكتبات حُمددة تُ�ستخدَ م يف التجميع الهرمي من بدايته حتى نهايته:
التعري��ف الدقي��ق للت�س��ابه ب��ني م�س��تند واآخ��ر .بالن�س��بة للبيان��ات الن�س ّي��ة املُمثل��ة باملتَّجَ ه��ات ،تك��ون مقايي���س امل�س��افة 2
# used for tfi-df vectorization, as seen in the previous unit االإقليدية وجيب التمام هما االأكر �سيوعً ا� .س ُي�ستخدم االأول يف االأمثلة امل�سروحة يف هذه الوحدة.
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import AgglomerativeClustering # used for agglomerative clustering
ع��دد العناقي��د امل ُخت��ارة .يوف��ر التجمي��ع التكتل��ي ( )Agglomerative Clustering - ACطريق��ة وا�سح��ة لتحدي��د 3
العدد املنا�سب من العناقيد �سمن جمموعة حُمددة من البيانات ،وهو التحدي الرئي�س الذي يواجه مهام التجميع.
# used to visualize and support hierarchical clustering tasks
import scipy.cluster.hierarchy as hierarchy ديد عدد العناقيد
# set the color palette to be used by the 'hierarchy' tool. Se ecting the Number of Clusters
hierarchy.set_link_color_palette امل�سافة األإقليدية حُتدي��د الع��دد ال�سحي��ح للعناقي��د ه��و خط��وة �سروري��ة �سم��ن مه��ام التجمي��ع.
)]'(['blue','green','red','yellow','brown','purple','orange','pink','black (:)Euclidean Distance لالأ�س��ف ،تعتم��د الغالبي��ة العظم��ى م��ن خوارزمي��ات التجمي��ع على املُ�س��تخدِ م يف
import matplotlib.pyplot as plt # used for general visualizations
امل�س��افة االإقليدي��ة ه��ي م�س��افة اخلط امل�س��تقيم حُتدي��د ع��دد العناقي��د ال�سحيح��ة �سم��ن املُدخَ ��الت .رمب��ا يك��ون للع��دد املح��دد
ب��ني نقطت��ني يف ف�س��اء متعدد االأبعادُ .وحُت�س��ب تاأث�رًا كب�رًا عل��ى ج��ودة النتائ��ج وقابليته��ا للتف�س��ر ،ولك��ن هن��اك العدي��د م��ن
باجل��ذر الرتبيع��ي ملجم��وع مربع��ات الفروق��ات املقايي�س اأو املوؤ�سرات التي مُيكن ا�ستخدامها لتحديد عدد العناقيد.
الربجمة األ اهية للن�سو�ض Text ec ori tion بني االأبعاد املناظرة للنقاطُ .ت�س��تخدم امل�سافة
يل باملتَّجَ هات يف تن�سيق رقميّ ،كما ّمت عر�سه يف الوحدة ال�سابقة،
الن�س االأو ّ
املوجه متثيل ّ
تتطلب العديد من طرق التعلُّم غر َّ • اإحدى الطرائق ال�سائعة هي ا�ستخدام مقيا�س الرتا�س (.)Compactness
االإقليدي��ة يف التجمي��ع لقيا���س الت�س��ابه ب��ني مُيكن القيام بذلك عن طريق ح�ساب جمموع امل�سافات بني النقاط �سمن كل
وي�ستخدم املقطع الربجمي التايل اأداة TfidfVectorizerالتي اُ�ستخدمت يف الدر�س ال�سابق لهذا الغر�س: نقطتي بيانات. عنقود ،وحُتديد عدد العناقيد الذي يقلل من هذا املجموع اإىل احلد االأدنى.
• هن��اك طريق��ة اأخ��رى تتلخ���س يف مقيا���س الف�س��ل ( )Separationب��ني
vectorizer = TfidfVectorizer(min_df=10) # apply tf-idf vectorization, ignore words that م�سافة جيب التمام العناقيد ،مثل متو�سط امل�سافة بني النقاط يف العناقيد املختلفة،وبناء عليه،
appear in more than 10 docs. (:)Cosine Distance يتم حُتديد عدد العناقيد الذي يرفع من هذا املتو�سط.
text_tfidf=vectorizer.fit_transform(bbc_docs) # fit and transform in one line ت�س��تخدم م�س��افة جي��ب التمام لقيا���س الت�س��ابه وب�س��كل عمل��ي ،غال ًب��ا م��ا تتعار���س املنهجي��ات املذك��ورة باالأعل��ى م��ع بع�سه��ا من
يف جي��ب التم��ام ب��ني نقطت��ي البيان��ات .فه��ي حي��ث التو�سي��ة باأرق��ام خمتلف��ة ،ومُي ّث��ل ه��ذا حُت ّد ًي��ا م�س��رتكًا عن��د التعام��ل م��ع
text_tfidf حُت�سب جيب متام الزاوية بني م َّت َجهني مُيثالن البيانات الن�سية ب�سكلٍ خا�س ،فعاد ًة ما ي�س ُعب متييز تركيبها.
�تخدم ع��اد ًة يف جتمي��ع
نق��اط البيان��ات ،وتُ�س� َ
'>'<2225x5867 sparse matrix of type '<class 'numpy.float64 البيان��ات الن�س ّي��ة .وتق��ع قيم��ة جيب التمام بني
>with 392379 stored elements in Compressed Sparse Row format 1-و 1؛ حي��ث ت�س��ر القيم��ة 1-اإىل االجت��اه
العك�س��ي ،بينم��ا ت�س��ر القيم��ة 1اإىل االجت��اه
االآن حُتوَّلت بيانات الن�س اإىل تن�سيق رقمي متباعد كما اُ�ستخدمت يف الدر�س ال�سابق. نف�سه.
�سكل :3.17اآلة ح�ساب امل�سافات بني النقاط
157 156
اإح��دى اخل�سائ���س الرئي�س��ة لتقني��ة ت�سم��ني املج��اور الع�س��وائي امل��وزَّع عل��ى �س��كل )T-SNE( Tه��ي حُماول��ة احلف��اظ عل��ى يَ�س��تخدِ م املقط��ع الربجم��ي الت��ايل اأداة TSENVisualizerم��ن مكتب��ة yellowbrickالإ�س��قاط وت�سوي��ر الن�سو���س
الرتكيب املحلي للبيانات قدر االإمكان ،حتى تتقارب نقاط البيانات ال�سبيهة يف التمثيل منخف�س االأبعاد ،ويتحقق ذلك بتقلي�س املُمثلة باملتَّجَ هات يف ف�ساء ثنائي االأبعاد:
التباعد بني التوزيعني املحتملني :توزيع البيانات عالية االأبعاد ،وتوزيع البيانات منخف�سة االأبعاد.
%%capture
م�ستقال
ً جمموعة بيانات هيئة االإذاعة الربيطانية املُمثلة باملتَّجَ هات تُ�سنَّف بالتاأكيد كبيانات عالية االأبعاد ،الأنها تت�سمن بُعدً ا !pip install yellowbrick
اأي عمودًا ( )Columnلكل كلمة فريدة تظهر يف البياناتُ .يح�سب العدد االإجمايل لالأبعاد كما يلي: from yellowbrick.text import TSNEVisualizer
print('Number of unique words in the BBC documents vectors:', تقلي�ض األأبعاد Dimensionality Re uction
)))(len(vectorizer.get_feature_names_out اور الع�سوائي املوزع على �سكل T ت�سمن امل يكون تقلي�س االأبعاد مفيدً ا يف العديد من التطبيقات مثل:
t-Distributed S oc stic Neighbor
Number of unique words in the BBC documents vectors: 5867 (Embedding )T-SNE
• ت�سوي��ر البيان��ات عالي��ة االأبع��اد :م��ن ال�سع��ب ت�سوي��ر البيانات
يف ف�س��اء ع��ايل االأبع��اد ،ولذل��ك تُق ّل���س االأبع��اد لي�س��هل ت�سوي��ر
خوارزمي��ة ت�سم��ني املج��اور الع�س��وائي امل��وزَّع عل��ى البيانات وفهمها يف هذه احلالة.
يُ�س��تخدَ م املقط��ع الربجم��ي الت��ايل الإ�س��قاط ُ 5,867بع��دً ا يف حُموري��ن فق��ط وهم��ا حُم��وري Xو Yيف الر�س��م البي��اين.
ُي�ستخدَ م املقطع الربجمي التايل لت�سميم ُخمطَّ ط االنت�سار حيث مُيثل كل لون اأحداالأق�سام االإخبارية اخلم�سة. �س��كل )T-SNE( Tه��ي خوارزمي��ة تعلُّ��م االآل��ة غ��ر • تب�سيط النموذج :النموذج ذو االأبعاد االأقل يكون اأب�سط واأ�سهل
املوجه املُ�ستخدَ مة لتقلي�س االأبعاد.
َّ فهمًا ،وي�ستغرق وقتًا اأقل يف عملية التدريب.
)]'tsne = TSNEVisualizer(colors=['blue','green','red','yellow','brown • حت�س��ني اأداء النم��وذجُ :ي�س��اعد تقلي���س االأبع��اد يف التخل���س من
)tsne.fit(text_tfidf,bbc_labels ح�سن اأداء النموذج. الت�سوي�س وتكرار البيانات ،مما ُي ّ
;)(tsne.show
pred_tfidf
الح��ظ اأن قيم��ة ( ground-truthبيان��ات احلقيق��ة املعتم��دة) من الق�س��م االإخباري ( )News Sectionيف كل م�س��تند
�دال م��ن ذلك ،عوجلت عملية التجميع ا�س��تنادًا اإىل ن�س حُمتوى كل وثيقة مل تُ�س��تخدَ م عل��ى ا إالط��الق يف ه��ذه العملي��ة .وب� ً
عل��ى ح��ده .ا َّإن قي��م بيان��ات احلقيق��ة املعتم��دة مفي��دة يف التطبي��ق العمل��ي ،فه��ي تتي��ح التحق��ق م��ن �سحة نتائ��ج التجميع.
وقيم بيانات احلقيقة املعتمدة احلالية موجودة يف قائمة ( bbc_labelsقيم_ هيئة االإذاعة الربيطانية).
�سكل :3.20الر�سم ال�سجري الهرمي لبيانات هيئة االإذاعة الربيطانية
161 160
الربجمة األ اهية للكلمات با�ستخدام ال�سبكات الع�سبية يَ�س� ِ
�تخدم املقط��ع الربجم��ي الت��ايل قي��م بيان��ات احلقيق��ة املعتم��دة وثالث��ة دوال خمتلف��ة لت�س��جيل النق��اط م��ن مكتب��ة �س��كلرن
( )Sklearnلتقييم جودة جتميع البيانات:
Word ec ori tion with Neural Networks
• تك��ون قي��م موؤ�س��ر التجان���س ( )Homogeneity Scoreب��ني 0و 1ومُيك��ن زي��ادة ه��ذه القيم عندم��ا تكون كل النقاط يف كل
الربجم��ة االجتاهي��ة لتك��رار امل�سطلح-تك��رار امل ُ�س��تنَد العك�س��ي ( )TF-IDFت�س��تند اإىل ح�س��اب تك��رار الكلم��ات ومعاجلته��ا ع��رب عنقود لها قيمة بيانات احلقيقة املعتمدة .وباملثل ،يحتوي كل عنقود على نقاط البيانات وحيدة الت�سنيف.
املُ�س��تنَدات يف جمموع��ة البيان��ات .بالرغ��م م��ن اأن ه��ذا يحق��ق نتائ��ج جي��دة ،اإال اأنّ القي��ود الكب��رة تعي��ب الطرائ��ق امل�س��ت ِندة اإىل
التك��رار .فه��ي تتجاه��ل متامً ��ا العالق��ة الداللي��ة ب��ني الكلم��ات .عل��ى �س��بيل املث��ال ،عل��ى الرغ��م م��ن اأن كلمت��ي ( tripنزه��ة) و • تك��ون قيم��ة موؤ�س��ر ران��د املُع��دل ( )Adjusted Rand Scoreب��ني -0.5و 1.0ومُيك��ن زي��ادة ه��ذه القي��م عندم��ا تق��ع كل
االجتاهيّة املُ�ستنِدة اإىل التّكرار �ستتعامل معهما باعتبارهما كلمتان منف�سلتان ( journeyرحلة) مرتادفتان ،اإال اأنّ الربجمة ّ نقاط البيانات ذات القيم نف�سها يف العنقود نف�سه وكل نقاط البيانات ذات القيم املختلفة يف عناقيد خمتلفة.
متامً ��ا ولهم��ا خ�سائ���س م�س��تقلة .وباملث��ل ،بالرغ��م م��ن اأن كلمت��ي ( appleتفاح��ة) و ( fruitفاكه��ة) مرتابطت��ان دالل ًي��ا؛ الأن • تك��ون قيم��ة موؤ�س��ر االكتم��ال ( )Completeness Scoreب��ني 0و 1ومُيك��ن زي��ادة ه��ذه القيم��ة بتعي��ني كل نق��اط البيان��ات
أي�سا.
التفاح نوع من الفاكهة اإال اأنّ ذلك لن يوؤخذ بعني االعتبار ا ً من ت�سنيف ُحُمدد يف العنقود نف�سه.
توؤثر هذه القيود كثرًا على التطبيقات التي ت�ستخدم هذا النوع من الربجمة االجتاهية .فكِّر يف اجلملتني التاليتني:
• ( I have a very high fever، so I have to visit a doctorلديّ حمّى �سديدة ،ويجب عليّ زيارة الطبيب). _from sklearn.metrics import homogeneity_score,adjusted_rand
score,completeness_score
• My body temperature has risen significantly، so I need to see a healthcare professional
(ارتفعت درجة حرارة ج�سمي كثرًا ،ويجب عليّ زيارة اأخ�سائي الرعاية ال�سحية). ))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اأو اأي برجمة اجتاهية (ت�ستند اإىل التكرار)
يف روؤية الت�سابه بني الكلمات ،ومن املحتمل اأال ت�سعها يف نف�س العنقود. Homogeneity score: 0.6224333236569846 الموؤ�سر اأقرب اإلى 1وهذا يعني اأن مجموعة
الن�سو�س في العنقود تنتمي اإلى قيمة واحدة.
الكلمات املُ�ستبعَدة (:)Stopwords َ ه Word2Vec منوذج الكلمة اإىل امل َّت Adjusted Rand score: 0.4630492696176891
الكلم��ات املُ�س��تبعَدة ه��ي كلم��ات �س��ائعة يف مُيك��ن معاجل��ة ه��ذه القي��ود بالطرائق الت��ي تاأخذ بعني االعتبار الت�س��ابه الموؤ�سر اأقرب اإلى 1وهذا يعني اإن�ساء روابط
Completeness score: 0.5430590192420555
اللغ��ات تُ�س��تبعد ع��اد ًة اأثن��اء املعاجل��ة املُ�س �بَقة ال��داليل ب��ني الكلم��ات .اإح��دى الط��رق ال�س��هرة املُتبع��ة يف ه��ذا ال�س��دد اأف�سل بين العناقيد والقيم؛ ك ٌّل على حده.
للن�سو ���س �سم��ن مه��ام معا جل��ة اللغ��ات �تخدم بُني��ةه��ي ��وذج الكلم��ة اإىل املتَّجَ ��ه ( )Word2Vecالت��ي تَ�س� ِ
الطبيعي��ة ( )NPLمث��ل الربجم��ة االجتاهي��ة تَ�س��تنِد اإىل ال�س��بكات الع�سبي��ة .يَ�س��تنِد ��وذج الكلم��ة اإىل املتَّجَ ��ه ال�س��تكمال حُتلي��ل البيان��اتُ ،يع��اد جتمي��ع البيان��ات با�س��تخدام 5عناقي��د ،بالت�س��اوي م��ع الع��دد احلقيق��ي لقي��م
للكلمات .هذه الكلمات ت�س��مل اأدوات التعريف، ( )Word2Vecاإىل فك��رة اأن الكلم��ات املت�س��ابهة دالل ًي��ا ُحُت��اط بكلمات ( ground-truthبيانات احلقيقة املعتمدة):
وح��روف العط��ف ،وح��روف اجل��ر ،والكلم��ات مماثل��ة يف ال�س��ياق نف�س��ه .ولذل��ك ،جن��د ال�س��بكات الع�سبي��ة ت�س��تخدم
الت��ي ال تك��ون مفي��دة لتحدي��د معن��ى الن� ّ��س ،اأو )AC_tfidf=AgglomerativeClustering(linkage='ward',n_clusters=5
الت�سم��ني اخلف��ي ل��كل كلم��ة للتنبوؤ بال�س��ياق ،مع �سرورة اإن�س��اء الروابط ))(AC_tfidf.fit(text_tfidf.toarray
�سياقه. ب��ني الكلم��ات والت�سمين��ات ال�س��بيهة .عمل ًي��ا ،يخ�سع ��وذج الكلمة اإىل _pred_tfidf=AC_tfidf.labels
املتَّجَ ��ه ( )Word2Vecللتدري��ب املُ�س�بَق عل��ى ماليني املُ�س��تنَدات لتعلُّم
الت�سمن (:)Embedding الت�سم��ني ع��ايل الدق��ة للكلم��ات .مُيك��ن حُتمي��ل النم��اذج املُد َّربة م�س� َبقًا ))print('\nHomogeneity score:',homogeneity_score(bbc_labels,pred_tfidf
وا�س��تخدامها يف التطبيق��ات املُ�س��تنِدة اإىل الن�سو���س .يَ�س��تخدِ م املقطع ))print('\nAdjusted Rand score:',adjusted_rand_score(bbc_labels,pred_tfidf
الت�سم��ني ُيع� ِّ�رب ع��ن الكلم��ات اأو الرم��وز يف الربجم��ي الت��ايل مكتب��ة جين�س��م ( )Gensimلتحمي��ل من��وذج �س��هر
ف�س��اء امل َّت َج��ه امل�س��تمر حي��ث ترتب��ط الكلم��ات ))print('\nCompleteness score:',completeness_score(bbc_labels,pred_tfidf
ُم��د َّر ب م�س � َبقًا عل��ى جممو ع��ة كب��رة ج��دً ا م��ن اأخب��ار قو ق��ل
املت�سابهة دالليًا مع النقاط القريبة. (:)Google News Homogeneity score: 0.528836079209762 نظرًا لقدرة التجميع الهرمي على اإيجاد
العدد الحقيقي من القيم ،وتوفير موؤ�سر
import gensim.downloader as api Adjusted Rand score: 0.45628412883628383 اكتمال اأكثر دقة� ،ستح�سل على عملية
)'model_wv = api.load('word2vec-google-news-300
Completeness score: 0.6075627851312266 تجميع اأف�سل من حيث تمثيل البيانات.
هذا النموذج يربط كل كلمة ]'fox_emb=model_wv['fox
بت�سمين مكوّن من ُ 300بعد. ))print(len(fox_emb
عل��ى الرغ��م م��ن اأن نتائ��ج املوؤ�س��ر تُظه��ر اأن التجمي��ع التكتل��ي با�س��تخدام الربجم��ة االجتاهي��ة لتك��رار امل�سطلح-تك��رار
300
امل ُ�س��تنَد العك�س��ي ( )TF-IDFحُتقق نتائج معقولة ،اإال اأنّه ال يزال باالإمكان حُت�س��ني دقة عملية التجميع� .س��يو�سح الق�س��م
التايل كيف مُيكن اأن نحقق نتائج مبهرة با�ستخدام تقنيات الربجمة االجتاهية املُ�ست ِندة على ال�سبكات الع�سبية.
163 162
: (ثعلب) مو�سحة باالأ�سفلfox االأبعاد الع�سرة االأوىل للت�سمني العددي لكلمة
%%capture
import nltk # import the nltk library for nlp.
import re # import the re library for regular expressions. fox_emb[:10]
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. array([-0.08203125, -0.01379395, -0.3125 , -0.04125977, 0.05493164,
-0.12988281, -0.10107422, -0.00164795, 0.15917969, 0.12402344],
# download the 'stopwords' tool from the nltk library. It includes very common words for different dtype=float32)
languages
nltk.download('stopwords')
ِ �يَ�س
car ف ِّك��ر يف املث��ال الت��ايل حي��ث تُظه��ر املقارن��ة ب��ني كلم��ة.�تخدم النم��وذج ت�سمين��ات الكلم��ات لتقيي��م درج��ة الت�س��ابه
from nltk.corpus import stopwords # import the 'stopwords' tool. .1 و0 عل ًما باأن قيم الت�سابه تقع دومً ا بني.(ال�سيارة) والكلمات االأخرى درجة الت�سابة من خالل تناق�س قيم الت�سابة
stop=set(stopwords.words('english')) # load the set of english stopwords.
pairs = [
('car', 'minivan'),
حدد
ِّ ُي.تُ�س��تخدَ م الدال��ة االآتي��ة الح ًق��ا لتحدي��د عين��ة من الكلمات التمثيلية من جمموعة بيانات هيئ��ة االإذاعة الربيطانية ('car', 'bicycle'),
املقط��ع الربجم��ي الكلم��ات اخلم�س��ني االأك��ر تك��رارًا عل��ى وج��ه التحدي��د م��ن االأق�س��ام االإخباري��ة اخلم�س��ة لهيئ��ة االإذاعة ('car', 'airplane'),
('car', 'street'),
) وه��ي الكلمات االإجنليزية ال�س��ائعة ج��دً ا والكلمات التي ملStopwords( الربيطاني��ة م��ع ا�س��تثناء الكلم��ات امل ُ�س��تبعَدة ('car', 'apple'),
.) املُدرَّب م�سبقًاWord2Vec( تُ�س َّمن يف وذج الكلمة اإىل املتَّجَ ه ]
for w1, w2 in pairs:
print(w1, w2, model_wv.similarity(w1, w2))
def get_sample(bbc_docs:list,
bbc_labels:list
بع�س الكلمات االإ ليزية ال�سائعة التي تعترب كلمات مُ�ستبعَدة
): .) (يكونونare (يكون) وis (ال) وthe (اأ) وa ) هيStopwords( car minivan 0.69070363
car bicycle 0.5364484
word_sample=set() # a sample of words from the BBC dataset
car airplane 0.42435578
# for each BBC news section car street 0.33141237
for label in ['business', 'entertainment', 'politics', 'sport', 'tech']: car apple 0.12830706
165 164
الربجمة األ اهية لل ُ مل با�ستخدام التعلُّم العميق واأخ �رًا� ،ستَ�س� ِ
�تخدم طريق��ة ت�سم��ني املج��اور الع�س��وائي امل��وزَّع عل��ى �س��كل )T-SNE( Tلتخفي���س الت�سمين��ات ذات
بعد للكلمات يف العينة �سمن النقاط ثنائية االأبعاد .بعدهاُ ،متثَّل النقاط يف ُخمطَّ ط انت�سار ب�سيط.ال� ٍ 300
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 �سكل :3.22متثيل الكلمات االأكر تكرارًا من جمموعة بيانات هيئة االإذاعة الربيطانية
ُ مل واملحوألت Sentence_transformers Library مكتبة ا
جلم��ل واملح��والت ( )sentence_transformersالوظائ��ف الكامل��ة لنم��وذج متثي��الت ترمي��ز ا ُ
جلم��ل تُطب��ق مكتب��ة ا ُ يُثب��ت املُخطَّ ��ط اأن ت�سمين��ات ��وذج الكلم��ة اإىل املتَّجَ ��ه ( )Word2Vecت�س��تنبط االرتباط��ات الداللي��ة ب��ني الكلم��ات ،كم��ا
ثنائي��ة اال ��ا م��ن املح��والت ( .)SBERTتاأت��ي املكتب��ة بالعدي��د م��ن من��اذج متثي��الت ترمي��ز ا ُ
جلم��ل ثنائي��ة اال ��ا يت�سح من جمموعات الكلمات الوا�سحة مثل:
م��ن املح��والت ( )SBERTاملُد َّرب��ة ُم�س��بقًا؛ ك ٌل منه��ا ُم��د َّرب عل��ى جمموع��ة بيان��ات خمتلف��ة ولتحقي��ق اأه��داف خمتلف��ة. • ( economyاالقت�س��اد)( economic،االقت�سادي��ة)( business ،االأعم��ال)( financial ،املالي��ة)( sales ،املبيعات)،
يعمل املقطع الربجمي التايل على حُتميل اأحد النماذج العامة ال�س��هرة املُد َّربة ُم�س��بقًا ،وي�س��تخدمها الإن�س��اء ت�سمينات ( bankامل�سرف)( firm ،ال�سركة)( firms ،ال�سركات).
للم�ستندات يف جمموعة بيانات هيئة االإذاعة الربيطانية: • ( Internetاالإنرتن��ت)( mobile ،الهات��ف املحم��ول)( phones ،الهوات��ف)( phone ،الهات��ف)broadband ،
(النطاق العري�س)( online ،مت�سل)( digital ،رقمي).
%%capture
!pip install sentence_transformers • ( actorممث��ل)( actress ،ممثل��ة)( film ،فيل��م)( comedy ،كومي��دي)( films ،اأف��الم)(festival ،مهرج��ان)،
from sentence_transformers import SentenceTransformer
( bandفرقة)( movie ،فيلم).
model = SentenceTransformer('all-MiniLM-L6-v2') # load the pre-trained model. • ( gameلعب��ة)( team ،فري��ق)( match ،مب��اراة)( players ،العب��ون)( coach ،م��درِّب)( injury ،اإ�ساب��ة)،
text_emb = model.encode(bbc_docs) # embed the BBC documents. ( clubنادي)( rugby ،الرجبي).
167 166
مو�س��ح يف ال�س��كل ،3.24ف�اإن اأداة الر�س��م ال�س��جري ت�س��ر اإىل 4عناقي��د ،كل واح��د منه��ا ُممي��ز بل��ون خمتل��ف.
كم��ا ه��و ّ لق��د ا�س��تخدمت يف وق��ت �س��ابق يف ه��ذه الوح��دة اأداة ت�سم��ني املج��اور الع�س��وائي امل��وزع عل��ى �س��كل Tوالت��ي ه��ي
َ�ستخدم املقطع الربجمي التايل هذا املقرتح حل�ساب العناقيد وح�ساب مقايي�س التقييم: ي ِ ( ،)TSNEVisualizerلت�سوي��ر املُ�س��تندات املُمثل��ة باملتُّجَ ه��ات املُنتج��ة با�س��تخدام اأداة تك��رار امل�سطلح-تكرار امل�س��تند
العك�س��ي ( .)TF-IDFمُيكن االآن ا�س��تخدامها للت�سمينات املُنتَجة بوا�س��طة متثيالت ترميز اجلُمل ثنائية اال ا من
)AC_emb=AgglomerativeClustering(linkage='ward',n_clusters=4 املحوالت (:)SBERT
)AC_emb.fit(text_emb
_pred_emb=AC_emb.labels )]'tsne = TSNEVisualizer(colors=['blue','green','red','yellow','brown
)tsne.fit(text_emb,bbc_labels
))print('\nHomogeneity score:',homogeneity_score(bbc_labels,pred_emb ;)(tsne.show
))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 �سكل :3.23اإ�سقاط ت�سمني املجاور الع�سوائي املوزَّع على �سكل )T-SNE( Tللت�سمينات
)AC_emb.fit(text_emb املُنتجة بوا�سطة متثيالت ترميز اجلُمل ثنائية االجتاه من املحوالت ()SBERT
_pred_emb=AC_emb.labels جلم��ل ثنائي��ة اال ��ا م��ن املح��والت ( )SBERTت �وؤدي اإىل ف�س��لٍ
اأك��ر و�سوحً ��ا يو�س��ح ال�س��كل اأن متثي��الت ترمي��ز ا ُ
))print('\nHomogeneity score:',homogeneity_score(bbc_labels,pred_emb لالأق�س��ام االإخباري��ة املختلف��ة م��ع ع��دد اأق��ل م��ن ال�س��وائب م��ن تك��رار امل�سطلح-تك��رار امل ُ�س��تنَد العك�س��ي (.)TF-IDF
))print('\nAdjusted Rand score:',adjusted_rand_score(bbc_labels,pred_emb اخلطوة التالية هي ا�ستخدام الت�سمينات لتدريب خوارزمية التجميع التكتلي:
))print('\nCompleteness score:',completeness_score(bbc_labels,pred_emb
plt.figure() # create a new figure.
Homogeneity score: 0.7865655030556284 # iteratively merge points and clusters until all points belong to a single cluster. Return the the linkage of
the produced tree.
Adjusted Rand score: 0.8197670431956582 )'linkage_emb=hierarchy.linkage(text_emb, method='ward
جلم��ل ثنائي��ة اال ��ا م��ن املح��والت ( )SBERTيف الربجم��ة االجتاهي��ة تُظهِ ��ر النتائ��ج اأن ا�س��تخدام متثي��الت ترمي��ز ا ُ
للن�سو���س يَنت��ج عن��ه نتائ��ج جتمي��ع ُحُم َّ�س��نة باملقارن��ة م��ع تك��رار امل�سطلح-تك��رار امل ُ�س��تنَد العك�س��ي ( .)TF-IDFاإذا كان
ع��دد العناقي��د ه��و 5لتك��رار امل�سطلح-تك��رار امل ُ�س��تنَد العك�س��ي (( )TF-IDFالقيم��ة ال�سحيح��ة) و 4عناقي��د لتمثيالت
ترميز اجلُمل ثنائية اال ا من املحوالت ( ،)SBERTفاإن املقايي�س الثالثة لتمثيالت ترميز اجلُمل ثنائية اال ا
من املحوالت ( )SBERTال تزال هي االأعلى بفارق كبر .ثم تزداد الفجوة اإذا كان العدد 5لكلٍ من الطريقتني.
وه��ذا ُيع� ُّد دلي� ً�ال عل��ى اإمكان��ات ال�س��بكات الع�سبي��ة ،الت��ي ت�س��مح له��ا بُنيته��ا املتط��ورة بفهم ا أالمن��اط الداللي��ة املُعقدة يف
البيانات الن�سيّة.
�سكل :3.24الر�سم ال�سجري الهرمي لتمثيالت ترميز اجلُمل ثنائية االجتاه من املحوالت ()SBERT
169 168
4لدي��ك م�سفوف��ة numPyتدع��ى ' 'Docsتت�سم��ن م�س��تندًا ن�سي��ا واح �دًا يف كل �س��ف .لدي��ك كذل��ك م�سفوف��ة مترينات
labelsتت�سم��ن قي��م كل م�س��تند يف .Docsاأكم��ل املقط��ع الربجم��ي الت��ا بحي��ث ت�س��تخدم ��وذج متثي��الت ترمي��ز
جلم��ل ثنائي��ة اال ��ا م��ن املح��والت ( )SBERTاملُ��درَّب مُ�س��بقًا حل�س��اب ت�سمين��ات كل الوثائ��ق يف Docsث��م ا�س��تخدم ا ُ 1
اأداة TSNEVisualizerت�سم��ني املج��اور الع�س��وائي امل��وزَّع عل��ى �س��كل Tلت�سوي��ر الت�سمين��ات يف الف�س��اء ثنائ��ي االأبع��اد،
با�ستخدام لون خمتلف لكل واحد من القيم االأربعة املحتملة: خاطئة �سحيحة حدِّد اجلملة ال�سحيحة واجلملة اخلاطئة فيما يلي:
.1يف التعلُّم غر املوجَّ ه ،تُ�ستخدم جمموعات البيانات املُعنوَنة لتدريب النموذج.
from sentence_transformers import
.2يتطلب التعلُّم غر املوجَّ ه الربجمة االجتاهية للبيانات.
from = import TSNEVisualizer model ('all-MiniLM- جلم��ل ثنائي��ة االجت��اه م��ن املح��والت (ُ )SBERTتع� ُّد اأف�س��ل م��ن تك��رار
.3متثي��الت ترمي��ز ا ُ
L6-v2') # loads the pre-trained model. امل�سطلح-تكرار امل�ستند العك�سي ( )TF-IDFللربجمة االجتاهية للكلمات.
docs_emb = model. (Docs) # embeds the docs .4يَتبع التجميع التكتلي منهجية الت�سميم من اأعلى اإىل اأ�سفل لتحديد العناقيد.
= tsne ( )]'=['blue','green','red','yellow .5متثيالت ترميز اجلُمل ثنائية االجتاه من املحوالت ( )SBERTمُدرَّبة للتنبوؤ مبا اإذا كانت
جملتان خمتلفتني دالليًا.
tsne. ( , )
;)(tsne.show
5اأكمل املقطع الربجمي التا بحيث تَ�ستخدم وذج الكلمة اإىل املتَّجَ ه ( )Word2Vecال�ستبدال كل كلمة يف اإحدى
اجلُمل باأخرى تكون اأك �سبهًا بها:
=new_sentence+
)(sentence=new_sentence.strip
171 170
هناك اأربع اأنواع من توليد اللغات الطبيعية (:)NLG
الدر�ض الثالث
تولي��د اللغ��ات الطبيعي��ة املبن��ي عل��ى القوال��ب تولي��د اللغ��ات الطبيعي��ة املبن��ي عل��ى األختي��ار توليد الن�ض
Se ection se Template-Based NLG
املبني على االختيار حُتديد جمموعة يت�سمن توليد اللغات الطبيعية ّ يت�سم�ن تولي�د اللغ�ات الطبيعي�ة املبن ّ�ي عل�ى القوال�ب ا�س�تخدام
للن�س االأ�سلي االأكرب
جلمل اأو الفقرات الإن�ساء ملخّ �س ّ فرعية من ا ُ قوال�ب ُحُم� َّددة ُم�س�بقًا حُت�دد بنية وحُمت�وى الن�س املتولِّ�د .تُزَ وّد
ن�سو�س��ا جدي��دة ،اإال
ً حج ًم��ا .بالرغ��م م��ن اأن ه��ذه املنهجي��ة ال تُو ِّل��د ه�ذه القوال�ب مبعلوم�ات ُحُم َّددة لتوليد الن�س النهائيُ .تع ُّد هذه توليد اللغات الطبيعية (Natural Language ener tion )NLG
اأنه��ا ُمطب َّق��ة عمل ًي��ا على نطاق وا�س��ع؛ وذلك الأ ّنه��ا تاأخذ العينات من املنهجية ب�سيطة ن�سبيًا وحُتقق فعالية يف توليد الن�سو�س للمهام تولي��د اللغ��ات الطبيعي��ة ( )NLGه��و اأح��د ف��روع معاجل��ة اللغ��ات الطبيعي��ة ( )NLPالت��ي تر ِّك��ز عل��ى تولي��د الن�سو���س الب�س��رية
جلم��ل املكتوب��ة بوا�س��طة الب�س��ر ،مُيك��ن احل��د م��ن جمموع��ة م��ن ا ُ املُح� َّددة واملُع َّرف�ة جي�دً ا .م�ن ناحية اأخرى ،ق�د تواجه �سعوبة مع با�س��تخدام خوارزمي��ات احلا�س��ب .اله��دف م��ن تولي��د اللغ��ات الطبيعي��ة ( )NLGه��و تولي��د اللغ��ات املكتوب��ة اأو املنطوق��ة ب�س��ورة
خماط��رة تولي��د الن�سو���س غ��ر املُتنب��ئ به��ا اأو �سعيف��ة البني��ة .على امله�ام املفتوح�ة اأو امله�ام التي تتطلب درجة عالية من التباين يف طبيعي��ة ومفهوم��ة للب�س��ر دون احلاج��ة اإىل تدخ��ل ب�س��ري .توج��د العدي��د م��ن املنهجي��ات املختلف��ة لتولي��د اللغ��ات الطبيعي��ة ،مث��ل
�س��بيل املث��الُ ،مو ِّل��د تقري��ر الطق���س املبن� ّ�ي عل��ى االختي��ار ق��د ي�س��م الن��س املُ َولَّ�د .عل�ى �س�بيل املثال ،قالب تقرير حالة الطق��س رمبا املنهجيات املُ�ست ِندة اإىل القوالب ،واملُ�ست ِندة اإىل القواعد ،واملُ�ستنِدة اإىل تعلُّم االآلة.
قاع��دة بيان��ات م��ن العب��ارات مث��ل( It is hot outside :الطق���س يبدو كما يليToday in [city]، it is [temperature] degrees :
ح��ار باخل��ارج) ،و ( The temperature is risingدرج��ة احل��رارة ( with [weather condition].الي�وم يف [املدين�ة] ،درج�ة معا ة اللغات الطبيعية
ترتفع) ،و ( Expect sunny skiesتنبوؤات بطق�س ُم�سم�س). احلرارة هي [درجة احلرارة] مئوية و [حالة الطق�س].). (:)Natural Language Processing-NLP علوم احلا�سب
تولي��د اللغ��ات الطبيعي��ة املبن��ي عل��ى القواع��د توليد اللغات الطبيعية املبني على تعلُّم األلة معاجل��ة اللغ��ات الطبيعي��ة ( )NLPه��و اأح��د ف��روع ال��ذكاء
اال�سطناع��ي ال��ذي مُين��ح اأجه��زة احلا�س��ب الق��درة عل��ى
Machine Learning-Based NLG Rule-Based NLG حُماكاة اللغات الب�سرية الطبيعية.
املبني على تعلُّم االآلة تدريب منوذج يَ�س��تخدِ م تولي��د اللغ��ات الطبيعي��ة املبن� ّ�ي عل��ى القواع��د جمموع��ة معاجلة اللغات
يت�سمن ت�وليد اللغات الطبيعية ّ الطبيعية
تعلُّ��م االآل��ة عل��ى جمموع��ة كب��رة م��ن بيان��ات الن�سو���س الب�س��رية. م��ن القواع��د املُح � َّددة مُ�س��بقًا لتولي��د الن���س .ق��د حُت��دد ه��ذه
يتع ّل��م النم��وذج اأمن��اط الن� ّ��س وبنيت��ه ،وم��ن ث��م مُيكن��ه تولي��د الن�س جلم��ل ،اأو
القواع��د طريق��ة جتمي��ع الكلم��ات والعب��ارات لت�س��كيل ا ُ توليد اللغات الطبيعية الذكاء علم اللُغويات
اجلديد الذي ي�سبه الن�س الب�سري يف االأ�سلوب واملحتوى .قد تكون �تخدمة في��ه .ع��اد ًة
كيفي��ة اختي��ار الكلم��ات وف ًق��ا لل�س��ياق املُ�س� َ :)Natural Language ener tion ( اال�سطناعي
املنهجي��ة اأك��ر فعالي��ة يف املهام التي تتطلب درجة عالية من التباين تُ�س��تخدم ه��ذه القواع��د لت�سمي��م روب��وت الدرد�س��ة خلدم��ة تولي��د اللغ��ات الطبيعي��ة ( )NLGه��ي عملي��ة تولي��د
يف الن���س املُو َّل��د .وق��د تتطل��ب املنهجي��ة جمموعات اأك��رب من بيانات العم��الء .ق��د يك��ون م��ن ال�س��هل تطبي��ق االأنظم��ة املبني��ة عل��ى الن�سو�س الب�سرية با�ستخدام الذكاء اال�سطناعي (.)AI �سكل ُ :3.25خمطَّ ط فِنْ ( )Vennملعاجلة اللغات الطبيعية ()NLP
التدريب واملوارد احل�سابية. القواعد .ويف بع�س االأحيان قد تت�سم باجلمود وال تُولِّد ُخم َرجات
تبدو طبيعية.
جدول :3.4تاأثري توليد اللغات الطبيعية
ا�ستخدام توليد اللغات الطبيعية املبني على القوالب Using Template-Based NLG
فعاال يف توليد الن�سو�س للمهام املُح َّددة واملُع َّرفة مثل اإن�ساء التقارير املبني على القوالب ب�سيط ن�سبيًا وقد يكون ً توليد اللغات الطبيعية ّ
اأو تو�سي��ف البيان��ات .اإح��دى ممي��زات تولي��د اللغ��ات الطبيعي��ة املبن� ّ�ي عل��ى القوال��ب ه��و �س��هولة التطبي��ق وال�سيان��ةُ .ي�س ِّم��م االأ�س��خا�س يُ�س��تخدم تولي��د اللغ��ات الطبيعي��ة ( )NLGلتولي��د املق��االت والتقاري��ر االإخباري��ة ،واملحتوى
القوال��ب ،دون احلاج��ة اإىل خوارزمي��ات تعلُّ��م االآل��ة املُعق� َ�دة اأو جمموعات كبرة من بيانات التدريب .وهذا يجعل توليد اللغات الطبيعية املكتوب اآليًا مما يوفّر الوقت ،وي�ساعد االأ�سخا�س يف الرتكيز على املهام االإبداعية اأو املهام
ن�س حُم ّددين ،دون احلاج��ة اإىل اإجراء تغيرات كبرة. املبن� ّ�ي عل��ى القوال��ب ه��و اخلي��ار املنا�س��ب للمه��ام التي تك��ون ذات بنية وحُمتوى ّ عالية امل�ستوى.
تَ�س��تنِد قوالب توليد اللغات الطبيعية ( )NLGاإىل اأي بُنية لغوية ُحُم َّددة ُم�س��بقًا .اإحدى املمار�س��ات ال�س��ائعة هي اإن�س��اء القوالب التي
تتطلب كلمات بو�سوم حُمددة كجزء من الكالم الإدراجها يف الفراغات املُح َّددة �سمن اجلملة. مُيكن اال�ستفادة من ذلك يف حُت�سني كفاءة وفعالية روبوت الدرد�سة خلدمة العمالء ومتكينه
من تقدمي ردود طبيعية ومفيدة الأ�سئلتهم وا�ستف�ساراتهم.
و�سوم اأق�سام الكالم Part of Speech )POS( Tags
PRON VERB DET ADJ NOUN
و�س�وم اأق�س�ام ال�كالم ( ،)Part Of Speechالت�ي ُتع� َّرف كذل�ك با�س�م
ُخ�س��س للكلم�ات يف الن��س لالإ�س�ارة اإىل البن�اء و�س�وم POSه�ي قي�م ت َّ مُيك��ن اال�س��تفادة م��ن تولي��د اللغ��ات الطبيعي��ة ( )NLGيف حُت�س��ني اإمكاني��ة الو�س��ول ل��ذوي
I want an early upgrade النح�وي للكلم�ات ،اأو ج�زء ال�كالم يف اجلمل�ة .على �س�بيل املثال ،قد تكون االإعاق��ة اأو ل��ذوي احلواج��ز اللغوي��ة ،بتمكينه��م م��ن التوا�س��ل م��ع االآالت بطريق��ة طبيعي��ة
�سكل :3.26مثال على عملية و�سم اأق�سام الكالم فعال اأو �سف ًة اأو ظرفًا ،اإل ،وتُ�ستخدَ م و�سوم اأق�سام الكالم
الكلمة ا�سمًا اأو ً وبديهية تنا�سبهم.
الن�س وفهم معناه.يف معاجلة اللغات الطبيعية ( )NLPلتحليل بنية ّ
173 172
Paraphrase)( دالة Syntax Analysis ُ مل ليل بِناء ا
جلملة بكلمة ُ ثم حُتاول ا�ستبدال كل كلمة يف ا.جلمل ُ تُق�سِّ م الدالة يف البداية الن�س املُكوَّن من فقرة اإىل جمموعة من ا ّ ) يف توليد اللغات الطبيعيةPOS( ُي�ستخدم حُتليل ِبناء اجلُمل عاد ًة اإىل جانب و�سوم اأق�سام الكالم
املبني على القوالب ل�سمان
) ال��ذي در�س��ته يفWord2Vec( ُيق َّي��م الت�س��ابه ال��داليل بوا�س��طة ��وذج الكلم��ة اإىل املتَّجَ ��ه.اأخ��رى مت�س��ابهة دالل ًي��ا والعالقات،جلم��ل
ُ جلم��ل التع�رّف عل��ى اأجزاء ال��كالم يف ا
ُ يت�سم��ن حُتلي��ل ِبن��اء ا.ق��درة القوال��ب عل��ى تولي��د الن�سو���س الواقعي��ة
) با�س��تبدال الكلمة يف اجلملة بكلمة اأخرى م�س��ابهةWord2Vec( قد يو�سي منوذج الكلمة اإىل امل َّتجه.الدر���س ال�س��ابق : مثل.جلملة اأنواعً ا خمتلفة من عنا�سر بناء اجلُملة ُ تت�سمن ا.للجملة ُ بينها لتحديد البناء النحوي
ولتجن��ب مث��ل ه��ذه احل��االت تُ�س��تخدم دال��ة مكتب��ة،) (تف��احapples � (تفاح��ة) بapple ا�س��تبدال: مث��ل،له��ا . وهو عاد ًة يعرب عمّا يقوم به الفاعل اأو عمّا يحدث.جلملة الذي يحتوي على الفعل ُ ) هو ق�سم اPredicate( • الفعل
. ال�سهرة لتقييم ت�سابه املُفردات بني الكلمة االأ�سلية والكلمة البديلةfuzzywuzzy .جلملة الذي يُنفّذ الفعل ُ ) هو ق�سم اSubject( • الفاعل
:الدالة نف�سها مُو�سحَّ ة باالأ�سفل .) هو ا�سم اأو �سمر ي�سر اإىل ال�سخ�س اأو ال�سيء الذي يتاأثر مبا�سر ًة بالفعلDirect Object( • املفعول به
def paraphrase(text:str, # text to be paraphrased
ُ ) الت��ي تتب��ع منهجي��ة ِبن��اء اWonderwords( يَ�س��تخدِ م املقط��ع الربجم��ي الت��ايل مكتب��ة وون��درووردز
جلم��ل لعر���س بع���س
stop:set, # set of stopwords .املبني على القوالب
ّ االأمثلة على توليد اللغات الطبيعية
model_wv,# Word2Vec Model
lexical_sim_ubound:float, # upper bound on lexical similarity
%%capture
semantic_sim_lbound:float # lower bound on semantic similarity
): !pip install wonderwords
# used to generate template-based randomized sentences
words=word_tokenize(text) # tokenizes the text to words from wonderwords.random_sentence import RandomSentence
new_words=[] # new words that will replace the old ones. # make a new generator with specific words
generator=RandomSentence(
# specify some nouns
for word in words: # for every word in the text nouns=["lion", "rabbit", "horse","table"],
verbs=["eat","run","laugh"], # specify some verbs.
word_l=word.lower() # lower-case the word. adjectives=['angry','small']) # specify some adjectives.
# if the word is a stopword or is not included in the Word2Vec model, do not try to replace it. # generates a sentence with the following template: [subject (noun)] [predicate (verb)]
if word_l in stop or word_l not in model_wv: generator.bare_bone_sentence()
new_words.append(word) # append the original word
175 174
ا�ستخدام توليد اللغات الطبيعية املبني على األختيار # quality check: if the chosen candidate is not semantically similar enough to
# the original, then just use the original word.
Using Se ection-Based NLG if sem_sim<semantic_sim_lbound:
هذه املنهجية ُجت ِ�سد ا�ستخدام.جلمل الفرعية من وثيقة ُحُم َّددة new_words.append(word)
ُ �ست�ستعر�س منهجية عملية الختيار منوذج من ا،يف هذا الق�سم else: # use the candidate.
:املبني على االختيار ي�ستند اإىل لبنتني رئي�سيتني
ّ ومزايا توليد اللغات الطبيعية new_words.append(rword)
%%capture
'It was a consecration, the spiritual overtones entirely appropriate.
Lionel Messi not only emulated '
import gensim.downloader as api # used to download and load a pre-trained Word2Vec model
model_wv = api.load('word2vec-google-news-300')
َ والتعبر النمطي نف�سه املre يُر َّمز الن�س با�ستخدام مكتبة،يف البداية
:ُ�ستخدم يف الوحدات ال�سابقة
import nltk
# used to split a piece of text into words. Maintains punctuations as separate tokens
import re # used for regular expressions from nltk import word_tokenize
nltk.download('stopwords') # downloads the stopwords tool of the nltk library
# tokenize the document, ignore stopwords, focus only on words included in the Word2Vec model. # used to get list of very common words in different languages
tokenized_doc=[word for word in re.findall(r'\b\w\w+\b',text.lower()) if word from nltk.corpus import stopwords
not in stop and word in model_wv] stop=set(stopwords.words('english')) # gets the list of english stopwords
Networkx مكتبة text='We had dinner at this restaurant yesterday. It is very close to my
house. All my friends were there, we had a great time. The location is
مطعم 2
.)Weighted Graph( مُيكن االآن منذجة مفردات املُ�ستنَد يف ُخمطَّ ط موزون excellent and the steaks were delicious. I will definitely return soon, highly
منزل يف لغ��ة البايث��ون جمموع��ة وا�س��عة م��ن االأدوات الإن�س��اءNetworkx تُوف��ر مكتب��ة recommended!'
رائع # parameters: target text, stopwords, Word2Vec model, upper bound on lexical similarity, lower bound
3 ُي�س��اعد، يف تولي��د اللغ��ات الطبيعي��ة املبن� ّ�ي عل��ى االختي��ار.وحُتلي��ل املُخطَّ ط��ات on semantic similarity
2 1 متثي��ل مف��ردات الوثيق��ة يف ُخمطَّ ��ط م��وزون يف حُتدي��د العالق��ات ب��ني الكلم��ات paraphrase(text, stop, model_wv, 80, 0.5)
2 ُمتث��ل كل، يف املُخطَّ ��ط امل��وزون.جلم��ل ذات ال�سل��ة
ع�ساء ُ وت�س��هيل اختي��ار العب��ارات وا
2
. ُومتث��ل احل��واف بني ال ُعق��د العالقات بني ه��ذه املفاهيم،ُعق��دة كلم� ًة اأو مفهومً ��ا '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
لذيذ 1 املوقع and the tenderloin were delicious. I will certainly rejoin quickly, hugely
، عن��د تولي��د الن�سو���س.اللغ��ات الطبيعي��ة بتحدي��د املفاهي��م االأق��وى ارتبا ًط��ا
advised!'
3 جلمل ا�س��تنادًا اإىل العالقات ُ ُي�س��تخدم املُخطَّ ��ط امل��وزون للبح��ث عن العب��ارات وا
مُو�سي به �ستخدم النظام املُخطَّ ط للبحث عن الكلمات ِ قد َي، على �سبيل املثال.بني الكلمات
مُيك��ن حُت�س��ني النتائ��ج باإ�ساف��ة املزي��د م��ن القي��ود لت�سحي��ح بع���س،كم��ا يف املنهجي��ات االأخ��رى املُ�س��ت ِندة اإىل القوال��ب
والعبارات االأكر ارتباطً ا لو�سف كيان ُحُم َّدد ثم ا�ستخدام هذه الكلمات لتحديد يو�س��ح املث��ال اأعاله اأن��ه ُمُيكن با�س��تخدام هذه الدالة الب�س��يطة، وم��ع ذل��ك.البدائ��ل االأق��ل و�سو ًح��ا واملذك��ورة يف االأعل��ى
.جلملة االأكر مالءم ًة من قاعدة بيانات النظام ُ ا .توليد ن�سو�س واقعية للغاية
Networkx � مثال على ُخمطَّ ط موزون ل:3.27 �سكل
177 176
Louvain Algorithm خوارزمية لوفان Build_graph)( دالة
واحدة م��ن اخليارات. العدي��د م��ن اخلوارزمي��ات لتحلي��ل املُخطَّ ��ط والبح��ث ع��ن املجت َمعاتNetworkx تت�سم��ن مكتب��ة : الإن�ساء ُخمطَّ ط يت�سمنNetworkX مكتبةBuild_graph)( تُ�ستخدم دالة
االأكر فعالية هي خوارزمية لوفان التي تعمل عرب حُتريك ال ُعقد بني املجت َمعات حتى جتد بُنية املجتمع التي متثل الربط .• عُ قدة واحدة لكل كلمة �سمن مفردات حُمددة
.االأف�سل يف ال�سبكة ال�سمنية Doc2Vec املح�س��وب بوا�س��طة اأداة، ال��وزن عل��ى احلاف��ة ي�س��اوي الت�س��ابه الداليل بني الكلمات.• حاف��ة ب��ني كل كلمت��ني
الن�س كم َّت َجه وه��ي تعميم ملنهجية وذج الكلم��ة اإىل املتَّجَ ه
ّ وه��ي اأداة معاجل��ة اللغ��ات الطبيعي��ة املُخ�س�س��ة لتمثي��ل
e co unities)( دالة .)Word2Vec(
َحُت�س��ب الدالة كذلك.املبني عل��ى الكلمات
ّ تَ�س��تخدِ م الدال��ة االآتي��ة خوارزمي��ة لوف��ان للبح��ث ع��ن املجت َمع��ات يف املُخطَّ ��ط توج��د كذلك حافة بني عُ قدتني اإذا كان ت�س��ابه.تَر�س��م الدال��ة خمطّ طً ��ا ذا عُ ق��دة واح��دة ل��كل كلم��ة يف املف��ردات املُح َّددة
: ثم تكون املُخ َرجات يف �سورة قامو�سني.موؤ�سر االأهمية لكل جمتمع على حده .) اأكرب من احلد املُعطىWord2Vec( وذج الكلمة اإىل املتَّجَ ه
. الذي يربط الكلمة باملجتمعword_to_community •
# tool used to create combinations (e.g. pairs, triplets) of the elements in a list
. الذي يربط املجتمع بدرجة االأهميةcommunity_scores • from itertools import combinations
5 اإذا كان املجتم��ع يت�سم��ن ثالث��ة كلم��ات تظهر، عل��ى �س��بيل املث��ال.الدرج��ة ت�س��اوي جمم ��وع تك��رار الكلم��ات يف املجتم��ع import networkx as nx # python library for processing graphs
ّ مُيثل املوؤ�س��ر جزءًا من، ومن ناحية املفهوم.19 فاإنّ موؤ�سّ ��ر املجتمع حينئذٍ ي�س��اوي،الن�س
الن�س الذي ّ مرات يف6 و8و def build_graph(vocab:set, # set of unique words
.ي�س ُّمه املجتمع
ُ model_wv # Word2Vec model
):
# gets all possible pairs of words in the doc
from networkx.algorithms.community import louvain_communities
pairs=combinations(vocab,2)
from collections import Counter # used to count the frequency of elements in a list
for word in comm: # for each word in the community مُيك��ن،وبالنظ��ر اإىل ذل��ك املُخطَّ ��ط املبن��ي عل��ى الكلم��ة
word_to_community[word]=comm # map the word to the community
متثي��ل جمموع��ة م��ن الكلمات املت�س��ابهة دالل ًي��ا يف �سورة
عناقي��د م��ن ال ُعق��د املت�سل��ة م ًع��ا بوا�س��طة ح��واف عالي��ة
score+=word_cnt[word] # add the frequency of the word to the community's score. ُيطل��ق عل��ى عناقي��د ال ُعق��د كذل��ك املجت َمع��ات.ال��وزن
community_scores[comm]=score # map the community to the score.
ُخم � َرج املُخطَّ ��ط ه��و جمموع��ة.)Communities(
مل ُجترى عملية.ب�سيطة من الروؤو�س واحلواف املوزونة
return word_to_community, community_scores 3.28 يف ال�س��كل.التجمي��ع حت��ى االآن الإن�س��اء املجت َمعات
تُ�س��تخدم األ��وان خمتلف��ة لتميي��ز املجت َمع��ات يف املُخطَّ ��ط
.املذكور باملثال ال�سابق
املجت َمعات يف املُخطَّ ط:3.28 �سكل
179 178
word in model_wv] # ignores words that are not in the Word2Vec model 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'
sentence_score=0 # the score of the sentence
return scored_sentences
�ستكون اخلطوة التالية هي ا�ستخدام هذه املعلومات، وربط املجتمع مبوؤ�سر االأهمية،االآن بعد ربط كل الكلمات باملجتمع
. مُ�سمَّمة لهذا الغر�سevaluate_sentences)( دالة.لتقييم اأهمية كل جملة يف املُ�ستنَد االأ�سلي
scored_sentences=evaluate_sentences(text,word_to_community,community_
scores,model_wv) Evaluate_sentences)( دالة
len(scored_sentences)
. ا�س��تنادًا اإىل الكلم��ات الت��ي تت�سمنه��ا، ث��م ح�س��اب موؤ�س��ر االأهمي��ة ل��كل ُجمل��ة.تب��داأ الدال��ة بتق�س��يم املُ�س��تنَد اإىل ُجم��ل
.تكت�سب كل كلمة موؤ�سر االأهمية من املجتمع الذي تنتمي اإليه
61
تنتمي��انw2 وw1 الكلمت��ان.w1، w2، w3، w4، w5 لدي��ك جمل��ة مكون��ة م��ن خم�س��ة كلم��ات،عل��ى �س��بيل املث��ال
ُ ويُ�س��تخدَ م املقط��ع الربجم��ي الت��ايل للعث��ور عل��ى ا، جُ مل��ة61 يت�سم��ن املُ�س��تنَد االأ�سل��ي اإجم��ايل
جلم��ل الثالث��ة االأك��ر تنتم��ي اإىلw5 والكلم��ة،30 تنتمي��ان اإىل جمتم��ع مبوؤ�س��ر قيمت��هw4 وw3 والكلمت��ان،25 اإىل جمتم��ع مبوؤ�س��ر قيمت��ه
ِ � تَ�س.125=15+30+30+25+25 جلم��ل ه��و
�تخدم الدال��ة بع��د ذل��ك هذه ُ جمم��وع موؤ�س��رات ا.15 جمتم��ع مبوؤ�س��ر قيمت��ه
:جلمل ُ اأهمية من بني هذه ا . من االأكر اإىل االأقل اأهمية،جلمل يف ترتيب تنازيل ُ املوؤ�سرات لت�سنيف ا
for i in range(3):
print(scored_sentences[i],'\n') from nltk import sent_tokenize # used to split a document into sentences
(2528, 'It will go down as surely the finest World Cup final of all time, # get all the words in the sentence, ignore stopwords and focus only on words that are in the
the most pulsating, one of the greatest games in history because of how Word2Vec model.
Kylian Mbappé hauled France up off the canvas towards the end of normal sentence_words=[word
time.') for word in re.findall(r'\b\w\w+\b',raw_sent.lower()) # tokenizes
if word not in stop and # ignores stopwords
181 180
مُيكن تو�سيع قاعدة املعرِ فة الب�سيطة لت�سمل م�ستويات اأكر من االأ�سئلة واالأجوبة ،وجتعل روبوت الدرد�سة اأكر ذكاءً.
print(scored_sentences[-1]) # prints the last sentence with the lowest score
)(print
{=QA print(scored_sentences[30]) # prints a sentence at the middle of the scoring scale
"Q1":"What type of courses are you interested in?",
"A1":[["Courses in Computer Programming","2"],
["Courses in Engineering","3"],
)'(0, 'By then it was 2-0.
["Courses in Marketing","4"]],
"Q2":"What type of Programming Languages are you interested in?", (882, 'Di María won the opening penalty, exploding away from Ousmane
"A2":[["Java",None],["Python",None]], )'Dembélé before being caught and Messi did the rest.
>> Thank you, I just emailed you a list of courses. )# gets the winner (best candidate answer
]winner=candidates[winner_index
يف التفاع��ل الث��اين ،يفه��م روب��وت الدرد�س��ة اأن ( Cooking Classesدرو���س الطهي) ال ت�س��به دالل ًي��ا اخليارات املوجودة
# prints the winner's text
يف قاع��دة املعرِ ف��ة .وه��و ذك��ي بالق��در ال��كايف ليفه��م اأن ( Software coursesال��دورات التدريبي��ة يف الربجم��ة) يج��ب )]print('\n>> You have selected:',winner[0
اأن ترتب��ط بخي��ار ( Courses on Computer Programmingال��دورات التدريبي��ة يف برجم��ة احلا�س��ب) .اجل��زء )(print
�تخدم C++و .Javaعل��ى االأخ��ر م��ن التفاع��ل ي�س��لط ال�س��وء عل��ى نق��اط ال�سع��ف :يرب��ط روب��وت الدرد�س��ة ب��ني رد املُ�س� ِ qa_id=winner[1] # gets the qa_id for this winner
الرغ��م م��ن اأن لغت��ي الربجم��ة مرتبطت��ان بالفع��ل ومُيكن القول باأنهما اأكر ارتباطً ا من لغتي البايثون و ،C++اإال اأن الرد
if qa_id==None: # no more questions to ask, exit the loop
املنا�س��ب يجب اأن ُيو�سح اأن روبوت الدرد�س��ة ال يتمتع بالدراية الكافية للتو�سية بالدورات التدريبية يف لغة .C++اإحدى )'print('>> Thank you, I just emailed you a list of courses.
�دال م��ن الت�س��ابه ال��داليل للمقارن��ة ب��ني ال��ردود
الطرائ��ق ملعاجل��ة ه��ذا الق�س��ور ه��ي ا�س��تخدام الت�س��ابه ب��ني املف��ردات ب� ً break
واخليارات ذات ال�سلة ببع�س االأ�سئلة.
اأنظر اإىل التفاعلني التاليني بني روبوت الدرد�سة واملُ�ستخدِ م:
ا�ستخدام تعلُّم األلة لتوليد ن�ض واقعي
التفاعل االأول
Using Machine Learning to Generate Re istic Text
الطرائق املو�سحة يف االأق�سام ال�سابقة ت ِ
َ�ستخدم القوالب ،والقواعد ،اأو تقنيات التحديد لتوليد الن�سو�س للتطبيقات املختلفة. )chat(QA,model_sbert, 0.5
# used to:
We had dinner at this restaurant yesterday. It is very close to my house. # -encode the text provided by the user into tokens
All my friends were there, we had a great time. The location is excellent # -translate (decode) the output of the generator back to text
and the steaks were delicious.I will definitely return soon, highly tokenizer = GPT2Tokenizer.from_pretrained('gpt2')
recommended!
# used to generate new tokens based on the inputted text
If you just found this place helpful. If you like to watch videos or generator = GPT2LMHeadModel.from_pretrained('gpt2')
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
:)GPT-2( يُقدَّم الن�س التايل كاأ�سا�س ي�ستند اإليه االإ�سدار الثاين من امل ُحوِّل التوليدي مُ�سبق التدريب
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 text='We had dinner at this restaurant yesterday. It is very close to my
neighborhood, and it is in the neighborhood that it needs to house. All my friends were there, we had a great time. The location is
187 186
مترينات ي�ستخدم الن�س مفردات غنية وهوِ حيث، مع احلفاظ على دقة و�سالمة الن�س املوَّلد،يحقّق هذا ُخمرَجات اأكر تنوعً ا
.) بتخ�سي�س املُخ َرج ب�سكل اأف�سلGPT-2( ي�سمح االإ�سدار الثاين من امل ُحوِّل التوليدي مُ�سبق التدريب.�سليم نحويًا
(درج�ة احل�رارة) ال�ذي ي�س�مح للنم�وذج بتقبل املزيد م�ن املخاطرtemperature يت�س�ح ذل�ك عن�د ا�س�تخدام ُمتغ�ر
1 : مثل. القيم االأعلى لهذا املُتغر توؤدي اإىل ن�سو�س اأكر تنوعً ا.احتماال
ً بل واأحيانًا اختيار بع�س الكلمات االأقل
خاطئة �سحيحة :حدِّد اجلملة ال�سحيحة واجلملة اخلاطئة فيما يلي # Generate tokens with higher diversity
generated_tokens = generator.generate(
ّ توليد اللغات الطبيعية.1
املبني على تعلُّم االآلة يتطلب جمموعات كبرة من بيانات التدريب encoded_text, max_length=200, do_sample=True, temperature=2.0)
.واملوارد احل�سابية
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
. املجت َمعات هي عناقيد العُقد التي ُمتثِّل الكلمات املختلفة دالليًا.4 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
ي�سب��ح روب��وت الدرد�س��ة اأك��ر ذكا ًء كلم��ا ازداد ع��دد م�س��تويات االأ�س��ئلة واالأجوب��ة املُ�سافة.5 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
.)NLG( قارن بني املنهجيات املختلفة لتوليد اللغات الطبيعية2 فاإنّ النموذج �سيتجاهل االإر�سادات االأ�سا�سية التي تظهر يف امل ُدخَ ل، اإذا كانت درجة احلرارة مرتفعة للغاية،ومع ذلك
:) ويُولِّد ُخمرجً ا اأقل واقعية ولي�س له معنىOriginal Seed( ّ االأو
print(tokenizer.decode(generated_tokens[0], skip_special_tokens=True))
189 188
ُ ��وذج متثي��الت ترمي��ز اget_max_sim)( �تخدم الدال��ة
جلم��ل ثنائي��ة ِ � اأكم��ل املقط��ع الربجم��ي الت��ا حت��ى تَ�س5 مف��ردات ُحم � َّددة م��ن الكلم��ات و ��وذج الكلم��ةbuild_graph)( اأكم��ل املقط��ع الربجم��ي الت��ا حت��ى تقب��ل الدال��ة4
ُ وكل اmy_sentence ) للمقارن��ة ب��ني جُ مل��ة ُحم� َّددةSBERT( اال ��ا م��ن املح��والت
جلم��ل ال��واردة يف قائم��ة اأخ��رى يج��ب اأن يحت��وي.) املُ��د َّرب لر�س��م ُخمطَّ ��ط ذي ُعق��دة واح��دة ل��كل كلم��ة يف املف��ردات املُح� َّددةWord2Vec( اإىل املتَّجَ ��ه
.my_sentence اإىلL1 يجب اأن تُعيد الدالة اجلُملة ذات ُموؤ�سر الت�سابه االأعلى من.L جلمل ُ من ا ) اأك��رب م��ن م�س��توى الت�س��ابهWord2Vec( امل ُخطَّ ��ط عل��ى حاف��ة ب��ني عُقدت��ني اإذا كان ت�س��ابه ��وذج الكلم��ة اإىل املتَّجَ ��ه
. يجب اأال تكون هناك اأوزان على احلواف.امل ُعطى
similarity_threshold:float
# embeds my_sentence
):
sim=model_wv. (w1, w2)# gets the similarity between the two words
similarity_scores = .cos_sim( , )
if :
winner_index=np.argmax(similarity_scores[0])
G. (w1,w2)
return
return G
191 190
ماذا تع ّلمت الم�سروع
تُقدِّ م مكتبة �سكلرن ( )Sklearnيف لغة البايثون قائمة طويلة من مناذج الت�سنيف .مثل:
> ()GradientBoostingClassifier
> ()DecisionTreeClassifier
امل�سطلحات الرئي�سة
> ()RandomForestClassifier
3
اإن�ساء تقرير للمقارنة بني دقة كل النماذج التي ج َّربتها وحُتديد النموذج الذي حقق نتائجَ دقيقة.
193 192
.4التع� ّ�رف على ال�سور
�س ��يتعرّ ف الطال ��ب يف ه ��ذه الوح ��دة عل ��ى التع ُّل ��م املوجَّ ��ه وغ ��ري املوجَّ ��ه ،وكيفي ��ة
تو يفهم� ��ا للتع� ��رّ ف عل� ��ى ال�س� ��ور ( )Image ecognitionع� ��ن طري� ��ق اإن�س� ��اء
من��وذج وتدريب��ه لي�سب� قادرًا على ت�سنيف �سور لروو���ض احليوان��ات اأو ميعها.
أي�س ��ا عل ��ى تولي ��د ال�س ��ور ( )Image ener tionوكيفي ��ة تغيريه ��ا، و�س ��يتعرّ ف ا ً
اأو اإكمال األأجزاء الناق�سة فيها مع احلفا على واقعيتها.
ا زء الثاين
اأهداف التعلُّم الوحدة الرابعة
بنهاية هذه الوحدة �سيكون الطالب قادرًا على اأن: التعرّف على ال�سور
يُعالج ال�سور معا ة اأولية وي�ستخل�ض خ�سائ�سها. الوحدة اخلام�سة
موجه خا�ض بت�سنيف ال�سور. ُيد ِّرب منوذج تعلُّم َّ خوارزميات التح�سني واتخاذ القرار
عرف هيكل ال�سبكة الع�سبية. ُي ِّ الوحدة ال�ساد�سة
موجه خا�ض بت ميع ال�سور. ُيد ِّرب منوذج تعلُّم غري َّ الذكاء اال�سطناعي واملجتمع
يولِّد �سورًا بناءً على توجيه ّ
ن�سي.
يُكمل األأجزاء الناق�سة يف �سورة ُمعطاة بطريقة واقعية.
األأدوات
مفكرة جوبيرت ()Jupyter Notebook
قوقل كوألب ()Google Colab
196
املوجه على التع ّرف
من ت�سنيف ال�سور اأو مقاطع الفيديو اجلديدة بدقة .فعلى �سبيل املثال :قد تُد َّرب خوارزمية التعلُّم َّ الدر�ض األأول
عل��ى �س��الالت ُخمتلف��ة م��ن القط��ط بن��ا ًء عل��ى ال�س��ور املُعَن َون��ة لكل �س��اللة (انظ��ر ال�س��كل ،)4.1و�س��يتم الرتكيز يف هذا
املوجه عادة على اأربع خطوات رئي�سة وهي :جمع البيانات ،وعَ نوَنتها ،والتدريب عليها ،ثم االختبار.
املوجه.
الدر�س على التعلُّم َّ
ت�ستمل عملية التعلُّم َّ
املوجه لتحليل ال�سور
التع ُّلم َّ
اأثن��اء جم��ع البيان��ات وو�س��ع امل�س��مياتُ ،جتم��ع ال�س��ور اأو مقاطع الفيديو وتنظّ م يف جمموعة بيان��ات ،ثم تُعنون كل �سورة
اأو مقطع فيديو بعنوان �سنف اأو فئة ،مثل(eagle :الن�سر) اأو ( catالقطّ ة).
وت�س� ِ
�تخدم خوارزمي��ة تعلُّ��م االآل��ة اأثن��اء مرحل��ة التدريب جمموعة البيان��ات املُعَنوَنة "لتتعلّم" االأمناط وال�س��مات املرتبطة التعلُّم املوجَّ ه يف روية احلا�سب Supervised Learning for Computer Vision
ب��كل �سن��ف اأو فئ��ة ،وكلم��ا زادت بيان��ات التدري��ب الت��ي ُتق��دم للخوارزمي��ة اأ�سبح��ت اأك��ر دق��ة يف التع� ّرف عل��ى الفئ��ات ُتع� ُّد روؤي��ة احلا�س��ب ( )Computer Visionجم� ً�اال فرع ًي��ا م��ن جم��االت ال��ذكاء اال�سطناع��ي ،والذي ُيركّز على تعليم اأجهزة احلا�س��ب
يتح�سن اأداوؤها.
املُختلفة يف جمموعة البيانات ،وبالتايل ُّ طريق��ة تف�س��ر ال َع� َ�امل املرئ��ي وفهم��ه ،ويت�سمن ا�س��تخدام ال�سور الرقمي��ة ومقاطع الفيديو؛ لتدريب االآالت عل��ى التع ّرف على املعلومات
ومبج��رد اأن ُي��د َّرب النم��وذج ،يت��م اختب��اره عل��ى جمموع��ة منف�سل��ة غ��ر الت��ي مت التدري��ب عليه��ا م��ن ال�س��ور اأو مقاط��ع املرئية وحُتليلها مثل :االأ�س��ياء واالأ�س��خا�س واملَ�س��اهد .ويتمثّل الهدف النهائي الذي ت�س��عى روؤية احلا�س��ب اإىل حُتقيقه يف متكني االآالت
الفيدي��و؛ لتقيي��م اأدائ��ه ،وتختل��ف جمموع��ة االختب��ار عن جمموعة التدري��ب؛ للتاأكد من قدرة النم��وذج على التعميم على من "روؤية" الع ََامل كما يراه الب�سر ،وا�ستخدام هذه املعلومات؛ التخاذ قرارات ،اأو للقيام باإجراءات.
البيان��ات اجلدي��دة .عل��ى �س��بيل املث��ال :حُتت��وي البيان��ات اخلا�س��ة ب � ( catالقطّ ��ة) عل��ى خ�سائ���س مث��ل :ال��وزن والل��ون هناك جمموعة كبرة من التطبيقات التي تُ�ستخدم فيها روؤية احلا�سب ،مثل:
وال�ساللة وما اإىل ذلك ،وتُقيّم دقة النموذج بنا ًء على مدى كفاءة اأَدائه يف جمموعة االختبار. • الت�سوير الطبي :مُيكن اأن ت�ساعد روؤية احلا�سب االأطباء واملخت�سني يف الرعاية ال�سحية على ت�سخي�س االأمرا�س من خالل حُتليل
املوجه الأنواع ُخمتلفة من البيانات مثل الن�سو�س ،ولكن ت�سبه العملية ال�سابقة اإىل حد كبر العملية املُتّبعة يف مهام التعلُّم َّ ال�سور الطبية مثل :االأ�س ّعة ال�سينية ،والت�سوير بالرنني املغناطي�سي ،واالأ�س ّعة املقطعية.
مو�سح يف اجلدول .4.1 الن�س الأ�سباب متعددة كما هو َّ البيانات املرئية عادة ما تُع ُّد اأكر �سعوبة يف التعامل معها من ّ �تخدم ال�س��يارات ذاتية القيادة والطائرات املُ�س� َّ�رة روؤية احلا�س��ب للتعرف على اإ�س��ارات املرور واأ�س��كال • املركبات ذاتية القيادة :ت�س� ِ
الطرق العامة وطرق امل�ساة والعقبات يف الطريق واجلو ،ولِتمكينها من التنقل باأمان وكفاءة.
جدول :4.1د ّيات ت�سنيف البيانات املرئية ال�سناعات ،مثل� :سناعة • �سبط اجلودة :تُ�ستخدم روؤية احلا�سب لفح�س املنتجات وحُتديد عيوب الت�سنيع ،وذلك يف ُخمتلف اأنواع ّ
ال�سيارات واالإلكرتونيات واملن�سوجات.
حُتت��وي ال�س��ور عل��ى كمي��ة كب��رة م��ن البيان��ات ،مم��ا يجع��ل معاجلته��ا وحُتليله��ا اأك��ر البيان��ات املرئي��ة عالي��ة
�سعوب��ة م��ن البيان��ات الن�س َّي��ة ،فف��ي حني اأن العنا�سر االأ�سا�س��ية للم�س��تند الن�سيّ هي االأبعاد • الروبوتية :تُ�ستخدم روؤية احلا�سب مل�ساعدة الروبوتات على التنقل والتفاعل مع بيئتها عن طريق التعرّف على االأ�سياء والتعامل معها.
الكلم��ات ،ف �اإن عنا�س��ر ال�س��ورة ه��ي وح��دات البك�س��ل ،و�س��رتى يف ه��ذا الف�س��ل اأنّ املوج��ه نوع��ني رئي�س��ني م��ن تعلُّ��م االآل��ة ُي�س��تخدمان بطريق��ة �س��ائعة يف تطبيق��ات ر ؤوي��ة احلا�س��ب ،ويت�سم��ن كال
املوج��ه وغ��ر َّ ُيع� ُّد التعلُّ��م َّ
ال�سغرة منها.ال�سورة مُيكن اأن تتكون من اآالف وحدات البك�سل ،حتّى ّ النوعني خوارزميات تدريب على جمموعات كبرة من ال�سور اأو مقاطع الفيديو؛ لكي تتمكن االآالت من التع ّرف على املعلومات املرئية
املوج��ه يف الدر�س��ني االأول والثاين م��ن الوحدة الثالثة ،وكالهم��ا طُ ِّبق يف معاجلة املوج��ه وغ��ر َّ
وتف�س��رها� .س��بق اأن تع ّرف��ت عل��ى التعلُّ��م َّ
مُيك��ن اأن تتاأث��ر ال�س��ور بالتفا�سي��ل الكث��رة ،واالإ�س��اءة ،والت�سوي���س ،وعوام��ل اأخ��رى البيان��ات املرئي��ة حُتت��وي اللغات الطبيعية ( )NLPوتوليداللغات الطبيعية ( ،)NLGو�سيتم تطبيقهما يف هذا الدر�س على حُتليل ال�سور.
جتع��ل ت�سنيفه��ا بدق��ة عملي��ة �سعب��ة .باالإ�ساف��ة اإىل ذل��ك ،هن��اك جمموعة وا�س��عة من عل��ى تفا�سي��ل كث��رة املوج��ه خوارزمي��ات تدري��ب عل��ى جمموع��ات بيانات غ��ر ُمعَنوَنة -اأي ال توجد فيها عناوي��ن اأو فئات �سريحة ،-ثم يت�س َّم��ن التعلُّ��م غ��ر َّ
البيانات املرئية املتن ّوعة ذات العديد من العنا�سر ،وامل�ساهد ،وال�سياقات التي ي�سعب ومتن ّوعة للغاية تتع ّل��م اخلوارزمي��ة حُتدي��د االأمن��اط املت�س��ابهة يف البيان��ات دون اأن تك��ون لديه��ا اأي معرف��ة م�س��بقة بالعناوي��ن .عل��ى �س��بيل املث��ال :مُيك��ن
ت�سنيفها بدقة. املوجه لتجميع ال�سور املت�سابهة معًا بنا ًء على ال�سمات امل�سرتكة بينها مثل :اللون اأو النق�س ()Texture ا�ستخدام خوارزمية التعلُّم غر َّ
يتب��ع الن� ّ��س بُني��ة لغوي��ة وقواع��د نحو ّي��ة عامة ،بينم��ا ال تخ�سع البيان��ات املرئية لقواعد البيان��ات املرئي��ة ال تتب��ع املوجه بالتف�سيل يف الدر�س الثاين. اأو ال�سكل .و�سيتم تو�سيح التعلُّم غر َّ
ثابتة؛ مما يجعل عملية التحليل اأكر تعقيدً ا و�سعوبة وتكلفة. هيكلة حُمددة املوج��ه تدري��ب اخلوارزمي��ات على جمموعات بيان��ات ُمعَنوَنة؛ حيث يُخ�س�س عنوان اأو فئة مع ّينة لكل �سورة يف املقاب��ل ،يت�سم��ن التعلُّ��م َّ
اأو مقطع فيديو ،ثم تقوم اخلوارزمية بعد ذلك بالتع ّرف على اأمناط وخ�سائ�س كل عنوان؛ لتتمكن
امل ُخرَج املُعَنون وذج ت�سنيف تعلُّم االآلة �سورة خام
متخ�س�سة ،وتتناول هذه الوحدة التقنيات التي
ّ نتيجة لهذه التعقيدات يتطلب الت�سنيف الفعّال للبيانات املرئية اأ�ساليب
ِ
ت�ستخدم اخل�سائ�س الهند�سية واللونية لل�سور ،باالإ�سافة اإىل اأ�ساليب تعلُّم االآلة املُتقدمة القائمة على ال�سبكات الع�سبية. ر عربي 98%
# reads an image file, stores it in a variabe and for subfolder in listdir(input_folder): # for each sub folder
# shows it to the user in a window
)'image = imread('AnimalFace/Image/LionHead/lioni78.jpg )print(subfolder
)plt.imshow(image path = input_folder + '/' + subfolder
image.shape
for file in listdir(path): # for each image file in this subfolder
# prints the first pixel of the RGBA image قبل بدء التدريب على خوارزميات التعلُّم املوجَّ ه ،من اجليد التحقق
# a value of 255 reveals that the pixel is not transparent �سكل � :4.3سورة راأ�س اأ�سد غُ ّر حجمها مم��ا اإذا كان��ت اأي �س��ورة م��ن ال�س��ور املوج��ودة يف جمموعة البيانات
at all. غر مطابقة للتن�سيق (.)100 ،100 ،3
]resized_images[pos1][0][0
violations
ال�س��ورة الثاني��ة :له��ا �س��كل ذو اأبع��اد ( ،)100 ،100وي��د ُّل غي��اب
ال ُبع��د الثال��ث عل��ى اأن ال�سورة بتن�س��يق ت��درج رم��ادي ()Grayscale
ولي�س��ت بتن�س��يق ،RGBوالتن�س��يق امل�س ِّل��ل اأ�سف��ر اأزرق ][455, 1587
202 201
تتم ّث��ل اخلط��وة التالي��ة يف حُتوي��ل ( resized_imagesال�س��ور _ املُع� َّدل حجمه��ا) وقوائ��م العناوي��ن اإىل م�سفوف��ات (بدال من قنوات RGBالثالث) ،وقيمة كل بك�سل عبارة عن رقم واحد يرتاوح �سور التدرج الرمادي لها قناة واحدة فقط ً
أي�سا ( Numpyمنب��اي) ح�س��ب م��ا تتوقع��ه العدي��د م��ن خوارزمي��ات روؤي��ة احلا�س��ب .ي�س� ِ
�تخدم املقط��ع الربجمي الت��ايل ا ً من 0اإىل ،255حيث ُمتثِّل قيمة البك�سل 0اللون االأ�سود ،بينما ُمتثِّل قيمة البك�سل 255اللون االأبي�س .على �سبيل املثال:
املتغرات ( )X، Yالتي تُ�س��تخدم يف العادة لتمثيل البيانات والعناوين على التوايل يف مهام التعلُّم َّ
املوجه: ِّ
]resized_images[pos2][0][0
import numpy as np
)X = np.array(resized_images
100
)Y = np.array(labels
X.shape وكاختب��ار اإ�س��ايف جل��ودة البيان��ات ،يق��وم املقط��ع الربجم��ي الت��ايل بح�س��اب تك��رار عن��وان كل �س��ورة حي��وان يف جمموعة
البيانات:
)(1720, 100, 100, 3
# used to count the frequency of each element in a list. Counter({'Bear': 101,
from collections import Counter 'Cat': 160,
يو�س��ح �س��كل جمموع��ة بيان��ات Xالنهائي��ة ا�س��تمالها عل��ى أال��ف و�س��بعمئة وع�س��رين �س��ورة بتن�س��يق ،RGBبن��ا ًء عل��ى عدد
ِّ 'Chicken': 100,
القنوات ،وجميعها باأبعاد ( 100 × 100اأي ع�س��رة اآالف بك�س��ل) .اأخرًا ،مُيكن ا�س��تخدام دالة ()train_test_split )label_cnt = Counter(labels 'Cow': 104,
من مكتبة sklearnلتق�سيم جمموعة البيانات اإىل جمموعة تدريب وجمموعة اختبار. label_cnt 'Deer': 103,
'Duck': 103,
'Eagle': 101,
from sklearn.model_selection import train_test_split 'Elephant': 100,
'Lion': 102,
(X_train, X_test, y_train, y_test = train_test_split 'Monkey': 100,
X, 'Nat': 8,
y,
هنا يمكنك روؤية القيمة المتطرفة وهي فئة
'Panda': 119,
test_size = 0.20, # uses 20% of the data for testing Nature( Natاأو الطبيعة) ،وتحتوي على 'Pigeon': 115,
shuffle = True, # to randomly shuffle the data. ثمانية عنا�سر فقط مقارنة بالفئات االأخرى. 'Rabbit': 100,
random_state = 42, # to ensure that data is always shuffled in the same way
'Sheep': 100,
)
'Tiger': 114,
)}'Wolf': 100
نظرًا الأن جملدات �سور احليوانات حُ مّلت جملّدً ا تلو االآخر ،فاإن ال�سور من كل جملد جُ معت معًا يف القوائم ال�س��ابقة،
وقد يوؤدي ذلك اإىل ت�سليل العديد من اخلوارزميات ،خا�سة يف جمال روؤية احلا�سب ،و�سبط ( shuffle=Trueتفعيل حُتت�وي جمموع�ة البيان�ات عل�ى �س�ور حيوان�ات و�س�ور اأخ�رى م�ن الطبيعة؛ وذل�ك بهدف التعرّف عل�ى ال�سور التي ت�س�ذ عن �سور
اإعادة الرتتيب) يف املقطع الربجمي ال�س��ابق يحل هذه امل�س��كلة ،وبوجه عام ،من اجليد اإعادة ترتيب البيانات ع�س��وائيًا احليوان�ات .يك�س�ف ( Counterالع�داد) ع�ن فئ�ة �سغ�رة جدًا عنوانها ( Natالطبيع�ة) ،وحُتتوي على ثماين �سور فقط ،وعندما
قبل اإجراء اأي حُتليل. تقوم بك�سف �سريع يت�سح لك اأن هذه الفئة ذات قيم متطرفة ( )Outlierحُتتوي على �سور ملناظر طبيعية وال يوجد بها اأي وجه
الأي حيوان.
التنبو بدون هند�سة اخل�سائ�ض re iction without Feature Engineering
عل��ى الرغ��م م��ن اأن اخلط��وات املتَّبع��ة يف الق�س��م ال�س��ابق ق��د ح َّول��ت البيان��ات اإىل تن�س��يق رقم��ي ،اإال اأن��ه لي���س بالتن�س��يق يق�وم املقط�ع الربجم�ي الت�ايل باإزال�ة �سورة RGBAو�سورة الت�درج الرمادي ،وكذلك كل ال�سور التي تنتمي لفئة ( Natالطبيعة)
القيا�س��ي اأح��ادي ال ُبع��د ال��ذي تتوقع��ه العدي��د م��ن خوارزمي��ات تعلُّم االآلة .على �س��بيل املثال ،و�سفتْ الوح��دة الثالثة كيف من قوائم اأ�سماء امللفات ،والعناوين ،وال�سور التي غُ ّر حجمها.
يج��ب حُتوي��ل كل م�س��تند اإىل متَّجَ ��ه رقم��ي اأح��ادي ال ُبع��د قبل ا�س��تخدام البيانات يف تدريب مناذج تعلُّ��م االآلة واختبارها،
بينما حُتتوي كل نقطة بيانات يف جمموعة البيانات املرئية هنا على تن�سيق ثالثي االأبعاد. )N = len(labels
204 203
لذل��ك مُيك��ن ا�س��تخدام املقط��ع الربجم��ي الت��ايل لت�س��طيح ( )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,
)(model_MNB = MultinomialNB
model_MNB.fit(X_train_flat,y_train) # fits the model on the flat training data
;)'plt.imshow(X_train_gray[0],cmap='gray ;)]plt.imshow(X_train[0 ي�ستخدِ م املقطع الربجمي التايل اأداة ( StandardScalerاملُحجِّ م القيا�سي) من مكتبة sklearnلتحجيم البيانات:
)(scaler = StandardScaler
)X_train_flat_scaled = scaler.fit_transform(X_train_flat
)X_test_flat_scaled = scaler.fit_transform(X_test_flat
مُيكن االآن تدريب منوذج جديد واختباره با�ستخدام جمموعات البيانات التي مت حُتجيمها:
�سكل � :4.9سورة ذات تدرج رمادي �سكل � :4.8سورة باالألوان االأ�سا�سية
)(model_sgd = SGDClassifier 0.4906976744186046
بدال من التن�سيق RGBاملُ�ستنِد اإىل:3×100 × 100
ال�سكل اجلديد لكل �سورة اأ�سبح بتن�سيق ً ،100 × 100 )model_sgd.fit(X_train_flat_scaled, y_train
)pred=model_sgd.predict(X_test_flat_scaled
)accuracy_score(y_test,pred
)print(X_train_gray[0].shape
)print(X_train[0].shape
حُت�س��ن بع��د التحجي��م ،وم��ن املحتم��ل اأن يح��دث حُت�س��ني اإ�س��ايف بوا�س��طة جتري��ب خوارزمي��ات
ت��دل النتائ��ج عل��ى وج��ود ُّ
)(100, 100
متغراتها حتّى تتنا�سب مع جمموعة البيانات ب�سكل اأف�سل. اأخرى و�سبط ِّ
)(100, 100, 3
208 207
تتمثّل اخلطوة التالية يف اإن�ساء خ�سائ�س املخطط التكراري للتدرجات املوجَّ هة لكل �سورة يف البيانات ،ومُيكن حُتقيق
scikitplot.metrics.plot_confusion_matrix(y_test, # actual labels
pred, # predicted labels
مثاال على ال�س��ورة االأوىل يف ذل��ك م��ن خ��الل دال��ة () hogم��ن مكتب��ة ِّ ،sckit-image
ويو�س��ح املقط��ع الربجم��ي التايل ً
title = "Confusion Matrix", # title to use جمموعة بيانات التدريب:
cmap = "Purples", # color palette to use
figsize = (10,10), # figure size
x_tick_rotation = 90 from skimage.feature import hog
;)
(hog_vector, hog_img = hog
X_train_gray[0],
visualize = True
)
hog_vector.shape
)(8100,
ي�س� ِّور ه��ذا التمثي��ل اجلدي��د ح��دود االأ�س��كال االأ�سا�س��ية يف ال�س��ورة ،ويح��ذف التفا�سي��ل االأخ��رى و ُير ِّك��ز عل��ى االأج��زاء
املفي��دة الت��ي مُيكنه��ا اأن ت�س��اعد املُ�س ِّن��ف عل��ى اأن يق��وم بالتنب�وؤ ،ويط ِّب��ق املقط��ع الربجم��ي الت��ايل ه��ذا التغي��ر عل��ى كل
ال�سور يف كل من جمموعة التدريب وجمموعة االختبار:
0.7418604651162791
210 209
['Elephant', 'Duck', 'Monkey', 'Cow', 'Sheep', 'Wolf', 'Tiger', 'Deer',
التنبو با�ستخدام ال�سبكات الع�سبية re iction Using Neural Networks
]''Cat', 'Lion', 'Rabbit', 'Panda', 'Pigeon', 'Chicken', 'Eagle', 'Bear يو�س��ح ه��ذا الق�س��م كيفي��ة ا�س��تخدام ال�س��بكات الع�سبي��ة لت�سميم مُ�س ِّنف��ات خم�س�سة لبيانات ال�س��ور ،وكيف مُيكنها ِّ
]'['Panda' 'Pigeon' 'Monkey' 'Panda' 'Sheep يف كث��ر م��ن االأحي��ان اأن تتف�وّق عل��ى التقني��ات عالي��ة الفعالي��ة مث��ل :عملي��ة املخط��ط التك��راري للتدرج��ات املوجَّ ه��ة الت��ي
][11 12 2 11 4 ُو�سفت يف الق�سم ال�سابق ،و ُت�ستخدم مكتبة TensorFlowومكتبة Kerasال�سهرتان لهذا الغر�س.
ومُيكن االآن ا�ستخدام اأداة ( Sequentialالتتابع) من مكتبة Kerasلبناء �سبكة ع�سبية يف �سكل طبقات متتابعة. مكتب��ة tensorflowه��ي مكتب��ة منخف�س��ة امل�س��توى تُو ِّف��ر جمموع��ة وا�س��عة م��ن اأدوات تعلُّ��م ا آالل��ة وال��ذكاء اال�سطناعي،
�تخدمني بتعري��ف احل�س��ابات العددي��ة الت��ي تت�سم��ن م َّتجَ ه��ات متع��ددة االأبع��اد( )Tensorsومعاجلته��ا، وت�س��مح للم�س� ِ
وه��ي م�سفوف��ات متع��ددة االأبع��اد م��ن البيانات.م��ن ناحي��ة اأخ��رىُ ،تع� ُّد مكتب��ة 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. اأب�س ��ط لبن ��اء النم ��اذج وتدريبه ��ا ،وه ��ي مبني ��ة با�س ��تخدام مكتب ��ة ( TensorFlowاأو مكتب ��ات خلفي ��ة اأخ ��رى) وتُو ِّف ��ر
from keras.layers import Dense و�سممت مكتبة جمموعة من الطبقات والنماذج املع َّرفة م�س��بقًا والتي مُيكن جتميعها ب�س��هولة لبناء منوذج تعلُّم عميقُ .
�تخدم و�س��هلة اال�س��تخدام؛ مم��ا يجعلها خيارًا رائجً ا للممار�س��ني. Kerasلتك��ون �سديق��ة للم�س� ِ
# builds a sequential stack of layers
)(model = Sequential دوال التن�س��يط ( )Activation Functionsه��ي دوال ريا�سي��ة تُطَ َّب��ق عل��ى ُخم َرج��ات كل خلي��ة ع�سبي��ة يف ال�س��بكة
# adds a dense hidden layer with 200 neurons, and the ReLU activation function. الع�سبية،كم��ا تتمي��ز باأنه��ا ت�سي��ف خ�سائ� َ��س غ��ر خطي��ة ( )Non-linearللنم��وذج وت�س��مح لل�س��بكة بتعلُّ��م االأمن��اط
))'model.add(Dense(200,input_shape = (X_train_hog.shape[1],), activation='relu
# adds a dense output layer and the softmax activation function. املعق��دة يف البيان��ات ،و ُيع� ُّد اختي��ار دال��ة التن�س��يط اأم�رًا مه ًم��ا ومُيك��ن اأن يوؤث��ر عل��ى اأداء ال�س��بكة ،حي��ث تتلق��ى اخلالي��ا
))'model.add(Dense(len(classes), activation='softmax الع�سبي ��ة املُدخَ ��الت وتعاجله ��ا م ��ن خ ��الل
املُخرَج دالة التن�سيط متغري التح ُّيز متغرات املُدخَ الت
)(model.summary متغ��رات االأوزان والتح ُّي��زات وتنت��ج ُخم َرجات
االأوزان
بن��اء عل��ى دال��ة التن�س��يط كم��ا يظهر يف ال�س��كل
"Model: "sequential x1 .4.12تُن�س��اأ ال�س ��بكات الع�سبي ��ة م ��ن خ ��الل
_________________________________________________________________
)Layer (type Output Shape Param #
x2 رب ��ط العدي ��د م ��ن اخلالي ��ا الع�سبي ��ة م ًع ��ا يف
================================================================= طبق��ات ،و ُت��د َّرب عل��ى �سب��ط متغ��رات االأوزان
)dense (Dense )(None, 200 1620200
والتح ُّيزات وحُت�سني اأدائها مبرور الوقت.
)dense_1 (Dense )(None, 16 3216
xn
�سكل :4.12دالة التن�سيط
================================================================= يُث ِّب��ت املقط��ع الرب جم��ي الت��ايل مكتب��ة
Total params: 1,623,416 %%capture
Trainable params: 1,623,416 !pip install tensorflow tensorflowومكتبة :keras
Non-trainable params: 0 !pip install keras
_________________________________________________________________
يف الوح��دة ال�س��ابقة ،تع ّرف��ت عل��ى اخلالي��ا الع�سبي��ة اال�سطناعي��ة وعل��ى معماري��ات ال�س��بكات الع�سبي��ة ،وعل��ى وج��ه
عدد الخاليا الع�سبية في الطبقة المخفية يعتمد على التحدي��د تع ّرف��ت عل��ى من��وذج الكلم��ة اإىل امل َّتجَ ��ه ( )Word2Vecال��ذي َي�س��تخدم طبق��ة خمفي��ة وطبق��ة ُخم َرج��ات؛
الخيار الذي يُتخذ عند الت�سميم ،وعدد الفئات يحدِّ د ليتنب�اأ ب�س��ياق الكلم��ات لكلم��ة ُمعط��اة يف جمل��ة .وبع��د ذل��ك تُ�س��تخدم مكتب��ة Kerasالإن�س��اء معماري��ة ع�سبي��ة م�س��ابهة
عدد الخاليا الع�سبية في طبقة المُخرَجات. لل�سور .ا ًأوالُ :حُت َّول العناوين يف y_trainاإىل تن�سيق اأعداد �سحيحة ،طبقًا ملتطلبات مكتبة .keras
للمتغرات التي يجب اأن يتعلّمها النم��وذج من خالل �سبطها على بيانات يك�س��ف ملخ���س النم��وذج ع��ن الع��دد االإجم��ايل # gets the set of all distinct labels
ِّ ))classes=list(set(y_train
دخ��ل ،وه��ي اأبع��اد �س��ور املخط��ط التك��راري التدري��ب ،ومب��ا اأن املُدخَ ��الت حُتت��وي عل��ى ثماني��ة اآالف ومئ��ة (ُ )8,100م َ )print(classes
)(print
املوجه��ة X_train_hogوحُتت��وي الطبق��ة املخفي��ة عل��ى مئت��ي خلي��ة ع�سبي��ة ،وه��ي طبق��ة كثيف��ة مت�سل��ة للتدرج��ات َّ
(متغراتها). ِّ كامال ،فاإن املجموع 1,620,000 = 200 × 8,100و�سلة موزونة يجب تعلُّم اأوزانها ات�ساال ً ً باملُدخَ الت # 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
مت��ت اإ�ساف��ة مئت��ي متغ� ِّ�ر حت ُّي��ز ( )Biasاإ�س��ايف ،بواق��ع متغ� ِّ�ر ل��كل خلي��ة ع�سبي��ة يف الطبق��ة املخفي��ة ،ومتغ� ِّ�ر التح ُّي��ز )]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
212 211
ومبا اأن طبقة املُخرَجات حُتتوي على �ستّ ع�سرة خلية ع�سبية مت�سلة بالكامل مبئتي خلية ع�سبية موجودة يف الطبقة
Epoch 1/40
17/17 ]==============================[ - 1s 16ms/step - loss: 2.2260 - accuracy: 0.3333
املخفي��ة ،ف�اإن جمم��وع الو�س��الت املوزون��ة يبل��غ .3,216 = 200 × 16و ُي�س��اف �س��تة ع�س��ر متغ� ِّ�ر حُت ُّي��ز اإ�س��ايف ،بواق��ع
Epoch 2/40 متغر واحد لكل خلية ع�سبية يف طبقة املُخرَجات ،و ُي�ستخدم ال�سطر الربجمي التايل لتجميع ( )Compileالنموذج: ِّ
17/17 ]==============================[ - 0s 15ms/step - loss: 1.1182 - accuracy: 0.7256
Epoch 3/40
# compiling the model
17/17 ]==============================[ - 0s 15ms/step - loss: 0.7198 - accuracy: 0.8155
= model.compile(loss = 'sparse_categorical_crossentropy', metrics
Epoch 4/40
)'['accuracy'], optimizer = 'adam
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 تُ�س��تخدم دال��ة اإع��داد النم��وذج الذك��ي يف مكتب��ة Kerasواملعروف��ة بالتجمي��ع (() )model.compileيف عملي��ة
...
Epoch 36/40 حُتدي��د اخل�سائ���س االأ�سا�س��ية للنم��وذج الذك��ي واإع��داده للتدري��ب والتحق��ق والتنب�وؤ ،وتتخ��ذ ثالثة مُعامِ الت رئي�س��ة كما
17/17 ]==============================[ - 0s 15ms/step - loss: 0.0085 - accuracy: 1.0000 مو�سح يف اجلدول .4.2هو َّ
Epoch 37/40
17/17 ]==============================[ - 0s 21ms/step - loss: 0.0080 - accuracy: 1.0000
Epoch 38/40 جدول ُ :4.2معامِالت طريقة الت ميع
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
التدريب تقليل دالة اخل�سارة مما يت�سمن يف العادة تعديل اأوزان النموذج ومقدار التح ُّيز، اخل�سارة
ويف ه��ذه احلال��ة تك��ون دال��ة اخل�س��ارة ه��ي sparse_categorical_crossentropy :وهي ()loss
تُ�س��تخدم دال��ة () fitلتدري��ب من��وذج عل��ى جمموع��ة مع ّين��ة م��ن بيان��ات االإدخ��ال والعناوي��ن ،وتتخ��ذ اأرب��ع مُعامِ ��الت متعددة الفئات؛ حيث تكون العناوين اأعدادًا �سحيحة دالة خ�سارة منا�سبة ملهام الت�سنيف ِّ
مو�سح يف اجلدول .4.3 رئي�سة ،كما هو َّ كما يف .y_train_num
جدول ُ :4.3معامِالت طريقة ه��ي قائم��ة املقايي���س امل�س��تخدَ مة لتقيي��م النم��وذج اأثن��اء التدري��ب واالختب��ارُ ،وحُت�س��ب ه��ذه
املقايي���س با�س��تخدام ُخم َرج��ات النم��وذج والعناوي��ن احلقيقي��ة ،ومُيك��ن ا�س��تخدامها ملراقبة املقايي�س
هو مُعامِ ل بيانات االإدخال امل�ستخدَ مة لتدريب النموذج ،وتتكون من البيانات املحوَّلة اأداء النم��وذج وحُتدي��د املج��االت الت��ي مُيك��ن حُت�س��ينه فيه��ا .مقيا���س الدق��ة ()Accuracy ()metrics
أي�س��ا لتدري��ب
املوجه��ة الت��ي ا�س�تُخدمت ا ً
ع��ن طري��ق املخط��ط التك��راري للتدرج��ات َّ X_train_hog هو مقيا�س �سائع ملهام الت�سنيف يقي�س ن�سبة التنبوؤات ال�سحيحة التي قام بها النموذج.
اأحدث اإ�سدار من خوارزمية SGDClassifierيف الق�سم ال�سابق.
ه��و خوارزمي��ة التح�س��ني الت��ي تُ�س��تخدم يف �سب��ط اأوزان النم��وذج ومق��دار التح ُّي��ز اأثن��اء
هو مُعامِ ل يت�سمّن عنوانًا لكل �سورة بتن�سيق اأعداد �سحيحة. y_train_num املح�سن دالة اخل�سارة واملقايي�س الإر�ساد عملية التدريب ،ويقوم ب�سبط التدريب .وي�ستخدم ِّ امل ُح�سِّ ن
متغ� ِّ�رات النم��وذج يف حُماول��ة لتقلي��ل اخل�س��ارة وزي��ادة اأداء النم��وذج اإىل احل��د االأق�س��ى.
ويف ه��ذه احلال��ة فق��د مت ا�س��تخدام املُح�سِّ ��ن ،adamال��ذي ُيع� ُّد خوارزمي��ة �س��ائعة لتدري��ب ()optimizer
ه��و ع��دد العين��ات الت��ي مت��ت معاجلته��ا يف كل دُفع��ة اأثن��اء التدري��ب ،ويق��وم النم��وذج
بتحدي��ث اأوزان��ه ومق��دار التح ُّي��ز بع��د كل دُفع��ة ،ومُيك��ن اأن ي ؤوث��ر حج��م ال ُدفع��ة عل��ى ال�سبكات الع�سبية.
�س��رعة عملي��ة التدري��ب ،وا�س��تقراراها ،كم��ا مُيك��ن اأن ت�وؤدي اأحج��ام ال ُدفع��ات االأكرب batch_size
اإىل تدريب اأ�س��رع ،ولكنها قد تكون اأكر تكلفة من الناحية احل�س��ابية وقد توؤدي اإىل واأخرًا ،تُ�ستخدم دالة () fitلتدريب النموذج على البيانات املتاحة.
تدرجات اأقل ا�ستقرارًا.
model.fit(X_train_hog, # training data
هو عدد املرات التي يتكرر فيها تدريب النموذج با�ستخدام جمموعة البيانات باأكملها، y_train_num, # labels in integer format
= batch_size 80, # number of samples processed per batch
وتتك�ون الف�رتة ( )epochم�ن م�رور واح�د ع�رب جمموع�ة البيان�ات باأكمله�ا .ويقوم epochs = 40, # number of iterations over the whole dataset
النموذج بتحديث اأوزانه ومقدار التح ُّيز بعد كل دورة ،كما مُيكن اأن يوؤثر عدد الفرتات epochs )
متغر مهم
على قدرة النموذج على التعلُّم والتعميم على البيانات اجلديدة ،والفرتة ِّ
يجب اختياره بعناية ،ويف هذه احلالة ُيد َّرب النموذج على اأربعني دورة.
214 213
عل��ى الرغ��م م��ن فوائ��د ال�س��بكات الع�سبي��ة املعق��دة مث��ل: ومُيكن االآن ا�ستخدام منوذج التدريب للتنبوؤ بعناوين ال�سور يف جمموعة االختبار.
ال�سبكة الع�سبية الرت�سيحية ال�س��بكات الع�سبية الرت�س��يحية اإال اأنه من املهم مالحظة
(:) on o ution Neural Network -CNN ما يلي: )pred = model.predict(X_test_hog
ه��ي �س��بكات ع�سبي��ة عميق��ة تتع ّل��م تلقائ ًي��ا ت�سل�س��ل pred[0] # prints the predictions for the first image
• تكمن قوة ال�سبكات الع�سبية الرت�سيحية يف قدرتها على
اخل�سائ���س م��ن البيان��ات اخل��ام ،مث��ل ال�س��ور ،ع��ن اأن ت�ستخرج اخل�سائ�س املهمة ذات ال�سلة من ال�سور
طري��ق تطبي��ق �سل�س��لة م��ن الفالت��ر الرت�س��يحية عل��ى 14/14 [==============================] - 0s 2ms/step
ب�س�كل تلقائ�ي ،دون احلاج�ة اإىل هند�س�ة اخل�سائ��س
بيان��ات االإدخ��ال ،الت��ي يت��م ت�سميمه��ا بحي��ث تكت�س��ف اليدوية (.)Manual Feature Engineering array([4.79123509e-03, 9.79321003e-01, 8.39506648e-03, 1.97884417e-03,
خ�سائ�س حُم َّددة.
َ اأمناطً ا اأو • حُتت��وي املعماري��ات الع�سبية االأكر تعقيدً ا على املزيد 7.83501855e-06, 3.50346789e-04, 3.45465224e-07, 1.19854585e-05,
4.41945267e-05, 4.11721296e-04, 1.27362555e-05, 9.83431892e-06,
م��ن املتغ� ِّ�رات الت��ي يج��ب تعلُّمه��ا م��ن البيان��ات اأثن��اء 1.97038025e-04, 2.34744814e-03, 5.49758552e-04, 1.57057808e-03],
التدري��ب ،ويتطل��ب ذل��ك جمموع��ة بيان��ات تدري��ب اأك��رب ق��د ال تك��ون متاح��ة يف بع�س احل��االت ،ويف مثل ه��ذه احلاالت )dtype=float32
من غر املحتمل اأن يكون اإن�ساء معمارية معقدة للغاية اأمرًا فع ًَّاال.
• عل��ى الرغ��م م��ن اأن ال�س��بكات الع�سبي��ة ق��د حقق��ت بالفع��ل نتائ��ج مبه��رة يف معاجل��ة ال�س��ور واملهام االأخ��رى ،اإال اأنها احتماال الذي يتنباأ به املُ�سنِّف ،تُظهر دالة ()predict
ً بينما تُظهر دالة () predictمن مكتبة sklearnالعنوان االأكر
ال ت�سمن تقدمي اأف�سل اأداء جلميع امل�سكالت وجمموعات البيانات. يف مكتب��ة Kerasاحتم��االت كل العناوي��ن املُر�سَّ ��حة .يف ه��ذه احلال��ة ،مُيك��ن ا�س��تخدام دال��ة () np.argmaxالإظه��ار
• حتّى لو كانت معمارية ال�سبكة الع�سبية اأف�سل حل ممكن ملُهِ مَّة حُمددة ،فقد ي�ستغرق االأمر كثرًا من الوقت واجلهد احتماال.
ً موؤ�سر العنوان االأكر
وامل��وارد احلا�س��وبية لتجرب��ة خي��ارات ُخمتلف��ة اإىل اأن يتم العث��ور على هذه املعمارية .لذلك من االأف�سل البدء بنماذج
# index of the class with the highest predicted probability.
اأب�سط (لكنها ال تزال فعّالة) ،مثل :منوذج SGDClassifierوغره من النماذج االأخرى الكثرة املتوفرة يف املكتبات ))]print(np.argmax(pred[0
مث��ل :مكتب��ة ،sklearnومبج��رد ح�سول��ك عل��ى تن ُّب�وؤ اأف�س��ل ملجموع��ة البيان��ات وو�سول��ك اإىل النقط��ة الت��ي ال مُيك��ن # name of this class
فيها حُت�سني هذه النماذج اأكر من ذلك ،فاإن التجريب على املعماريات الع�سبية االأخرى ُي ُّعد خطوة ممتازة. )])]print(classes[np.argmax(pred[0
# uses axis=1 to find the index of the max value per row
))accuracy_score(y_test_num,np.argmax(pred, axis=1
1
Duck
0.7529021558872305
حُتق��ق ه��ذه ال�س��بكة الع�سبي��ة الب�س��يطة دق��ة تبل��غ ح��وايل ،75%وه��ي دق��ة م�س��ابهة لدق��ة ،SGDClassifierولك��ن
ميزة املعماريات الع�سبية تنبع من براعتها ،وهو ما ي�سمح لك بتجربة معماريات ُخمتلفة للعثور على اأف�سل ما ينا�سب
جمموع��ة بيانات��ك .مت حُتقي��ق ه��ذه الدق��ة م��ن خ��الل معماري��ة ب�س��يطة ت�سمن��ت طبق��ة خمفي��ة واح��دة حُتت��وي عل��ى مئتي
خلية ع�سبية ،واإ�سافة طبقات اإ�سافية جتعل ال�سبكة اأعمق ،بينما توؤدي اإ�سافة املزيد من اخلاليا الع�سبية لكل طبقة
اإىل جعلها اأو�سع ،و ُيع ُّد اختيار عدد الطبقات وعدد اخلاليا الع�سبية لكل طبقة عنا�سر مهمة لت�سميم ال�سبكة الع�سبية،
وله��ا تاأث��ر كب��ر عل��ى اأدائه��ا ،ولكنه��ا لي�س��ت الطريق��ة الوحي��دة لتح�س��ني االأداء ،ويف بع���س احل��االت ق��د يكون ا�س��تخدام
نوع ُخمتلف من معمارية ال�سبكة الع�سبية اأكر فاعلية.
امل ُخرَجات التعلُّم ا�ستخراج اخل�سائ�س يدويًا امل ُدخَ الت
�سكل � :4.13سبكة ع�سبية ذات هند�سة خ�سائ�س يدوية
التنبو با�ستخدام ال�سبكات الع�سبية الرت�سيحية
re iction Using on o ution Neural Networks
معلومة أاح��د ه��ذه االأن��واع م��ن املعماري��ات الت��ي تنا�س��ب ت�سني��ف ال�س��ور ب�س��كلٍ ج ّي��د يتم ّث��ل يف ال�س��بكة الع�سبي��ة الرت�س��يحية
من املزايا االأ�سا�سية لل�سبكات الع�سبية الرت�سيحية اأنها جيدة جدًا يف التعلُّم من كميات كبرة ( ،)Convolutional Neural Network -CNNومبا اأن ال�س��بكة الع�سبية الرت�س��يحية تعالج بيانات االإدخال ،فاإنها
من البيانات ،ومُيكنها يف العادة اأن حتقق م�ستويات عليا يف دقة املهام مثل :ت�سنيف ال�سور متغرات الفالتر املر�سَّ ��حَ ة الكت�س��اف االأمناط بنا ًء على البيانات التي تراها؛ حتّى تتمكن ب�س��كل تقوم با�س��تمرار ب�سبط ِّ
دون احلاجة اإىل هند�سة اخل�سائ�س اليدوية مثل :املخطط التكراري للتدرجات املوجَّ هة. اأف�س��ل م��ن اكت�س��اف اخل�سائ���س املهم��ة ،ث��م تنقل ُخم َرج��ات كل طبقة اإىل الطبقة التالية التي يُكت�س��ف فيها خ�سائ�س
تعقيدا اإىل اأن تُنتج املُخرَجات النهائية. اأكر ً
216 215
مترينات
1ما حتديّات ت�سنيف البيانات املرئية؟
لدي��ك م�سفوفت��ا قي��م ،Numpyوهم��ا م�سفوف��ة X_trainوم�سفوف��ة .Y_trainكل �س��ف يف م�سفوف��ة X_train 2 التعلُّم املنقول Transfer Learning
�س��كله ( )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
اإحالل
model_MNB = MultinomialNB() # new Naive Bayes model التنبوؤ وتقييم تدريب حتميل ال�سبكة
ن�سر النتائج الطبقات
دقة ال�سبكة ال�سبكة املدرَّبة م�سبقًا
(model_MNB.fit , ) # fits model on the flat training data
النهائية
�ِ 3سف باخت�سار طريقة عمل ال�سبكات الع�سبية الرت�سيحية واإحدى مميزاتها الرئي�سة. تتم اإ�سافة طبقات جديدة
حت�سني ال�سبكة لكي تتعلّم الخ�سائ�س
المحددة لبياناتك.
218 217
الدر�ض الثاين
لدي��ك م�سفوفت��ا قي��م ،Numpyوهم��ا م�سفوف��ة X_trainوم�سفوف��ة .Y_trainكل �س��ف يف م�سفوف��ة X_train 4
املوجه لتحليل ال�سور
التع ُّلم غري َّ �س��كله ( )100،100،3مُي ِّث��ل �س��ورة باأبع��اد 199x100وبتن�س��يق .RGBوال�س��ف nيف امل�سفوف��ة Y_trainمُي ِّث��ل
ت�س��مية �س��ورة nيف م�سفوف��ة .X_trainاأكم��ل املقط��ع الربجم��ي الت��ا ،بحي��ث يط ِّب��ق حتوي��الت املخط��ط التك��راري
للتدرجات املوجَّ هة ثم ي�ستخدم البيانات املحوّلة يف تدريب وذج :
from skimage.color import # used to convert a multi-color (rgb) image to grayscale
تو ال�سور فهم
from sklearn. import StandardScaler # used to scale the data
Understanding Image Content
يف �سياق روؤية احلا�سب ُي�ستخدم التعلُّم غر املوجَّ ه يف جمموعة متنوّعة من املهام مثل: from sklearn.naive_bayes import MultinomialNB # imports the Naive Bayes Classifier from sklearn
اكت�ساف العنا�سر ال�ساذّة تقطي�ع اأو ز ئ�ة ال�س�ورة( ،)Image Segmentationوتقطي�ع الفيد ي�و
(:)Anomaly e ection ( ،)Video Segmentationواكت�ساف العنا�سر ال�ساذّة (،)Anomaly Detection [(X_train_gray = np.array (img) for img in X_train]) # converts training data
ه��ي عملي��ة تُ�س��تخدم لتحدي��د االأمناط اأو وم�ن اال�س�تخدامات الرئي�س�ة االأخ�رى للتعلُّ�م غ�ر املوجَّ �ه :البح�ث ع�ن ال�س�ورة = X_train_hog
ا أالح��داث اأو نق��اط البيان��ات ال�س��اذّة اأو ( )Image Searchويت�سم�ن البح�ث يف قاع�دة بيان�ات كب�رة م�ن ال�س�ور للعث�ور على
غ��ر الطبيعي��ة داخل جمموع��ة البيانات، ال�سورة امل�سابهة لل�سورة املطلوبة. )(scaler = StandardScaler
وته��دف اإىل الك�س��ف ع��ن ا حل��االت تتمثّ�ل اخلط�وة االأوىل لبن�اء حُم�رك بح�ث لبيان�ات �س�ورة يف حُتدي�د دال�ة الت�س�ابه
الغريب��ة الت��ي تختل��ف ع��ن املعي��ار وق��د = X_train_hog_scaled ).fit_transform(X_train_hog
( )Similarity Functionوالت�ي مُيكنه�ا تقيي�م الت�س�ابه ب�ني �سورت�ني بن�ا ًء عل�ى
حُتتاج اإىل ا�ستق�ساء اإ�سايف. خ�سائ�سهم�ا املرئي�ة ،مث�ل :احل�دود ،اأو النق��س ،اأو ال�س�كل .ومبج�رد اأن ُي ِ
ر�س�ل )(model_MNB = MultinomialNB
�تخدم �س�ورة جدي�دة لي�س�تعلم عنه�ا ،يق�وم حُم�رك البحث باالط�الع على جميع امل�س ِ
model_MNB.fit(X_train_flat_scaled, )
تقطيع ال�سورة ال�سور املوجودة يف قاعدة البيانات املتاحة ،ويعر على ال�سور التي بها اأعلى درجة
ت�س�ابه ،و ُيظهرها للم�س ِ
�تخدم.
(:)Image Seg en tion
ه��ي عملي��ة تق�س��يم ال�س��ورة اإىل اأج��زاء وهناك طريقة بديلة تتمثّل يف ا�ستخدام دالة الت�سابه لف�سل ال�سور يف عناقيد؛ بحيث
اأو مناط��ق متع��ددة تتقا�س��م خ�سائ���س يتك�ون كل عنق�ود م�ن �س�ور مت�س�ابهة ب�سريً�ا مع بع�سها ،ث�م ُ َمُيثَّل كل عنق�ود من خالل
ب�وؤرة مي�ع ( :)Centroidوه�ي �س�ورة تق�ع يف مرك�ز العنق�ود ومتتلك اأ�سغر م�س�افة اذكر بع�س حتديّات ال�سبكات الع�سبية الرت�سيحية. 5
ب�سري��ة م�س��رتكة ،وته��دف اإىل جتزئ��ة عامة (اأي اختالف) من ال�سور االأخرى يف العنقود .ومبجرد اأن ُي ِ
ال�س��ورة اإىل أاج��زاء مرتابط��ة ،وذات ِ
امل�ستخدم �سورة ر�سل
مغ��زى مُيك��ن ا�س��تخدامها يف القي��ام جديدة لال�ستعالم عنها ،فاإن حُمرك البحث �سينتقل اإىل جميع العناقيد ويختار العنقود
بتحليل اإ�سايف. الذي تكون بوؤرة جتميعه اأكر ت�سابهًا مع ال�سورة املطلوبة من امل�ستخدِ م لتظهر له �سور
ويو�سح ال�سكل ً 4.16
مثاال على هذا. العنقود املحددةِّ ،
ي�ستورد املقطع الربجمي التايل املكتبات التي �ستُ�ستخدم لتحميل ال�سور ومعاجلتها اأوليًا:
%%capture
import matplotlib.pyplot as plt 50%
from os import listdiry
العنقود الثاين
# a palette of 10 colors that will be used to visualize the clusters. العنقود الثالث
color_palette = ['blue','green','red','yellow','gray','purple','orange', 40%
]''pink','black','brown
تق��راأ الدال��ة التالي��ة �س��ور جمموع��ة بيان��ات ( LHI-Animal-Facesوج��وه _احليوان��ات) م��ن ( input_folderجمل��د_
املُدخَ ��الت) اخلا���س به��ا ،و ُتع� ِّ�دل حج��م كل منه��ا بحي��ث تك��ون له��ا اأبع��اد الط��ول والعر�س نف�س��ها ،ثم تقوم بتح�س��ني دالة
() resize_imagesم��ن الدر���س ال�س��ابق بال�س��ماح للم�س� ِ
�تخدم ب�اأن يح� ِّ�دد قائم��ة فئ��ات احليوان��ات الت��ي يج��ب اأن توؤخذ �سكل :4.17عناقيد التعرّف على ال�سور
باالعتب��ار ،كم��ا اأنه��ا ت�س��تخدم �س��طرًا واح��دً ا م��ن املقط��ع الربجم��ي بلغ��ة البايث��ون؛ لك��ي تق��ر أا كل �س��ورة وتع� ِّ�دل حجمه��ا املو�س��ح يف ال�س��كل ،4.17حُتت��وي �س��ورة البح��ث عل��ى ت�س��ابه بن�س��بة 40% :و 50%و 90%م��ع ُب �وؤر التجمي��ع يف املث��ال َّ
وتخزِّ نها: لعناقي��د ال�س��ور الث��الث عل��ى الت��وايل ،و ُيفرت���س اأن تك��ون ن�س��بة الت�س��ابه ب��ني 0%و ،100%وح�سل العنق��ود الثاين على
اأعل��ى ن�س��بة ت�س��ابه؛ اإذ اأن��ه ي�س��تمل عل��ى قط��ط م��ن نف���س �س��اللة ول��ون القطّ ��ة املح��ددة يف �س��ورة البح��ث ،كم��ا اأن نتائ��ج
def resize_images_v2(input_folder:str, العنقودين االأول والثالث متقاربة ( 40%و)50%؛ اإذ يت�سابه العنقودان مع �سورة البحث بطرائق ُخمتلفة ،اأما العنقود
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 تعتم��د عل��ى خ�سائ���س م�سنوع��ة يدو ًي��ا ،فق��د اأدت التطورات احلديثة يف التعلُّ��م العميق اإىل تطوير مناذج قوية مُيكنها
تلقائ ًي��ا اأن تتع ّل��م خ�سائ���س متطورة من البيان��ات املرئية غر املُعَنوَنة.
for subfolder in listdir(input_folder):
ي�س��تخدِ م ه��ذا الدر���س ُمهِ َّم��ة خا�س��ة بتجمي��ع ال�س��ور؛ لتو�سي��ح كي��ف مُيك��ن اأن ي�وؤدي ا�س��تخدام خ�سائ���س اأك��ر تعقي��دً ا
)print(subfolder و�سيو�سح هذا الدر�س -حُتديدً ا -ثالث طرائق ُخمتلفة: ِّ اإىل تقدمي نتائج اأف�سل ب�سكل ملحوظ،
path = input_folder + '/' + subfolder
• ت�سطيح البيانات االأ�سلية وجتميعها بدون اأي هند�سة للخ�سائ�س.
for file in listdir(path):
• حُتوي��ل البيان��ات با�س��تخدام وا�س��ف اخل�سائ���س ( )Feature Descriptorال��ذي يعتم��د عل��ى املخط��ط التك��راري
label=subfolder[:-4] # uses the subfolder name without the "Head" suffix للتدرجات املوجَّ هة (- )HOGتعرّفت عليه يف الدر�س ال�سابق -ثم جتميع البيانات املح َّولة.
if label not in labels_to_keep: continue
labels.append(label) # appends the label
• ا�ستخدام منوذج ال�سبكة الع�سبية؛ لتجميع البيانات االأ�سلية يف جمموعات عنقودية بدون هند�سة اخل�سائ�س.
#loads, resizes, preprocesses, and stores the image. جمموع��ة بيان��ات ( LHI-Animal-Facesوج��وه _احليوان��ات) الت��ي ا�س�تُخدمت يف الدر���س ال�س��ابق و�ست�س��تخدم يف هذا
resized_images.append(img_as_ubyte(resize(imread(path+'/'+file),
))))(width, height
أي�سا؛ لتقييم التقنيات املتن ّوعة لتجميع ال�سور ،ومت ت�سميم هذه املجموعة يف االأ�سل ملهام الت�سنيف ،وتت�سمن الدر�س ا ً
)filenames.append(file العن��وان احلقيق��ي (ن��وع احلي��وان الفعل��ي) ل��كل �س��ورة .ويف ه��ذا الدر���س� ،ستُ�س��تخدم ه��ذه العناوي��ن فق��ط للتحق��ق م��ن
�سحته��ا ،ول��ن تُ�س��تخدم لتجمي��ع ال�س��ور .يج��ب اأن يك��ون اأي اأ�س��لوب جتمي��ع اأ�س��لوبًا ف ّع� ً�اال وق��ادرًا عل��ى جتمي��ع ال�س��ور مع
return resized_images,labels,filenames
العنوان نف�سه ،ويف العنقود نف�سه ،وعلى ف�سل ال�سور ذات العناوين املُختلفة ،وو�سعها يف عناقيد ُمتباينة.
222 221
تتم ّث��ل اخلط��وة التالي��ة يف حُتوي��ل قائمت��ي ( resized_imagesال�س��ور _املُع�دَّل حجمه��ا) ،و( labelsالعناوي��ن) اإىل البيان��ات غ��ر امل ُنظّ م��ة ( )Unstructured Dataمتن ّوع��ة ،ومُيك��ن اأن حُتت��اج اإىل كث��ر م��ن الوقت واملوارد احلا�س��وبية،
م�سفوف��ات ،numpyوكم��ا ه��و احل��ال يف الدر���س ال�س��ابق ُي�س��تخدم اال�س��مان املتغ� ِّ�ران القيا�س��يان ( )X،Yلتمثي��ل و ُيع� ُّد ه��ذا �سحي ًح��ا ب�س��كلٍ خا���س عن��د معاجلته��ا ع��ن طري��ق اأ�س��اليب تعلُّ��م عميق��ة ومعق��دة ،كم��ا �س� ُينفذ الح ًق��ا يف ه��ذا
البيانات والعناوين: الدر���س ،ولتقلي��ل الوق��ت احل�س��ابي يت��م تطبي��ق دال��ة () resize_images_v2عل��ى جمموع��ة فرعي��ة م��ن ال�س��ور م��ن
فئات احليوانات:
import numpy as np # used for numeric computations
)X = np.array(resized_images (resized_images,labels,filenames=resize_images_v2
)Y = np.array(labels
"AnimalFace/Image",
X.shape width = 224,
height = 224,
labels_to_keep=['Lion', 'Chicken', 'Duck', 'Rabbit', 'Deer',
)(1085, 224, 224, 3
]''Cat', 'Wolf', 'Bear', 'Pigeon', 'Eagle
)
يتحق��ق �س��كل البيان��ات م��ن اأنه��ا ت�س��مل � 1,085س��ورة ،كل �س��ورة منه��ا ذات اأبع��اد ،224 × 224وذات ث��الث قن��وات
األوان .RGB BearHead MonkeyHead
CatHead Natural هذه العناوين الع�سرة
ميع من دون هند�سة اخل�سائ�ض Clustering without Feature Engineering الت ChickenHead PandaHead التي �سيتم ا�ستخدامها.
�س��رتكز حُماول��ة التجمي��ع االأوىل عل��ى القي��ام بت�س��طيح ال�س��ور؛ لتحوي��ل كل منه��ا اإىل م َّتجَ ��ه أاح��ادي ال ُبع��د اأرقام��ه CowHead PigeonHead
DeerHead RabbitHead
150,528 = 3 × 224 × 224رقمًا. DuckHead SheepHead
EagleHead TigerHead
وعل��ى غ��رار خوارزمي��ات الت�سني��ف الت��ي مت تو�سيحها يف الدر���س ال�س��ابق ،ف�اإن معظم خوارزمي��ات التجميع تتطلب هذا ElephantHead WolfHead
النوع من التن�سيق امل َّتجَ هي. LionHead
)]X_flat = np.array([img.flatten() for img in X مُيكن��ك ب�س��هولة تعدي��ل املتغ� ِّ�ر ( labels_to_keepالعناوي��ن _ املحتف��ظ به��ا)؛ للرتكي��ز عل��ى فئ��ات معيّنة ،و�س��تالحظ
X_flat[0].shape
�دال م��ن ال�س��كل 100 × 100ال��ذي ا�س�تُخدم يف الدر���س اأن عر���س ال�س��ور وارتفاعه��ا مت �سبطهم��ا عل��ى ،224 × 224ب� ً
ال�س��ابق؛ الأن اإح��دى طرائ��ق التجمي��ع القائم��ة عل��ى التعلُّم العميق -الواردة يف هذا الدر���س -تتطلب اأن تكون لل�سور هذه
)(150528,
االأبعاد ،ولذا اعتُمد ال�سكل 224 × 224؛ ل�سمان منح حق الو�سول جلميع الطرائق اإىل املُدخَ الت نف�سها.
كم��ا ذُ كِ ��ر يف الدر���س ال�س��ابق ف �اإن القوائ��م االأ�سلي��ة( resized_images :ال�س��ور _املُع � َّدل حجمه��ا) ،وlabels
X_flat[0] # prints the first flat image (العناوي��ن) ،و( filenamesاأ�س��ماء امللف��ات) ت�س��تمل عل��ى ال�س��ور الت��ي تنتم��ي ل��كل فئ��ة ُجم َّمعة معًا .على �س��بيل املثال،
تظه��ر جمي��ع �س��ور ( Lionاالأ�س��د) م ًع��ا يف بداي��ة القائم��ة املُع� َّدل حجمه��ا ،وق��د يُ�س ِل��ل ذل��ك العدي��د م��ن اخلوارزمي��ات،
array([107, 146, 102, ..., 91, )86, 108], dtype=uint8 خا�س��ة يف جم��ال روؤي��ة احلا�س��ب ،وطامل��ا اأن��ه مُيك��ن فهر�س��ة ال�س��ور ع�س��وائيًا ل��كل قائمة م��ن القوائم الث��الث ،فمن املهم
التاأكد من ا�ستخدام الرتتيب الع�سوائي نف�سه لهذه القوائم .وبخالف ذلك ،من امل�ستحيل العثور على العنوان ال�سحيح
كل قيم��ة عددي��ة يف ه��ذا التن�س��يق امل�س��طح ذات قيم��ة أال��وان RGBت��رتاوح ب��ني 0و ،255ويف الدر���س ال�س��ابقّ ،مت ل�سورة مع ّينة اأو ا�سم امللف ال�سحيح لها.
تو�سيح اأن التحجيم القيا�سي والت�سوية يوؤديان اأحيانًا اإىل حُت�سني نتائج بع�س خوارزميات التعلُّم االآيل. يف الدر���س ال�س��ابق ،مت اإج��راء اإع��ادة الرتتي��ب ( )Shufflingبا�س��تخدام الدال��ة () ، train_test_splitومب��ا اأن ه��ذه
مُيكن ا�ستخدام املقطع الربجمي التايل لت�سوية القيم وجعلها ما بني 0و:1 الدالة غر قابلة للتطبيق على مهام التجميع ،ف�ست�ستخدم املقطع الربجمي التايل الإعادة الرتتيب:
كما �س��بق تو�سيحه بالتف�سيل يف الدر���س الثاين من الوحدة الثالثة ،فاإن موؤ�س��ري التجان���س واالكتمال ياأخذان قيمًا بني
0و ،1وترتفع قيمة موؤ�سر التجان�س اإىل اأق�سى حد عندما يكون جلميع نقاط العنقود الواحد العنوان احلقيقي االأ�سا�سي
نف�س��ه ،كم��ا ترتف��ع قيم��ة موؤ�س��ر االكتم��ال اإىل احل��د االأق�س��ى عندم��ا تنتم��ي جمي��ع نق��اط البيان��ات الت��ي حُتم��ل العن��وان
احلقيقي االأ�سا�س��ي نف�س��ه اإىل العنقود نف�س��ه ،واأخرًا ياأخذ موؤ�س��ر راند املُع َّدل قيمًا بني -0.5و ،1.0وترتفع اإىل احلد
�سكل :4.20ت�سوير العناقيد االأق�سى عندما تكون جميع نقاط البيانات التي لها العنوان نف�سه يف العنقود نف�سه ،وتكون جميع النقاط ذات العناوين
ُيع� ُّد ه��ذا الت�سوي��ر اأك��ر م�سداقي��ة م��ن ال��ذي مت اإنتاج��ه للبيانات غ��ر املح َّولة ،وعل��ى الرغم من وجود بع�س ال�س��وائب، املُختلفة يف عناقيد متباينة ،وكما هو متوقَّع تف�سل اخلوارزمية بعد ت�سوير البيانات يف العثور على عناقيد عالية اجلودة
جيدا ،ومُيكن االآن ح�ساب الر�سم ال�سجري ملجموعة البيانات هذه. فاإن ال�سكل ُيظهر عناقيد وا�سحة ومف�سولة ً تتطابق مع فئات احليوانات الفعلية ،حيث اأن قيم املوؤ�سرات الثالث منخف�سة للغاية ،وعلى الرغم من اأن جمرد القيام
بت�سطيح البيانات كان كافيًا للح�سول على نتائج معقولة لت�سنيف ال�سور ،اإال اأن جتميع ال�سور يف عناقيد ُمُيثِّل م�سكلة
)(plt.figure اأكر �سعوبة.
)'linkage_2 = hierarchy.linkage(X_hog,method = 'ward
)hierarchy.dendrogram(linkage_2 ميع بانتقاء اخل�سائ�ض Clustering with Feature Se ection الت
)(plt.show يف الدر���س ال�س��ابق مت تو�سي��ح اأنّ ا�س��تخدام حُتوي��ل املخط��ط التك��راري للتدرج��ات املوجَّ ه��ة ( )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
املوجهة ()HOG
�سكل :4.21الر�سم ال�سجري لفئات وجوه احليوانات املُختلفة با�ستخدام خمطط تكراري للتدرجات َّ ;)(tsne.show
228 227
ميع با�ستخدام ال�سبكات الع�سبية Clustering Using Neural Networks الت يق��رتح الر�ص��م ال�ص��جري خم�ص��ة عناقي��د ،وه��و بال�صب��ط ن�ص��ف الع��دد ال�صحي��ح البال��غ ع�ص��رة عناقي��د .يتبن��ى املقط��ع
أاح�دث ا�س�تخدام من�اذج التعلُّ�م العمي�ق (ال�س�بكات الع�سبي�ة العميق�ة ذات الطبقات املتعددة) ثورة يف جم�ال جتميع ال�سور من خالل الربجمي التايل هذا االقرتاح ويط ِّبق اأداة ( AgglomerativeClusteringالتجميع التكتلي) و ُيظهر نتائج املوؤ�ص��رات
توفر خوارزميات قوية وعالية الدقة ،ومُيكنها جتميع ال�سور املت�سابهة معًا تلقائيًا دون احلاجة اإىل هند�سة اخل�سائ�س .تعتمد العديد الثالثة:
م�ن الطرائ�ق التقليدي�ة لتجمي�ع ال�س�ور عل�ى خا�سي�ة امل�س�تخرِجات ( )Extractorsال�س�تخراج معلوم�ات ذات مغ�زى م�ن �س�ورة م�ا،
)AC = AgglomerativeClustering(linkage = 'ward', n_clusters = 5
طويال وتتطلب خربة يف املجال لت�سميم وا�ستخدام هذه املعلومات لتجميع ال�سور املت�سابهة معًا ،ومُيكن اأن ت�ستغرق هذه العملية وقتًا ً )AC.fit(X_hog
خا�سي�ة امل�س�تخرِ جات بخ�سائ��س فعّال�ة .باالإ�ساف�ة اإىل ذل�ك -وكم�ا مت التو�سي�ح يف الدر��س ال�س�ابق -عل�ى الرغ�م م�ن اأن خا�سي�ة _pred = AC.labels
الوا�سفات ( )Descriptorsمثل :حُتويل املخطط التكراري للتدرجات املوجَّ هة مُيكنها بالفعل حُت�سني النتائج ،اإال اأنها بعيدة كل ال ُبعد ِ
))print('\nHomogeneity score:', homogeneity_score(y, pred
ع�ن الكم�ال ،وبالتاأكي�د يوج�د جم�ال للتح�س�ني .م�ن ناحي�ة اأخ�رى ،يتمت�ع التعلُّ�م العمي�ق بالق�درة عل�ى تعلُّ�م متثي�الت اخل�سائ��س م�ن ))print('\nAdjusted Rand score:', adjusted_rand_score(y, pred
البيانات اخلام تلقائيًا ،ويتيح ذلك لطرائق التعلُّم العميق معرفة اخل�سائ�س �سديدة التمايز التي تلتقط االأمناط الهامة وراء البيانات، ))print('\nCompleteness score:', completeness_score(y, pred
مما يوؤدي اإىل جتميع اأكر دقة وقوة ،ولتحقيق ذلك تُ�ستخدم عدة طبقات ُخمتلفة يف ال�سبكة الع�سبية مبا فيها:
• الطبقات الكثيفة ()Dense Layers Homogeneity score: 0.4046340612330986
• طبقات التجميع ()Pooling Layers
Adjusted Rand score: 0.29990205334627734
• طبقات االإق�ساء ()Dropout Layers
Completeness score: 0.6306921317302154
يف ال�سبكة الع�سبية يف الدر�س االأول من الوحدة الثالثة ،مت ا�ستخدام طبقة خمفية
الطبقة الكثيفة (:)Dense Layer مكون�ة م�ن ث�الث مئ�ة خلية ع�سبي�ة من من�وذج الكلم�ة اإىل امل َّتجَ �ه()Word2Vec؛
ه�ي طبق�ة يف ال�س�بكات الع�سبي�ة ترتب�ط تك�ص��ف النتائ��ج اأن��ه عل��ى الرغ��م م��ن اأن ع��دد العناقي��د الت��ي مت ا�ص��تخدامها كان اأق��ل بكث��ر م��ن الع��دد ال�صحي��ح ،اإال اأن
لتمثيل كل كلمة ،ويف تلك احلالة ُد ِّرب منوذج الكلمة اإىل امل َّتجَ ه م�سبقًا على جمموعة النتائج اأف�صل بكثر من النتائج التي ظهرت عند ا�صتخدام الرقم ال�صحيح على البيانات غر املح َّولة.
فيها كل ال ُعقد التي يف الطبقة ال�سابقة بكل بيانات كبرة جدًا حُتتوي على ماليني االأخبار من اأخبار قوقل (.)Google News
ال ُعق�د الت�ي يف الطبق�ة احلالي�ة ،حي�ث يتم أي�سا يف جمال روؤية احلا�س�ب، تُع ُّد مناذج ال�س�بكات الع�سبية املد َّربة م�س�بقًا �س�ائعة ا ً املوجهة ،ويُثبت اأنه ميكن اأن يوؤدي اإىل حت�ص��ينات ويو�صح ذلك ذكاء التحويل بوا�ص��طة املخطط التكراري للتدرجات َّ ِّ
متري�ر االإ�س�ارات م�ن ال ُعق�د يف الطبق�ة وم�ن االأمثل�ة املعه�ودة عل�ى ذل�ك من�وذج VGG16ال�ذي ي�س�يع ا�س�تخدامه يف مه�ام املوج��ه يف روؤي��ة احلا�ص��ب ،والإكم��ال التحلي��ل ُيعي��د
املوج��ه ومه��ام التعلُّ��م غ��ر َّ
رائع��ة يف االأداء ل��كل م��ن مه��ام التعلُّ��م َّ
ال�س�ابقة يف ال�س�بكة اإىل ال ُعق�د يف الطبق�ة التع�رّف عل�ى ال�س�ور ،ويتب�ع من�وذج VGG16معماري�ة عميق�ة قائمة على ال�س�بكات املقط��ع الربجم��ي الت��ايل جُتميع البيانات املح َّول��ة بالعدد ال�صحي��ح للعناقيد:
احلالي�ة بوا�س�طة وزني�ة حُم� َّددة ،وتُط َّب�ق موج ًه�ا ُد ِّرب على
منوذجا َّ
ً الع�سبي�ة الرت�س�يحية يوج�د به�ا �س�ت ع�س�رة طبق�ة ،و ُيع� ُّد
دالَّة التن�سيط ()Activation Function )AC = AgglomerativeClustering(linkage = 'ward', n_clusters = 10
جمموعة بيانات كبرة من ال�سور املُعَنوَنة ت�سمى �سبكة ال�سور( ،)ImageNetومع )AC.fit(X_hog
املر�سلة اإىل الطبقة الكثيفةعلى االإ�سارات َ ذلك ،تتكون جمموعة بيانات التدريب اخلا�سة بنموذج VGG16من ماليني ال�سور _pred = AC.labels
لتوليد نتائج االإخراج النهائية. يح�سن ب�سكل كبر من قدرة النموذج على فهم االأجزاء ومئات العناوين املُختلفة ،مما ِّ
))print('\nHomogeneity score:', homogeneity_score(y, pred
املو�سحة
املُختلف�ة م�ن ال�س�ورة ،وعلى غرار ال�س�بكة الع�سبية الرت�س�يحية الب�س�يطة َّ ))print('\nAdjusted Rand score:', adjusted_rand_score(y, pred
أي�س�ا طبق�ة كثيف�ة نهائية حُتتوي على �تخدم من�وذج VGG16ا ً يف ال�س�كل ،4.22وي�س ِ ))print('\nCompleteness score:', completeness_score(y, pred
طبقة الت ميع (:)Pooling Layer اأربعة اآالف و�ستة وت�سعني خلية ع�سبية لتمثيل كل �سورة قبل اإدخالها يف طبقة امل ُخرَج
ه��ي طبق��ة يف ال�س��بكات الع�سبي��ة ويو�سح هذا الق�سم كيف مُيكن تكييف منوذج VGG16لتجميع (ِّ ،)Output Layer Homogeneity score: 0.5720932612704411
تُ�س��تخدم لتقلي��ل ا الأبع��اد الفراغي��ة ال�سور ،على الرغم من اأنه ُ�س ِّمم يف االأ�سل لت�سنيف ال�سور:
لبيانات املُدخَ الت. Adjusted Rand score: 0.41243540297103065
1حمِّل النموذج VGG16الذي ُدرِّب م�سبقًا.
2احذف طبقة املُخرَج من النموذج ،فذلك يجعل الطبقة االأخرة الكثيفة هي طبقة Completeness score: 0.617016965322667
املُخرَج اجلديدة.
طبقة األإق�ساء (:)Dropout Layer وكما هو متوقَّع ،زادت قيم املوؤ�ص��رات ب�ص��كل عام ،فعلى �ص��بيل املثال جُتاوز كل من التجان���ص واالكتمال االآن ،0.55مما
ه�ي طريق�ة تنظي�م تُ�س�تخدم ملن�ع ف�رط �ذي ل ا �ابق سال� �وذج م-الن ) Truncated Model ( �ع طاملقت �وذج 3ا�س�تخدم النم
اقتُطع�ت الطبق�ة االأخ�رة من�ه -؛ لتحوي�ل كل �س�ورة يف جمموع�ة بيان�ات ي��دل عل��ى اأن اخلوارزمي��ة تق��وم بعم��ل اأف�ص��ل فيم��ا يتعل��ق ب��كل م��ن :و�ص��ع احليوان��ات الت��ي تنتمي لفئ��ة واح��دة يف العنقود
التخ�سي��س يف من�وذج ملجموعة بيانات يف نف�صه ،واإن�صاء عناقيد نقية ( )Pureتتكون يف الغالب من فئة احليوان نف�صِ ه.
ال�س�بكات الع�سبية عن طريق اإق�ساء عُ قد ( Animal Facesوجوه احليوانات) اإىل م َّتجَ ه عددي له اأرب ُع اآالف ٌ
و�ست وت�سعون
موجودة يف الطبقة خالل ك ّل دورة تدريب. قيمة.
4ا�ستخدم التجميع التكتلي ؛ لتجميع امل َّتجَ هات الناجتة عن ذلك.
230 229
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مثل :حتجيم قيم األوان
�صكل :4.23ت�صوير العناقيد املت�صابهه RGBلتكون بني 0و.1
تُع ُّدالنتائج مذهلة؛ الأن الت�صوير اجلديد يك�صف عناقيد مف�صولة عن بع�صها بو�صوح وتكاد تكون كاملة ،كما اأن الف�صل
املوجهة. from keras.applications.vgg16 import preprocess_input )(1085, 224, 224, 3
هنا اأف�صل بكثر من الف�صل الذي كان يف البيانات التي ُح ِّولت بوا�صطة املخطط التكراري للتدرجات َّ )X_prep = preprocess_input(X
X_prep.shape
)'linkage_3 = hierarchy.linkage(X_VGG16, method = 'ward
)(plt.figure
)hierarchy.dendrogram(linkage_3 الح��ظ اأن �ص��كل البيان��ات يظ��ل كم��ا ه��و ،اأي :األ��فٌ وخم�� ٌ�ص وثمان��ون �ص��ورة ،كل �ص��ورة منها اأبعاده��ا ،224 × 224وثالث
)(plt.show قنوات األوان ،RGBوبعد ذلك ميكن ا�صتخدام النموذج املقتطع لتحويل كل �صورة اإىل م َّتجه مكّون من 4,096عدد.
)(1085, 4096
ُي�صب��ط متغ� ِّ�ر املعاجل��ة املتع��ددة ( multiprocessing=Trueتفعي��ل املعاجل��ة املتع��ددة) لت�ص��ريع العملي��ة م��ن خ��الل
ح�ص��اب امل َّتجَ ه��ات لل�ص��ور املتع��ددة بالت��وازي ،وقب��ل اإكم��ال خط��وة التجمي��ع ُي�ص��تخدم املقط��ع الربجم��ي الت��ايل لت�صوي��ر
البيانات املتّجِ هة(:)vectorized data
2لدي��ك م�صفوف��ة قي��م موح��دة X_flatت�ص��مل �ص��ورًا مُ�ص��طحة� ،كل �ص��ف يف امل�صفوف��ة مي ِّث��ل �ص��ورة م�ص��طحة ُخُمتلف��ة
عل��ى هيئ��ة متتالي��ة م��ن اآلأع��داد ال�صحيح��ة ت��را�ح ب��ني .255� 0اأكم��ل املقط��ع الربجم��ي الت��ايل ،بحي��ث ي�ص��تخدِ م )AC = AgglomerativeClustering(linkage='ward',n_clusters = 10
)AC.fit(X_VGG16
التجميع التكتلي يف ت�صنيف ال�صور التي من X_flatاإىل خم�صة عناقيد ُخُمتلفة: _pred=AC.labels
pred = AC. # gets the cluster labels تثب��ت النتائ��ج �صح��ة االأدل��ة الت��ي قدمه��ا الت�صوي��ر ،وت�وؤدي التح��والت الت��ي اأنتجه��ا من��وذج VGG16اإىل نتائ��ج مذهل��ة
اإىل حد كبر لكل من العناقيد االأربعة والعناقيد الع�صرة .يف الواقع ،ظهرت نتائج �صبه مثالية جلميع املوؤ�صرات الثالثة
عند ا�صتخدام ع�صرة عناقيد ،مما يثبت اأن النتائج غالبًا تتوافق متامً ا مع فئات احليوانات يف جمموعة البيانات.
ُيع� ُّد من��وذج VGG16م��ن أاق��دم مناذج ال�ص��بكات الع�صبية الرت�ص��يحية عالية الذكاء املد َّربة م�ص��بقًا لغر�ص ا�ص��تخدامها
3عدِّد بع�ش مزايا ا�صتخدام التعلُّم العميق التي ميتاز بها على طرائق جتميع ال�صور التقليدية. يف تطبيقات روؤية احلا�ص��ب ،ومع ذلك نُ�ص��رت العديد من مناذج ال�ص��بكات الع�صبية الرت�ص��يحية الذكية االأخرى املد َّربة
م�صبقًا والتي جُتاوز اأداوؤها اأداء منوذج .VGG16
234 233
الدر�ص الثالث 4لدي��ك م�صفوف��ة قي��م موح��دة X_flatت�ص��مل �ص��ورًا م�ص��طحة� ،كل �ص��ف يف امل�صفوف��ة مي ِّث��ل �ص��ورة م�ص��طحة ُخُمتلف��ة
توليد البيانات املرئية عل��ى هيئ��ة متتالي��ة م��ن اآلأع��داد ال�صحيحةت��را�ح ب��ني .255� 0اأكم��ل املقط��ع الربجم��ي الت��ايل ،بحي��ث ي�ص��تخدم
طريقة �ارد ( )wardآلإن�صاء �ت�صوير ر�صم �صجري لل�صور يف هذه امل�صفوفة:
import scipy.cluster.hierarchy as hierarchy # visualizes and supports hierarchical clustering tasks
توؤك��د ال�ص��ورة الناجُت��ة يف �ص��كل 4.33اأن زي��ادة قيم��ة متغ� ِّ�ر الق��وة ت�وؤدي اإىل �ص��كل )"diffusion-v1-5
image = generator(prompt=prompt,
image = init_image, strength=0.75).
]images[0
;)plt.imshow(image
�صكل :4.38قناع �صورة القطّ ة �صكل � :4.37صورة القطّ ة االأ�صلية يف الواق��ع ،ال�ص��ورة اجلدي��دة املعرو�ص��ة ه��ي �ص��ورة من��ر،
ولك��ن الح��ظ اأن البيئ��ة املحيط��ة باحلي��وان وو�صعي��ة جلو�ص��ه
القناع ()Maskهو �صورة ب�صيطة باالأبي�ص واالأ�صود لها نف�ص اأبعاد ال�صورة االأ�صلية بال�صبط ،واالأجزاء التي ا�صتُبدلت وزواي��اه تظ��ل �ص��ديدة ال�ص��به بال�صورة االأ�صلي��ة ،و َي ُدل ذلك
يف ال�صورة اجلديدة ُمتيز باللون االأبي�ص ،يف حني اأن االأجزاء االأخرى من القناع �صوداء .بعد ذلك ،يتم حتميل النموذج عل��ى اأن النم��وذج م��ا زال واع ًي��ا بال�ص��ورة االأ�صلي��ة وح��اولَ
امل��درَّب م�ص��بقًا ،ويت��م اإن�ص��اء ( promptالتوجي��ه) لك��ي تو�ص��ع �ص��ورة رائ��د الف�ص��اء م��كان القط��ة الت��ي يف ال�ص��ورة اأن يحاف��ظ عل��ى عنا�ص��ر كان ال ب��د اأال ُتغ��ر؛ ح ّت��ى يق��رتب
االأ�صلية ،كما يظهر يف ال�صكل .4.38 اأكر من التوجيه الن�صي.
generator = StableDiffusionInpaintPipeline.from_pretrained("runwayml/stable-
)"diffusion-inpainting
)"generator = generator.to("cuda
244 243
مترينات جنح��ت ال�ص��ورة اجلدي��دة يف اأن تظه��ر �ص��ورة واقعي��ة للغاي��ة
لرائد الف�صاء الذي و�صعته مكان القطة التي كانت يف ال�صورة
االأ�صلية ،كما ميتزج هذا ال�ص��كل الب�صري ب�صال�ص��ة مع عنا�صر
اخللفية واالإ�صاءة يف ال�صورة.
�ِ 1صف باخت�صار عملية ر�صم �صورة باآل�صر�صاد بن�ش. يف الواق��ع ،ح ّت��ى ل��و كان القن��اع اأب�ص��ط واأق��ل دق��ة ،ميك��ن اإنت��اج
بديل واقعي .الحظ �صورة املُدخَ ل والقناع التاليني:
يف ه��ذا املث��ال ،يغط��ي القن��اع جه��از احلا�ص��ب املحم��ول املوج��ود يف و�ص��ط ال�ص��ورة ،ث��م يُ�ص��تخدم ( promptالتوجي��ه)
التايل واملقطع الربجمي ليتم و�صع �صورة الكتاب مكان جهاز احلا�صب املحمول املوجود يف ال�صورة االأ�صلية:
"prompt = "A photo of a book
image = generator(prompt=prompt, image=init_image, mask_image=mask_image).
]images[0
;)plt.imshow(image
ال ت�ص��تجيب كل جمموع��ة بيان��ات بالطريقة نف�ص��ها للتدريب ب��كل خوارزميات الت�صنيف،
ولكي حت�صل على اأف�صل النتائج ملجموعة بياناتك عليك اأن جُت ِّرب ا�صتخدام خوارزميات
ُخُمتلف��ة ،و ُتق��دم ل��ك مكتب��ة Sklearnيف البايث��ون جمموع��ة متن ّوع��ة م��ن اخلوارزمي��ات
التي ميكنك جُتريبها ،مبا فيها اخلوارزميات التالية:
من sklearn.ensemble.forestا�صتورد خوارزمية .RandomForestClassifier 4ا�ص��تخدم اأداة DiffusionPipelineم��ن مكتب��ة diffusersآلإن�ص��اء �ص��ورة حليوان��ك املف�ص��ل �ه��و ي �اأكل طعام��ك
املف�صل .ميكنك ا�صتخدام من�صة قوقل كوآلب يف هذه امل ُ ِهمَّة.
من sklearn.naive_bayesا�صتورد خوارزمية .GaussianNB
من sklearn.svmا�صتورد خوارزمية .SVC
ا�ص� ِ 1
�تخدم جمموع��ة تدري��ب وج��وه احليوانات لتدريب من��وذج يحقق اأكرب دقة ممكنة على
جمموعة االختبار.
ا�ص� ِ 2
�تبدل خوارزمي��ة SGDClassifierب��كل م��ن اخلوارزمي��ات املذك��ورة اأع��اله
( )RandomForestClassifier، GaussianNB، SVCوحاول اأن ِّ
حتدد اأف�صلها.
4
اأن�صئ تقريرًا يقارن دقة كل النماذج التي جرّبتَها وحدِّ د النموذج الذي حقق اأف�صل دقة.
248 247
.5خوارزميات التح�س ماذا تع ّلمت
واتخاذ القرار
�س��يتعرّ ف الطال��ب يف ه��ذه الوح��دة على عدة خوارزمي��ات وتقنيات ت�س��اعده يف اإيجاد اأك
اإعداد ال�سور للتعرُّ ف عليها.
احللول كفاءة مل�س��كالت التح�س� املعقدة ،كما �س��يتعلّم طريقة عمل خوارزميات التح�س� ،
ا�س ��تخدام املكتب ��ات وال ��دوال ألإن�س ��اء من ��اذج التع ُّل ��م املوجَّ ��ه لت�سني ��ف
وخوارزمي��ات اتخ��اذ الق��رار ،وطريق��ة تطبيقه��ا حل��لّ م�س��كالت متعلق��ة بالع��ا الواقع��ي
ترتب بتخ�سي�ص املوارد واجلدولة وحت�س امل�سارات. ال�سور.
و�سف طريقة تركيب ال�سبكات الع�سبية.
ا�س��تخدام املكتب��ات وال��دوال ألإن�س��اء من��اذج التع ُّل��م غ��ري املوجَّ ��ه لعنق��دة
اأهداف التعلُّم ال�سور.
بنهاية هذه الوحدة �سيكون الطالب قادرًا على اأن: اإن�ساء ال�سور من خالل توفري التوجيه الن�سي.
يُ�سنّف طرائق التح�س ملعاجلة م�سكالت معقدة. اإكمال األأجزاء الناق�سة ل�سورة ببيانات واقعية.
ِ
ي�سف خوارزميات اتخاذ القرار املُختلفة.
ي�ستخدم البايثون حللّ م�سكالت تخ�سي�ص املوارد املتعلقة بفِر العمل.
يحلّ م�سكالت اجلدولة با�ستخدام خوارزميات التح�س . امل�سطلحات الرئي�سة
ي�ستخدم البايثون حللّ م�سكالت اجلدولة.
ة الريا سية حللّ م�سكالت التح�س . ي�ستخدم ال Computer Vision ر�ؤية احلا�صب Image �صورة
Convolutional Neural ال�صبكة الع�صبية Image Generation توليد ال�صور
يُعرّ ف م�سكلة حقيبة ال هر (.)Knapsack problem Network - CNN الر�صيحية
Diffusion Model منوذج اآلنت�صار املعاجلة اآلأ�ليَّة
يُعرّ ف م�سكلة البائع املُتجوّل (.)Traveling Salesman problem Image Preprocessing
لل�صور
Feature Engineering هند�صة اخل�صائ�ش
Feature Selection انتقاء اخل�صائ�ش Network Layer طبقة ال�صبكة
Generative
Recognition التعرّف
Adversarial Network
ال�صبكة التوليدية
التناف�صية Stable Diffusion اآلنت�صار امل�صتقر
- GAN
األأدوات Histogram of Oriented
Gradients - HOG
خُمطط تكراري
للتدرجات املوجَّ هة
Standard Scaling
Visual Data
حتجيم قيا�صي
بيانات مرئية
مفكّرة جوبيرت ()Jupyter Notebook
250 249
بعد ذلك� ،صت�صاهد عددًا من االأمثلة ،ولكل مثال منها قيود ودوال مو�صوعية خا�صة به.
الدر�ص األأول
الد�ال املو�صوعية
تقلي��ل ( )Minimizingوق��ت التو�صي��ل وم�ص��افة و�صع اأُطر زمنية للتو�صيل؛ ل�صمان تو�صيل الطرود وفق
القيود م�سكلة تخ�سي�ص املوارد
ال�صفر؛ خلف�ص التكلفة وحت�صني الكفاءة. اإطار زمني حم َّدد.
زي��ادة ()Maximizingع��دد الط��رود يف كل مركب��ة؛ �صركات النقل توف�ر �صِ �عة مركب�ات التو�صي�ل؛ ل�صم�ان ا�ص�تخدام املركب�ة
لتقليل عدد الرحالت الالزمة. املنا�ص�بة ل�كل عملي�ة تو�صي�ل ،ومقدرته�ا عل�ى حم�ل الكمية خوارزميات التح�س يف الذكاء األ�سطناعي
الالزمة من الطرود.
زي��ادة ( )Maximizingر�ص��ا العم��الء م��ن خ��الل Optimization Algorithms in AI
تو�صي��ل الط��رود يف وق��ت حم � َّدد وف��ق اإط��ار زمن��ي توفر ال�صائقني واملوظفني ،ومراعاة تق�صيم اأوقات عملهم؛ القيود (:)Constraints يُ�صتخدم الذكاء اال�صطناعي يف ُخُمتلف ال�صناعات التخاذ قرارات تت�صم بالكفاءة والدقة ،و ُيع ُّد
حم َّدد. ل�صمان كفاءة العمل ،وعدم تكليفهم باأعمال فوق قدرتهم.
ه��ي مبثا ب��ة �ص��روط تق ِّي��د ُ�صتخدمة يف اتخاذ القرارات.ا�صتخدام خوارزميات تعلُّم االآلة اإحدى طرائق الذكاء اال�صطناعي امل َ
تقلي��ل ( )Minimizingتاأخ��ر رح��الت الط��ران اأو َت َوفُّر الطائرات وجداول ال�صيانة؛ ل�صمان اإجراء ال�صيانة احل��ل ،مث��ل احل��د االأق�ص��ى وكما تعلّمت يف الوحدة ال�صابقة ،فاإن خوارزميات تعلُّم االآلة تقوم بتمكني الذكاء اال�صطناعي من
اإلغائها؛ لزيادة ر�صا العمالء. اجليدة لها ،ومدى جاهزيّتها للرحالت. ل��وزن الط��رد ا ل��ذي ميك��ن التعلُّم بوا�صطة البيانات ومن ثَمّ القيام بالتنبوؤات اأو تقدمي التو�صيات .على �صبيل املثال ،يف جمال
زي��ادة ( )Maximizingا�ص��تغالل الطائ��رات؛ لتقليل قي��ود مراقب��ة احلرك��ة اجلوي��ة؛ لتج ُّن��ب التاأخ��ر وتقلي��ل �صحنه. الرعاي�ة ال�صحي�ةُ ،ميك�ن ا�ص�تخدام ال�ذكاء اال�صطناعي للتنبوؤ بنتائج املر�ص�ى والتو�صية بخُ طط
التكاليف وحت�صني الكفاءة. ا�صتهالك الوقود. جد�لة عالجي�ة بن�ا ًء عل�ى البيان�ات الت�ي ُجمعت من ح�االت مماثلة .ويف جمال التمويلُ ،ميكن ا�ص�تخدام
مراع��اة حاج��ة امل�ص��افر وتف�صيالت��ه؛ جلدول��ة رح��الت خطو ال�ذكاء اال�صطناع�ي يف اتخ�اذ ق�رارات ا�ص�تثمارية بوا�ص�طة حتليل جمموعات كب�رة من البيانات
زي��ادة ( )Maximizingاالإي��رادات م��ن خ��الل عم��ل الطران
عرو���ص خا�ص��ة عل��ى رح��الت الط��ران عالي��ة الطل��ب، الطران االأن�صب للم�صافرين. الدوال املو سوعية املالي�ة وحتدي�د االأمن�اط الت�ي تب ّ�ني املخاط�ر اأو الفر�ص املحتملة .وعلى الرغم م�ن اأن خوارزميات
وتعديل اأ�صعار التذاكر بنا ًء على الطلب. (:)Objective Functions تعلُّم االآلة حتظى ب�صعبية متزايدة اإال اأنها لي�صت النوع الوحيد من خوارزميات الذكاء اال�صطناعي
هي معاير حتدد مدى اقرتاب التي ُميكن ا�صتخدامها يف اتخاذ القرارات ،فهناك طريقة اأخرى تتمثل يف ا�صتخدام خوارزميات
تقلي�ل ( )Minimizingتكالي�ف االإنت�اج م�ن خ�الل �ص��عة االإنت��اج واملهل��ة الزمنية؛ ل�صمان ت�صني��ع املُنتَجات يف
حت�صني ا�صتخدام املوارد وتقليل الفاقد. الوقت املنا�صب. ا حل�ل املق� َّد م م�ن النتا ئ�ج التح�صني التي تُ�صتعمَل بوجه عام الإيجاد اأف�صل ح ّل مل�صكلة حم َّددة بنا ًء على قيود واأهداف معيّنة.
زي�ادة ( )Maximizingكف�اءة االإنت�اج م�ن خ�الل توف��ر امل��واد و�ص��عة التخزي��ن؛ لتج ُّن��ب نف��اد املخ��زون اأو املطلوب�ة ،مث�ل تقلي�ل م�ص�افة يهدف التح�صني اإىل حتقيق الت�صميم االأف�صل بالن�صبة ملجموعة من املعاير اأو القيود ذات االأولوية،
جدولة دورات االإنتاج؛ لتقليل اأوقات التجهيز والتبديل. تكد�صه. امل�ص ِّنعُون ال�صفر ل�صاحنة تو�صيل. وت�ص�مل تعزيز عوامل مع ّينة مثل :االإنتاجية ،واملوثوقية ،وطول العمر ،والكفاءة ،ويف الوقت نف�ص�ه
تق ّلب��ات الطل��ب؛ لتعدي��ل جداول االإنتاج بن��اء على التغرات تقليل عوامل اأخرى مثل :التكاليف ،والفاقد ،والتوقف عن العمل ،واالأخطاء.
زي�ادة ( )Maximizingر�ص�ا العم�الء م�ن خ�الل
�صمان توفر املُنتَجات عند احلاجة اإليها. يف طلبات العمالء. م�سكالت التخ�سي�ص Allocation Problems
زي��ادة ( )Maximizingالرب��ح م��ن خ��الل �صم��ان �ص��عة تخزي��ن حم��دودة تتطل��ب اإدارة دقيق��ة مل�ص��تويات تُع ُّد م�ص��كالت التخ�صي�ص من م�ص��كالت التح�ص��ني ال�ص��ائعة؛ ففيها يتم تخ�صي�ص جمموعة من املوارد مثل :العمّال ،اأو االآالت،
وجود م�ص��تويات كافية من خُمزون ال�ص��لع ذات هام���ص املخزون. اأو االأموال ملجموعة من املهام اأو امل�صاريع باأعلى كفاءة ممكنة ،وتن�صاأ هذه امل�صكالت يف جمموعة وا�صعة من املجاالت مبا فيها
الربح العايل. ف��رتات مهل��ة الت�ص��ليم وتنوّعه��ا ،الت��ي توؤث��ر عل��ى مق��دار الت�صني��ع واخلدم��ات اللوج�ص��تية واإدارة امل�ص��اريع والتموي��لُ ،وميك��ن �صياغته��ا بطرائ��ق ُخُمتلف��ة بن��ا ًء على قيوده��ا واأهدافها .يف
املخزون الذي يجب االحتفاظ به يف اأي وقت. هذا الدر�ص �صتتع ّرف على م�صكالت التخ�صي�ص وخوارزميات التح�صني امل�صتخدَ مة حللّها.
تقلي��ل ( )Minimizingتكالي��ف التخزين من خالل اإدارة املخز�ن
حت�صني م�صتويات املخزون بنا ًء على توقُّعات الطلب. توفر ميزانية؛ ل�صراء خُمزون. يف ال�صركات
زي��ادة ( )Maximizingر�ص��ا العم��الء م��ن خ��الل
�صمان توفُّر املُنتَجات املنا�ص��بة يف الوقت املنا�ص��ب ويف
امل��كان املنا�ص��ب ،وبتقلي��ل نف��اد املخ��زون والتاأخ��ر
وامل�صكالت االأخرى التي قد توؤثر على جُتربة العمالء.
تقلي��ل ( )Minimizingتكلف��ة تولي��د الكهرب��اء مراعاة الطلب على الكهرباء وتقلّباته.
وتوزيعها من خالل حت�صني ا�صتخدام املوارد. توفُّر املواد اخلام وموارد الطاقة ال�صرورية. سوعية ()Objective Function الدالة املو القيد ()Constraint
تقلي��ل ( )Minimizingه��در الطاق��ة وف�ص��ل قي��ود النق��ل والتوزي��ع مث��ل� :ص��عة ال�ص��بكة وامل�ص��افة ب��ني ُعاجلة واملر�صَ لة.
هي زيادة عدد العنا�صر امل َ هو حتديد الوزن
اخلدمات. �صركات
م�صانع توليد الطاقة وامل�صتهلكني. الطاقة
�صكل :5.1ا�صتخدام خوارزميات
252 251 التح�صني يف م�صتودع
اخلا�ص��ة باأ�ص��لوب الق��وة املُفرط��ة ت�صم��ن دائ ًم��ا اإيج��اد احل� ّل االأمث��ل ،مت��ى اأمك��ن ذلك ،ولك��نّ فح�ص كل ال ِف��رق املُمكنة
ّ الطبيع��ة ُميك��ن منذج��ة كل التطبيق��ات ال��واردة �ص��ابقًا يف �ص��ورة م�ص��كالت معق��دة له��ا ع��دد كب��ر من احلل��ول املُمكنة .على �ص��بيل
فمثال:
ُيع ُّد عملية مكلّفة حا�صوبيًاً ، املثال ،فكِّر يف م�صكلة تخ�صي�ص املوارد املعهودة التي تركِّز على ت�صكيل فريق ،حيث تن�ص أا امل�صكلة عندما يكون لديك:
• اإذا كان لديك �صتة ع ّمال ،ف�صيكون عدد ال ِفرق املُمكنة.26 - 1 = 63 : • جمموعة كبرة من العمّال ميتلكون مهارات ُخُمتلفة.
• اإذا كان لديك ع�صرة ع ّمال ،ف�صيكون عدد ال ِفرق املُمكنة.210 – 1 = 1,023 : • مُهِ مَّة تتطلب جمموع ًة فرعية حم َّددة من املهارات الأجل اإكمالها.
عامال ،ف�صيكون عدد ال ِفرق املُمكنة.215 – 1 = 32,767 : • اإذا كان لديك خم�صة ع�صر ً ويتم ّث��ل اله��دف يف تكوي��ن فري��ق باأق��ل ع��دد ممك��ن م��ن الع ّم��ال ،م��ع االلت��زام يف الوق��ت نف�ص��ه بالقي��د ()Constraint
عامال ،ف�صيكون عدد ال ِفرق املُمكنة.220 – 1 = 1,048,575 : • اإذا كان لديك ع�صرون ً ين�ص على توفّر جميع املهارات املطلوبة يف اأع�صاء الفريق؛ الأداء املُهِ َّمة. الذي ّ
عامال ،ف�صيكون عدد ال ِفرق املُمكنة.250 – 1 = 1,125,899,906,842,623 : • اإذا كان لديك خم�صون ً
على �صبيل املثال ،تخيل �صيناريو ب�صيطً ا يوجد فيه خم�صة عمال:
من الوا�صح يف مثل هذه املواقف اأن ح�صر عدد ال ِفرق لكل احللول املُمكنة لي�ص
حتى بالن�صبة لعدد معتدل من ً 50
عامال، خيارًا عمليًّا ،ولذلك مت اقرتاح طرائق حت�صني اأخرى ملعاجلة امل�صكالت املعقدة
فاإن عدد الفرق املحتملة يت�صخم اإىل اأك
15
من كوادريليون ( .)Quadrillion 10 ع�ن طري�ق البح�ث يف خي�ارات احلل�ول املُمكن�ة باأ�ص�لوب اأكر كفاءة من اأ�ص�لوب
القوة املُفرطةُ ،وميكن بوجه عام ت�صنيف هذه الطرائق يف ثالث فئات: العامل الثالث العامل الثاين
العامل اخلام�ش العامل الرابع العامل اآلأ�ل
• طرائق اآل�صتدآلل ()Heuristic Methods املهارات :م5 املهارات :م ،2م4 املهارات :م ،1م ،2م3 املهارات :م ،2م3 املهارات :م ،1م ،3م6
• الربجمة القيدية ()Constraint Programming
• الربجمة الريا�صية ()Mathematical Programming القوة املُفرطة (:)Brute-force تتطل�ب املُهِ َّم�ة امل�راد اإجنازه�ا كل امله�ارات :م ،1م ،2م ،3م ،4م ،5م.6
هي طريقة من طرائق ح ّل امل�صكالت تت�صمن يتمثّ�ل احل� ّل القائ�م عل�ى الق�وة امل ُفرط�ة ( )Brute Forceيف اأخ�ذ كل
األأمثل Optimal Solution احللّ فِ�رق العمّ�ال املُمكن�ة يف االعتب�ار ،والرتكي�ز عل�ى ال ِف�رق الت�ي تتوفّر فيها
التجري�ب املنهج�ي جلمي�ع احلل�ول املمكن�ة
م��ن املمك��ن اأن تك��ون هن��اك العدي��د م��ن احلل��ول املُثل��ى ،كاأن يك��ون لدي��ك ع��دة ِف��رق ت�ص��مل ثالث��ة ع ّم��ال وباإمكانه��ا اأن ت�ص��تويف كل للم�ص�كلة به�دف الو�ص�ول اإىل احل� ّل االأمث�ل، جمي�ع امله�ارات املطلوبة ،واختيار الفري�ق االأقل عددًا ،وعلى افرتا�ص اأن
املهارات املطلوبة ،كما اأنه من املمكن اأال يوجد ح ّل لبع�ص امل�صكالت ،على �صبيل املثال :اإذا كانت املُهِ َّمة تتطلب املهارة ال�صابعة بغ�ص النظر عن التكلفة احلا�صوبية.ّ كل فريق يتكون من �ص�خ�ص واحد على االأقل ،فيُمكنك اأن تُ�ص�كِّل واحدًا
وهي ال تتُوفّر يف اأي عامل من العمّال ،فلن يكون هناك ح ّل للم�صكلة. وثالثني فريقًا خُمتلفًا يتكون كل منهم من خم�صة ع ّمال.
األإيجابيات طرائق األ�ستدألل ()Heuristic Methods العدد اآلإجمايل للفِرق بالن�صبة للفريق املُكوَّن من عامل واحد ،هناك خم�ص طرائق الختيار عامل واحد من بني العمّال اخلم�صة. •
تتميز اال�ص��تدالالت بالكفاءة احلا�ص��وبية، امل ُختلفة التي ُميكنك بالن�صبة للفريق املُكوَّن من عاملني اثنني ،هناك ع�صر طرائق الختيار عاملني من بني الع ّمال اخلم�صة. •
ُوميكنه��ا اأن تتن��اول امل�ص��كالت املعق��دة، تقوم طرائق اآل�صتدآلل ( )Heuristic Methods - HMيف العادة على التجربة، تكوينها هو: بالن�صبة للفريق املُكوَّن من ثالثة ع ّمال ،هناك ع�صر طرائق الختيار ثالثة ع ّمال من بني الع ّمال اخلم�صة. •
�وال ذات ج��ودة
كم��ا ُميكنه��ا اأن جُت��د حل� ً اأو البديه�ة ،اأو الفط�رة ال�ص�ليمة ،ولي��ص عل�ى التحلي�ل الريا�ص�ي الدقي�قُ ،وميك�ن ،5 10 10 5 1 31
�ميكن ح�صاب العدد ُ بالن�صبة للفريق املُكوَّن من اأربعة ع ّمال ،هناك خم�ص طرائق الختيار اأربعة ع ّمال من بني العمّال اخلم�صة. •
عالي��ة اإذا ا�ص �تُخدمت له��ا ا�ص��تدالالت ا�ص�تخدامها الإيج�اد حل�ول جي�دة ب�ص�كل �ص�ريع ،ولكنه�ا ال ت�صم�ن الو�ص�ول اإىل احل ّل
االأمثل (اأف�صل حل ميكن احل�صول عليه) ،ومن االأمثلة على اخلوارزميات اال�صتداللية؛ أي�صا �فقًا للمعادلة:
ا ً بالن�صبة للفريق املُكوَّن من خم�صة ع ّمال ،هناك طريقة واحدة الختيار كل الع ّمال اخلم�صة. •
معقولة. .25 - 1
-ال�سلبيات
اخلوارزمي�ات اجل�ص�عة ( ،)Greedy Algorithmsو �اكاة التلد ي�ن
( ،)Simulated Annealingواخلوارزميات اجلينية (،)Genetic Algorithms يك�ص��ف تقيي��م كل ال ِف��رق االإح��دى والثالثني عن اأف�صل ح ّل ممكن
ال ت�صم��ن الو�ص��ول اإىل احل� ّل االأمث��ل ،كما يتم ّث��ل يف تكوي��ن فري��ق ي�ص��مل الع ّم��ال:االأول والراب��ع واخلام���ص،
اأن بع���ص اال�ص��تدالالت تتطل��ب �صبطً ��ا وحت�صني م�صتعمرة النمل ( .)Ant Colony Optimizationت�صتخدم هذه الطرائق
طويال ج�دًّا ،ولكن ال
يف الع�ادة حل� ّل امل�ص�كالت املعق�دة الت�ي ت�ص�تغرق وقتًا حا�ص�وبيًا ً و�ص��يغطي ه��ذا الفري��ق كل امله��ارات ال�ص��ت املطلوب��ة ،و�صي�ص��مل
كبرًا حتى ُتوؤدي اإىل نتائج جيدة. الفري��ق ثالث��ة ع ّم��ال ،وال ُميك��ن تغطي��ة كل املهارات بفريق ي�ص��تمل
ُميكنها اإيجاد حلول دقيقة ،و�صتتعلّم يف الدرو�ص القادمة املزيد عن هذه اخلوارزميات.
العامل اخلام�ش العامل الرابع العامل اآلأ�ل عل��ى ع��دد ع ّم��ال اأق��ل م��ن ذل��ك ،مم��ا يجع��ل ه��ذا احل� ّل ه��و احل� ّل
األإيجابيات ة القيدية ()Constraint Programming ال املهارات :م5 املهارات :م ،2م4 املهارات :م ،1م ،3م6
اآلأمثل (.)Optimal Solution
ُميك��ن للربجم��ة القيدي��ة اأن تتعام��ل م��ع
الربجم��ة القيدي��ة ( )Constraint Programming - CPحت � ّل م�ص��كالت قيود معقدة واأن جُتد اأف�صل احللول. وهناك ح ّل اآخر يتمثّل يف تكوين فريق ي�ص�مل العمّال:
التح�ص��ني ع��ن طري��ق منذج��ة القي��ود واإيج��اد ح � ّل يخ�ص��ع جلمي��ع القي��ود ،وه��ذا االأول والثاين والثالث واخلام�ص ،وعلى الرغم من اأن
االأ�ص��لوب مفي��د ب�ص��كل خا���ص يف امل�ص��كالت الت��ي به��ا ع��دد كبر م��ن القي��ود اأو التي -ال�سلبيات
هذا الفريق يغطي كل املهارات ال�ص�ت ،اإال اأنه يتطلب
ُميك��ن اأن تك��ون ه��ذه الطرائ��ق مك ِّلف��ة تتطلب حت�صني عدة اأهداف. أي�صا ع ّم ًاال اأكر ،مما يجعل هذا احل ّل ممكنًا ،ولكنه ا ً
العامل الثالث العامل اخلام�ش العامل الثاين العامل اآلأ�ل
حا�صوبيًا يف امل�صكالت الكبرة. املهارات :م ،1م ،2م 3املهارات :م5 املهارات :م ،1م ،3م 6املهارات :م ،2م3 لي�ص احل ّل االأمثل.
254 253
األإيجابيات ة الريا سية ()Mathematical Programming ال
# creates the global list of skills s1, s2, s3, ...
])skills = ['s' + str(i) for i in range(1, skill_number+1
تتعام��ل الربجم��ة الريا�صية مع
الربجم��ة الريا�صي��ة ( )Mathematical Programming - MPه��ي جمموع��ة م��ن جمموع��ة وا�ص��عة من م�ص��كالت
worker_skills = dict() # dictionary that maps each worker to their set of skills التقنيات التي تَ�صتخدم مناذج ريا�صية؛ حل ّل م�صكالت التح�صني ،وت�صمل :الربجمة اخلطية التح�ص��ني وه��ي غال ًب��ا ت�صم��ن
for i in range(1, worker_number+1): # for each worker
(� ،)Linear Programmingالربجم��ة الرباعي��ة ( ،)Quadratic Programmingالو�صول اإىل احل ّل االأمثل.
�الربجم��ة غ��ر اخلطي��ة (� )Nonlinear Programmingبرجم��ة ا أآلع��داد ال�صحيح��ة
املختلط��ة ( ،)Mixed-Integer Programmingوتُ�ص��تخدم ه��ذه التقني��ات عل��ى نط��اق -ال�سلبيات
)# makes a worker id (w1, w2, w3, ...
)worker_id = 'w' + str(i وا�ص��ع يف الكث��ر م��ن املج��االت؛ مب��ا فيه��ا عل��م االقت�ص��اد والهند�ص��ة وعملي��ات البح��ث .تلع��ب ُيع� ُّد ك ٌّل من التكلفة احلا�ص��وبية
اأ�ص��اليب الربجم��ة الريا�صي��ة دورًا مه ًّم��ا يف التع ُّل��م العمي��ق ( ،)Deep Learningومتتل��ك للم�ص��كالت الكب��رة وتعقي��د
)# randomly decides the number of skills that this worker should have (at least 1
)my_skill_number = random.randint(1, max_skills_per_worker
ُعام��الت الت��ي حتت��اج اأن تتع ّل��م م��ن البيان��ات ،حيث اإن�ص��اء ال�صيغ��ة الريا�صي��ة
من��اذج التعلُّ��م العمي��ق ع��ددًا كب�رًا م��ن امل ِ
ُعام��الت النم��وذج من اأجل تقليل دال��ة التكلفة التي املنا�ص��بة مرتف َع��ني بالن�ص��بة تُ�ص��تخدم خوارزمي��ات التح�ص��ني لتعدي��ل م ِ
# samples the decided number of skills تقي���ص ال َف��رق ب��ني ُخُم َرج��ات النم��وذج املتن ّب�اأ به��ا واملُخ َرج��ات ال�صحيح��ة .مت تطوي��ر العدي��د مل�ص��كالت الع��امَل الواقع��ي
))my_skills = set(random.sample(skills, my_skill_number
م��ن خوارزمي��ات التح�ص��ني اخلا�ص��ة بنم��اذج التعلُّ��م العمي��ق مث��ل :خوارزمي��ة اآدم ( ،)Adamاملعقدة.
# remembers the skill sampled for this worker وخوارزمي��ة اآل�ص��تقاق التك ُّيف��ي ( ،)AdaGradوخوارزمي��ة ن�ص��ر متو�ص��ط اجل��ذر الربيعي
worker_skills[worker_id] = my_skills (.)RMSprop
# randomly samples the set of required skills that the team has to cover
))required_skills = set(random.sample(skills, required_skill_number مثال عملي :حت�س م�سكلة ت�سكيل الفريق
# returns the worker and required skills A Working Example: Optimization for the Team-Formation Problem
}return {'worker_skills':worker_skills, 'required_skills':required_skills �يو�صح ه��ذا الدر���ص ا�ص��تخدام خوارزمي��ة الق��وة امل ُفرط��ة ( ،)Brute-Force Algorithmواخلوارزمي��ة اآل�ص��تدآللية �ص� ِّ
اجل�ص��عة ( )Greedy Heuristic Algorithmحل ّل م�ص��كلة اتخاذ القرار املُرتكزة على م�ص��كلة تخ�صي�ص املوارد القائمة على
�صتقوم االآن باختبار الدالة الواردة �صابقًا من خالل اإن�صاء ن�صخة من م�صكلة معطياتها كالتايل :ع�صر مهارات اإجمالية، الفريق والتي مت و�صفها �صابقًا ،بعد ذلك �صتتم مقارنة نتائج هاتني اخلوارزميتني.
كحد اأق�صى لكل عامل.
و�صتة ع ّمال ،وتتطلب خم�ص مهارات ٍّ ُميك��ن ا�ص��تخدام الدال��ة التالي��ة الإن�ص��اء اأمثل��ة ع�ص��وائية مل�ص��كلة ت�ص��كيل ال ِفرق،
اخلوارزمية األ�ستدأللية اجل�سعة عامالت هي :العدد االإجمايل حدد اأربعة ُم ِ وت�صمح هذه الدالة للم�صتخدِ م اأن ُي ِّ
x10 (:)Greedy Heuristic Algorithm للمه��ارات الت��ي يج��ب اأن توؤخ��ذ بع��ني االعتب��ار ،والع��دد االإجم��ايل للع ّم��ال
حتتاج امل�صكلة اإىل ه��ي اأ�ص��لوب ا�ص��تداليل حل� ّل امل�ص��كالت، املتوفّري��ن ،وع��دد امله��ارات الت��ي يج��ب اأن تتو ّف��ر يف اأع�ص��اء الفري��ق ب�ص��كل
ع�صر مهارات وفي��ه تق��وم اخلوارزمي��ة ب ِبن��اء احل � ّل جماعي حتى ينجزوا املُهِ َّمة ،والعدد االأق�صى للمهارات التي ُميكن اأن ميتلكها
اإجمالية خط��و ًة خط��وةً ،وتخت��ار اخلي��ار االأمث��ل كل عامل.
حم ِّل ًّي��ا يف كل مرحل��ة ،حت��ى ت�ص��ل يف وبع��د ذل��ك ،تق��وم الدال��ة باإن�ص��اء واإظهار جمموع��ة ع ّمال لديهم ع��دة مهارات
النهاية اإىل ح ّل �صامل ونهائي. ُخُمتلف��ة ،وع��دة مه��ارات مطلوب��ة ،وتَ�ص��تخدم ه��ذه الدال��ة املكتب��ة ال�ص��هرة
x5 x5 x6 Randomالت��ي ُميك��ن ا�ص��تخدامها يف اإخ��راج ع ّين��ة اأع��داد ع�ص��وائية م��ن
بحدٍّ اأق�صى خم�ص مهارات ع ّمال جمموعة اأعداد معيّنة اأو عنا�صر ع�صوائية من قائمة معيّنة.
مهارات لكل عامل مطلوبة
import random
�صكل :5.2ر�صم تو�صيحي للمثال اخلا�ص بامل�صكلة def create_problem_instance(skill_number, # total number of skills
worker_number, # total number of workers
required_skill_number, # number of skills the team has to cover
ب�صبب الطبيعة الع�صوائية للدالة� ،صتح�صل max_skills_per_worker # max number of skills per worker
على ن�صخة خُمتلفة من امل�صكلة يف كل مرة ):
تقوم فيها بت�صغيل هذا املقطع الربجمي.
256 255
وهذه اخلوارزمية تاأخذ بعني، ُميكن اإن�ص��اء الدالة التالية حل ّل م�ص��كلة تكوين الفريق باأ�ص��لوب القوة املُفرطة،بعد ذلك
# the following code represents the above test
ث��م حت�ص��ر ال ِف��رق التي ت�ص��تويف كل، و تن�ص��ىء ال ِف��رق بن��ا ًء عل��ى االأع��داد املمكن��ة،االعتب��ار جمي��ع اأحج��ام الف��رق املمكن��ة sample_problem = create_problem_instance(10, 6, 5, 5)
:وحتدد الفريق االأقل عددًاِّ املهارات املطلوبة
# prints the skills for each worker
for worker_id in sample_problem['worker_skills']:
def brute_force_solver(problem):
print(worker_id, sample_problem['worker_skills'][worker_id])
worker_skills = problem['worker_skills']
print()
required_skills = problem['required_skills']
258 257
ي�ص� ِ
�تخدم املقط��ع الربجم��ي الت��ايل ه��ذه الدال��ة وخوارزمي��ة احل� ّل بالق��وة املُفرط��ة حل�ص��اب احلل��ول املُمكن��ة ملجموع��ات من املوؤكد اأن خوارزمية احل ّل بالقوة املُفرطة �صتجد اأف�صل ح ّل ممكن ،اأي :اأق ّل الفرق عددًا طاملا اأن هناك ح ٌّل ممكنٌ ،
البيان��ات الت��ي مت اإن�ص��اوؤها �ص��ابقًا واملُك َّون��ة م��ن ( 5-workersخم�ص��ة _ع ّم��ال) ،و( 10-workersع�ص��رة _ع ّم��ال)، ولكن كما مت مناق�صته يف بداية هذا الدر�ص فاإن طبيعة اخلوارزمية ال�صمولية ُتوؤدي اإىل زيادة هائلة يف التكلفة احلا�صوبية
عامال) ،و( 20-workersع�صرين _ ً
عامال): و( 15-workersخم�صة ع�صر _ ً كلما زاد حجم امل�صكلة.
ُميك��ن تو�صي��ح ذل��ك م��ن خ��الل اإن�ص��اء نُ�ص��خ مل�ص��كالت متع��ددة م��ن حي��ث تزاي��د ع��دد الع ّم��ال ،و ُميك��ن ا�ص��تخدام املقط��ع
brute_solutions_5 = gets_solutions(problems_with_5_workers, الربجم��ي الت��ايل لتولي��د نُ�ص��خ متنوع��ة م��ن م�ص��كلة تكوي��ن الفري��ق ،حيث يتن��وع عدد الع ّم��ال ليك��ون 5 :و 10و 15و ،20ثم
)solver = brute_force_solver
يتم توليد 100ن�ص��خة بعدد الع ّمال ،وت�ص��مل كل النُ�ص��خ املهارات االإجمالية الع�ص��ر ،واملهارات الثمان املطلوبة ،واخلم���ص
brute_solutions_10 = gets_solutions(problems_with_10_workers, كحد اأق�صى لكل عامل: مهارات ٍّ
)solver = brute_force_solver
problems_with_5_workers = [] # 5 workers
brute_solutions_15 = gets_solutions(problems_with_15_workers,
)solver = brute_force_solver problems_with_10_workers = [] # 10 workers
problems_with_15_workers = [] # 15 workers
brute_solutions_20 = gets_solutions(problems_with_20_workers, problems_with_20_workers = [] # 20 workers
)solver = brute_force_solver
for i in range(100): # repeat 100 times
عل��ى الرغ��م م��ن اأن االأع��داد املطلوب��ة �صُ ��جلت بوا�ص��طة الدال��ة () gets_solutionsاإال اأنه��ا �ص��تكون متفاوت��ة نظ�رًا للطبيع��ة تَقبل الدالة التالية قائمة بنُ�ص��خ امل�ص��كلة وخوارزمية احل ّل بالقوة املُفرطة ،وتُ�ص��تخدم هذه اخلوارزمية الإجراء العمليات
الع�صوائية ملجموعات البيانات ،و�صيكون هناك منطان ثابتان على الدوام هما: احل�ص��ابية ث��م ا�ص��تخراج احل� ّل جلمي��ع النُ�ص��خ ،كم��ا اأنه��ا تُ�ص��جل الوق��ت االإجم��ايل املطل��وب (بالث��واين) حل�ص��اب احلل��ول
• زي��ادة ع��دد الع ّم��ال ُت�وؤدي اإىل ع��دد اأك��رب من نُ�ص��خ امل�ص��كالت التي من املمك��ن اإيجاد ح ّل لها ،وهذا النم��ط من احللول معقول وكذلك العدد االإجمايل للنُ�صخ التي ُميكن اإيجاد ح ّل منها:
واحد على االأقل ميتلك مه��ارة واحدة مطلوبة �صمن ومتو َّق��ع؛ الأن وج��ود ع��دد كب��ر م��ن الع ّم��ال يزي��د من احتم��ال وجود عاملٍ ٍ
جمموعة الع ّمال املتاحة. import time
• زي��ادة ع��دد الع ّم��ال ي�وؤدي اإىل زي��ادة كب��رة (اأُ�صِّ �يَّة) يف الزم��ن احلا�ص��وبي ،وه��ذا متوق��ع ح�ص��ب التحلي��ل ال��ذي مت اإج��راوؤه يف def gets_solutions(problems,solver):
عامال ،ف�اإن عدد
بداي��ة ه��ذا الدر���ص ،وبالن�ص��بة ملجم��وع الع ّم��ال مم��ن ه��م بع��دد :خم�ص��ة ،وع�ص��رة ،وخم�ص��ة ع�ص��ر ،وع�ص��رون ً
الفِرق املُمكنة ي�صاوي ،32767 ،1023 ،31 :و 1048575على الرتتيب. 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
ب�صف� ٍة عام��ة ،وبالنظ��ر اإىل ع��دد الع ّم��ال املُعط��ى ،Nف�اإن عدد ال ِفرق املُمكنة ي�ص��اوي ،2N-1وهذا العدد �ص��ي�صبح كبرًا لتقييمه solutions = [] # solutions returned by the solver
حتى بالن�ص��بة للقيم ال�صغرة ل� .Nكذلك بالن�ص��بة الأي م�ص��كلة ب�ص��يطة بها قيد واحد (يغطي جميع املهارات املطلوبة) وهدف
واح��د (تقلي��ل حج��م الفري��ق) ،ف�اإن الق��وة املُفرطة قابلة للتطبي��ق فقط على جمموعات البيانات ال�صغرة ج��دً ا ،وذلك بالتاأكيد for problem in problems:
حال عمل ًّيا الأي من م�صكالت التح�صني املعقدة التي نواجها يف الواقع والتي اأ�صرنا اإليها يف بداية هذا الدر�ص. لي�ص ً start_time = time.time() # starts the timer
best_team = solver(problem) # computes the solution
اتخاذ القرار با�ستخدام خوارزمية ا�ستدأللية ج�سعة end_time = time.time() # stops the timer
Decision Making with a Greedy Heuristic Algorithm solutions.append(best_team) # rememberσ the solution
total_seconds += end_time-start_time # computes total elapsed time
تتعام��ل الدال��ة التالي��ة م��ع ه��ذا القي��د بوا�ص��طة تنفي��ذ خوارزمي��ة حت�ص��ني تعتم��د عل��ى االأ�ص��لوب اال�ص��تداليل اجل�ص��ع ،حي��ث تق��وم
اخلوارزمي��ة تدريجيًابتكوي��ن الفري��ق ع��ن طري��ق اإ�صاف��ة ع�ص��و واح��د يف كل م��رة ،فالع�ص��و ال��ذي اأ�صي��ف موؤخرًا يك��ون دائمًا هو if best_team != None: # if the best team is a valid team
total_solved += 1
الع�صو الذي ميتلك معظم املهارات التي مَل توجد يف �صابقه ،وت�صتمر العملية حتى ت�صتويف جميع املهارات املطلوبة. print("Solved {} problems in {} seconds".format(total_solved,
))total_seconds
الدالة اآل�صتدآللية اجل�صعة ( )Greedy Heuristicامل�صتخدمة يف هذا املثال هي معيار آلختيار عامل يتوفر فيه اأكرب عدد من املهارات التي
أ�آل.
تُ�صتوفى يف الفريق اإىل اآلآن� ،ميكن ا�صتخدام دالة ا�صتدآللية اأخرى ،مبنية على اإ�صافة العامل الذي يتوفر فيه العدد اآلأكرب من املهارات ا ً return solutions
260 259
َّ ولكنها كما هو،ال تاأخذ خوارزمية احل ّل اجل�ص��عة كل ال ِفرق املُمكنة بعني االعتبار وال ت�صمن اإيجاد احل ّل االأمثل
مو�صح
def greedy_solver(problem):
هي يف،�وال جيدة
ً � وم��ع ذلك ُميكنه��ا اأن تُنتج حل،اأدن��اه اأ�ص��رع بكث��ر م��ن خوارزمي��ة احل� ّل الت��ي تعتم��د عل��ى الق��وة املُفرطة
.حال اإذا كان موجودًا ًّ ومن املوؤكد اأن جُتد هذه الطريقة،الغالب حلو ٌل مثلى worker_skills = problem['worker_skills']
required_skills = problem['required_skills']
(خم�ص��ة5-workers :ي�ص��تخدِ م املقط��ع الربجم��ي الت��ايل خوارزمي��ة احل ّل اجل�ص��عة حل�ص��اب حلول جمموع��ات البيانات
(ع�ص��رين20-workers و،) (خم�ص��ة ع�ص��ر _عام� ً�ال15-workers و،) (ع�ص��رة _ع ّم��ال10-workers و،)_ع ّم��ال # skills that still have not been covered
:عامال) التي مت ا�صتخدامها �صاب ًقا لتقييم خوارزمية احل ّل بالقوة املُفرطة ً _ uncovered_required_skills = required_skills.copy()
best_team = []
# remembers only the skills of each worker that are required but haven't been covered yet
greedy_solutions_5 = gets_solutions(problems_with_5_workers, uncovered_worker_skills = {}
solver = greedy_solver)
for worker_id in worker_skills:
greedy_solutions_10 = gets_solutions(problems_with_10_workers,
solver = greedy_solver) # remembers only the required uncovered skills that this worker has
uncovered_worker_skills[worker_id] = worker_skills[worker_id].
intersection(uncovered_required_skills)
greedy_solutions_15 = gets_solutions(problems_with_15_workers,
intersections)( تُظهر الدالة
solver = greedy_solver)
# while there are still required skills to cover مجموعة جديدة تحتوي فقط على
while len(uncovered_required_skills) > 0: المهارات الم�صتركة من جميع
greedy_solutions_20 = gets_solutions(problems_with_20_workers,
solver = greedy_solver) 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 ُ�صتوف في
َ المطلوبة التي لم ت
Solved 23 problems in 0.0009970664978027344 seconds .uncovered_worker_skills
Solved 80 problems in 0.000997304916381836 seconds for worker_id in uncovered_worker_skills:
Solved 94 problems in 0.001995086669921875 seconds
Solved 99 problems in 0.0019943714141845703 seconds # uncovered required skills that this worker can cover
my_uncovered_skills = uncovered_worker_skills[worker_id]
واالآن يت�ص��ح الف��رق يف ال�ص��رعة ب��ني اخلوارزميت��ني؛ حي��ث ُميك��ن تطبي��ق خوارزمي��ة احل� ّل اجل�ص��عة عل��ى النُ�ص��خ املتعلق��ة # 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)
# creates 100 problem instances of a team formation problem with 1000 workers
problems_with_1000_workers = [] if best_worker_id != None: # if a best worker was found
best_team.append(best_worker_id) # adds the worker to the solution
for i in range(100): # repeats 100 times
problems_with_1000_workers.append(create_problem_instance(10, 1000, 8, 5)) #removes the best worker's skills from the skills to be covered
uncovered_required_skills = uncovered_required_skills -
# solves the 100-worker problems using the greedy solver uncovered_worker_skills[best_worker_id]
greedy_solutions_1000 = gets_solutions(problems_with_1000_workers,
for worker_id in uncovered_worker_skills:
solver = greedy_solver)
# remembers only the required uncovered skills that this worker has
uncovered_worker_skills[worker_id] =
Solved 100 problems in 0.09574556350708008 seconds
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
262 261
مترينات مقارنة اخلوارزميات Comparing the Algorithms
بع��د اأن مت تو�صي��ح مي��زة ال�ص��رعة خلوارزمي��ة احل� ّل اال�ص��تداللية اجل�ص��عة ،تتم ّث��ل اخلط��وة التالي��ة يف التحق��ق م��ن ج��ودة
احلل��ول الت��ي تُنتجه��ا ،حي��ث تَقب��ل الدال��ة التالي��ة احلل��ول الت��ي اأنتجته��ا اخلوارزمي��ة اجل�ص��عة وخوارزمي��ة الق��وة املُفرط��ة
1م��ا مزاي��ا �عي��وب ا�ص��تخدام كل م��ن :خوارزمي��ة الق��وة املفرط��ة �اخلوارزمي��ة اآل�ص��تدآللية اجل�ص��عة يف ح� ّل م�ص��كالت تبني النِّ�ص��ب املئوية للنُ�ص��خ التي تقوم كلتا اخلوارزميتني بذكر احل ّل االأمثل لها على نف���ص جمموعة نُ�ص��خ امل�ص��كالت ،ثم ّ
التح�صني؟ (الفريق االأقل عد ًدا):
def compare(brute_solutions,greedy_solutions):
total_solved = 0
same_size = 0
for i in range(len(brute_solutions)):
ُميك��ن االآن ا�ص��تخدام الدال��ة () compareملقارن��ة فاعلي��ة اخلوارزميت��ني املطبقت��ني عل��ى :اخلم�ص��ة ع ّم��ال ،والع�ص��رة
عامال.
عامال ،والع�صرين ً
ع ّمال ،واخلم�صة ع�صر ً
2حلِّل طريقة ا�صتخدام اخلوارزميات اآل�صتدآللية اجل�صعة آلإيجاد احللول امل ُثلى يف م�صكالت التح�صني. ))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 %اأو اأكر من ِّ
كل نُ�ص��خ امل�ص��كالت القابل��ة للح�لّ .ويف الواق��عُ ،ميك��ن التحق��ق ب�ص��هولة م��ن اأن حج��م الفري��ق ال��ذي تُنتج��ه اخلوارزمي��ة
اال�ص��تداللية اجل�ص��عة حت��ى يف النُ�ص��خ الت��ي تف�ص��ل يف اإيج��اد احلل��ول املُثل��ى له��ا يك��ون قري ًب��ا ج��دً ا م��ن حج��م اأف�ص��ل فري��ق
ممكن.
عملي اأكر للتطبيقات الواقعية، اإذا متت اإ�صافة ذلك اإىل ميزة ال�صرعة الهائلة ،جُتد اأن اخلوارزمية اال�صتداللية خيار ّ
و�صتكت�صف يف الدر�ص التايل تقنيات حت�صني اأكر ذكا ًء ،و�صتتعرّف على كيفية تطبيقها على م�صكالت ُخُمتلفة.
264 263
: �يف كل م�صكلة، اذكر ثال م�صكالت حت�صني ُخُمتلفة من العا الواقعي4 م��ن خ��الل اإكمال املقطع الربجم��ي التايل بحيث، اأن�ص� خوارزمي��ة ح� ّل ج�ص��عة لتح�ص��ني م�ص��كلة تكوي��ن اأع�ص��اء فري��ق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:
كي��ف يوؤث��ر ذل��ك عل��ى امل�ص��كلة من حيث ع��دد احللول �الزمن، اإذا قم��تَ بزي��ادة ع��دد الع ّم��ال يف خوارزمي��ة الق��وة امل ُفرط��ة5 best_new_coverage= (my_uncovered_skills)
احل�صابي؟
if best_worker_id!= : # if a best worker was found
# 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
266 265
يف هذا الدر�ص �صتُ�صتخدم م�صكلة التباطُ وؤ املوز�ن لالآلة الواحدة ()Single-Machine Weighted Tardiness - SMWT
كمثال عملي لتو�صيح كيف ُميكن خلوارزميات التح�صني اأن حت ّل م�صكالت اجلدولة. الدر�ص الثاين
م�سكلة التباطُ وؤ املوزون لاللة الواحدة م�سكلة جدولة املوارد
Single-Machine Weighted Tardiness )SMWT( Problem
لتو�صيح هذه امل�صكلة� ،صنفرت�ص اأن مَ �صنعًا يرغبُ يف جدولة مهام اإنتاج عدة �صلع على اآلة واحدة ،على النحو التايل:
• كل مُهِ مَّة لها وقت معاجلة حمدَّد ،وموعد حمدَّد البد اأن تكتمل فيه. م�سكالت اجلدولة Scheduling Problems
• كل مُهِ مَّة مرتبطة بوزن ميثل اأهميتها. م�ص��كالت اجلدول��ة �ص��ائعة يف جم��ال التح�ص��ني؛ الأنه��ا تتطل��ب تخ�صي���ص م��وارد حم��دودة مله��ام متع��ددة بطريق��ة ُحت�صِّ ��ن بع���ص
اإذا كان م��ن امل�ص��تحيل اإجن��از كل امله��ام يف املوع��د النهائ��ي ،ف�ص��يكون ع��دم االلت��زام ب إاجن��از امله��ام ذات ال��وزن ال�صغر ال��دوال املو�صوعي��ة ،وع��ادة م��ا تك��ون مل�ص��كالت اجلدول��ة قي��ود اإ�صافي��ة مث��ل :احلاج��ة اإىل تنفيذ امله��ام برتتيب مع� ّ�ني اأو اإجنازها
يف املوعد النهائي اأقل تكلفة من عدم االلتزام باإجناز املهام ذات الوزن الكبر يف املوعد النهائي. يف املوعد النهائي املح َّدد ،وهذه امل�صكالت جوهرية يف العديد من املجاالت املختلفة مبا فيها الت�صنيع والنقل والرعاية ال�صحية
الهدف واإدارة امل�صاريع� .صتتعمق يف هذا الدر�ص يف خوارزميات التح�صني عن طريق اإدخال تقنيات اإ�صافية حل ّل جدولة امل�صكالت.
اله��دف ( )Goalم��ن جدول��ة امله��ام بطريق��ة حم� َّددة ه��و تقلي��ل املجم��وع امل��وزون للتاأخ��ر (التباطُ �وؤ) ل��كل مُهِ َّم��ة ،وهكذا
فاإن جمموع التباطُ وؤ املوزون يكون مبثابة الدالة املو�صوعية خلوارزميات التح�صني امل�ص َّممة حل ّل هذه امل�صكلة.
األت تلفة بحاجة اإىل حلول اجلدولة جدول : .1تطبيقات من
ح�ساب التاأخري الو يفة التطبيق
ح�صب التاأخر ( )Latenessيف اأداء املُهِ مَّة على اأ�صا�ص الفرق بني زمن اإجنازها واملوعد املح َّدد لت�صليمها ،ثم تُ�صتخدم ُي ُ تخ�صي�ص املوارد واملهام الأن�صطة امل�صروع؛ لتقليل مدة امل�صروع وتكاليفه. جدولة امل�صاريع
اأوزان امله�ام كعوام�ل �ص�رب ( )Multipliersالإكم�ال املجم�وع امل�وزون النهائ�ي .عل�ى �ص�بيل املث�ال :افرت��ص اأن هن�اك
�دوال ب�ه ث�الث مه�ام ه�ي :م 1وم 2وم ،3واأوزان ه�ذه امله�ام ه�ي 2 :و 1و 2عل�ى الرتتي�ب .وفقً�ا له�ذا اجلدول� ،ص�تُنجز ج ً حتديد خطة االإنتاج املُثلى؛ لتلبية الطلب مع تقليل املخزون والتكاليف. تخطيط االإنتاج
املُهِ َّم�ة رق�م 1يف املوع�د املح� َّدد ،و�ص�يتاأخر اإجن�از املُهِ مَّ�ة رق�م 2ث�الث �ص�اعات ع�ن موع�د ت�ص�ليمها ،أام�ا املُهِ مَّ�ة رق�م 3
ف�صيتاأخر اإجنازها �صاعة واحدة عن موعد ت�صليمها ،ويعني ذلك اأن جمموع التباطُ ؤو املوزون ي�صاوي .3×1 1×2=5 جدول��ة اإق��الع الطائ��رات وف��رتات عم��ل الطاق��م؛ لتح�ص��ني ج��داول الرح��الت م��ع جدولة خطوط الطران
تقليل التاأخر والتكاليف.
تاأخير ثالث �صاعات. تاأخير �صاعة. تخ�صي���ص ف��رتات عم��ل للموظف��ني؛ ل�صم��ان التغطي��ة املنا�ص��بة لف��رتات العم��ل مع جدولة مركز االت�صاالت
23 20 15 10 5 0 تقليل التكاليف وااللتزام باتفاقيات م�صتوى اخلدمة.
تخ�صي�ص املوارد يف الت�صنيع؛ لتقليل زمن االإنتاج والتكاليف. جدولة االإنتاج ح�صب الطلب
ال ُم ِهمَّة 2 ال ُم ِهمَّة 3 ال ُم ِهمَّة 1
جدول��ة توقي��ت االإعالن��ات عل��ى التلف��از اأو االإذاع��ة؛ لزي��ادة الو�ص��ول اإىل اجلمهور جدولة و�صائل االإعالم
�صكل :5.4ر�صم تو�صيحي لت�صل�صل املهام واالإيرادات مع االلتزام بقيود امليزانية.
التباطُ وؤ املوز�ن التاأخر موعد ت�صليمها املوعد املح َّدد آلإ ازها امل ُ ِهمَّة تخ�صي���ص ف��رتات عم��ل للممر�ص��ات يف امل�صت�ص��فيات؛ ل�صم��ان التغطي��ة الكافي��ة جدولة املمر�صات
--------------- --------- -------------- ------------ ------- خالل فرتات العمل مع تقليل تكاليف العمالة.
0 0 11 14 م1
3 3 23 20 م2
2 1 18 17 م3
�صكل :5.5ح�صاب التباطُ ؤو املوزون
ُميك��ن ا�ص��تخدام الدال��ة التالي��ة لتقيي��م ج��ودة اأي جدول اأنتجته اإحدى اخلوارزميات لن�ص��خة م�ص��كلة حم� َّددة ،حيث تَقبل # creates an instance of the Single-Machine Weighted Tardiness problem.
وجدوال ملهامها ،ثم متر على كل املهام برتتيب جدولتها نف�صه حتى َحت�صب اأزمنة اإجنازها وجمموع ً الدالة ن�صخة امل�صكلة
def create_problem_instance(job_num, # number of jobs to create
التباطُ وؤ املوزون لكامل اجلدول ،و ُيح�صب هذا التباطُ وؤ بح�صاب تباطوؤ كل مُهِ َّمة (مع مراعاة املوعد النهائي لها) و�صربه duration_range, # job duration range
يف وزن املُهِ َّمة واإ�صافة الناجت اإىل املجموع: deadline_range, # deadline range
weight_range):# importance weight range
# computes the total weighted tardiness of a given schedule for a given problem instance
# generates a random duration, deadline, and weight for each job
def compute_schedule_tardiness(problem, schedule): ])durations = [random.randint(*duration_range) for i in range(job_num
])deadlines = [random.randint(*deadline_range) for i in range(job_num
# gets the information for this problem
])weights = [random.randint(*weight_range) for i in range(job_num
durations, weights, deadlines=problem['durations'], problem['weights'],
]'problem['deadlines
# returns the problem instance as a dictionary
job_num = len(schedule) # gets the number of jobs return {'durations':durations,
finish_times = [0] * job_num # stores the finish time for each job 'deadlines':deadlines,
schedule_tardiness = 0 # initializes the weighted tardiness of the overall schedule to 0 }'weights':weights
for pos in range(job_num): # goes over the jobs in scheduled order
270 269
import itertools job_id=schedule[pos] # schedule[pos] is the id in the 'pos' position of the schedule
def brute_force_solver(problem): if pos == 0: # if this is the job that was scheduled first (position 0)
# gets the information for this problem # the finish time of the job that starts first is equal to its run time
durations, weights, deadlines=problem['durations'], problem['weights'], finish_times[pos] = durations[job_id]
problem['deadlines']
else: # for all jobs except the one that was scheduled first
job_num = len(durations) # number of jobs
# 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]
# Generates all possible schedules
all_schedules = itertools.permutations(range(job_num))
# 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] -
# Initializes the best solution and its total weighted tardiness deadlines[job_id], 0)
best_schedule = None # initialized to None
return schedule_tardiness,finish_times
# 'inf' stands for 'infnity'. Python will evaluate all numbers as smaller than this value.
best_tardiness = float('inf')
وزمن اإجن��از كل ُم ِه َّمة، وزم��ن التباط�وؤ،خوارزمي��ة احل� ّل تعط��ي اجل��دول االأف�ص��ل ،N = 5 فعندما يكون،من اجلدا�ل املمكنة (0, 1, 2)
�لكن هذا،جد�آل
ً 5! = 120 �صيكون النا (0, 2, 1)
، اإذا كان اجل��دول يح��وي ث��الث مهام، عل��ى �ص��بيل املث��ال.مُعط��اة يف ه��ذا اجل��دول N = 10 العدد يتزايد ب�صكل كبر عندما يكون (1, 0, 2)
عدد المهام المراد نطاق الموعد فذل��ك يعن��ي اأن املُهِ َّمة،]10، 14، 20[ وكان��ت اأوق��ات اإجن��از جمي��ع امله��ام ت�ص��اوي N = 11 �عندما يكون، 10! = 3,628,800اإىل (1, 2, 0)
واملُهِ َّم��ة الثاني��ة انته��ت بع��د ذل��ك باأرب��ع، �ص��اعات10 الت��ي ب��داأت ا ًأوال انته��ت بع��د (2, 0, 1)
.اإن�صاوؤها .النهائي .11! = 39,916,800 اإىل (2, 1, 0)
. واملُهِ َّمة االأخرة انتهت بعد �صت �صاعات من اكتمال املُهِ َّمة الثانية،�صاعات
Brute-Force Solver القوة املُفرطة ّخوارزمية حل
sample_problem = create_problem_instance(5, [5, 20], [5, 30], [1, 3])
brute_force_solver(sample_problem) وعلى الرغم من،لقد تعلّمت يف الدر���ص ال�ص��ابق طريقة ا�ص��تخدام خوارزمية ح ّل القوة املُفرطة يف م�ص��كلة تكوين فريق
اإال اأن قدرتها على اإيجاد احل ّل االأمثل (اأف�صل،اأن خوارزمية احل ّل هذه اأظهرت بطئًا �صديدً ا يف امل�صكالت االأكرب حجمًا
{'schedule': (0, 2, 1, 3, 4), .نطاق مدة المُهِ مَّة .مدى اأهمية الوزن ح� ّل ممك��ن) لنُ�ص��خ امل�ص��كلة ذات احلج��م ال�صغ��ر كان��ت مفي��دة يف تقيي��م ج��ودة احلل��ول املُن َتج��ة بوا�ص��طة خوارزمي��ات
'tardiness': 164, ُميكن ا�ص��تخدام خوارزمية ح ّل القوة املُفرطة التالية حل ّل: وباملثل.التح�ص��ني االأ�ص��رع التي ال ت�صمن اإيجاد احل ّل االأمثل
'finish_times': [5, 11, 21, 36, 51]}
.)SMWT( م�صكلة التباطُ وؤ املوز�ن لالآلة الواحدة
272 271
األ�ستدأللية اجل�سعة Greedy Heuristic Solver خوارزمية احللّ
)greedy_sol = greedy_solver(sample_problem, deadline_heuristic
greedy_sol ت�صتخدم خوارزمية احل ّل اجل�صعة اأ�صلوبًا ا�صتدالليًا ب�صيطً ا لفرز املهام واتخاذ قرار الرتتيب الذي يجب جدولتها وفقًا ِ
ل��ه ،ث��م تُرت��ب امله��ام حل�ص��اب زم��ن اإكم��ال كل ُم ِه َّم��ة وجمم��وع التباطُ � ؤو امل��وزون لكام��ل اجل��دول ،ويف ه��ذا املث��ال اخلا���ص
{'schedule': [3, 1, 4, 0, 2], تُظهر خوارزمية احل ّل اجل�صعة نوع املُخرَجات نف�صه الذي اأظهرته خوارزمية ح ّل القوة املُفرطة .
'tardiness': 124, �تخدم (معيار فرز ُعامالن هما :ن�ص��خة امل�ص��كلة املراد حلّها ،ودالة اال�ص��تدالل التي �صت�ص� ِ تَقبل خوارزمية احل ّل اجل�ص��عة م ِ
}]'finish_times': [15, 26, 32, 48, 57
امله��ام) ،مم��ا ي�ص��مح للم�ص� ِ
�تخدم ب�اأن ُيط ِّب��ق اأي دال��ة ا�ص��تدالل يختاره��ا كدال��ة بايث��ون ،ث��م مي� ِّرره اإىل خوارزمي��ة احل� ّل
اجل�صعة باعتباره ُم ِ
عام ًال.
بديال ياأخذ يف اعتباره اأوزان املهام عند اتخاذ قرار ترتيبها يف اجلدول:
ا�صتدالال ً
ً تُطبِّق الدالة التالية
تُطبِّق الدالة التالية خوارزمية حت�صني ت�صتخدم دال ًة ا�صتداللي ًة ج�صع ًة حل ّل امل�صكلة:
# returns the weighted deadline of a given job
def weighted_deadline_heuristic(job,problem): def greedy_solver(problem, heuristic):
# accesses the deadlines for this problem and returns the deadline for the job # gets the information for this problem
]return problem['deadlines'][job] / problem['weights'][job durations, weights, deadlines = problem['durations'], problem['weights'],
)weighted_greedy_sol=greedy_solver(sample_problem, weighted_deadline_heuristic ]'problem['deadlines
weighted_greedy_sol
job_num = len(durations)# gets the number of jobs
{'schedule': [3, 2, 1, 4, 0], # Creates a list of job indices sorted by their deadline in non-decreasing order
'tardiness': 89, ))schedule = sorted(range(job_num), key = lambda j: heuristic(j, problem
}]'finish_times': [15, 24, 35, 41, 57
عل��ى الرغ��م م��ن اأن خوارزمي��ة احل� ّل اجل�ص��عة اأ�ص��رع بكث��ر م��ن خوارزمي��ة الق��وة # returns the results as a dictionary
البحث املحلّي املُفرط��ة ،اإال اأنه��ا متي��ل اإىل اإنت��اج حل��ول ذات ج��ودة اأقل بزمن تباط�وؤ اأعلى ،ويُع ُّد return {'schedule':schedule,
(:)Local Search البح��ث املح ّل��ي طريق��ة لتح�ص��ني ح��ل مت ح�ص��ابه بوا�ص��طة اخلوارزمي��ة اجل�ص��عة اأو 'tardiness':tardiness,
}'finish_times':finish_times
ه��و طريق��ة حت�ص��ني ا�ص��تداللية باأي طريقة اأخرى.
تر ِّك��ز على اكت�ص��اف حل��ول جماورة يف البح��ث املح ّل��يُ ،يع�دَّل احل� ّل ال��ذي مت التو�ص��ل اإلي��ه يف البداي��ة ب�ص��كلٍ متك��رر يُ�صتخدم بناء الجملة lambdaمع يُ�صتخدم يف هذا املثال دالة ا�صتدآللية
ِحل ّل معني بهدف حت�صينه. من خالل فح�ص احللول املجاورة التي وُجِ دت عن طريق اإجراء تعديالت ب�صيطة دالة البايثون () sortedعندما
عل��ى احل � ّل احل��ايل .بالن�ص��بة للعدي��د م��ن م�ص��كالت التح�ص��ني ،فهن��اك طريق��ة ج�صعة لتحديد امل ُ ِه َّمة التالية التي
يتمثّل الهدف في فرز قائمة حتتاج اإىل جد�لة �هي امل ُ ِه َّمة التي
�ص��ائعة لتعدي��ل احل� ّل تتمث��ل يف تبدي��ل العنا�ص��ر ب�ص��كل متك��رر .على �ص��بيل املثال، عنا�صر بنا ًء على قيمة يتم ح�صابها لها اأقرب موعد نهائي.
يف م�صكلة تكوين الفريق التي مت تو�صيحها يف الدر�ص ال�صابق� ،صيحاول اأ�صلوب البحث املحلّي اإن�صاء فريق اأف�صل وذلك بطريقة منف�صلة لكل عن�صر.
من خالل تبديل اأع�صاء الفريق بالعمّال الذين ال يُعدّون حاليًا جزءًا من الفريق.
اأن�ص �اأت خوارزمي��ة احل � ّل اآل�ص��تدآللية اجل�ص��عة ( )Greedy Heuristic Solverح� ًّ�ال للم�ص��كلة خط��وة خط��وة حت��ى تُظهر الدالة التالية املوعد النهائي ملُهِ مَّة حمدَّدة يف ن�صخة م�صكلة مُعطاة:
ح�صل��ت يف النهاي��ة عل��ى ح� ّل كام��ل ونهائ��ي ،وعل��ى العك���ص م��ن ذل��ك تب��داأ طرائ��ق البحث املح ّلي��ة بح ّل كامل ق��د يكون ذا
ج��ودة متو�ص��طة اأو �ص��يئة ،وتعم��ل بطريق��ة تكراري��ة لتح�ص��ني جودت��ه .يف كل خط��وة يك��ون هن��اك تغي��ر ب�ص��يط عل��ى احل� ّل # returns the deadline of a given job
def deadline_heuristic(job,problem):
احل��ايل ،وتُق َّي��م ج��ودة احل� ّل الن��اجت (ي�ص�مّى احل��ل املُج��اور) ،واإذا كان يتمت��ع بجودة اأف�ص��ل ،فاإن ُه ي�ص��تبدل احل ّل احلايل
وي�ص��تمر يف البح��ث ،واإذا مَل يك��ن كذل��ك ،يت��م جُتاه��ل احل��ل املُج��اور وتتك��رر العملي��ة لتولي��د ح��ل جم��اور اآخ��ر ،ث��م ينتهي # accesses the deadlines for this problem and returns the deadline for the job
]return problem['deadlines'][job
البح��ث عندم��ا يتع��ذر العث��ور عل��ى ح� ّل ُجم��اور اآخ��ر يتمت��ع بج��ودة اأف�ص��ل م��ن احل� ّل احل��ايل ،ويت��م حتدي��د اأف�ص��ل ح� ّل مت
العثور عليه.
متري��ر دال��ة deadline_heuristicك ُمعَامِ ��ل اإىل خوارزمي��ة احل� ّل اجل�ص��عة ( )greedy_solverيعني اأن اخلوارزمية
�ص�تُجدوِل (تف��رز) امله��ام وف��ق ترتي��ب ت�صاع��دي ح�ص��ب املوعد النهائ��ي ،مما يعني اأن املهام التي له��ا اأقرب موعد نهائي
274 273 �صتُجَ دوَل ا ًأوال.
Local_search_solver)( Function البحث املحلّي ّدالة خوارزمية حل
# computes the new tardiness after the swap
new_tardiness, new_finish_times = compute_schedule_tardiness(problem, خوارزمي��ة ح� ّل البح��ث املح ّل��ي القائ��م عل��ى املبُادل��ة ملِ �ص��كلة التباطُ �وؤlocal_search_solver)( تطب��ق الدال��ة التالي��ة
new_schedule) :عامالت وهي ِ حيث تَقبل هذه الدالة اأربعة ُم،)SMWT( املوز�ن لالآلة الواحدة
# if the new schedule is better than the best one so far .• ن�صخة امل�صكلة
if new_tardiness < best_tardiness:
. حل�صاب ح ّل اأوّيلgreedy_solver( ) • خوارزمية ا�صتداللية ج�صعة ت�صتخدمها دالة
جران احل ّل يف هذا املثال كلها اإذا كان، عل��ى �ص��بيل املث��ال. امل�ص��تخدَ مة النتق��اء مُهِ َّمت��ني �ص��تتبادالن موقعيهم��ا يف اجل��دولswap_selector • دال��ة
# the new_schedule becomes the best one حلول يتم احل�صول عليها عن اأن يح��دث مبادل��ةswap_selector وق�رَّرت دال��ة،]0، 2، 3، 1[ احل� ّل احل��ايل للم�ص��كلة املُك َّون��ة م��ن اأرب��ع مه��ام ه��و
best_schedule = new_schedule طريق انتقاء ُم ِهمَّتني داخل
best_tardiness = new_tardiness .]1، 2، 3، 0[ �صيكون احل ّل املر�صَّ ح هو،بني املُهِ َّمة االأوىل واملُهِ َّمة االأخرة
best_finish_times = new_finish_times
احل ّل �مبادلة موقعيهما يف
.اجلد�ل ع��دد �صحي��ح ُيح� ِّ�دد ع��دد املب��ادالت التي يجب جُتربتها قب��ل اأن تتو�صل اخلوارزمية للح ّل االأف�صلmax_iterations •
# returns the best solution .يف حينه
return {'schedule':best_schedule,
'tardiness':best_tardiness, �صلوك خوارزميات التح�صني القائمة جدوال
ً �ئ� ص �ُن
ت �م
� ث ،�ا
� مبينه �ل
� ي للتبد �ني
� ت م
َّ ُِه
م �ة
� ي اخلوارزم �ي
� ق تنت ،�رار�يف كل تك
'finish_times':best_finish_times} على البحث املحلي يتاأثر ب�صكل كبر وكل �ص��يء يف اجل��دول اجلدي��د بخ��الف ذلك،جدي��دً ا تت��م في��ه ه��ذه املبادل��ة
باآل�صراتيجية امل�صتخدَمة بطريقة اإذا كان للج��دول اجلدي��د تباط�وؤ م��وزون.�ص��يكون ُمطاب ًق��ا للج��دول االأ�صل��ي
.ّتكرارية لتعديل احلل فاإن اجل��دول اجلديد،اأق��ل م��ن اجل��دول االأف�ص��ل ال��ذي مت اإيج��اده حت��ى االآن
:تُطبِّق الدالة التالية مبادلة ع�صوائية بانتقاء مُهِ مَّتني ع�صوائيتني يف اجلدول املُعطى الذي ي�صتوجب تبديل مكانيهما خوارزمي��ة احل� ّل ه��ذه له��ا نف���ص ُخُم َرج��ات.�دال من��ه ً �ُي�صب��ح ه��و االأف�ص��ل ب
.خوارزمية احل ّل اجل�صعة وخوارزمية ح ّل القوة املُفرطة
def random_swap(schedule):
job_num = len(schedule) # gets the number of scheduled jobs def local_search_solver(problem, greedy_heuristic, swap_selector, max_
iterations):
pos1 = random.randint(0, job_num - 1) # samples a random position
# gets the information for this problem
pos2 = pos1 durations, weights, deadlines=problem['durations'], problem['weights'],
problem['deadlines']
while pos2 == pos1: # keeps sampling until it finds a position other than pos1
pos2 = random.randint(0, job_num - 1) # samples another random position
job_num = len(durations) # gets the number of jobs
return pos1, pos2 # returns the two positions that should be swapped
# uses the greedy solver to get a first schedule
# this schedule will be then iteratively refined through local search
ِ �ت�ص greedy_sol = greedy_solver(problem, greedy_heuristic) # the best schedule so far
�تخدم الدال��ة التالي��ة ا�ص��رتاتيجية ُخُمتلف��ة وذل��ك باختياره��ا الدائ��م مل ُِه َّمت��ني ع�ص��وائيتني متجاورت��ني يف اجل��دول
ف�اإن،]0، 3، 1، 2[ اإذا كان اجل��دول احل��ايل لن�ص��خة م�ص��كلة ُمك َّون��ة م��ن اأرب��ع مه��ام ه��و، عل��ى �ص��بيل املث��ال.لتبادلهم��ا best_schedule, best_tardiness, best_finish_times = greedy_sol['schedule'],
.2><1 و1><3 و3><0 املبادالت املُر�صحة �صتكون فقط greedy_sol['tardiness'], greedy_sol['finish_times']
# local search
def adjacent_swap(schedule): for i in range(max_iterations): # for each of the given iterations
job_num = len(schedule) # gets the number of scheduled jobs # chooses which two positions to swap
pos1, pos2 = swap_selector(best_schedule)
pos1 = random.randint(0, job_num - 2) # samples a random position (excluding the last
one) new_schedule = best_schedule.copy() # create a copy of the schedule
pos2 = pos1 + 1 # gets the position after the sampled one
# swaps jobs at positions pos1 and pos2
return pos1,pos2 # returns the two positions that should be swapped new_schedule[pos1], new_schedule[pos2] = best_schedule[pos2],
best_schedule[pos1]
276 275
Compare)( Function دالة املقارنة ِ �ي�ص
�تخدم املقطع الربجمي التايل ا�ص��رتاتيجيتي املبادلة مع خوارزمية ح ّل البحث املحلّي حل ّل امل�ص��كلة التي مت اإن�ص��اوؤها
ثم تُظهر، كل خوارزمي��ات احل�لّ؛ حل� ّل كل امل�ص��كالت يف جمموع��ة بيان��ات معيّنةCompare)( ت�ص��تخدِ م الدال��ة التالي��ة :يف بداية هذا الدر�ص
وتَقبل الدال��ة كذلك املُعامِ ل،متو�ص��ط التباطُ �وؤ ال��ذي حتقق��ه كل خوارزمي��ة ح� ّل عل��ى كل امل�ص��كالت يف جمموعة البيان��ات
print(local_search_solver(sample_problem, weighted_deadline_heuristic, random_
: لتحديد اإمكانية ا�صتخدام خوارزمية احل ّل بالقوة املُفرطة اأم الuse_brute املنطقي swap, 1000))
print(local_search_solver(sample_problem, weighted_deadline_heuristic,
from collections import defaultdict adjacent_swap, 1000))
import numpy
def compare(problems,use_brute): {'schedule': [3, 4, 2, 1, 0], 'tardiness': 83, 'finish_times': [15, 21, 30,
# comparison on Dataset 1 41, 57]}
# maps each solver to a list of all tardiness values it achieves for the problems in the given dataset {'schedule': [3, 4, 2, 1, 0], 'tardiness': 83, 'finish_times': [15, 21, 30,
results = defaultdict(list) 41, 57]}
for problem in problems: # for each problem in this datset
#uses each of the solvers on this problem واأزمن��ة اإكم��ال امله��ام (�ص��تنتهي،83 واإجم��ايل التباطُ �وؤ،] له��ذا املث��ال3 ،4 ،2 ،1 ،0[ تُظه��ر النتائ��ج اأف�ص��ل ج��دول
if use_brute == True: .) وهكذا، منه21 يف الوحدة4 وتنتهي املُهِ َّمة، من الزمن15 يف الوحدة3 املُهِ َّمة
results['brute-force'].append(brute_force_solver(problem)
['tardiness']) Comparing Solvers ّمقارنة خوارزميات احلل
results['greedy-deadline'].append(greedy_solver(problem,deadline_
heuristic)['tardiness']) : لتوليد جمموعتي بياناتcreate_problem_instance)( ي�صتخدم املقطع الربجمي التايل الدالة ِ
results['greedy-weighted_deadline'].append(greedy_
solver(problem,weighted_deadline_heuristic)['tardiness']) . مهام7 ويف كل منها، ن�صخة مل�صكلة التباطُ وؤ املوزون لالآلة الواحدة100 • جمموعة بيانات من
results['ls-random-wdeadline'].append(local_search_solver(problem, . مُهِ مَّة30 ويف كل منها، ن�صخة مل�صكلة التباطُ وؤ املوزون لالآلة الواحدة100 • جمموعة بيانات من
weighted_deadline_heuristic, random_swap, 1000)['tardiness'])
results['ls-random-deadline'].append(local_search_solver(problem, :املو�صحة يف هذا الدر�ص َّ �صيتم ا�صتخدام جمموعة البيانات االأوىل ملقارنة اأداء جميع خوارزميات احل ّل
deadline_heuristic, random_swap, 1000)['tardiness']) . خوارزمية ح ّل القوة املُفرطة.1
results['ls-adjacent-wdeadline'].append(local_search_solver(problem,
weighted_deadline_heuristic, adjacent_swap, 1000)['tardiness']) . خوارزمية احل ّل اجل�صعة املُت�صمنة على ا�صتدالل خا�ص باملوعد النهائي.2
results['ls-adjacent-deadline'].append(local_search_solver(problem,
deadline_heuristic, adjacent_swap, 1000)['tardiness'])
. خوارزمية احل ّل اجل�صعة املُت�صمنة على ا�صتدالل خا�ص باملوعد النهائي املوزون.3
خوارزمية ح ّل البحث املحلّي املُت�صمنة على مبادالت ع�صوائية وخوارزمية احل ّل اجل�صعة ذات ا�صتدالل خا�ص باملوعد.4
for solver in results: # for each solver .النهائي الإيجاد احل ّل االأوّيل
# prints the solver's mean tardiness values
print(solver,numpy.mean(results[solver])) خوارزمية ح ّل البحث املحلّي املُت�صمنة على مبادالت ع�صوائية وخوارزمية احل ّل اجل�صعة ذات ا�صتدالل خا�ص باملوعد.5
.النهائي املوزون
: كلتيهماproblems_30 وproblems_7 مع جمموعتي البياناتcompare)( ُميكن االآن ا�صتخدام دالة خوارزمية ح ّل البحث املحلّي املُت�صمنة على مبادالت متجاورة وخوارزمية احل ّل اجل�صعة ذات ا�صتدالل خا�ص باملوعد.6
.النهائي
compare(problems_7,True) brute-force 211.49 خوارزمية ح ّل البحث املحلّي املُت�صمنة على مبادالت متجاورة وخوارزمية احل ّل اجل�صعة ذات ا�صتدالل خا�ص باملوعد.7
greedy-deadline 308.14 .النهائي املوزون
greedy-weighted_deadline 255.61
ls-random-wdeadline 212.35 �صيتم ا�صتخدام جمموعة البيانات الثانية ملقارنة جميع خوارزميات احل ّل با�صتثناء خوارزمية ح ّل القوة املُفرطة البطيئة
ls-random-deadline 212.43 . مُهِ َّمة30 جدً ا بالن�صبة للم�صكالت امل�صتملة على
ls-adjacent-wdeadline 220.62
ls-adjacent-deadline 224.36
#Dataset 1
problems_7 = []
for i in range(100):
compare(problems_30,False) greedy-deadline 10126.18 problems_7.append(create_problem_instance(7, [5, 20], [5, 50], [1, 3]))
greedy-weighted_deadline 8527.61
ls-random-wdeadline 6647.73 #Dataset 2
ls-random-deadline 6650.99 problems_30 = []
ls-adjacent-wdeadline 6666.47 for i in range(100):
ls-adjacent-deadline 6664.67 problems_30.append(create_problem_instance(30, [5,20], [5, 50], [1, 3]))
278 277
م��ن خ��الل اإكم��ال املقط��ع الربجم��ي، اأن�ص� خوارزمي��ة ح� ّل بالق��وة امل ُفرط��ة مل�ص��كلة التباط�وؤ امل��وز�ن لالآل��ة الواح��دة3
مترينات
.التايل بحيث ت�صتخدم الدال ُة القو َة امل ُفرطة آلإيجاد تبديل اجلد�لة اآلأمثل
اإل ) آلأ�ص��لوب البحث املحلي ِحل ّل م�ص��كلة التباطوؤ املوز�ن، حتويل، انعكا���ش، ِ�صف ا�ص��راتيجيتني ُخُمتلفتني (مبادلة1
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 279
. ِ�صف طريقة عمل البحث املحلّي5 من خالل اإكمال املقطع الربجمي التايل، اأن�ص خوارزمية ح ّل البحث املحلّي مل�صكلة التباطوؤ املوز�ن لالآلة الواحدة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=
282 281
تت�م �صياغ�ة الدال�ة املو�صوعي�ة كتعب�ر ريا�ص�ي ( )Mathematical Expressionلتح�ص�ينها (بزيادته�ا اأو تقليله�ا) بن�ا ًء عل�ى
املتغرات املنا�صبةُ ،ومتثِّل هذه الدالة الهدف من م�صكلة التح�صني مثل :زيادة الربح اأو تقليل التكاليفُ ،وحت َّدد يف العادة بنا ًء على الدر�ص الثالث
ِّ
املتغرات واملتباينات الريا�صية.متغرات احلالة ،وباملثل ُميكن �صياغة القيود با�صتخدام ِّ متغرات القرار ،كما ُحت َّدد اأحيانًا بنا ًء على ِّ
ِّ م�سكلة حت�س امل�سار
توج��د ع��دة أان��واع م��ن الربجم��ة الريا�صي��ة ،مث��ل :الربجم��ة اخلطي��ة ( ،)Linear Programming - LPوالربجم��ة الرباعي��ة
( )Quadratic Programming - QPوبرجم��ة ا أآلع��داد ال�صحيح��ة املختلط��ة (.)Mixed Integer Programming - MIP
متغرات القرار باالأعداد يركِّز هذا الدر���ص على برجمة االأعداد ال�صحيحة املختلطة املُ�ص��تخدَ مة يف امل�ص��كالت التي تتقيّد فيها ِّ
ال�صحيحة مثل :م�صكالت اجلدولة اأو اختيار الطريق. ة الريا سية يف م�سكالت التح�س ال
م�سكلة حقيبة ال هر The Knapsack Problem Mathematical Programming in Optimization Problems
م�ص��كلة حقيب��ة الظه��ر 1/0ه��ي مث��ال ب�ص��يط عل��ى ا�ص��تخدام برجم��ة ا أالع��داد ال�صحيح��ة املختلط��ة ل�صياغ��ة الدال��ة املو�صوعية يف الدر�ص��ني ال�ص��ابقني مت تو�صي��ح كيفي��ة ا�ص��تخدام اخلوارزمي��ات
ة الريا سية ال اال�ص��تداللية حل� ّل اأن��واع ُخُمتلف��ة من م�ص��كالت التح�ص��ني ،وبالرغم من اأن
والقي��ود ،و ُتع� َّرف امل�ص��كلة عل��ى النح��و الت��ايل :لدي��ك حقيب��ة ظهر ب�ص��عة ق�صوى تبلغ Cوح��دة ،وجمموعة م��ن العنا�صر ،Iبحيث (:)Mathematical Programming
يك��ون ل��كل عن�ص��ر iمتغ� ِّ�ران م��ن متغ� ِّ�رات احلال��ة هم��ا وزن العن�ص��ر wiوقيمت��ه ،viواملطل��وب ه��و تعبئ��ة احلقيب��ة مبجموع��ة حلوال جيدة،اال�ص��تدالالت باإمكانها اأن تكون �ص��ريعة جدً ا وتُنتج يف العادة ً
متغر الق��رار xiلتتبع جُتميعات العنا�صر التي �ص�تُع َّب أا يف هي تقنية تُ�ص��تخدم حل ّل م�ص��كالت التح�صني اإال اأنه��ا ال ت�صم��ن دائم��ا اإيج��اد احل� ّل االأمث��ل ،وق��د ال تك��ون منا�ص��بة ل��كل
العنا�ص��ر ذات اأق�ص��ى قيم��ة ممكن��ة يف ح��دود �ص��عة احلقيب��ةُ .ي�ص��تخدم ِّ اأن��واع امل�ص��كالت ،ويف ه��ذا الدر���ص �ص� ُ�رتكِّز عل��ى اأ�ص��لوب حت�ص��ني ُخُمتل��ف
حقيب��ة الظه��ر ،حي��ث تك��ون xi = 1اإذا مت اختي��ار العن�ص��ر iلالإ�صاف��ة للحقيب��ة ،بينم��ا تك��ون xi = 0خ��الف ذل��ك ،ويتم ّث��ل ع��ن طري��ق �صياغته��ا عل��ى هيئ��ة من��اذج
الهدف يف انتقاء جمموعة فرعية من العنا�صر من Iبحيث ت�صمل: ريا�صية. وهو الربجمة الريا�صية (.)Mathematical Programming
• القيد ( :)Constraintجمموع اأوزان العنا�صر املنتقاة بها ال يزيد عن ال�صعة الق�صوى .C ُميك��ن للربجم��ة الريا�صي��ة اأن حت� ّل العدي��د م��ن م�ص��كالت التح�ص��ني مث��ل:
تخ�صي���ص امل��وارد ،وتخطي��ط االإنت��اج ،واخلدم��ات اللوج�ص��تية واجلدول��ة ،وتتمي��ز ه��ذه التقني��ة باأنه��ا تُو ّف��ر ح� ًّ�ال مثال ًي��ا م�صمو ًن��ا
• الدالة املو�صوعية ( :)Objective Functionجمموع قيم العنا�صر املنتقاة بها هي اأق�صى قيمة ُممكنة. ُوميكنها التعامل مع امل�صكالت املعقدة ذات القيود املتعددة.
املتغرات ،حيث ُمتثِّل هذه يبداأ ح ّل الربجمة الريا�صية ب�صياغة م�صكلة التح�صني املُعطاة على �صكل منوذج ريا�صي با�صتخدام ِّ
v0=20 املتغرات القيم التي يجب حت�صينها ،ثم يتم ا�صتخدامها لتحديد الدالة املو�صوعية والقيود ،وهما ي�صفان امل�صكلة معًا ُوميكِّنان ِّ
w0=5 w3=8 v3=15
من ا�صتخدام خوارزميات الربجمة الريا�صية.
�تخدم الربجم��ة الريا�صي��ة متغ� ِّ�رات الق��رار ( )Decision Variablesالت��ي ت�ص��اعد ُمت َِّخ��ذ الق��رار يف اإيج��اد احلل املنا�ص��ب ت�ص� ِ
v1=10 �تخدم متغ� ِّ�رات احلال��ة ( )State Variablesالت��ي ال يتحك��م فيه��ا ع��ن طري��ق �صبطه��ا والتحك��م فيه��ا ،كم��ا ميكنه��ا اأن ت�ص� ِ
w1=10 v4=7
w4=11 متغرات ُم َّت ِخ��ذ الق��رار وتفر�صه��ا البيئ��ة اخلارجي��ة ،وبالت��ايل ال ميك��ن �صب��ط متغ� ِّ�رات احلالة .تُو ِّف��ر القوائم التالية اأمثل��ة على ِّ
ومتغرات احلالة لبع�ص م�صكالت التح�صني ال�صائعة: القرار ِّ
v2=23
w2=19 =w5=2 v5
7 ومتغريات احلالةِّ جدول : .2اأمثلة على ِّ
متغريات القرار
�صكل :5.6م�صكلة حقيبة الظهر
متغرات احلالةِّ متغرات القرار
ِّ
يو�ص��ح ال�ص��كل 5.6مث� ً�اال عل��ى م�ص�األة حقيب��ة ظه��ر مُك َّون��ة م��ن �ص��تة عنا�ص��ر ب�اأوزان و ِقي��م حم�دَّدة ،وحقيب��ة ظه��ر ب�ص��عة
ِّ تخطيط اآلإنتاج الكمي��ة الت��ي يج��ب اإنتاجه��ا م��ن كل تَو ّف��ر امل��واد اخل��ام ،و�ص��عة اآالت االإنت��اج ،وتَو ّف��ر
ق�ص��وى ت�ص��اوي اأربع��ني وح��دة .يق��وم املقط��ع الربجم��ي الت��ايل بتثبي��ت مكتب��ة البايث��ون املفتوح��ة امل�ص��در mipاخلا�ص��ة العمالة املطلوبة لالإنتاج. مُنتَج.
بربجمة االأعداد ال�صحيحة املختلطة حل ّل ن�صخة م�صكلة حقيبة الظهر ،1/0وي�صتورد الوحدات ال�صرورية: ع��دد ال�ص��لع الت��ي يج��ب نقله��ا م��ن امل�ص��افة ب��ني االأماك��ن الت��ي يج��ب زيارته��ا و�ص��عة
املركبات. مكان الآخر. نقل املوارد
!pip install mip # install the mip library
ترتي��ب كل ُمهِ َّم��ة وامل��دة الزمني��ة تَو ّف��ر الع ّم��ال واالآالت ،واملواعي��د النهائي��ة ،ووزن
اأهمية كل ُمهِ َّمة. الالزمة الإجرائها. جد�لة املهام
# imports useful tools from the mip library
from mip import Model, xsum, maximize, BINARY
values = [20, 10, 23, 15, 7, 7] # values of available items تكلي��ف الع ّم��ال وجدولته��م للقي��ام مه ��ارات كل عا م ��ل وتف�صيال ت ��ه ،وجاهز ّيت ��ه، توزيع املو فني
weights = [5, 10, 19, 8, 11, 2] # weights of available items مبهام ُخُمتلفة يف اأوقات ُخُمتلفة .وامله��ارات املطلوب��ة من��ه الإجناز كل ُمهِ َّمة. ح�صب املهام
284 283
for i in I: # for each item
if x[i].x == 1: # if the item was selected C = 40 # knapsack capacity
)'print('item', i, 'was selected
# updates the total weight and value of the solution I = range(len(values)) # creates an index for each item: 0,1,2,3,...
]total_weight += weights[i
]total_value += values[i solver = Model("knapsack") # creates a knapsack solver
solver.verbose = 0 # setting this to 1 will print more information on the progress of the solver
)print('total weight', total_weight
)print('total value', total_value x = [] # represents the binary decision variables for each item.
# for each items creates and appends a binary decision variable
item 0 was selected for i in I:
item 2 was selected ))x.append(solver.add_var(var_type = BINARY
item 3 was selected
item 5 was selected # creates the objective function
total weight 34 ))solver.objective = maximize(xsum(values[i] * x[i] for i in I
total value 65
# adds the capacity constraint to the solver
solver += xsum(weights[i] * x[i] for i in I) <= C
م�سكلة البائع املُتجوّل
# solves the problem
Traveling Salesman Problem )(solver.optimize
م�صكلة البائع امل ُتجوّل ( )Traveling Salesman Problem - TSPمن امل�صكالت
اآلأمثلة الواردة يف خُمطط م�صكلة البائع االأخرى التي ُميكن حلّها بربجمة االأعداد ال�صحيحة املختلطة ،وهي م�ص�كلة ماألوفة
ات�صاآل تاما فهناك
امل ُتجوّل مت�صلة ً ><OptimizationStatus.OPTIMAL: 0
حافة ت�صل كل ز�ج من العُقد باآلآخر.
تُعنى بتحديد اأق�صر م�صار ميكن اأن ي�صلكه بائع متجوِّل لزيارة مدنٍ معيّنة مرة واحدة،
دون اأن يك� ّرر زي�ارة اأيٍّ منه�ا ،ث ّ�م يع�و َد للمدين�ة االأ�صلي�ة ،وي�ص ِّور ال�ص�كل 5.7ن�ص�خ ًة
من هذه امل�صكلة. متغرات القرار الثنائية للعنا�صر ،وتُوفِّر املكتبة mipيف البايثون ما يلي: يُن�صئ املقطع الربجمي القائمة xلتخزين ِّ
1 ُمتثِّل كل دائرة (عقدة) مدينة اأو موقعًا يجب زيارته ،وهناك حافة تربط بني موقعني املتغرات الثنائية واإ�صافتها اإىل خوارزمية احللّ. • اأداة ( add_var)var_type=BINARYالإن�صاء ِّ
اإذا كان من املمكن ال�صفر بينهماُ ،وميثِّل الرقم املوجود على احلافة التكلفة (امل�صافة) • اأداة () maximizeمل�ص��كالت التح�ص��ني الت��ي حتت��اج لزي��ادة دال��ة مو�صوعي��ة ،أام��ا م�ص��كالت التح�ص��ني الت��ي تتطل��ب
20
بني املوقعني .يف هذا املثال ،مت ترقيم املواقع وفقًا لرتتيبها يف احل ّل االأمثل للم�صكلة، ت�صغر الدالة املو�صوعية ،فت�صتخدم االأداة ().minimize
10 15
4
وتكونالتكلفةاالإجماليةللطريق 1 3 4 2 1ت�صاوي،10 25 30 15=80 • اأداة () xsumالإن�ص��اء التعب��رات الريا�صي��ة الت��ي تت�صم��ن املجامي��ع( ،)sumsويف املث��ال ال�ص��ابق مت ا�ص��تخدام ه��ذه
25 30
وهو اأق�صر طريق ممكن لزيارة كل مدينة مرة واحدة فقط والعودة اإىل نقطة البداية. ال�صعة وحلّه.
االأداة حل�صاب جمموع الوزن االإجمايل للعنا�صر يف اإن�صاء قيد ّ
توجد تطبيقات عملية مل�صكلة البائع املُتجوّل يف اخلدمات اللوج�صتية ،والنقل ،واإدارة • اأداة () optimizeالإيج��اد ح� ّل ِّ
يح�ص��ن الدال��ة املو�صوعي��ة يف ظ��ل االلت��زام بالقيود ،وتَ�ص��تخدم االأداة برجم َة االأعداد
2 35 3
ا إالم�دادات واالت�ص�االت ،فه�ي تنتم�ي اإىل عائل�ة اأو�ص�ع م�ن م�ص�كالت حتديد الطريق ملتغرات القرار والإيجاد التوليفة التي ُحت ِّ�صن الهدف. ال�صحيحة املختلطة للنظر بكفاءة يف توليفات القيم املُختلفة ِّ
�صكل :5.7ن�صخة على م�صكلة البائع املُتجوّل أي�صا م�صكالت �صهرة اأخرى مو�صحة فيما يلي: التي ت�صمل ا ً • املُعامِ ل = الإ�صافة قيود اإ�صافية اإىل خوارزمية احل ّل املوجودة.
• تت�صم��ن م�ص��كلة حتدي��د م�ص��ار املركب��ات ( )Vehicle Routing Problemاإيج��اد الطُ ��رق املُثل��ى الأ�ص��طول م��ن املركب��ات يف املقط��ع الربجم��ي اأدن��اه حتت��وي القائم��ة xعل��ى متغ� ِّ�ر ثنائ��ي واح��د ل��كل عن�صر ،وبعد ح�ص��اب احل ّل �ص��يكون كل ِّ
متغر
لتو�صي��ل ال�ص��لع اأو اخلدم��ات ملجموع��ة م��ن العم��الء يف ظ��ل تقلي��ل امل�ص��افة االإجمالي��ة املقطوع��ة اإىل احل��د االأدن��ى ،وت�ص��مل م�ص��اويًا للواح��د اإذا اأُدرج العن�ص��ر يف احل� ّل ،و�ص ُي�ص��اوي �صف� ًرا بخ��الف ذل��ك .تَ�ص��تخدم املكتب��ة ِ mipبن��اء اجلمل��ة
تطبيقاتها اخلدمات اللوج�صتية وخدمات التو�صيل وجمع النفايات. x]i[.xالإظه��ار القيم��ة الثنائي��ة للعن�ص��ر ذي الفهر���ص َ ،iوحت�ص��ب خوارزمي��ة احل � ّل متغ� ِّ�ر الق��رار ،xث��م جُت��د القيم��ة
• تت�صم��ن م�ص��كلة اآل�ص��تالم �الت�ص��ليم ( )Pickup and Delivery Problemاإيج��اد الطُ ��رق املُثل��ى للمركب��ات لك��ي ت�ص��تلم متغر القرار َ ،xوجُتمع االأوزان والقيم لكل عن�صر االإجمالية والوزن االإجمايل للعنا�صر املنتقاة عن طريق التكرار على ِّ
ُو�صل) الب�صائع اأو االأ�ص��خا�ص اإىل مواقع ُخُمتلفة ،وت�ص��مل تطبيقاتها خدمات �ص��يارات االأجرة، (حتمِّل اأو ُتر ِْكب) وت�ص�لِّم (ت ِ ُ مو�صح يف املقطع الربجمي التايل: منتقى ،iا�صتنادًا اإىل [ ،x]iوتَعر�صها كما هو َّ
واخلدمات الطبية الطارئة ،وخدمات النقل اجلماعي.
• تت�صم��ن م�ص��كلة جد�ل��ة مواعي��د القط��ارات ( )Train Timetabling Problemاإيج��اد ج��داول زمني��ة مثالي��ة للقط��ارات 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
# adds the startstop location at the beginning and end of the best route and returns
8 بحي��ث يت�صم��ن،ي�ص��تخدِ م املقط��ع الربجم��ي الت��ايل الدال��ة ال��واردة �ص��ابقًا الإن�ص��اء ن�ص��خة م��ن م�ص��كلة البائ��ع املُتج�وّل
return [startstop] + list(best_route) + [startstop], best_distance :20 و5 وم�صافات ثنائية ترتاوح بني،مواقع
ِ
startstop الحظ اأن موقع. الإن�صاء كل الطُ رق املُمكنةpermutations)( ت�صتخدم خوارزمية ح ّل القوة املُفرطة اأداة dist_matrix, location_ids, startstop = create_problem_instance(8, (5, 20))
print(dist_matrix)
، فعلى �ص��بيل املثال،(االنط��الق والتوق��ف) ُي�ص��تبعد م��ن التبادي��ل؛ الأن��ه يج��ب اأن يظه��ر دائ ًم��ا يف بداية ك ّل طري��ق ونهايته print(startstop)
�ص��تكون،) (االنط��الق والتوق��فstartstop ه��و موق��ع0 وكان املوق��ع،3 و،2 و،1 و،0 اإذا كان��ت لدي��ك اأربع��ة مواق��ع
:قائمة التباديل املُمكنة كما يلي
[[ 0. 19. 17. 15. 18. 17. 7. 15.]
[19. 0. 15. 18. 11. 6. 20. 5.]
for route in permutations({1,2,3}): [17. 15. 0. 17. 15. 7. 5. 11.]
print(route) [15. 18. 17. 0. 19. 7. 7. 16.]
[18. 11. 15. 19. 0. 17. 20. 17.]
[17. 6. 7. 7. 17. 0. 15. 14.]
(1, 2, 3) [ 7. 20. 5. 7. 20. 15. 0. 14.] الحظ اأن الخط القُطري يُمثَّل الم�صافات
(1, 3, 2) [15. 5. 11. 16. 17. 14. 14. 0.]] ،)dist_ matrix]i،i[( من العُقد اإلى نف�صها
(2, 1, 3) 3
(2, 3, 1)
.وبالتالي فاإن الم�صافات ت�صاوي اأ�صفارًا
(3, 1, 2)
(3, 2, 1)
288 287
ي�ص��تخدِ م املقط��ع الربجم��ي الت��ايل مكتب��ة البايث��ون mipالإن�ص��اء خوارزمي��ة ح� ّل برجم��ة ا أالع��داد ال�صحيح��ة املختلط��ة، َحت�ص��ب خوارزمي��ة ح� ّل الق��وة املُفرط��ة امل�ص��افة االإجمالي��ة ل��كل طري��ق ،وتُظه��ر يف النهاي��ة الطري��ق ذا امل�ص��افة االأق�ص��ر.
متغر قرار ثُنائي لكل انتقال ممكن يف ن�صخة م�صكلة البائع املُتجوّل التي مت اإن�صاوؤها �صابقًا: ثم ي�صيف ِّ ُيط ِّبق املقطع الربجمي التايل خوارزمية احل ّل على ن�صخة م�صكلة البائع املُتجوّل التي مت اإن�صاوؤها �صابقًا:
from itertools import product # used to generate all possible transition )brute_force_solver(dist_matrix, location_ids, startstop
from mip import BINARY
from mip import Model,INTEGER
)([3, 5, 2, 7, 1, 4, 0, 6, 3], 73.0
solver = Model() # creates a solver
solver.verbose = 0 # setting this to 1 will print info on the progress of the solver
عل��ى غ��رار خوارزمي��ات ح� ّل الق��وة املُفرط��ة الت��ي مت تو�صيحه��ا يف الدرو���ص ال�ص��ابقة ،ال تُط َّب��ق ه��ذه اخلوارزمي��ة اإال عل��ى
# 'product' creates every transition from every location to every other location نُ�ص��خ م�ص��كلة البائ��ع املُتج�وّل ال�صغ��رة؛ الأن ع��دد الطُ ��رق املُمكن��ة يتزاي��د اأ�صعا ًف��ا م�صاعف��ة كلم��ا زاد العدد ، Nوي�ص��اوي
))transitions = list(product(location_ids, location_ids
!( ، )N−1وعلى �صبيل املثال ،عندما يكون ،N = 15فاإن عدد الطُ رق املُمكنة ي�صاوي .14! = 87,178,291,200
N = len(location_ids) # number of locations
ا�ستخدام بر ة األأعداد ال�سحيحة املختلطة حللّ م�سكلة البائع املُتجوّل
# creates a square numpy array full of 'None' values
)x = numpy.full((N, N), None
Using MIP to Solve the Traveling Salesman Problem
ال�ص��تخدام برجم��ة اآلأع��داد ال�صحيح��ة املختلط��ة ( )MIPحل� ّل م�ص��كلة البائ��ع امل ُتج�وّل ( ،)TSPيج��ب اإن�ص��اء �صيغ��ة
# adds binary variables indicating if transition (i->j) is included in the route
for i, j in transitions:
كال من الدالة املو�صوعية وقيود م�صكلة البائع املُتجوّل. ريا�صية تُغطي ً
)x[i, j] = solver.add_var(var_type = BINARY تتطل��ب ال�صيغ��ة متغ� ِّ�ر ق��رار ثنائ��ي xijل��كل انتق��ال حمتم��ل i→jم��ن موق��ع iاإىل موق��ع اآخ��ر ،jواذا كان��ت امل�ص��كلة
به��ا ع��دد Nم��ن املواق��ع ،ف�اإن ع��دد االنتق��االت املُمكن��ة ي�ص��اوي ( .N×)N−1اإذا كان��ت xijت�ص��اوي ،1ف�اإن احل� ّل يت�صم��ن
ي�ص�تخدِ م املقط�ع الربجم�ي ال�ص�ابق اأداة () numpy.fullالإن�ص�اء م�صفوف�ة numpyبحج�م NxNلتخزي�ن املتغ ِّ�رات االنتقال من املوقع iاإىل املوقع ،jوخالف ذلك اإذا كانت xijت�صاوي ،0فلن يُدرج هذا االنتقال يف احللّ.
الثنائية .x
ُميك��ن الو�ص��ول ب�ص��هولة اإىل العنا�ص��ر يف م�صفوف��ة numpyثنائي��ة االأبع��اد ع��رب ال�صيغ��ة الربجمي��ة [ ]i,jفعل��ى �ص��بيل
بع�د اإ�صاف�ة متغ ِّ�رات الق�رار ُ ،xميك�ن ا�ص�تخدام املقط�ع الربجم�ي الت�ايل ل�صياغ�ة وح�ص�اب الدال�ة املو�صوعي�ة مل�ص�كلة املثال:
البائع املُتجوّل ،حيث تقوم الدالة بالتكرار على كل انتقال ممكن j iوتُ�صرب م�صافتها [ dist_matrix]i,jمع ِّ
متغر
قراره�ا [ ،x]i,jواإذا مت اإدراج االنتق�ال يف احل� ّل �ص�يوؤخذ x]i,j[=1و [ dist_matrix]i,jبع�ني االعتب�ار ،وبخ�الف ذل�ك arr = numpy.full((4,4), 0) # creates a 4x4 array full of zeros [[0 0 0 ]0
�صتُ�صرب [ dist_matrix]i,jيف �صفر ليتم جُتاهُ لُها: [0 0 0 ]0
)print(arr [0 0 0 ]0
[0 0 0 ]]0
# the minimize tool is used then the objective function has to be minimized
from mip import xsum, minimize arr[0, 0] = 1
arr[3, 3] = 1 [[1 0 0 ]0
[0 0 0 ]0
# objective function: minimizes the distance
)(print [0 0 0 ]0
solver.objective = minimize(xsum(dist_matrix[i,j]*x[i][j] for i,j in
)print(arr [0 0 0 ]]1
))transitions
ته��دف اخلط��وة التالي��ة اإىل التاأك��د ب�اأن اخلوارزمي��ة تُظه��ر احلل��ول الت��ي ت�صم��ن زي��ارة كل املواق��ع مل�رَّة واح��دة فق��ط، ي�ص� ِ
�تخدم املقط��ع الربجم��ي االأداة () productم��ن املكتب��ة itertoolsحل�ص��اب جمي��ع انتق��االت املواق��ع املحتمل��ة ،فعل��ى
با�ص ��تثناء موق ��ع ( startstopاالنط ��الق والتوقف)ح�ص ��ب م ��ا تتطلب ��ه م�ص ��كلة البائ ��ع املُتج �وّل ،وزي ��ارة كل موق ��ع م ��رة �صبيل املثال:
واحدة تعني اأن الطريق ال�صحيح ُميكن اأن:
• ي�صل اإىل كل موقع مرة واحدة فقط. }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
# for each location id 2 0
for i in location_ids: 2 1
solver += xsum(x[i,j] for j in location_ids - {i}) == 1 # exactly 1 arrival 2 2
solver += xsum(x[j,i] for j in location_ids - {i}) == 1 # exactly 1 departure
290 289
ال��وارد يف احل� ّل املُك�وَّن م��ن طريق��ني لن�ص��خة م�ص��كلة البائ��ع املُتج�وّل1 2 1 ف ِّك��ر يف الطري��ق،عل��ى �ص��بيل املث��ال ففي ن�ص��خة،ت�ص��مل ال�صيغة الكاملة مل�ص��كلة البائع املُتجوّل نوعً ا اإ�صافيًا اآخرًا من القيود ل�صمان ح�ص��اب الطُ رق املت�صلة
، وه��ذا م�ص��تحيل،y1 y2 1 واأن تك��ونy2 y1 1 حي��ث يتطل��ب قي��د االت�ص��ال اأن تك��ون،املو�صح��ة يف ال�ص��كل ال�ص��ابق . هو موقع االنطالق والتوقف0 ُيفرت�ص اأن املوقع5.8 م�صكلة البائع املُتجوّل الواردة يف ال�صكل
.ّفلذلك �صيتم ا�صتبعاد احلل ،2 1 4 3 0 اأق�ص�ر طري�ق ممك�ن ه�و،يف ه�ذا املث�ال
،y1 y4 1 واأن تك��ونy4 y3 1 اأن تك��ون0 2 1 4 3 0 يتطل��ب احل � ّل ال�صحي��ح،يف املقاب��ل 2 ولك�ن عند عدم وج�ود قيد ات�صال،24 مب�ص�افة �ص�فر اإجمالي�ة قدره�ا
وال تنطب��ق،y2=3 وy1=2 وy4=1 وy3=0 : كم��ا ياأت��يy ُوميك��ن حتقي��ق ذل��ك ب�صب��ط قي��م،y2 y1 1 واأن تك��ون 5
:�ص�يكون هن�اك ح� ّل �صحي�ح اآخ�ر ي�ص�مل طريق�ني غ�ر مت�صل�ني هم�ا
.) (االنطالق والتوقفstartstop قيود االت�صال على االنتقاالت التي ت�صمل موقع وهذا احل ّل املتمثل يف وجود طريقني،1 2 1 و0 4 3 0
1 ميتث�ل لقي�ود الو�ص�ول واملغ�ادرة الت�ي مت تعريفه�ا يف املقط�ع الربجم�ي
:َجُتمع الدالة التالية كل االأ�صياء معًا الإن�صاء خوارزمية ح ّل برجمة االأعداد ال�صحيحة املختلطة مل�صكلة البائع املُتجوّل 5 6
4 ولكن،ال�ص�ابق؛ الأن كل موق�ع يدخ�ل ل�ه ويخ�رج من�ه م�رة واح�دة فق�ط
from itertools import product 7 5 .هذا احل ّل غر مقبول مل�صكلة البائع املُتجوّل
from mip import BINARY,INTEGER
from mip import Model 0 3 3 ُميك�ن فر��ص ح� ّل ي�ص�مل طريقً�ا واح�دً ا مت�ص ً�ال باإ�صافة متغ ِّ�ر القرار
from mip import xsum, minimize و�ص�تحافظ ه�ذه املتغ ِّ�رات عل�ى ترتيب زي�ارة كل موقع،i ل�كل موق�عyi
ن�صخة م�صكلة البائع املُتجوّل:5.8 �صكل .ّيف احلل
def MIP_solver(dist_matrix, location_ids, startstop):
solver = Model()# creates a solver
solver.verbose = 0 # setting this to 1 will print info on the progress of the solver # adds a decision variable for each location
# creates every transition from every location to every other location y = [solver.add_var(var_type = INTEGER) for i in location_ids]
transitions = list(product(location_ids,location_ids))
N = len(location_ids) # number of locations
# create an empty square matrix full of 'None' values y3=0، y4=1، y1=2، : كم��ا يل��يy ف�ص��تكون قي��م،0 2 1 4 3 0 : اإذا كان احل� ّل ه��و،عل��ى �ص��بيل املث��ال
x = numpy.full((N, N), None) . اخلا�صة به بعني االعتبارy ولذلك ال توؤخذ قيمة، هو موقع االنطالق والتوقف0 واملوقع،y2=3
# adds binary decision variables indicating if transition (i->j) is included in the route
for i, j in transitions: الj i ُميك��ن ا�ص��تخدام متغ� ِّ�رات الق��رار اجلدي��دة ه��ذه ل�صم��ان االت�ص��ال م��ن خ��الل اإ�صاف��ة قي��د جدي��د ل��كل انتق��ال
x[i, j]=solver.add_var(var_type = BINARY) .) (االنطالق والتوقفstartstop ي�صمل موقع
# objective function: minimizes the distance
solver.objective = minimize(xsum(dist_matrix[i,j]*x[i][j] for i,j in transitions))
# Arrive/Depart Constraints # adds a connectivity constraint for every transition that does not include the startstop
for i in location_ids: for (i, j) in product(location_ids - {startstop}, location_ids - {startstop}):
solver += xsum(x[i,j] for j in location_ids - {i}) == 1 # exactly 1 arrival # ignores transitions from a location to itself
solver += xsum(x[j,i] for j in location_ids - {i}) == 1 # exactly 1 departure if i != j:
# adds a binary decision variable for each location solver += y[j] - y[i] >= (N+1) * x[i, j] - N
y = [solver.add_var(var_type=INTEGER) 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}): ف �اإن املتباين��ة ال��واردة يف االأعل��ى ت�صب��ح، ومت اإدراج ه��ذا االنتق��ال يف احل � ّلj i النتق��الxij=1 اإذا كان��ت
if i != j: # ignores transitions from a location to itself
solver += y[j] - y[i] >=(N+1)*x[i,j] - N
باالإ�صاف��ة اإىل، اخلا�ص��ة به��ا اأعل��ىy ومعن��ى ذل��ك اأن املواق��ع الت��ي �ص�تُزا ُر الح ًق��ا ال ب��د اأن تك��ون قيم��ة،y]j[ <= y]i[ 1
solver.optimize() #solves the problem : و�صيكون الطريق الذي ال ي�صمل موقع االنطالق والتوقف �صحيحً ا فقط اإذا،قيود الو�صول واملغادرة
# prints the solution .• بداأ وانتهى باملوقع نف�صه؛ ل�صمان اأن يكون لكل موقع و�صو ٌل واح ٌد ومغادرة واحدة فقط
if solver.num_solutions: # if a solution was found
best_route = [startstop] # stores the best route ل��كل االنتق��االت الت��يy]i[ يج��ب اأن تك��ون اأك��رب م��نy]j[ اأعل��ى ل��كل املواق��ع الت��ي �ص�تُزا ُر الح ًق��ا؛ الأنy • خُ �ص�ص��ت قي��م
curr_loc = startstop # the currently visited location : عل��ى �ص��بيل املث��ال،أي�ص��ا اإىل جُتن��ب اإ�صاف��ة احلاف��ة نف�ص��ها م��ن اجُت��اه ُخُمتل��فً وي�وؤدي ه��ذا ا،مت اإدراجه��ا يف الطري��ق
while True:
for next_loc in location_ids:# for every possible next location
i j وj i
if x[curr_loc,next_loc].x == 1: # if x value for the curr_loc->next_loc transition is 1 اخلا�ص��ة ب��ه ه��ي اأك��رب واأ�صغ��ر م��ن قي��م كلy ف��ال ب� ّد اأن تك��ون قيم��ة،ولك��ن اإذا كان املوق��ع ميث��ل بداي��ة الطري��ق ونهايت��ه
best_route.append(next_loc) # appends the next location to the route
curr_loc=next_loc # visits the next location
ف�ص� ُتوؤدي اإ�صافة قيد االت�صال اإىل ا�ص��تبعاد اأية حلول بها طُ رق، ونظرًا ال�ص��تحالة هذا االأمر،املواقع الباقية يف الطريق
break .ال ت�صمل موقع االنطالق والتوقف
if next_loc == startstop: # exits if route returns to the startstop
break
return best_route, solver.objective_value # returns the route and its total distance
292 291
مترينات يولِّد املقطع الربجمي التايل 100ن�ص��خة من م�ص��كلة البائع املُتجوّل ت�ص��مل 8مواقع وترتاوح امل�ص��افات فيها بني 5و،20
كم��ا اأن��ه ي�ص� ِ
�تخدم خوارزمي��ة ح� ّل الق��وة املُفرط��ة ،وخوارزمي��ة ح� ّل برجم��ة االأع��داد ال�صحيح��ة املختلط��ة حل� ّل كل حالة،
و ُيظهِ ر الن�صبة املئوية لالأ�صلوبني اللذين اأظهرا طريقني لهما امل�صافة نف�صها:
1ا�صرح طريقة ا�صتخدام الربجمة الريا�صية حل ّل م�صكالت التح�صني املعقدة. same_count = 0
for i in range(100):
)]dist_matrix, location_ids, startstop=create_problem_instance(8, [5,20
)route1, dist1 = brute_force_solver(dist_matrix, location_ids, startstop
)route2, dist2 = MIP_solver(dist_matrix, location_ids, startstop
# counts how many times the two solvers produce the same total distance
if dist1 == dist2:
same_count += 1
)print(same_count / 100
1.0
توؤك��د النتائ��ج اأن خوارزمي��ة ح � ّل برجم��ة االأع��داد ال�صحيح��ة املختلط��ة تُظهِ ��ر احل � ّل االأمث��ل بن�ص��بة 100%ل��كل نُ�ص��خ
ويو�صح املقطع الربجمي التايل �صرعة خوارزمية ح ّل برجمة االأعداد ال�صحيحة املختلطة من خالل ا�صتخدامها امل�صكلةِّ ،
حل ّل 100ن�صخة كبرة تت�صمن ك ٌّل منها 20موقعًا:
import time
188.90074133872986
عل��ى الرغ��م م��ن اأن وق��ت التنفي��ذ الدقي��ق �ص��يعتمد عل��ى ق��وة معاجلة اجلهاز ال��ذي ت�ص��تخدِ مه لتنفيذ مفكرة جوبي��رت ،اإال اأنه من
املفرت�ص اأن ي�صتغرق التنفيذ ب�صع دقائق حل�صاب احل ّل جلميع جمموعات البيانات املئة.
و ه ��ذا ب ��دوره مذ ه ��ل اإذا مت ا الأ خ ��ذ يف االعتب ��ار اأن ع ��دد الطُ ��رق ا ملُمكن ��ة ل ��كل ن�ص ��خة م ��ن النُ�ص ��خ املئ ��ة ه ��ي:
19 = 121,645,100,000,000,000طري ًق��ا ُخُمتل ًف��ا ،ومث��ل ه��ذا الع��دد الكب��ر من الطُ رق يفوق بكثر قدرات اأ�ص��لوب القوة
املُفرط��ة ،وم��ع ذل��ك فاإن��ه ع��ن طري��ق البح��ث الف ّع��ال يف ه��ذه امل�ص��احة الهائل��ة اخلا�ص��ة بجميع احلل��ول املُمكنة ُميك��ن خلوارزمية
ح ّل برجمة االأعداد ال�صحيحة املختلطة اأن جُتد الطريق االأمثل ب�صرعة.
أي�ص��ا ،فهي تتطلب فه ًم��ا قويًا للنمذج��ة الريا�صية وقد وعل��ى الرغ��م م��ن مزاي��ا الربجم��ة الريا�صي��ة اإال اأنه��ا متل��ك قي��ودًا خا�صة ا ً
ال تك��ون منا�ص��بة للم�ص��كالت املعق��دة الت��ي ي�صع��ب فيه��ا التعبر عن الدالة املو�صوعية والقيود بوا�ص��طة ال�صي��غ الريا�صية ،وعلى
الرغم من اأن الربجمة الريا�صية اأ�صرع بكثر من اأ�صلوب القوة املُفرطة اإال اأنها قد تظل بطيئة جدً ا بالن�صبة ملجموعات البيانات
بديال اأكر �صرعة.املو�صح يف الدر�صني ال�صابقني ً يقدم االأ�صلوب اال�صتداليل َّ الكبرة ،ويف مثل هذه احلاالت ِّ
294 293
م��ن خ��الل اإكم��ال املقط��ع الربجم��ي الت��ايل بحي��ث، اأن�ص� دال��ة خوارزمي��ة ح� ّل الق��وة امل ُفرط��ة مل�ص��كلة البائ��ع امل ُتج�وّل5 ِّ ثم حدِّد، قم بتحليل م�ص��كلتني من م�ص��كالت التح�ص��ني ُميكن حلهما با�ص��تخدام الربجمة الريا�صية3
متغرات احلالة
:تُظهر الدالة امل�صار اآلأف�صل �امل�صافة اآلإجمالية امل ُثلى .�متغرات القرار اخلا�صة بهما
ِّ
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
return [startstop] + list(best_route) + [startstop], best_distance
296 295
الم�سروع من خالل اإكمال املقطع الربجمي، اأن�ص خوارزمية ح ّل برجمة اآلأعداد ال�صحيحة املختلطة مل�صكلة البائع امل ُتجوّل6
:متغرات القرار �قيود اآلت�صال انتقا ًء �صحيحً ا
ِّ بحيث تنتقي،التايل
298 297
.6ال��ذكاء األ�سطناعي واملجتمع ماذا تع ّلمت
�سيتعرّ ف الطالب يف هذه الوحدة على اأخالقيات الذكاء األ�سطناعي وتاأ ريها على تطوير
اأن مته املتقدمة وحتديد توجهاتها ،و�سيُقيِّم مدى تاأ ري اأن مة الذكاء األ�سطناعي وا�سعة
النطا على املجتمعات والبي ة ،وكيفية تن يم مثل هذه األأن مة لال�س�تخدام األأخالقي
حتديد اأ�ساليب التح�س املالئمة حللّ امل�سكالت املعقدة.
ُ�س�رية على
ة طائرة م َّ املُ�س�تدام ،و�سي�س�تخدِ م بعد ذل ُحماكي ويبوت��ص ( )Webotsل
احلركة الذاتية وا�ستك�ساف منطقة ما من خالل حتليل ال�سور. ح ��لّ م�س ��كالت تخ�سي� ��ص امل ��وارد ع ��ن طري ��ق تطبي ��ق مقط ��ع بر ��ي بلغ ��ة
البايثون.
حلّ م�سكالت اجلدولة عن طريق تطبيق مقطع بر ي بلغة البايثون.
اأهداف التعلُّم حلّ م�سكلة حقيبة ال هر با�ستخدام خوارزميات التح�س املختلفة.
بنهاية هذه الوحدة �سيكون الطالب قادرًا على اأن: حلّ م�سكلة البائع املُتجوّل با�ستخدام خوارزميات التح�س املختلفة.
يُعرِّ ف اأخالقيات الذكاء األ�سطناعي.
يُف�سِّ ��ر م��دى تاأ ��ري التح ُّي��ز واألإن�س��اف عل��ى األ�س��تخدام األأخالقي ألأن م��ة الذكاء
األ�سطناعي. امل�سطلحات الرئي�سة
يُقيِّم كيفية حل م�س��كلة ال�س��فافية وقابلية التف�س��ري يف الذكاء األ�سطناعي.
Brute-Force خوارزمية ح ّل القوة Mat ematical
يُح ِّل ��ل كيفي ��ة تاأ ��ري اأن م ��ة ال ��ذكاء األ�سطناع ��ي وا�س ��عة النط ��ا عل ��ى املجتم ��ع Solver امل ُفرطة Programming
الربجمة الريا�صية
وكيفية و سع قوان لتن يمها. Constraint
Mixed Integer برجمة اآلأعداد ال�صحيحة
Programming
الربجمة القيدية Programming املختلطة
ُ�سرية على احلركة الذاتية. ُي مج جهاز الطائرة امل َّ Greed euristic خوارزمية ا�صتدآللية ptimi ation
م�صكلة التح�صني
Problem
ُ�سرية تُ�ستخدم يف ا�ستطالع منطقة معينة . يُطوِّر ن ام حتليل ال�سور لطائرة م َّ Algorithm ج�صعة uadratic
Programing
الربجمة الرباعية
Greedy Solver خوارزمية ح ّل ج�صعة
Scheduling
Problem Team
جد�لة م�صكلة تكوين
Integer فريق
Programming
برجمة اآلأعداد ال�صحيحة Formation
Traveling
األأدوات Knapsack
Problem Solver
خوارزمية ح ّل م�صكلة
حقيبة الظهر
Salesman
Problem
م�صكلة البائع امل ُتجوّل
ويبوت�ص ()Webots
مكتبة اأوبن �سي يف ()OpenCV
300 299
التح ُّيز واألإن�ساف يف الذكاء األ�سطناعي Bias and Fairness in AI الدر�ص األأول
ُميكن اأن يظهر التحيُّز ( )Biasيف اأنظمة الذكاء اال�صطناعي عندما تكون البيانات
حتيُّز الذكاء األ�سطناعي (:)AI Bias
يف جم��ال ال��ذكاء اال�صطناع��ي ،ي��دل التح ُّيز
�تخدمة لتدري�ب اخلوارزم ّي�ة ناق�ص�ة التمثي�ل اأو حتت�وي على حت ُّيزات اأ�صا�ص�ية، امل�ص َ مقدمة يف اأخالقيات الذكاء األ�سطناعي
ُوميكن اأن يظهر يف اأية بيانات ُمتثِّلها ُخُم َرجات النظام ،فعلى �صبيل املثال ال احل�صر:
عل��ى مي��ل خوارزميات التعلُّم االآيل اإىل اإنتاج املُنتَجات واالآراء واملجتمعات واالجُتاهات كلها ميكن اأن يظهر فيها التح ُّيز.
نتائ��ج حتاب��ي بدائ��ل ،اأو فئ��ات مع ّين��ة ،اأو �تخدم ال�ذكاء اال�صطناع�ي لفح��ص املر�ص�حني ُيع� ُّد نظ�ام التوظي�ف االآيل ال�ذي ي�ص ِ ن رة عامة على اأخالقيات الذكاء األ�سطناعي
تظلمه��ا باأ�ص��لوب منهج��ي؛ مم��ا ي �وؤدي اإىل
القي��ام بتنب �وؤات خاطئ��ة واإىل احتمالي��ة
للوظائف من اأبرز االأمثلة على اخلوارزم ّية املُتح ِّيزة .افرت�ص اأن اخلوارزم ّية مُدرَّبة
اأخالقيات الذكاء األ�سطناعي Overview of AI Ethics
ُف�ص�ل جمموع�ات عل�ى بيان�ات ُمتح ِّي�زة ،مث�ل اأمن�اط التوظي�ف التاريخي�ة الت�ي ت ِّ مع ا�ص�تمرار تق ُّدم الذكاء اال�صطناعي تزايدت اأهمية التفكر يف االآثار االأخالقية املرتتبة
التميي��ز �ص��د مُنتَجات معيّنة اأو فئات ب�ص��رية دميوغرافية معيّنة ،ففي هذه احلالة قد يعمل الذكاء اال�صطناعي على ا�صتمرار تلك (:)AI Ethics
حم َّددة. ت�ص��ر اأخالقيات ال��ذكاء اال�صطناعي عل�ى ا�ص�تخدام ه�ذه التقني�ة ،وم�ن امله�م اأن يفه�م املواط�ن يف عَ املَ ن�ا احلدي�ث ال�دور اله�ام
متجاهال
ً التح ُّيزات وي�صتبعد املر�صّ حني املو ّؤهلني ب�صكل غر عادل من بني املجموعات الأخالقيات الذكاء اال�صطناعي اإذا اأردنا تطوير اأنظمة ذكاء ا�صطناعي م�صوؤولة وا�صتخدامها.
الفئات غر املمثَّلة جيدًا يف جمموعة البيانات .على �صبيل املثال ،افرت�ص اأن اخلوارزم ّية تُف�صل املر�صحني الذين التحقوا بجامعات النخبة، اإىل املب��اد ،والقي��م ،واملعا ي��ر
االأخالقي��ة الت��ي تُنظّ ��م تطوي��ر اأنظم��ة اإن أاح�د االأ�ص�باب الرئي�ص�ة للتاأكي�د عل�ى اأهمي�ة اأخالقي�ات ال�ذكاء اال�صطناع�ي ه�و التاأثر
اأو عملوا يف �صركات مرموقة ،ففي هذه احلالة قد يلحق ذلك ال�صرر باملر�صحني الذين مَل يحظوا بتلك الفُر�ص ،اأو الذين ينتمون اإىل بيئات الكبر الأنظمة الذكاء اال�صطناعي على حياة االن�ص�ان .على �ص�بيل املثالُ ،ميكن ا�ص�تخدام
أاق�ل حظًّ �اُ ،وميك�ن اأن ُي�وؤدي ذل�ك اإىل نق��ص التن�وع يف م�كان العم�ل واإىل ا�ص�تمرارية ع�دم امل�ص�اواة ،ولذل�ك م�ن امله�م تطوي�ر وا�ص�تخدام ا ل��ذكاء اال�صطنا ع��ي وانت�ص��ارها
وا�صتخدامها. خوارزمي�ات ال�ذكاء اال�صطناعي التخ�اذ قرارات التوظيف والعالج الطبي ،واإذا كانت هذه
خوارزميات توظيف للذكاء اال�صطناعي تَ�صت ِند على معاير عادلة و�صفافة ،وغر مُتح ِّيزة. اخلوارزميات ُمتح ِّيزة اأو متييزية ،فقد ُتوؤدي اإىل نتائج غر عادلة تُ�صر باالأفراد واملجتمعات.
ي�صر اآلإن�صاف ( )Fairnessيف الذكاء اال�صطناعي اإىل كيفية تقدمي اأنظمة الذكاء اال�صطناعي لنتائج غر ُمتح ِّيزة وعلى معاملتها جلميع
ُن�صفة ،ولتحقيق االإن�صاف يف الذكاء اال�صطناعي يتطلب ذلك حتديد التح ُّيزات يف البيانات واخلوارزميات عاملة م ِ
االأفراد واملجموعات ُم َ ال الذكاء األ�سطناعي اأمثلة من العا الواقعي على املخاوف األأخالقية يف
وعملي�ات اتخ�اذ الق�رار ومعاجلته�ا .عل�ى �ص�بيل املثال ،تتمثّ�ل اإحدى طرائق حتقيق االإن�ص�اف يف الذكاء اال�صطناعي يف ا�ص�تخدام عملية Real-World Examples of Ethical Concerns in AI
تُ�صمى اإلغاء اآلنحياز ( ،)Debiasingحيث يتم حتديد البيانات املُتحيِّزة واإزالتها اأو تعديلها مبا ي�صمن و�صول اخلوارزم ّية اإىل نتائج اأكر اخلوارزميات التمييزية
دقة دون حت ُّيز. هناك مواقف تدل على اأن اأنظمة الذكاء اال�صطناعي متيل اإىل التح ُّيز والتمييز �صد فئات معيّنة من الب�ص�ر .على �ص�بيل املثال،
وج�دت درا�ص�ة اأجراه�ا املعه�د الوطن�ي للمعاي�ر �التقني�ة ( )National Institute of Standards and Technologyاأن
جدول : .1العوامل التي ُحتدِّ د حت ُّيز اأن مة الذكاء األ�سطناعي ِن�صب اخلطاأ يف تقنية التع ُّرف على الوجه تكون اأعلى عند التع ُّرف على وجوه االأ�صخا�ص ذوي الب�صرة الداكنة؛ مما قد ُيوؤدي اإىل
حتدي�د هوي�ات خاطئ�ة واعتق�االت خاطئ�ة .وم�ن االأمثل�ة االأخ�رى عل�ى ذلك ا�ص�تخدام خوارزميات ال�ذكاء اال�صطناع�ي يف نظام
تتع ّل��م خوارزمي��ات ال��ذكاء اال�صطناع��ي م��ن البيانات التي تُدرَّب عليها؛ ف�اإذا كانت البيانات العدالة اجلنائية ،اإذ اأظهرت الدرا�صات اأن هذه اخلوارزميات ُميكن اأن تكون ُمتح ِّيزة �صد االأقليات مما ُيوؤدي اإىل عقوبات اأق�صى.
ُمتح ِّي��زة اأو ناق�ص��ة التمثي��ل ،فق��د ت�ص��ل اخلوارزم ّي��ة اإىل نتائ��ج ُمتح ِّي��زة .عل��ى �ص��بيل املثال ، بيانات التدريب اخل�سو�سية
ُ انتها
اإذا مت تدري��ب خوارزم ّي��ة التع� ُّرف عل��ى ال�ص��ور عل��ى جمموع��ة بيانات حتت��وي يف الغالب على املُتح ِّيزة
اأف��راد ذوي ب�ص��رة فاحت��ة ،فرمب��ا تُواج��ه �صعوب��ة يف التع� ُّرف بدق��ة عل��ى االأفراد ذوي الب�ص��رة للخ�صو�صية ال�ص��خ�صية .على ُميكن اأن تكون اأنظمة الذكاء اال�صطناعي التي جُتمع البيانات ُوحتلِّلها م�صدر تهديد ُ
�تخدمي في�ص��بوك �ص��بيل املث��ال :جمع��ت �ص��ركة ا�صت�ص��ارات �صيا�ص��ية يف ع��ام 2018م بيان��ات املالي��ني م��ن م�ص� ِ
الداكنة.
( )Facebookدون موافقته��م وا�ص��تخدمتها للتاأث��ر عل��ى احلم��الت ال�صيا�ص��ية ،و أاث��ار ه��ذا احل��ادث املخ��ا ِوف ب�ص�اأن
اإذا مَل يك��ن فري��ق التطوي��ر متنوعً ��ا وال ُمي ِّث��ل نطاقًا وا�ص�عًا من الفئ��ات الثقافية والتقنية ،فقد ا�صتخدام الذكاء اال�صطناعي وحتليالت البيانات يف التالعب بالراأي العام ،وانتهاك حقوق خ�صو�صية االأفراد.
ال يتع�رَّف عل��ى التح ُّي��زات املوج��ودة يف البيان��ات اأو اخلوارزم ّي��ة ،وي�وؤدي الفري��ق ال��ذي يتكون االفتق��ار اإىل التن �وُّع
األأ�سلحة ذاتية التحكم
من اأفراد من منطقة جغرافية اأو ثقافة معيّنة اإىل عدم مراعاة املناطق اأو الثقافات االأخرى يف فِرق التطوير
التي قد تكون ُممثَّلة يف البيانات املُ�صتخدَ مة لتدريب منوذج الذكاء اال�صطناعي. تطوي��ر االأ�ص��لحة ذاتي��ة التحك��م الت��ي ُميك��ن اأن تعم��ل دون تدخ��ل ب�ص��ري ل��ه خُم��اوف اأخالقية ب�ص�اأن ا�ص��تخدام الذكاء
اال�صطناع��ي يف احل��روب ،حي��ث ي��رى فري��ق م��ن املنتقدي��ن اأن ه��ذه االأ�ص��لحة ُميك��ن اأن تتخ��ذ ق��رارات م�صري��ة دون
ُميكن اأن ُيوؤدي االفتقار اإىل الرقابة وامل�صوؤولية يف تطوير اأنظمة الذكاء اال�صطناعي ون�صرها اإ�ص��راف ب�ص��ري ُوميكن برجمتها ال�ص��تهداف جمموعات معيّنة من النا���ص ،مما قد ينتهك القانون االإن�ص��اين الدويل،
اإىل ظهور التح ُّيز ،فاإذا مَل تُطبِّق ال�ص��ركات واحلكومات اآليات رقابة و ُم�ص��اءلة منا�ص��بة ،فاإنّ االفتق��ار اإىل الرقاب��ة و ُيوؤدي اإىل وقوع اإ�صابات يف �صفوف املدنيني.
ذل��ك ق��د ي�وؤدي اإىل ع��دم تنفي��ذ اختب��ار التح ُّيز يف اأنظم��ة الذكاء اال�صطناع��ي ورمبا ال يكون وامل�صوؤولية الت�سريح من الوظائف
هناك جمال الإن�صاف االأفراد اأو املجتمعات املت�صررة من النتائج املُتح ِّيزة. اأثاراال�ص��تخدام املتزاي��د لل��ذكاء اال�صطناع��ي واآلأ ت��ة ( )Automationيف خُمتل��ف ال�صناع��ات املخ��ا ِوف ب�ص�اأن
ق��د ال ُحت� ِّ�دد ِف��رق التطوي��ر الت��ي تفتق��ر اإىل اخل��ربة موؤ�ص��رات التح ُّي��ز يف بيان��ات التدري��ب اأو االفتق��ار اإىل اخل��ربة ت�ص��ريح الب�ص��ر م��ن وظائفه��م وتاأث��ره عل��ى ُ�ص��بل عي���ص العامل��ني ،فعل��ى الرغ��م م��ن اأن ال��ذكاء اال�صطناع��ي ُميكن��ه اأن
املعرف��ة يف ت�صمي��م من��اذج ال��ذكاء اال�صطناع��ي واختبا ِره��ا تُعاجله��ا ،كم��ا اأن االفتق��ار اإىل ِ واملعرف��ة ل��دى فري��ق أي�صا اإىل فقدان الب�صر لوظائفهم وتزايد عدم امل�صاواة ُيوؤدي اإىل حت�صني الكفاءة واالإنتاجية ،اإال اأنه ُميكن اأن ُيوؤدي ا ً
التحيزات القائمة. لتحقيق العدالة رمبا ُيوؤدي اإىل ا�صتمرارية ُّ التطوير يف الدخل؛ مما قد يكون له عواقب اجتماعية واقت�صادية �صلبية.
302 301
م�سكلة امل�سوؤولية األأخالقية يف الذكاء األ�سطناعي احلدّ من التحيُّز وتعزيز األإن�ساف يف اأن مة الذكاء األ�سطناعي
The Problem of Moral Responsibility in AI Reducing Bias and Promoting Fairness in AI Systems
ُتع ُّد م�ص�كلة امل�ص�وؤولية االأخالقية عند ا�ص�تخدام اأنظمة الذكاء اال�صطناعي املتقدمة ق�صية مُعقَّدة البيانات املتنوعة واملُمثَّلة
ومتعددة اجلوانب ،وقد حظيت باهتمام كبر يف ال�صنوات االأخرة. يُق�ص��د بذل��ك ا�ص��تخدام البيان��ات التي تعك���ص تن��وع املجموعة التي يت��م متثيلها ،كما
تتمثّ�ل اإح�دى التحدي�ات الرئي�ص�ة الأنظم�ة ال�ذكاء اال�صطناع�ي املتقدم�ة يف قدرته�ا عل�ى اتخ�اذ زيادة العينات (:)Oversampling اأن��ه م��ن امله��م مراجع��ة وحتدي��ث البيان��ات املُ�ص��تخدَ مة لتدري��ب اأنظم��ة ال��ذكاء
الق�رارات والقي�ام باإج�راءات ُميك�ن اأن يك�ون له�ا عواق�ب اإيجابي�ة اأو �ص�لبية كب�رة عل�ى االأف�راد تُ�صر زيادة العينة يف تعلُّم االآلة اإىل زيادة اال�صطناعي بانتظام؛ للتاأكد من اأنها ما زالت مالئمة وغر ُمتح ِّيزة.
واملجتم�ع ،ورغ�م ذل�ك ،ال يك�ون الط�رف ال�ذي يج�ب حتميله امل�ص�وؤولية االأخالقية عن ه�ذه النتائج عدد عيّنات فئة ما داخل جمموعة بيانات تقنيات اإلغاء األنحياز
حم ّددًا دائمًا. لتح�ص��ني دق��ة النم��وذج ،ويك��ون ذل��ك تت�صم��ن اأ�ص��اليب اإلغ��اء االنحي��از حتديد واإزال��ة البيانات املُتحيِّزة م��ن اأنظمة الذكاء
بوا�ص��طة امل�صاعف��ة الع�ص��وائية للع ّين��ات مثال :زيادةاال�صطناعي؛ لتح�ص��ني معاير الدقة واالإن�صاف ،فت�ص��مل هذه التقنيات ً
هناك راأي يقول :اإن مطوِّري وم�صمِّمي اأنظمة الذكاء اال�صطناعي يجب اأن يتحملوا امل�صوؤولية عن املوج��ودة يف الفئ��ة اأو تولي��د عيّنات جديدة
اأي نتائ�ج �ص�لبية تَنتُ�ج ع�ن ا�ص�تخدامها ،و ُي ؤوكِّ�د هذا ال�راأي على اأهمية �صمان ت�صمي�م اأنظمة ذكاء العين��ات ( )Oversamplingاأو تقلي��ل العين��ات ( )Undersamplingاأو زي��ادة
من الفئة نف�صها. البيان��ات ( )Data Augmentationل�صم��ان تع ُّر���ص نظ��ام ال��ذكاء اال�صطناع��ي
ا�صطناع�ي تُراع�ي االعتب�ارات االأخالقي�ة ُوحت ِّم�ل املط ِّوري�ن امل�ص�وؤولية ع�ن اأي �ص�رر ق�د ت�ص�ببه
اخرتاعاتهم. لنقاط بيانات خُمتلفة.
وي��رى آاخ��رون اأن امل�ص�وؤولية ع��ن نتائ��ج ال��ذكاء اال�صطناع��ي ه��ي م�ص�وؤولية م�ص��رتكة بني القابلية للتف�سري وال�سفافية
�تخدمي التقني��ة، اأ�صح��اب امل�صلح��ة مب��ا فيه��م ُ�ص ّن��اع ال�صيا�ص��ات ،واملنظم��ني و ُم�ص� ِ اإنّ جع��ل اأنظم��ة ال��ذكاء اال�صطناع��ي اأك��ر �ص��فافية واأك��ر قابلي��ة للتف�ص��ر ميكن��ه اأن
وي�ص��لط هذا الراأي ال�صوء على اأهمية �صمان ا�ص��تخدام اأنظمة الذكاء اال�صطناعي ي�ص��اعد يف تقلي���ص م�ص��توى التح ُّي��ز م��ن خ��الل ال�ص��ماح لل ُم�ص� ِ
�تخدمني بفه��م كيفي��ة
بطرائ��ق تتما�ص��ى م��ع املب��اد االأخالقي��ة ،وتقيي��م املخاط��ر املرتبطة با�ص��تخدامها اتخ��اذ النظ��ام للق��رارات ،ويت�صم��ن ذل��ك تو�صي��ح عملي��ة اتخ��اذ الق��رار وال�ص��ماح
واإدارتها بعناية. تقليل العينات (:)Undersampling �صتخدمني با�صتك�صاف ُخُم َرجات النظام واختبارها. لل ُم ِ
تقليل العينة هو عملية تقليل حجم جمموعة الت�سميم املعتمد على اإ�سرا األإن�سان
وهن��اك راأي ثال��ث يق��ول :اإن اأنظم��ة ال��ذكاء اال�صطناع��ي ه��ي"ذاتٌ م�ص �وؤولة"
البيانات بحذف جمموعة فرعية من بيانات ُميك��ن اأن ي�ص��اهم اإ�ص��راك العن�ص��ر الب�ص��ري يف حلق��ة ت�صمي��م اأنظم��ة ال��ذكاء
لديه��ا ح�� ٌّ�ص اأخالق��ي وم�ص�وؤولة ع��ن اأفعاله��ا ،وتق��ول ه��ذه النظري��ة :اإنّ اأنظم��ة الفئ�ة االأك�رب للرتكي�ز عل�ى الع ّين�ات االأك�ر
ُتقدم��ة ُميك��ن اأن تتمت��ع بالفاعلي��ة واال�ص��تقاللية؛ مم��ا
ال��ذكاء اال�صطناع��ي امل ِّ اال�صطناع��ي يف التقلي��ل م��ن التح ُّي��ز ،وذل��ك بال�ص��ماح للب�ص��ر بالتدخ��ل وت�صحي��ح
اأهمية .ويكون ذلك مفيدًا ب�صكلٍ خا�ص اإذا ُخُم َرج��ات النظ��ام عن��د ال�ص��رورة ،وي�ص��مل ذل��ك ت�صمي��م اأنظم��ة ذكاء ا�صطناع��ي
يجعلها اأكر من جمرد اأدوات ،كما تتطلب منها اأن تكون م�صوؤولة عن اأفعالها، كانت جمموعة البيانات تفتقر اإىل التوازن
اإال اأن لهذه النظرية عدة م�صكالت. به��ا مرحل��ة للتغذي��ة الراجع��ة ُمت ِّك��ن الب�ص��ر م��ن مراجع��ة ق��رارات النظ��ام واملوافق��ة
بني الفئات اأو بني جمموعاتها املختلفة. عليها.
ت�ص��تطيع اأنظم��ة ال��ذكاء اال�صطناع��ي اأن ت ُْ�ص��دِ ر اأحكامً ��ا واأن تت�ص��رف
ح�ص اأخالقي من تلقاء نف�صها ،ولكنها لي�صت "ذاتًا م�صوؤولة" لديها ٌّ املباد األأخالقية
وذلك لالأ�صباب التالية: تعن��ي دم��ج املب��اد االأخالقي��ة مث��ل :االإن�ص��اف وال�ص��فافية وامل�ص��اءلة ،يف ت�صمي��م
ا ًأوال :اأن اأنظمة الذكاء اال�صطناعي تفتقر اإىل الوعي واخلربات وتنفيذ اأنظمة الذكاء اال�صطناعي ،من اأجل �صمان تطوير تلك االأنظمة وا�صتخدامها
الذاتية؛ مما ُيع ُّد �ص�مة اأ�صا�ص�ية من �ص�مات "الذات امل�ص�وؤولة" ب�ص��كل اأخالقي وم�ص�وؤول ،وذلك بو�صع اإر�ص��ادات اأخالقية وا�صحة ال�صتخدام اأنظمة
ح�ص اأخالقي ،ويف العادة تت�صمن الفاعلية االأخالقية التي لديها ٌّ زيادة البيانات الذكاء اال�صطناعي ومراجعة هذه االإر�صادات بانتظام وحتديثها عند ال�صرورة.
القدرة على التفكر يف املُثُل العليا للفرد واأفعاله. (:)Data ugmentation املراقبة والتقييم بانت ام
ثان ًي��ا :يقوم االأ�ص��خا�ص بتدري��ب اأنظمة الذكاء اال�صطناعي على زي��ادة البيان��ات ه��ي عملي��ة تولي��د بيان��ات ُتع ُّد املراقبة والتقييم ب�صكل دوري الأنظمة الذكاء اال�صطناعي اأمرًا �صروريًا لتحديد
اتب��اع قواع��د واأهداف حم َّددة؛ مما يح ُّد من حكمها االأخالقي، تدري ��ب جدي ��دة م ��ن البيان ��ات املوج ��ودة التح ُّيز وت�صحيحه ،ويت�صمن ذلك اختبار ُخُم َرجات النظام واإجراء عمليات تدقيق
ُوميك��ن الأنظم��ة ال��ذكاء اال�صطناع��ي تك��رار اتخ��اذ الق��رارات لتعزي ��ز اأداء من ��اذج تعلُّ ��م االآل ��ة ،وم ��ن منتظمة؛ للتاأكد من اأن النظام يعمل ب�صكل عادل ودقيق.
حل��رة واال�ص��تقاللية االأخالقي��ة ،م��ع افتقاره��ا ل �الإرادة ا ُ ا الأمثل ��ة عل ��ى ذ ل ��ك :قل ��ب ال�ص ��ور تقييم تغذية املُ�ستخدِ م الراجعة
ال�صخ�صية. ( )I m a ge F l i p p i n gوتدوير ه ��ا ُميك��ن اأن ت�ص��اعد التغذي��ة الراجع��ة الت��ي يقدمه��ا املُ�ص� ِ
�تخدم يف حتدي��د التح ُّي��ز يف
ُن�ص��ئي اأنظم��ة ال��ذكاء اال�صطناع��ي والقائم��ني واأخ�رًا ،ف�اإن م ِ حتويال
ً وق�صه��ا وتغي��ر األوانه��ا وحتويله��ا النظ��ام؛ الأن املُ�ص� ِ
�تخدمني غال ًب��ا م��ا يكون��ون اأك��ر وع ًي��ا بتجاربه��مُ ،وميكنه��م تق��دمي
على ن�صرها هم امل�صوؤولون عن اأفعالهمُ ،وميكن الأنظمة الذكاء تاآلفي ��ا ( )Affine Transformation روؤى عن التح ُّيز املحتمل اأف�صل مما ُميكن اأن تقدمه خوارزميات الذكاء اال�صطناعي.
اال�صطناع��ي اأن تُ�ص��اعد يف اتخ��اذ الق��رارات االأخالقي��ة ،عل��ى والت�صوي�ص عليها. �تخدمون تغذية راجعة عن روؤيتهم الأداء نظام يقدم املُ�ص� ِ على �ص��بيل املثالُ ،ميكن اأن ِّ
ح�ص اأخالقي. الرغم من اأنها لي�صت "ذاتًا م�صوؤولة" لديها ٌّ الذكاء اال�صطناعي اأو تقدمي اقرتاحات مفيدة لتح�صني النظام وجعله اأقل حت ُّيزً ا.
304 303
تبني اأهميّة اخل�صائ�ص، تف�صرات يف �صكل درجات ّ ٍ م�صاهمة يف التنبوؤُ .ميكن ا�صتخدام الطريقة مع اأي منوذج ،كما تقدم صخة، ال�سفافية وقابلية التف�سري يف الذكاء األ�سطناعي وم�سكلة ال�سندو األأ�سود
مما ُميكن اأن ي�صاعد يف حتديد اخل�صائ�ص االأكر تاأثرًا يف ُخُم َرجات النموذج. إج��راء
ميكن Transparency and Explainability in AI and the Black-Box Problem
وهن��اك تقني��ة اأخ��رى لتح�ص��ني قابلي��ة تف�ص��ر الذكاء اال�صطناعي مثل :اأ�ص��جار القرار وقواعد الق��رار ،وهي مناذج قابلة ن ام ال�سندو األأ�سود
للتف�ص��ر ُميك��ن ت�صويره��ا ب�ص��هولة ،حي��ث تق��وم اأ�ص��جار الق��رار بتق�ص��يم ف�ص��اء اخل�صائ���ش ( )Feature Spaceبن��ا ًء صعه��ا تكم��ن م�ص��كلة ال�صن��دوق االأ�ص��ود يف ال��ذكاء اال�صطناع��ي يف التح��دي املُتم ِّث��ل يف فه��م كيفي��ة
(:)Black-Box System عم��ل نظ��ام قائ��م عل��ى ال��ذكاء اآل�صطناع��ي ( )AI-Based Systemباتخ��اذ الق��رارات اأو
عل��ى اخلا�صي��ة االأك��ر دالل��ة ،وتق� ِّ�دم قواع��د وا�صح��ة التخ��اذ القرارات ،وتُع ُّد اأ�ص��جار الق��رار مفيدة ب�ص��كل خا�ص عندما �صطناعي يف الرعاية ال�صحية
الآث��ار هو نظام ال يك�صف عن طرائق عمله اإنت ��اج املُخ َرج ��ات؛ مم ��ا ق ��د ُي�ص ِّع ��ب الوث ��وق بالنظ ��ام اأو تف�ص ��ره اأو حت�ص ��ينه ،ورمب ��ا يوؤث ��ر
أي�صا؛ الأن قابلية
تتخذ البيانات �صكل اجلداول ويكون هناك عدد حمدود من اخل�صائ�ص .ولكن هذه النماذج حمدودة ا ً
تف�ص��ر �ص��جرة القرار التي مت اإن�ص��اوؤها تتنا�ص��ب تنا�ص� ًبا عك�ص� ًّيا مع حجم ال�ص��جرة .على �ص��بيل املثال ،من ال�صعب فهم عل��ى جودة احلياة ،وم��ن ثمّ تتخذ الداخلي�ة للب�ص�ر؛ اإذ تت�م التغذي�ة االفتق ��ار اإىل االنفت ��اح واإىل قابلي ��ة التف�ص ��ر عل ��ى ثق ��ة النا� ��ص يف النم ��وذج .تتزاي ��د ه ��ذه
ي�صتخدم تقنيات مثل� :كالء الذكاء ِ االأ�صجار التي تتكون من اآالف العقد ومئات امل�صتويات .واأخرًا ،هناك اأ�صلوب اآخر ��تخدَ مة يف التموي��ل ُدخ�الت ،ليتم اإنتاج املُخرَجاتبامل َ التحدي��ات بوج��ه خا���ص يف جم��ال الت�ص��خي�ص الطب��ي ،واالأح��كام الت��ي ت�صدره��ا املركب��ات
اآل�صطناع��ي ( )Artificial Intelligence Agentsاأو حتلي��ل احل�صا�ص��ية ( )Sensitivity Analysisللم�ص��اعدة دون معرِ فة طريقة عملها ،كما هو ذاتي��ة القي��ادةُ .تع� ُّد التح ُّي��زات يف من��اذج تعلُّم االآلة اإحدى املخ��اوف االأخرى املتعلقة بنماذج
يف فه��م كيفي��ة تاأث��ر تغي��ر املُدخَ ��الت اأو االفرتا�ص��ات عل��ى ُخُم َرج��ات النم��وذجُ ،وميك��ن اأن يك��ون ه��ذا االأ�ص��لوب مفي��دً ا صوؤول مو�صح يف ال�صكل .6.1 َّ ال�صن��دوق االأ�ص��ود ،كم��ا اأن التح ُّي��زات املوج��ودة يف البيان��ات الت��ي يت��م تدري��ب ه��ذه النماذج
ب�صكل خا�ص يف حتديد م�صادر الغمو�ص يف النموذج ويف فهم حدوده. عليه��ا ُميك��ن اأن ُت�وؤدي اإىل نتائ��ج غ��ر عادل��ة اأو عن�صري��ة .باالإ�صاف��ة اإىل ذل��ك ،رمب��ا يك��ون
م��ن ال�صع��ب حتدي��د امل�ص�وؤولية ع��ن الق��رارات التي يتخذها من��وذج ال�صندوق االأ�ص��ود؛ حيث
األ�ستدألل القائم على ال ِقيم يف اأن مة الذكاء األ�سطناعي امل ُدخَ الت ي�صع��ب حتمي��ل اأي �ص��خ�ص امل�ص�وؤولية ع��ن تل��ك الق��رارات ال �ص��يما م��ع وج��ود احلاج��ة اإىل
Value-Based Reasoning in AI Systems الرقابة الب�صرية ،كما هو احلال يف اأنظمة االأ�صلحة ذاتية التحكم .اإن االفتقار اإىل ال�صفافية
األ�ستدألل القائم على ال ِقيم يف عملي��ة اتخ��اذ القراربا�ص��تخدام ال��ذكاء اال�صطناع��ي ُي�ص ِّع��ب حتدي��د م�ص��كالت النم��وذج
(:)Value-Based Reasoning يتمثّل الهدف من ذلك يف اإن�صاء اأنظمة ذكاء ا�صطناعي اأكر ات�صاقًا مع القيم
وح ّله��ا ،كم��ا اأن ع��دم معرف��ة الطريق��ة الت��ي يتخ��ذ به��ا النم��وذج قرارات��ه جُتع��ل م��ن ال�صع��ب
?
واالأخالقي��ات الب�ص��رية؛ بحي��ث تتعام��ل ه��ذه االأنظم��ة بطرائ��ق مفي��دة ومن�صف��ة
اال�ص�تدالل القا ئ�م عل�ى ال ِقي�م يف إاج��راء التح�ص��ينات والتاأك��د م��ن اأنه��ا تعمل بطريق��ة �صحيحة ،وهناك ا�ص��رتاتيجيات عديدة
وم�صوؤولة .تت�صمن اخلطوة االأوىل يف اال�صتدالل القائم على ال ِقيمَ ،
فهم ومتثيل Box
اأنظم�ة ال�ذكاء اال�صطناع�ي ي�ص�ر اإىل ck- ملعاجلة م�صكلة ال�صندوق االأ�صود يف الذكاء اال�صطناعي .تتمثّل اإحدى تلك اال�صرتاتيجيات
�تخدمها وكالء الذكاء العملي�ة التي ي�ص ِ
اال�صطنا ع�ي التخ�اذ ق�رارات اأو
ال ِقي��م االأخالقي��ة داخ��ل اأنظم��ة ال��ذكاء اال�صطناع��ي ،حي��ث يج��ب اأن تك��ون هذه
االأنظم��ة ق��ادرة على تف�ص��ر وتوطني القي��م اأو املباد التوجيهية االأخالقية التي ? Bla
يف ا�ص��تخدام تقني��ات ذكاء ا�صطناع��ي قابل��ة للتف�ص��ر جلع��ل من��اذج تعلُّ��م االآلة اأكر �ص��فافية
واأك ��ر قابلي ��ة للتف�ص ��ر ،وق ��د ت�ص ��مل ه ��ذه التقني ��ات :مُف�ص ��رات اللغ ��ات الطبيعي ��ة
يُقدمه��ا من�ص�وؤها الب�ص��ريون اأو اأ�صح��اب امل�صلح��ة ،وق��د تت�صم��ن ه��ذه العملي��ة
ا�ص�تخال�ص نتائ�ج بن�ا ًء عل�ى جمموع�ة التعلُّ��م م��ن االأمثل��ة اأو التغذي��ة الراجع��ة الب�ص��رية اأو القواع��د الوا�صحة ،وعندما ) ( )Natural Language Explanationاأو ت�صوي ��ر البيان ��ات للم�ص ��اعدة يف فه ��م عملي ��ة
حم� َّددة م�ص�بقًا م�ن القي�م اأو املب�اد تفه��م اأنظم��ة ال��ذكاء اال�صطناعي هذه القيم بو�ص��وحُ ،ميكنها اأن تقوم مبواءمة اتخاذ القرار ،وهناك اأ�صلوب اآخر يتمثل يف ا�صتخدام مناذج تعلُّم االآلة االأكر قابلية للتف�صر
اأو االعتب�ارات االأخالقية. اأفعالها بطريقة اأف�صل مع املباد االأخالقية املن�صودة. امل ُخرَجات مث ��ل :اأ�ص ��جار الق ��رار ( )Decision Treesاأو اآلنح ��دار اخلط ��ي (،)Linear Regression
�صكل :6.1نظام ال�صندوق االأ�صود ورمب��ا تك��ون ه��ذه النم��اذج اأق��ل تعقي��دًا واأ�ص��هل يف الفهم ،ولكنها قد ال تكون قوي��ة اأو دقيقة مثل
الق النم��اذج االأك��ر تعقي��دًا .تعترب معاجلة م�ص��كلة ال�صندوق االأ�ص��ود يف ال��ذكاء اال�صطناعي اأم ًرا
امل ُخرَجات يم امل منوذج الذكاء اآل�صطناعي امل ُدخَ الت
م ح َّددة مه ًّما لبناء الثقة يف مناذج تعلُّم االآلة و�صمان ا�صتخدامها باأ�صلوب اأخالقي وعادل.
�صب ًقا
طرائق تعزيز �سفافية مناذج الذكاء األ�سطناعي وقابليتها للتف�سري
Methods for Enhancing the Transparency and Explainability of AI Models
�صكل :6.2متثيل لال�صتدالل القائم على القيمة
النموذج املحايد املحلي القابل للتف�سري وال�سر
يُركز اجلانب الثاين من جوانب اال�صتدالل القائم على ال ِقيم على تقييم القرارات اأو االأفعال بنا ًء على ال ِقيم التي �ُطنّت النم��وذج املحاي��د املحل��ي القاب��ل للتف�ص��ر �ال�ص��رح ( )Local Interpretable Model-Agnostic Explanations -LIMEمت
( ،)Internalized Valuesويج�ب اأن تق�وم اأنظم�ة ال�ذكاء اال�صطناع�ي بتقيي�م النتائ�ج املحتملة للق�رارات اأو االإجراءات ا�صتخدامه م�صبقًا يف مهام معاجلة اللغات الطبيعية( ،)NLPوتقوم هذه التقنية بتوليد تف�صرات حملية لتنبوؤات مفردة يتم اإجراوؤها
املختلفة بالنظر يف عواقب كل خيار وخُماطره وفوائده ،كما يجب اأن تاأخذ عملية التقييم هذه يف االعتبار القيم االأ�صا�صية وقابال للتف�ص��ر يقارب منوذج ال�صندوق االأ�ص��ود املُعقَّد حول تنبوؤ حم َّدد ،ثم
بوا�ص��طة منوذج ،و ُتن�ص��ئ هذه التف�ص��رات منوذجً ا اأب�ص��ط ً
التي مت ت�صميم نظام الذكاء اال�صطناعي لدعمها ،مما ي�صمن اأن يتخذ النظام خيارات م�صتنرة ومتوافقة مع القيم. تو�صل اإىل قراره ب�ص�اأن هذا التنبوؤ املحدَّد .تتمثّل ميزة هذه التقنية يف اأنها ُتوفر تف�ص��رات
ُي�ص��تخدم هذا النموذج الب�ص��يط ل�ص��رح كيف ّ
ُميك��ن لالإن�ص��ان قراءته��ا ،وبالت��ايل ُميك��ن الأ�صحاب امل�صلحة غر املتخ�ص�صني فهمها ب�ص��هولة؛ حتى فيم��ا يتعلق بالنماذج املُع َّقدة مثل:
واأخرًا ،يتطلب اال�ص�تدالل القائم على ال ِقيم من اأنظمة الذكاء اال�صطناعي اتخاذ قرارات تتما�ص�ى مع القيم الرا�ص�خة، ال�صبكات الع�صبية العميقة (.)Deep Neural Networks
فبع�د تقيي�م اخلي�ارات املختلف�ة ونتائجها املحتمل�ة ،يجب على نظام الذكاء اال�صطناعي اأن ينتقي الق�رار اأو االإجراء الذي
ُميثِّل املباد واالأهداف االأخالقية التي ُ�ص ِّمم التباعها ،فمن خالل اتخاذ قرارات متوافقة مع القيم ،ميكن لوكالء الذكاء تف�سيرات �سابلي األإ سافية
اآل�صطناع�ي ( )AI Agentsالت�ص�رف بطرائ�ق تتف�ق م�ع املب�اد التوجيهي�ة االأخالقي�ة الت�ي و�صعها ُمن�ص�وؤها؛ مما ِّ
يعزز تف�ص��رات �ص��ابلي اآلإ�صافي��ة ( )SHapley Additive exPlanations - SHAPه��ي طريق��ة أاخ��رى لتف�ص��ر ُخُم َرج��ات من��اذج تعلُّ��م
ال�صلوك امل�صوؤول واملفيد .على �صبيل املثال :تُ�صتخدم اأنظمة الذكاء اال�صطناعي يف الرعاية ال�صحية للم�صاعدة يف اتخاذ االآل��ة ،وتعتم��د عل��ى املفه��وم اخلا���ص بقي��م �ص��ابلي م��ن نظري��ة اآلألع��اب ( )Game Theoryوت ِّ
ُخ�ص���ص قيم��ة (اأو وَز ًن��ا) ل��كل خا�صي��ة
306 305
األأُطر التن يمية ومعايري ال�سناعة قرارات الت�صخي�ص والعالج ،حيث يجب اأن تكون هذه االأنظمة قادرة على التفكر يف االآثار االأخالقية املرتتبة على العالجات
املختلفة مثل :االآثار اجلانبية املحتملة اأو التاأثر على جودة احلياة ،ومن ثمّ تتخذ قرارات تُعطي االأولوية ل�صالمة املري�ص،
Regulatory Frameworks and Industry Standards ومن االأمثلة االأخرى :اأنظمة الذكاء اال�صطناعي املُ�ص�تخدَمة يف التمويل للم�ص�اعدة يف اتخاذ قرارات اال�ص�تثمار .يجب اأن
تلعب االأُطر التنظيمية ومعاير ال�صناعة دورًا مهمًّا يف تعزيز تطبيقات الذكاء اال�صطناعي االأخالقية ،فباإمكان التنظيمات امل ِ
ُ�صاعدة تكون هذه االأنظمة قادرة على اأن تُفكر يف االآثار االأخالقية املرتتبة على اال�صتثمارات املختلفة ،كالتاأثر على البيئة اأو على
اأن ت�صم��ن َحت ُّم��ل املنظم��ات الت��ي تق��وم بتطوي��ر وا�ص��تخدام اأنظم��ة الذكاء اال�صطناعي امل�ص�وؤولية عن اأفعالها عن طري��ق حتديد توقُّعات الرعاية االجتماعية ،وبالتايل تتخذ القرارات التي تتما�صى مع قيم امل�صتثمر.
وعواق��ب وا�صح��ة لع��دم االمتث��ال ،وباإم��كان التنظيم��ات واملعاي��ر اأن ُحتف��ز املنظم��ات عل��ى اإعط��اء االأولوي��ة لالعتب��ارات االأخالقي��ة عن��د يج�ب اأن ن�درك اأن امل�ص�وؤولية ال تق�ع باأكمله�ا عل�ى عات�ق نظ�ام ال�ذكاء اال�صطناع�ي ،ب�ل اإنها م�ص�وؤولية م�ص�رتكة ب�ني الذكاء
تطوير وا�صتخدام اأنظمة الذكاء اال�صطناعي. ُلخ�ص احلالة ويقدِّم اخليارات اال�صطناعي واخلرباء الب�صريني ،فنظام الذكاء اال�صطناعي ي�صاعد يف اتخاذ القرار باأن ي ِّ
ال�سفافية �صتخدم اخلبر الذي يتخذ القرار النهائي؛ مما يوؤكد اأن اخلبر الب�صري هو املتحكم وامل�صوؤول عن النتيجة اأو العرو�ص لل ُم ِ
ُميكن اأن تعزِّ ز التنظيمات واملعاير ال�صفافية يف اأنظمة الذكاء اال�صطناعي مبطالبة املوؤ�ص�صات بالك�صف عن كيفية عمل اأنظمتها وعن النهائية ،يف ظل اال�صتفادة من االأفكار والتحليالت التي ُيوفرها نظام الذكاء اال�صطناعي.
ِ
ت�صتخدمهاُ ،وميكن اأن ي�صاعد ذلك يف بِناء الثقة مع اأ�صحاب امل�صلحة وتقليل املخاوف من التح ُّيزات املحتملة اأو التمييز البيانات التي
املحتمل يف اأنظمة الذكاء اال�صطناعي.
الذكاء األ�سطناعي وتاأ ريه على البي ة AI and Environmental Impact
تقييم املخاطر
ُميكن تقليل خُماطر العواقب غر املق�صودة اأو النتائج ال�ص��لبية الناجُتة عن ا�ص��تخدام الذكاء اال�صطناعي بو�صع التنظيمات واملعاير اإن تاأثر الذكاء اال�صطناعي على البيئة وعلى عالقتنا بها مُعقَّد ومتعدد االأوجه.
املنا�صبة ،وذلك مبطالبة املنظمات باإجراء تقييمات للمخاطر ،وهذا يعني حتديد املخاطر واالأخطار املحتملة وتنفيذ �صمانات منا�صبة، فوائده املحتملة
مما ُميكِّن التنظيمات واملعاير من امل�صاعدة يف تقليل االأ�صرار املحتملة على االأفراد واملجتمع. ُميك��ن لل��ذكاء اال�صطناع��ي اأن ي�ص��اعد يف فه��م التحدي��ات البيئي��ة والتعام��ل معه��ا ب�ص��كل
تطوير ون�سر اأُطر عمل وا سحة للذكاء األ�سطناعي
اأف�ص��ل مث��ل :تغ��ر املن��ا ،والتل��وث ،وفق��دان التن��وع البيولوج��يُ ،وميكن��ه اأن ي�ص��اعد يف
ُميكن اأن ت�صجِّ ع التنظيمات واملعاير االبتكار بتوفر اإطار عمل وا�صح لتطوير اأنظمة الذكاء اال�صطناعي وا�صتخدامها؛ اإذ اأن ا�صتخدام حتلي��ل كمي��ات هائل��ة من البيانات والتنبوؤ بتاأثر االأن�ص��طة الب�ص��رية املختلفة على البيئة،
التنظيم��ات واملعاي��ر لتاأ�صي���ص فر���ص متكافئ��ة وتقدمي التوجيه بخ�صو�ص االعتبارات االأخالقية ُميكن اأن ي�ص��اعد املنظمات على تطوير ُوميكنه كذلك اأن ي�صاعد يف ت�صميم اأنظمة اأكر كفاءة وا�صتدامة ،مثل اأنظمة� :صبكات
اأنظم��ة ال��ذكاء اال�صطناع��ي ون�ص��رها بطرائ��ق تتف��ق م��ع القي��م االأخالقي��ة واالجتماعي��ة .تلع��ب االأُطر التنظيمي��ة ومعاي��ر ال�صناعة دو ًرا
�صكل :6.3حتليل الذكاء اال�صطناعي الطاقة ،والزراعة ،والنقل ،واملباين.
لكميات �صخمة من البيانات
مه ًّم��ا يف تعزي��ز تطبيق��ات ال��ذكاء اال�صطناع��ي االأخالقي��ة ،وذل��ك بتوف��ر اإر�ص��ادات وحواف��ز وا�صح��ة للموؤ�ص�ص��ات حت��ى تُعط��ي االأولوي��ة اأخطاره اأو أا سراره املُحتملة
لالعتب��ارات االأخالقي��ة والتنظيم��ات واملعاي��ر؛ مم��ا ي�صم��ن تطوير اأنظمة الذكاء اال�صطناعي وا�ص��تخدامها بطرائق تتما�ص��ى مع القيم هناك خُماوف من تاأثر الذكاء اال�صطناعي نف�صه على البيئة؛ اإذ يتطلب تطوير اأنظمة
االجتماعية واالأخالقية. ال��ذكاء اال�صطناع��ي وا�ص��تخدامها ق��درًا كب�رًا م��ن الطاق��ة وامل��وارد؛ مم��ا ق��د يُ�ص�هِّم يف
انبع��اث غ��ازات تُفا ِق��م م��ن م�ص��كلة االحتبا���ص احل��راري وغرها م��ن االآث��ار البيئية .على
التنمية امل�ستدامة للذكاء األ�سطناعي يف اململكة العربية ال�سعودية �صبيل املثال ،قد يتطلب تدريب منوذج واحد للذكاء اال�صطناعي قدرًا من الطاقة يعادل
Sustainable AI Development in the Kingdom of Saudi Arabia ما ت�ص��تهلكه العديد من ال�ص��يارات طِ وال حياتها .باالإ�صافة اإىل ذلك ،ميكن اأن ي�ص��اهم
م��ن املتو َّق��ع اأن ت�صب��ح تقني��ات ال��ذكاء اال�صطناع��ي واأنظمت��ه اأح��د العوامل الرئي�ص��ة �تخدمة يف ت�صني��ع اأنظم��ة ال��ذكاء اال�صطناع��ي يف تلوث اإنت��اج املُك ِّون��ات االإلكرتوني��ة املُ�ص� َ
الت��ي ُت�وؤدي اإىل اإح��داث خل��ل يف القطاع��ات املالي��ة يف العدي��د من البل��دان ،وقد توؤثر البيئة مثل :ا�صتخدام املواد الكيميائية ال�صامة وتوليد النفايات االإلكرتونية.
ب�ص��كل كب��ر عل��ى �ص��وق العم��ل ،وم��ن املتو َّق��ع يف ال�ص��نوات القادم��ة اأن ي�صب��ح ح��وايل ع��الوة عل��ى ذل��كُ ،ميك��ن اأن يغ��ر ال��ذكاء اال�صطناع��ي عالقتن��ا بالبيئ��ة بطرائ��ق لي�ص��ت
70 %م��ن االأعم��ال الروتيني��ة الت��ي يق��وم به��ا العم��ال موؤمتت��ة بالكام��ل .كم��ا أان��ه م��ن اإيجابي��ة دائ ًم��ا ،فق��د ُي�وؤدي ا�ص��تخدام ال��ذكاء اال�صطناع��ي يف الزراع��ة اإىل ممار�ص��ات
املتو َّق��ع اأن تخل��ق �صناع��ة ال��ذكاء اال�صطناع��ي �ص��بعة وت�ص��عني ملي��ون وظيف��ة جدي��دة �صكل :6.4تتطلب اأنظمة الذكاء
اال�صطناعي كميات هائلة من زراعي��ة مك َّثف��ة ومر ِّك��زة عل��ى ال�صناع��ة؛ مم��ا يوؤث��ر �ص��لبًا عل��ى �صح��ة الرتب��ة والتن��وع
وت�صيف �صتة ع�صر تريليون دوالر اأمريكي اإىل الناجت املحلي االإجمايل العَاملَ ي. الطاقة واملوارد البيولوجي .باملثل ،رمبا ُيوؤدي ا�صتخدام الذكاء اال�صطناعي يف النقل اإىل زيادة االعتماد
لقد طوَّرت الهيئة ال�صعودية للبيانات �الذكاء اآل�صطناعي ()Saudi Data and Artificial Intelligence Authority - SDAIA عل��ى ال�ص��يارات واأ�ص��اليب النق��ل االأخ��رى؛ مم��ا ُي�ص� ِّهم يف تل��وث اله��واء وتدم��ر البيئ��ات
اأهدافًا ا�صرتاتيجية للمملكة ال�صتخدام تقنيات الذكاء اال�صطناعي املُ�صتدامة يف تنمية اململكة ،و�صتكون اململكة العربية ال�صعودية الطبيعية التي ت�صكنها الكائنات احلية.
مركزً ا عامليًا للبيانات والذكاء اال�صطناعي ،كما اأن اململكة ا�صت�صافت اأول قمة عاملية لهُ ،حيث ُميكن للقادة واملبتكرين مناق�صة اخلامتة
م�ص�تقبل الذكاء اال�صطناعي وت�ص�كيله ل�صالح املجتمع .اأما الهدف االآخر فيتمثل يف حتويل القوى العاملة يف اململكة من خالل بوجه عام ،يعتمد تاأثر الذكاء اال�صطناعي على البيئة وعالقتنا بها على كيفية تطوير اأنظمة الذكاء اال�صطناعي وا�ص��تخدامها ،ومن
تطوي�ر البيان�ات املحلي�ة ودع�م املواه�ب يف ال�ذكاء اال�صطناع�ي .ومبا اأن الذكاء اال�صطناعي يقوم بتحويل اأ�ص�واق العمل عامليًا، املهم النظر يف التاأثرات البيئية املحتملة للذكاء اال�صطناعي وتطوير اأنظمته وا�صتخدامها بطرائق تُعطي االأولوية لال�صتدامة والكفاءة
ف�اإن معظ�م القطاع�ات حتت�اج اإىل تكيي�ف البيان�ات وال�ذكاء اال�صطناعي ودجمه�ا يف التعليم والتدريب املهن�ي واملعرِ فة العامة، و�صالمة كوكب االأر�ص.
وبذلك ُميكن اأن تكت�صب اململكة العربية ال�صعودية ميزة تناف�صية من حيث التوظيف واالإنتاجية واالبتكار.
308 307
مترينات اأم��ا اله��دف النهائ��ي فيتم ّث��ل يف ج��ذب ال�ص��ركات وامل�ص��تثمرين ع��ن طري��ق اأُط��ر عم��ل وحواف��ز تنظيمي��ة مرن��ة وم�ص��تقرة،
حيث �ص��رتكز االأنظمة على تطوير �صيا�ص��ات ومعاير للذكاء اال�صطناعي ،مبا فيها ا�ص��تخدامه ب�ص��كل اأخالقي .و�ص��يعمل
اإط��ار العم��ل عل��ى تعزي��ز التطوي��ر االأخالق��ي الأبح��اث وحلول ال��ذكاء اال�صطناعي ودعمه يف ظل توفر اإر�ص��ادات ومعاير
1 حلماية البيانات واخل�صو�صية؛ مما �ص ُيوفر اال�صتقرار والتوجيه الأ�صحاب امل�صلحة العاملني يف اململكة.
خاطئة �صحيحة حَ دِّد اجلملة ال�صحيحة �اجلملة اخلاطئة فيما يلي: مثال
.1تهتم اأخالقيات الذكاء اال�صطناعي بتطوير اأنظمة الذكاء اال�صطناعي فقط. تُخط��ط المملك��ة العربي��ة ال�ص��عودية آل�ص��تخدام اأنظم��ة �تقني��ات ال��ذكاء اآل�صطناع��ي كاأ�صا���ش
لم�ص��ر�عي المدينتين العمالقتين نيوم (� )NEOMذا آلين ( .)THE LINEم�ص��ر�ع نيوم هو
مدينة م�صتقبلية �صيتم ت�صغيلها بالطاقة النظيفة� ،بها اأنظمة نقل متطورة� ،تقدِّم خدمات ذات
.2من املحتمل اأن ُيوؤدي الذكاء اال�صطناعي واالأمتتة اإىل ت�صريح الب�صر من الوظائف. ِ
��صت�صتخدم تقنية عالية�� ،صتكون من�صة للتقنيات المتطورة ،بما في ذلك الذكاء اآل�صطناعي،
حل��ول الم��دن الذكي��ة لتح�ص��ين ا�ص��تهالك الطاق��ة �اإدارة حرك��ة الم��ر�ر �الخدم��ات المتقدم��ة
ُ .3ميكن اأن ُيوؤدي االفتقار اإىل التنوع يف فِرق تطوير الذكاء اال�صطناعي اإىل عدم روؤية اآلأخ��رى�� .ص��يتم ا�ص��تخدام اأنظم��ة ال��ذكاء اآل�صطناع��ي فيه��ا لتح�ص��ين ج��ودة الحي��اة لل�ص��كان
التح ُّيزات اأو عدم معاجلتها. �لتعزيز اآل�ص��تدامة.
ُ .4ميكن اأن ي�صاعد دمج املباد االأخالقية يف اأنظمة الذكاء اال�صطناعي يف �صمان �بالمث��ل� ،ص��تكون مدين��ة ذا آلي��ن مدين��ة خطي��ة خالي��ة م��ن الكرب��ون مبني��ة بتقني��ات ال��ذكاء
اآل�صطناع��ي�� ،صت�ص� ِ
�تخدم اأنظم��ة ال��ذكاء اآل�صطناع��ي آلأتمت��ة بنيته��ا التحتي��ة �اأنظم��ة النق��ل
تطويرها وا�صتخدامها بطريقة م�صوؤولة. فيها مما يجعل حياة المقيمين فيها تت�ص��م بال�صال�ص��ة �الكفاءة�� ،ص��تكون الطاقة التي �صتُ�ص�غِّل
.5يتطلب الت�صميم املعتمد على اإ�صراك االإن�صان اأن تعمل اأنظمة الذكاء اال�صطناعي دون المدينة طاقة نظيفة ،كما اأن اآلأ�لوية �ص��تكون للمعي�ص��ة الم�ص��تدامة�� ،ص��يتم ا�ص��تخدام اآلأنظمة
اأي تدخل ب�صري. الت��ي تعم��ل بال��ذكاء اآل�صطناع��ي لمراقب��ة ا�ص��تخدام الطاقة �تح�ص��ينه �ان�ص��يابية حركة المر�ر
�الخدم��ات المتقدم��ة اآلأخ��رى.
.6تدل م�صكلة ال�صندوق االأ�صود يف الذكاء اال�صطناعي على �صعوبة فهم كيفية و�صول �بوجه عام� ،صتلعب اأنظمة الذكاء اآل�صطناعي �تقنياته د�رًا حا�صمًا في تطوير م�صر�عي هاتين
خوارزميات الذكاء اال�صطناعي اإىل قراراتها اأو تنبوؤاتها. المدينتي��ن العمالقتي��ن� ،تمكينهم��ا م��ن اأن ت�صبح��ا مدينتي��ن م�ص��تدامتين م��ن م��دن الم�ص��تقبل
تت�صمان بالكفاءة �اآلبتكار.
ُ .7ميكن ت�صميم مناذج الذكاء اال�صطناعي لتكييف قراراتها اأو نتائجها وفقًا للقيم
االأخالقية الرا�صخة. األإر�سادات العاملية ألأخالقيات الذكاء األ�سطناعي International AI Ethics Guidelines
.8ا�صتخدام الذكاء اال�صطناعي على نطاق وا�صع له اآثار اإيجابية فقط على البيئة. مو�ص��ح يف اجل��دول الت��ايل ،ط� َّورت منظم��ة اليون�ص��كو ( )UNESCOوثيق��ة اإر�ص��ادية تو�ص��ح بالتف�صي��ل القي��م
كم��ا ه��و َّ
واملباد التي يجب االلتزام بها عند تطوير اأنظمة وتقنيات الذكاء اال�صطناعي اجلديدة.
5
3
316 315
ُ�صرة.
الن�ص الربجمي بلغة البايثون الذي �صيُ�صتخدم يف التحكم يف الطائرة امل َّ
بعدها افتح ملف ّ دعونا نُلقي نظرة على امل�صروع .اأوال :عليك اأن تبحث عن ملف عَ َامَل ويبوت�ص وتقوم بتحميله.
ي للمُ تحكِّم: الن�ص ال
لفتح ّ لفتح عا ويبوت�ص:
1
ن�صي) من �صريط القائمة. ا�صغط على ( Fileملف) ،ثم ( Open Text Fileافتح ملف ّ 1 من �( Menu barصريط القائمة) ،ا�صغط على ( Fileملف) ،ثم على ( Open Worldافتح عَ َامَل).
ابحث عن ملف ( drone_controller.pyمُتحكِّم_الطائرة امل َّ
ُ�صرة)يف جملد ( controllersاملُتحكِّمات) ثم جملد 3 َوامَل) 2 ،ثم افتحه.ُ�صرة_ الع ََامَل) يف جملد ( worldsالع ِ
ابحث عن ملف ( drone_world.wbtالطائرة امل َّ
ُ�صرة) 2 ،ثم افتحه3 . ( drone_controllerمُتحكِّم_الطائرة امل َّ
1
1
2
2
3
�صكل :6.10فتح ّ
الن�ص الربجمي ملُتحكِّم ويبوت�ص
320 319
from controller import Robot
self.current_pose = 6 * [0] # X, Y, Z, yaw, pitch, roll import numpy as np # used for mathematic operations
self.target_position = [0, 0, 0] ) ودورانهx، y، z( تهيئة مو�صع المُ�صيَّرة import os # used for folder creation
self.target_index = 0 import cv2 # used for image manipulation and human detection تحتوي مكتبة برنامج المُتحكِّم على
.) االنعراج، االنحدار،(االلتفاف from PIL import Image # used for image object creation (روبوت) التي �صتُ�صتخدمRobot فئة
self.target_altitude = 0
from datetime import datetime # used for date and time .طرائقها للتحكم في الطائرة المُ�صيَّرة
def move_to_target(self, waypoints):
# auxiliary function used for calculations
def clamp(value, value_min, value_max):
# Moves the drone to the given coordinates
return min(max(value, value_min), value_max)
# Parameters:
# waypoints (list): list of X,Y coordinates class Mavic (Robot):
ا�صتيراد المكتبات المطلوبة
# Returns: .للح�صابات والمعالجة
# yaw_disturbance (float): yaw disturbance (negative value to go on the right) # constants of the drone used for flight
# pitch_disturbance (float): pitch disturbance (negative value to go forward) # thrust for the drone to lift
K_VERTICAL_THRUST = 68.5
if self.target_position[0:2] == [0, 0]: # initialization # vertical offset the drone uses as targets for stabilization
self.target_position[0:2] = waypoints[0] K_VERTICAL_OFFSET = 0.6
K_VERTICAL_P = 3.0 # P constant of the vertical PID )Constants( تُ�صتخدم الثوابت
# if the drone is at the position with a precision of target_precision K_ROLL_P = 50.0 # P constant of the roll PID
K_PITCH_P = 30.0 # P constant of the pitch PID الموجودة ب�صكل تجريبي لح�صاب
if all([abs(x1 - x2) < self.target_precision for (x1, x2)
in zip(self.target_position, self.current_pose[0:2])]):
.الطيران واال�صتقرار
MAX_YAW_DISTURBANCE = 0.4
self.target_index += 1 MAX_PITCH_DISTURBANCE = -1
# precision between the target position and the drone position in meters
if self.target_index > len(waypoints) - 1:
target_precision = 0.5
self.target_index = 0
self.target_position[0:2] = waypoints[self.target_index] def __init__(self):
# initializes the drone and sets the time interval between updates of the simulation
# computes the angle between the current position of the drone and its target position Robot.__init__(self)
# and normalizes the resulting angle to be within the range of [-pi, pi] self.time_step = int(self.getBasicTimeStep())
self.target_position[2] = np.arctan2(
self.target_position[1] - self.current_pose[1], # gets and enables devices
self.target_position[0] - self.current_pose[0]) self.camera = self.getDevice("camera")
angle_left = self.target_position[2] - self.current_pose[5] self.camera.enable(self.time_step)
angle_left = (angle_left + 2 * np.pi) % (2 * np.pi)
if (angle_left > np.pi): self.imu = self.getDevice("inertial unit")
angle_left -= 2 * np.pi self.imu.enable(self.time_step)
# turns the drone to the left or to the right according to the value self.gps = self.getDevice("gps")
self.gps.enable(self.time_step)
# and the sign of angle_left and adjusts pitch_disturbance
yaw_disturbance = self.MAX_YAW_DISTURBANCE * angle_left / (2 * np.pi)
self.gyro = self.getDevice("gyro")
pitch_disturbance = clamp(
self.gyro.enable(self.time_step)
np.log10(abs(angle_left)), self.MAX_PITCH_DISTURBANCE, 0.1)
self.camera_pitch_motor = self.getDevice("camera pitch")
return yaw_disturbance, pitch_disturbance self.camera_pitch_motor.setPosition(0.7)
322 321
:ُ�صرة وت�صغيل املُحاكاة
َّ الن�ص الربجمي يف الطائرة امل
ّ حان الوقت االآن الإدراج
# specifies the patrol coordinates
:ألإدراج برنامج املُتحكِّم وت�سغيل املُحاكاة waypoints = [[-30, 20], [-60, 30], [-75, 0], [-40, -10]]
# target altitude of the drone in meters
ثم ا�صغط 1،Mavic2Pro "Mavic 2 Pro" ا�صغط على،) (�صجرة امل�صهدScene tree من self.target_altitude = 8
2 .controller "mavic2pro" على ) (نقاط الطريقwaypoints
while self.step(self.time_step) != -1: الخا�صة بالم�صار الذي �صتطير
عند اإجراء تغيرات 3 .) (اختيارSelect ... ا�صغط على،)(حمرِّر احلقل ُ Field editor من
على الن�صو�ش # reads sensors .فيه الطائرة المُ�صيَّرة
5 .) (موافقOK ثم ا�صغط على4 ،)ُ�صرةَّ (مُتحكِّم_الطائرة املdrone_controller حدِّ د
تن�ش اأن
َ آل،الربجمية roll, pitch, yaw = self.imu.getRollPitchYaw()
(�صغّلRun the simulation in real-time ا�صغط على،) (�صريط االأدواتToolbar من x_pos, y_pos, altitude = self.gps.getValues()
.Ctrl S ت�صغط على roll_acceleration, pitch_acceleration, _ = self.gyro.getValues()
6 .)املحاكاة ب�صكل فوري
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()
3 robot.run()
ّ اإدراج:6.14 �صكل
الن�ص الربجمي لربنامج املُتحكِّم وت�صغيل املُحاكاة
324 323
مترينات عندما تبداأ املُحاكاة� ،ص��تعمل حمركات الطائرة املُ�ص� َّ�رة و�ص�تُقلع ،ثم �ص��تتبع الطريق املحدَّدة م�ص��بقًا حول املنزل ،ومتر
عرب نقاط الطريق.
1ح ِّل��ل الدال��ة ( )� move_to_targetا�ص��رح كيفي��ة قي��ام الطائ��رة امل ُ�ص� َّ�رة بح�ص��اب مو�صعه��ا الت��ايل يف قائم��ة نق��ا
ُ�صرة لتقليل زمن الطران بني نقا الطريق؟ الطريق .كيف ميكن حت�صني م�صار الطائرة امل َّ
2ق ِّي��م عي��وب خوارزم ّي��ة التح ُّك��م احلالي��ة يف الطائ��رة امل ُ�ص� َّ�رة عن��د مواجه��ة عوام��ل خارجي��ة مث��ل :الري��اح اأ� العوائ��ق اأ�
عدم دقة نظام حتديد املواقع العاملي ،ثم اقرح �ناق�ش التح�صينات التي ميكن القيام بها يف خوارزم ّية التحكم جلعل
ُ�صرة اأك �صمودًا يف �جه هذه التحديات. الطائرة امل َّ
326 325
الدر�ص الثالث 3ا�صتك�ص��ف اآلآث��ار اآلأخالقي��ة للطائ��رات امل ُ�ص� َّ�رة الهوائي��ة يف التطبيق��ات الواقعي��ة مث��ل :املراقب��ة �تو�صي��ل الط��ر�د
التطبيقات الروبوتية 2 �عملي��ات البح��ث �اآلإنق��اذ ،ث��م اكت��ب ع��ن املخ��ا�ف املحتمل��ة اخلا�ص��ة باخل�صو�صي��ة� ،ق�صاي��ا ال�ص��المة� ،احتم��اآلت
اإ�صاءة ا�صتخدام هذه التقنية.
328 327
بعد التحقق من ا�صرتداد ال�صورة بنجاح ،تنتقل اخلوارزم ّية اإىل تعديل بع�ص خ�صائ�صها ،بحيث تكون ال�صورة ثالثية ُ�صرة.
لن�صتعر�ص التغيرات التي �صتُجريها الإ�صافة وظائف روؤية احلا�صب للطائرة امل َّ
االأبعاد ،ولها اأبعاد طول وعر�ص وقنوات األوان ،حيث تلتقط كامرا الطائرة املُ�ص َّ�رة �صورًا بارتفاع 240بك�ص�ل وعر�ص سافة املوؤقِّ ت Adding a Timer اإ
ت�صتخدم 3قنوات األوان حلفظ معلومات ال�صورة وهي :االأحمر واالأخ�صر واالأزرق. ِ 400بك�صل ،كما اأنها
ُميك��ن اأن يك��ون التق��اط �ص��ورة ومعاجلته��ا وحفظه��ا مكل ًف��ا م��ن الناحي��ة احلا�ص��وبية اإذا ُح�ص��ب ل��كل اإط��ار م��ن اإط��ارات
يج�ب معاجل�ة ال�ص�ورة ا ًأوال حت�ى يت�م ا�ص�تخدامها يف الك�ص�ف ،ولك�ي يت�م تطبيق الدوال ب�ص�كل �صحي�ح يف وقت الحق ،ال خم�ص ثوانٍ فقط. املُحاكاة ،ولذلك �صت�صيف موؤ ِّقتًا زمنيًا ال�صتخدامه؛ لتنفيذ هذه االإجراءات كل ِ
ُب ّد اأن حتقق ال�صورة تركي ًبا مع ّينًا .يف هذا املثال ،يجب اأن يتغر ت�صل�صل االأبعاد من (الطول ،والعر�ص ،وقنوات االألوان)
اإىل (قنوات االألوان ،والطول ،والعر�ص) با�صتخدام الدالة () ،transposeحيث تُقدَّم �صورة الكامرا (،)CameraImg # time intervals used for adjustments in order to reach the target altitude
عامالت لهذه الدالة ،بافرتا�ص اأن الرتتيب االأ�صلي كان (.)0 ،1 ،2 والت�صل�صل اجلديد ( )2 ،0 ،1ك ُم ِ )(t1 = self.getTime
# time intervals between each detection for human figures
كم��ا يج��ب تعدي��ل اأحج��ام االأبع��اد بع��د تغي��ر الت�صل�ص��ل ،حي��ث تُ�ص��تخدم الدال��ة () reshapeبالطريق��ة نف�ص��ها ،ولك��ن )(t2 = self.getTime
عامل الثاين منها تكون (.)3 ،240 ،400 اأحجام االأبعاد املعنيّة كاملُ ِ
لد Creating a Folder اإن�ساء
# reshapes image array to (channels, height, width) format
))cameraImg = np.transpose(cameraImg, (2, 0, 1 �ص��يتم حفظ ال�صور املُلتَقطة التي يتم فيها اكت�ص��اف ال�صّ ��خو�ص الب�ص��رية يف جملد ،حيث يُع ّد جزءًا من اأر�ص��يف املراقبة
))cameraImg = np.reshape(cameraImg, (3, 240, 400 االأمنية الذي �صي�صاعد على فح�ص ال�صور يف امل�صتقبل.
ا ًأوال :علي��ك اأن ت�ص� ِ
�تخدم الدال��ة ) ( getcwdلت�ص��رتد م�ص��ار دلي��ل العم��ل احل��ايل لربنام��ج املُتح ِّك��م (وه��و املجل��د ال��ذي
0 1 2 يت�ص ّم��ن برنام��ج املُتح ِّك��م) حت��ى يتع��رف الربنام��ج عل��ى امل��كان ال��ذي ي�ص��ع في��ه املجل��د اجلدي��د با�ص��م( detected :مت
االكت�ص��اف) ،بحي��ث تُ�ص��تخدم الدال��ة ) ( path.joinلرب��ط ا�ص��م امل�ص��ار ب�صل�ص��لة ا�ص��م املجل��د ّ
الن�صي��ة ،وتتم ّث��ل اخلط��وة
الطول 240 العر�ش 400 قنوات اآلألوان 3 االأخرة يف التحقق مما اإذا كان املجلد موجودًا بالفعل اأم ال ،ويف تلك احلالة يتم اإن�صاء جملد جديد.
# gets the current working directory
)(cwd = os.getcwd
# sets the name of the folder where the images
# with detected humans will be stored
قنوات اآلألوان 3 الطول 240 العر�ش 400 "folder_name = "detected
# joins the current working directory and the new folder name
2 0 1 )folder_path = os.path.join(cwd, folder_name
�وال اإىل حفظه ��ا يح ��دث كل خم� � ِ�ص ث ��وانٍ فق ��ط ،كم ��ا ه ��و مب � َّ�ني يف ال�ص ��رط
م ��ا يتعل ��ق مبعاجل ��ة ال�ص ��ورة و�ص � ً
240
واأخ �ريًا ،يت��م حتوي��ل ال�ص��ورة اإىل الت��درج الرم��ادي با�ص��تخدام الدال��ة () cvtColorالت��ي ت�ص� ِ
�تخدم ُم ِ
عام��ل
تغريات :وهي الزوج xو yاللذان مُيثِّالن األإحداثين بوا�صطة اأربعة ُم ِّ COLOR_BGR2GRAYلتغيري األألوان من األأزرق واألأخ�صر واألأحمر اإىل التدرج الرمادي.
اللذي��ن يف ال�ص��ورة وذل��ك يف الزاوي��ة العُلي��ا م��ن اجله��ة اليُ�ص��رى
للم�ص��تطيل ،وكذل��ك ال��زوج wو ،hال��ذي مُي ِّث��ل عر���ص امل�ص��تطيل # converts image to grayscale
وارتفاع��ه .يف جمي��ع األكت�ص��افات املوج��ودة يف ال�ص��ورة ُحت��دِّ د الدال��ة )gray = cv2.cvtColor(np.uint8(img), cv2.COLOR_BGR2GRAY
() rectangleالب�ص��ر مب�ص��تطيل اأزرق ،حي��ث تنظ��ر الدال��ة اإىل
مُتغ� ِّ�ريات ال�ص��ورة عل��ى اأنه��ا تتم ّث��ل يف الزاوي��ة الي�ص��رى العُلوي��ة Human Silhouette Detection اكت�صاف �صور احلدود الب�صرية
()x+w, y+h ال�ص��فلية ( )x+w، y+hم��ن امل�ص��تطيل، ( )x، yوالزاوي��ة اليمن��ى ُ لك�ي تكت�ص�ف ال�ص�ورة ،علي�ك اأن ت�ص�تخدِ م م�س ِّن�ف ه�ار كا�س�كيد ( ،)Haar Cascade Classifierوه�و خوارزم ّي�ة
w املو�صح��ة تالح��ظ اأن ل��ون ول��ون امل�ص��تطيل وعر�ص��ه ،ويف ال�ص��ورة َّ ألكت�ص�اف الكائن�ات تعتم�د عل�ى تعلُّ�م األآل�ة ،وتُ�ص�تخدم لتحديد الكائن�ات يف ال�صور اأو مقاطع الفيديو .وأل�ص�تخدام هذا
امل�صتطيل اأزرق ( )B=255، G=0، R=0وعر�صه .2 املُ�صنِّف حتتاج اأن تُدرِّب منوذج تعلُّم األآلة على جمموعة من ال�صور التي حتتوي على الكائن الذي تريد البحث عنه،
�صكل :6.20م ِّ
ُتغريات امل�صتطيل �صيقوم نظام التقرير با�صرتجاع التاريخ والوقت احلالين با�صتخدام وعل�ى �ص�ور اأخ�رى أل حتت�وي عل�ى ه�ذا الكائ�ن ،حي�ث تق�وم اخلوارزم ّي�ة بالبح�ث ع�ن اأمناط مع ّين�ة يف ال�ص�ور لتحديد
الدال��ة ) ( datetime.nowوطباعته��ا عل��ى وح��دة التحك��م ،باألإ�صاف��ة اإىل اإحداثي��ات الطائ��رة املُ�ص� َّ�رية يف وق��ت التقري��ر ،ويت��م م�كان الكائ�ن .ويف الع�ادة تُ�ص�تخدم ه�ذه اخلوارزم ّي�ة للعث�ور على اأ�ص�ياء حم َّددة مثل :الوجوه ،اأو اأ�ص�خا�ص ي�ص�ريون يف
ال�ص��فلية (_) أل�ص��تخدامها تعديل تن�ص��يق التاريخ والوقت بطريقة ب�ص��يطة عن طريق اإدراج ال�ص��رطات العُلوية ( )-وال�ص��رطات ُ مقط�ع فيدي�و .وم�ع ذل�ك ق�د أل تعم�ل ه�ذه اخلوارزم ّي�ة ب�ص�كل جي�د يف بع��ص املواق�ف الت�ي يك�ون فيه�ا الكائ�ن حمجوبً�ا
كج��زء م��ن ا�ص��م املل��ف املحف��وظ ،ث��م يت��م حفظه��ا يف املجلد با�ص��تخدام الدال��ة ) ( ،imwriteوعند اكتمال كل �ص��يء تقوم الدالة خا�ص�ا عل�ى اكت�ص�اف الب�ص�ر، معر�ص�ا ألإ�ص�اءة منخف�ص�ة .مت تدري�ب امل�صنِّ�ف يف م�ص�روعك تدريبً�ا ًّ
جزئيًّ�ا اأو كليًّ�ا اأو ً
) ( getTimeباإعادة �صبط املوؤقِّت. وعلي�ك اأن ت�ص�تخدِ م مل�ف haarcascade_fullbody.xmlال�ذي �ص�تُزود ب�ه ،وه�و من�وذج تعلُّ�م اآل�ة مُ�درَّب م�ص�بقًا
وي�ص�كِّل ج�زءًا م�ن مكتب�ة اأوب�ن �س�ي يف ( ،)OpenCVو ُيق� َّدم كمُعامِ �ل لكائ�ن () ،CascadeClassifierث�م تَ�ص�تخدم
# loop, through detected human images, annotates them with a bounding box الدالة () detectMultiScaleللقيام بعملية األكت�ص�اف.
# and prints a timestamp and an info message on the console
for (x, y, w, h) in humans:
# loads and applies the Haar cascade classifier to detect humans in image
)'human_cascade = cv2.CascadeClassifier('haarcascade_fullbody.xml
# the image, the top left corner, the bottom right corner, color and width of the rectangle )humans = human_cascade.detectMultiScale(gray
)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
# creates RGB image from merged channels # time intervals used for adjustments in order to reach the target altitude
img = Image.new('RGB', (400, 240)) t1 = self.getTime()
img = cv2.merge((cameraImg[2], cameraImg[1], cameraImg[0])) # time intervals between each detection for human figures
t2 = self.getTime()
# converts image to grayscale
gray = cv2.cvtColor(np.uint8(img), cv2.COLOR_BGR2GRAY)
roll_disturbance = 0
pitch_disturbance = 0
# loads and applies the Haar cascade classifier to detect humans in image
yaw_disturbance = 0
human_cascade = cv2.CascadeClassifier('haarcascade_fullbody.xml')
humans = human_cascade.detectMultiScale(gray)
# specifies the patrol coordinates
# loop, through detected human images, annotates them with a bounding box waypoints = [[-30, 20], [-60, 30], [-75, 0], [-40, -10]]
# and prints a timestamp and an info message on the console # target altitude of the drone in meters
for (x, y, w, h) in humans: self.target_altitude = 8
cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2) # gets the current working directory
current_time = datetime.now() cwd = os.getcwd()
print(current_time) # sets the name of the folder where the images
print("Found a person in coordinates [{:.2f}, {:.2f}]" # with detected humans will be stored
.format(x_pos, y_pos)) folder_name = "detected"
# joins the current working directory and the new folder name
# saves annotated image to file with timestamp folder_path = os.path.join(cwd, folder_name)
current_time = current_time.strftime("%Y-%m-%d_%H-%M-%S")
filename = f"detected/IMAGE_{current_time}.png" if not os.path.exists(folder_path):
cv2.imwrite(filename, img) # creates the folder if it doesn't exist already
os.makedirs(folder_path)
t2 = self.getTime() print(f"Folder \"detected\" created!")
else:
# calculates the desired input values for roll, pitch, yaw, print(f"Folder \"detected\" already exists!")
# and altitude using various constants and disturbance values
roll_input = self.K_ROLL_P * clamp(roll, -1, 1) while self.step(self.time_step) != -1:
+ roll_acceleration + roll_disturbance
pitch_input = self.K_PITCH_P * clamp(pitch, -1, 1) # reads sensors
+ pitch_acceleration + pitch_disturbance roll, pitch, yaw = self.imu.getRollPitchYaw()
yaw_input = yaw_disturbance x_pos, y_pos, altitude = self.gps.getValues()
clamped_difference_altitude = clamp(self.target_altitude roll_acceleration, pitch_acceleration, _ = self.gyro.getValues()
- altitude + self.K_VERTICAL_OFFSET, -1, 1) self.current_pose = [x_pos, y_pos, altitude, roll, pitch, yaw]
vertical_input = self.K_VERTICAL_P * pow(clamped_difference_altitude, 3.0)
if altitude > self.target_altitude - 1:
# calculates the motors' input values based on the desired roll, pitch, yaw, and altitude values # as soon as it reaches the target altitude,
front_left_motor_input = self.K_VERTICAL_THRUST
# computes the disturbances to go to the given waypoints
+ vertical_input - yaw_input + pitch_input - roll_input
if self.getTime() - t1 > 0.1:
front_right_motor_input = self.K_VERTICAL_THRUST
yaw_disturbance, pitch_disturbance = self.move_to_target(
+ vertical_input + yaw_input + pitch_input + roll_input
waypoints)
rear_left_motor_input = self.K_VERTICAL_THRUST + vertical_input
t1 = self.getTime()
+ yaw_input - pitch_input - roll_input
rear_right_motor_input = self.K_VERTICAL_THRUST + vertical_input
- yaw_input - pitch_input + roll_input # initiates the image processing and detection routine every 5 seconds
if self.getTime() - t2 > 5.0:
# sets the velocity of each motor based on the motors' input values calculated above
self.front_left_motor.setVelocity(front_left_motor_input) # retrieves image array from camera
self.front_right_motor.setVelocity(-front_right_motor_input) cameraImg = self.camera.getImageArray()
self.rear_left_motor.setVelocity(-rear_left_motor_input)
self.rear_right_motor.setVelocity(rear_right_motor_input) # checks if image is successfully retrieved
if cameraImg:
334 333
مترينات األآن �ص�غِّل املُح��اكاة ل��رتى الطائ��رة املُ�ص� َّ�رية وه��ي تُقل��ع ُوحت ِّل��ق ح��ول املن��زل .ألح� ْ�ظ ُخم َرج��ات وح��دة التحك��م اجلدي��دة
وال�صور التي مت اإن�صاوؤها يف املجلد.
1عدِّل برنامج امل ُتحكِّم اخلا�ص بك بحيث أل يتحقق من وجود املجلد بالفعل يف امل�سار .هل يت�سبب ذلك يف اأية تعقيدات
يف تنفيذ امل ُحاكاة؟
�صكل :6.21
2ع�دِّل برنام��ج امل ُتح ِّك��م بحي��ث يق��وم باألكت�س��اف كل 10ث��وانٍ .ه��ل تاًلح��ظ اأي َف��رق يف تك��رار م��ا تطبع��ه وح��دة التحك��م
ويف ال�سور املحفوظة؟
تم اإن�صاء المجلد.
336 335
الم�صروع 3م��اذا �س��يحدث مل ُخ َرج��ات ال�س��ورة اإذا قم��ت بدم��ج اأبع��اد األأل��وان ح�س��ب الت�سل�س��ل املعت��اد ب� ً
�دأل م��ن الت�سل�س��ل املعكو���ص؟
دوِّن ماًلحظاتك وفقًا لذلك.
يف الوق��ت احلا�ص��ر ،هن��اك العدي��د م��ن م�ص��اريع تكام��ل ال��ذكاء األ�صطناع��ي كبرية
احلج��م الت��ي يت��م تطويره��ا ملختل��ف ال�صناع��ات والقطاع��ات املختلف��ة يف البل��دان،
و ُيع ُّد القطاع ال�صحي من اأهم القطاعات التي تتبنى تقنيات الذكاء األ�صطناعي،
وه��ذا يعن��ي اأن تطوي��ر امل�ص��اريع يف ه��ذا القط��اع أل ُب� ّد اأن ياأخ��ذ اأخالقي��ات ال��ذكاء
األ�صطناعي بعن األعتبار. 4اأج ِر جتارب على امل ُعامِ لني الرابع واخلام�ص يف الدالة () .rectangleدوِّن ماًلحظاتك وفقًا لذلك.
اأجرِ بحثًا عن اأنظمة الرعاية ال�صحية التي تعمل بالذكاء األ�صطناعي وعن اآثارها 1
األأخالقي��ة ،وح� ِّ�دد املناف��ع واملخاط��ر املحتمل��ة لتطبي��ق نظ��ام تقني��ة معلوم��ات يعم��ل
بالذكاء األ�صطناعي يف موؤ�ص�صة �صحية.
2
ح ِّل��ل املخ��اوف األأخالقي��ة الت��ي تن�ص�اأ عند ا�ص��تخدام ال��ذكاء األ�صطناع��ي يف اتخاذ
قرارات توؤثر على �صحة املري�ص ،و�ص ْع جمموعة من املبادئ األأخالقية أل�ص��تخدام
الذكاء األ�صطناعي يف الرعاية ال�صحية تعطي األأولوية ل�صالمة املري�ص و�صحته.
ع�دِّل برنام��ج امل ُتح ِّك��م اخلا���ص ب��ك بحي��ث يطب��ع قي��م األلتف��اف واألنح��دار واألنع��راج للطائ��رة امل ُ�س� َّ�رة عن��د اكت�س��اف 5
3 اأي �سخ�ص.
عر�ص��ا تقدمُي ًي��ا يح��دِّ د املبادئ األأخالقية املقرتحة واألأ�ص��باب التي تدعو اإىل
اأن�ص��ئ ً
األلت��زام به��ا ،واعر���ص املب��ادئ عل��ى زمالئ��ك يف الف�ص��ل ،ث��م ناق���ص معه��م مزاي��ا
وحتديات املبادئ املقرتحة.
338 337
ماذا تع ّلمت
امل�صطلحات الرئي�صة
339