<?xml version="1.0"?>
<rss version="2.0"><channel><title>&#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x629;: &#x630;&#x643;&#x627;&#x621; &#x627;&#x635;&#x637;&#x646;&#x627;&#x639;&#x64A;</title><link>https://academy.hsoub.com/programming/artificial-intelligence/page/5/?d=2</link><description>&#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x629;: &#x630;&#x643;&#x627;&#x621; &#x627;&#x635;&#x637;&#x646;&#x627;&#x639;&#x64A;</description><language>ar</language><item><title>&#x645;&#x633;&#x62A;&#x642;&#x628;&#x644; &#x627;&#x644;&#x630;&#x643;&#x627;&#x621; &#x627;&#x644;&#x627;&#x635;&#x637;&#x646;&#x627;&#x639;&#x64A;</title><link>https://academy.hsoub.com/programming/artificial-intelligence/%D9%85%D8%B3%D8%AA%D9%82%D8%A8%D9%84-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_09/--.png.7e5d862793d386be90d533bebea89821.png" /></p>
<p>
	بدت تقنية <span ipsnoautolink="true">الذكاء الصناعي</span> قبل عقد من الزمان وكأنها شيء منبثق من قصص الخيال العلمي ليس إلا، لكن مع تطور العتاد Hardware وتوافر كميات هائلة من البيانات على الإنترنت وجهود آلاف الباحثين عبر العالم، بدأت تتحوّل تلك القصص شيئًا فشيئًا إلى واقع نعيشه. لقد أصبحنا نستخدم تقنيات الذكاء الصناعي في حياتنا اليومية بدرايةٍ منا أو بدون دراية. لقد أصبح جزءًا روتينيًّا في أعمالنا أو تصفحنا على الإنترنت، وميزة هامة لأي موقع الإلكتروني.
</p>

<h2>
	إحصائيات حول مستقبل الذكاء الاصطناعي
</h2>

<p>
	في مقالةٍ نشرها بيل غيتس مؤخرًا على مدونته الخاصة بعنوان "<a href="https://www.gatesnotes.com/The-Age-of-AI-Has-Begun" rel="external nofollow">لقد بدأ عصر الذكاء الاصطناعي</a>"، أعرب عن مدى تعجّبه من التطوّر الذي وصل إليه الذكاء الاصطناعي في الأعوام القليلة الماضية، واصفًا إياه بالثوري، وبأنه ثاني أكبر مفاجأة تكنولوجيا رآها في حياته بعد واجهة المستخدم الرسومية. وبناءًا على ذلك توقع أن مستقبل الذكاء الصناعي سيحمل العديد من المفاجآت والتأثيرات والتغيرات في السنوات الخمس إلى العشر القادمة. وفقًا لرؤيته، فإن الذكاء الاصطناعي سيقدّم طرقًا جديدة للتعامل مع المشكلات البيئية (مثل تغير المناخ)، وسيغيّر الطريقة التي يعمل ويتعلّم بها الناس، وسيحسّن من الرعاية الصحية ويساعد في الشفاء من العديد من الأمراض، وأن صناعات بأكملها ستتجه إلى إدخال تقنيات الذكاء الصناعي في أعمالها، وسيكون سبيلًا لتحقيق التقدّم والتميّز والمنافسة بين الشركات. لكن كان هناك جانب مظلم أيضًا، ففي <a href="https://www.mirror.co.uk/news/us-news/microsoft-founder-bill-gates-said-29548655" rel="external nofollow">مقال آخر</a>، تحدّث بيل غيتس عن إمكانية أن تكون التكنولوجيا حدثًا سيئًا، فربما تُحدث بعض المشاكل مثل البطالة الجماعية نتيجة استحواذه على جميع وظائفنا، أو ربما يقرر أن "البشر يشكلون تهديدًا" وينقلب علينا. لهذا السبب، حث وغيره من روّاد التكنولوجيا على طرق للتحكم في الذكاء الاصطناعي. أفكار بيل غيتس ليست مجرد كلام على الهامش بالتأكيد، فقد أعرب العديد من رواد أعمال بارزين في مجال التكنولوجيا مثل إيلون ماسك وعلماء مثل هوكينج مرارًا وتكرارًا عن قلقهم العميق بشأن الذكاء الاصطناعي.
</p>

<p>
	على الجانب الآخر كان هناك العديد من رواد الأعمال الذين ينظرون لهذه القضية بإيجابية، ماسايوشي سون، الرئيس التنفيذي لشركة SoftBank ومدير صندوق Vision هو واحد منهم. في <a href="http://www.cnbc.com/2019/03/08/softbank-ceo-ai-will-completely-change-the-way-humans-live-within-30-years.html" rel="external nofollow">مقابلة مع CNBC</a>، أعلن أنه في غضون 30 عامًا، سيكون لدينا سيارات طائرة وسيعيش الناس لفترة أطول وسنكون قد عالجنا العديد من الأمراض. أشار أيضًا إلى أن التركيز الرئيسي لصندوقه ينصب على الذكاء الصناعي. حسنًا، من منهم على حق؟ من منهم نصدّق؟ هل سيكون المستقبل بائسًا أم رائعًا أم سيكون بينهما؟ هل هو تقنية عظيمة أم أنه تهديد للإنسان؟ سنناقش في هذه المقالة مستقبل الذكاء الصناعي وتأثيره على حياة الإنسان من عدة جوانب، لكن دعونا نتفق على أن التنبؤ بالتقنيات الجديدة أمر صعب للغاية، ويكاد يكون مستحيلاً. لأثبت لكم ذلك، ها هنا بعض التوقعات العلمية من شخصيات بارزة كانت خاطئة:
</p>

<ul>
	<li>
		توقع توماس أديسون أن <a href="http://www.msn.com/en-us/news/technology/the-best-and-worst-technology-predictions-of-all-time/ss-BBIMwm3#image=5" rel="external nofollow">التيار المتناوب سيفشل</a>.
	</li>
	<li>
		في كتاب "طريق المستقبل The Road Ahead" لبيل غيتس 1995، لم يُشير إلى الإنترنت!
	</li>
	<li>
		في عام 2007، قال الرئيس التنفيذي المشارك لمجموعة "البحث في الحركة Research in Motion" جيم بالسيلي ومبتكر جهاز BlackBerry، إن <a href="http://www.recode.net/2017/1/9/14215942/iphone-steve-jobs-apple-ballmer-nokia-anniversary" rel="external nofollow">آيفون iPhone لن يكون ناجحًا</a>.
	</li>
</ul>

<p>
	دعونا نبدأ مع بعض الإحصائيات المتنوعة عن مستقبل الذكاء الاصطناعي التي تكشف لنا جدية الأمر:
</p>

<ul>
	<li>
		<a href="https://www.google.com/finance/quote/NVDA:NASDAQ?sa=X&amp;ved=2ahUKEwjOy6Py7MCBAxViSvEDHbsBKpMQ3ecFegQIGhAZ&amp;window=1Y" rel="external nofollow">أرباح شركة إنفيديا Nvidia اليوم بتاريخ 26 أيار 2023،</a> (واحدة من أكبر الشركات إنتاجًا لمعالجات الرسومات وبطاقات العرض المرئي GPUs) عادلت كامل قيمة شركتي أنتل و كوالكوم (شركات عالمية منافسة لها). ارتفاع أسهم شركة انفيديا اليوم هو أكبر ارتفاع سجّلته وول ستريت Wall street بتاريخها. أحداث صادمة شهدها اليوم سوق الأسهم الأميركية مع ارتفاع أسهم شركة إنفيديا بقيمة 24% لتصبح الشركة أول شركة رقاقات قيمتها السوقية قريبة من 1 ترليون دولار. يعود سبب ذلك إلى أن المعالجات الرسومية التي تُنتجها هذه الشركة وخصوصًا معالج H100 هو أقوى معالج موجود حاليًا في الأسواق مُستخدم لتدريب النماذج اللغوية الضخمة مثل GPT.
	</li>
	<li>
		<a href="https://www.marketsandmarkets.com/Market-Reports/artificial-intelligence-market-74851580.html" rel="external nofollow">وفقًا للإحصاءات أيضًا</a>، وصل سوق الذكاء الصناعي إلى مايقارب 86 مليار دولار في 2022، ومن المتوقع أن يزداد مُعدّل النمو بنسبة 36% عن 2022 بحلول عام 2027، مع عوائد تُقدّر بحوالي 400 مليار دولار. من المتوقع أن <a href="https://www.pwc.com/us/en/advisory-services/assets/ai-predictions-2018-report.pdf" rel="external nofollow">يعزز الذكاء الاصطناعي السوق الصينية بنسبة 26.1٪ والولايات المتحدة بنسبة 14.5٪ بحلول عام 2030</a>.
	</li>
	<li>
		<a href="https://www.ibm.com/downloads/cas/GVAGA3JP" rel="external nofollow">حوالي 44 بالمئة من الشركات العالمية</a> تهتم بالاستثمارات الجادة في الذكاء الصناعي ودمجه في أعمالها. من بين 9130 براءة اختراع تلقتها شركة IBM في عام 2021، كان <a href="https://newsroom.ibm.com/2021-01-12-IBM-Tops-U-S-Patent-List-for-28th-Consecutive-Year-with-Innovations-in-Artificial-Intelligence-Hybrid-Cloud-Quantum-Computing-and-Cyber-Security" rel="external nofollow">هناك 2300 براءة اختراع</a> متعلقة بالذكاء الصناعي.
	</li>
</ul>
<iframe allowfullscreen="" data-controller="core.front.core.autosizeiframe" data-embedauthorid="3889" data-embedcontent="" src="https://academy.hsoub.com/files/17-%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-%D9%88%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9/?do=embed" style="margin: auto;"></iframe>

<h2>
	ما هو نوع الذكاء الاصطناعي في وقتنا الحاضر؟
</h2>

<p>
	دعونا نفهم ما هو <a href="https://academy.hsoub.com/programming/artificial-intelligence/" rel="">الذكاء الاصطناعي</a> وفي أي مرحلة هو في الوقت الحاضر، وذلك قبل التعمق في موضوع مستقبله. يمكننا تعريف الذكاء الصناعي على أنه "قدرة الآلات التي يتحكم بها الحاسوب على أداء مهام ذكية." إذًا، الذكاء الصناعي هو أحد <a href="https://academy.hsoub.com/programming/general/%D8%B9%D9%84%D9%88%D9%85-%D8%A7%D9%84%D8%AD%D8%A7%D8%B3%D9%88%D8%A8/" rel="">علوم الحاسوب</a>، والذي يهدف إلى تطوير آلات ذكية يمكنها محاكاة السلوك البشري. في مقالة سابقة بعنوان <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">أنواع الذكاء الاصطناعي</a> ذكرنا أن الذكاء الصناعي يتألف من عدة أنواع، وهي (وفقًا للقدرات): ذكاء اصطناعي ضعيف Weak AI، ذكاء اصطناعي قوي Strong AI، ذكاء اصطناعي خارق Super AI. يُعتبر الذكاء الذكاء الصناعي في وقتنا الحاضر على أنه ذكاء ضعيف، أي يمكنه فقط أداء مهام مخصّصة على سبيل المثال، السيارات ذاتية القيادة والتعرف على الكلام وما إلى ذلك.
</p>

<h2>
	ما هو مستقبل الذكاء الاصطناعي؟
</h2>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="135587" href="https://academy.hsoub.com/uploads/monthly_2023_09/--.png.e303297ca256ff7b89ff17b760090eca.png" rel=""><img alt="مستقبل الذكاء الاصطناعي" class="ipsImage ipsImage_thumbnailed" data-fileid="135587" data-ratio="62.50" data-unique="d20o7l5rr" style="width: 800px; height: auto;" width="900" src="https://academy.hsoub.com/uploads/monthly_2023_09/--.thumb.png.73221fd98f6ccfcbed3929b932e6bae6.png"></a>
</p>

<p>
	يرتبط مستقبل الذكاء الصناعي بمستقبل البشرية ويؤثر في كل صناعة تقريبًا ويدخل في كل مفاصل الحياة، إنّه المحرك الرئيسي للتقنيات الناشئة، مثل <a href="https://academy.hsoub.com/programming/general/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D9%85%D9%81%D9%87%D9%88%D9%85-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%A7%D9%84%D8%B6%D8%AE%D9%85%D8%A9-big-data-r1579/" rel="">البيانات الضخمة Big Data</a> و<a href="https://academy.hsoub.com/programming/os-embedded-systems/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%B1%D9%88%D8%A8%D9%88%D8%AA-%D8%A7%D9%84%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-r1855/" rel="">الروبوتات Robotics</a> و<a href="https://academy.hsoub.com/programming/os-embedded-systems/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D9%81%D9%8A-%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA-%D8%A7%D9%84%D8%A3%D8%B4%D9%8A%D8%A7%D8%A1-iot-r1514/" rel="">إنترنت الأشياء IoT</a>، ولا ننسَ التقنيات التوليديّة (أي القادرة على توليد الصور أو الكلام ..إلخ)، مع أدوات مثل ChatGPT ومولدات الذكاء الصناعي الفنية AI Art Generators التي تحظى بضجة كبيرة الآن، والتي ربما ستستمر بالتطور حتى تُعتمد كأدوات تقنية وفنية وإنشائية في المستقبل المنظور.
</p>

<p>
	دعونا نلقي نظرة على بعض المجالات التي من المحتمل أن يكون لها تأثير كبير على المجتمع البشري.
</p>

<h3>
	الذكاء الاصطناعي والسيارات ذاتية القيادة
</h3>

<p>
	إنها واحدة من أهم المجالات المستقبلية. لقد رأيناها كثيرًا في قصص الخيال العلمي، لكن هناك ابتكارات حقيقية، مثل <strong>عربة ستانفورد Stanford Cart</strong> في أوائل الستينات، حيث كانت تستخدم الكاميرات والذكاء الاصطناعي في الملاحة، وعلى الرغم من أنه كان إنجازًا بارزًا؛ إلا أنّه لم يكن عمليًّا، حيث تطلب الأمر أكثر من 10 دقائق للتخطيط لأي خطوة!
</p>

<p>
	نقطة الانعطاف الأساسيّة بالنسبة للسيارات ذاتية القيادة جاءت في عام 2004. وكان المحفز الرئيسي هو الحروب التي كانت تؤدي إلى خسائر فادحة بالجنود. آمنت وكالة داربا DARPA بأن السيارات ذاتية القيادة هي حل للحد من هكذا خسائر، فأقامت مسابقة سنوية أُطلق عليها اسم <a href="https://www.darpa.mil/about-us/timeline/-grand-challenge-for-autonomous-vehicles" rel="external nofollow">DARPA Grand Challenge</a>، في عام 2004، مع جائزة بقيمة مليون دولار لتشجيع الابتكار على نطاق واسع، وعلى الرغم من أن أداء السيارات في أول نسخة كان سيئًا، لكن في عام 2007، كانت السيارات متقدمة جدًا.
</p>

<p>
	هناك الكثير من الالتباس حول ما تعنيه كلمة "ذاتية القيادة". هل هو قيادة السيارة نفسها بمفردها أو يجب أن يكون هناك سائق بشري؟
</p>

<p>
	<a href="https://www.faistgroup.com/news/autonomous-vehicles-levels/" rel="external nofollow">هناك 6 مستويات</a> من الاستقلالية:
</p>

<ol>
	<li>
		المستوى 0: يتحكم فيه الإنسان بكل السيارة.
	</li>
	<li>
		المستوى 1: تتحكم الحواسيب بشيء واحد في وقت واحد (مثل السرعة أو الكبح).
	</li>
	<li>
		المستوى 2: أتمتة وظيفتين في وقت واحد.
	</li>
	<li>
		المستوى 3: أتمتة جميع وظائف السلامة، لكن يمكن للسائق التدخل إذا حدث خطأ ما.
	</li>
	<li>
		المستوى 4: يمكن للسيارة أن تقود بنفسها، ولكن هناك حالات يجب أن يشارك فيها الإنسان.
	</li>
	<li>
		المستوى 5: السيارة ذاتية القيادة تمامًا.
	</li>
</ol>

<p>
	تعد صناعة السيارات واحدة من أكبر الأسواق، ومن المرجح أن يؤدي الذكاء الصناعي إلى تغييرات مُدوّية. وفقًا <a href="http://www.alliedmarketresearch.com/autonomous-vehicle-market" rel="external nofollow">لدراسة من Allied Market Research</a>، من المتوقع أن يصل سوق هذه السيارات إلى 556.67 مليار دولار بحلول عام 2026، وهو ما سيمثل معدل نمو سنوي مركب بنسبة 39.47٪.
</p>

<h3>
	استخدام الذكاء الصناعي في الطب واكتشاف الأدوية
</h3>

<p>
	يمتلك برنامج الدردشة الآلي الجديد للذكاء الاصطناعي ChatGPT القدرة على تغيير مستقبل التشخيص الطبي، وذلك <a href="https://www.statnews.com/2023/02/13/chatgpt-assisted-diagnosis/" rel="external nofollow">وفقًا لمقالة رأي</a> نُشرت في 13 فبراير في STAT بالاشتراك مع أندرو بيم Andrew Beam، الأستاذ المساعد في علم الأوبئة بجامعة هارفارد. لقد أجرى بيم وفريقه اختبارات على العديد من أدوات فحص الأعراض Symptom Checker (أداة تشخيص للأمراض) المنتشرة على مواقع الويب وتطبيقات الهواتف الذكية، ووجدوا أن تلك الأدوات كانت غير دقيقة في تقديم التشخيص مقارنة بالأطباء، ولكن عندما اختبر الباحثون لاحقًا قدرة ChatGPT على تشخيص الأمراض لاحظوا أن الذكاء الاصطناعي كان دقيقًا للغاية ويضاهي دقة الأطباء.
</p>

<p>
	من جهةٍ أخرى، لقد كان التقدم في اكتشاف الأدوية معجزة تقريبًا، حيث يوجد الآن علاجات لأمراض مستعصية مثل التهاب الكبد C، مع تقدّم ملحوظ في علاج عدد لا يحصى من السرطانات. لكن هناك الكثير من التحديات، فشركات الأدوية تواجه المزيد من المشاكل في التوصل إلى العلاجات. إليك مثالًا واحدًا فقط: في 2019، أعلنت شركة Biogen أن أحد عقاقيرها لمرض الزهايمر، والذي كان في تجارب المرحلة الثالثة، فشل في إظهار نتائج ذات فائدة. نتيجةً لذلك، تراجعت أسهم الشركة بنسبة 29٪، <a href="http://www.wsj.com/articles/biogen-shares-drop-28-after-ending-alzheimers-phase-3-trials-11553170765" rel="external nofollow">مما أدى إلى القضاء على 18 مليار دولار من القيمة السوقية</a>.
</p>

<p>
	إن تطوير الأدوية بالأسلوب التقليدي يتضمن الكثير التجربة والخطأ، مما قد يستغرق وقتًا طويلًا، لذا يتطلع الباحثون والشركات إلى مستقبل الذكاء الاصطناعي للحصول على المساعدة. بعض من هذه الشركات هي Insitro التي استثمرت 100 مليون دولار، وشركة Alexandria Venture Investments وشركة Bezos Expeditions التابعة لجيف بيزوس وشركة Mubadala Investment Company ...إلخ.
</p>

<p>
	<a href="https://khn.org/morning-breakout/ups-and-downs-of-artificial-intelligence-ibm-stops-sales-development-of-watson-for-drug-discovery-hospitals-learn-from-ehrs/" rel="external nofollow">يعد الذكاء الاصطناعي في تسريع عملية اكتشاف الأدوية</a>، لأن خوارزمياته قادرة على اكتشاف وفهم الأنماط المعقدة، كما يمكن أن يكون مفيدًا أيضًا في تطوير علاجات مخصصة -الموجهة للتركيب الجيني للفرد- والتي من المحتمل أن تكون حاسمة في علاج بعض الأمراض.
</p>

<h3>
	الذكاء الاصطناعي وخصوصية المستخدمين
</h3>

<p>
	أثار مقال من موقع <a href="Bloomberg.com" rel="">Bloomberg</a> في أبريل 2019 ضجة كبيرة. ألقى المقال <a href="http://www.bloomberg.com/news/articles/2019-04-10/is-anyone-listening-to-you-on-alexa-a-global-team-reviews-audio" rel="external nofollow">نظرة من وراء الكواليس حول كيفية إدارة أمازون Amazon لنظام AI الخاص بالمساعد الصوتي Alexa</a>، فإلى جانب اعتماده على الخوارزميات، هناك أيضًا الآلاف من الأشخاص الذين يعملون خلف الكواليس على تحليل المقاطع الصوتية للمساعدة في جعل النتائج أفضل (أي نوع من التنصت على كلامك مع المساعد الصوتي)، وذلك للتركيز على التعامل مع الفروق الدقيقة في اللهجات العامية والإقليمية، والتي كانت صعبة بالنسبة لخوارزميات الذكاء الاصطناعي. سارع موقع أمازون إلى الإشارة إلى أن لديه قواعد ومتطلبات صارمة، ولكن هذا أثار المزيد من القلق!
</p>

<p>
	انطلاقًا من ذلك، ومن العديد من حالات انتهاء خصوصية المستخدمين الأخرى، بدأت بعض الحكومات تفرض على الشركات قوانين جديدة. على سبيل المثال أعلن أعضاء الكونجرس الأمريكي برعاية مشروع <a href="http://www.theverge.com/2019/4/10/18304960/congress-algorithmic-accountability-act-wyden-clarke-booker-bill-introduced-house-senate" rel="external nofollow">قانون يسمى "The Algorithmic Accountability Act"</a>، والذي يتضمن العديد من المبادئ والقوانين على الشركات التي تُنتج أنظمة الذكاء الصناعي، مثل أنه لا يمكن استخدام التكنولوجيا كذريعة أو طريق لتجنب الامتثال للقانون.
</p>

<h3>
	الفائدة العامة للمجتمع: الصالح الاجتماعي
</h3>

<p>
	كتبت شركة الاستشارات الإدارية McKinsey&amp;Co دراسة مستفيضة بعنوان <a href="http://www.mckinsey.com/featured-insights/artificial-intelligence/applying-artificial-intelligence-for-social-good" rel="external nofollow">"تطبيق الذكاء الاصطناعي من أجل الصالح الاجتماعي"</a>. يوضح كيف يمكن استخدام الذكاء الصناعي للتعامل مع قضايا مثل الفقر والكوارث الطبيعية وتحسين التعليم. الدراسة لديها ما يقرب من 160 حالة استخدام. إذن ، إليك نظرة على بعض منها فقط:
</p>

<ol>
	<li>
		يمكن أن يساعد تحليل منصات وسائل التواصل الاجتماعي في تتبع تفشي المرض.
	</li>
	<li>
		أنشأ باحثون شبكة عصبية دُرّبت على مقاطع فيديو للصيادين في إفريقيا (نموذج). يُستخدم هذا النموذج ضمن طائرة بدون طيار تُحلّق فوق مناطق معينة لاكتشاف المخالفين.
	</li>
	<li>
		استُخدم الذكاء الصناعي لتحليل بيانات 55893 طردًا في مدينة فلينت الأمريكية للعثور على دليل على التسمم بالرصاص.
	</li>
</ol>

<h3>
	الذكاء الاصطناعي والثورة الصناعية الرابعة Industry 4.0
</h3>

<p>
	الثورة الصناعية الرابعة هي العصر الصناعي الرابع منذ الثورة الصناعية الأولى في القرن الثامن عشر. تتميّز بدمج التقنيات التي تطمس الخطوط الفاصلة بين المجالات المادية والرقمية والبيولوجية. يأتي دور الذكاء الصناعي هنا في قدرته على إحداث هذه التغييرات بسرعة وسلاسة، ولاسيما من خلال الأنظمة الخبيرة ودعم الرؤية الحاسوبية والروبوتات وإنترنت الأشياء.
</p>

<p>
	يمكن تنظيم تأثير الذكاء الاصطناعي على التصنيع في 5 مجالات رئيسية:
</p>

<ol>
	<li>
		التنبؤ بالجودة والعائد.
	</li>
	<li>
		الصيانة الوقائية (التنبؤ بأعطال قد تحدث).
	</li>
	<li>
		التعاون بين الإنسان والروبوت في أداء العديد من المهام: <a href="https://en.wikipedia.org/wiki/Industrial_robot" rel="external nofollow">وفقًا للاتحاد الدولي للروبوتات (IFR)</a>، اعتبارًا من عام 2020، كان هناك حوالي 1.64 مليون روبوت صناعي في جميع أنحاء العالم.
	</li>
	<li>
		المساعدة في ابتكار التصاميم.
	</li>
	<li>
		التسويق التكيفي/سلسلة التوريد: استخدام خوارزميات الذكاء الصناعي لتحسين سلسلة التوريد في عمليات التصنيع ومساعدتها على الاستجابة بشكل أفضل للتغيرات في السوق وتوقعها.
	</li>
</ol>

<h3>
	مستقبل الذكاء الاصطناعي في التعليم
</h3>

<p>
	مع تقدّم التكنولوجيا في السنوات الأخيرة، كان هناك توجّه نحو دمج هذه التقنيات والممارسات الحديثة في التعليم من أجل تحسين التجربة التعليمية الشاملة. تُعد أنظمة إدارة التعلم والتلعيب gamification والتعلم بمساعدة الفيديو والواقع الافتراضي والواقع المعزز -بعضًا من الأمثلة على كيفية تحسين التكنولوجيا لمشاركة الطلاب والتخطيط التعليمي. فلنتحدث عن مستقبل الذكاء الاصطناعي في التعليم.
</p>

<p>
	في يومنا هذا تُستخدم تقنيات الذكاء الصناعي في التعليم بطرق مختلفة، بدءًا من روبوتات الدردشة التي توفر دعمًا للطلاب على مدار الساعة طوال أيام الأسبوع وحتى خوارزميات التعلم المخصصة التي تتكيف مع احتياجات كل طالب. مثلًا يمكن استخدام روبوت المحادثة الشهير <a href="https://academy.hsoub.com/apps/web/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%A8%D9%88%D8%AA-%D8%A7%D9%84%D9%85%D8%AD%D8%A7%D8%AF%D8%AB%D8%A9-%D8%A7%D9%84%D8%B0%D9%83%D9%8A-%D8%B4%D8%A7%D8%AA-%D8%AC%D9%8A-%D8%A8%D9%8A-%D8%AA%D9%8A-chatgpt-r863/" rel="">ChatGPT</a> في التعليم لإنشاء نظام تعليمي ذكي يمكنه فهم استفسارات الطلاب والرد عليها.
</p>

<p>
	تُستخدم الأدوات التي تعمل بالذكاء الصناعي أيضًا لأتمتة المهام الإدارية، مثل تصنيف المهام وتقديم الملاحظات. يُستخدم الذكاء الاصطناعي أيضًا لتحليل كميات كبيرة من البيانات لتحديد الأنماط والرؤى التي يمكن أن تساعد في تطوير استراتيجيات وسياسات تعليمية جديدة.
</p>

<p>
	هناك العديد من الأمثلة على الأدوات والأنظمة التعليمية الناجحة التي تعمل بالذكاء الاصطناعي قيد الاستخدام حاليًا. تشمل بعض أشهرها ما يلي:
</p>

<ul>
	<li>
		دولينجو Duolingo: تطبيق محمول وموقع إلكتروني أمريكي خاص بتعلم اللغات. يستخدم الذكاء الصناعي لتخصيص الدروس لكل مستخدم.
	</li>
	<li>
		ألكس ALEKS: برنامج تعليمي وتقييم عبر الإنترنت يتضمن مواد تدريبية في الرياضيات والكيمياء والإحصاءات التمهيدية والأعمال التجارية. ألكس مدعوم بالذكاء الاصطناعي الذي يوفّر تقييمات قابلة للتكيف وخطط تعلم مخصصة.
	</li>
</ul>

<p>
	<strong>ملاحظة:</strong> يُقصد "بالتلعيب" Gamification أو اللعبنة في العمل -تطبيق عناصر الألعاب وآليات عملها في سياقات ومجالات أخرى غير مرتبطة بالألعاب كالتسويق والأعمال والإعلام والتعليم، لمشاركة المستخدمين في حل المشاكل وتحقيق أهداف محددة، وزيادة تفاعل ومساهمة الفرد.
</p>

<h3>
	مستقبل الذكاء الاصطناعي في الاقتصاد العالمي
</h3>

<p>
	تقدّم الاقتصاد الصيني بشكل مذهل في العقد الأخير من الزمن، ومن المُرجّح جدًا أن يتفوق على الاقتصاد الأمريكي في الأمد القريب، وسيكون الذكاء الصناعي جزءًا رئيسيًا من النمو. حددت الحكومة الصينية الهدف الطموح المُتمثّل في <a href="http://www.diamandis.com/blog/rise-of-ai-in-china" rel="external nofollow">إنفاق 150 مليار دولار على هذه التكنولوجيا حتى عام 2030</a>، جنبًا إلى جنب مع استثمارات كبيرة من شركات مثل Baidu و Alibaba و Tencent. على الجانب الآخر، بالنسبة للولايات المتحدة، كانت الحكومة مترددة في التعامل مع الذكاء الاصطناعي.
</p>

<p>
	تتسابق أيضًا الكثير من الدول إلى ربط التكنولوجيا والاقتصاد وتطبيق الرقمنة والتحويل الرقمي في كل مجالات الحياة مما يسرع من عجلة الاقتصاد وهذا ما يظهر جليًا في دول الخليج العربي وتحديدًا في السعودية والإمارات وغيرهما.
</p>

<h3>
	الذكاء الاصطناعي ووسائل الإعلام
</h3>

<p>
	الصحافة ووسائل الإعلام يمكنها أن تستخدم الذكاء الصناعي أيضًا وبقوة، فمن المؤكد أن هناك تقنيات مبتكرة ستندمج في مجال الصحافة والإعلام. واحدة من هذه التقنيات المبهرة هي تقنية الدبلجة الصوتية وتحويل النصوص بلكنة وصوت الشخص نفسه عبر استخدام تقنيات تحويل الكلام إلى نص ثم الترجمة وإعادة تحويلها إلى صوت مع النبرات الواقعية. هذه التقنية تسمح بتوليد فيديوهات مدبلجة بشكل مدهش وواقعي.
</p>

<p>
	من بين تلك التقنيات المذهلة هناك منصة مثيرة للاهتمام تسمى <a href="https://murf.ai" rel="external nofollow">Murf.ai</a> والتي تقدم حلاً للدبلجة والترجمة بشكل مبتكر. هذا الابتكار قد يقودنا إلى مرحلة يصبح فيها الأفراد غير مضطرين لتعلّم لغات جديدة، حيث ستقوم الآلات بالدبلجة والترجمة وكل ما يتعلق بذلك. إننا فعلاً على بُعد خطوات من تحقيق تغيير هائل في هذا المجال!
</p>

<p>
	يمكن رؤية أحد الأمثلة الأخرى في استخدام وكالة <a href="https://automatedinsights.com/customer-stories/associated-press/" rel="external nofollow">Associated Press</a> للتقنيات الذكية التي تُقدمها Automated Insights (شركة تقنية مقرها في أمريكا متخصصة في برامج توليد اللغة الطبيعية التي تحول البيانات الضخمة إلى روايات).
</p>

<p>
	فيما يلي بعض الطرق التي يمكن للذكاء الاصطناعي من خلالها تطوير مجال الإعلام:
</p>

<ol>
	<li>
		<strong>إنشاء المحتوى:</strong> يمكن استخدام تقنيات الذكاء الاصطناعي لإنشاء عمليات إنشاء المحتوى وأتمتتها. على سبيل المثال، كتابة مقالات إخبارية أو إنشاء تقارير آلية أو حتى إنشاء محتوى فيديو. يمكن أن يساعد ذلك المؤسسات الإعلامية على تبسيط عمليات الإنتاج الخاصة بها وتقديم المحتوى بشكل أكثر كفاءة.
	</li>
	<li>
		<strong>النسخ والترجمة الآليين:</strong> يمكن للذكاء الاصطناعي توفير الوقت والجهد، من خلال استخدام تقنيات مثل التعرف على الكلام ومعالجة اللغة الطبيعية وأتمتة عمليات النسخ والترجمة.
	</li>
	<li>
		<strong>تحليل الفيديو والصورة:</strong> يمكن للذكاء الصناعي تحليل مقاطع الفيديو والصور لتحديد الأشياء والمشاهد والوجوه وحتى العواطف. يمكن للمؤسسات الإعلامية استخدام الأدوات التي تعمل بالذكاء الاصطناعي للتحكم في المحتوى وكشف انتهاك حقوق النشر واستخراج الرؤى من المحتوى المرئي.
	</li>
	<li>
		<strong>الكشف عن الأخبار الزائفة:</strong> يمكن تدريب خوارزميات الذكاء الاصطناعي لتحديد الحالات المحتملة للمعلومات المضللة أو الأخبار المزيفة والإبلاغ عنها.
	</li>
</ol>

<p>
	ومع ذلك، يجب أن نلاحظ أن التقنيات مثل هذه تحمل معها تحديات وتساؤلات أخلاقية، مثل دقة الترجمة والتعامل مع اللهجات والثقة في المصادر المستخدمة. قد يكون هناك أيضًا تأثير على صناعة الترجمة والتدبير اللغوي. لذا، يتعين علينا استخدام هذه التقنيات بحذر ونقاش القضايا المتعلقة بها بعناية لضمان النتائج الدقيقة والأخلاقية.
</p>

<h3>
	مستقبل الذكاء الاصطناعي في الأمن السيبراني
</h3>

<p>
	مما لا شك فيه أن الأمن السيبراني هو أولوية لكل مؤسسة لضمان أمن البيانات. هناك بعض التوقعات بأن مستقبل الذكاء الاصطناعي في الأمن السيبراني سيكون له التغييرات التالية:
</p>

<ol>
	<li>
		مراقبة الحوادث الأمنية.
	</li>
	<li>
		تحديد مصدر الهجمات الإلكترونية باستخدام معالجة اللغات الطبيعية NLP.
	</li>
	<li>
		أتمتة المهام والعمليات المبنية على القواعد بمساعدة روبوتات RPA.
	</li>
</ol>
<iframe allowfullscreen="" data-controller="core.front.core.autosizeiframe" data-embedauthorid="3889" data-embedcontent="" src="https://academy.hsoub.com/files/20-%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%A3%D9%85%D8%A7%D9%86-%D8%A7%D9%84%D8%B1%D9%82%D9%85%D9%8A/?do=embed" style="margin: auto;"></iframe>

<h3>
	التجارة الإلكترونية وخدمة العملاء في عصر الذكاء الاصطناعي
</h3>

<p>
	سيلعب قطاع <a href="https://academy.hsoub.com/entrepreneurship/ecommerce/%D9%88%D8%A7%D9%82%D8%B9-%D8%A7%D9%84%D8%AA%D8%AC%D8%A7%D8%B1%D8%A9-%D8%A7%D9%84%D8%A5%D9%84%D9%83%D8%AA%D8%B1%D9%88%D9%86%D9%8A%D8%A9-%D9%81%D9%8A-%D8%A7%D9%84%D8%B9%D8%A7%D9%84%D9%85-%D8%A7%D9%84%D8%B9%D8%B1%D8%A8%D9%8A-%D9%88%D8%A7%D9%84%D8%B9%D9%88%D8%A7%D9%85%D9%84-%D8%A7%D9%84%D9%85%D8%A4%D8%AB%D8%B1%D8%A9-%D9%81%D9%8A%D9%87%D8%A7-r765/" rel="">التجارة الإلكترونية</a> في مستقبل الذكاء الاصطناعي دورًا حيويًا قريبًا. سيؤثر بشكل إيجابي على كل جانب من جوانب قطاع التجارة الإلكترونية، بدءًا من تجربة المستخدم إلى تسويق المنتجات وتوزيعها.
</p>

<p>
	ومن جهةٍ أخرى ستكون أدوات الذكاء الصناعي التي تدعم مهام خدمة العملاء في شكل روبوتات محادثة ومساعدين افتراضيين -ميزة حاسمة في أي موقع أو متجر إلكتروني، لقدرتها على تقديم الإرشادات والمساعدة للمستخدم خلال بحثه ومقارنته بين المنتجات أو خلال تصفحه لموقعٍ ما.
</p>

<p>
	كان هذا جزءًا بسيطًا عمّا يمكن أن يفعله الذكاء الصناعي في الأمد القريب. دعونا الآن نرى حدود الذكاء الصناعي، ونستكشف بعض الخرافات المتعلقة به.
</p>

<div class="banner-container ipsBox ipsPadding">
	<div class="inner-banner-container">
		<p class="banner-heading">
			دورة الذكاء الاصطناعي
		</p>

		<p class="banner-subtitle">
			احترف برمجة الذكاء الاصطناعي AI وتحليل البيانات وتعلم كافة المعلومات التي تحتاجها لبناء نماذج ذكاء اصطناعي متخصصة.
		</p>

		<div>
			<a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://academy.hsoub.com/learn/artificial-intelligence" rel="">اشترك الآن</a>
		</div>
	</div>

	<div class="banner-img">
		<a href="https://academy.hsoub.com/learn/artificial-intelligence" rel=""><img alt="دورة الذكاء الاصطناعي AI" src="https://academy.hsoub.com/learn/assets/images/courses/artificial-intelligence.png"></a>
	</div>
</div>

<h2>
	القيود الحالية التي تؤثر على مستقبل الذكاء الاصطناعي
</h2>

<p>
	مما لاشك فيه أن الذكاء الصناعي يجري بقدمٍ وساق باتجاه التطورّ المتسارع وقد ننبهر بمستقبل الذكاء الاصطناعي الذي سيؤول إليه والذي قد يغير عالمنا تغييرًا جذريًا في كل مجالات الحياة. وقد تحدثنا في مقالة <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">الذكاء الاصطناعي: دليلك الشامل</a> عن تلك المجالات وعلاقتها في الذكاء الصناعي.
</p>

<p>
	في هذا الجزء من المقالة سنتطرق إلى موضوع مستقبل الذكاء الاصطناعي من جوانب مختلفة وما القيود والعوائق الحالية التي تؤثر فيه، لنحاول الإجابة على بعض الأسئلة مثل: إلى أي حد يمكن أن يصل الذكاء الصناعي؟ هل سيشكل الذكاء الاصطناعي خطرًا؟ هل سيسلب الذكاء الصناعي أعمالنا؟
</p>

<h3>
	حدود الذكاء الاصطناعي
</h3>

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

<p>
	عند التحدث إلى أليكسا Alexa أو حديثًا ChatGPT، قد تنسى أنك تتحدث مع آلة. مثلًا ChatGPT ليس لديه فكرة عما تقوله، ولا يفهمك كشخص، وليس لديه رغبة حقيقية في التفاعل معك (ليس لديه مشاعر أصلًا)؛ إنه يعمل فقط وفقًا لما تحدده الخوارزميات التي أنشأته والبيانات التي تقدمها له. عمومًا كانت النتائج مذهلة. من السهل تجسيد الذكاء الاصطناعي بدون إدراكه لتلك الأمور واعتباره امتدادًا لكيانًا شبيهًا بالبشر.
</p>

<p>
	يفتقر الذكاء الاصطناعي إلى أمور جوهرية موضحة في ما يلي.
</p>

<h4>
	1. الإبداع
</h4>

<p>
	يمكنك العثور على مجموعة متنوعة لا حصر لها من المقالات والمواقع والموسيقى والفن والكتابات وجميع الأنواع (الإبداعية) من إنتاج الذكاء الصناعي. تكمن مشكلة الذكاء الصناعي في أنه لا يمكنه إنشاء أي شيء إبداعي في الحقيقة (انتظر قليلًا). عندما نتحدث عن الإبداع، فإننا نشير إلى أنماط التفكير. مثلًا، كان لدى بيتهوفن طريقة مميزة في التفكير في الموسيقى؛ يمكنك التعرف على مقطوعة بيتهوفن الكلاسيكية حتى لو لم تكن معتادًا على جميع أعماله لأن موسيقاه لها نمط خاص بها، إنها الموسيقى التي فكر بها بيتهوفن، إنها نمطه. يمكن للذكاء الاصطناعي إنشاء مقطوعة جديدة لبيتهوفن من خلال <a href="https://techcrunch.com/2016/04/29/paul-mccartificial-intelligence/" rel="external nofollow">تمثيل عملية تفكيره رياضياً، وهو ما يفعله الذكاء الاصطناعي فعليًّا</a>. مشكلة مساواة الإبداع بالرياضيات هي أن الرياضيات ليست إبداعية. أن تكون <a href="https://www.csun.edu/~vcpsy00h/creativity/define.htm" rel="external nofollow">مبدعًا</a> يعني تطوير نمط جديد من التفكير -شيء لم يره أحد من قبل. الإبداع ليس مجرد تفكير خارج الصندوق؛ الإبداع إنشاء صندوق جديد.
</p>

<p>
	غالبًا ما يكون الإبداع الحقيقي نتيجة خيال ناجح!
</p>

<h4>
	2. التخيل
</h4>

<p>
	إن أفضل وصف للخيال هو أن نقول "تجرّد من الكيان والمكان"، والتجريد بحد ذاته يعني التخلص من جميع آثار الواقع والارتباط به، وبالتالي هو أبعد ما يكون عن نطاق قدرة الذكاء الاصطناعي. يميزنا الخيال عن كل شيء آخر وغالبًا ما يضعنا في مواقف غير حقيقية على الإطلاق. تقدم <a href="https://www.huffingtonpost.com/lamisha-serfwalls/5-reasons-imagination-is-_b_6096368.html" rel="external nofollow">مقالة هافينغتون بوست</a> خمسة أسباب تجعل الخيال أمرًا بالغ الأهمية في اختراق حدود الواقع.
</p>

<p>
	إن الذكاء الصناعي مُقاد بالخوارزميات والبيانات التي يراها، أي لا يمكن للذكاء الاصطناعي إنشاء أنماط جديدة من التفكير أو تطوير بيانات جديدة دون استخدام المصادر الحالية، وبالتالي سيكون موجودًا دائمًا في حدود الواقع. لا يتطلب الخيال ذكاءً إبداعيًا فحسب، بل يتطلب أيضًا ذكاءً داخليًا، ولا يمتلك الذكاء الاصطناعي أيًا من أشكال الذكاء.
</p>

<p>
	الخيال مثل العديد من السمات البشرية الأخرى، إنه "عاطفي"، والذكاء الاصطناعي يفتقر إلى العاطفة.
</p>

<h4>
	3. قصور البيانات
</h4>

<p>
	لا توجد معلومات كافية لإجراء تقييم سليم، إذ البيانات المستخدمة لاتخاذ القرارات سيكون لها دائمًا مستوى معين من القصور، وتأثير هذا القصور على قدرة الذكاء الصناعي على إنتاج قرارات مفيدة يعتمد على نوع ومستوى القصور، إلى جانب قدرات الخوارزميات. هذا ليس كل شيء، فأغرب نوع من قصور البيانات الذي يجب مراعاته هو عندما يريد الإنسان خطأً كناتج. هذا يحدث فعلًا في الحياة الواقعية، والطريقة الوحيدة للتغلب على هذه المشكلة هي من خلال التواصل الواعي الذي يوفره الذكاء الشخصي والذي سيؤثر تأثيرًا كبيرًا على مستقبل الذكاء الاصطناعي الذي يفتقر إليه. مثلًا اشترى شخص ملابس تبدو بشعة بالنسبة لك (الملابس يمكن أن تكون رائعة في الواقع). ومع ذلك إذا كنت ذكيًا، فستقول أن الملابس تبدو رائعة، فهو لايبحث عن رأيك المحايد، وإنما يبحث عن دعمك وموافقتك.
</p>

<p>
	للاستزادة حول هذه النقطة، يمكنك الرجوع إلى مقال <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-%D8%A7%D9%84%D8%AA%D8%AD%D8%AF%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%B1%D8%A6%D9%8A%D8%B3%D9%8A%D8%A9-%D9%88%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D9%88%D8%B3%D8%B9-%D9%81%D9%8A-%D8%A7%D9%84%D9%85%D8%AC%D8%A7%D9%84-r1010/" rel="">تعلم الآلة: التحديات الرئيسية وكيفية التوسع في المجال</a>.
</p>

<h3>
	تقدم الذكاء الاصطناعي
</h3>

<p>
	يعد فهم حقائق الذكاء الاصطناعي أمرًا بالغ الأهمية لاتخاذ قرارات مستنيرة وتشكيل مناهج مسؤولة وأخلاقية لتطويره ونشره. بينما يوفر الذكاء الاصطناعي إمكانات هائلة، من المهم تبديد الأساطير والحصول على توقعات واقعية حول قدراته وقيوده:
</p>

<ul>
	<li>
		<strong>الذكاء الخارق (يتضمن الإدراك).</strong> على الرغم من أن الذكاء الخارق هو أحد أنواع الذكاء الصناعي، إلا أنه مايزال مجرد فكرة فلسفية أكثر مما هي علمية.
	</li>
	<li>
		<strong>أخذ جميع الوظائف البشرية.</strong> من المؤكد أن ظهور الذكاء الاصطناعي والأتمتة لديها القدرة على إلغاء الحاجة للعمال البشريين. إلا أن النظر إلى هذا على أنه نقل مباشر للعمالة من البشر إلى الآلات هو تبسيط مفرط للأمر، فكل تطوّر يترافق بحاجات جديدة تولّد فرصًا جديدة.
	</li>
	<li>
		<strong>ستصبح أجهزة الحاسب فائقة الذكاء أفضل من البشر في فعل أي شيء.</strong> النوع الوحيد للذكاء الصناعي الذي يمكنه التفوق على البشر هو الذكاء الخارق. نستخدم في الوقت الحالي ذكاءً اصطناعيًا ضعيفًا يؤدي مهمة معينة ويحسن أدائها، أما الذكاء الخارق أقرب ما يكون إلى الخيال من الحقيقة.
	</li>
	<li>
		<strong>لا يتطلب الذكاء الاصطناعي أي تدخل بشري.</strong> لدى الناس أيضًا فكرة خاطئة مفادها أن الذكاء الاصطناعي لا يحتاج إلى أي تدخل بشري، لكن الحقيقة هي أن الذكاء الصناعي لم يُطوّر بعد لاتخاذ قرارات خاصة.
	</li>
	<li>
		<strong>سيسيطر الذكاء الاصطناعي على العالم:</strong> هذا مفهوم خاطئ شائع يغذيه الخيال العلمي. في حين أن الذكاء الصناعي لديه القدرة على أتمتة مهام معينة والتأثير على أسواق العمل، فإن فكرة سيطرة الذكاء الاصطناعي بالكامل على البشرية هي فكرة بعيدة المنال. تم تصميم أنظمة الذكاء الاصطناعي وتطويرها من قبل البشر وهي مبرمجة للعمل ضمن حدود وأهداف محددة.
	</li>
	<li>
		<strong>الذكاء الاصطناعي يعرف كل شيء ومعصوم عن الخطأ:</strong> أنظمة الذكاء الاصطناعي هي أدوات قوية، لكنها محدودة بالبيانات التي يتم تدريبها عليها والخوارزميات التي تستخدمها. يمكنهم تقديم رؤى قيّمة وتنبؤات، لكنها ليست بطبيعتها كاملة المعرفة أو مثالية. يمكن أن تنشأ الأخطاء والتحيزات والقيود بسبب البيانات المستخدمة أو الخوارزميات المستخدمة أو قيود النظام.
	</li>
</ul>

<p>
	بعد أن فهمنا حدود الذكاء الصناعي، وقمنا بتبديد بعض المفاهيم الخاطئة حوله؛ دعونا نتحدث عن مكامن الخطر في هذه التقنيات.
</p>

<h3>
	هل الذكاء الاصطناعي مصدر للخطر؟
</h3>

<p>
	جيوفري هينتون هو عالم بمجال الحاسب والذكاء الاصطناعي، ومخترع خوارزمية التعلّم "الانتشار الخلفي Backpropagation" بأواخر الثمانينات، وهي الخوارزمية التي من خلالها يمكن للآلات أن تتعلم. منذ حوالي الشهر أعلن استقالته من شركة جوجل وأعلن بشكل غير مباشر ندمه على تطوير هذه الخوارزمية بقوله: "أواسي نفسي بأن غيري كان سيفعلها".
</p>

<p>
	سبب استقالته المفاجئ من شركة جوجل -اللقاء كامل موجود <a href="https://nyti.ms/3p15v6Y" rel="external nofollow">هنا</a>-، ومن كلامه يمكننا بوضوح أن نستنتج أن الأمور تتجه لمنحى سيئ.
</p>

<p>
	القصة باختصار، من مدة قصيرة أطلقت شركة OpenAI إصدار جديد هائل من النموذج اللغوي GPT (نموذج يمكن استخدامه لتوليد NLG وفهم NLU اللغة البشرية). نتج عن هذا النموذج روبوت الدردشة ChatGPT، وأحدث ضجة هائلة بقدرته على التواصل مع البشر وكتابة المقالات والمحتوى والإجابة عن الأسئلة. <strong>أين المشكلة؟</strong> المشكلة أن OpenAI شريكة مع مايكروسوفت المنافس الأول لجوجل. بالتالي شعرت جوجل بخطر محدق، لأن هذا النموذج سيجعل مايكروسوفت رقم واحد بالعالم ولاسيما بعد دمج مايكروسوفت روبوت الدردشة ChatGPT بمحرك البحث الخاص بها بينج Bing. وكردة فعل من جوجل، قاموا ب<a href="https://fortune.com/2023/04/28/the-google-brain-deepmind-merger-alphabet-pichai-risks-eye-on-a-i/" rel="external nofollow">توحيد فريق ديب مايند DeepMind وفريق جوجل برين Google brain (فريقين بضمان مجموعة من أكبر علماء المجال بالعالم) للعمل على نموذج أفضل وأضخم</a>.
</p>

<p>
	جيوفري رأى أن مايحدث أمر خاطئ وقد يؤدي إلى نتائج سيئة ولخروج الأمور عن السيطرة، ولهذا السبب قرر الانسحاب، وعدم الخوض في ذلك. من خلال حديثه يمكننا تسليط الضوء عن النقاط التالية:
</p>

<ol>
	<li>
		<strong>برمجة الذكاء الاصطناعي لأهداف سيئة.</strong> الأسلحة المستقلة Autonomous weapons هي أنظمة ذكاء اصطناعي مبرمجة للقتل. يمكن أن تتسبب هذه الأسلحة بسهولة في وقوع إصابات جماعية إذا كانت في يد الشخص الخطأ. يمكن أن يؤدي سباق التسلح بالذكاء الاصطناعي أيضًا عن قصد أو غير قصد إلى حروب تؤدي إلى خسائر جسيمة.
	</li>
	<li>
		<strong>غياب الوعي في استخدام الذكاء الاصطناعي.</strong> الاحتمال الثاني إذا صُمم لإجراء شيء مفيد، لكنه أدى إلى نتائج مدمرة. لنفترض أننا طلبنا من السيارة ذاتية القيادة اصطحابنا إلى وجهتنا بأسرع ما يمكن، وهذا ما قد يكون خطيرًا على حياة البشر.
	</li>
	<li>
		<strong>سباق التطوير:</strong> كما رأينا فأن جوجل ومايكروسوفت يتسابقان في تطوير أنظمة الذكاء الاصطناعي، ومن حديث جيوفري نستطيع أن نستنتج أن هذا السباق غير واعي، ولايهتم إلا بالهيمنة والسيطرة على الأسواق، وبالتالي قد يكون لذلك نتائج سيئة جدًا مثل تفشي الأخبار والتوقعات الكاذبة (يمكن لهذه الأنظمة تقليد الأصوات ونشر الأخبار والتوقعات الغير صحيحة، وبالتالي يمكن استخدامها من "جهات سيئة" للترويج لأفعال سيئة). باختصار قد يصل أحدهما لدرجة فقدان السيطرة على نتائج هذه الأنظمة، وهذا أمر جدي وحقيقي فعلًا.
	</li>
</ol>

<p>
	الذكاء الاصطناعي يمكن أن يكون مصدرًا للخطر في بعض الحالات أيضًا، وهنا بعض الأسباب المحتملة:
</p>

<ol>
	<li>
		تعقيد التحكم: بمرور الوقت، يمكن للأنظمة الذكاء الاصطناعي أن تتطور بشكل مستقل وتتعلم من بيئتها. إذا لم يكن لدينا آليات قوية للتحكم والرقابة، فقد يحدث تحول غير مرغوب فيه أو تطور غير متوقع في سلوك الذكاء الاصطناعي.
	</li>
	<li>
		تأثيرات اجتماعية واقتصادية: قد يؤدي تقدم الذكاء الاصطناعي والتأثيرات المرتبطة به إلى تغييرات هائلة في سوق العمل وتوزيع الثروة، مما يؤثر على الاستقرار الاجتماعي والاقتصادي.
	</li>
	<li>
		استغلال البيانات الشخصية: يمكن للذكاء الاصطناعي جمع وتحليل كميات ضخمة من البيانات الشخصية، وقد يؤدي سوء استخدام هذه البيانات إلى انتهاك الخصوصية والأمان الشخصي.
	</li>
	<li>
		التمييز والتحيز: إذا تم تدريب الأنظمة الذكاء الاصطناعي على بيانات ذات تحيزات، فقد يؤدي ذلك إلى انعكاس هذه التحيزات في قراراتها وتأثيرها على الأفراد والمجتمع.
	</li>
	<li>
		الاستخدام في الأسلحة الذاتية: قد يتم استخدام الذكاء الاصطناعي في تطوير أنظمة أسلحة ذاتية القرار، مما يزيد من خطورة الصراعات وتأثيرها على الحياة البشرية.
	</li>
</ol>

<p>
	للتعامل مع هذه المخاطر المحتملة، هناك جهود واسعة لضمان تنمية الذكاء الاصطناعي بطرق أخلاقية ومسؤولة، من خلال إطارات تنظيمية وأخلاقية قوية ومراقبة مناسبة. توجد منظمات ومؤسسات تعمل على تعزيز السلامة والأمان والأخلاقيات في تطور الذكاء الاصطناعي، مثل منظمة الأمم المتحدة، والتي عبر <a href="https://www.skynewsarabia.com/business/1598460-%D8%A7%D9%84%D8%A7%D9%94%D9%85%D9%85-%D8%A7%D9%84%D9%85%D8%AA%D8%AD%D8%AF%D8%A9-%D8%AA%D8%AD%D8%B0%D8%B1-%D8%AE%D8%B7%D8%B1-%D8%A8%D8%A7%D9%84%D8%BA-%D8%A8%D8%B3%D8%A8%D8%A8-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%B5%D9%86%D8%A7%D8%B9%D9%8A" rel="external nofollow">مندوبها السامي لحقوق الإنسان عن قلقه من التطورات الأخيرة التي شهدها العالم في الذكاء الصناعي</a> والتي يبدو بأنها لاتتضمن قيودًا أو قوانين تحمي المجتمعات من مخاطره المحتملة، وبالتالي طرحت الأمم المتحدة مؤخرًا مشروع قرار لإنشاء هيئة استشارية لأصحاب المصلحة المتعددين بشأن التعاون العالمي للذكاء الاصطناعي بعنوان <a href="https://www.un.org/techenvoy/content/artificial-intelligence" rel="external nofollow">"دعم التعاون العالمي في مجال الذكاء الاصطناعي"</a>، وذلك لمعالجة القضايا المتعلقة بالإدماج والتنسيق وبناء القدرات وتوجيه هذه التقنيات فيما يخدم الصالح العام والأمن والسلام العالمي وليس العكس.
</p>

<p>
	يتطلب النقاش حول خطورة الذكاء الاصطناعي توازنًا بين استشراف المخاطر المحتملة واستفادتنا من فوائده في مجالات مثل الطب والبحث وتحسين الحياة البشرية بشكل عام.
</p>

<h3>
	ولادة مهن بشرية جديدة
</h3>

<p>
	عندما يشاهد الناس الأخبار المتعلقة بالروبوتات والأتمتة التي أنشأتها التطورات في التكنولوجيا، مثل الذكاء الاصطناعي، فإنهم يميلون إلى رؤية السلبية أكثر من الإيجابية، وهذا من طبيعة البشر "إِنَّ الْإِنسَانَ خُلِقَ هَلُوعًا". مثلًا، تنص <a href="https://www.theverge.com/2017/11/30/16719092/automation-robots-jobs-global-800-million-forecast" rel="external nofollow">المقالة التي نُشرت على موقع theverge</a> أن استخدام الأتمتة سيُلغي ما بين 400 مليون إلى 800 مليون وظيفة بحلول عام 2030. على الرغم من أن المقالة تعترف بأن بعض التطورات التكنولوجية تخلق وظائف (مثلًا خلق الحاسب الشخصي ما يقدر بنحو 18.5 مليون وظيفة)، فإن التركيز ينصب على الوظائف المفقودة.
</p>

<p>
	يمكن للذكاء الصناعي أن يزيد القدرات البشرية ويؤدي إلى تطوير صناعات وأدوار جديدة. فيما يلي بعض الطرق التي يمكن أن يساهم بها الذكاء الاصطناعي في خلق فرص العمل:
</p>

<p>
	نعم ، الذكاء الاصطناعي AI لديه القدرة على خلق فرص عمل جديدة. بينما يمكن للذكاء الاصطناعي أتمتة مهام وعمليات معينة ، إلا أنه يمكنه أيضًا زيادة القدرات البشرية ويؤدي إلى تطوير صناعات وأدوار جديدة. فيما يلي بعض الطرق التي يمكن أن يساهم بها الذكاء الاصطناعي في خلق فرص العمل:
</p>

<ol>
	<li>
		تطوير وصيانة الذكاء الاصطناعي: مع استمرار تقدم الذكاء الاصطناعي، سيكون هناك طلب متزايد على المهنيين المهرة في تطوير الذكاء الصناعي والبرمجة وتحليل البيانات والتعلم الآلي. تتضمن هذه الأدوار إنشاء أنظمة وخوارزميات وبنية تحتية للذكاء الصناعي وصيانتها.
	</li>
	<li>
		أخلاقيات وحوكمة الذكاء الاصطناعي: مع ظهور الذكاء الصناعي، هناك حاجة متزايدة لخبراء في أخلاقيات الذكاء الصناعي وسياساته وتنظيمه. يمكن أن يساعد هؤلاء المحترفون في ضمان تطوير تقنيات الذكاء الاصطناعي ونشرها واستخدامها بشكل مسؤول وأخلاقي.
	</li>
	<li>
		تدريب ودعم الذكاء الاصطناعي: تتطلب أنظمة الذكاء الصناعي التدريب المستمر والتحسين والدعم. يمكن أن تظهر الوظائف المتعلقة بتدريب نماذج الذكاء الصناعي وتصنيف أو تسمية Labeling البيانات وضمان الجودة ودعم العملاء للمنتجات والخدمات المستندة إلى الذكاء الصناعي مع انتشار الذكاء الصناعي بشكل أكبر.
	</li>
	<li>
		علم البيانات والتحليلات: يعتمد الذكاء الصناعي بشكل كبير على البيانات، وتحتاج المؤسسات إلى مهنيين ماهرين في <a href="https://academy.hsoub.com/programming/general/%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA/" rel="">علوم البيانات</a> و<a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%AD%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA/" rel="">تحليل البيانات</a> و<a href="https://academy.hsoub.com/programming/general/%D9%87%D9%86%D8%AF%D8%B3%D8%A9-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA/" rel="">هندسة البيانات</a> لاستخراج الرؤى وبناء نماذج الذكاء الاصطناعي واتخاذ قرارات مستنيرة بناءً على التحليلات القائمة على البيانات.
	</li>
	<li>
		التعاون بين الإنسان والذكاء الاصطناعي: عندما تصبح أنظمة الذكاء الصناعي أكثر تقدمًا، ستكون هناك حاجة للأفراد الذين يمكنهم التعاون بشكل فعال مع تقنيات الذكاء الصناعي. من المرجح أن تنشأ الوظائف التي تنطوي على إدارة وتفسير ودمج الرؤى الناتجة عن الذكاء الاصطناعي في عمليات صنع القرار.
	</li>
</ol>

<p>
	تجدر الإشارة إلى أنه بينما يمكن للذكاء الصناعي أن يخلق فرص عمل جديدة، فإنه يمكنه أيضًا تغيير الأدوار الوظيفية الحالية. قد تصبح بعض المهام مؤتمتة، مما يؤدي إلى تغييرات في طبيعة العمل. وهذا يسلط الضوء على أهمية التعلم المستمر والتكيف للبقاء على صلة في سوق العمل سريع التطور.
</p>

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

<h2>
	خاتمة
</h2>

<p>
	يبدو لنا أن تقنيات الذكاء الصناعي تتطور بسرعة كبيرة جدًا، على الرغم من أن هذا الكلام يُخفي حقيقة أن الأمر لم يكن سلسًا أو سهلًا أبدًا، وأنه استغرق العديد من السنوات والتكاليف والكثير من العمل البحثي والمساهمات من مختلف الأشخاص -لأخذ مستقبل الذكاء الاصطناعي إلى هذه المرحلة.
</p>

<p>
	بغض النظر عن جميع احتمالات الضرر والعواقب الوخيمة، فإن مستقبل الذكاء الاصطناعي يعد البشرية بأن يكون نقطة تحوّل للعالم، والخبر السار هو أن هناك العديد من الأشخاص الذين يركزون على جعل هذا حقيقةً واقعةً. الأمر لا يتعلق بجني مبالغ طائلة أو الحصول على الشهرة أو القضاء على الوظائف أو السيطرة علينا (هذا الكلام يمكن أن يكون قصص للأطفال فقط)؛ الهدف هو تغيير العالم إلى الأفضل.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-%D8%A3%D9%87%D9%85-%D8%A7%D9%84%D8%A5%D9%86%D8%AC%D8%A7%D8%B2%D8%A7%D8%AA-%D9%88%D8%A7%D9%84%D8%A7%D8%AE%D8%AA%D8%B1%D8%A7%D8%B9%D8%A7%D8%AA-%D9%88%D9%83%D9%8A%D9%81-%D8%A3%D8%AB%D8%B1%D8%AA-%D9%81%D9%8A-%D8%AD%D9%8A%D8%A7%D8%AA%D9%86%D8%A7-%D8%A7%D9%84%D9%8A%D9%88%D9%85%D9%8A%D8%A9-r975/" rel="">الذكاء الاصطناعي: أهم الإنجازات والاختراعات وكيف أثرت في حياتنا اليومية</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">تعلم الذكاء الاصطناعي</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">تطبيقات الذكاء الاصطناعي</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A3%D9%87%D9%85%D9%8A%D8%A9-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-r2243/" rel="">أهمية الذكاء الاصطناعي</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">برمجة الذكاء الاصطناعي</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2132</guid><pubDate>Sun, 24 Sep 2023 13:05:00 +0000</pubDate></item><item><title>&#x62E;&#x637;&#x648;&#x627;&#x62A; &#x62A;&#x646;&#x641;&#x64A;&#x630; &#x645;&#x634;&#x627;&#x631;&#x64A;&#x639; &#x62A;&#x639;&#x644;&#x645; &#x627;&#x644;&#x622;&#x644;&#x629;</title><link>https://academy.hsoub.com/programming/artificial-intelligence/%D8%AE%D8%B7%D9%88%D8%A7%D8%AA-%D8%AA%D9%86%D9%81%D9%8A%D8%B0-%D9%85%D8%B4%D8%A7%D8%B1%D9%8A%D8%B9-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-r2004/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_06/----.png.21fe545fe73f04ebbb3bd94e78709a0a.png" /></p>
<p>
	يحتوي حقل تعلم الآلة على الكثير من الفروع والتقنيات والخوارزميات تبعًا لاهتمامات الأفراد والشركات، ولذلك فإنه من الضروري معرفة المسار الأنسب لك لتعلم ما عليك تعلّمه وما عليك تركه، فمن المستحيل الجمع بين مسارات تعلم الآلة المختلفة مرةً واحدةً.
</p>

<h2>
	مسارات تعلم الآلة
</h2>

<p>
	يمكن تقسيم تلك المسارات إلى ثلاثة، أولها مشاريع بيانات الأعمال التجارية أو يسمى ذكاء الأعمال business intelligence وثانيهما السلك الأكاديمي وثالثهما المشاريع الهندسية، وسنسرد الثلاثة والفرق بينهم في الفقرات الآتية.
</p>

<h3>
	تخصص ذكاء الأعمال التجارية في تعلم الآلة
</h3>

<p>
	في هذا النوع من المشاريع يعمل غالبًا محللو البيانات data analysts وعلماء البيانات data scientists على استخدام البيانات الضخمة لفهم اتجاهات وأداء الشركات، إذ تُستخدَم تلك التحليلات للتنبؤ بأفضل القرارات الواجب اتخاذها والتي قد تشكِّل صعودًا في سلم أهداف الشركات.
</p>

<p>
	من الأفضل في ذلك المسار أن يكون محلل البيانات على دراية كبيرة بعدد من الخوارزميات المفيدة لعمله وكيف تعمل كل خوارزمية حتى يستطيع الاختيار بينهم بناءً على المشكلة والمشروع الذي يعمل عليه.
</p>

<p>
	يمكنك معرفة المزيد بالرجوع إلى مقال <a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%AD%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA/" rel="">الدليل الشامل إلى تحليل البيانات</a> فمجال تحليل البيانات كبير وواسع جدًا.
</p>

<div class="banner-container ipsBox ipsPadding">
    <div class="inner-banner-container">
            <p class="banner-heading">
                    دورة الذكاء الاصطناعي
            </p>



            <p class="banner-subtitle">
        احترف برمجة الذكاء الاصطناعي AI وتحليل البيانات وتعلم كافة المعلومات التي تحتاجها لبناء نماذج ذكاء اصطناعي متخصصة.
            </p>

            <div>
                    <a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://academy.hsoub.com/learn/artificial-intelligence" rel="">اشترك الآن</a>
            </div>
    </div>
<div class="banner-img"> <a href="https://academy.hsoub.com/learn/artificial-intelligence" rel=""><img alt="دورة الذكاء الاصطناعي AI" src="https://academy.hsoub.com/learn/assets/images/courses/artificial-intelligence.png"></a></div>
</div>

<h3>
	التخصص الأكاديمي في تعلم الآلة
</h3>

<p>
	قد يكون الفرد في هذا المسار طالبًا أو باحثًا، وفي كلا الحالتين يُركَّز على الوجه الأكاديمي والرياضي في تعلم الآلة غالبًا، ففي حال كونك طالبًا، فستجد على الأغلب أنّ التركيز كله يصب في جانب الرياضيات من الخوارزميات، ومع أنه يوجد بعض الجامعات التي تدرِّس جوانب تطبيقيةً أيضًا، إلا أنها ليست مؤهلةً على الأغلب لسوق العمل.
</p>

<p>
	أما في حالة كونك باحثًا في <a href="https://academy.hsoub.com/programming/general/%D8%B9%D9%84%D9%88%D9%85-%D8%A7%D9%84%D8%AD%D8%A7%D8%B3%D9%88%D8%A8/" rel="">علوم الحاسوب</a> أو تعلم الآلة، فسيرتكز الأمر دائمًا على قراءة الأبحاث والمجلات العلمية ومحاولة <a href="https://academy.hsoub.com/programming/advanced/%D8%A7%D9%84%D8%AE%D9%88%D8%A7%D8%B1%D8%B2%D9%85%D9%8A%D8%A7%D8%AA/" rel="">تطوير الخوارزميات</a> رياضيًا ثم محاولة تطبيق تلك الأبحاث؛ ولذلك إذا اتخذت هذا المسار فإنه لمن الضروري دراسة الخوارزميات بصورة دقيقة للبحث في تطويرها واستخدامها، وأعني هنا دراسة كيف تعمل الخوارزميات ولماذا تعمل.
</p>

<p>
	مع ذلك، فإنك قد تكون باحثًا أو طالبًا في مجال الفيزياء أو الكيمياء أو الأحياء أو غيرها من العلوم الأخرى غير المرتبطة بالرياضيات والإحصاء علوم الحاسوب، ففي تلك الحالة قد تحتاج إلى برمجة تعلم الآلة لصناعة نماذج قادرة على مساعدتك في أبحاثك.
</p>

<p>
	فكما أوردنا من قبل، نماذج تعلم الآلة مفيدة في كافة المجالات البحثية، إذ يستخدمها علماء الفيزياء والفلك في اكتشاف الكواكب وتحليل الصور، ويستخدمها علماء الأحياء كذلك وغيرهم، وإنه لمن الأفضل في ذلك الحال عدم التوغل كثيرًا في الرياضيات، بل يكفيك فهم أبرز الخوارزميات التي من المرجح أن تحل مشكلتك، ثم البدء في تطبيقها في مشروعك البحثي، ثم اختيار الخوارزمية المناسبة فعلًا لمشروعك بناءً على التجربة والخطأ وبناءً على فهمك للبيانات والمشروع والمشكلة التي تريد حلها.
</p>

<p>
	ما أعنيه أنه في كل تلك الحالات والمسارات الأكاديمية عدا كونك باحثًا متخصصًا في تعلم الآلة، فإن فهم كيف تعمل الخوارزمية التي تستخدِمها هو الجانب الضروري؛ أما لماذا تعمل الخوارزمية، فليس ضروريًا.
</p>

<h3>
	التطبيق في المشاريع الهندسية
</h3>

<p>
	أعني هنا أنك قد تكون مبرمجًا أو مطورًا أو مهندس تعلم آلة وتعمل في إحدى الشركات أو تعمل على تطوير مشروع ما، وفي كل حالة من تلك الحالات، فإنه من الضروري اختيار مجموعة الخوارزميات المناسبة لتخصص مشاريعك.
</p>

<p>
	قد تعمل مثلًا في إحدى الشركات المتخصصة فقط في <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">الرؤية الحاسوبية Computer Vision</a>، ففي ذلك الحال من الضروري أن تبدأ رحلتك بالبحث عن الخوارزميات التي تعمل بصورة جيدة في ذلك التخصص فقط ثم دراسة كل خوارزمية نظريًا وتطبيقها العملي، وكذلك قد تعمل في إحدى الشركات المتخصصة في معالجة اللغات الطبيعية natural language processing اختصارًا NLP، ففي تلك الحالة أيضًا عليك اختيار الخوارزميات المهمة المعروف عنها العمل في هذا التخصص، ثم دراسة تلك الخوارزميات نظريًا وتطبيقيًا.
</p>

<p>
	وقد تكون على سبيل المثال مبرمجًا وتعمل على مشروع نظام مبيعات أو ما شابه، ففي ذلك الحال قد تريد إضافة بعض الميزات للنظام مثل توقع مبيعات الشهر القادم أو ما شابه، ففي ذلك المسار قد يهمك فقط فهم أساسيات تعلم الآلة وبعض أشهر الخوارزميات لحل مشكلات التوقع والتصنيف وما شابه، فحتى الجانب الرياضياتي في ذلك المسار لن يكون على قدر كبير من الأهمية.
</p>

<h2>
	كيفية تنفيذ مشاريع تعلم الآلة عمليًا
</h2>

<p>
	لأننا نهدف في هذه السلسلة <a href="https://academy.hsoub.com/tags/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9%20%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1%20%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">برمجة الذكاء الاصطناعي</a> إلى تعريفك بحقل تعلم الآلة من الناحية النظرية والناحية العملية والتطبيقية، فسنشرح في الفقرات الآتية الخطوات التطبيقية لعملية بناء نموذج تعلم آلة في أي مشروع من المشاريع بغض النظر عن التخصص أو الخوارزمية، وذلك لأن كثيرًا من طلبة هذا الحقل غالبًا يضيعون بين المعلومات النظرية والتطبيقية المتفرقة دون تكوين صورة عامة للخطوات التطبيقية.
</p>

<p>
	يمكن تقسيم خطوات مشاريع تعلم الآلة التطبيقية إلى خمس مراحل:
</p>

<ol>
	<li>
		تعريف المشكلة والمشروع
	</li>
	<li>
		تحضير وتهيئة البيانات
	</li>
	<li>
		فحص واختيار وضبط الخوارزميات
	</li>
	<li>
		تحسين النتائج
	</li>
	<li>
		تقديم النتائج
	</li>
</ol>

<p>
	تتسم تلك الخطوات بالمرونة، ومع ذلك فتلك الخطوات هي فقط الخطوط العريضة التي قد يندرج أسفل كل خطوة منها العديد من الخطوات الفرعية الأخرى التي قد يحتاج إليها في بعض المشاريع دونًا عن غيرها.
</p>

<p>
	واتسام تلك الخطوات بالمرونة يكمن في استطاعتنا الرجوع في أي خطوة من تلك الخطوات إلى الخطوة التي قبلها للقيام ببعض التعديلات والتغييرات، وذلك يتضح في الخطوة الرابعة خصيصًا والتي تهتم بتحسين نتائج النموذج، ولتحسين تلك النتائج سيتوجب الرجوع إلى الخطوة الثانية والثالثة، حيث أن تهيئة البيانات تلعب دورًا في تحسين نتائج النموذج، وكذلك الخوارزمية المختارة أيضًا.
</p>
<iframe allowfullscreen="" data-controller="core.front.core.autosizeiframe" data-embedauthorid="3889" data-embedcontent="" src="https://academy.hsoub.com/files/29-%D8%B9%D8%B4%D8%B1%D8%A9-%D9%85%D8%B4%D8%A7%D8%B1%D9%8A%D8%B9-%D8%B9%D9%85%D9%84%D9%8A%D8%A9-%D8%B9%D9%86-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/?do=embed" style="margin: auto;"></iframe>

<h3>
	1. تعريف المشكلة والمشروع
</h3>

<p>
	ذكرنا في بداية مقال <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D9%86%D8%B8%D8%B1%D8%A9-%D8%B3%D8%B1%D9%8A%D8%B9%D8%A9-%D8%B9%D9%84%D9%89-%D9%85%D8%AC%D8%A7%D9%84-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-r1933/" rel="">نظرة سريعة على مجال تعلم الآلة</a> تعريف عالم الحاسوب توم ميتشل Tom Mitchell لتعلم الآلة، وكان كما يلي:
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		عندما يتم أمر برنامج الحاسوب للتعلم من الخبرة E ليقدر على القيام بالمهمة T والذي يتم تُحسَب دقته عبر مقياس الدقة P، فإذا استطاع البرنامج القيام بالمهمة T على قدر الدقة المحدد من P عن طريق التعلم من الخبرة E، فإن ذلك هو تعلم الآلة.
	</p>
</blockquote>

<p>
	بناءً على ذلك يمكننا تحديد ما ترمز إليه تلك الرموز الموجودة في التعريف كما يلي:
</p>

<ul>
	<li>
		الرمز E: يرمز هنا إلى البيانات، إذ أننا نمثِّل كل الخبرات التي نلقمها للخوارزمية على صورة بيانات، وتلك البيانات كلها يتم تشكيلها على صورة مصفوفات ومتجهات رياضية كما وصفنا من قبل.
	</li>
	<li>
		الرمز T: وهي المهمة المراد إجراؤها، وقد سردنا بعضًا من تلك المهام من قبل مثل توقع سعر عقار ما أو تصنيف عملية تحويل أموال …إلخ.
	</li>
	<li>
		الرمز P: يرمز إلى المعيار الذي على أساسه نستطيع تحديد نجاح المشروع من عدمه مثل قولنا أنّ معيار نجاح المشروع هو توقع أسعار العقارات بصورة صحيحة في 90٪ من الحالات على الأقل.
	</li>
</ul>

<p>
	يجب تحديد معنى كل رمز من تلك الرموز في المشروع في هذه الخطوة، فيرمز الرمز E مثلًا كما بيّنا إلى الخبرة وهي البيانات في مشاريع تعلم الآلة، وتلك البيانات يجب أن تتوفر قبل البدء في المشروع، ويجب أن تكون كافية كميًا للمشروع، ثم يجب بعد ذلك تحديد النقاط الأولية التي تخدم المشروع وتحجم أهدافه، فعلى سبيل المثال عند العمل على مشروع لتوقع سعر العقارات في منطقة ما، قد تكون لدينا عدة نقاط أولية أولها أنّ حساب سعر المتر المربع هو المهم توقعه، وبالتالي بناءً على تلك النقطة فإننا سنحتاج ضرورةً إلى تلك المعلومة في عنصر الخبرة E أي البيانات، أي سنحتاج إلى بعد في البيانات يحتوي على سعر المتر المربع لكل عقار ليتم تدريب النموذج عليه.
</p>

<p>
	من النقاط الأخرى الممكن إضافتها في مثل هذا المشروع هو أنّ الأسعار الحديثة فقط هي التي تحمل الأهمية الكبرى في تدريب النموذج، أي أننا لا نريد تدريب النموذج على أسعار العقارات المسعرة منذ عشرين عامًا مثلًا، وإنما نريد تدريب النموذج على الأسعار الحديثة فقط، وبناءً على تلك النقطة فإننا سنحتاج ضرورةً إلى معرفة تاريخ التسعير في كل عينة من البيانات وتنقية مجموعة البيانات عبر حذف العينات ذات التاريخ القديم.
</p>

<p>
	وكذلك يمكن إضافة العديد من النقاط الأولية للمشروع والتي على أساسها تجري بعض التعديلات على عنصر الخبرة E وأيضًا العناصر الأخرى على الأرجح، لذلك من الضروري كتابة تلك النقاط على الورق لتشكِّل نقطة انطلاق وخريطة طريق مبدئية للمشروع، وفي تلك المرحلة، من الضروري التفكير بعمق في عنصر الخبرة، فربما يكون ذلك العنصر مفقودًا أو غير متاح بالنسبة إليك، وبالتالي فإنه لمن المفيد بدايةً وقبل كل أمر التفكير في آلية تجميع البيانات المراد العمل بها في ذلك المشروع.
</p>

<p>
	ولذلك، فإن من أهم التخصصات التي تخدم تخصص <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-%D8%A7%D9%84%D8%AA%D8%AD%D8%AF%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%B1%D8%A6%D9%8A%D8%B3%D9%8A%D8%A9-%D9%88%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D9%88%D8%B3%D8%B9-%D9%81%D9%8A-%D8%A7%D9%84%D9%85%D8%AC%D8%A7%D9%84-r1010/" rel="">برمجة نماذج تعلم الآلة</a> هو تخصص استخراج البيانات من الإنترنت web scraping، وذلك لأنّ تلك المهارة تعنى بكتابة برامج تعمل على تجميع البيانات تلقائيًا من مواقع الإنترنت، فمن المهم التفكير في عنصر البيانات جيدًا قبل البدء في باقي الخطوات التطبيقية.
</p>

<p>
	يمكن كذلك في تلك المرحلة التفكير في الصورة النهائية للمنتج، إذ أنه من المفيد صناعة نموذج مبدئي prototype لترى المنتج النهائي المراد تحقيقه في نهاية المطاف عمومًا.
</p>

<h3>
	2. تحضير وتهيئة البيانات
</h3>

<p>
	عند توفر البيانات المناسبة للمشروع نبدأ أولًا بمعالجة تلك البيانات، إذ يلزم إجراء بعض العمليات على البيانات على الأغلب في المشاريع الحقيقية بناءً على الرؤية العامة للمشروع؛ لتُمرَّر تلك البيانات بعد تحضيرها إلى النموذج.
</p>

<p>
	تنقسم هذه الخطوة باختصار إلى ثلاث خطوات فرعية وهي اختيار البيانات ومعالجة البيانات وتحويل البيانات، وكلها خطوات اختيارية، أي تختلف تلك المراحل تبعًا للمشروع وتبعًا لجاهزية البيانات لتمرر للنموذج.
</p>

<h4>
	اختيار البيانات
</h4>

<p>
	في ذلك الطور تُختار بعض الأبعاد وتُحذَف بعضها بناءً على الرؤية العامة للمشروع وعن الجودة المراد تحقيقها، إذ أن قاعدة الأكثر أفضل ليست صحيحةً في كل الحالات، فحذف بعض الأبعاد -أي الأعمدة- من بعض مجموعات البيانات يوفِّر جودةً أفضل في بعض النماذج، وأيضًا قد يكون من الأفضل حذف بعض العينات من البيانات لأنها عينات شاذة تؤثِّر سلبًا على جودة النموذج.
</p>

<h4>
	معالجة البيانات
</h4>

<p>
	في الطور السابق وبعد حذف بعض الأبعاد المؤثرة سلبًا والغير مهمة، تأتي مرحلة المعالجة والتي تُنقَّح فيها العينات أو تُنسَّق بعض البيانات الموجودة في العينات، وقد يتم في ذلك الطور تقسيم البيانات لأخذ عدد بسيط فقط من العينات في أول الأمر لاختبار النموذج المبدئي قبل تدريب نموذج تعلم الآلة على كل العينات، إذ يعني العدد الأكبر من العينات وقتًا أطول في تدريب النموذج واستهلاك لموارد الحاسوب بصورة أكبر، …إلخ.
</p>

<h4>
	تحويل البيانات
</h4>

<p>
	في ذلك الطور تُجهَّز البيانات بصورة نهائية لتمريرها إلى النموذج، وقد تعود إلى تلك النقطة عدة مرات بناءً على نتائج النموذج المبدئي، إذ قد تحتاج إلى إعادة تحجيم بعض الأبعاد scaling أو تجميع بعضها aggregation أو تجزيء بعضها decomposition …إلخ، وذلك عبر هندسة الميزات feature engineering والتي تعني تحويل البيانات إلى الصورة الأمثل للنموذج للحصول على أعلى دقة في نهاية المطاف.
</p>

<h3>
	3. فحص واختيار وضبط الخوارزميات
</h3>

<p>
	تتماشى هذه المرحلة مع ما قبلها وما بعدها على أغلب الأحوال، فهي تعنى باختيار وضبط الخوارزميات، فكما أوردنا أنّ خوارزميات تعلم الآلة والتعلم العميق كثيرة للغاية، ويعمل الباحثون في أكبر شركات وجامعات العالم على تطوير تلك الخوارزميات يومًا بعد يوم، لذلك تتزايد الخيارات تزايدًا ملحوظًا كل عام.
</p>

<p>
	في هذه المرحلة من الضروري تحديد الخوارزميات المنوط بها حل المشكلة المعرفة من قبلك في أولى الخطوات المذكورة، ففي حال برمجة نموذج يسعى مثلًا إلى توقع قيمة مستمرة continuous value مثل توقع قيمة عقار في إحدى المناطق السكنية، فسيقع حل تلك المشكلة تحت خوارزميات الانحدار مثل انحدار ريدج ridge regression وانحدار المربعات الصغرى الاعتيادية ordinary least squares regression، وبالتالي نستطيع في تلك المرحلة ولتلك المشكلة بالتحديد اختيار هاتين الخوارزميتين لتجربتهما، ثم ليقع اختيارنا على إحداهما في نهاية المطاف بناءً على معدل الدقة لكل منهما.
</p>

<p>
	يؤثر اختيار أكبر عدد ممكن من الخوارزميات المتاحة لحل المشكلة المحددة مسبقًا في كثير من الأحيان، ولا يضرنا اختبار عدد كبير من الخوارزميات إذا كانت كلها في نهاية المطاف تخدم الهدف المرجو، فقد تجد خوارزميةً أفضل من الأخرى تبعًا لكل حالة؛ ولإجراء ذلك رجحنا كما في الخطوة السابقة اقتطاع جزء من البيانات بعد تهيئتها لتشكيل عدد بسيط من العينات المعدة للتمرير إلى الخوارزميات لتجربة النموذج المبدئي، فتستطيع تجربة أكبر عدد من الخوارزميات في أقل فترة ممكنة عبر ذلك الاقتطاع، لأن كثرة العينات تزيد بصورة كبيرة مرحلة تدريب الخوارزمية على البيانات؛ ولذلك فإنه في تلك المرحلة من الضروري ألا تحتوي البيانات على عدد كبير من العينات لتجربة أكبر عدد ممكن من الخوارزميات.
</p>

<p>
	لتحديد أفضل خوارزمية من تلك الخوارزميات التي وقع اختيارك عليها يلزم اختيار تقنية من تقنيات قياس معدل الدقة، ولا يعوزنا القيام بذلك بأنفسنا، لوجود عدد كبير من تلك التقنيات والطرق بالفعل لقياس معدل الدقة لكل خوارزمية من <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D9%85%D9%81%D8%A7%D9%87%D9%8A%D9%85-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-r1009/" rel="">خوارزميات تعلم الآلة</a> والتي على أساسها يمكن اختيار الخوارزمية المثلى للمشروع.
</p>

<p>
	يوجد عدد من التقنيات والطرق المعنية بقياس معدل دقة الخوارزميات وأبسطها على الإطلاق تقسيم مجموعة البيانات الممررة إلى الخوارزمية إلى قسمين، إذ يمثل القسم الأول 80% من البيانات غالبًا ويمثل القسم الثاني 20%، بحيث يُستخدَم القسم الأول في تدريب الخوارزمية والقسم الثاني في اختبار النموذج بعد التدريب لمعرفة معدل الدقة، فقد نمرر مثلًا معظم العينات لتدريب الخوارزمية في مشروع توقع أسعار العقارات في إحدى المناطق، بحيث تحتوي تلك العينات على كل الأبعاد والتي من ضمنها المخرج المراد توقعه وهو السعر، ثم لاختبار النموذج تُمرَّر العينات المتبقية -أي عدد 20% من العينات- إلى وسيلة قياس معدل الدقة دون بعد المخرج -أي دون سعر كل عينة- لتتوقع الخوارزمية ذلك المخرج ثم مقارنة مخرج الخوارزمية مع المخرج الحقيقي في كل عينة.
</p>

<p>
	من التقنيات المشابهة لقياس أداء الخوارزميات هي تقنية التقييم المتقاطع cross validation والتي تعتمد على فكرة تقسيم العينات إلى مجموعات متساوية في العدد بحيث تدعى كل مجموعة طية fold، إذ تدرب الخوارزمية على كافة الطيات ما عدا طية واحدة تترَك للنهاية لقياس معدل الدقة بالوسيلة ذاتها في الطريقة السابقة، بحيث تعامل الطية الأخيرة معاملة عينات الاختبار في الطريقة البسيطة أعلاه، أي طريقة 80% للتدريب و 20% للاختبار.
</p>

<p>
	تُكرَّر العملية أعلاه مع تغيير الطيات في كل مرة، إذ تُدرَّب وتختبر الخوارزمية عدد الطيات، فإذا قُسِّمت مجموعة البيانات مثلًا إلى ثلاث طيات، فسيُدرَّب ويختبر النموذج ثلاث مرات كما يلي:
</p>

<ul>
	<li>
		طية 1 و 2 للتدريب، والطية 3 للاختبار.
	</li>
	<li>
		طية 1 و 3 للتدريب، والطية 2 للاختبار.
	</li>
	<li>
		طية 2 و 3 للتدريب، والطية 1 للاختبار.
	</li>
</ul>

<p>
	يُحسَب متوسط معدل الدقة في كل عملية اختبار في نهاية هذه العملية لينتج معدل الدقة العام للنموذج، والذي بناءً عليه تُعرَف دقة أداء الخوارزمية على بيانات المشروع وعلى المشكلة المعرَّفة والمراد حلها في المشروع.
</p>

<h3>
	4. تحسين النتائج
</h3>

<p>
	نعود في هذه المرحلة مرارًا إلى المرحلة الثانية والثالثة لمحاولة استخلاص أفضل دقة ممكنة، فنعود مرارًا إلى هندسة الميزات حيث قد نحتاج إلى بضع تعديلات هنا وهناك لتحسين معدل الدقة، وكذلك قد نحتاج إلى ضبط إعدادات الخوارزمية المختارة لتحسين معدل الدقة، إذ تتضمن الكثير من الخوارزميات عددًا من المعاملات الأولية التي تتحكم بقدر ما في آلية عملها وبالتالي في معدل دقة نتائجها.
</p>

<p>
	يمكن التفكير في معاملات الخوارزميات على أساس أبعاد على صورة رسم بياني، إذ يمثِّل كل بعد محورًا في الرسم، وقيمة كل بعد ما هي إلا نقطة في الرسم، والهدف من ذلك هو إيجاد أفضل النقاط لكل بعد على الرسم بحيث ينتج أعلى معدل دقة من القيم المثلى لكل بعد في ذلك الرسم عند التلاقي، ويمكن إضافة بُعد معدل الدقة إلى تلك الأبعاد بأن نحاول زعزعة وتحريك نقاط كل بعد من الأبعاد غير بعد معدل الدقة لنرى تأثير تلك التغيرات على معدل الدقة؛ وبذلك نحاول الوصول إلى القيم المثلى.
</p>

<p>
	قد نستخدِم في بعض الحالات في هذه المرحلة مجموعة خوارزميات <a href="https://en.wikipedia.org/wiki/Ensemble_learning" rel="external nofollow">ensemble methods</a> للجمع بين نتائج خوارزميتين أو أكثر، إذ تتدرب كل خوارزمية على حدة وتُختبَر كل واحدة اختبارًا منفصلًا، ثم يُجمَع بين توقعات الخوارزميات في مخرج واحد عبر إحدى خوارزميات التجميع، ونزعم أنّ ذلك قد يفضي إلى معدل دقة أعلى من استخدام خوارزمية واحدة فقط في بعض الأحيان.
</p>

<h3>
	5. نشر النتائج
</h3>

<p>
	تبدأ المرحلة الأخيرة في المشروع وهي نشر النتائج deployment وتختلف تبعًا لنوع المشروع بعد الوصول إلى القيم المثلى في ضبط الخوارزمية المختارة، وبعد تدريب النموذج والوصول إلى أفضل معدل دقة ممكن.
</p>

<p>
	قد يُنشر أحيانًا عبر الإنترنت على موقع خاص أو على هيئة تطبيق للهواتف أو على هيئة تطبيق سطح مكتب أو قد تنشَر الشيفرة فقط لأهداف تعليمية أو أكاديمية أو تباع لأهداف تجارية، والخلاصة يتحدد الشكل النهائي للبرنامج عبر الخطوة الأولى من الخطوات التي أشرنا إليها أي يُنشَر المشروع وفقًا للهدف الذي انطلق منه.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A3%D8%AF%D9%88%D8%A7%D8%AA-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D9%86%D9%85%D8%A7%D8%B0%D8%AC-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-r1938/" rel="">أدوات برمجة نماذج تعلم الآلة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AE%D8%B7%D9%88%D8%A7%D8%AA-%D8%AA%D9%86%D9%81%D9%8A%D8%B0-%D9%85%D8%B4%D8%B1%D9%88%D8%B9-%D8%B9%D9%86-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-%D8%A7%D9%84%D8%AC%D8%B2%D8%A1-%D8%A7%D9%84%D8%A3%D9%88%D9%84-r1357/" rel="">خطوات تنفيذ مشروع عن تعلم الآلة في بايثون</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AA%D9%82%D9%8A%D9%8A%D9%85-%D9%88%D8%A7%D8%AE%D8%AA%D9%8A%D8%A7%D8%B1-%D9%86%D9%85%D8%A7%D8%B0%D8%AC-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-r1635/" rel="">تقييم واختيار نماذج تعلم الآلة</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2004</guid><pubDate>Thu, 08 Jun 2023 13:00:00 +0000</pubDate></item><item><title>&#x62A;&#x639;&#x644;&#x645; &#x627;&#x644;&#x622;&#x644;&#x629; Machine Learning</title><link>https://academy.hsoub.com/programming/artificial-intelligence/%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_05/-.png.bd5e830bf20eb7d3cd592893202437a5.png" /></p>
<p>
	تعلم الآلة machine learning هو أحد الدعائم الأساسية لتكنولوجيا المعلومات على مدار العقدين الماضيين، وبات اليوم جزءًا أساسيًا من حياتنا اليومية. فمع توفر كميات متزايدة من البيانات أصبح هناك سببٌ وجيهٌ للاعتقاد بأن التحليل الذكي للبيانات سيكون أكثر انتشارًا وأهميةً كمكون أساسي للتقدم التكنولوجي.
</p>

<p>
	في المقالة السابقة قدمنا دليلًا شاملًا لبدء <a href="https://academy.hsoub.com/programming/artificial-intelligence/%d8%aa%d8%b9%d9%84%d9%85-%d8%a7%d9%84%d8%b0%d9%83%d8%a7%d8%a1-%d8%a7%d9%84%d8%a7%d8%b5%d8%b7%d9%86%d8%a7%d8%b9%d9%8a/" rel="">تعلم الذكاء الاصطناعي</a> وفي هذه المقالة والتي تعتبر جزءًا من سلسلة مقالات عن الذكاء الصناعي بدأناها مع مقال <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">مقدمة شاملة عن الذكاء الاصطناعي</a> نُضيء لك الطريق ونقدم لك دليلًا شاملًا للبدء بتعلم وفهم تعلم الآلة والتعرف على أهم المصطلحات المرتبطة بهذا التخصص.
</p>

<p>
	<strong>ملاحظة:</strong> إن لم يكن لديك معرفة مسبقة بمجال الذكاء الصناعي وفروعه وأساسياته، سيكون من الأفضل أن تقرأ مقال "مقدمة شاملة عن الذكاء" من هذه السلسلة على الأقل التي أشرت إليها للتو.
</p>

<h2>
	ما المقصود بتعلم الآلة؟
</h2>

<p>
	تعلم الآلة Machine learning أو ما يعرف اختصارًا ML هو مصطلح تقني يعني استخدام مجموعة من التقنيات والأدوات التي تساعد أجهزة الحاسوب والآلات الذكية عمومًا على التعلم والتكيف من تلقاء نفسها.
</p>

<p>
	لقد نشأ علم التعلم الآلي عندما بدأ علماء الحاسوب بطرح الأسئلة التالية:
</p>

<ul>
	<li>
		نحن البشر نتعلم من التجارب السابقة أما الآلات فهي تفعل ما نمليه عليها فقط فهل يمكن أن نتمكن من تدريب هذه الآلات كي تتعلم من البيانات والخبرات السابقة وتحاكي طريقة تفكيرنا وتتمكن من التعلم والفهم والاستنتاج دون تدخلنا؟
	</li>
	<li>
		هل يمكن للحواسيب أن تفعل ما نفعله وبالطريقة التي نريدها، وأن تتعلم من تلقاء نفسه كيفية أداء مهمة محددة؟
	</li>
	<li>
		هل يمكن للحواسيب والآلات أن تفاجئنا وتتعلم من خلال البيانات من تلقاء نفسه بدلًا من قيام المبرمجين بصياغة قواعد معالجة البيانات لها بشكل يدوي؟
	</li>
</ul>

<p>
	كل هذه التساؤلات فتحت الباب أمام نموذج برمجة بديل عن أسلوب البرمجة الكلاسيكية التي يُدخل فيها البشر القواعد ضمن برامج حاسوبية ويحددون بدقة البيانات التي يجب معالجتها وفقًا لهذه القواعد ويكون الخرج إجابات محددة ناتجة عن عمليات المعالجة.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="126053" href="https://academy.hsoub.com/uploads/monthly_2023_05/1286214527_.png.44f75d5f0bb547cc49cf8585a8479690.png" rel=""><img alt="البرمجة التقليدية" class="ipsImage ipsImage_thumbnailed" data-fileid="126053" data-ratio="16.67" data-unique="5uwuu99w2" style="width: 600px; height: auto;" width="600" src="https://academy.hsoub.com/uploads/monthly_2023_05/.thumb.png.1cf2c9e25b0b084b3260c9c7833e52a5.png"> </a>
</p>

<p>
	في نموذج البرمجة الجديد هذا الذي سمي تعلم الآلة أصبح بمقدور البشر إدخال البيانات للحاسوب بالإضافة إلى الإجابات المتوقعة وفقًا للبيانات، ويكون الخرج هو القواعد التي تم استنتاجها بشكل برنامج أو ما يُسمى بالنموذج model ثم يمكن بعد ذلك تطبيق هذه القواعد على البيانات الجديدة لإنتاج الإجابات.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="126052" href="https://academy.hsoub.com/uploads/monthly_2023_05/1932090379_.png.d5d0c72478efc23702951377a82c32a7.png" rel=""><img alt="تعلم الآلة" class="ipsImage ipsImage_thumbnailed" data-fileid="126052" data-ratio="18.50" data-unique="xjei0u4xh" style="width: 600px; height: 111px;" width="600" src="https://academy.hsoub.com/uploads/monthly_2023_05/.thumb.png.4a2391e7f69a90f4a8486607fd27675b.png"> </a>
</p>

<p>
	بمعنى آخر نظام التعلم الآلي يُدرّب بدلًا من برمجته صراحةً، حيث تقدّم له العديد من عينات البيانات المتعلقة بالمهمة المطلوبة، ليكتشف بنية إحصائية في هذه العينات تربط المدخلات بالمخرجات (البيانات بالإجابات) وتسمح في النهاية للنظام بالوصول إلى قواعد لأتمتة المهمة.
</p>

<p>
	على سبيل المثال إذا عرضنا على الحاسوب مجموعات ثنائية من الأرقام كالتالي (2 , 4) و (3 , 6) و (4 , 9) ثم طلبنا منه بناء على هذه المعطيات أن يتنبأ بالرقم الذي يجب أن يأتي مع الرقم 5 فسوف يحتاج في بداية الأمر إلى إيجاد المنطق بين مجموعات البيانات التي مررناها له وتطبيق نفس المنطق للتنبؤ بالرقم الجديد، عملية العثور على هذا المنطق يسمى تعلم الآلة وبعد إيجاد هذا المنطق سنتمكن من تطبيقه للتنبؤ بكل رقم جديد.
</p>

<p>
	و إذا كنت ترغب بأتمتة عملية تخمين أسعار المنازل -يمكنك إعطاء نظام التعلم الآلي مجموعة من العينات التي تمثّل مواصفات المنازل (بيانات) مع أسعارها (إجابات)، وسيتعلم النظام القواعد الإحصائية اللازمة لربط المواصفات بالأسعار.
</p>

<p>
	على الرغم من أن التعلم الآلي بدأ في الازدهار بدءًا من التسعينيات، إلا أنه سرعان ما أصبح المجال الفرعي الأكثر شعبية والأكثر نجاحًا في الذكاء الصناعي.
</p>

<div class="banner-container ipsBox ipsPadding">
	<div class="inner-banner-container">
		<p class="banner-heading">
			هل ترغب في استخدام ذكاء الآلة في أعمالك؟
		</p>

		<p class="banner-subtitle">
			وظّف مهندس ذكاء اصطناعي خبير لتحقيق أهدافك عبر مستقل
		</p>

		<div>
			<a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://mostaql.com/freelancers/AI-engineers" rel="external">أضف مشروعك الآن</a>
		</div>
	</div>
</div>

<h2>
	تعريف تعلم الآلة؟
</h2>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="126050" href="https://academy.hsoub.com/uploads/monthly_2023_05/1895513561_.png.c9f0fd3ccfc7629dd4cd16c47aee5675.png" rel=""><img alt="تعريف تعلم الآلة" class="ipsImage ipsImage_thumbnailed" data-fileid="126050" data-ratio="62.63" data-unique="pxwc5m9t9" style="width: 600px; height: auto;" width="800" src="https://academy.hsoub.com/uploads/monthly_2023_05/.thumb.png.bc406e2272609331293174000df7d791.png"> </a>
</p>

<p>
	هناك العديد من التعاريف الخاصة بتعلم الآلة نذكر منها أهم تعريفين:
</p>

<ol>
	<li>
		<p>
			<strong><a href="https://en.wikipedia.org/wiki/Arthur_Samuel_(computer_scientist)" rel="external nofollow">تعريف آرثر صامويل 1959</a></strong>: "تعلم الآلة هو المجال الدراسي الذي يمنح أجهزة الحاسب القدرة على التعلم دون برمجتها صراحةً من قبل البشر"
		</p>
	</li>
	<li>
		<p>
			<strong><a href="http://www.cs.cmu.edu/~tom/mlbook.html" rel="external nofollow">تعريف توم ميتشل</a></strong>: "تعلم الآلة هو دراسة خوارزميات الحاسوب التي تحسن أدائها تلقائيًا من خلال التجربة ويقال أَنَّ برنامجا حاسوبيًا يتعلَّم من الخبرة E التي تخص بمجموعة من المهام T بالنسبة إِلى مقياس الأداء P إذا تحسن أداءه على إنجاز المهام T بعد اكتساب الخبرة E بالمقدار P"
		</p>
	</li>
</ol>

<p>
	على سبيل المثال في مجال لعب الشطرنج تكون الخبرة E هي عدد مرات اللعب ضد الحاسب و T هي مهمة لعب الشطرنج ضد الحاسب والمعيار P هو فوز/خسارة الحاسب.
</p>

<p>
	ويمكننا القول بتعريف بسيط أن تعلم الآلة مجال من <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D9%85%D8%AC%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">مجالات الذكاء الصناعي</a> يحاول بناء آلات قادرة على التعلّم من تلقاء نفسها.
</p>

<h2>
	الفرق بين الذكاء الاصطناعي وتعلم الآلة
</h2>

<p>
	يميل معظم الناس إلى استخدام مصطلحي الذكاء الاصطناعي وتعلم الآلة كمرادفين ولا يعرفون الفرق، إلا أن هذين المصطلحين هما في الواقع مفهومان مختلفان، فتعلم الآلة هو في الواقع جزء من الذكاء الاصطناعي أو أحد أنواع الذكاء الاصطناعي ويمكن القول أن الذكاء الاصطناعي هو مجال واسع من الموضوعات، ويشكل تعلم الآلة جزء صغير من هذه الموضوعات.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="126051" href="https://academy.hsoub.com/uploads/monthly_2023_05/-----.png.6affa5355b8bbdcdf7c0ad62434e0e32.png" rel=""><img alt="الفرق بين الذكاء الاصطناعي وتعلم الآلة" class="ipsImage ipsImage_thumbnailed" data-fileid="126051" data-ratio="78.32" data-unique="vzl9hj4ze" style="width: 558px; height: auto;" width="558" src="https://academy.hsoub.com/uploads/monthly_2023_05/-----.png.6affa5355b8bbdcdf7c0ad62434e0e32.png"> </a>
</p>

<p>
	يشير الذكاء الاصطناعي إلى القدرة العامة لأجهزة الحاسب على محاكاة الفكر البشري وأداء المهام في بيئات العالم الحقيقي، بينما يشير التعلم الآلي إلى التقنيات والخوارزميات التي تمكّن الأنظمة من تحديد طريقة لتعلّم الأنماط المخفيّة في البيانات واتخاذ القرارات وتحسين نفسها من خلال التجربة والبيانات.
</p>

<h2>
	أهمية تعلم الآلة
</h2>

<p>
	قد تتساءل عن أهمية مجال تعلم الآلة في عصرنا الحالي وللإجابة على هذا السؤال يمكننا تقسيم الإجابة إلى شقين الأول أهمية تعلم الآلة بالنسبة للمؤسسات وتطور الحياة عمومًا، والثاني أهميته بالنسبة لبقية فروع الذكاء الصناعي و الفروع ذات الصلة.
</p>

<p>
	<strong>بالنسبة للشق الأول</strong>، فالبيانات هي شريان الحياة لجميع قطاعات الأعمال وقد باتت القرارات التي تعتمد على البيانات تصنع الفارق وتشكل الفصل بين مواكبة المنافسة أو التخلف عن الركب. التعلم الآلي هو مفتاح إطلاق العنان لقيمة بيانات الشركات والعملاء واتخاذ القرارات التي تجعل الشركة في صدارة المنافسة.
</p>

<p>
	إذًا يعتبر التعلم الآلي مهمًا لأنه يمنح المؤسسات بمختلف أنواعها وجهة نظر حول اتجاهات وسلوك العملاء وأنماط تشغيل الأعمال فضلًا عن دعم عملية تطوير منتجات جديدة كما أنها تساعد في أمور أخرى مثل اكتشاف الأمراض وتوقعات الطقس …إلخ. وتستخدم العديد من الشركات الرائدة اليوم مثل فيسبوك Facebook وجوجل Google وأوبر Uber التعلم الآلي كجزء أساسي من عملياتها.
</p>

<p>
	<strong>بالنسبة للشق الثاني</strong>، ففروع الذكاء الصناعي الأخرى مثل معالجة اللغات الطبيعية أو الفروع ذات الصلة كالرؤية الحاسوبية لم تبصر النور إلا بعد التطورات الأخيرة التي شهدها تعلم الآلة الذي شكَّل ركيزة أساسية في تطور معظم فروع الذكاء الصناعي.
</p>

<p>
	على سبيل المثال تعد تطبيقات التعرف على الكائنات أو تتبعها أو تصنيف الأشياء قضايا شائعة في الرؤية الحاسوبية، وهي تعتمد بشكل شبه مطلق على خوارزميات التعلم العميق والأمر ذاته ينطبق على معالجة اللغات الطبيعية.
</p>

<h2>
	البيانات وتعلم الآلة
</h2>

<p>
	البيانات هي وقود التعلم الآلي، فبدون البيانات ستكون خوارزميات التعلم الآلي جائعة وضعيفة الأداء وستفشل في حل أي مشكلة بشكل صحيح. وبعض خوارزميات التعلم الآلي مثل خوارزميات التعلم العميق لا تشبع، وكلما زودتها بالبيانات ونوّعتها لها كلما ازدادت قوتها وقدراتها وتحسن أداؤها.
</p>

<p>
	وتجدر الإشارة هنا لأن الأمر لا يتعلق بزيادة حجم البيانات وكميتها فقط بل يتعلق كذلك بدقة البيانات وجودتها وتنوع حالات استخدامها للحصول على نتائج صحيحة ودقيقة.
</p>

<p>
	وفيما يلي نوضح أهم النقاط الأساسية المتعلقة بالبيانات والمرتبطة بالتعلم الآلي:
</p>

<ul>
	<li>
		هناك نوعان أساسيان للبيانات المستخدمة في التعلم الآلي: بيانات مُسماة labeled وغير مسماة unlabeled على سبيل المثال إذا كان المطلوب هو التنبؤ بعمر شخص ما فإن العمر هنا يعد من البيانات المسماة في حين أن البيانات غير المسماة لا تحتوي على أي سمة مميزة.
	</li>
	<li>
		تسمى خوارزميات تعلم الآلة التي تتعامل مع مجموعة بيانات مسماة خوارزميات التعلم الخاضع للإشراف في حين تسمى خوارزميات تعلم الآلة التي تستخدم مجموعة بيانات غير مسماة خوارزميات التعلم غير الخاضع للإشراف وسنشرح المزيد عن هذه الأنواع من التعلم الآلي في فقرة لاحقة.
	</li>
	<li>
		عادةً ما تكون البيانات المستخدمة في التعلم الآلي عددية Numerical أو فئوية Categorical. تتضمن البيانات العددية القيم التي يمكن ترتيبها وقياسها مثل العمر أو الدخل، وتتضمن البيانات الفئوية القيم التي تمثل الفئات، مثل الجنس أو نوع الفاكهة.
	</li>
	<li>
		يمكن تقسيم البيانات إلى مجموعات تدريب Training ومجموعات مراقبة أو تحقق Validation ومجموعات اختبار Testing حيث تُستخدم مجموعة بيانات التدريب لتدريب النموذج، وتُستخدم مجموعة المراقبة لمراقبة سير عملية التدريب وتعلّم النموذج وأخيرًا تُستخدم مجموعة الاختبار للتقييم النهائي لأداء النموذج.
	</li>
	<li>
		تعد المعالجة المسبقة للبيانات خطوة مهمة في تعلم الآلة حيث يتم من خلالها تنظيف البيانات ومعالجة القيم المفقودة والشاذة وهندسة الميزات.
	</li>
	<li>
		هناك فرق بين البيانات والمعلومات والمعرفة، فالبيانات يمكن أن تكون أي حقيقة أو قيمة أو نص أو صوت أو صورة غير معالجة لم تُفسّر أو تحلل أما المعلومات فهي البيانات بعد تفسيرها ومعالجتها. أي أنها شكل متطور للبيانات ذو فائدة ومعنى أكبر والمعرفة هي المرحلة الأكثر تطورًا والمتمثلة بالوعي والفهم والإدراك للمعلومات.
	</li>
</ul>

<h2>
	تطبيقات تعلم الآلة
</h2>

<p>
	للتعلم الآلي تطبيقات في جميع أنواع الصناعات وفي حياتنا اليومية عمومًا، يتضمن ذلك التصنيع والتجارة بالتجزئة والرعاية الصحية وعلوم الحياة والسفر والضيافة والخدمات المالية والطاقة والمواد الأولية والمرافق. بما أن تعلم الآلة يندرج تحت مظلة الذكاء الاصطناعي، فإن تطبيقات تعلم الآلة تدخل ضمن أي تطبيق ذكاء اصطناعي وقد تحدثنا عن تطبيقات الذكاء الاصطناعي في مقال <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">تطبيقات الذكاء الاصطناعي</a> لذا يمكنك الرجوع إليه.
</p>

<p>
	تشمل بعض حالات الاستخدام لمجال تعلم الآلة:
</p>

<ul>
	<li>
		التعرّف على الصور
	</li>
	<li>
		التعرف على الكلام
	</li>
	<li>
		التصنيف والتنبؤ
	</li>
	<li>
		الآلات والروبوتات الذكية -السيارات ذاتية القيادة
	</li>
	<li>
		التجارة الإلكترونية
	</li>
	<li>
		الأمان واكتشاف التزوير أو الاحتيال -الترجمة الآلية والخدمات المالية …إلخ.
	</li>
</ul>

<p>
	يُستخدم التعلم الآلي في العديد من المجالات الأخرى والتي قد لا يسعنا ذكر جميعها هنا. كما أن معظم تطبيقات الذكاء الصناعي اليوم تعتمد بشكل كامل على خوارزميات تعلم الآلة.
</p>

<div class="banner-container ipsBox ipsPadding">
	<div class="inner-banner-container">
		<p class="banner-heading">
			طور أعمالك مع حلول الذكاء الاصطناعي المبتكرة
		</p>

		<p class="banner-subtitle">
			اسبق منافسيك نحو المستقبل وحقق أهدافك بالاستعانة بقوة الذكاء الاصطناعي
		</p>

		<div>
			<a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://khamsat.com/ai-services" rel="external">اطلب خدمات الذكاء الاصطناعي الآن</a>
		</div>
	</div>
</div>

<p>
	في الفيديو التالي ستتعرف على المزيد من المعلومات حول معنى تعلم الآلة وأهدافها والمكونات الرئيسية لأي نظام معتمد على تعلم الآلة وأمثلة منوعة على التطبيقات المستخدمة في هذا المجال.
</p>

<p style="text-align: center;">
	<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" frameborder="0" height="450" id="ips_uid_3556_6" src="https://academy.hsoub.com/applications/core/interface/index.html" title="YouTube video player" width="800" data-embed-src="https://www.youtube.com/embed/7up0GP1Y8aM"></iframe>
</p>

<h2>
	أنواع تعلم الآلة
</h2>

<p>
	ينقسم تعلم الآلة إلى أربعة أنواع أساسية أو مجالات أساسية بناءً على نوع البيانات المستخدمة وأسلوب التعلم المتبع وهذه الأنواع هي:
</p>

<ol>
	<li>
		التعلم الخاضع للإشراف Supervised learning
	</li>
	<li>
		التعلم غير الخاضع للإشراف UnSupervised learning
	</li>
	<li>
		التعلم شبه الخاضع للإشراف Semi-Supervised Learning
	</li>
	<li>
		التعلم المُعزز Reinforcement Learning
	</li>
</ol>

<p>
	يحاكي كل نوع من هذه الأنواع الطرق والأساليب المختلفة التي تتخذ بها نحن البشر قرارتنا وإليك شرحًا مفصلًا لكل نوع من بين هذه الأنواع.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="126055" href="https://academy.hsoub.com/uploads/monthly_2023_05/664317820_.png.ef4bb0194cb6068da7c08d199ae78202.png" rel=""><img alt="أنواع تعلم الآلة" class="ipsImage ipsImage_thumbnailed" data-fileid="126055" data-ratio="113.21" data-unique="maq4vb31k" style="width: 498px; height: auto;" width="530" src="https://academy.hsoub.com/uploads/monthly_2023_05/.thumb.png.0e7137d8505c80f9550bf60d2a7bac88.png"> </a>
</p>

<h3>
	1. التعلم الخاضع للإشراف Supervised learning
</h3>

<p>
	هو أحد أكثر أنواع التعلم الآلي شيوعًا ونجاحًا. في هذا النوع تُعطى الخوارزمية مجموعةً من البيانات بالإضافة إلى الخرج الصحيح لها. أي أن الخوارزمية تُدرّب على مجموعةً بيانات مُسماة.
</p>

<p>
	مبدأ عمل الخوارزميات التي تنتهج هذا النهج هو: الحصول على مجموعة بيانات مُسماة، ثم تدريب النموذج على إيجاد علاقة أو دالة function تربط بين المدخلات والمخرجات. إذًا يمكننا القول أن هذا النهج يُستخدم عندما نريد بناء نموذج يتنبأ (كلمة يتنبأ هنا تشمل التصنيف أيضًا) بنتيجة معينة في ضوء مدخلات معينة ويتطلب تعلم الآلة الخاضع للإشراف جهدًا بشريًا لبناء مجموعة التدريب المناسبة.
</p>

<p>
	هناك نوعان رئيسيان من مشكلات التعلم الآلي الخاضعة للإشراف هما <strong>التصنيف Classification</strong> و<strong>التوقع Regression</strong>. يكون الهدف في حالة التصنيف هو التنبؤ بتسمية فئة من قائمة محددة مسبقًا من الفئات. المثال الذي ورد في الفقرة السابقة هو خير مثال على ذلك، حيث نُدرّب الخوارزمية على التمييز بين فئتين أو نوعين من الفاكهة هما البرتقال والتفاح.
</p>

<p>
	التصنيف بدوره يُقسم إلى نوعين أساسيين هما: <strong>التصنيف الثنائي Binary Classification</strong> و<strong>التصنيف المتعدد Multiclass-Classification</strong>. يحدث التصنيف الثنائي عندما يكون لدينا فئتين من البيانات كما في مثال البرتقال والتفاح، مثال آخر هو تصنيف رسائل البريد الإلكتروني على أنها بريد عشوائي أو بريد حقيقي أما التصنيف المتعدد فهو يحدث عندما يكون لدينا أكثر من فئتين (مثلًا لو كان المطلوب جعل النموذج سالف الذكر يميز بين 3 أنواع من الفاكهة هي البرتقال والتفاح والموز.
</p>

<p>
	بالنسبة لمهام التوقع، فإن الهدف يكون توقع قيمة من مجال غير محدد وخير مثال على ذلك هو توقع أسعار المنازل أو توقع الدخل السنوي للفرد بناءًا على مستواه التعليمي وعمره ومكان إقامته فسعر المنازل أو الدخل السنوي يمكن أن تكون أي قيمة ضمن مجال ما.
</p>

<h3>
	2. التعلم غير الخاضع للإشراف UnSupervised learning
</h3>

<p>
	في هذا النوع من أنواع تعلم الآلة تُعطى الخوارزمية مجموعةً من البيانات بدون الخرج الصحيح لها، أي أن الخوارزمية تُدرّب على مجموعةً بيانات غير مُسماة.
</p>

<p>
	مبدأ عمل الخوارزميات التي تنتهج هذا النهج هو: الحصول على مجموعة بيانات غير مُسماة، ثم تدريب النموذج على إيجاد علاقات مخفيّة بين هذه المُدخلات.
</p>

<p>
	هناك نوعان أساسيين من الخوارزميات التي تنتهج هذا النهج هما <strong>خوارزميات التحويل Transformation</strong> و<strong>خوارزميات العنقدة أو التجميع Clustering</strong>.
</p>

<p>
	تُنشئ خوارزميات التحويل تمثيلًا جديدًا للبيانات قد يكون من الأسهل على البشر أو خوارزميات التعلم الآلي الأخرى فهمه مقارنةً بالتمثيل الأصلي للبيانات.
</p>

<p>
	بالنسبة للنوع الآخر المتمثل بخوارزميات العنقدة، فهي تعتمد على تقسيم البيانات إلى مجموعات مميزة من العناصر المتشابهة. خذ مثلًا عملية تحميل الصور على أحد مواقع التواصل الاجتماعي كمثال، هنا قد يرغب الموقع في تجميع الصور التي تُظهر الشخص نفسه مع بعضها بغية تنظيم صورك إلا أن الموقع لا يعرف من يظهر في الصور ولا يعرف عدد الأشخاص المختلفين الذين يظهرون في مجموعة الصور خاصتك.
</p>

<p>
	تتمثل الطريقة المنطقية لحل المشكلة في استخراج كل الوجوه وتقسيمها إلى مجموعات من الوجوه المتشابهة، وبعدها يتم وضع كل صورة جديدة تحملها في المجموعة الأكثر شبهًا لها ومن أشهر خوارزميات العنقدة نذكر خوارزمية <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AE%D9%88%D8%A7%D8%B1%D8%B2%D9%85%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%B9%D9%86%D9%82%D8%AF%D8%A9-%D9%84%D8%AA%D8%AC%D8%B2%D8%A6%D8%A9-%D8%B9%D9%85%D9%84%D8%A7%D8%A1-%D9%85%D8%AA%D8%AC%D8%B1-%D8%A5%D9%84%D9%83%D8%AA%D8%B1%D9%88%D9%86%D9%8A-r1477/" rel="">K-means</a>.
</p>

<h3>
	التعلم شبه الخاضع للإشراف Semi-Supervised Learning
</h3>

<p>
	تحدثنا سابقًا عن أهمية البيانات، وأنّه كلما زاد حجم البيانات التي نُدرّب النموذج عليها تزداد قوته، ولاسيما بالنسبة خوارزميات التعلم العميق التي تنتهج النهج الخاضع للإشراف والتي تعتمد على البيانات المُسماة.
</p>

<p>
	نشأ التعلم شبه الخاضع للإشراف من السؤال التالي: ماذا لو لم يكن لدينا ما يكفي من البيانات المُسماة لخوارزميتنا التي تنتهج المنهج الخاضع للإشراف؟
</p>

<p>
	قد يخطر ببالك في هذه الحالة محاولة تسمية البيانات يدويًا لكن هذا ليس مضيعة للوقت فقط لكنه أيضًا عرضة للعديد من أنواع الأخطاء البشرية الحل البديل الجديد هو استخدام التعلّم شبه الخاضع للإشراف وهو مزيج من التعلم الخاضع للإشراف والتعلم غير الخاضع للإشراف فهو يستخدم البيانات غير المسماة (والتي تكون كثيرة) والبيانات المسماة (والتي تكون قليلة) معًا، لإنشاء تقنيات تعلم أفضل من تلك التي تُنشأ باستخدام البيانات غير المسماة فقط أو المسماة فقط.
</p>

<h3>
	التعلم المعزز Reinforcement Learning
</h3>

<p>
	في هذا النوع من تعلم الآلة ابتكر المطورون طريقة لمكافأة السلوكيات المرغوبة ومعاقبة السلوكيات السلبية للآلة حيث يعتمد التعلم المُعزز على التعلم من خلال التفاعل مع البيئة أي أن الخوارزمية أو الروبوت أو البرنامج والذي يسمى في هذه الحالة الوكيل "agent" يتعلم من من عواقب أفعاله بدلًا من تعليمه صراحةً.
</p>

<p>
	فالوكيل يختار أفعاله وقرارته المستقبلية على أساس تجاربه السابقة (الاستغلال) وأيضًا من خلال الخيارات الجديدة (الاستكشاف) أي أن التعلم يرتكز على مبدأ التجربة والخطأ ويتعلق الأمر باتخاذ الإجراءات المناسبة لزيادة المكافأة إلى أقصى حد في موقف معين.
</p>

<p>
	يتطلب التعلم المعزز عددًا كبيرًا من التفاعلات بين الوكيل والبيئة لجمع البيانات للتدريب ويستخدم في مجال الألعاب حيث تعد الألعاب من أبرز مجالات استخدام التعلم المعزز فهو قادر على تحقيق أداء خارق في العديد من الألعاب مثل لعبة Pac-Man.
</p>

<p>
	ومن الأمثلة على استخدامه هو تدريب السيارات على التوقف باستخدام نظام القيادة الآلي حيث يتم تعليم حاسوب السيارة أو الوكيل على الوقوف في المكان الصحيح من خلال قراءة بيانات أجهزة استشعار مثل الكاميرات ونظام تحديد المواقع GPS واتخاذ الإجراءات المناسبة مثل الضغط على الفرامل وتغيير الاتجاه ويحتاج الوكيل بالطبع إلى إيقاف السيارة مرارًا وتكرارًا باستخدام التجربة والخطأ ويتم تقديم إشارة مكافأة لتقييم جودة التجربة وتعزيز عملية التعلم.
</p>

<h2>
	نماذج تعلم الآلة
</h2>

<p>
	لقد وصل <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-%D9%84%D9%81%D9%87%D9%85-%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%B9%D9%85%D9%8A%D9%82-r1422/" rel="">التعلم العميق</a> وهو نوع متقدم من أنواع تعلم الآلة إلى مستوى من الاهتمام العام والاستثمار الصناعي لم يسبق له مثيل في تاريخ مجال علوم الحاسوب ولكنه ليس أول شكل أو نموذج ناجح للتعلم الآلي ويمكننا القول إن معظم خوارزميات التعلم الآلي المستخدمة في الصناعة هذه الأيام -ليست خوارزميات التعلم العميق.
</p>

<p>
	يوفر مجال تعلم الآلة العديد من النماذج machine learning models أشهرها التعلم العميق لكن في الواقع لا يعد التعلم العميق دائمًا الأداة المناسبة، ففي بعض الأحيان لا توجد بيانات كافية ليكون التعلم العميق قابلاً للتطبيق، ويفضل أن تُحلّ المشكلة بطريقة أفضل من خلال خوارزمية مختلفة وفيما يلي نوضح أهم أنواع طرق تعلم الآلة:
</p>

<ul>
	<li>
		النمذجة الاحتمالية Probabilistic modeling
	</li>
	<li>
		أساليب النواة Kernel Methods
	</li>
	<li>
		أشجار القرار Decision Trees والغابات العشوائية Random Forests
	</li>
	<li>
		الشبكات العصبية Neural Networks
	</li>
	<li>
		التعلم العميق Deep Learning
	</li>
</ul>

<p>
	لنتعرف على قرب على كل نموذج من هذه النماذج وأشهر استخداماته وخوارزمياته.
</p>

<h3>
	النمذجة الاحتمالية Probabilistic modeling
</h3>

<p>
	تعتمد النمذجة الاحتمالية على تطبيق مبادئ الإحصاء في تحليل البيانات. لقد كانت أحد أقدم أشكال التعلم الآلي، والتي لا تزال مستخدمة حتى يومنا هذا واحدة من أشهر الخوارزميات في هذه الفئة هي خوارزمية بايز الساذج Naive Bayes.
</p>

<h3>
	أساليب النواة Kernel Methods
</h3>

<p>
	عندما بدأت الشبكات العصبية تكتسب شهرة بين الباحثين في التسعينيات ظهر نهج جديد للتعلم الآلي سمي أساليب النواة وسرعان ما أدى لتراجع شعبية الشبكات العصبية، وأساليب النواة هي مجموعة من خوارزميات التصنيف، وأشهرها خوارزمية الآلة متجه الدعم (SVM).
</p>

<h3>
	أشجار القرار Decision Trees والغابات العشوائية Random Forests
</h3>

<p>
	هي إحدى طرق النمذجة التنبؤية التي تُستخدم في الإحصاء واستخراج البيانات وتعلم الآلة وهي عبارة عن هياكل شبيهة بالمخططات التدفقية تتيح لك تصنيف نقاط البيانات المُدخلة أو التنبؤ بقيم المخرجات بناءًا على البيانات المُدخلة مثلًا تعطيها مواصفات المنزل، فتتوقع السعر وقد تم تفضيلها على أساليب النواة.
</p>

<h3>
	الشبكات العصبية Neural Networks
</h3>

<p>
	حتى عام 2010 تقريبًا، كانت <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A8%D9%86%D8%A7%D8%A1-%D8%B4%D8%A8%D9%83%D8%A9-%D8%B9%D8%B5%D8%A8%D9%8A%D8%A9-%D9%84%D9%84%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D8%A3%D8%B1%D9%82%D8%A7%D9%85-%D8%A7%D9%84%D9%85%D9%83%D8%AA%D9%88%D8%A8%D8%A9-%D8%A8%D8%AE%D8%B7-%D8%A7%D9%84%D9%8A%D8%AF-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D9%85%D9%83%D8%AA%D8%A8%D8%A9-tensorflow-r1267/" rel="">الشبكات العصبية</a> مُهمّشة إلى أن بدأ عدد من الباحثين الذين كانوا ما يزالون يؤمنون بالشبكات العصبية في تحقيق نتائج مهمة باستخدامها، وبذلك بدأت التطورات على الشبكات العصبية تتسارع وتفرض هيمنتها في معظم مهام تعلم الآلة.
</p>

<h3>
	التعلم العميق Deep Learning
</h3>

<p>
	السبب الرئيسي وراء انتشار التعلم العميق وتطوره بسرعه هو أنه قدّم أداءً أفضل في العديد من المشكلات واختصر العديد من الخطوات المعقدة التي كانت موجودة في الأساليب السابقة، والتعلم العميق اليوم هو الأسلوب الأنجح في جميع المهام الحسية أو الإدراكية مثل مهام الرؤية الحاسوبية ومعالجة اللغات الطبيعية NLP.
</p>

<p>
	وللتعرف على المزيد من الأساليب المتطورة لخوارزميات وأدوات التعلم الآلي يمكنك إلقاء نظرة على مسابقات التعلم الآلي على موقع <a href="https://www.kaggle.com/" rel="external nofollow">Kaggle</a> نظرًا لبيئتها شديدة التنافس (بعض المسابقات لديها آلاف المشاركين وجوائز بملايين الدولارات) وللتنوع الكبير في مشكلات التعلم الآلي التي تغطيها.
</p>

<h2>
	لغة بايثون وتعلم الآلة
</h2>

<p>
	تعد <a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D9%85%D8%B1%D8%AC%D8%B9-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r735/" rel="">لغة البرمجة بايثون</a> اللغة الأكثر شهرة في مجال تعلم الآلة لعدد كبير من الأسباب فهي لغة سهلة التعلم والفهم و ولها شعبية كبيرة وتستخدم من قبل عدد كبير من الأشخاص والمؤسسات وتملك العديد من المكتبات وأطر العمل التي تختص في مجال الذكاء الصنعي وتعلم الآلة
</p>

<p>
	فيما يلي سنكتب كود تعلم آلة في بايثون، حيث سنستخدم خوارزمية أشجار القرار لتوقع نوع الفاكهة (برتقال أو تفاح) بناءًا على وزنها ونسيجها.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_3556_9" style=""><span class="kwd">from</span><span class="pln"> sklearn </span><span class="kwd">import</span><span class="pln"> tree </span><span class="com"># الخطوة 1</span><span class="pln">

</span><span class="com"># الخطوة 2</span><span class="pln">
X </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[[</span><span class="lit">140</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">],</span><span class="pln"> </span><span class="pun">[</span><span class="lit">130</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">],</span><span class="pln"> </span><span class="pun">[</span><span class="lit">150</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">],</span><span class="pln"> </span><span class="pun">[</span><span class="lit">170</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">]]</span><span class="pln">
y </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">]</span><span class="pln"> </span><span class="com"># 0: apple, 1: orange</span><span class="pln">

</span><span class="com"># الخطوة 3</span><span class="pln">
clf </span><span class="pun">=</span><span class="pln"> tree</span><span class="pun">.</span><span class="typ">DecisionTreeClassifier</span><span class="pun">()</span><span class="pln">
clf </span><span class="pun">=</span><span class="pln"> clf</span><span class="pun">.</span><span class="pln">fit</span><span class="pun">(</span><span class="pln">X</span><span class="pun">,</span><span class="pln"> y</span><span class="pun">)</span><span class="pln">

</span><span class="com"># الخطوة 4</span><span class="pln">
prediction </span><span class="pun">=</span><span class="pln"> clf</span><span class="pun">.</span><span class="pln">predict</span><span class="pun">([[</span><span class="lit">160</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">]])</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">prediction</span><span class="pun">)</span><span class="pln">  </span><span class="com"># النتيجة: 1</span></pre>

<p>
	شرح تنفيذ الشيفرة:
</p>

<ol>
	<li>
		<strong>الخطوة الأولى</strong>: هي استيراد المكتبة ساي كيت ليرن sklearn التي تحتوي العديد من خوارزميات تعلم الآلة الجاهزة.
	</li>
	<li>
		<strong>الخطوة الثانية</strong>: هي تحديد بيانات التدريب. هنا سيكون لدينا 4 عينات، كل عينة تُمثّل نقطة بيانات
	</li>
	<li>
		<strong>الخطوة الثالثة</strong>: هي تدريب خوارزمية أشجار القرار على البيانات السابقة الهدف هنا هو جعل الخوارزمية قادرة على التنبؤ بنوع الفاكهة بعد أن ندربها على البيانات السابقة.
	</li>
	<li>
		<strong>الخطوة الرابعة</strong>: بعد الخطوة 3 نكون انتهينا من تدريب النموذج، أي أنه أصبح جاهزًا للاستخدام الفعلي. لذا نعطيه عينة بيانات، ونطلب منه توقع نوع الفاكهة.
	</li>
</ol>

<p>
	إذا كنت مهتمًا بإتقان تعلم الآلة باستخدام لغة البرمجة بايثون يمكنك البدء مع <a href="https://academy.hsoub.com/learn/artificial-intelligence/" rel="">دورة الذكاء الاصطناعي AI</a> التي توفرها أكاديمية حسوب والتي تبدأ معك من الصفر ولا تتطلب منك أي خبرة مسبقة فهي تبدأ معك بتعلم كل ما تحتاجه بلغة بايثون وتطوير تطبيقات تستفيد من دمج مختلف نماذج LLMs الحديثة مثل GPT من OpenAI و LLaMA 2 من Meta لتطوير تطبيقات ذكية بسهولة وكفاءة كما تشرح لك تحليل البيانات Data Analysis وتمثيلها مرئيًا، ومفاهيم تعلم الآلة Machine Learning والتعلم العميق Deep Learning وغيرها من خلال التركيز على الشرح العملي المعد من قبل مجموعة من المطورين المُختصين، الذين يُرافقونك طيلة الدورة وحتى بعد الدورة للإجابة على أي سؤال أو مشكلة تواجهك كما تضمن لك الدورة دخول السوق والحصول على فرصة عمل بعد تخرجك من الدورة خلال ستة أشهر.
</p>

<div class="banner-container ipsBox ipsPadding">
	<div class="inner-banner-container">
		<p class="banner-heading">
			دورة الذكاء الاصطناعي
		</p>

		<p class="banner-subtitle">
			احترف برمجة الذكاء الاصطناعي AI وتحليل البيانات وتعلم كافة المعلومات التي تحتاجها لبناء نماذج ذكاء اصطناعي متخصصة.
		</p>

		<div>
			<a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://academy.hsoub.com/learn/artificial-intelligence" rel="">اشترك الآن</a>
		</div>
	</div>

	<div class="banner-img">
		<a href="https://academy.hsoub.com/learn/artificial-intelligence" rel=""><img alt="دورة الذكاء الاصطناعي AI" src="https://academy.hsoub.com/learn/assets/images/courses/artificial-intelligence.png"></a>
	</div>
</div>

<h2>
	مصادر تعليمية لتعلم الآلة
</h2>

<p>
	بالإضافة إلى دورة بايثون الشاملة التي ذكرناها للتو والتي تعد من أفضل الدورات العربية ل<a href="https://academy.hsoub.com/python/" rel="">تعلم بايثون</a> وتعلم الآلة، توفر توفر لك أكاديمية حسوب أيضًا مجموعة من المقالات والدروس التعليمية ومنشورات الكتب العربية التي تعد من أفضل مصادر تعلم الآلة و<a href="https://academy.hsoub.com/learn-programming/" rel="">تعلم البرمجة</a> وعلوم الحاسوب نذكر لك منها:
</p>

<ul>
	<li>
		كتاب <a href="https://academy.hsoub.com/files/15-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">البرمجة بلغة بايثون</a>
	</li>
	<li>
		كتاب <a href="https://academy.hsoub.com/files/17-%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-%D9%88%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9/" rel="">مدخل إلى الذكاء الاصطناعي وتعلم الآلة</a>
	</li>
	<li>
		كتاب <a href="https://academy.hsoub.com/files/29-%D8%B9%D8%B4%D8%B1%D8%A9-%D9%85%D8%B4%D8%A7%D8%B1%D9%8A%D8%B9-%D8%B9%D9%85%D9%84%D9%8A%D8%A9-%D8%B9%D9%86-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">عشرة مشاريع عملية عن الذكاء الاصطناعي</a>
	</li>
	<li>
		سلسلة <a href="https://academy.hsoub.com/tags/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9%20%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1%20%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">برمجة الذكاء الاصطناعي</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D9%85%D9%81%D8%A7%D9%87%D9%8A%D9%85-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-r1009/" rel="">المفاهيم الأساسية لتعلم الآلة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D9%86%D8%B8%D8%B1%D8%A9-%D8%B3%D8%B1%D9%8A%D8%B9%D8%A9-%D8%B9%D9%84%D9%89-%D9%85%D8%AC%D8%A7%D9%84-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-r1933/" rel="">نظرة سريعة على مجال تعلم الآلة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A3%D8%AF%D9%88%D8%A7%D8%AA-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D9%86%D9%85%D8%A7%D8%B0%D8%AC-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-r1938/" rel="">أدوات برمجة نماذج تعلم الآلة</a>
	</li>
</ul>

<p>
	وننصحك بتفصّح ومتابعة قسم مقالات <a href="https://academy.hsoub.com/programming/artificial-intelligence/" rel="">الذكاء الاصطناعي</a> في أكاديمية لقراءة المقالات الجديدة المنشورة حول الذكاء الاصطناعي وتعلم الآلة وما يتعلق بهما.
</p>
<iframe allowfullscreen="" data-controller="core.front.core.autosizeiframe" data-embedauthorid="3889" data-embedcontent="" src="https://academy.hsoub.com/files/17-%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-%D9%88%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9/?do=embed" style="margin: auto;"></iframe>

<h2>
	أفضل مكتبات تعلم الآلة في بايثون
</h2>

<p>
	إليك قائمة بأهم المكتبات التي قد تحتاجها في تعلّم الآلة (جميعها تعمل في لغة بايثون):
</p>

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/python/%D9%85%D9%81%D8%A7%D9%87%D9%8A%D9%85-%D9%85%D8%AA%D9%82%D8%AF%D9%85%D8%A9-%D8%AD%D9%88%D9%84-%D9%85%D9%83%D8%AA%D8%A8%D8%A9-numpy-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r1809/" rel="">نمباي Numpy</a>: من أفضل مكتبات بايثون في مجال تعلم الآلة والذكاء الصناعي فهي مكتبة قوية وشائعة الاستخدام تسهل معالجة المصفوفات والتعامل معها وتسهل عمليات معالجة البيانات والعمليات الإحصائية عليها.
	</li>
	<li>
		سي باي Scipy: توفر هذه المكتبة مجموعة من الحزم المخصصة للاستخدام في مجال للحوسبة العلمية والهندسة والتقنية وتحتوي على وحدات مختلفة للجبر الخطي والتكامل والإحصاءات.
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A8%D9%86%D8%A7%D8%A1-%D9%85%D8%B5%D9%86%D9%81-%D8%A8%D8%A7%D9%84%D8%A7%D8%B9%D8%AA%D9%85%D8%A7%D8%AF-%D8%B9%D9%84%D9%89-%D8%B7%D8%B1%D9%82-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-%D8%A8%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D9%85%D9%83%D8%AA%D8%A8%D8%A9-scikit-learn-r1266/" rel="">ساي كيت ليرن Scikit-learn</a>: اختصارًا Sklearn وهي مكتبة فعالة توفر العديد من أدوات وخوارزميات تعلم الآلة.
	</li>
	<li>
		باندا Pandas: هي مكتبة تستخدم لمعالجة البيانات وتحليلها وتسهل عمليات تنظيم البيانات وفهرستها ووضعها ضمن جداول وإجراء العمليات عليها.
	</li>
	<li>
		ماتبلوتليب Matplotlib: هي مكتبة بايثون خاصة بتصميم الرسوميات والمخططات البيانية وإنشاء رسومات تفاعلية وتصديرها إلى تنسيقات مختلفة.
	</li>
	<li>
		إضافة للعديد من أطر العمل القوية مثل ثيانو Theano وتنسرفلو TensorFlow وكيراس Keras وباي تورش PyTorch التي تسهل بناء نماذج الشبكات العصبية وتطبيق خوارزميات التعلم العميق.
	</li>
</ul>

<h2>
	مستقبل تعلم الآلة
</h2>

<p>
	بالرغم من أن خوارزميات تعلم الآلة كانت موجودة منذ عقود إلا أنها اكتسبت شعبية أكبر مع تنامي الذكاء الاصطناعي فمعظم تطبيقات الذكاء الصناعي المتقدمة التي نراها اليوم هي تطبيقات تعمل باستخدام خوارزميات تعلم الآلة (لاسيما التعلم العميق) بدءًا من خوارزميات التوصية التي نراها في موجز أخبار فيسبوك وغيرها من شبكات التواصل الاجتماعي والتي تعتمد على اهتماماتنا وعاداتنا في القراءة وصولًا السيارات ذاتية القيادة مثل سيارات تسلا Tsla ومعالجة اللغات الطبيعية مثل تطبيق الدردشة <a href="https://academy.hsoub.com/apps/web/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%A8%D9%88%D8%AA-%D8%A7%D9%84%D9%85%D8%AD%D8%A7%D8%AF%D8%AB%D8%A9-%D8%A7%D9%84%D8%B0%D9%83%D9%8A-%D8%B4%D8%A7%D8%AA-%D8%AC%D9%8A-%D8%A8%D9%8A-%D8%AA%D9%8A-chatgpt-r863/" rel="">ChatGPT</a>.
</p>

<p>
	كما تندمج الحلول التي يقدمها تعلم الآلة يومًا بعد يوم في العمليات الأساسية للشركات واستخدامات حياتنا اليومية مثل الترجمة الآلية للغات والتشخيص الطبي البحث الصوتي والبحث عن أقصر الطرق للوصول إلى وجهة ما وغيرها الكثير من التطبيقات ومن المتوقع أن ينمو السوق العالمي للتعلم الآلي من 8.43 مليار دولار أمريكي في عام 2019 إلى 117.19 مليار دولار أمريكي بحلول عام 2027 وفقًا لتوقع <a href="https://www.fortunebusinessinsights.com/machine-learning-market-102226" rel="external nofollow">Fortune Business Insights</a>.
</p>

<p>
	وقد بدأت العديد من الشركات بالفعل في استخدام خوارزميات التعلم الآلي نظرًا لقدرتها على إجراء تنبؤات وقرارات تجارية أكثر دقة ففي عام 2020 تم <a href="https://research.aimultiple.com/ml-stats/" rel="external nofollow">رصد 3.1 مليار دولار</a> لتمويل شركات تعلم الآلة، وذلك لقدرة تعلم الآلة على إحداث تغييرات كبيرة في الصناعات.
</p>

<p>
	فيما يلي بعض التوقعات لمستقبل التعلم الآلي:
</p>

<ol>
	<li>
		<p>
			<strong>يمكن للحوسبة الكمية أن تحدد مستقبل تعلم الآلة</strong>: والحوسبة الكمومية هي أحد المجالات التي لديها القدرة على تعزيز قدرات التعلم الآلي وهي تسمح بأداء عمليات متعددة الحالات في وقت واحد، مما يتيح معالجة أسرع للبيانات ففي عام 2019 أجرى <a href="https://www.bbc.com/news/science-environment-50154993" rel="external nofollow">معالج كمي خاص بشركة جوجل Google</a> مهمة في 200 ثانية من شأنها أن تستغرق 10000 عام لإكمالها على أفضل حاسب عملاق في العالم!
		</p>
	</li>
	<li>
		<p>
			<strong>قد يتمكن برنامج AutoML من تسهيل عملية تطوير نماذج تعلم الآلة من البداية إلى النهاية</strong>: يعمل AutoML الذي طورته جوجل على أتمتة عملية بناء وتطبيق خوارزميات التعلم الآلي وهو يسمح لأي شخص أو شركة تجارية بتطبيق نماذج وتقنيات التعلم الآلي المعقدة وتخصيصها وفق احتياجات أعمالهم خلال دقائق دون أن يكون خبيرًا في التعلم الآلي.
		</p>
	</li>
	<li>
		<p>
			<strong>دخول تعلم الآلة بقوة في عملية التصنيع</strong>: لا زالت الشركات المصنعة ما زالت في المراحل الأولى فقط من تبني التعلم الآلي. <a href="https://www.pwc.de/de/digitale-transformation/digital-factories-2020-shaping-the-future-of-manufacturing.pdf" rel="external nofollow">ففي عام 2020 استفادت 9٪ فقط</a> من الشركات المشاركة في استطلاع رأي حول استخدام الذكاء الاصطناعي في عملياتهم التجارية، لكن مع التطورات المستمرة التي نشهدها في مجال تعلم الآلة يتوقع أن تزداد هذه النسبة بشكل كبير ويصبح الاعتماد على استخدام تقنيات تعلم الآلة والروبوتات في أماكن التصنيع أكثر بكثير في المستقبل القريب.
		</p>
	</li>
	<li>
		<p>
			<strong>السيارات والمركبات ذاتية القيادة</strong>: تعمل شركات مثل تسلا وهوندا باستمرار على إنتاج هذا النوع من السيارات مستفيدة من تقنيات التعلم الآلي، وقد قدمت هذه الشركات بالفعل سيارات مؤتمتة جزئيًّا لكن لا تزال السيارات ذاتية القيادة قيد التطوير ولم تصل إلى الشكل النهائي.
		</p>
	</li>
</ol>

<h2>
	الخلاصة
</h2>

<p>
	قدمنا من خلال هذه المقالة دليلًا شاملًا عن تعلم الآلة وبدأنا بتوضيح المفهوم نفسه وأنواع التعلم الآلي وتطبيقاته والفروقات بينها والفرق بين التعلم الآلي والذكاء الاصطناعي، كما تعرفنا على أهمية لغة البرمجة بايثون في مجال التعلم الآلي وسردنا أهم المكتبات وأطر العمل التي توفرها في مجال التعلم الآلي وقدّمنا مثلًا برمجيًا لتطبيق خوارزمية الانحدار اللوجستي كما سردنا أهم المصادر والمراجع لتعلم مجال الذكاء الاصطناعي عمومًا وتعلم الآلة خصوصًا ثم ألقينا نظرة أخيرًا على مستقل مجال تعلم الآلة.
</p>

<p>
	نرجو أن تكون هذه المقالة قد قدمت لك فهمًا جيّدًا لمجال تعلم الآلة ووضحت لك المفاهيم الأساسية لتنطلق في رحلة تعلم الآلة والانتقال إلى مواضيع وتطبيقات عملية حتى دخول سوق العمل.
</p>
]]></description><guid isPermaLink="false">1987</guid><pubDate>Fri, 19 May 2023 15:03:00 +0000</pubDate></item><item><title>&#x62A;&#x639;&#x644;&#x645; &#x627;&#x644;&#x630;&#x643;&#x627;&#x621; &#x627;&#x644;&#x627;&#x635;&#x637;&#x646;&#x627;&#x639;&#x64A;</title><link>https://academy.hsoub.com/programming/artificial-intelligence/%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_05/--.png.5347ee0400b9f56b6922410c918fb249.png" /></p>
<p>
	إذا كنت ترغب في تَعلُّم الذكاء الاصطناعي أو العمل كمهندس ذكاء صناعي لكنك مشتت في الخطوات التي عليك اتباعها ولا تزال المصطلحات والمفاهيم المرتبطة بهذا العلم مبهمة بالنسبة لك وتراودك تساؤلات من قبيل:
</p>

<ul>
	<li>
		هل يمكنني تعلم الذكاء الاصطناعي حتى لو لم يكن لدي خبرة في البرمجة؟
	</li>
	<li>
		أريد تعلم الذكاء الاصطناعي لكني لا أعرف من أين أبدأ؟
	</li>
	<li>
		ما هي خطوات تعلم الذكاء الاصطناعي؟
	</li>
	<li>
		ما هي أهم مصادر تعلم الذكاء الاصطناعي؟
	</li>
</ul>

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

<p>
	وأنوه لأن المقالة الحالية هي جزء من سلسلة مقالات عن الذكاء الصناعي بدأناها مع <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">مقدمة شاملة عن الذكاء الاصطناعي</a>
</p>

<h2>
	ما هو الذكاء الاصطناعي؟
</h2>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="126044" href="https://academy.hsoub.com/uploads/monthly_2023_05/505125764_.png.62e55c4edbafd66a42f075f00f75cb78.png" rel=""><img alt="ما هو الذكاء الاصطناعي" class="ipsImage ipsImage_thumbnailed" data-fileid="126044" data-ratio="62.50" data-unique="m98tr5tgf" style="width: 800px; height: auto;" width="900" src="https://academy.hsoub.com/uploads/monthly_2023_05/.thumb.png.276ae3c832217515e33a0c40f628ce3b.png"> </a>
</p>

<p>
	الذكاء الاصطناعي أو الذكاء الصناعي Artificial Intelligence أو اختصارًا AI هو العلم الذي يعطي يجعل الآلات قادرة على اتخاذ قرارات والتصرف بذكاء من خلال محاكاة البشر وطريقتهم في التفكير، فنحن البشر نحصل على المعلومات الواردة من العالم الخارجي ونعالجها في عقولنا ونصدر الأحكام والاستنتاجات بناء عليها وبناء على تجاربنا السابقة.
</p>

<p>
	يمكنك تشبيه عملية الذكاء الاصطناعي وتعلم الآلة بالمولود الجديد الذي لا يستطيع تعلم أو عمل أي شيء بمفرده إذا لم يعلمه والداه ويدربانه وينقلان له المعرفة ويمكنانه من التعرف على ما هو خطأ وما هو صواب، وبذلك تتعلم الآلة وتصبح قادرة على اتخاذ القرارات وإعطاء الاستنتاجات واقتراح الحلول.
</p>

<p>
	نعرف أن الآلات هي مجرد عتاد قابل للبرمجة ولكن في عصر الذكاء الاصطناعي أصبحت قابلة للتعلم أيضًا بطريقة تمكنها من إصدار أحكام وقرارات مشابهة للبشر من خلال اتباع طريقة معينة في البرمجة تسمى <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D9%86%D8%B8%D8%B1%D8%A9-%D8%B3%D8%B1%D9%8A%D8%B9%D8%A9-%D8%B9%D9%84%D9%89-%D9%85%D8%AC%D8%A7%D9%84-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-r1933/" rel="">تعلم الآلة Machine Learning</a> وهي مصطلح مرافق للذكاء الاصطناعي يُمكِّن الآلات من التعلم من أكوام من البيانات بتطبيق خوارزميات ونماذج وأنماط مسبقة البناء عليها نعطيها لها مع البيانات لتستنتج بذلك منها المعلومات دون أن تتم برمجتها وتعليمها بشكل صريح وبذلك تتعلم الآلات وتصبح أكثر ذكاءً.
</p>

<p>
	مثلًا بسيط على ما سبق هو تعليم الطفل الصغير أصناف الحيوانات فنقول له الطائر يطير وله جناحان وهذا هو النموذج الحاكم، وبذلك يستطيع الطفل تطبيق هذا النموذج لتصنيف الطيور عن غيرها من أصناف الحيوانات الأخرى مهما أعطيناه من أصناف وأشكال مختلفة، وهو بالضبط ما نفعله مع الآلات باختصار وتبسيط.
</p>

<h2>
	أهمية تعلم الذكاء الاصطناعي
</h2>

<p>
	قد تتساءل لماذا أتعلم الذكاء الاصطناعي؟ وهل هناك فائدة من تعلمه والجواب هو نعم بكل تأكيد فالذكاء الصناعي واحد من أهم العلوم الحديثة المستخدمة في عملية إيجاد حلول لمشاكل المجتمع المُلحّة والمصيرية، كالأمراض ومشاكل التلوث وتغير المناخ والعمل في البيئات الخطرة (كالبحر والفضاء).
</p>

<p>
	كما يعد الذكاء الاصطناعي أيضًا قطاعًا اقتصاديًّا سريع النمو، حيث من المتوقع أن تزيد عائدات البرامج التي تعتمد على تقنيات الذكاء الاصطناعي <a href="https://www.gartner.com/en/newsroom/press-releases/2021-11-22-gartner-forecasts-worldwide-artificial-intelligence-software-market-to-reach-62-billion-in-2022#:~:text=Market%20Growth%20Will%20Accelerate%20as,new%20forecast%20from%20Gartner%2C%20Inc." rel="external nofollow" target="_blank">بنسبة 21.3٪ عن العام السابق</a>، بإجمالي 62.5 مليار دولار في عام 2022.
</p>

<p>
	إذًا من خلال تعلّم الذكاء الاصطناعي، لن تكون مواكبًا لثورة هذا العصر فقط بل ستكون جزءًا منها، عدا عن كون العمل بها ممتع ومحطّ جذب لمن يُريد تحقيق إنجازات علمية وبحثية.
</p>

<p>
	أضف إلى ذلك يعتبر العمل في مجال الذكاء الصناعي مُجزيًّا ماديًّا، فمتوسط الرواتب لمهندسي الذكاء الاصطناعي وفقًا لموقع <a href="://www.glassdoor.com/Salahttpsries/ai-engineer-salary-SRCH_KO0,11.htm" rel="">Glassdoor</a> المتخصص في الولايات المتحدة الأمريكية يزيد عن 127 ألف دولارًا أمريكيًّا في السنة، بينما يبلغ متوسط الأجر لمهندس الذكاء الاصطناعي في الإمارات العربية المتحدة 337 ألف درهمًا إماراتيًا (حوالي 94 ألف دولارًا أمريكيًّا) في السنة وفقًا للموقع المتخصص <a href="https://www.erieri.com/" rel="external nofollow" target="_blank">erieri</a>.
</p>

<p>
	وعلى الرغم من أن قدرات الذكاء الصناعي لم تأخذ ذروتها بعد ومازالت في مهدها، إلا أنّه أصبح جزءًا أساسيًّا في الكثير من التطبيقات المختلفة، ويتزايد عدد الشركات التي تعتمد الذكاء الاصطناعي لتحسين أدائها ما يعني أن الوظائف المرتبطة بالذكاء الاصطناعي تُصبح مطلوبة كثيرًا وبوتيرة متسارعة.
</p>

<p>
	فبحسب <a href="https://www.mckinsey.com/capabilities/quantumblack/our-insights/global-survey-the-state-of-ai-in-2020" rel="external nofollow" target="_blank">استطلاع</a> أجرته شركة McKinsey أظهر أن الذكاء الصناعي يستخدم بوتيرة متزايدة في تحسين الخدمات وتعزيز المنتجات ونمذجة المخاطر ومنع الاحتيال، واعتبارًا من الآن وحتى عام 2030 من المتوقع أن ينمو الطلب على وظائف أبحاث الحاسب والمعلومات بنسبة 22٪.
</p>

<p>
	وعلى أهمية هذا المجال وانتشاره لا يزال هناك نقص في الموارد البشرية للذكاء الاصطناعي لاسيما في العالم العربي، فإذا كنت شخصًا مهتمًا بالذكاء الاصطناعي وترغب في تعلمه فأنت تمنح نفسك فرصة عظيمة للحصول على عمل يبشر بمستقبل واعد وفرص واسعة.
</p>

<h2>
	تطبيقات الذكاء الاصطناعي
</h2>

<p>
	قد يخطر ببالك عند سماع مصطلح الذكاء الاصطناعي أنه يطبق فقط في الروبوتات المتقدمة التي نراها في البرامج الوثائقية وأفلام الخيال العلمي لكن هذا المثال عام جدًا فالذكاء الاصطناعي يمكن أن يطبق في العديد من المجالات ويصمم لإنجاز مهمة محددة في مجال الرعاية الصحية أو الخدمات المصرفية أو التعليم أو الترفيه أو الإدارة وما إلى ذلك.
</p>

<p>
	ومن أبرز تطبيقات الذكاء الصناعي نذكر:
</p>

<ol>
	<li>
		<strong>التجارة الإلكترونية</strong>: يمكن تطبيق الذكاء الاصطناعي للتوصية بأفضل المنتجات واستخدام روبوتات الدردشة ومنع عمليات الاحتيال على بطاقة الائتمان.
	</li>
	<li>
		<strong>التعليم</strong>: يمكن الاستفادة من الذكاء الاصطناعي في وضع خطط دراسية متكاملة وإنشاء محتوى تعليمي ذكي وأتمتة المهام الإدارية.
	</li>
	<li>
		<strong>الرعاية الصحية</strong>: يستخدم الذكاء الاصطناعي في التعرف على الأمراض المختلفة وتشخيصها والكشف المبكر عنها وفي اكتشاف أدوية جديدة.
	</li>
	<li>
		<strong>السيارات</strong>: يستخدم الذكاء الاصطناعي في تصنيع السيارات الذكية وذاتية القيادة كما يحسن تجربة القيادة في السيارة من خلال توفير أنظمة إضافية مثل كبح الفرامل عند الطوارئ.
	</li>
	<li>
		<strong>وسائل التواصل الاجتماعي</strong>: يمكن الاستفادة من الذكاء الاصطناعي للتوصية بالمنشورات التي قد يهتم بها المتابعون بناء على نوع المحتوى الذي يتفاعلون معه والكشف عن المحتوى غير الملائم والترجمة التلقائية للمحتوى.
	</li>
</ol>

<p>
	كانت هذه أمثلة على بعض استخدامات الذكاء الاصطناعي، وتجدر الإشارة أن الذكاء الاصطناعي آخذ في التقدم دونما توقف وتضاف العديد من المجالات التي يضع الذكاء الصناعي بصمته فيها كالزراعة والنقل والفضاء والتجارة الإلكترونية وفي مقالة <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">تطبيقات الذكاء الاصطناعي</a> نشرنا مقالة شاملة لكل هذه المجالات.
</p>

<h2>
	ما هي وظيفة مهندس الذكاء الاصطناعي؟
</h2>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="126043" href="https://academy.hsoub.com/uploads/monthly_2023_05/1875356568_.png.386ceade1606bede86bd9ed420049cdb.png" rel=""><img alt="مهندس ذكاء اصطناعي" class="ipsImage ipsImage_thumbnailed" data-fileid="126043" data-ratio="62.50" data-unique="zcgcs1nzs" style="width: 800px; height: auto;" width="800" src="https://academy.hsoub.com/uploads/monthly_2023_05/.thumb.png.eedc0861bad0a87cf8827aec48797f92.png"> </a>
</p>

<p>
	يسمى الشخص المسؤول عن الذكاء الاصطناعي داخل أي مؤسسة أو منظمة <strong>مهندس الذكاء الاصطناعي</strong> وهو منصب وظيفي مرموق، وقد تختلف مسؤوليات مهندس الذكاء الاصطناعي حسب مكان العمل ولكنه يكون مسؤولًا بشكل عام عن الأمور التالية:
</p>

<ul>
	<li>
		تطوير أنظمة وتطبيقات ذكية من شأنها تحسين الأداء واتخاذ قرارات أفضل.
	</li>
	<li>
		تحقيق أهداف العمل باستخدام أساليب الذكاء الاصطناعي.
	</li>
	<li>
		استخدام المنطق والاحتمالات وتعلم الآلة لحل مشكلات العمل.
	</li>
	<li>
		تطبيق أفضل الممارسات والخوارزميات لاستخراج البيانات حول المشتريات والمبيعات. والمنتجات ومعالجتها وتحليلها والتنبؤ بالأحداث المستقبلية.
	</li>
	<li>
		تحليل الأنظمة الحالية والعمل على مشاريع تطويرية.
	</li>
</ul>

<p>
	ويمكن لمهندس الذكاء الاصطناعي أن يتخصص في مجالات مختلفة مثل التعلم الآلي أو التعلم العميق وسنتحدث بشكل موسع عن هذه التخصصات في فقرة لاحقة.
</p>

<p>
	وكي تصبح مهندس ذكاء اصطناعي تحتاج لمجموعة من المهارات الشخصية أهمها الفكر التحليلي والإبداعي والتواصل الجيد والعمل بروح الفريق إلى جانب المهارات التقنية المتعددة التي ذكرناها وعلى رأسها الرياضيات والإحصاء وعلوم الحاسوب ولغات البرمجة.
</p>

<h2>
	أساسيات الذكاء الاصطناعي
</h2>

<p>
	قد تتمكن من صعود السلم درجتين درجتين لكن أكثر من ذلك سيكون الأمر مستحيلًا، لذا من الأفضل صعوده درجة درجة وقبل أن تبدأ في تعلم الذكاء الصناعي، يجب أن يكون لديك أساس في المجالات التالية وكلما كان أساسك أكبر كلما كان أفضل:
</p>

<ol>
	<li>
		مبادئ علوم الحاسب
	</li>
	<li>
		لغات البرمجة
	</li>
	<li>
		الخوارزميات وهياكل البيانات
	</li>
	<li>
		أنظمة التشغيل
	</li>
	<li>
		حل المشكلات وتطبيقها باستخدام البرمجة الحاسوبية
	</li>
</ol>

<p>
	لنتعرف سويًا على كل مجال من المجالات الواردة أعلاه بمزيد من التفصيل وأهميتها في تعلم الذكاء الاصطناعي
</p>

<h3>
	مبادئ علوم الحاسب
</h3>

<p>
	لا يمكنك لعب كرة القدم بدون كرة. الأمر ذاته ينطبق هنا، فلابد من فهم المبادئ الأساسية لعلوم الحاسب قبل أن تتمكن من بدء <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">برمجة الذكاء الاصطناعي</a>. هذا يتضمن (سنضع الحد الأدنى من مستوى المعرفة المطلوبة لكل منها):
</p>

<h4>
	1. برمجة الحاسب (متوسطة)
</h4>

<p>
	البرمجة هي مجموعة الأنشطة التي تمكننا من التخاطب مع الحاسب وتوجيه الأوامر له، وتتضمن هذه الأنشطة أمورًا مثل كتابة التعليمات وتوجيه الأوامر وبناء الخوارزميات وكي تتمكن من برمجة الحاسب يجب أن تتعلم إحدى لغات البرمجة.
</p>

<h4>
	2. لغات البرمجة (أساسية)
</h4>

<p>
	يجب أن يكون لديك القدرة على البرمجة بإحدى <a href="https://academy.hsoub.com/programming/general/%D9%84%D8%BA%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">لغات البرمجة</a> وتحديدًا لغة بايثون، وهي كافية لتطوير مختلف تطبيقات الذكاء الاصطناعي بمختلف تخصصاته.
</p>

<h4>
	3. الخوارزميات وهياكل البيانات (متوسطة)
</h4>

<p>
	<a href="https://academy.hsoub.com/programming/general/%D9%87%D9%8A%D8%A7%D9%83%D9%84-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-data-structures/" rel="">هياكل البيانات Data structure</a> هي تنظيم وإدارة وتخزين البيانات بطريقة تتيح الوصول والتعديل الفعّال مثل المصفوفات Arrays، والقوائم المترابطة Linked list والمكدس Stack …إلخ.
</p>

<p>
	أما <a href="https://wiki.hsoub.com/Algorithms" rel="external" target="_blank">الخوارزمية</a> فهي عبارة عن مجموعة من الخطوات لحل مشكلة معينة، ومن خلال فهم الخوارزميات وهياكل البيانات وكيفية بنائها، يمكننا كتابة برامج وتطبيقات فعّالة.
</p>

<h4>
	4. أنظمة التشغيل (أساسية)
</h4>

<p>
	يجب أن يكون لديك مهارة أساسية في التعامل مع نظامي التشغيل ويندوز لا نقول أن تكون خبيرًا بهما بل يكفي تعلم الأمور الأساسية وتحديدًا كيفية استعمال سطر الأوامر وتشغيل الخدمات الخلفية وإيقافها وإدارة العمليات وغيرها.
</p>

<p>
	وننصحك هنا بالرجوع إلى كتاب أنظمة التشغيل للمبرمجين الذي يجب على كل مبرمج قراءته ليحيط بما يلزمه من معلومات وتفاصيل عن نظام التشغيل.
</p>
<iframe allowfullscreen="" class="ipsEmbed_finishedLoading" data-controller="core.front.core.autosizeiframe" data-embedauthorid="3889" data-embedcontent="" data-embedid="embed4144205756" src="https://academy.hsoub.com/files/24-%D8%A3%D9%86%D8%B8%D9%85%D8%A9-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D9%84%D9%84%D9%85%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D9%86?do=embed" style="margin: auto; overflow: hidden; height: 473px; max-width: 502px;"></iframe>

<h4>
	5. حل المشكلات وتطبيقها باستخدام البرمجة الحاسوبية (متوسطة)
</h4>

<p>
	حل المشكلات هو عملية تحويل وصف المشكلة إلى حل باستخدام معرفتنا بمجال المشكلة والاعتماد على قدرتنا على اختيار واستخدام استراتيجيات وتقنيات وأدوات مناسبة لحل المشكلات. يمكنك الاطلاع على مقالة <a href="https://academy.hsoub.com/programming/general/%D8%AD%D9%84-%D8%A7%D9%84%D9%85%D8%B4%D9%83%D9%84%D8%A7%D8%AA-%D9%88%D8%A3%D9%87%D9%85%D9%8A%D8%AA%D9%87%D8%A7-%D9%81%D9%8A-%D8%A7%D8%AD%D8%AA%D8%B1%D8%A7%D9%81-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-r760/" rel="">حل المشكلات وأهميتها في احتراف البرمجة</a>.
</p>

<p>
	لمزيد من التفصيل، يمكنك الرجوع إلى مقال <a href="https://academy.hsoub.com/programming/general/%D8%B9%D9%84%D9%88%D9%85-%D8%A7%D9%84%D8%AD%D8%A7%D8%B3%D9%88%D8%A8/" rel="">المدخل الشامل لتعلم علوم الحاسوب</a>.
</p>

<h3>
	الرياضيات
</h3>

<p>
	الرياضيات هي أساس العلوم العلمية، وبالتأكيد هي الأساس الذي انطلق منه الذكاء الصناعي لذا ستحتاج إلى معرفة بعض أساسيات الرياضيات على الأقل للخوض في مجال الذكاء الاصطناعي والتي تشمل:
</p>

<ol>
	<li>
		الجبر الخطي
	</li>
	<li>
		التفاضلات
	</li>
	<li>
		التحليل العددي
	</li>
	<li>
		الرياضيات المتقطعة
	</li>
</ol>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		غالبًا أنهيت مرحلة الدراسية الأساسية وربما الثانوية أو دخلت أروقة الجامعة، وقد درست في تلك المراحل الكثير من الرياضيات وتلك المعلومات التي درستها كافية للبناء عليها ولبدء تعلم الذكاء الاصطناعي ويمكنك بعدها تعلم ما يعترضك من مفاهيم رياضية لاحقًا.
	</p>
</blockquote>

<h3>
	الاحتمالات والإحصاء
</h3>

<p>
	تعمل الاحتمالات والإحصائيات كأساس للتحليل والتعامل مع البيانات وتقييم نماذج الذكاء الصناعي، كما أنها أساس للعديد من الخوارزميات فيه (<a href="https://ar.wikipedia.org/wiki/%D8%A7%D9%84%D9%85%D8%B5%D9%86%D9%81_%D8%A8%D8%A7%D9%8A%D8%B2_%D8%B3%D8%A7%D8%B0%D8%AC" rel="external nofollow" target="_blank">خوارزمية بايز</a> مثلًا). يمكن أن تجيب الاحتمالات والإحصاءات على أسئلة مثل: ما هي النتيجة الشائعة؟ ما هي النتيجة المتوقعة؟ كيف تبدو البيانات؟ وغيرها من الأسئلة.
</p>

<h2>
	تعلم استعمال أدوات الذكاء الاصطناعي
</h2>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="126046" href="https://academy.hsoub.com/uploads/monthly_2023_05/1305170916_.png.f515524ce6fe43afe3a0883004aa30a2.png" rel=""><img alt="تعلم الذكاء الاصطناعي" class="ipsImage ipsImage_thumbnailed" data-fileid="126046" data-ratio="62.50" data-unique="7fq8d2hw6" style="width: 800px; height: auto;" width="800" src="https://academy.hsoub.com/uploads/monthly_2023_05/.thumb.png.2532c44cf454e1560223e821a40207db.png"> </a>
</p>

<p>
	هناك العديد من أدوات الذكاء الصناعي التي يمكنك تعلمها والتي تساعدك في أتمتة عملك وتوفر وقتك في تطوير التطبيقات وزيادة كفاءتها ومن أشهرها:
</p>

<ul>
	<li>
		<strong>SciKit-Learn</strong>: التي تعد من أشهر <a href="https://academy.hsoub.com/programming/python/%D8%A3%D9%87%D9%85-10-%D9%85%D9%83%D8%AA%D8%A8%D8%A7%D8%AA-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-%D8%AA%D8%B3%D8%AA%D8%AE%D8%AF%D9%85-%D9%81%D9%8A-%D8%A7%D9%84%D9%85%D8%B4%D8%A7%D8%B1%D9%8A%D8%B9-%D8%A7%D9%84%D8%B5%D8%BA%D9%8A%D8%B1%D8%A9-r654/" rel="">مكتبات بايثون</a> في مجال الذكاء الاصطناعي وهي مبنية على مكتبة SciPy التي توفر العديد من خوارزميات تعلم الآلة وهي تناسب المبتدئين وتسهل عملهم بشكل كبير.
	</li>
	<li>
		<strong>TensorFlow</strong>: مكتبة مفتوحة المصدر ومتوافقة مع بايثون طورتها جوجل وهي تسهل عمليات الحساب العددي وتستخدم في العديد من مهام الذكاء الاصطناعي وتعلم الآلة والشبكات العصبية.
	</li>
	<li>
		<strong>PyTorch</strong>: مكتبة بايثون طورتها فيسبوك وتسرع عملية تطوير تطبيقات الرؤية الحاسوبية ومعالجة اللغات الطبيعية.
	</li>
	<li>
		<strong>CNTK</strong>: تعد واحدة من أفضل أدوات الذكاء الاصطناعي من مايكروسوفت وهي مشابهة لـ TensorFlow وتملك العديد من واجهات <a href="https://academy.hsoub.com/programming/general/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA/" rel="">برمجة التطبيقات</a> <abbr title="Application Programming Interface | واجهة برمجية"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr> للغات بايثون وجافا و C++‎ و C
	</li>
	<li>
		<strong>Caffe</strong>: مكتبة بايثون مفتوحة المصدر تساعد في تطبيقات الذكاء الاصطناعي وتناسب بشكل خاص مشاريع البحث الأكاديمي والتطبيقات الصناعية المتقدمة لكونها تتميز بسرعة المعالجة.
	</li>
	<li>
		<strong>Keras</strong>: مكتبة مبنية على TensorFlow وتوفر واجهة بايثون وهي واحدة من أفضل أدوات الذكاء الاصطناعي مفتوحة المصدر المستخدمة اليوم.
	</li>
</ul>

<p>
	إلى جانب العديد من أدوات الذكاء الاصطناعي التي يمكنك تعلمها مثل OpenNN و Google ML kit و Theano و Swift AI و AutoML و H2O التي تصلح لتطبيقات متنوعة، اختر من بينها ما يناسب احتياجاتك.
</p>

<h2>
	مجالات الذكاء الاصطناعي
</h2>

<p>
	إذا قررت تعلم الذكاء الصناعي ستلاحظ أنه علم واسع ومتشعب ويتفرع عنه عدة مجالات أو علوم فرعية وفيما يلي نذكر لك من باب الاطلاع أهم هذه المجالات.
</p>

<ul>
	<li>
		تعلم الآلة Machine learning
	</li>
	<li>
		التعلم العميق Deep Learning
	</li>
	<li>
		معالجة اللغات الطبيعية Natural Language Processing
	</li>
	<li>
		علم الروبوتات Robotics
	</li>
	<li>
		الشبكات العصبية الاصطناعية Artificial Neural Networks
	</li>
	<li>
		المنطق الترجيحي أو الضبابي Fuzzy Logic
	</li>
	<li>
		الأنظمة الخبيرة Expert systems
	</li>
</ul>

<p>
	لا تقلق إن بدت لك التسميات مربكة وصعبة فبعد أن تنتهي من مرحلة تعلم الأساسيات وتبدأ بالتطبيق العملي ستتوضح لك هذه المصطلحات بشكل أفضل وإليك وصفًا سريعًا لكل مجال من هذه المجالات وأهم استخداماته وتطبيقاته:
</p>

<h3>
	تعلم الآلة Machine learning
</h3>

<p>
	يركز هذا المجال على بناء أنظمة تدرب الآلة على بيانات قديمة ومعروفة والاعتماد عليها من أجل إصدار التنبؤات والقرارات بناءً على بيانات جديدة لم يتم التدرب عليها مسبقًا فهو يمكّن الآلة من التعلم وتطوير نفسها من مجموعات تجارب السابقة دون الحاجة إلى برمجة صريحة. على سبيل المثال يستخدم تطبيق خرائط جوجل كافة البيانات السابقة للأشخاص الذين سلكوا مسارًا معينًا كي يتنبأ بحركة المرور القادمة على هذا المسار وتطبيق DeepFace التابع لفيسبوك والذي يتعرف على الوجوه ويحدد الأشخاص الموجودين في صورة ما بناء على صور سابقة مخزنة لهم.
</p>

<h3>
	التعلم العميق Deep Learning
</h3>

<p>
	التعلم العميق هو فرع أكثر تخصصًا من التعلم الآلي ففي التعلم الآلي تحدد الميزات التي نريد تصنيف البيانات بناء عليها بشكل مسبق أما في التعلم العميق تتولى الآلة عملية استخراج الميزات ذات الصلة تلقائيًا، وهو يستخدم بنية خاصة تسمى الشبكات العصبية والتي تتكون من عدة طبقات لذا يسمى تعليم عميق.
</p>

<p>
	في هذا المجال يتم تدريب الآلة على مجموعة كبيرة من البيانات المصنفة والتعرف على مميزاتها مباشرة والاعتماد عليها في تصنيف البيانات المستقبلية بدقة عالية، وهو يستخدم في عدة مجالات مثل السيارات ذاتية القيادة للتعرف على الكائنات المحيطة وتمييزها مثل المشاة وإشارات المرور.
</p>

<h3>
	معالجة اللغات الطبيعية Natural Language Processing
</h3>

<p>
	يهتم هذا الفرع من فروع الذكاء الاصطناعي على جعل الآلة قادرة على فهم لغاتنا البشرية الطبيعية، ومن الأمثلة الشهيرة على تطبيقات هذا الفرع برامج روبوتات الدردشة، لا بد وأنك قد سمعت في الآونة الأخيرة عن <a href="https://academy.hsoub.com/apps/web/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%A8%D9%88%D8%AA-%D8%A7%D9%84%D9%85%D8%AD%D8%A7%D8%AF%D8%AB%D8%A9-%D8%A7%D9%84%D8%B0%D9%83%D9%8A-%D8%B4%D8%A7%D8%AA-%D8%AC%D9%8A-%D8%A8%D9%8A-%D8%AA%D9%8A-chatgpt-r863/" rel="">ChatGPT</a>.
</p>

<h3>
	علم الروبوتات Robotics
</h3>

<p>
	هذا المجال يجمع بين الهندسة الميكانيكية والكهربائية والتقنية ويتخصص في تطوير الروبوتات. والروبوت هو آلة قابلة للبرمجة تؤدي وظائف تشبه إلى حد كبير وظائف البشر ويمكن استثمارها في أي صناعة تقريبًا وعلى أي مستوى من الاستخدام فهناك روبوتات تستخدم في صناعة السيارات والتنظيف والطب وغيرها.
</p>

<p>
	<strong>ملاحظة</strong>: هناك روبوتات برمجية تسمى برامج الروبوت وهي برامج حاسوبية تنفذ المهام بشكل مستقل ومثال عليها روبوتات الدردشة الذي ذكرناه سابقًا لكن هذه الروبوتات لا تندرج ضمن هذا المجال لكونها لا تملك هيكل مادي فهي تنشأ داخل جهاز حاسوب وتتواجد على شبكة الإنترنت فقط.
</p>

<h3>
	الشبكات العصبية الاصطناعية Artificial Neural Networks
</h3>

<p>
	الشبكات العصبية الاصطناعية أو اختصارًا الشبكات العصبية هي أحد الفروع التخصصية للتعلم العميق والشبكة العصبية ماهي إلا مجموعة من الخوارزميات المنفذة بشكل يحاكي الدماغ البشري والتي تتكون من مجموعة من (العقد المتصلة التي تسمى الخلايا العصبية الصناعية والتي تشبه الخلايا العصبية للدماغ البشري.
</p>

<p>
	عندما تتعلم طريقة استخدام الشبكات العصبية ستتمكن من بناء تطبيقات متنوعة مثل التعرف على الصور والأصوات والوجوه والتحقق من صحة التوقيع اليدوي لشخص ما وتستخدم كذلك في توقعات سوق الأسهم وفي الكشف عن الأمراض في صور الأشعة السينية والأشعة المقطعية وغيرها الكثير من التطبيقات.
</p>

<h3>
	المنطق الترجيحي أو الضبابي Fuzzy Logic
</h3>

<p>
	المنطق الضبابي هو تقنية حسابية تعتمد على استخدام الترجيح لاتخاذ القرار ويمكنه الاعتماد على معلومات إدخال غير دقيقة أو فيها بعض الأخطاء، وكلمة Fuzzy تعني أمر غير مؤكد أو غير محدد وهي تختلف عن المنطق الحاسوبي الذي يعطي نتيجة محددة إما 1 أي صواب أو 0 أي خطأ فهو يعطي إجابة قريبة من الحقيقة بدرجة معينة.
</p>

<p>
	على سبيل المثال إذا كان لديك سؤال تريد الإجابة عليه بالمنطق الضبابي فلن تحصل على إجابة أكيدة إما نعم أو لا وستكون الإجابة التي ستحصل عليها من من قبيل ربما نعم أو ربما لا أو بالتأكيد لا.
</p>

<p>
	يستخدم المنطق الضبابي في العديد من التطبيقات مثل ضبط حرارة مكيفات الهواء وفق درجة الحرارة المحيطة والتحكم في مياه الغسالات حسب حجم الملابس ودرجة اتساخها ونوع الأوساخ وما إلى ذلك.
</p>

<h3>
	الأنظمة الخبيرة Expert systems
</h3>

<p>
	الأنظمة الخبيرة هي تطبيقات حاسوبية مخصصة لحل المشكلات المعقدة في مجال معين بطريقة تحاكي الخبراء من البشر فهي أنظمة تحسن أداءها بمرور الوقت لأنها تكتسب المزيد من الخبرة تمامًا كما يفعل البشر لكنها تتميز عنا نحن البشر في كونها أكثر دقة في النتائج فهي لا ترتكب الأخطاء البشرية من سهو ونسيان ولا تطلق أحكامها بناء على العواطف بل على الحقائق فقط.
</p>

<p>
	تستخدم الأنظمة الخبيرة في أي مجال يحتاج لاستخدام الآلات في إطلاق الأحكام أو التنبؤات بدلًا من البشر مثل اكتشاف أعطال المركبات والتحكم في إشارات المرور واستنتاج أسباب الأمراض وتوقع عمليات الاحتيال والمعاملات المشبوهة …إلخ.
</p>

<p>
	وهناك بعض التخصصات الأخرى التي تتداخل مع الذكاء الصناعي إلى حد كبير جدًا، لكنها لا تعتبر فرعًا من فروع الذكاء الصناعي مثل: الرؤية الحاسوبية و<a href="https://academy.hsoub.com/programming/general/%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA/" rel="">علم البيانات</a>. وكنا قد تحدثنا عن هذه الفروع بشيء من التفصيل في مقالة <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D9%85%D8%AC%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">مجالات الذكاء الاصطناعي</a> فارجع إليها لمزيد من التفصيل.
</p>

<h2>
	خريطة تعلم الذكاء الاصطناعي
</h2>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="126045" href="https://academy.hsoub.com/uploads/monthly_2023_05/1742758553_.png.4f494dfe7b6ca2ca7da82cf587f838b7.png" rel=""><img alt="خريطة تعلم الذكاء الاصطناعي" class="ipsImage ipsImage_thumbnailed" data-fileid="126045" data-ratio="62.56" data-unique="mbei9chhu" style="width: 900px; height: auto;" width="900" src="https://academy.hsoub.com/uploads/monthly_2023_05/.thumb.png.2eb9b234b0aa120b81e5cf9a00c2603c.png"> </a>
</p>

<p>
	أحد أكبر الأسباب التي تجعل الناس يبتعدون عن مجال الذكاء الاصطناعي هو أنهم لا يعرفون من أين يبدؤون ولا يجدون المصادر الجيدة باللغة العربية كما أن هناك الكثير من المصطلحات الصعبة نسبيًا والتي تعترض طريقهم عندما يبحثون عن موارد لتعلم الذكاء الاصطناعي وتجعلهم يشعرون بالإحباط في البداية.
</p>

<p>
	عمومًا، يمكنك أن تتعلم المجال إما بدخول أروقة الجامعة وهو الطريق الأطول الذي يأخذ عدة سنوات ولا توفر أغلب الجامعات تعلم مجال الذكاء الاصطناعي من البداية بل يكون ضمن برامج الماجستير والدراسات العليا، عدا عن التركيز على الجانب النظري والتقنيات القديمة في ظل التسارع الرهيب لمجال علوم الحاسوب عمومًا والذكاء الاصطناعي خصوصًا، وقد فصلنا هذه النقطة في فقرة "طرق لتعلم البرمجة" من مقال <a href="https://academy.hsoub.com/programming/general/%D9%83%D9%8A%D9%81-%D8%AA%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D9%86%D8%B5%D8%A7%D8%A6%D8%AD-%D9%88%D8%A3%D8%AF%D9%88%D8%A7%D8%AA-%D9%84%D8%B1%D8%AD%D9%84%D8%AA%D9%83-%D9%81%D9%8A-%D8%B9%D8%A7%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-r206/#%D8%B7%D8%B1%D9%82-%D9%84%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9" rel="">كيف تتعلم البرمجة: نصائح وأدوات لرحلتك في عالم البرمجة</a> أو يمكنك الاعتماد على الدورات البرمجية والمخيمات البرمجية والكتب المتخصصة لتعلم المجال منها خصوصًا، وهذا الأسلوب أقصر وأكثر عملية وأسرع للدخول في سوق العمل.
</p>

<p>
	سنعطيك الآن خارطة طريق ومصادر تعلم الذكاء الاصطناعي يمكنك من خلالها بدء رحلتك بسهولة لتعلم الذكاء الصناعي. هنا لا أقول أنه طريق سحري؛ بمجرد إنهائه تختم المجال، لا إطلاقًا، إنما هو طريق مناسب جدًا للدخول في هذا المجال.
</p>

<h3>
	1. تمكن من الأساسيات
</h3>

<p>
	هذا يشمل مبادئ علوم الحاسب والرياضيات والاحتمالات والإحصاء. لقد أشرنا إلى الأساسيات في القسم السابق، فبالنسبة للرياضيات وما يتعلق بها، فغالبًا قد أنهيت الثانوية أو على وشك إنهائها ودرست بالفعل الرياضيات وهذا كافٍ للانطلاق.
</p>

<p>
	بالنسبة لتخصص علوم الحاسوب، تحتاج إلى فهم الحواسيب وعملها وأساسيات التعامل معها والتعامل مع أنظمة التشغيل وكيفية برمجتها وكتابة برامج لها …إلخ، وإن كنت مهتمًا بالحواسيب منذ صغرك وتعرف كيفية التعامل مع أنظمة التشغيل فيمكنك تخطي هذه الخطوة وبدء تعلم أساسيات لغة برمجة.
</p>

<p>
	يمكنك أيضًا البدء مع <a href="https://academy.hsoub.com/learn/computer-science/" rel="">دورة علوم الحاسب</a> التي يقدّمها نخبة من المطورين والمبرمجين في أكاديمية حسوب والذين يتابعون تقدمك في كل مرحلة ويجيبون على أي سؤال في حال واجهت مشكلة أو كان لديك استفسار أو طلبت شرحًا إضافيًّا، وتتضمن هذه الدورة كل ماتحتاجه لتصبح على معرفة واسعة بعلوم الحاسب، وهذا يتضمن: مكونات الحاسب، أساسيات البرمجة، لغات البرمجة، البرمجة الكائنية، الخوارزميات وهياكل البيانات، أنظمة التشغيل، <a href="https://academy.hsoub.com/devops/servers/databases/%D9%82%D9%88%D8%A7%D8%B9%D8%AF-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-database/" rel="">قواعد البيانات</a>، الويب، تصميم البرمجيات وغيرها.
</p>

<p style="text-align: center;">
	<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" frameborder="0" height="450" id="ips_uid_7506_5" src="https://academy.hsoub.com/applications/core/interface/index.html" title="YouTube video player" width="800" data-embed-src="https://www.youtube.com/embed/EkvUFDevMlM"></iframe>
</p>

<p>
	أما بالنسبة للإحصاء والاحتمالات فمعظمها يُفترض أن تكون تلقيته خلال دراستك الثانوية. عمومًا هناك الكثير من الدورات والمراجع المتوفرة على الإنترنت يمكنك الرجوع إليها.
</p>

<h3>
	2. تعلم أساسيات البرمجة ومفاهيمها
</h3>

<p>
	ستحتاج إلى كتابة الشيفرات وبرمجة التطبيقات لذا وقبل البدء مباشرة بتعلم لغة البرمجة -والتي غالبًا ستكون بايثون- وتصعيب المهمة عليك لأنك ستتعلم لغة البرمجة ومفاهيم البرمجة في الوقت نفسه، ابدأ بتعلم مفاهيم البرمجة وأساسياتها أولًا والتي تجدها في كل لغات البرمجة وبذلك يسهل عليك تعلم استخدام أي لغة برمجة أخرى مهام كانت سهلة أو صعبة.
</p>

<p>
	أضع بين يديك مجموعة مقالات مناسبة بهذا الصدد يمكنك الرجوع لها:
</p>

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-r662/" rel="">دليلك الشامل إلى تعلم البرمجة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">تعلم أساسيات البرمجة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%83%D9%8A%D9%81-%D8%AA%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D9%86%D8%B5%D8%A7%D8%A6%D8%AD-%D9%88%D8%A3%D8%AF%D9%88%D8%A7%D8%AA-%D9%84%D8%B1%D8%AD%D9%84%D8%AA%D9%83-%D9%81%D9%8A-%D8%B9%D8%A7%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-r206/" rel="">كيف تتعلم البرمجة: نصائح وأدوات لرحلتك في عالم البرمجة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%AF%D9%84%D9%8A%D9%84%D9%83-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-r1726/" rel="">دليلك الشامل إلى أنواع البيانات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%87%D9%8A%D8%A7%D9%83%D9%84-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-data-structures/" rel="">تعرف على هياكل البيانات Data Structures</a>
	</li>
</ul>

<h3>
	3. تعلم لغة بايثون
</h3>

<p>
	لغة بايثون هي اللغة الأساسية والأقوى لتطوير تطبيقات تعلم الآلة والذكاء الصناعي، يمكنك بالطبع تعلم لغات برمجة أخرى مثل جافا Java و C++‎ إلا أن لغة بايثون تعد من أفضل لغات الذكاء الصناعي بسبب المزايا العديدة التي تقدمها مثل وفرة مكتباتها وسهولة كتابة تعليماتها البرمجية ودعم المجتمع والمرونة والاستقلالية والسرعة.
</p>

<p>
	يمكنك تعلّم لغة بايثون من خلال <a href="https://academy.hsoub.com/learn/python-application-development/" rel="">دورة تطوير التطبيقات باستخدام لغة Python الشاملة</a> من أكاديمية حسوب التي تبدأ معك من الصفر حيث تعلمك أساسيات البرمجة وحتى احترافها بلغة بايثون، ثم تعلمك أساسيات الذكاء الاصطناعي وتعلم الآلة بإنشاء تطبيقات عملية تضيفها في معرض أعمالك، كما أن الدورة تضمن لك دخول سوق العمل بعد التخرج مباشرةً.
</p>

<p style="text-align: center;">
	<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" frameborder="0" height="450" id="ips_uid_7506_6" src="https://academy.hsoub.com/applications/core/interface/index.html" title="YouTube video player" width="800" data-embed-src="https://www.youtube.com/embed/1niwEWY7CN4"><br>
	</iframe>
</p>

<h3>
	4. تعلم مفاهيم الذكاء الاصطناعي
</h3>

<p>
	بالتزامن مع دورة بايثون سالفة الذكر، يمكنك البدء بقراءة كتاب <span ipsnoautolink="true">مدخل إلى الذكاء الاصطناعي وتعلم الآلة وهو من أهم مصادر تعلم الذكاء الاصطناعي </span>تتعرف من خلاله أكثر على أساسيات علم الذكاء الاصطناعي وتعلم الآلة وتتعرف على أهم مصطلحاته وتطبيقاته في حياتنا اليومية.
</p>
<iframe allowfullscreen="" class="ipsEmbed_finishedLoading" data-controller="core.front.core.autosizeiframe" data-embedauthorid="3889" data-embedcontent="" data-embedid="embed4728447483" src="https://academy.hsoub.com/files/17-%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-%D9%88%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9/?do=embed" style="overflow: hidden;height: 473px;max-width: 502px;margin: auto;"></iframe>

<p>
	ويمكنك الاطلاع على العديد من الدروس والمقالات المتنوعة الخاصة بالذكاء الصناعي في <a href="https://academy.hsoub.com/programming/artificial-intelligence/" rel="">قسم الذكاء الصناعي</a> في أكاديمية حسوب.
</p>

<h3>
	5. تعلم المكتبات وأطر العمل الأساسية
</h3>

<p>
	توفر لك المكتبات وأطر العمل طرقًا مختصرة للعمل في مشاريع الذكاء الاصطناعي وهنا لن تحتاج إلى تعلم جميع أُطر ومكتبات الذكاء الصناعي بالطبع، فالأمر يعتمد على الفرع والمواضيع التي ترغب بالتخصص فيها. وإليك بعض هذه الأطر والمكتبات ومجال استخدامها:
</p>

<ul>
	<li>
		<strong>لبناء الشبكات العصبية</strong>: تنسرفلو TensorFlow وكيراس Keras وباي تورش PyTorch. غالبًا يكفي أن تتعلم واحدة منها، وكمبتدئ يكفي كيراس.
	</li>
	<li>
		<strong>لاستخدام خوارزميات تعلم الآلة</strong>: يمكنك استخدام مكتبة ساي كيت ليرن scikit-learn التي تتضمن تحقيقات لأهم خوارزميات تعلم الآلة، مثل خوارزمية التوقع الخطي وأشجار القرار.
	</li>
	<li>
		<strong>لتحليل وفهم البيانات وتوزيعها والعلاقات بينها</strong>: يمكنك الاعتماد على مكتبات بايثون، مثل: ماتبلوتليب Matplotlib وسيبورن Seaborn.
	</li>
</ul>

<h3>
	6. تعلم المعالجة المسبقة البيانات Data Preprocessing
</h3>

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

<p>
	تسمى هذه العمليات بالمعالجة المسبقة للبيانات وهي تحول البيانات الأولية إلى تنسيق مفهوم ومفيد وبجودة عالية وهي مهمة للغاية في مجال الذكاء الاصطناعي.
</p>

<h3>
	7. ابدأ بإنشاء المشاريع
</h3>

<p>
	عندما تحاول إتقان الذكاء الاصطناعي، فإن النظرية وحدها لا تكفي والنهج العملي سيعزز تعلمك ويعزز مهاراتك لذا لابد لك من البدء بإنشاء مشاريع برمجية في الذكاء الصناعي لكي تصبح متمرّسًا في هذا المجال. هنا أنصحك بقراءة كتاب <span ipsnoautolink="true">عشرة مشاريع عملية عن الذكاء الاصطناعي والذي يعد أيضًا من أهم مصادر تعلم الذكاء الاصطناعي العربية</span>، ستجد فيه العديد من المشاريع الخاصة بالذكاء الصناعي، وهي مناسبة جدًا للمبتدئين.
</p>
<iframe allowfullscreen="" class="ipsEmbed_finishedLoading" data-controller="core.front.core.autosizeiframe" data-embedauthorid="3889" data-embedcontent="" data-embedid="embed3087148303" src="https://academy.hsoub.com/files/29-%D8%B9%D8%B4%D8%B1%D8%A9-%D9%85%D8%B4%D8%A7%D8%B1%D9%8A%D8%B9-%D8%B9%D9%85%D9%84%D9%8A%D8%A9-%D8%B9%D9%86-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/?do=embed" style="overflow: hidden;height: 473px;max-width: 502px;margin: auto;"></iframe>

<p>
	وكي تطور فهمك لخوارزميات الذكاء الاصطناعي أكثر يمكنك بناء هذه الخوارزميات من الصفر، ابدأ بالمشروعات التي تتطلب خوارزميات بسيطة ثم نفذ مشاريع أصعب، وزد مستوى المهارة المطلوبة تدريجيًا.
</p>

<p>
	على سبيل المثال يمكنك تطوير خوارزمية يمكنها التنبؤ بالحالة المزاجية لأصدقائك بحسب منشوراته في وسائل التواصل الاجتماعي أو حالته على الواتس وترسل لهم رسالة للاطمئنان عليهم أو تفكر في أي تطبيق آخر مفيد لمجتمعك.
</p>

<h3>
	8. تقدم بطلب للحصول على تدريب
</h3>

<p>
	بعد الانتهاء من تلك عملية التعلم، سيكون الوقت قد حان للتقدّم للحصول على تدريب في شركة ما فالتدريب طريقة رائعة للحصول على بعض الخبرة الفعليّة وتسهيل البحث عن وظيفة مناسبة لاحقًا ولزيادة فرصك في الحصول على تدريب، يمكنك القيام بما يلي:
</p>

<ul>
	<li>
		أنشئ معرض أعمال يتضمن كافة مشاريع الذكاء الاصطناعي التي عملت عليها ووضح مساهمتك فيها.
	</li>
	<li>
		أخبر الأشخاص في شبكاتك المهنية والشخصية أنك تبحث عن تدريب (على لينكد إن مثلًا).
	</li>
	<li>
		احضر اللقاءات المحلية وهاكاثونات الذكاء الاصطناعي.
	</li>
	<li>
		حافظ على تحديث حساباتك في الشبكات المهنية.
	</li>
	<li>
		استعد للمقابلة دومًا وحضر إجاباتك على أكثر أسئلة مقابلات الذكاء الاصطناعي شيوعًا.
	</li>
</ul>

<h3>
	9. الحصول على عمل
</h3>

<p>
	غالبًا يوفر التدريب الخبرة والاتصالات المهنية التي تساعدك في الحصول على وظيفة لذا عند الانتهاء من تدريبك، تواصل مع جهات الاتصال التي طورتها لإعلامهم بأنك تبحث عن وظيفة دائمة.
</p>

<p>
	الجانب الأكثر قيمة عند التدرب في الشركات هو منحك فرصة لحل مشاكل العالم الحقيقي. تأكد من إبراز مشاريع الذكاء الاصطناعي التي عملت عليها خلال فترة التدريب عندما تناقش ذلك مع أصحاب العمل المحتملين، بما في ذلك المساهمات التي قدمتها.
</p>

<h3>
	10. اسأل ولا تتردد
</h3>

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

<p>
	يمكنك أيضًا أن تضيف سؤالًا في <a href="https://academy.hsoub.com/questions/c3-programming/" rel="">قسم الأسئلة والأجوبة</a> الذي توفره أكاديمية حسوب لتحصل على إجابة لسؤالك واستفسارك من مبرمجين آخرين ولتضمن لك الحصول على الدعم والمساعدة التي تحتاج إليها في بداية تعلمك.
</p>

<p>
	لاختصار كافة الخطوات السابقة وتعلم الذكاء الاصطناعي من الصفر حتى الاحتراف وفق طريقة منهجية ومنظمة، ننصحك بدورة الذكاء الاصطناعي من أكاديمية حسوب، ففيها كل ما تحتاجه لاحتراف هذا المجال الحيوي.
</p>

<div class="banner-container ipsBox ipsPadding">
	<div class="inner-banner-container">
		<p class="banner-heading">
			دورة الذكاء الاصطناعي
		</p>

		<p class="banner-subtitle">
			احترف برمجة الذكاء الاصطناعي AI وتحليل البيانات وتعلم كافة المعلومات التي تحتاجها لبناء نماذج ذكاء اصطناعي متخصصة.
		</p>

		<div>
			<a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://academy.hsoub.com/learn/artificial-intelligence" rel="">اشترك الآن</a>
		</div>
	</div>

	<div class="banner-img">
		<a href="https://academy.hsoub.com/learn/artificial-intelligence" rel=""><img alt="دورة الذكاء الاصطناعي AI" src="https://academy.hsoub.com/learn/assets/images/courses/artificial-intelligence.png"></a>
	</div>
</div>

<h2>
	نصائح لتعلم الذكاء الاصطناعي بسرعة
</h2>

<p>
	إن خيارات تعلم الذكاء الاصطناعي كثيرة متشعبة وكي لا تشعر بالتشتت والضياع إليك بعض النصائح التي تسرع عملية تعلمك وتمكنك من تحقيق نتائج ملموسة بزمن قصير:
</p>

<ul>
	<li>
		حدد من البداية هدفك من التعلم واختر مجال الذكاء الاصطناعي المناسب لك للتركيز عليه والتخصص به مما يعطيك فرص أكبر وأولوية للعمل به لاحقًا.
	</li>
	<li>
		اكتب كل ما تحتاج إلى تعلمه من الأساسيات التي ذكرناها في سياق المقال وضع خطة منهجية له وابدأ عملية التعلم والتزم بها قدر المستطاع.
	</li>
	<li>
		عزز ما تعلمته وطبقه على مشاريع عملية متدرجة في الصعوبة مستعينًا بالأدوات والأطر المناسبة التي تسرع عملك.
	</li>
	<li>
		حاول الحصول على تدريب عملي في إحدى الشركات أو المنظمات واعمل على مشاريع تحل مشاكل واقعية وتقدم قيمة فعلية.
	</li>
	<li>
		لا تستسلم إذا شعرت بالإحباط خلال إحدى مراحل التعلم فهذا أمر طبيعي، خذ فترة استراحة قصيرة وواصل ما بدأت به فالمجال واعد ومشرق ويستحق بذل الجهد.
	</li>
</ul>

<h2>
	أسئلة شائعة حول الذكاء الاصطناعي
</h2>

<h3>
	1. هل يمكنني تعلم الذكاء الاصطناعي بنفسي؟
</h3>

<p>
	نعم فبالرغم من كون الذكاء الاصطناعي مجالًا متقدمًا ويتضمن مفاهيم رياضية وبرمجية متقدمة لكن إذا كان لديك خطة واضحة للتعلم والتزمت بجدول زمني منتظم واتبعت كل النصائح التي وردت في سياق المقال فستتمكن بلا شك من تجاوز أي صعوبات وتعلمه بشكل ذاتي.
</p>

<h3>
	2. هل يمكن تعلم الذكاء الاصطناعي دون معرفة البرمجة؟
</h3>

<p>
	رغم توفر العديد من البيئات والأدوات المخصصة لحلول الذكاء الاصطناعي والتي لا تحتاج لكتابة شيفرات برمجية أو تتطلب كتابة القليل جدًا منها مثل Amazon SageMaker و DataRobot إلا أنه من الضروري أن تملك أساسًا في إحدى لغات البرمجة المختصة في الذكاء الاصطناعي مثل بايثون أو جافا أو C++‎ لتكون مهندس ذكاء اصطناعي محترف وتتمكن من حل أي مشكلة تواجهها بمرونة وكفاءة.
</p>

<h3>
	3. كم من الوقت يستغرق تعلم الذكاء الاصطناعي؟
</h3>

<p>
	يعتمد الجواب هنا على الخبرات الأساسية المسبقة المتاحة لديك ومدى قدرتك على التعلم لكن تعلم كافة أساسيات الذكاء الاصطناعي قد يحتاج منك حوالي ستة أشهر لعام تقريبًا بعدها يمكنك البدء في تنفيذ مشاريع بسيطة تناسب المبتدئين وتطور مستواك تدريجيًا.
</p>

<h3>
	5. ما هي مهارات تعلم الذكاء الاصطناعي؟
</h3>

<p>
	يجب أن يمتلك المتخصص في الذكاء الصناعي مجموعة من المهارات الشخصية إلى جانب مهاراته الفنية في البرمجة ومعرفته الجيدة في الرياضيات والإحصاء ولعل أبرزها التفكير النقدي والتحليلي والتواصل الفعال مع الآخرين والقدرة على اتخاذ القرارات.
</p>

<h3>
	4. أين أعثر على أفكار مشاريع في الذكاء الاصطناعي؟
</h3>

<p>
	إذا كنت ترغب في التدرب على مشاريع الذكاء الاصطناعي ولا تستطيع العثور على فكرة ملهمة فإليك بعض الاقتراحات لعشرة مشاكل يمكنك محاولة حلها باستخدام تقنيات الذكاء الاصطناعي.
</p>

<ol>
	<li>
		تصنيف التعليقات المزعجة أو المسيئة في المواقع
	</li>
	<li>
		اقتراح المنتجات الملائمة لاهتمامات العملاء
	</li>
	<li>
		التعرف على لغة الإشارة
	</li>
	<li>
		كشف الأخبار الكاذبة والمضللة
	</li>
	<li>
		تطبيق لتحليل السير الذاتية واختيار أفضل المرشحين
	</li>
	<li>
		كشف مشاهد العنف في الصور أو مقاطع الفيديو
	</li>
	<li>
		أداة التصحيح التلقائي للغة العربية
	</li>
	<li>
		التنبؤ بسعر المبيعات
	</li>
	<li>
		تطبيق التعرف على الوجه لفتح قفل الهاتف
	</li>
	<li>
		تطبيق للتنبؤ بالعمر
	</li>
</ol>

<p>
	وابحث وتابع صفحات ومنشورات ومواقع تتعلق بالمجال ومنها ستستلهم الكثير من الأفكار.
</p>

<h3>
	5. هل الذكاء الاصطناعي مطلوب في العالم العربي؟
</h3>

<p>
	نعم بكل تأكيد فالطلب على تخصص الذكاء الاصطناعي يزداد على مستوى العالم ككل وعلى مستوى الوطن العربي بشكل خاص وهو يدخل حيز التطبيق في كافة المجالات والقطاعات فإذا كان لديك شغف في تعلم الذكاء الاصطناعي أنصحك أن لا تضيع الوقت وتبدأ من الآن باستكشاف هذا المجال الثوري الذي سيكون سمة مميزة للعصر الحديث.
</p>

<h2>
	خاتمة
</h2>

<p>
	قدمنا في هذه المقالة دليلًا تفصيليًا سيساعدك على تعلم الذكاء الاصطناعي بالطريقة الحديثة. بدأنا بمقدمة أساسية للذكاء الاصطناعي وأشرنا إلى فروعه الواسعة. رأينا أيضًا المتطلبات الأساسية التي ستحتاجها قبل أن تبدأ بتعلم الذكاء الاصطناعي.
</p>

<p>
	ناقشنا خارطة طريق مفصلة يمكنك اعتمادها لتبدأ بسلاسة رحلة تعلم الذكاء الصناعي؛ بدأنا بأساسيات الذكاء الاصطناعي التي تضم جميع المفاهيم المهمة والموضوعات المطلوبة التي يجب أن تتعلمها لضمان رحلة سلسة. تحدثنا أيضًا عن أهم فروع الذكاء الصناعي والنصائح التي تساعدك على تعلمه بسرعة.
</p>

<p>
	لا شك أن الذكاء الاصطناعي مجال واسع ومربك بسبب المصطلحات التقنية الكثيرة التي تصادفها ونأمل أن يكون هذا الدليل البسيط قد ساعدك في تكوين فهم واضح عنه ومهد لك طريق التعلم وأجاب عن كافة تساؤلاتك حوله.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%AD%D8%A7%D8%B3%D9%88%D8%A8-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-r1956/" rel="">برمجة الحاسوب للمبتدئين</a>
	</li>
	<li>
		 <a href="https://academy.hsoub.com/learn-programming/" rel="">تعلم البرمجة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D9%85%D8%B3%D8%AA%D9%82%D8%A8%D9%84-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">مستقبل الذكاء الاصطناعي</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D9%81%D9%88%D8%A7%D8%A6%D8%AF-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-r2247/" rel="">فوائد الذكاء الاصطناعي</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">1986</guid><pubDate>Sat, 13 May 2023 13:00:00 +0000</pubDate></item><item><title>&#x623;&#x646;&#x648;&#x627;&#x639; &#x627;&#x644;&#x630;&#x643;&#x627;&#x621; &#x627;&#x644;&#x627;&#x635;&#x637;&#x646;&#x627;&#x639;&#x64A;</title><link>https://academy.hsoub.com/programming/artificial-intelligence/%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_05/--.png.7b53cf91b9d8a32ae1ca37caf018aada.png" /></p>
<p>
	إن النمو السريع للذكاء الاصطناعي وتطبيقاته وقدراته القوية جعلت الناس يشعرون بالرهبة بشأن حتمية نجاح ثورة الذكاء الاصطناعي وقرب دخولها في كافة أشكال الحياة. كما أن التحول الذي أحدثه الذكاء الاصطناعي في الصناعات المختلفة جعل قادة الأعمال والعامة يعتقدون أننا على وشك تحقيق ذروة أبحاث الذكاء الصناعي والوصول إلى أعظم إمكانات الذكاء الصناعي، وهذا غير دقيق تمامًا. هنا يأتي دور معرفة وفهم أنواع الذكاء الاصطناعي الممكنة والأنواع الموجودة الآن على أرض الواقع؛ إن معرفة أنواع الذكاء الصناعي سيعطي صورة أوضح لقدرات الذكاء الصناعي الحالية والطريق الطويل الذي ينتظر أبحاث الذكاء الصناعي.
</p>

<p>
	إن أنواع الذكاء الصناعي هي تقسيمات لها طابع فلسفي أكثر من أي شيءٍ آخر، لذا عند الحديث عن أنواع الذكاء الاصطناعي، لابد من العودة بالزمن للخلف والنظر في المسائل المتعلقة بالذكاء الاصطناعي والتي حاول الفلاسفة حلها، مثل: كيف يعمل العقل؟ هل يمكن للآلات أن تتصرف بذكاء كما البشر؟ وإذا تصرفت كالبشر هل سيكون لديهم عقول حقيقية واعية أو مدركة؟ ما هي التداعيات الأخلاقية للآلات الذكية؟
</p>

<p>
	وفقَا للفلاسفة، إن الإشارة إلى إمكانية تصرّف الآلات كما لو كانت ذكية يسمى فرضية الذكاء الاصطناعي الضعيفة Weak AI، أما الإشارة إلى أن تلك الآلات التي تتصرف بذكاء يمكنها التفكير أيضًا (وليس مجرد محاكاة التفكير) يسمى فرضية الذكاء الاصطناعي القوية Strong AI. يعتبر معظم الباحثين في مجال الذكاء الاصطناعي؛ أن فرضية الذكاء الاصطناعي الضعيفة أمرًا مفروغًا منه، ولا يهتمون بفرضية الذكاء الاصطناعي القوية، فطالما أن برنامجهم يعمل، فهم لا يهتمون بما إذا كنت تسميها محاكاة للذكاء أو ذكاء حقيقي.
</p>

<p>
	إن المصطلحان الذكاء الصناعي الضعيف والذكاء الاصطناعي القوي يمثلان أول نوعين ظهرا من الذكاء الصناعي، أما لاحقًا فقد ظهرت أنواع جديدة وفئات سنتعرّف عليها بالتفصيل في هذه المقالة.
</p>

<p>
	تجدر الإشارة بدايةً إلى أن هذه المقالة هي جزء من سلسلة مقالات متعلقة بالذكاء الاصطناعي، حيث بدأنا السلسلة بإلقاء نظرة موجزة شاملة على كل مايتعلق بهذا العلم في مقالة <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">الذكاء الاصطناعي: دليلك الشامل</a> وسنتحدث في هذا المقال بالتفصيل عن أنواع الذكاء الاصطناعي.
</p>

<h2>
	أنواع الذكاء الاصطناعي
</h2>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="124809" href="https://academy.hsoub.com/uploads/monthly_2023_05/--.png.c3ea71fa43bed5b7af9c93aa1c06b6ac.png" rel=""><img alt="أنواع الذكاء الاصطناعي" class="ipsImage ipsImage_thumbnailed" data-fileid="124809" data-ratio="30.78" data-unique="kha7nqmc7" style="width: 900px; height: auto;" width="900" src="https://academy.hsoub.com/uploads/monthly_2023_05/--.thumb.png.610a061e20e9faab932359002d1a56b5.png"></a>
</p>

<p>
	نظرًا لأن أبحاث الذكاء الاصطناعي تهدف إلى جعل الآلات تحاكي الأداء البشري، فإن الدرجة التي يمكن لنظام الذكاء الاصطناعي أن يكرر بها القدرات البشرية تُستخدم كمعيار لتحديد أنواع الذكاء الاصطناعي. بالتالي اعتمادًا على كيفية مقارنة الآلة بالبشر من حيث التنوع والأداء، يمكن تصنيف الذكاء الاصطناعي إلى عدة أنواع الذكاء. في ظل هذا المبدأ، سيتم اعتبار الذكاء الاصطناعي الذي يمكنه أداء وظائف بشرية بمستويات متساوية من الكفاءة -كنوع أكثر تطورًا من الذكاء الاصطناعي، في حين أن الذكاء الاصطناعي الذي لديه وظائف وأداء محدود يعتبر نوعًا أبسط وأقل تطورًا.
</p>

<p>
	على وجه الدقة، فإن أنواع الذكاء الصناعي يمكن وضعها ضمن قسمين، الأول يعتمد على <strong>القدرات</strong> ومحاكاة التفكير البشري والثاني يعتمد على <strong>الوظيفية</strong>.
</p>

<h3>
	أنواع الذكاء الاصطناعي وفقًا لقدراته
</h3>

<p>
	أولى أنواع الذكاء الاصطناعي كانت مبنية على أساس القدرات، حيث قُسّم إلى ثلاث أنواع هي الذكاء الاصطناعي الضعيف والقوي والخارق.
</p>

<p>
	لنبدأ مع أول نوع من أنواع الذكاء الصناعي ضمن هذا القسم وهو الذكاء الصناعي الضعيف.
</p>

<h4>
	ذكاء اصطناعي ضعيف Weak AI: هل تستطيع الآلات التصرف بذكاء؟
</h4>

<p>
	للإجابة على هذا السؤال سنرجع في الزمن إلى المقترح البحثي الذي أنتج أول تعريف للذكاء الصناعي والذي قدّمه جون ماكرثي وفريقه <a href="https://ojs.aaai.org//index.php/aimagazine/article/view/1904" rel="external nofollow">(McCarthy et al., 1955)</a>، حيث أُكّد على أنه "يمكن وصف كل جانب من جوانب التعلم أو أي خاصيّة أخرى للذكاء بدقة بحيث يمكن صنع آلة لمحاكاته". بالتالي فإن الذكاء الاصطناعي تأسّس على افتراض أن الذكاء الاصطناعي الضعيف أمر ممكن. عمومًا أكّد البعض على أن الذكاء الاصطناعي الضعيف أمر مستحيل <a href="http://aima.cs.berkeley.edu/errata/aima-982.pdf" rel="external nofollow">(Sayre, 1993)</a>، لكن في العقد الأخير من الزمن أصبحنا نرى أنه ممكن.
</p>

<p>
	الآن وبعد أن أجبنا على السؤال الذي طرحناه في البداية (إمكانية التصرف بذكاء)؛ آن الأوان لنعطي تعريفًا يوضح الذكاء الاصطناعي الضعيف نفسه. لذا يمكننا القول بأن الذكاء الاصطناعي الضعيف هو الذكاء الصناعي الذي يتخصص في مجال واحد أو الذي يستطيع تنفيذ مهمة محددة فقط، فمثلاً هناك أنظمة ذكاء اصطناعي يمكنها التنبؤ بمرض محدد أو عدة أمراض لكن لا يمكنها توقع حالة الطقس. يُسمى هذا النوع أيضًا بالذكاء الاصطناعي الضيق Narrow AI أو الذكاء الاصطناعي المتخصص Specialized AI. عمومًا كلمة "ضعيف" تعني أن أنظمة الذكاء الاصطناعي هذه ليست قوية وغير قادرة على أداء مهام مفيدة، وهذا ليس هو الحال في وقتنا الحالي، فجميع التطبيقات الحالية للذكاء الاصطناعي تندرج تحت هذه الفئة والكثير منها يتفوق على البشر في المهام المحددة له (تسميتها بالضعيف أصبح غير دقيق).
</p>

<p>
	يمكننا توضيح الذكاء الصناعي الضعيف بالنقاط التالية:
</p>

<ol>
	<li>
		الذكاء الاصطناعي الأكثر شيوعًا من بين جميع أنواع الذكاء الصناعي الأخرى (والمتوفر حاليًا) هو الذكاء الاصطناعي الضعيف.
	</li>
	<li>
		لا يمكن للذكاء الصناعي الضعيف أن يتعدى مجاله أو حدوده، حيث يتم تدريبه على مهمة واحدة فقط (يفشل في أي مهمة أخرى).
	</li>
	<li>
		المساعد الشخصي الذكي سيري Siri هو مثال جيد عن هذا النوع، إضافةً إلى حاسوب واتسون Watson العملاق الخاص بشركة IBM أيضًا، حيث يستخدم نهج النظام الخبير جنبًا إلى جنب مع التعلم الآلي ومعالجة اللغة الطبيعية.
	</li>
	<li>
		من الأمثلة الأخرى على هذا النوع هي السيارات ذاتية القيادة، والتعرف على الكلام، والتعرف على الصور وتصنيف النصوص والترجمة الآلية …إلخ.
	</li>
</ol>

<div class="banner-container ipsBox ipsPadding">
	<div class="inner-banner-container">
		<p class="banner-heading">
			دورة الذكاء الاصطناعي
		</p>

		<p class="banner-subtitle">
			احترف برمجة الذكاء الاصطناعي AI وتحليل البيانات وتعلم كافة المعلومات التي تحتاجها لبناء نماذج ذكاء اصطناعي متخصصة.
		</p>

		<div>
			<a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://academy.hsoub.com/learn/artificial-intelligence" rel="">اشترك الآن</a>
		</div>
	</div>

	<div class="banner-img">
		<a href="https://academy.hsoub.com/learn/artificial-intelligence" rel=""><img alt="دورة الذكاء الاصطناعي AI" src="https://academy.hsoub.com/learn/assets/images/courses/artificial-intelligence.png"></a>
	</div>
</div>

<h4>
	ذكاء اصطناعي قوي Strong AI: هل يمكن للآلات أن تفكر؟
</h4>

<p>
	ثاني نوع ضمن هذا القسم من أنواع الذكاء الصناعي هو الذكاء الصناعي القوي. يمكن تعريف الذكاء الصناعي القوي (يُعرف أيضًا بالذكاء الصناعي العام General AI أو العميق Deep AI أو الكامل Full AI) على أنه الذكاء الصناعي الذي يمتلك قدرات عقلية وعمليات تفكير ووظائف مُكافئة للدماغ البشري. أي إنشاء آلات ذكية لا يمكن تمييزها عن العقل البشري.
</p>

<p>
	الفلاسفة هنا مهتمون بمشكلة مقارنة بنيتين: الإنسان والآلة، لذا طرحوا السؤال التالي "هل يمكن للآلات أن تفكر؟" هذا السؤال كان عليه العديد من الاعتراضات، فإمكانية تحقيق الذكاء الاصطناعي سيعتمد على كيفية تعريف الكلمة نفسها. <a href="https://www.edge.org/response-detail/26043" rel="external nofollow">قال عالم الحاسب Edsger Dijkstra</a> إن "مسألة ما إذا كانت الآلات تستطيع التفكير، يتعلق بمسألة ما إذا كانت الغواصات تستطيع السباحة". أول تعريف للسباحة في قاموس American Heritage هو "التنقل عبر الماء عن طريق الأطراف أو الزعانف أو الذيل"، وبالتالي فإن الغواصات وفقًا لهذا التعريف لايمكنها السباحة. يعرّف القاموس أيضًا الطيران بأنه "التنقل في الهواء عن طريق الأجنحة"، إلا أن معظم الناس يتفق على أن الطائرات يمكنها الطيران والغواصات يمكنها السباحة. من هنا نستنتج أن الأسئلة والإجابات ليست فكرة دقيقة لتوضيح تصميم أو قدرات الطائرات والغواصات؛ نفس الأمر ينطبق على موضوعنا.
</p>

<p>
	لقد <a href="https://phil415.pbworks.com/f/TuringComputing.pdf" rel="external nofollow">رفض آلان تورينج هذا السؤال "هل يمكن للآلات أن تفكر؟"</a> واستبدله باختبار سلوكي يُعرف <a href="https://en.wikipedia.org/wiki/Turing_test" rel="external nofollow">باختبار تورينج</a>. إلا أن العديد من الفلاسفة ادعوا أن الآلة التي تجتاز اختبار تورينج لن تفكر في الواقع، لكنها ستكون مجرد محاكاة للتفكير. إلا أن تورينج عاد وقدم العديد من الحجج التي تدعم كلامه، لكن لن ندخل فيها الآن. من هنا نجد أن البشر لا يمكنهم حتى الاتفاق على ماهية الذكاء والتفكير (حتى اللحظة هذه على الأقل)، وبالتالي من الصعب جدًا إعطاء معيار واضح لما يمكن اعتباره نجاحًا في تطوير الذكاء الاصطناعي القوي. يتضح لنا مما سبق أيضًا أن الذكاء الاصطناعي القوي هو نهج فلسفي أكثر منه نهج عملي.
</p>

<p>
	يمكننا توضيح الذكاء الصناعي القوي بالنقاط التالية:
</p>

<ol>
	<li>
		مصطلح يشير إلى فكرة وجود آلة ذات ذكاء عام يمكنها التعلم وتطبيق ذكائها لحل كل مشكلة.
	</li>
	<li>
		يمكن للذكاء الاصطناعي القوي أن يفكر ويستوعب ويتصرف بطريقة مكافئة للبشر، كما يمكنه أداء أي مهمة فكرية بكفاءة مثل الإنسان.
	</li>
	<li>
		في الوقت الحالي، لا يوجد مثل هذا النظام.
	</li>
	<li>
		يركز الباحثون في جميع أنحاء العالم الآن على تطوير الآلات باستخدام الذكاء الاصطناعي القوي.
	</li>
</ol>

<h4>
	ذكاء اصطناعي خارق Super AI
</h4>

<p>
	أخيرًا هناك مايُسمّى بالذكاء الاصطناعي الخارق وهو النوع الثالث من أنواع الذكاء الاصطناعي. يصف هذا المصطلح سيناريو يتحسن فيه الذكاء الاصطناعي ذاتيًا بطريقة متسارعة ويتجاوز الذكاء البشري -بعبارةٍ أخرى، يصبح ذكاءً خارقًا.
</p>

<p>
	يمكننا توضيح الذكاء الصناعي الخارق بالنقاط التالية:
</p>

<ol>
	<li>
		الذكاء الصناعي الخارق هو مستوى الأنظمة الذكية حيث يمكن للآلات فيه أن تتفوق على الذكاء البشري، ويمكن أن تؤدي أي مهمة بطريقة أفضل من الإنسان ذي الخصائص المعرفية. وهو نتيجة للذكاء الاصطناعي العام General AI.
	</li>
	<li>
		يتضمن الذكاء الصناعي الخارق أمورًا مثل الذكاء الحقيقي والتفكير والإدراك والوعي وحل الألغاز وإصدار الأحكام والتخطيط والتعلم والتواصل.
	</li>
	<li>
		يرتبط الذكاء الصناعي الخارق بمفهوم التفرد التكنولوجي، الذي يفترض أن الآلات فائقة الذكاء سوف تتفوق على الحضارة البشرية.
	</li>
	<li>
		لا يزال مفهومًا افتراضيًا للذكاء الاصطناعي.
	</li>
</ol>

<h3>
	أنواع الذكاء الاصطناعي وفقًا لوظيفته
</h3>

<p>
	يمكن تصنيف الذكاء الصناعي أيضًا وفقًا للوظيفة Functionality التي يؤديها، فيما يلي سنعرض هذه الأنواع الأربعة. نضع في البداية تعريفًا بسيطًا ثم نوضحه.
</p>

<h4>
	1. الآلات التفاعلية Reactive machines
</h4>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		"آلات قادرة على الاستجابة للمحفزات الخارجية في الوقت الفعلي Real time، ولكنها لا تمتلك أي ذاكرة لتخزين المعلومات لاستخدامها في المستقبل"
	</p>
</blockquote>

<p>
	يمثل هذا النوع أبسط أنواع الذكاء الصناعي وهي آلات تفاعلية بحتة ليس لديها ذاكرة ولاتُخزّن أيّة معلومات سابقة (تتفاعل وفقًا لمعطيات الموقف الحالي؛ لاتستخدم خبرتها السابقة). يُعتبر الحاسب العملاق <a href="https://www.ibm.com/ibm/history/ibm100/us/en/icons/deepblue/" rel="external nofollow">Deep Blue</a> من شركة IBM الذي يمتلك القدرة على لعب الشطرنج، <a href="https://ar.wikipedia.org/wiki/%D8%BA%D8%A7%D8%B1%D9%8A_%D9%83%D8%A7%D8%B3%D8%A8%D8%A7%D8%B1%D9%88%D9%81" rel="external nofollow">والذي تغلب على البطل العالمي غاري كاسباروف في عام 1997</a>، أفضل مثال لهذا النوع من الآلات.
</p>

<p>
	يستطيع الحاسب ديب بلو الذي يستخدم تقنيات الذكاء الصناعي -التعرف على القطع الموجودة على رقعة الشطرنج ومعرفة ودراسة كيفية تحرّك كل منها. يمكنه التنبؤ بأفضل الحركات التالية له ومايمكن لخصمه أن يفعل. إلا أن هذا الحاسب لا يتذكر أي شيء من الماضي، ولا أي ذكرى لما حدث من قبل خلال اللعبة (يتجاهل كل شيء قبل اللحظة الحالية). كل ما يفعله هو الاطلاع على القطع الموجودة على لوحة الشطرنج الآن، ثم اختيار أفضل حركة ممكنة.
</p>

<p>
	يُعد برنامج <a href="www.deepmind.com/research/highlighted-research/alphago" rel="">AlphaGo</a> من جوجل مثالاً آخر على الأجهزة التفاعلية، واستطاع هزيمة أفضل اللاعبين. أسلوب التحليل الخاص به أكثر تعقيدًا من أسلوب Deep Blue، حيث يستخدم شبكة عصبية لتقييم تطورات اللعبة.
</p>

<p>
	تعمل هذه الآلات على تحسين قدرة أنظمة الذكاء الاصطناعي على لعب ألعاب معينة بطريقة أفضل، لكن لا يمكن تغييرها بسهولة أو تطبيقها على مواقف أخرى. هذه الآلات ليس لها فهم للعالم (تفهم أشياء محددة للغاية)- مما يعني أنها لا تستطيع العمل خارج المهام المحددة الموكلة إليها ويمكن خداعها بسهولة. يمكن أن يكون هذا جيدًا لضمان أن يكون نظام الذكاء الاصطناعي جديرًا بالثقة: فأنت تريد أن تكون سيارتك ذاتية القيادة موثوقًا بها، فربما من السيئ أن نرغب في أن تتفاعل الآلات حقًا مع العالم وفقًا لتخيلاتها المبنية على سيناريوهات سابقة.
</p>

<h4>
	2. الذاكرة المحدودة Limited memory
</h4>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		"آلات يمكنها تخزين المعرفة واستخدامها للتعلم والتدريب على المهام المستقبلية"
	</p>
</blockquote>

<p>
	تتمثل الخطوة التالية من خطوات <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-%D9%85%D8%B1%D8%A7%D8%AD%D9%84-%D8%A7%D9%84%D8%A8%D8%AF%D8%A1-%D9%88%D8%A7%D9%84%D8%AA%D8%B7%D9%88%D8%B1-%D9%88%D8%A7%D9%84%D8%A3%D8%B3%D8%B3-%D8%A7%D9%84%D8%AA%D9%8A-%D9%86%D8%B4%D8%A3-%D8%B9%D9%84%D9%8A%D9%87%D8%A7-r988/" rel="">تطور الذكاء الاصطناعي</a> في تطوير القدرة على تخزين المعرفة. قال رافائيل تينا، كبير باحثي الذكاء الاصطناعي في شركة التأمين Acrisure Technology Group التي مقرها أوستن، إن الأمر سيستغرق ما يقرب ثلاثة عقود قبل أن يتم تحقيق هذا التطور.
</p>

<p>
	أحرز مجال الذكاء الاصطناعي في عام <a href="https://medium.com/neuralmagic/2012-a-breakthrough-year-for-deep-learning-2a31a6796e73" rel="external nofollow">2012</a> تقدمًا كبيرًا جدًا، حيث أتاحت الابتكارات الجديدة في جوجل و ImageNet للذكاء الاصطناعي إمكانية تخزين البيانات السابقة وإجراء التنبؤات باستخدامها. يشار إلى هذا النوع من الذكاء الاصطناعي على أنه ذكاء اصطناعي محدود الذاكرة، لأنه يمكنه بناء قاعدة معرفية محدودة خاصة به واستخدام تلك المعرفة للتحسين بمرور الوقت.
</p>

<p>
	تندرج جميع التطبيقات الحالية التي نعرفها تقريبًا ضمن هذه الفئة من الذكاء الاصطناعي. يتم تدريب جميع أنظمة الذكاء الاصطناعي الحالية من خلال كميات كبيرة من بيانات التدريب التي تخزنها في ذاكرتها لتشكيل نموذج مرجعي لحل المشكلات المستقبلية.
</p>

<p>
	تعد السيارات ذاتية القيادة من أفضل الأمثلة على أنظمة الذاكرة المحدودة. يمكن لهذه السيارات تخزين سرعة السيارات القريبة ومسافة السيارات الأخرى وحد السرعة ومعلومات أخرى للتنقل على الطريق. من الأمثلة الأخرى هي روبوتات المحادثة (ChatGPT مثلًا) والمساعدين الافتراضيين.
</p>

<p>
	<strong>ملاحظة</strong>: يمكن لأجهزة الذاكرة المحدودة تخزين التجارب السابقة أو بعض البيانات لفترة قصيرة من الوقت.
</p>

<h4>
	3. نظرية العقل Theory of mind
</h4>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		"آلات يمكنها الشعور والاستجابة للعواطف البشرية وكذلك أداء مهام آلات الذاكرة المحدودة"
	</p>
</blockquote>

<p>
	في علم النفس، تُعتبر نظرية العقل أحد فروع العلوم الإدراكية وتتمثل بالقدرة على تمييز أو توقع ما سيفعله الشخص نفسه أو أشخاص آخرون وفهم أن للناس الآخرين معتقدات ونوايا ورغبات وآراء مختلفة. إذًا في هذا النوع يجب أن تتعلم الآلات الذكية المستقبلية كيفية فهم أن كل شخص (الأشخاص وكائنات الذكاء الاصطناعي) لديهم أفكار ومشاعر. يجب أن تعرف أنظمة الذكاء الصناعي المستقبلية كيفية تعديل سلوكها لتتمكن من السير بيننا.
</p>

<p>
	من حيث <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-%D8%A3%D9%87%D9%85-%D8%A7%D9%84%D8%A5%D9%86%D8%AC%D8%A7%D8%B2%D8%A7%D8%AA-%D9%88%D8%A7%D9%84%D8%A7%D8%AE%D8%AA%D8%B1%D8%A7%D8%B9%D8%A7%D8%AA-%D9%88%D9%83%D9%8A%D9%81-%D8%A3%D8%AB%D8%B1%D8%AA-%D9%81%D9%8A-%D8%AD%D9%8A%D8%A7%D8%AA%D9%86%D8%A7-%D8%A7%D9%84%D9%8A%D9%88%D9%85%D9%8A%D8%A9-r975/" rel="">تقدم الذكاء الاصطناعي</a>، فإن تقنية الذاكرة المحدودة هي أبعد ما وصلنا إليه -لكنها ليست الوجهة النهائية. يمكن لآلات الذاكرة المحدودة التعلم من التجارب السابقة وتخزين المعرفة، لكنها لا تستطيع التقاط التغييرات البيئية الدقيقة أو الإشارات العاطفية. مثلًا المساعدين الافتراضيين مثل أليكسا Alexa وسيري Siri لا تُبدي أي رد فعل عاطفي إذا صرخت عليهم".
</p>

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

<p>
	يمكن أن تجلب نظرية العقل الكثير من التغييرات الإيجابية في عالم التكنولوجيا، لكنها أيضًا تنطوي على مخاطرها الخاصة. نظرًا لأن الإشارات العاطفية شديدة الدقة، فقد تستغرق أجهزة الذكاء الاصطناعي وقتًا طويلاً لتتقن قراءتها، ويمكن أن ترتكب أخطاء كبيرة أثناء مرحلة التعلم والتطبيق في المراحل الأولى.
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		"قد تعمل الآلات بشكل أفضل منا بنسبة 90 بالمئة من الوقت، ولكن آخر عشرة بالمئة يمكن أن تصفه الفطرة السليمة فقط، لذا قد يكون من الصعب حقًا الوصول إليها"
	</p>
</blockquote>

<p>
	<strong>ملاحظة:</strong> لا يزال هذا النوع من آلات الذكاء الاصطناعي غير مطوّر، لكن الباحثين يبذلون الكثير من الجهود والتحسينات لتطوير مثل هذه الآلات.
</p>

<h4>
	4. الإدراك الذاتي Self-awareness
</h4>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		"الإدراك الذاتي هي المرحلة الأخيرة من الذكاء الاصطناعي حيث لا تستطيع الآلات التعرف على مشاعر الآخرين فحسب، بل تمتلك أيضًا إحساسًا بالذات وذكاءً بشريًّا"
	</p>
</blockquote>

<p>
	تتمثل الخطوة الأخيرة في تطوير الذكاء الاصطناعي في بناء أنظمة يمكنها فهم نفسها وإدراك ذاتها. في آلات الإدراك الذاتي يتعين على باحثي الذكاء الاصطناعي بناء آلات تمتلك الوعي وليس فهم الوعي فقط.
</p>

<p>
	هذا النوع من أنواع الذكاء الاصطناعي هو امتداد لنظرية العقل التي ناقشناها منذ قليل. الإدراك يختلف عن إدراك الذات؛ الأول هو إدراك بيئة الفرد وجسده ونمط حياته، أما الثاني هو الاعتراف بهذا الإدراك. الإدراك الذاتي هو كيف يعرف الفرد ويفهم بوعي شخصيته ومشاعره ودوافعه ورغباته ("أريد هذا العنصر" يختلف تمامًا عن "أعلم أنني أريد هذا العنصر"). نفترض أن شخصًا ما يصرخ خلفنا أثناء الانتظار من أجل حركة المرور لأنه غاضب أو غير صبور، فهذا هو ما نشعر به عندما نصرخ على الآخرين. بدون نظرية العقل، لن نتمكن من إنجاز تلك الأنواع من الاستدلالات.
</p>

<p>
	في حين أننا ربما نكون بعيدين عن إنشاء آلات تدرك نفسها بنفسها، يجب أن نركز جهودنا نحو فهم الذاكرة والتعلم والقدرة على اتخاذ القرارات بناءً على التجارب السابقة. هذه خطوة مهمة لفهم الذكاء البشري تلقائيًا. ومن الأهمية بمكان إذا أردنا تصميم أو تطوير آلات تكون أكثر من استثنائية في تصنيف ما يرونه أمامهم.
</p>

<p>
	على الرغم من أن تطوير الإدراك الذاتي يمكن أن يعزز تقدمنا كحضارة على قدم وساق، إلا أنه يمكن أن يؤدي أيضًا إلى كارثة. لأنه بمجرد إدراكه لذاته، سيكون الذكاء الاصطناعي قادرًا على امتلاك أفكار مثل الحفاظ على الذات والتي قد تحدد بشكل مباشر أو غير مباشر النهاية للبشرية، حيث يمكن لمثل هذا الكيان أن يتفوق بسهولة على عقل أي إنسان ويخطط لمخططات غير متوقعة.
</p>

<h2>
	خاتمة
</h2>

<p>
	على الرغم من حقيقة أن الذكاء الصناعي لا يزال في بداياته وغير مستكشف تمامًا، إلا أنه ربما يكون أكثر إبداعات البشرية تعقيدًا وإذهالًا حتى الآن. مما يعني أن كل تطبيق ذكاء اصطناعي مذهل نراه اليوم يمثل مجرد قمة جبل الجليد للذكاء الاصطناعي.
</p>

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

<p>
	إن أردت الاستزادة، فإليك مصادر إضافية عربية <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">لتعلم الذكاء الاصطناعي</a> توفرها أكاديمية حسوب:
</p>

<ul>
	<li>
		<a href="https://academy.hsoub.com/files/15-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">البرمجة بلغة بايثون:</a> كتاب يشرح لغة بايثون تمهيدًا لكتابة تطبيقات ذكاء اصطناعي وتعلم آلة بها.
	</li>
	<li>
		<a href="https://academy.hsoub.com/files/17-%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-%D9%88%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9/" rel="">مدخل إلى الذكاء الاصطناعي وتعلم الآلة:</a> كتاب يُعرِّفك على أساسيات الذكاء الاصطناعي وتعلم الآلة.
	</li>
	<li>
		<a href="https://academy.hsoub.com/files/29-%D8%B9%D8%B4%D8%B1%D8%A9-%D9%85%D8%B4%D8%A7%D8%B1%D9%8A%D8%B9-%D8%B9%D9%85%D9%84%D9%8A%D8%A9-%D8%B9%D9%86-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">عشرة مشاريع عملية عن الذكاء الاصطناعي:</a> كتاب تطبق فيه ما تعلمته على مشاريع ذكاء اصطناعي عملية بلغة بايثون.
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/" rel="">قسم الذكاء الاصطناعي:</a> يحوي مقالات متنوعة عن كل ما يتعلق بمجال الذكاء الاصطناعي.
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D9%85%D8%AC%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">مجالات الذكاء الاصطناعي</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A3%D9%87%D9%85%D9%8A%D8%A9-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-r2243/" rel="">أهمية الذكاء الاصطناعي</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">برمجة الذكاء الاصطناعي</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D9%81%D9%88%D8%A7%D8%A6%D8%AF-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-r2247/" rel="">فوائد الذكاء الاصطناعي</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">1973</guid><pubDate>Tue, 09 May 2023 13:00:00 +0000</pubDate></item><item><title>&#x623;&#x62F;&#x648;&#x627;&#x62A; &#x628;&#x631;&#x645;&#x62C;&#x629; &#x646;&#x645;&#x627;&#x630;&#x62C; &#x62A;&#x639;&#x644;&#x645; &#x627;&#x644;&#x622;&#x644;&#x629;</title><link>https://academy.hsoub.com/programming/artificial-intelligence/%D8%A3%D8%AF%D9%88%D8%A7%D8%AA-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D9%86%D9%85%D8%A7%D8%B0%D8%AC-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-r1938/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_03/ML3.png.0e0709407701bded7872a7749bc0c9cc.png" /></p>
<p>
	هنالك بضعة أدوات يجب توافرها لك في كونك مبرمج أو مهندس تعلم آلة للبدء في برمجة النماذج، وللتسهيل وللتوضيح سنسرد تلك الأدوات بصورة منظمة حتى يسهل عليك قدر الإمكان جمع وربط الأفكار التي قد تكون مشتتة ومشوشة في عقلك أثناء القراءة في موضوع مثل تعلم الآلة.
</p>

<p>
	تتوافر أمور عدة في كل مجال من مجالات صناعة البرمجيات للبدء في العمل، فصناعة برامج الإنترنت تتطلب بدورها وبصورة ضرورية لغة لهيكلة الصفحات هي <a href="https://wiki.hsoub.com/HTML" rel="external">HTML</a> ولغة لتنسيقها هي <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a> ولغة لبرمجة الأنظمة الخلفية مثل <a href="https://wiki.hsoub.com/PHP" rel="external">لغة PHP</a> أو <a href="https://wiki.hsoub.com/Python" rel="external">Python</a>، وبصورة اختيارية لغة تفاعلية للواجهة الأمامية مثل لغة JavaScript، والصورة التي تربط تلك الأدوات واللغات ببعضها البعض، هي ما يدعى بمجال <a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%B9%D9%84%D9%85-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D9%8A%D8%A8/" rel="">هندسة الويب Web Engineering</a>، ونحن نحاول توضيح الأمر ذاته، عبر ذكر تلك الأدوات الرئيسة والاختيارية في تعلم الآلة والتي من شأنها مساعدتك في ربط الأفكار المتعلقة بتعلم الآلة وبرمجتها.
</p>

<p>
	الأدوات الأساسية الواجب توافرها للبدء في برمجة أي نموذج من نماذج تعلم الآلة هي البيانات والبنية التحتية التقنية والخوارزميات، وسنتحدث في الفقرات الآتية عن كل نقطة من تلك النقاط بشيء من التفصيل.
</p>

<h2>
	العلاقة بين البيانات ومجال تعلم الآلة
</h2>

<p>
	الأداة الأولى المهمة في تعلم الآلة هي البيانات data، وهي أهم أداة يجب توافرها في نماذج تعلم الآلة، ويتم تمثيل البيانات على هيئة مصفوفات رياضية أثناء وقبل تمريرها إلى خوارزميات تعلم الآلة، ومن السهل تمثيل المصفوفات على هيئة جداول من البيانات، بحيث تحتوي على صفوف وأعمدة، ويكون كل صف عينةً من البيانات تتكون من عدة نقاط، وكل عمود هو خاصية من خواص مجموعة البيانات، إذ تمثل كل خاصية بُعدًا إضافيًا للبيانات، بحيث يكون عدد أبعاد البيانات هو عدد الأعمدة الممثلة للبيانات في صورة جدول، ولمزيد من التوضيح لنأخذ بيانات موظفي شركة ما على سبيل المثال لتجريد تلك المصطلحات السالفة من اللغط.
</p>

<p>
	لدينا في الجدول التالي ثلاث عينات وأربعة أبعاد، وكل خلية من خلايا الجدول هي ما يدعى بنقطة بيانات Data Point .
</p>

<table>
	<thead>
		<tr>
			<th>
				الراتب
			</th>
			<th>
				سنوات الخبرة
			</th>
			<th>
				مستوى التعليم
			</th>
			<th>
				العمر
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>
				4000
			</td>
			<td>
				0
			</td>
			<td>
				1
			</td>
			<td>
				20
			</td>
		</tr>
		<tr>
			<td>
				6000
			</td>
			<td>
				2
			</td>
			<td>
				2
			</td>
			<td>
				25
			</td>
		</tr>
		<tr>
			<td>
				10000
			</td>
			<td>
				10
			</td>
			<td>
				3
			</td>
			<td>
				35
			</td>
		</tr>
	</tbody>
</table>

<p>
	كما نرى تحتوي البيانات على ثلاث عينات ونعني هنا ثلاثة موظفين من موظفي الشركة، وكل عينة من تلك العينات لها أربعة أبعاد أو خواص وهي العمر ومستوى التعليم والخبرة والراتب، وما نعنيه بنقطة البيانات هي خلية من خلايا الجدول، أي بعد العينات، إذ يمثل راتب العينة الأخيرة مثلًا نقطة بيانات وقيمتها 10000، كما تمثل عدد سنوات خبرة العينة الأولى نقطة بيانات أخرى وقيمتها صفر وهكذا.
</p>

<p>
	الجدير بالذكر أنّ البعد له أسماء كثيرة قد تسبب لغطًا كبيرًا للمتعلمين، وإن من بينِ أسمائه بعدًا Dimension ومتغيرًا Variable وسمة أو خاصية Attribute وميزة Feature، ولذلك من الضروري عند دراسة أيّ مرجع من مراجع <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D9%86%D8%B8%D8%B1%D8%A9-%D8%B3%D8%B1%D9%8A%D8%B9%D8%A9-%D8%B9%D9%84%D9%89-%D9%85%D8%AC%D8%A7%D9%84-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-r1933/" rel="">تعلم الآلة</a> وعلوم البيانات أن تعلم أنّ تلك المسميات كلها تشير إلى الشيء ذاته وهو عمود في البيانات بعد تمثيلها على هيئة جدول.
</p>

<p>
	جدول البيانات بأكمله في الرياضيات وفي برمجة تعلم الآلة ما هو إلا مصفوفة Matrix ذات بعد يساوي عدد الأعمدة، وكل عمود في الجدول ما هو إلا متجه Vector يحتوي على جزء من المصفوفة، فالمتجهات هي مصفوفات لكنها ذات بعد واحد، أي خاصية واحدة فقط، فسنوات الخبرة للثلاث عينات في الجدول السابق مثلًا هي متجه يحتوي على ثلاثة صفوف وعمود واحد، الصف الأول صفر والثاني اثنان والثالث عشرة، وكذلك الأمر بالنسبة لمستوى التعليم والعمر والراتب، وهكذا. الجدول الآتي هو متجه العمر على سبيل المثال:
</p>

<table>
	<thead>
		<tr>
			<th>
				العمر
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>
				20
			</td>
		</tr>
		<tr>
			<td>
				25
			</td>
		</tr>
		<tr>
			<td>
				35
			</td>
		</tr>
	</tbody>
</table>

<p>
	والجدول التالي هو متجه سنوات الخبرة:
</p>

<table>
	<thead>
		<tr>
			<th>
				سنوات الخبرة
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>
				0
			</td>
		</tr>
		<tr>
			<td>
				2
			</td>
		</tr>
		<tr>
			<td>
				10
			</td>
		</tr>
	</tbody>
</table>

<p>
	أما الجدول التالي فهو متجه الراتب:
</p>

<table>
	<thead>
		<tr>
			<th>
				الراتب
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>
				4000
			</td>
		</tr>
		<tr>
			<td>
				6000
			</td>
		</tr>
		<tr>
			<td>
				10000
			</td>
		</tr>
	</tbody>
</table>

<p>
	يُعَدّ ذلك أمرًا أساسيًا فهمه في البيانات، ففهم البيانات هو أول وأهم الخطوات في سبيل برمجة تعلم الآلة، إذ تُقضَى أكثر أوقات مهندسِي تعلم الآلة في فهم البيانات وتنقيحها قبل إجراء مهمات برمجة نموذج تعلم الآلة، وتستخدِم كل مهمة من مهام تعلم الآلة ذلك النمط من تمثيل البيانات وحتى المعقدة منها مثل النماذج التي تتعامل مع الصور وغيرها حتى وإذا كانت غير واضحة بصورة جلية وبسيطة للمبرمج، ففي التعامل مع الصور تُحوَّل كل صورة إلى مصفوفة من البكسلات Pixels وهكذا.
</p>

<p>
	الجدير بالذكر أنه في التعلم تحت إشراف تُقسَّم المتغيرات أو الأبعاد في البيانات إلى قسمين، بحيث يحتوي القسم الأول على المتغيرات المستقلة Independent Variables وهي تلك المتغيرات التي تعمل على أساس مدخلات للنموذج، والقسم الثاني يحتوي على المتغير التابع Dependant Variable وهو الذي يعمل على أساس خرج في النموذج.
</p>

<p>
	لفهم ذلك لنأخذ بيانات الموظفين السابقة مثالًا ولنقل أننا نريد بناءً على تلك البيانات بناء نموذج تعلم آلة يتوقع راتب الموظف بناءً على عمره ومستوى تعليمه وسنوات خبرته، فتلك المتغيرات هي ما ندعوها بالمتغيرات المستقلة لأن الخرج يعتمد عليها لا العكس وهي على هيئة مصفوفة، وفي مثالنا هذا تتكون المصفوفة من ثلاثة أعمدة وثلاثة صفوف؛ أما المتغير التابع فهو متجه الراتب في ذلك المثال، وهو مصفوفة ذات عمود واحد وثلاثة صفوف، وتكون المتغيرات المستقلة كما يلي:
</p>

<table>
	<thead>
		<tr>
			<th>
				سنوات الخبرة
			</th>
			<th>
				مستوى التعليم
			</th>
			<th>
				العمر
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>
				0
			</td>
			<td>
				1
			</td>
			<td>
				20
			</td>
		</tr>
		<tr>
			<td>
				2
			</td>
			<td>
				2
			</td>
			<td>
				25
			</td>
		</tr>
		<tr>
			<td>
				10
			</td>
			<td>
				3
			</td>
			<td>
				35
			</td>
		</tr>
	</tbody>
</table>

<p>
	ويكون المتغير التابع كما يلي:
</p>

<table>
	<thead>
		<tr>
			<th>
				الراتب
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>
				4000
			</td>
		</tr>
		<tr>
			<td>
				6000
			</td>
		</tr>
		<tr>
			<td>
				10000
			</td>
		</tr>
	</tbody>
</table>

<p>
	لتدريب نموذج يتوقع راتب الموظفين بناءً على تلك البيانات، فإننا نُمرر مصفوفة المتغيرات المستقلة ومتجه المتغير التابع إلى خوارزمية النموذج ليبني العلاقة بين تلك المتغيرات للوصول إلى القيم المثلى للثوابت الموجودة في المعادلة الجبرية، التي تربط بين المتغيرات المستقلة والمتغير التابع، ثم بعد ذلك نستطيع استخدام تلك المعادلة مع تلك الثوابت التي وصلت الخوارزمية إليها بعد التدريب ليُتوقَّع راتب أيّ موظف جديد.
</p>

<h2>
	البنية التحتية التقنية
</h2>

<p>
	الأداة الثانية في برمجة تعلم الآلة هي البنية التحتية التقنية، وما نعنيه هنا هو مجموعة الأدوات التقنية الواجب توفرها للبدء في التطبيق العملي في كل مراحله، ويشمل ذلك ما تحتاجه لمعالجة البيانات وتنقيحها وما تحتاجه لرسم البيانات لمساعدتك على فهمها بصورة أفضل وما تحتاجه في معالجة المصفوفات والمتجهات وإجراء العمليات عليهما، …إلخ.
</p>

<h3>
	لغات البرمجة المستخدمة في تعلم الآلة
</h3>

<p>
	إنّ أول ما نحتاجه في البنية التحتية التقنية هي <a href="https://academy.hsoub.com/programming/general/%D9%84%D8%BA%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">لغة البرمجة</a> ومع أنّ العمل في مجال تعلم الآلة ممكن باستخدام أيّ لغة من اللغات، إلا أن بعض اللغات قد تدعم العمل على نماذج تعلم الآلة وعلى معالجة البيانات بصورة أفضل وأسهل، ومن ذلك المنطلق وقع اختيارنا على لغة بايثون التي أوردنا شرحها في <a href="https://academy.hsoub.com/programming/python/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r1815/" rel="">الفصل الثالث</a> من السلسلة، لكن بايثون ليست اللغة الوحيدة مع ذلك فإن من الاختيارات الأخرى الأكثر شهرةً للتعامل مع البيانات وتعلم الآلة هي <a href="https://academy.hsoub.com/programming/r-language/%D9%84%D8%BA%D8%A9-r-%D9%88%D8%A7%D9%84%D8%AA%D8%AD%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%A5%D8%AD%D8%B5%D8%A7%D8%A6%D9%8A-r80/" rel="">لغة R</a> ولغة Matlab ولغة Octave ولغة <a href="https://academy.hsoub.com/programming/cpp/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-c-r802/" rel="">C++‎</a> ولغة <a href="https://academy.hsoub.com/programming/javascript/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D9%84%D8%BA%D8%A9-%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D8%A8%D8%AA-r1689/" rel="">JavaScript</a> وغيرها.
</p>

<p>
	مع ذلك فإنه حتى تاريخ كتابة هذا الفصل لاحظت تفضيل لغة بايثون و R وماتلاب Matlab و Octave على باقي لغات البرمجة من قِبَل مبرمجِي تعلم الآلة وذلك لتوفر مكتبات مساعدة غير متاحة في الكثير من اللغات الأخرى، ولكن بالطبع أكثر لغة مستخدَمة في معالجة البيانات وتعلم الآلة هي بايثون بلا أدنى شك، والتي من أسباب شيوعها هي توفر مكتبات أخرى تساعد على كشط وجمع البيانات من الإنترنت بصورة آلية لاستخدامها في المشاريع.
</p>

<p>
	أيضًا، تُعَد لغة بايثون لغةً عامةً لا تقتصر على مجال بعينه، وإنما تُستخدَم في برمجة الويب وغيرها من المجالات، إذ ستفضِّل شركات برمجيات الويب حتمًا استخدام بايثون لبرمجة نماذج تعلم الآلة في مشروعاتها بدلًا من اللغات الأخرى وذلك لأنها هي ذاتها اللغة التي يمكن عن طريقها برمجة تطبيقات ويب بسلاسة.
</p>

<p>
	تُعَدّ لغة R لغةً مجانيةً ومفتوحة المصدر مثل بايثون، ولكنها مبنية من أجل العمليات الرياضية بصورة أساسية مثل تحليل البيانات والعمليات الإحصائية، إذ تحتوي افتراضيًا على كثير من الدوال التي تؤدي تلك المهام، كما أنها تدعم الكثير من مهام تعلم الآلة؛ أما ماتلاب وأُكتاف Octave، فهما منافستان للغة R من حيث التخصص، ولكن ماتلاب هي لغة تجارية غير مجانية وهي متميزة إلى حد كبير في حل المعادلات الجبرية على وجه الخصوص، ومن ميزاتها أيضًا أنها لغة سهلة التعلم، وهي واسعة الانتشار في الهندسة الكهربائية والهندسة الكيميائية والهندسة المدنية وهندسة الطيران.
</p>

<p>
	مع ذلك/ عادةً لا يستخدِم الكثير من علماء الحاسوب ومهندسو البرمجيات لغة ماتلاب سوى في الأوساط الأكاديمية، فهي لا تستخدَم في الأعمال بصورة كبيرة، لذلك فإنّ العدد الكبير للمساقات الأكاديمية الموجودة على الإنترنت والتي تستخدِم ماتلاب ليس مؤشرًا على وسع انتشار ماتلاب في وسط الأعمال؛ أما لغة Octave فهي ببساطة النسخة المجانية من ماتلاب والتي طُوِّرت عن طريق مساهمات المبرمجين والمطورين حول العالم لتوفير بديل مجاني ومفتوح المصدر لماتلاب.
</p>

<p>
	ناقشنا في <a href="https://academy.hsoub.com/programming/python/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r1815/" rel="">الفصل الثالث</a> خيارات كتابة لغة بايثون إما على حاسوبك الخاص أو عبر خدمة <a href="https://academy.hsoub.com/apps/productivity/%D9%86%D8%A8%D8%B0%D8%A9-%D8%AA%D8%B9%D8%B1%D9%8A%D9%81%D9%8A%D8%A9-%D8%B9%D9%86-google-colab-%D9%88%D9%85%D8%A7%D8%B0%D8%A7-%D9%8A%D9%82%D8%AF%D9%85-%D9%84%D9%84%D9%85%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D9%86-r741/" rel="">Google Colab</a>، وهي تماثل ميزات خدمة أخرى يستخدِمها الكثير من المبرمجين تدعى <a href="https://academy.hsoub.com/devops/linux/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D9%87%D9%8A%D8%A6%D8%A9-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%A7%D9%84%D9%85%D9%81%D9%83%D8%B1%D8%A9-jupyter-notebook-%D9%84%D9%84%D8%B9%D9%85%D9%84-%D9%85%D8%B9-%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-python-3-r388/" rel="">Jupyter Notebook</a>، وهي خدمة لها واجهة يتم الولوج فيها عبر المتصفح، إذ تُثبَّت على الحاسوب ثم تُشغَّل عبر أمر في الطرفية Terminal أو سطر الأوامر Command Prompt، لكن لكون Google Colab أبسط في التعامل وكونها خدمةً سحابيةً لا تحتاج إلى تثبيت أية مكتبات، فقد فضلنا الإحالة إليها بدلًا من شرح Jupyter Notebook مثل باقي المراجع الأجنبية.
</p>

<h3>
	المكتبات البرمجية في تعلم الآلة
</h3>

<p>
	يأخذنا هذا إلى الحديث عن المكتبات المهمة في بايثون للتعامل مع علوم البيانات وتعلم الآلة، إذ يجب استخدام مكتبة Numpy للتعامل مع المصفوفات والمتجهات، وللتعامل مع أمور قراءة ملفات البيانات مثل ملفات Excel و CSV، فإن استخدام مكتبة مثل Pandas يُعَدّ أمرًا مهمًا أيضًا، ولتوفير الوقت والجهد في كتابة خوارزميات تعلم الآلة من الصفر يمكن استخدام مكتبة مثل Scikit Learn التي تحتوي على كثير من خوارزميات تعلم الآلة افتراضيًا، إذ يمكن استدعاء واستخدام الدوال المدمجة في المكتبة لإجراء الكثير من الأمور.
</p>

<p>
	أما بالنسبة لأمور تمثيل البيانات ورسمها، فيمكن استخدام المكتبات الأكثر شيوعًا في بايثون وهما Matplotlib و Seaborn، وقد يظهر لتلك المكتبات مكتبات أخرى منافسة لتكون هي الأكثر شيوعًا واستخدامًا في السنوات القادمة.
</p>

<p>
	بغض النظر عن مستوى النموذج الذي تبرمجه، فإن من أكبر الضروريات أثناء عملك هو تمثيل البيانات عبر أدوات التصور والإظهار Visualization، إذ يعطي تصور البيانات القدرة على فهمها بصورة أكبر، فعن طريقها تستطيع تحديد ما إذا كان لديك بعض العينات الشاذة التي تؤثِّر على النتائج تأثيرًا سلبيًا، وتستطيع أيضًا تحديد وجود مشكلات أخرى، كما تستطيع تحديد أفضل الخوارزميات المناسبة للعمل على البيانات المتاحة، وتستطيع أيضًا تمثيل نتائج الخوارزميات على البيانات، …إلخ.
</p>

<p>
	ذكرنا أن أكثر المكتبات شيوعًا في <a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D9%85%D8%B1%D8%AC%D8%B9-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r735/" rel="">لغة بايثون</a> لتمثيل البيانات هي Matplotlib و Seaborn، ولكن مع ذلك فقد يظهر لتلك المكتبات مكتبات أخرى منافسة لتكون هي الأكثر شيوعًا واستخدامًا في السنوات القادمة.
</p>

<p>
	تحدثنا في <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D9%86%D8%B8%D8%B1%D8%A9-%D8%B3%D8%B1%D9%8A%D8%B9%D8%A9-%D8%B9%D9%84%D9%89-%D9%85%D8%AC%D8%A7%D9%84-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-r1933/" rel="">الفصل السابق</a> عن التعلم العميق وأنه أحد فروع تعلم الآلة، وفكرة <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-%D9%84%D9%81%D9%87%D9%85-%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%B9%D9%85%D9%8A%D9%82-r1422/" rel="">التعلم العميق</a> هي بناء شبكات عصبية Neural Networks تحاكي تلك الموجودة في دماغنا البشري، وإن للتعلم العميق مكتبات واسعة الاستخدام في بايثون والتي توفر خوارزميات ودوال مهمة، لتسهيل عملية بناء الشبكات العصبية بدلًا من بنائِها من الصفر، وأشهر تلك المكتبات هي تلك التي طُوِّرت في Google وهي مكتبة TensorFlow، وقد أصدرت Google نسخةً منها <a href="https://academy.hsoub.com/programming/javascript/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D9%84%D8%BA%D8%A9-javascript-r664/" rel="">للغة JavaScript</a> مؤخرًا، ومن مكتبات التعلم العميق مكتبة PyTorch و Theano و Caffe و Chainer، وهي كلها مكتبات متاحة للغة بايثون.
</p>

<p>
	توجد أيضًا مكتبة Keras وهي من أوسع المكتبات استخدامًا في بايثون، إذ تستخدِم إحدى مكتبات التعلم العميق الأخرى المتوفرة في بايثون مع تبسيط كبير لدوالها ووحداتها، فيمكن استخدام Keras مع محرك خلفي آخر مثل Tensorflow أو Theano وغيرهما، ومع ذلك فإنه توجد مكتبات أخرى للغات الأخرى مثل مكتبة DL4J للغة جافا، ومكتبة Microsoft Cognitive Toolkit والتي تتوفر لعدة لغات وهي: بايثون وC#‎ و ++C، كما أنه يمكن إدماجها مع اللغات الأخرى عبر لغتها الخاصة والتي تدعى Brain Script.
</p>

<p>
	يظهر الرسم [4-4] رسمًا بيانيًا من منصة Kaggle تشير إلى أنّ أكثر المكتبات استخدامًا هي مكتبة Sci-kit Learn التي أشرنا إليها؛ أما تلك المنصة فهي أكبر منصة على الإنترنت تجمع علماء البيانات ومهندسِي تعلم الآلة.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="122228" href="https://academy.hsoub.com/uploads/monthly_2023_03/--.png.b56dfdcb4a395fee05a759208980fbb6.png" rel=""><img alt="مخطط بياني لأكثر المكتبات استخدامًا" class="ipsImage ipsImage_thumbnailed" data-fileid="122228" data-ratio="74.46" data-unique="leyz7e9uu" style="width: 650px; height: auto;" width="650" src="https://academy.hsoub.com/uploads/monthly_2023_03/--.thumb.png.cd9507e172fe6202ff45097ab93e50de.png"> </a>
</p>

<p>
	أما الرسم [4-5] فهو رسم بياني آخر من المنصة نفسها يشير إلى أنّ أكثر اللغات التي يستخدمها أعضاؤها يوميًا هي لغة بايثون.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="122227" href="https://academy.hsoub.com/uploads/monthly_2023_03/--.png.b0e9b99e4840103fcd191f7677828133.png" rel=""><img alt="أكثر اللغات البرمجية التي يستخدمها أعضاء منصة Kaggle يوميًا" class="ipsImage ipsImage_thumbnailed" data-fileid="122227" data-ratio="59.51" data-unique="0x7u2w4po" style="width: 531px; height: auto;" width="531" src="https://academy.hsoub.com/uploads/monthly_2023_03/--.png.b0e9b99e4840103fcd191f7677828133.png"> </a>
</p>

<p>
	يدخل في نطاق البنية التحتية التقنية أمور أخرى مثل المعدات، وذلك لأن المشروعات الضخمة لا يمكن برمجة نماذجها عبر الحاسوب الشخصي بإمكانياته البسيطة، فعند التعامل مع البيانات الضخمة التي قد تتمثل في عدد من التيرابايت -وهي وحدات قياس سعة تخزين الحاسوب وهي تساوي ألف جيجابايت- أو البيتابايت -أي مليون جيجابايت- إذ سيصبح استخدام خدمات الحوسبة السحابية والحوسبة الموزعة أمرًا لازمًا لأن تدريب مثل تلك النماذج سيتطلب قدرات حاسوبية كبيرة.
</p>

<div class="banner-container ipsBox ipsPadding">
	<div class="inner-banner-container">
		<p class="banner-heading">
			دورة الذكاء الاصطناعي
		</p>

		<p class="banner-subtitle">
			احترف برمجة الذكاء الاصطناعي AI وتحليل البيانات وتعلم كافة المعلومات التي تحتاجها لبناء نماذج ذكاء اصطناعي متخصصة.
		</p>

		<div>
			<a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://academy.hsoub.com/learn/artificial-intelligence" rel="">اشترك الآن</a>
		</div>
	</div>

	<div class="banner-img">
		<a href="https://academy.hsoub.com/learn/artificial-intelligence" rel=""><img alt="دورة الذكاء الاصطناعي AI" src="https://academy.hsoub.com/learn/assets/images/courses/artificial-intelligence.png"></a>
	</div>
</div>

<h2>
	الخوارزميات المستخدمة في تعلم الآلة
</h2>

<p>
	<a href="https://academy.hsoub.com/programming/advanced/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AE%D9%88%D8%A7%D8%B1%D8%B2%D9%85%D9%8A%D8%A7%D8%AA-r1282/" rel="">الخوارزميات</a> هي ثالث الأدوات في تعلم الآلة، وهي أصل الموضوع ولبه، إذ أن تعلم الآلة كما أوردنا ما هو إلا خوارزميات للتعلم من البيانات وخوارزميات لقياس دقة النماذج، …إلخ، ومن الممكن تطبيق تلك الخوارزميات عبر كتابتها من الصفر بأي لغة من لغات البرمجة، لكن الأمر قد يكون معقدًا خاصةً للمبتدئين وإجراء ذلك ليس ضروريًا على الإطلاق، فكما ترى من الفقرة السابقة أنه توجد العديد من المكتبات الجاهزة للاستخدام والتي تحتوي على دوال مدمجة بها أبرز الخوارزميات التي قد تستخدِمها في حياتك المهنية في هذا الحقل.
</p>

<p>
	تُعَدّ <a href="https://wiki.hsoub.com/Algorithms" rel="external">خوارزميات</a> تعلم الآلة كثيرةً ومختلفةً، فبعضها متخصص في حل مشكلات التعلم تحت إشراف وبعضها في التعلم دون إشراف وبعضها للتعلم المعزز وللتعلم العميق، …إلخ، وكل خوارزمية من تلك الخوارزميات لها اسم تدعى به، وقد يتخصص مهندس الذكاء الاصطناعي في أحد الفروع دونًا عن غيره، وفي تلك الحالة قد يدرس خوارزميات معينة تُستخدَم في حقله وتخصصه فقط ولا تستخدَم في غيره، ومن تلك التخصصات على سبيل المثال لا الحصر الرؤية الحاسوبية Computer Vision ومعالجة اللغات الطبيعية Natural Language Processing.
</p>

<p>
	تصنَّف الخوارزميات عادةً حسب طريقة عملها، وبالرغم من كون القائمة التالية ليست دقيقةً بصورة مطلقة لأن الكثير من تلك الخوارزميات يمكن تصنيفها إلى صنفين أو أكثر من التصنيفات، إلا أنها قد تعطيك نبذةً عن أشهر الخوارزميات التي قد تراها كثيرًا في مراجع تعلم الآلة، وبالطبع كل تلك الخوارزميات لن تُغطَّى في هذه السلسة ولكن نظرة على تلك الأسماء قد توفر لك جهدًا عند مراجعتك للمراجع الأجنبية.
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		انتبه إلى أنني اجتهدت في ترجمة أسماء الخوارزميات الغريبة منها فإن أخطأت في واحدة أو كان هنالك ترجمة أفضل، فاذكرها بالتعليقات.
	</p>
</blockquote>

<h3>
	1. خوارزميات الانحدار Regression Algorithms
</h3>

<p>
	هي خوارزميات تصنع نماذج تربط بين المتغيرات، والتي تُراجَع دقتها باستمرار عبر تقنيات وطرق قياس الخطأ، وهي خوارزميات تعتمد في الأساس وبصورة كبيرة على علم الإحصاء، وفيما يلي بعض أشهر خوارزميات الانحدار:
</p>

<ol>
	<li>
		الانحدار الخطي Linear Regression
	</li>
	<li>
		الانحدار اللوجستي Logistic Regression
	</li>
	<li>
		الانحدار الخطوي Stepwise Regression
	</li>
	<li>
		خطوط الانحدار التكيفية متعددة المتغيرات Multivariate Adaptive Regression Splines واختصارًا MARS
	</li>
	<li>
		انحدار المربعات الصغرى الاعتيادية Ordinary Least Squares Regression واختصارًا OLSR
	</li>
	<li>
		تجانس المخطط المبعثر المقدر محليًا Locally Estimated Scatterplot Smoothing واختصارًا LOESS
	</li>
</ol>

<h3>
	2. الخوارزميات المبنية على النماذج Instance-based Algorithms
</h3>

<p>
	يهدف هذا النوع من الخوارزميات إلى حل مشكلات اتخاذ القرار بناءً على الأمثلة التي تعلمها النموذج، وتلك الأمثلة بالطبع ضرورية لتدريب النموذج، عادةً يبني ذلك النوع من الخوارزميات قاعدة بيانات تحتوي على أمثلة موجودة مسبقًا مع ما اتُخِذ من قرار ثم تحاول الخوارزمية موازنة البيانات الجديدة مع ما تملكه في قاعدة البيانات لتوقع القرار الأنسب، وفيما يلي أشهر خوارزميات هذا النوع:
</p>

<ol>
	<li>
		التمثيل الكمي لمتجه التعلم Learning Vector Quantization واختصارًا LVQ
	</li>
	<li>
		الجار الأقرب K-nearest neighbor واختصارًا KNN
	</li>
	<li>
		الخرائط ذاتية التنظيم Self-Organized Maps واختصارًا SOM
	</li>
	<li>
		دعم آلات المتجهات Support Vector Machines واختصارًا SVM
	</li>
	<li>
		التعلم الموزون محليًا Locally-Weighted Learning واختصارًا LWL
	</li>
</ol>

<h3>
	3. خوارزميات التنظيم Regularization Algorithms
</h3>

<p>
	يضم هذا النوع بعض الخوارزميات الإضافية والتي تضاف عادةً إلى خوارزميات الانحدار، وتلك الخوارزميات تقوِّم النماذج بناءً على مستوى بساطتها وتعقيدها، إذ تفضِّل النماذج الأبسط، وفيما يلي قائمة بأكثر تلك الخوارزميات شيوعًا:
</p>

<ol>
	<li>
		انحدار ريدج Ridge Regression
	</li>
	<li>
		أقل انكماش مطلق ومعامل الاختيار Least Absolute Shrinkage and Selection Operator واختصارًا LASSO
	</li>
	<li>
		الشبكة المرنة Elastic Net
	</li>
	<li>
		انحدار الزاوية الصغرى Least-Angle Regression واختصارًا LARS
	</li>
</ol>

<h3>
	4. خوارزميات شجرة القرار Decision Tree
</h3>

<p>
	يبني هذا النوع من الخوارزميات نموذج اتخاذ قرارات بناءً على قيم خواص البيانات، فالأمر فيه أشبه بشجرة، إذ تُتَتَبع قيم الخواص حتى الوصول إلى قرار ما، ويُستخدَم هذا النوع من الخوارزميات للتدرب على البيانات الخاصة بمهام التصنيف ومهام التوقع/الانحدار، كما تتميز تلك الخوارزميات بالسرعة والدقة العالية في معظم الأحيان، وفيما يلي بعض من تلك الخوارزميات:
</p>

<ol>
	<li>
		خوارزمية M5
	</li>
	<li>
		قرعة القرار Decision Stump
	</li>
	<li>
		أشجار القرار المشروط Conditional Decision Trees
	</li>
	<li>
		شجرة التصنيف والانحدار Classification and Regression Tree واختصارًا CART
	</li>
	<li>
		ثنائي التفرع التكراري 3 أو Iterative Dichotomiser 3 واختصارًا ID3
	</li>
	<li>
		كشف التفاعل التلقائي لمربع تشي Chi-squared Automatic Interaction Detection واختصارًا CHAID
	</li>
</ol>

<h3>
	5. خوارزميات مبرهنة بايز Bayesian Algorithms
</h3>

<p>
	هذا النوع من الخوارزميات هو الذي يستخدِم مبرهنة بايز Bayes’ Theorem بصورة صريحة لحل مشكلات التصنيف والتوقع / الانحدار، وفيما يلي أكثر خوارزميات هذا النوع انتشارًا:
</p>

<ol>
	<li>
		خوارزمية Naive Bayes
	</li>
	<li>
		خوارزمية Gaussian Naive Bayes
	</li>
	<li>
		خوارزمية Naive Bayes متعددة الحدود Multinomial Naive Bayes
	</li>
	<li>
		الشبكة البايزية Bayesian Network واختصارًا BN
	</li>
	<li>
		مقدِرات متوسطات الاعتماد الواحد Averaged One-Dependence Estimators واختصارًا AODE
	</li>
	<li>
		شبكة المعتقدات البايزية Bayesian Belief Network واختصارًا BBN
	</li>
</ol>

<h3>
	6. خوارزميات العنقدة Clustering Algorithms
</h3>

<p>
	يحاول هذا النوع من الخوارزميات تصنيف وتجميع البيانات المتشابهة إلى أقصى حد لتوفير فهم أفضل للبيانات والخصائص المشتركة بين العينات، وفيما يلي أشهر خوارزميات هذا النوع:
</p>

<ol>
	<li>
		خوارزمية k-Medians
	</li>
	<li>
		خوارزمية k-Means
	</li>
	<li>
		تعظيم التوقع Expectation Maximisation واختصارًا EM
	</li>
	<li>
		العنقدة الهرمية Hierarchical Clustering
	</li>
</ol>

<h3>
	7. خوارزميات تعلم قواعد الترابط Association Rule Learning Algorithms
</h3>

<p>
	يحاول هذا النوع من الخوارزميات استخراج القواعد التي تصف العلاقات بين المتغيرات الموجودة في البيانات، إذ يمكن أن تظهر القواعد علاقات ذات فائدة كبيرة في البيانات ذات الأبعاد الكثيرة والتي قد تكون مفيدةً بصورة كبيرة في المشروعات التجارية، وفيما يلي أكثر تلك الخوارزميات شيوعًا:
</p>

<ol>
	<li>
		خوارزمية ابيروري Apriori algorithm
	</li>
	<li>
		خوارزمية إيكلات Eclat algorithm
	</li>
</ol>

<h3>
	8. خوارزميات الشبكة العصبية الاصطناعية Artificial Neural Network Algorithms
</h3>

<p>
	هذا النوع من الخوارزميات مستلهم من الشبكات العصبية الحيوية الموجودة في دماغ الإنسان، وهي خوارزميات مستخدَمة بكثرة لحل مشاكل التصنيف والتوقع، ولكن ذلك النوع هو بالأحرى مجال فرعي من مجالات تعلم الآلة؛ وذلك لكثرة عدد الخوارزميات واختلافها تبعًا لمشاكلها وتطبيقاتها، وفيما يلي أشهر خوارزميات هذا النوع:
</p>

<ol>
	<li>
		خوارزمية بيرسبترون Perceptron
	</li>
	<li>
		الانتشار الخلفي Back-Propagation
	</li>
	<li>
		شبكة هوبفيلد Hopfield Network
	</li>
	<li>
		الهبوط التدريجي العشوائي Stochastic Gradient Descent
	</li>
	<li>
		خوارزمية بيرسبترون متعددة الطبقات Multilayer Perceptrons واختصارًا MLP
	</li>
	<li>
		شبكة وظيفة الأساس الشعاعي Radial Basis Function Network واختصارًا RBFN
	</li>
</ol>

<h3>
	9. خوارزميات التعلم العميق Deep Learning Algorithms
</h3>

<p>
	لقد فرقنا بين خوارزميات التعلم العميق وخوارزميات الشبكات العصبية لكون خوارزميات التعلم العميق هي النسخة الأحدث والمطوَّرة من خوارزميات الشبكات العصبية، فذلك النوع من الخوارزميات يعنى بتطوير الشبكات العصبية الأكثر تعقيدًا من نظيراتها الأخرى، فهي تعمل على تطوير شبكات معقدة تتعامل مع بيانات ضخمة ومعقدة مثل الصور والصوتيات والنصوص والمقاطع المرئية ونحوها، وفيما يلي مجموعة من أشهر خوارزميات التعلم العميق:
</p>

<ol>
	<li>
		الشبكات العصبية التلافيفية Convolutional Neural Network واختصارًا CNN
	</li>
	<li>
		شبكات الذاكرة طويلة-قصيرة المدى Long Short-Term Memory Networks واختصارًا LSTMs
	</li>
	<li>
		المشفرات الآلية المرصوصة Stacked Auto-Encoders
	</li>
	<li>
		الشبكات العصبية المتكررة Recurrent Neural Networks واختصارًا RNN
	</li>
	<li>
		شبكة المعتقد العميق Deep Belief Networks واختصارًا DBN
	</li>
	<li>
		آلة بولتزمان العميقة Deep Boltzmann Machine واختصارًا DBM
	</li>
</ol>

<h3>
	10. خوارزميات تقليص الأبعاد Dimensionality Reduction Algorithms
</h3>

<p>
	تقلِّص هذه الخوارزميات أبعاد البيانات لمحاولة تصنيف وتجميع البيانات المتشابهة تمامًا مثل خوارزميات العنقدة، وتلك الخوارزميات مفيدة في فهم البيانات بصورة أفضل حتى يُعدَّل على البيانات قبل استخدامها مرةً أخرى في خوارزميات أخرى، كما تستخدَم لحل مشاكل التصنيف أو التوقع، وفيما يلي قائمة بأوسع خوارزميات هذا النوع استخدامًا:
</p>

<ol>
	<li>
		تحليل المكون الرئيسي Principal Component Analysis واختصارًا PCA
	</li>
	<li>
		انحدار المكون الرئيسي Principal Component Regression واختصارًا PCR
	</li>
	<li>
		انحدار المربعات الصغرى الجزئي Partial Least Squares Regression واختصارًا PLSR
	</li>
	<li>
		رسم خرائط سامون Sammon Mapping
	</li>
	<li>
		مطاردة الإسقاط /التنبؤ Projection Pursuit
	</li>
	<li>
		التحجيم متعدد الأبعاد Multidimensional Scaling واختصارًا MDS
	</li>
	<li>
		تحليل التمييز الخطي Linear Discriminant Analysis واختصارًا LDA
	</li>
	<li>
		تحليل التمييز الخليط Mixture Discriminant Analysis واختصارًا MDA
	</li>
	<li>
		تحليل التمييز المرن Flexible Discriminant Analysis واختصارًا FDA
	</li>
	<li>
		تحليل التمييز التربيعي Quadratic Discriminant Analysis واختصارًا QDA
	</li>
</ol>

<h3>
	11. خوارزميات الفرقة/المجموعة الواحدة Ensemble Algorithms
</h3>

<p>
	تجمع هذه الخوارزميات نتائج نماذج مختلفة ضعيفة في نتيجة واحدة، إذ يُدرَّب كل نموذج عليها بصورة مستقلة ثم تجمع هذه الخوارزمية تلك التوقعات لتكوين توقع واحد جديد شامل، وفيما يلي قائمة من أبرز هذا النوع من الخوارزميات:
</p>

<ol>
	<li>
		التعزيز Boosting
	</li>
	<li>
		خوارزمية تجميع Bootstrap وهي بالإنجليزية Bootstrap aggregating أو تسمى في كثير من الأحوال بالتعبئة Bagging
	</li>
	<li>
		خوارزمية AdaBoost
	</li>
	<li>
		الغابة العشوائية Random Forest
	</li>
	<li>
		التعميم المرصوص/المكدس Stacked Generalization ويدعى أحيانًا التراص Stacking
	</li>
	<li>
		خوارزمية المتوسط الموزون Weighted Average وأحيانًا تدعى المزج Blending
	</li>
	<li>
		أشجار الانحدار المعزز بالتدرج Gradient Boosted Regression Trees والذي يدعى أحيانًا GBRT اختصارًا في بعض المراجع
	</li>
	<li>
		آلات تعزيز التدرج Gradient Boosting Machines وتدعى أحيانًا GBM اختصارًا.
	</li>
</ol>

<p>
	وبالرغم من وجود الكثير من الخوارزميات الأخرى، إلا أن ذلك يغطي معظم ما يراه مهندس تعلم الآلة من الخوارزميات في عمله اليومي في وقتنا الحاضر، وأغلب الظن أنّ القوائم السابقة ستزيد وتتغير بصورة كبيرة خلال السنوات القادمة، إذ أنّ الأعمال البحثية في كثير من جامعات وشركات العالم قائمة وفي تنافس شديد ومتسارع.
</p>

<p>
	إليك الصورة التالية التي تجمع كل خوارزميات تعلم الآلة في مكان واحد لتبقى لك مرجعًا:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="122226" href="https://academy.hsoub.com/uploads/monthly_2023_03/--.png.5f666a16783628a4291c01579df99bfc.png" rel=""><img alt="أنواع خوارزميات تعلم الآلة" class="ipsImage ipsImage_thumbnailed" data-fileid="122226" data-ratio="63.98" data-unique="lbfcc43ka" style="width: 744px; height: auto;" width="744" src="https://academy.hsoub.com/uploads/monthly_2023_03/--.thumb.png.7619447b6ac1b0e318961f0b22708bcd.png"> </a>
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		الفصل السابق: <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D9%86%D8%B8%D8%B1%D8%A9-%D8%B3%D8%B1%D9%8A%D8%B9%D8%A9-%D8%B9%D9%84%D9%89-%D9%85%D8%AC%D8%A7%D9%84-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-r1933/" rel="">نظرة سريعة على مجال تعلم الآلة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D9%85%D9%81%D8%A7%D9%87%D9%8A%D9%85-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-r1009/" rel="">المفاهيم الأساسية لتعلم الآلة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AA%D9%82%D9%8A%D9%8A%D9%85-%D9%88%D8%A7%D8%AE%D8%AA%D9%8A%D8%A7%D8%B1-%D9%86%D9%85%D8%A7%D8%B0%D8%AC-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-r1635/" rel="">أدوات برمجة نماذج تعلم الآلة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AE%D8%B7%D9%88%D8%A7%D8%AA-%D8%AA%D9%86%D9%81%D9%8A%D8%B0-%D9%85%D8%B4%D8%B1%D9%88%D8%B9-%D8%B9%D9%86-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-%D8%A7%D9%84%D8%AC%D8%B2%D8%A1-%D8%A7%D9%84%D8%A3%D9%88%D9%84-r1357/" rel="">خطوات تنفيذ مشروع عن تعلم الآلة في بايثون: الجزء الأول</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">1938</guid><pubDate>Sun, 26 Mar 2023 16:01:00 +0000</pubDate></item><item><title>&#x646;&#x638;&#x631;&#x629; &#x633;&#x631;&#x64A;&#x639;&#x629; &#x639;&#x644;&#x649; &#x645;&#x62C;&#x627;&#x644; &#x62A;&#x639;&#x644;&#x645; &#x627;&#x644;&#x622;&#x644;&#x629;</title><link>https://academy.hsoub.com/programming/artificial-intelligence/%D9%86%D8%B8%D8%B1%D8%A9-%D8%B3%D8%B1%D9%8A%D8%B9%D8%A9-%D8%B9%D9%84%D9%89-%D9%85%D8%AC%D8%A7%D9%84-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-r1933/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_03/-.png.c6fa820f0ab080b19fed41abd815ee11.png" /></p>
<p>
	بدأنا في هذه السلسلة <a href="https://academy.hsoub.com/tags/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9%20%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1%20%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">برمجة الذكاء الاصطناعي</a> تعريف الذكاء الاصطناعي وارتابط البرمجة والذكاء الاصطناعي ثم تحدثنا عن البرمجة وأساسيات البرمجة بلغة بايثون، وسنكمل في هذا المقال الحديث بالتفصيل عن تخصص تعلم الآلة تحديدًا الذي يندرج ضمن الذكاء الاصطناعي.
</p>

<h2>
	تعريف تعلم الآلة Machine Learning
</h2>

<p>
	عرَّف البروفسور توم ميتشل Tom Mitchell -وهو عالم حاسوب أمريكي وبروفيسور في جامعة Carnegie Mellon في الولايات المتحدة- تعلم الآلة بالتعريف التالي:
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		عندما يتم أمر برنامج الحاسوب للتعلم من الخبرة E ليقدر على أداء المهمة T، والذي تُحسَب دقته عبر مقياس الدقة P، فإذا استطاع البرنامج أداء المهمة T على قدر الدقة المحددة من P عن طريق التعلم من الخبرة E، فإنّ ذلك هو تعلم الآلة.
	</p>
</blockquote>

<p>
	لا بأس إذا بدا ذلك التعريف غامضًا قليلًا، إذ سنشرحه أثناء الحديث عن الخطوات التطبيقية وعملياتها في برمجة تعلم الآلة، كما سيُعرَّف كل رمز من تلك الرموز المذكورة في التعريف بشيء من التفصيل لاحقًا لنرى موقع تلك الرموز من الجانب التطبيقي.
</p>

<p>
	إنّ نماذج تعلم الآلة ما هي إلا خوارزميات بُنيت على قواعد الجبر الخطي والتفاضل والتكامل وعلم الإحصاء؛ ولذلك فإنّ فروع تلك الرياضيات مهمة لدارسي تعلم الآلة ليُؤهلوا لفهم أفضل لما يحدث وراء الأحداث ولفهم ما تفعله الخوارزميات، وبالطبع ستكون محاولة فهم لماذا تعمل تلك الخوارزميات بالأمر الشاق جدًا، وذلك تخصص باحثي الذكاء الاصطناعي القائمين باختراع وتطوير تلك الخوارزميات؛ أما نحن المبرمجين فما نريده لا يزيد عن فهم آلية عمل تلك الخوارزميات.
</p>

<p>
	يُعَدّ تعلم الآلة Machine Learning فرعًا من فروع <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">علم الذكاء الاصطناعي</a>، وبالأحرى هو إحدى طرق صناعة الذكاء من بين طرق متعددة وهو الأكثر شيوعًا في العقد الحالي مع أنّ الأبحاث في ذلك العلم كانت قد بدأت منذ القرن الماضي بالفعل، لكن لم تر تلك الخوارزميات النور لعدم وجود إمكانيات حاسوبية في ذلك الوقت تتيح تنفيذ تلك الخوارزميات، فالحواسيب لم تكن قادرة على تنفيذ هذه المهام، كما أنّ الأمر يتطلب الكثير والكثير من البيانات التي لم تكن لتتوفر بالصورة المطلوبة في ذاك الوقت.
</p>

<p>
	يدعى ذلك العلم في وسط الرياضيات باسم <a href="https://en.wikipedia.org/wiki/Statistical_learning_theory" rel="external nofollow">التعلم الإحصائي Statistical Learning</a> أو التحليلات التنبؤية Predictive Analytics، ويسعى ذلك العلم ببساطة إلى استخراج المعلومات من البيانات السابقة ليتنبأ معلومات أخرى بصورة دقيقة لم يتعرف عليها من قبل.
</p>

<p>
	نرى تطبيقات تعلم الآلة واضحةً في حياتنا اليومية على الإنترنت، إذ تُستخدَم خوارزميات تعلم الآلة في اليوتيوب ليرجِّح المقاطع أثناء تصفحك لمشاهدتها، كما أنّ أمازون تستخدِمها لترجيح المنتجات؛ أما فيسبوك فيستخدِمها في تحديد وجهك ووجه أصدقائك في صوركم معًا، فعندما تتصفح أحد تلك المواقع فستجد على الأرجح في كثير من أجزائها مهامًا تستخدِم فيها إحدى خوارزميات تعلم الآلة، ولكن بعيدًا عن تلك المواقع والمجالات الترفيهية والتجارية، فإنّ لمجال تعلم الآلة أثر عظيم في المجالات العلمية الأخرى، إذ يُستخدَم في تحليل سلاسل الحمض النووي وفي فهم النجوم وإيجاد الكواكب البعيدة وتشخيص الأمراض وإيجاد الأدوية والكثير من الأمور الأخرى.
</p>

<p>
	لا يعني ذلك بالضرورة أنّ كتابة أيّ برنامج تعلم آلة هو حصرًا للمشروعات الكبيرة المؤثرة في العالم، فيمكن الاستفادة من برامج تعلم الآلة على المستوى البسيط، إذ تستخدِم الكثير من الشركات الصغيرة والمتوسطة نماذج تعلم الآلة في اتخاذ القرارات المستقبلية الصحيحة لأعمالها، فلتلك النماذج استخدامات كثيرة منها البسيط ومنها المعقد والكبير.
</p>

<p>
	حتى هذا اليوم معظم التطبيقات الذكية التي تُصنَع دون تعلم الآلة تدعى بالأنظمة الخبيرة، وهي برامج تُستخدَم فيها <a href="https://academy.hsoub.com/programming/python/%D8%A7%D8%AA%D8%AE%D8%A7%D8%B0-%D8%A7%D9%84%D9%82%D8%B1%D8%A7%D8%B1-%D8%A7%D9%84%D8%B9%D8%A8%D8%A7%D8%B1%D8%A7%D8%AA-%D8%A7%D9%84%D8%B4%D8%B1%D8%B7%D9%8A%D8%A9-%D9%88%D8%A7%D9%84%D8%AD%D9%84%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D9%83%D8%B1%D8%A7%D8%B1%D9%8A%D8%A9-%D9%81%D9%8A-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-r1892/" rel="">قواعد اتخاذ القرارات</a>، وهي تُستخدم في معالجة البيانات ومدخلات المستخدِم ثم محاولة كتابة تعليمات شرطية تؤدي إلى ناتج ما، كما تحتاج تلك النظم إلى معرفة دقيقة للغاية بالمهمة المطلوبة، لكن لن يكون البرنامج دقيقًا إلى حد كبير في كثير من الأحوال، كما أنه ستُعاد كتابة أجزاء كبيرة من البرنامج أو حتى إعادة كتابة البرنامج كليةً لإجراء أيّ تعديل بسيط على المنطق الأساسي في البرنامج.
</p>

<p>
	لن تنجح الأنظمة الخبيرة في القيام بالمهام المطلوبة في كثير من الأحوال، فلا يمكن على سبيل المثال لمثل تلك الأنظمة إجراء مهمات متعلقة بالصور مثل تحديد الوجه أو تحديد الكائنات الموجودة في الصور؛ وذلك لأنه يكاد يكون من المستحيل على البشر التوصل إلى آليات وشروط محددة يستطيع كتابتها للحاسوب ليحدد بها خصائص الوجه أو تحديد خصائص كائنات معينة في الصور، إذ أنّ طريقة معالجة البشر للصور في الدماغ تختلف عن الحاسوب، فمشكلة تحديد الوجوه البشرية في الصور تلك ظلت غير محلولة حتى عام 2001م، إذ جرى صناعة نموذج تعلم آلة يستخدم الكثير من صور الوجوه البشرية لتحديد الخصائص التي يمكن عن طريقها تحديد الوجه البشري في الصور.
</p>

<p>
	كما أوردنا فإن تعلم الآلة هو تخصص فرعي من تخصصات الذكاء الاصطناعي، ولكن حتى تعلم الآلة ينقسم إلى تخصصات فرعية أخرى مثل التعلم العميق Deep Learning وهو المختص بحل المشكلات والتطبيقات المعقدة عن طريق محاكاة شبكة عصبية من الدماغ البشري ويعمل ذلك الفرع على حل مشكلات مثل تطبيقات التعرف على الوجوه في الصور وغيرها.
</p>

<p>
	يعتمد تعلم الآلة اعتمادًا كبيرًا على البيانات الضخمة Big Data وجودة تلك البيانات؛ ولذلك يتداخل تخصص تعلم الآلة مع تخصص آخر يدعى <a href="https://academy.hsoub.com/programming/general/%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA/" rel="">علم البيانات Data Science</a>، والحدود بين العلمين غير واضحة بصورة دقيقة، إلا أننا نستطيع القول بأن تعلم الآلة يعتمد على علم البيانات وليس العكس، إذ يستطيع عالم البيانات التعامل مع البيانات الكبيرة وتحسين جودتها عبر الأساليب المدروسة مسبقًا حتى تكون البيانات جاهزةً بالفعل لتدريب نموذج تعلم الآلة المراد صنعه، وذلك عادةً ما يفعله مهندس تعلم الآلة، إذ أنه في كثير من الأحوال وخاصةً في الشركات الصغيرة لا يوجد متخصص في علوم البيانات لتحسينها قبل إرسال البيانات إلى مهندس تعلم الآلة للتدريب النموذج، ولا بأس إذا بدت الأمور غير واضحة لك حتى الآن.
</p>

<p>
	توضح الصورة التالية العلاقة بين الذكاء الاصطناعي Artificial Intelligence وتعلم الآلة Machine Learning والتعلم العميق Deep Learning.
</p>

<p style="text-align: center;">
	<img alt="الذكاء الاصطناعي وتعلم الآلة والتعلم العميق.png" class="ipsImage ipsImage_thumbnailed" data-fileid="122548" data-ratio="78.25" data-unique="uysuymqu3" style="width: 400px; height: auto;" width="558" src="https://academy.hsoub.com/uploads/monthly_2023_04/-----.png.0c1d0aa1976b6d471f0404bf637b3424.png">
</p>

<p>
	أما الصورة التالية، فستستطيع من خلالها فهم الترابط والتداخل بين علم البيانات Data Science وعلوم الذكاء الاصطناعي المختلفة.
</p>

<p style="text-align: center;">
	<img alt="تداخل علوم الذكاء الاصطناعي وعلم الباينات.png" class="ipsImage ipsImage_thumbnailed" data-fileid="122547" data-ratio="76.25" data-unique="bg2slvott" style="width: 400px; height: auto;" width="514" src="https://academy.hsoub.com/uploads/monthly_2023_04/-----.png.dc8989ede29154ee0eae36204a262e11.png">
</p>

<p>
	عرَّف أرثر صامويل Arthur Samuel في عام 1959م تعلم الآلة بأنه حقل الدراسة الذي يعطي للحواسيب القدرة على التعلم دون أن تكون مبرمجةً صراحةً، ونجد أنّ ذلك التعريف معبر للغاية، وقد ظل ذلك التعريف مستخدمًا حتى اليوم، ولكن مع ذلك فإنه قد يُفهم التعريف بصورة خاطئة عند كثير من غير المتخصصين، إذ أنّ أرثر لم يقصد أنه بإمكان الآلات اتخاذ القرارات بدون برمجة مسبقة على الإطلاق لأن ذلك لم يحصل، إذ أنّ مجال تعلم الآلة يعتمد اعتمادًا كبيرًا على البرمجة، ولكن يقصد بذلك أنّ الآلة تستطيع التعلم من البيانات لاستنباط واستنتاج أنماط من خلال علم الإحصاء وخوارزميات الرياضيات المكتوبة بلغة البرمجة لتستطيع من خلالها التوقع أو أداء مهمة ما بناءً على برمجة مسبقة، ولكنها ليست برمجة صريحة بالمعنى التقليدي الذي يحدد مخرجات البرامج بصورة نوعية وكمية.
</p>

<p>
	كان أرثر صامويل من أوائل مَن استخدم مصطلح تعلم الآلة Machine Learning وذلك في الورقة البحثية التي نشرها في العام نفسه 1959 والذي عرف فيه المصطلح بعنوان Some Studies in Machine Learning Using the Game of Checkers، وهو يحاول في تلك الورقة إثبات أنه بإمكان الآلات تعلم لعب الألعاب وبمستوى أفضل من مبرمج الآلة نفسه.
</p>

<h2>
	الفرق بين البرمجة الاعتيادية وبرمجة تعلم الآلة
</h2>

<p>
	تختلف <a href="https://academy.hsoub.com/programming/general/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%AD%D8%A7%D8%B3%D9%88%D8%A8-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-r1956/" rel="">برمجة الحاسوب</a> الاعتيادية وبرمجة نماذج تعلم الآلة في أوجه كثيرة سنناقشها في هذا القسم.
</p>

<h3>
	البيانات الضخمة Big Data
</h3>

<p>
	لا تحتاج البرمجة الاعتيادية في أغلب الأحوال إلى بيانات ضخمة لصناعة تطبيقاتها، فبالرغم من كونها قد تخزِّن تلك البيانات الضخمة واستخدامها، إلا أنها ليست ضرورية، ولكن تحتاج برمجة تعلم الآلة إلى البيانات الضخمة بصورة أساسية حسب ما يراد برمجته، فمثلًا في حال برمجة نموذج تعلم آلة -أو بالأحرى نموذج تعلم عميق- يحدِّد الوجوه البشرية في الصور، فسنحتاج إلى كثير من الصور التي تحتوي على وجوه بشرية حصرًا وبصورة واضحة حتى يتعلم منها النموذج خصائص الوجه البشري، أو مثلًا إذا أردنا برمجة نموذج تعلم آلة يتوقع قيمة سعر منزل في منطقة ما، فسنحتاج إلى بيانات تحتوي على خصائص العقارات وأسعارها في تلك المنطقة لنمرر بعدها تلك البيانات للنموذج وليتعلم منها خصائص كل عقار وسعره حتى يستطيع بعد ذلك توقع سعر أيّ عقار في تلك المنطقة بناءً على خصائصه حتى ولو لم يكن ذلك العقار من ضمن العقارات التي مررناها إليه مسبقًا، وبناءً على ذلك فإنّ الحاجة إلى البيانات الكبيرة في نماذج تعلم الآلة ضروري وأساسي للغاية، كما أنّ تحسين جودة تلك البيانات أيضًا ضروري.
</p>

<h3>
	الدقة وآلية العمل
</h3>

<p>
	تُمرَّر مدخلات المستخدِم في البرمجة الاعتيادية، ثم إجراء عمليات محددة مسبقًا من قبل البرنامج ثم إرجاع الخرج إلى المستخدِم مرةً أخرى؛ أما في تعلم الآلة فالأمر يختلف قليلًا، إذ تُستقبَل في كثير من الأحيان مدخلات من المستخدِم فعلًا، مع ذلك فإنه لا تُجرى عمليات محددة مسبقًا من قِبَل البرنامج، وإنما تُمرَّر المدخلات إلى الخوارزمية -أي النموذج- الذي دُرِّب من قبل حتى يتوقع الخرج الذي سيعاد مرةً أخرى إلى المستخدِم، ولنأخذ المثال السابق للعقارات لفهم ذلك بصورة واضح.
</p>

<p>
	لا يسعنا سوى استخدام قواعد اتخاذ القرارات لتحديد سعر العقار في البرمجة الاعتيادية، فإذا طلبنا مثلًا من المستخدِم إدخال عدد غرف العقار ومساحته بالمتر المربع، فكل ما يسعنا فعله هو كما يلي: إذا كان عدد الغرف أكبر من غرفتين والمساحة أكبر من 100 متر مربع، فسيكون السعر 100 ألف دولار أمريكي، فيما عدا ذلك فسيكون السعر 80 ألف دولار أمريكي، وبذلك فإنه لمن المستحيل أن يُعيد البرنامج أية قيمة سوى 100 ألف أو 80 ألف فقط، وهي القيم المبرمَجة بالفعل، ولكن مع ذلك فيمكننا تعقيد المثال بصورة أكبر حتى يُحسَب سعر أساسي تبعًا للمتر المربع ثم إجراء بعض العمليات الحسابية بناءً على عدد الغرف مثلًا، لكن في النهاية سيكون سعر المتر عددًا محددًا بالفعل من مجموعة أعداد محدَّدة من قبل المبرمِج.
</p>

<p>
	أما في الواقع، يختلف سعر المتر المربع من شارع إلى آخر ومن مبنى إلى آخر، في حين أن الأمر يختلف في نماذج تعلم الآلة لأننا في تلك الحالة ننشئ نموذجًا بناءً على إحدى الخوارزميات التي نختارها تبعًا للمشكلة المراد حلها، ثم ندرِّب تلك الخوارزمية على بيانات العقارات في تلك المنطقة، إذ ستحتوي تلك البيانات على مساحة وعدد غرف كل عقار ثم سعر كل عقار، بعد ذلك نختبر النموذج لمعرفة مدى دقة توقعه لأسعار العقارات عند إدخال بيانات عقار آخر، أي المساحة وعدد الغرف.
</p>

<h3>
	الحدود النوعية
</h3>

<p>
	كما أوردنا من قبل في هذا المقال أنه توجد الكثير من المشكلات التي من المستحيل واقعيًا تجسيدها عبر البرمجة التقليدية مثل مشكلة التعرف على الوجوه في الصور ومشكلة الترجمة من لغة إلى أخرى بصورة دقيقة ومشكلة التعرف على الصوت وتحويله إلى نص والعكس؛ أما في تعلم الآلة فالأمر مختلف، إذ أنّ تلك المهام التي تُعَدّ مستحيلةً في البرمجة العادية، أصبحت الآن متواجدة تواجدًا فعليًا في حياتنا اليومية، ويضيف الباحثون كل عام نماذج وخوارزميات جديدةً لحل مشكلات جديدة لم تحل من قبل أو خوارزميات لحل مشاكل موجودة لكن بجودة أعلى عبر تعلم الآلة حتى وصلنا اليوم إلى نماذج وتطبيقات مبهرة مثل تطبيق الدردشة ChatGPT وتطبيقات تصميم الصور بناءً على كتابة وصف لها مثل نموذج DALL-E.
</p>

<p>
	لنأخذ تلك الأوقات التي نتصفح فيها اليوتيوب مثالًا لتوضيح أكثر، فقد تشاهد في أحيان كثيرة مقاطعًا رياضيةً لدوري كرة القدم الإسباني ودوري كرة القدم الإنجليزي، وستلاحظ في تلك الحالة أن الموقع يرشِّح لك دائمًا ذلك النوع من المقاطع في كل فرصة، مع ذلك فلم يتخذ مبرمِجي الموقع ذلك القرار صراحةً، إذ أنهم لم يكتبوا في برمجية الموقع تعليمة مثل أنه إذا شاهد المستخدِم ذلك المقطع رقم 42 وذاك المقطع رقم 55، فاعرض له المقطع 43 و56 ، وإنما استخدموا إحدى خوارزميات تعلم الآلة التي ترشِّح المقاطع المشابهة لتلك المقاطع التي تشاهدها باستمرار بناءً على ما تقضيه من وقت في مشاهدتها وبناءً على إعجاباتك على المقاطع وعلى تعليقاتك، …إلخ. وبذلك يتضح لنا جليًا مقصد أرثر صامويل في تعريفه لتعلم الآلة.
</p>

<h2>
	أقسام تعلم الآلة
</h2>

<p>
	تنقسم نماذج تعلم الآلة إلى عدة أقسام تبعًا لطريقة عملها، إذ يوجد التعلم تحت إشراف Supervised Learning والتعلم دون إشراف Unsupervised Learning والتعلم المعزز Reinforcement Learning.
</p>

<h3>
	التعلم تحت إشراف Supervised Learning
</h3>

<p>
	أول قسم من أقسام تعلم الآلة هو التعلم تحت إشراف Supervised Learning ، ويُعرَف أيضًا بالتعلم الاستقرائي Inductive Learning، وهو من أشهر أقسام تعلم الآلة وأكثرها استخدامًا وأيسرها في الفهم والبرمجة، فالتعلم تحت إشراف عمومًا أسهل كثيرًا من التعلم دون إشراف Unsupervised Learning لأنه يعتمد على الاستقراء المبني على معرفتنا المسبقة بجميع خواص النموذج وعلى المدخلات والمخرجات المرادة.
</p>

<p>
	تُدرَّس الفكرة الأساسية في التعلم الاستقرائي بالفعل في مناهج الرياضيات في المرحلة الثانوية عادةً، والفكرة في الأمر كله إيجاد أفضل خط يمر بين نقاط عدة بين المدخلات ومخرجاتها لتوقع مخرجات لمدخلات جديدة، وبرغم كون الأمر يبدو مبهمًا، إلا أنه في غاية البساطة وسيتضح ذلك لاحقًا.
</p>

<p>
	يعمل التعلم الاستقرائي رياضيًا على دالة تستقبل مدخلات تُدخَل في معادلة جبرية لاستخراج الناتج المتوقع، وتلك المعادلة تضرب المدخلات وتجمعها مع ثوابت أخرى تمثِّل أفضل قيم ممكنة لتوقع الناتج الأقرب للواقع، وتلك الدالة تدعى دالة الفرضية Hypothesis Function وتدعى أيضًا بالمتوقِّع Predictor، فهدف النموذج في النهاية هو تعديل ثوابت دالة الفرضية لهدف تقريب ناتجها مع الناتج الحقيقي، ولمحاولة تبسيط المعنى بغض النظر عن دقة المثال، فلنفترض وجود الدالة الآتية:
</p>

<pre class="ipsCode">f(x) = x + 1
</pre>

<p>
	في حال كان المتغير x يساوي 1 فإن الدالة ستنتج 2، وفي حال كان المتغير x يساوي 2 فإن الدالة ستنتج 3، …إلخ، ثم بعد ذلك لنفترض أننا نحاول الإتيان بفرضية ناتجها مقارب جدًا إلى ناتج الدالة أعلاه، إذ توجد عدة فرضيات محتملة مثل:
</p>

<pre class="ipsCode">f(x) = x + 0.9
f(x) = x + 0.5
f(x) = x + 0.99
</pre>

<p>
	عند محاولة استخدام الفرضية الأولى في حالة كان المتغير x يساوي 1 فسيكون الناتج 1.9، وهو يقارب الناتج الحقيقي حال كون x يساوي 1 في الدالة، إذ كان الناتج الحقيقي للدالة هو 2 وناتج الفرضية 1.9، وهما ناتجان متقاربان للغاية، كما يبدو الأمر أكثر تقاربًا عند استخدام الفرضية الثالثة، ففي حال كان المتغير x يساوي 1 فسيكون الناتج 1.99، وهو أقرب للناتج الحقيقي من 1.9؛ وبناءً على ذلك نستنتج أنّ الفرضية الثالثة أفضل من الفرضية الأولى. في حين أن الفرضية الثانية هي الأقل دقة، فعند تطبيقها حال كون المتغير x يحمل القيمة 1 فإن الناتج سيكون 1.5، وهو الأبعد عن الناتج الحقيقي من الفرضية الأولى والفرضية الثالثة.
</p>

<p>
	إذًا الفرق بين الفرضيات الثلاثة والتي تمثِّل دورًا مفصليًا في جودة الناتج هو العدد الرقم الأخير، وهو في حالة التعلم الاستقرائي أحد الثوابت Constants في المعادلة والتي نحاول الإتيان بأفضل قيمة ممكنة له حتى تنتج دالة الفرضية ناتجًا مقاربًا للحقيقة بأكبر قدر ممكن، في مثالنا السابق اخترنا الفرضية الثالثة والتي تمثل أعلى دقة، وبالتالي يمكن تجربة دالة تلك الفرضية على مدخلات أخرى، فإذا كان المتغير x يساوي 2 مثلًا، فسيكون ناتج الفرضية 2.99 وهو قريب جدًا من ناتج الدالة الأصلية.
</p>

<p>
	إنّ محاولة الوصول إلى أفضل قيم للثوابت في دالة الفرضية هي ما تكون عن طريق جزء التعلم Learning في التعلم الاستقرائي، وتوجد تقنيات وطرق رياضية وخوارزميات مختلفة للوصول إلى القيم المثلى لتلك الثوابت في علم التعلم الإحصائي Statistical Learning الذي أحلنا إليه مسبقًا، ولكون التعلم الاستقرائي أو التعلم تحت إشراف هو أسهل أنواع نماذج تعلم الآلة وأكثرها شيوعًا، ففي هذه السلسلة نحاول التركيز بصورة كبيرة على ذلك النوع من التعلم، وبالرغم من كون الأمر قد يبدو لك معقدًا ومبهمًا فإن ذلك طبيعي للغاية، إذ نهدف من هذا الفصل إلى تعريف بعض المبادئ فقط؛ أما شرح تلك النقاط فسيكون في الفصول القادمة.
</p>

<p>
	سنورد ثلاثة أمثلة على التعلم تحت إشراف وهي تحديد نوع السرطان في الصور الطبية إذا كان خبيثًا أو حميدًا، وتحديد إذا كانت عملية تحويل الاموال سليمةً أم مشبوهةً، وقراءة أرقام مكتوبة بخط اليد في القسم التالي، مع أنه توجد أمثلة أبسط على ذلك النوع من التعلم أيضًا، فمثلًا يمكننا محاولة استقراء راتب موظف عن طريق عدد سنين خبرته، إذ يكون عدد سنين الخبرة هو الدخل الوحيد لدينا في ذلك المثال وهو يمثل قيمة المتغير x في الدالة؛ أما راتب الموظف فهو ناتج الدالة. أمثلة أخرى من قبيل استقراء سعر شقة أو عقار في المناطق، أو تصنيف الرسائل البريدية إن كانت سليمة أم مزعجة.
</p>

<p>
	الجدير بالذكر هنا أنه يوجد نوعان رئيسيان من مشاكل التعلم تحت إشراف أولهما هو التوقع الخطي أو ما يدعى بالانحدار الخطي Linear Regression، وهي المشاكل التي يتم فيها توقع قيمة مستمرة Continuous Value، أي قيم غير محددة مثل ثمن عقار أو راتب موظف، وثانيهما التصنيف Classification، أو ما يدعى بالتوقع اللوجيستي أو الانحدار اللوجيستي Logistic Regression، وهي المشاكل التي تقرَّب فيها القيم المتوقعة إلى تصنيف محدد، مثل تصنيف الرسائل البريدية إذا كانت صحيحةً أو مزعجةً، أو تصنيف عمليات التحويل المالية إذا كانت سليمةً أو مشبوهةً، أو تصنيف صورة ما إذا كانت تحتوي على قطة أو كلب، أو تصنيف صورة ما إذا كانت تحتوي على وجه بشري أو لا.
</p>

<h3>
	التعلم دون إشراف Unsupervised Learning
</h3>

<p>
	القسم الثاني من أقسام تعلم الآلة هو التعلم دون إشراف Unsupervised Learning وهو أكثر تعقيدًا من التعلم تحت إشراف؛ وذلك لكون المعطيات لا تكون واضحةً تمامًا لنا في هذا النوع من التعلم، فنحن نسعى في ذلك النوع من التعلم إلى إيجاد أنماط مشتركة بين البيانات لتُصنَّف بشكل أو بآخر.
</p>

<p>
	سُمِّي ذلك النوع بالتعلم دون إشراف لعدم وجود ناتج حقيقي نقييم ونعلِّم النموذج حتى يصل إلى أقرب قيمة له، ففي الأمثلة الواردة في التعلم تحت إشراف كانت لدينا دالة تحتوي على معادلة تنتج قيمة، وتلك الدالة تنتظر معاملًا أو متغيرًا يدعى x، وعندما يساوي ذلك المتغير 1 فإن ناتج الدالة يكون 2، وبذلك يصبح الرقم 2 هو الناتج الحقيقي المراد الوصول إلى أقرب قيمة له عن طريق دالة الفرضية، إذ كان لدينا في التعلم تحت إشراف مدخلات ومخرجات يراد توقعها؛ أما في التعلم دون إشراف فلا توجد مخرجات أصلًا، أي لا يوجد الناتج 2، فنحن فقط لدينا مدخلات مختلفة مثل x عندما تساوي 1 وx عندما تساوي 2 وx عندما تساوي 3 …إلخ، وبالرغم من كون تلك الأمثلة ليست دقيقةً للغاية، إلا أنها فقط لمحاولة إيضاح فكرة عامة عن التعلم دون إشراف والفرق بينه وبين التعلم تحت إشراف.
</p>

<p>
	يُعَدّ كل من تحويل مجموعة البيانات Dataset Transformation وخوارزميات التجميع Clustering Algorithms تقنيتَين من تقنيات التعلم دون إشراف؛ أما الأولى فهي عملية تسعى إلى تحويل البيانات التي يُدرَّب النموذج عليها حتى تكون في صورة أكثر إفادة وسهولة في التعامل، وقد يتم ذلك حتى يستطيع المبرمج فهم البيانات بشكل أفضل، أو حتى يتم تهيئة البيانات لخوارزمية تعلم آلة أخرى، ومن أهم تطبيقات ذلك النوع من الخوارزميات -أي خوارزميات تحويل هيئة مجموعة البيانات- هو تقليص الأبعاد Dimensionality Reduction، فقد تحتوي مجموعة البيانات على أبعاد كثيرة مختلفة يصعب التعامل معها، والبعد في علوم البيانات وتعلم الآلة يشير إلى الميزة أو الخاصية في البيانات والتي أشرنا إليها عند الحديث عن هندسة الميزات أو هندسة الخواص Feature Engineering، وهي ببساطة العمود إذا رسمنا البيانات على هيئة جدول، ففي حال كان لدينا مجموعة بيانات لموظفي شركة ما على سبيل المثال، وكانت تلك البيانات تحتوي على العمر والاسم وتاريخ الميلاد والمؤهل الدراسي لكل موظف، فإن كل خاصية من تلك الخواص هي بُعد من الناحية التقنية والرياضية، أي أن الاسم بُعد والعمر بُعد وتاريخ الميلاد بُعد والمؤهل الدراسي بُعد، …إلخ.
</p>

<p>
	إن هدف تحويل مجموعة البيانات هو تقليل عدد الخواص في البيانات عبر تعلم الأنماط المشتركة، وإنّ لتلك التقنية استخدامات عدة من أبرزها تقليل عدد الأبعاد إلى بعدين فقط لتسهيل عملية تصوير البيانات في رسوم بيانية، وهناك أيضًا بعض التطبيقات الأخرى مثل استخراج كلمة مفتاحية واحدة تعبِّر عن كل مقالة من مجموعة من المقالات بناءً على محتواها؛ أما خوارزميات التجميع فهي تهدف إلى إيجاد البيانات المتشابهة والمختلفة للتمييز بين كل مجموعة من البيانات، فيمكن مثلًا تقسيم مجموعة من الصور حسب الأشخاص الموجودين فيها، إذ تُقسَّم مجموعة من الصور لوجود الشخص 1 فيها ومجموعة أخرى من الصور لوجود الشخص 2 فيها، وعلى الرغم من أنّ الخوارزمية لا تعرف هذا ولا ذاك، ولكنها تقسِّم مجموعة البيانات إلى مجموعات أصغر بناءً على التشابهات والاختلافات الموجودة في كل صورة.
</p>

<h3>
	التعلم شبه الخاضع للإشراف Semi-supervised Learning
</h3>

<p>
	التعلم شبه الخاضع للإشراف Semi-supervised Learning هو مزيج بين القسمين السابقين، لذلك قد لا يُذكر في بعض الكتب والمراجع، وهو عن التعامل مع البيانات التي يحتوي بعضها وليس كلها على مخرجات، فقد يكون لدينا مثلًا بيانات لموظفي شركة ما ويوجد لدينا خواص مثل الاسم والعمر والمؤهل الدراسي لكل موظف، ومع ذلك فإن بعض هؤلاء الموظفين لدينا عنهم معلومات إضافية مثل الراتب، وبذلك أصبح لدينا معلومات إضافية لبعض الموظفين.
</p>

<p>
	أحد الأمثلة التطبيقية على ذلك النوع هو خدمات رفع الصور مثل خدمة Google Photos، إذ أنه بعد رفع صورك مع أفراد العائلة، ستتمكًن الخدمة من معرفة أن الشخص س ظهر في الصورة 1 و3 و6؛ أما الشخص ع ظهر في الصورة 2 و3 و4، وهذا الجزء دون إشراف، ولكن قد تتمكن الخدمة من معرفة أنّ الشخص س، هو في الحقيقة اسمه زيد، ولكنها لا تعرف اسم الشخص ع، إذ لا توجد لديها تلك المعلومة، وتستخدِِم الخدمة تلك المعلومة الإضافية لتوفر لمستخدميها خدمة البحث في الصور عن طريق الأسماء.
</p>

<h3>
	التعلم المعزز Reinforcement Learning
</h3>

<p>
	يُعَدّ التعلم المعزز أو التعلم التعزيزي Reinforcement Learning أكثر أنواع تعلم الآلة طموحًا وأكثرها صعوبةً وتعقيدًا بالطبع وهو وحش مختلف تمامًا عن باقي الأنواع، إذ في التعلم المعزز يُصنَع نظام تعلم يدعى بالوكيل Agent، وفي هذا الإطار يلاحظ الوكيل ما حوله في البيئة ثم يتخذ قرارًا بإجراء فعل ما، ويحصل بناءً على ذلك الفعل على نقاط مكافأة Rewards أو على نقاط عقوبة Penalties، وعن طريق تلك النقاط يجب على الوكيل تحديد الاستراتيجية المثلى للتعامل مع المواقف واتخاذ القرار الصحيح، وتلك الاستراتيجية التي يطورها الوكيل تدعى سياسة العمل Policy، والأمر هنا كما تلاحظ أشبه بتعليم طفل صغير وما يجب أن يفعله وما لا يجب أن يفعله عن طريق نظام الثواب والعقاب.
</p>

<p>
	تُعَدّ طريقة تطوير سياسة العمل تلك هي أنواع الخوارزميات في التعلم المعزز وتدعى Policy-Based Algorithms أي الخوارزميات القائمة على السياسة، ولكن يوجد أنواع أخرى مثل القائمة على القيمة Value-Based والقائمة على النموذج Model-Based، …إلخ، والأمثلة التطبيقية على هذا النوع من التعلم شتى، إذ أنّ الكثير من الروبوتات مبرمجة عن طريق ذلك النوع من نماذج تعلم الآلة لتتعلم كيفية المشي، ومثال آخر هو برنامج ألفا جو Alpha Go الذي تصدر الأخبار عام 2016م حين هزم بطل العالم في لعبة جو اللاعب لي سيدول Lee Sedol، وهذا البرنامج قد صُنِع من قِبَل شركة Deep Mind وهي شركة بريطانية متخصصة في أبحاث الذكاء الاصطناعي تأسست عام 2010م وقد استحوذت عليها شركة جوجل عام 2014م والتي بدورها تغير اسمها إلى Alphabet عام 2015م، لتصبح شركة جوجل شركات Alphabet بجانب Deep Mind.
</p>

<p>
	تعلَّم برنامج ألفا جو لعب تلك اللعبة عن طريق التعلم المعزز، إذ حلل البرنامج ملايين الاحتمالات في اللعبة ثم لعب ضد نفسه مرارًا وتكرارًا عبر نظام نقاط الثواب والعقاب، حتى أنه طوَّر السياسة المناسبة Policy والتي استخدمها في اللعب ضد بطل العالم في اللعبة، ونذكر هنا أن البرنامج أثناء اللعب ضد بطل العالم لم يكن في تلك المرحلة في إطار التعلم، وإنما كان في إطار استخدام السياسة التي طورها أثناء تعلمه السابق لمباراته ضد بطل العالم.
</p>

<p>
	ودونًا عن باقي أقسام تعلم الآلة، فإن التعلم المعزز لا يحتاج بصورة ضرورية إلى بيانات مسبقة للتعلم منها، وإنما يتعلم من خلال خبرته الشخصية عبر الثواب والعقاب والتجربة والخطأ كما أوردنا، والهدف النهائي لهذا النموذج هو تعظيم نقاط المكافأة على المدى الطويل، ونلاحظ أيضًا من أهم الاختلافات بين التعلم المعزز وباقي أقسام خوارزميات تعلم الآلة أنّ التعلم المعزز يقوم بالتعلم باستمرار دون توقف، في حين أنّ نماذج التعلم تحت إشراف والتعلم دون إشراف تصل إلى نقطة محددة بعد التعلم من البيانات الممررة إليها لتصل إلى ذروة ما تستطيع الوصول إليه من معدل الدقة، وعند تلك النقطة يقف النموذج عن التطور والتعلم.
</p>

<p>
	إنّ من أفضل طرق تخيل أمر التعلم المعزز هو تخيل لعبة حاسوبية يلعبها الوكيل Agent، إذ أنه لديه مهمة طويلة المدى مع مجموعة من الأفعال التي من الممكن أن يتخذها عند الحاجة، ولكنه عند القيام بالفعل الخاطئ، سيُخصَم من نقاطه في اللعبة، في حين أنّ أداء الفعل الصحيح سيزيد من نقاطه، وبذلك هو يقوم بتطوير وتصقيل مهاراته في اللعبة واستراتيجيته في ممارستها يومًا بعد يوم بناءً على البيانات المسبقة التي تمثلها الخبرة التي اكتسبها أثناء لعبها آلافًا من المرات، ومن التقنيات الخاصة بالتعلم المعزز هي مقايضة الاستكشاف والاستغلال Exploration and Exploitation Tradeoff وعمليات قرار ماركوف Markov Decision Processes أو MDPs اختصارًا في بعض المراجع، بالإضافة إلى تعلم كيو Q-Learning، والتعلم المعزز العميق Deep Reinforcement Learning.
</p>

<div class="banner-container ipsBox ipsPadding">
	<div class="inner-banner-container">
		<p class="banner-heading">
			دورة الذكاء الاصطناعي
		</p>

		<p class="banner-subtitle">
			احترف برمجة الذكاء الاصطناعي AI وتحليل البيانات وتعلم كافة المعلومات التي تحتاجها لبناء نماذج ذكاء اصطناعي متخصصة.
		</p>

		<div>
			<a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://academy.hsoub.com/learn/artificial-intelligence" rel="">اشترك الآن</a>
		</div>
	</div>

	<div class="banner-img">
		<a href="https://academy.hsoub.com/learn/artificial-intelligence" rel=""><img alt="دورة الذكاء الاصطناعي AI" src="https://academy.hsoub.com/learn/assets/images/courses/artificial-intelligence.png"></a>
	</div>
</div>

<h2>
	مشاكل يحلها تعلم الآلة
</h2>

<p>
	سنتعرف الآن على التطبيقات التي يمكن حلها تبعًا لكل قسم من أقسام تعلم الآلة التي أشرنا إليها للتو.
</p>

<h3>
	تحديد نوع السرطان إن كان خبيثا أو حميدا
</h3>

<p>
	يمكن لنماذج تعلم الآلة بناءً على الصورة الطبية تحديد ما إذا كان يوجد سرطان خبيث أو حميد، وستحتاج لإجراء ذلك إلى عدد كبير من الصور الطبية مع تحديد كل صورة كون السرطان الموجود فيها خبيثًا أم حميدًا، وقد تحتاج لذلك إلى رأي طبيب متخصص، بعد تمرير تلك الصور مع نوع السرطان في كل صورة إلى نموذج تعلم الآلة، فسيكون النموذج قادرًا على استقبال صورة طبية جديدة تمامًا ليحدِّد نوع السرطان بناءً على ما تعلمه من قبل في النماذج التي مررتها إليه، ويندرج ذلك النوع من النماذج تحت تصنيف التعلم تحت إشراف.
</p>

<h3>
	تحديد ما إن كانت التحويلات الائتمانية صحيحة أم مشبوهة
</h3>

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

<h3>
	قراءة أرقام مكتوبة بخط اليد
</h3>

<p>
	نحتاج إلى كثير من الصور لتدريب ذلك النموذج، والتي تحتوي على أرقام مكتوبة بخط اليد، مع إدخال الرقم الموجود في كل صورة ضمن البيانات ليتم التدريب، إذ يصبح لدى النموذج خبرةً بقدر كاف لاستقبال صور جديدة لا يعرف الأرقام الموجودة فيها ليستخرجها هو، ارجع مثلًا إلى مقال <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A8%D9%86%D8%A7%D8%A1-%D8%B4%D8%A8%D9%83%D8%A9-%D8%B9%D8%B5%D8%A8%D9%8A%D8%A9-%D9%84%D9%84%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D8%A3%D8%B1%D9%82%D8%A7%D9%85-%D8%A7%D9%84%D9%85%D9%83%D8%AA%D9%88%D8%A8%D8%A9-%D8%A8%D8%AE%D8%B7-%D8%A7%D9%84%D9%8A%D8%AF-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D9%85%D9%83%D8%AA%D8%A8%D8%A9-tensorflow-r1267/" rel="">بناء شبكة عصبية للتعرف على الأرقام المكتوبة بخط اليد باستخدام مكتبة TensorFlow</a> لتطلع على مثال عملي.
</p>

<p>
	نلاحظ أن المشترك بين التطبيقات الثلاثة السابقة هو وجود مدخلات ومخرجات في البيانات الممررة إلى النموذج، ففي المثال الأول نحن لا نقوم فقط بتمرير العديد من الصور الطبية، بل نقوم بتحديد ما إن كان السرطان الموجود فيها حميدًا أم خبيثًا حتى يتعلم النموذج أنّ الصورة 1 فيها سرطان خبيث، والصورة 2 فيها سرطان حميد، والصورة 3 فيها سرطان حميد، …إلخ، وبعد التدريب تصبح لدينا إمكانية تمرير الصورة الطبية فقط دون تحديد نوع السرطان، إذ سيفعله النموذج بالفعل بناءً على ما تعلمه مسبقًا من الصور والمخرجات التي مررتها إليه.
</p>

<p>
	وكذلك الأمر في النموذج الثاني، إذ لا نمرر بيانات عمليات التحويل فقط، وإنما نمرر معلومة إضافية مع كل عملية تحويل -وهو الخرج- وهي إذا كانت تلك العملية عمليةً سليمة أم عمليةً مشبوهةً ليُدرَّب النموذج عليها وليتعرف على أكبر عدد ممكن من العمليات الصحيحة والعمليات المشبوهة، وبعد مرحلة التدريب تلك نستطيع تمرير بيانات عملية تحويل جديدة كليًا -دون خرجها- لم يُدرَّب النموذج عليها، حتى يحدد النموذج ما إذا كانت العملية سليمةً أم مشبوهةً بناءً على ما تدرب عليه مسبقًا، وكذلك الأمر في المثال الثالث.
</p>

<p>
	يدعى ذلك النوع من النماذج التي نمتلك فيها المدخلات والمخرجات المراد توقعها بعد ذلك من النموذج بالتعليم تحت إشراف، ونلاحظ أنه بالرغم من كون التطبيقات الثلاثة تحت تصنيف واحد، إلا أنّ أمر جمع وتنقية تلك البيانات اللازمة لتدريب النموذج تتباين للغاية، إذ سيكون من الصعب جمع مثل تلك البيانات في المثال الأول، كما أنه لتحسين جودة البيانات وتنقيتها فإنه يجب استخدام خبير طبي في مثل تلك الصور، لكن الأمر يختلف في نموذج عمليات التحويلات المالية، إذ قد تكون تلك البيانات متاحةً من قِبَل بعض الشركات بالرغم من كونها بيانات غاية في الدقة والحساسية بسبب خصوصيتها؛ أما المثال الثالث فإنه بسيط للغاية ولا يتطلب متخصصين، إذًا أمر تطبيقات تعلم الآلة يختلف كثيرًا باختلاف مجال التطبيق، حتى وإن تشابهت في نوع الخوارزميات، وفيما يلي أمثلة على تطبيقات أخرى.
</p>

<h3>
	تحديد المواضيع التي تتحدث عنها المقالات
</h3>

<p>
	لنقل أنه لديك عدد كبير من المقالات المكتوبة التي تريد استخراج المواضيع المهمة التي تتحدث عنها كل مقالة من تلك المقالات، في تلك الحالة أنت فقط لديك المدخلات -أي نصوص المقالات- ولا يوجد لديك فكرة واضحة عن المخرجات، إذ لا تعرف ما هي تلك المواضيع ولا تعرف كم عدد الموضوعات الممكن إيجادها.
</p>

<p>
	ارجع إلى مقال <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AA%D8%B5%D9%86%D9%8A%D9%81-%D8%A7%D9%84%D8%B4%D8%AE%D8%B5%D9%8A%D8%A7%D8%AA-%D8%A8%D8%A7%D9%84%D8%A7%D8%B9%D8%AA%D9%85%D8%A7%D8%AF-%D8%B9%D9%84%D9%89-%D8%AA%D8%BA%D8%B1%D9%8A%D8%AF%D8%A7%D8%AA%D9%87%D9%85-%D8%A7%D9%84%D8%B9%D8%B1%D8%A8%D9%8A%D8%A9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%B9%D9%85%D9%8A%D9%82-r1630/" rel="">تصنيف الشخصيات بالاعتماد على تغريداتهم العربية باستخدام التعلم العميق</a> للاطلاع على مثال عملي مشابه.
</p>

<h3>
	تقسيم العملاء حسب تفضيلاتهم الشرائية
</h3>

<p>
	نريد في هذا النموذج تقسيم العملاء حسب تفضيلاتهم الشرائية، وفي تلك الحالة نحن نملك بيانات العملاء، لكننا مع ذلك لا نعرف ما هي تلك التقسيمات وما عددها، لا نعلم إذا كان لدينا مَن يفضِّل شراء الأدوات المنزلية أو من يفضِّل شراء الألعاب أو كليهما؛ ولذلك لا توجد لدينا مخرجات واضحة لهذا النموذج، وارجع إلى مقال <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AE%D9%88%D8%A7%D8%B1%D8%B2%D9%85%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%B9%D9%86%D9%82%D8%AF%D8%A9-%D9%84%D8%AA%D8%AC%D8%B2%D8%A6%D8%A9-%D8%B9%D9%85%D9%84%D8%A7%D8%A1-%D9%85%D8%AA%D8%AC%D8%B1-%D8%A5%D9%84%D9%83%D8%AA%D8%B1%D9%88%D9%86%D9%8A-r1477/" rel="">استخدام خوارزميات العنقدة لتجزئة عملاء متجر إلكتروني</a> للاطلاع على مثال عملي.
</p>

<p>
	نلاحظ في كلا التطبيقين السابقين أنه لدينا المدخلات ولا نمتلك مخرجات واضحة لا من حيث النوع ولا من حيث الكم؛ وهذه التطبيقات تندرج تحت قسم التعلم دون إشراف، لكن في كلتا الحالتين لاحظ أنه علينا الحصول على بيانات المدخلات وهي القاسم المشترك بين هذا وذاك، وفي كل الأحوال من الجيد تنظيم البيانات أو على الأقل تخيلها على صورة جدول، بحيث يحتوي كل صف على بيانات عينة كاملة، وكل عمود هو خاصية Property أو ميزة Feature، ففي مثال تحديد ما إذا كانت عمليات التحويل المالية صحيحةً أم مشبوهةً مثلًا، يمكننا تخيل كل صف على أنه عملية تحويل، وقد يكون لدينا عدة أعمدة مثل عمود يحتوي على بلد التحويل وعمود يحتوي على تاريخ التحويل، …إلخ.
</p>

<h2>
	أهمية فهم وتحسين البيانات
</h2>

<p>
	يعتمد تعلم الآلة بجميع نماذجه وخوارزمياته بصورة أساسية على البيانات بغض النظر إذا كانت مدخلات ومخرجات أو حتى مدخلات فقط؛ ولذلك تُعَدّ جودة البيانات وفهمها من أهم الأمور، إذ سيتعين عليك في بعض الأحيان إضافة خاصية أو حذف خاصية من البيانات، وهو ما يدعى بهندسة الخواص أو هندسة الميزات Feature Engineering أو Feature Extraction، وأحيان أخرى ستدمج بعض الخواص معًا بطريقة ما، وكل تلك الأمور نجدها في علم التعلم الإحصائي Statistical Learning الذي تم الإحالة إليه من قبل.
</p>

<p>
	تُعَدّ مرحلة فهم البيانات وتنقيتها وتحسينها من أهم المراحل، لأنه بناءً على ذلك تستطيع كمهندس تعلم آلة اختيار الخوارزمية المناسبة للبيانات من خوارزميات تعلم الآلة المتاحة والتي ستوفِّر أفضل دقة ممكنة تبعًا للمهمة التي تريد إجراءها من خلال النموذج الذي بُرمِج، كما أنّ جودة البيانات تلعب دورًا كبيرًا في معدل الدقة Accuracy Rate للنموذج، إذ يمكننا عن طريق تحسين جودة البيانات الوصول إلى دقة 99٪ بدلًا من دقة 97٪، ونستطيع الوصول إلى دقة 97٪ بدلًا من 80٪ عن طريق تعديل قيم معامِلات الخوارزمية المختارة Algorithm Parameters، ولذلك فإن فهمك للبيانات هو أول خطوة على طريق اختيار الخوارزمية وقيم المعاملات.
</p>

<p>
	يُعَدّ الجزء الخاص ببرمجة نماذج تعلم الآلة مجرد نقطة من صورة أكبر، وهي المشكلة المراد حلها، ولذلك من الضروري جدًا بقاء تلك الصورة الكبيرة في ذهنك دائمًا عند برمجة نموذج، فبناءً على تلك الصورة الكبيرة ستستطيع تحديد ما إذا كنت تمتلك البيانات الصحيحة أم لا، وتلك هي أول خطوة من الخطوات، ثم بعد ذلك ستستطيع تحديد ما يجب فعله أثناء مرحلة هندسة الخواص عبر تنقية وتحسين جودة البيانات، ثم بناءً على تلك الصورة ستستطيع تحديد الخوارزمية الصحيحة للتطبيق الذي تعمل عليه.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/programming/python/%D9%85%D8%AE%D8%AA%D8%B5%D8%B1-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D9%83%D8%A7%D8%A6%D9%86%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D9%88%D8%AC%D9%87-oop-%D9%88%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D9%87%D8%A7-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r1926/" rel="">مختصر البرمجة كائنية التوجه <abbr title="Object-Oriented Programming | البرمجة كائنية التوجه"><abbr title="Object-Oriented Programming | البرمجة كائنية التوجه">OOP</abbr></abbr> وتطبيقها في بايثون</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AA%D8%AD%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D9%85%D8%B4%D8%A7%D8%B9%D8%B1-%D9%81%D9%8A-%D8%A7%D9%84%D9%86%D8%B5%D9%88%D8%B5-%D8%A7%D9%84%D8%B9%D8%B1%D8%A8%D9%8A%D8%A9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%B9%D9%85%D9%8A%D9%82-r1476/" rel="">تحليل المشاعر في النصوص العربية باستخدام التعلم العميق</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A8%D8%B4%D8%B1%D9%8A-%D9%85%D9%82%D8%A7%D8%A8%D9%84-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-r1813/" rel="">الذكاء البشري مقابل الذكاء الاصطناعي</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D9%85%D9%81%D8%A7%D9%87%D9%8A%D9%85-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-r1009/" rel="">المفاهيم الأساسية لتعلم الآلة</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">1933</guid><pubDate>Sun, 19 Mar 2023 13:04:00 +0000</pubDate></item><item><title>&#x62A;&#x637;&#x628;&#x64A;&#x642;&#x627;&#x62A; &#x627;&#x644;&#x630;&#x643;&#x627;&#x621; &#x627;&#x644;&#x627;&#x635;&#x637;&#x646;&#x627;&#x639;&#x64A;</title><link>https://academy.hsoub.com/programming/artificial-intelligence/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_01/5002.png.dcf41c3c02082a61fcbf1042ae686a65.png" /></p>
<p>
	بدأنا في مقال <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">الذكاء الاصطناعي: دليلك الشامل</a> الحديث عن الذكاء الاصطناعي وعرفناه وتحدثنا عن مجالاته وحقوله وتطبيقاته ولكن بإيجاز ثم انتقلنا في مقال <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D9%85%D8%AC%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">مجالات الذكاء الاصطناعي</a> إلى التعرف على أهم الحقول والمجالات التي يرتكز عليها الذكاء الاصطناعي وبذلك مهدنا للانتقال إلى التحدث عن تطبيقات الذكاء الاصطناعي الذي سنركز عليه في هذا المقال.
</p>

<h2>
	أهم تطبيقات الذكاء الاصطناعي
</h2>

<p>
	مع التطور المذهل الذي شهده الذكاء الاصطناعي والضجة التي أحدثها والقدرات التي أظهرها، أصبح من الضروري توظفيه أحسن توظيف لتحسين العديد من المجالات. لقد بات الذكاء الصناعي في يومنا هذا ضروريًّا لما يُقدّمه من حلول لمشكلات معقدة بطريقة فعّالة في العديد من المجالات والصناعات، مثل الرعاية الصحية والترفيه والشؤون المالية والتعليم وما إلى ذلك. يجعل الذكاء الاصطناعي حياتنا اليومية أكثر راحة وسرعة خصوصًا في هذا الزمن الذي من سمته التعقيد.
</p>

<p>
	سنُلقي الضوء على أهم تطبيقات الذكاء الاصطناعي في مختلف المجالات الحياتية.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="jpg" data-fileid="117606" href="https://academy.hsoub.com/uploads/monthly_2023_01/374072051_--.jpg.c7dab48ef8c4be326eb8c9f64a2c0b3c.jpg" rel=""><img alt="تطبيقات الذكاء الاصطناعي" class="ipsImage ipsImage_thumbnailed" data-fileid="117606" data-ratio="56.33" data-unique="zxmaig7pa" style="width: 600px; height: auto;" width="900" src="https://academy.hsoub.com/uploads/monthly_2023_01/1471344469_--.thumb.jpg.c84f04592337a98986adfe90f729e6e4.jpg"></a>
</p>

<h3>
	تطبيق الذكاء الاصطناعي في مجال التجارة الإلكترونية
</h3>

<p>
	بلغت مبيعات التجزئة الإلكترونية في جميع أنحاء العالم في عام 2019 حوالي 3.5 تريليون دولار أمريكي ومن المتوقع أن تتجاوز 6.5 تريليون دولار أمريكي في عام 2023. لعبت التطورات الحديثة في الذكاء الاصطناعي دورًا رئيسيًا في هذا النمو السريع، حيث تجلى ذلك في إضافة تجربة أفضل للعملاء وحلول مبتكرة في صناعة التجارة الإلكترونية وخلق الميزة التنافسية لبائعي التجزئة. تعتبر توصيات المنتجات وتجارب التسوق الشخصية والمساعدين الافتراضيين وروبوتات الدردشة والبحث الصوتي من أكثر الاستخدامات المميزة للذكاء الاصطناعي في التجارة الإلكترونية.
</p>

<p>
	فيما يلي أهم خمس فوائد لنشر الذكاء الاصطناعي في أعمال التجارة الإلكترونية الخاصة بك:
</p>

<ol>
	<li>
		<p>
			<strong>المساعدين الافتراضيين أو روبوتات الدردشة:</strong> روبوتات محادثة تستخدم تقنيات معالجة اللغة وتعلم الآلة لفهم استفسارات العملاء وتقديم الدعم المطلوب وفقًا لذلك.
		</p>
	</li>
	<li>
		<p>
			<strong>منع الغش:</strong> تقنيات الذكاء الصناعي يمكنها اكتشاف عمليات الاحتيال والغش بفعالية كبيرة من خلال التقاط أنماط الاستخدام.
		</p>
	</li>
	<li>
		<p>
			<strong>البحث الذكي عن المنتجات:</strong> يوفر الذكاء الصناعي مايُسمى "بالبحث الذكي" الذي يتضمن قدرات بحث مُتقدمة مثل البحث متعدد الأوجه Faceted search (خيارات محددة وذات صلة لتصفية صفحة النتائج) والتنقل والإكمال التلقائي وقوائم المنتجات الموصى بها وعمليات البحث الأخيرة وذات الصلة والعديد من الميزات الأخرى التي تُدمج مع تقنيات البحث المعمول بها.
		</p>
	</li>
	<li>
		<p>
			<strong>أنظمة التوصية والاقتراح:</strong> أنظمة تعتمد على تقنيات الذكاء الصناعي، تهدف إلى توقع إعجاب المستخدم بمنتج معين لعرضه عليه. لابد وأنك لاحظت ذلك على العديد من المواقع وليس فقط مواقع التجارة الإلكترونية؛ ربما لاحظت أن اليوتيوب مثلًا يُظهر لك فيديوهات مُشابة للفيديوهات التي تُفضل مشاهدتها في العادة.
		</p>
	</li>
	<li>
		<p>
			<strong>الأتمتة:</strong> يمكن لشركات التجارة الإلكترونية أتمتة كل شيء من عرض منتجات جديدة على قنوات متعددة إلى مزامنة المبيعات وتحديد المعاملات عالية المخاطر وتقديم خصومات للعملاء المخلصين وما إلى ذلك. يمكن أيضًا توفير الوقت والطاقة ورأس المال التشغيلي من خلال أتمتة دعم العملاء.
		</p>
	</li>
</ol>

<h3>
	تطبيق الذكاء الاصطناعي في مجال الصناعة
</h3>

<p>
	يُعطي مهندسي تكنولوجيا المعلومات والباحثين في الذكاء الاصطناعي اهتمامًا مستمرًا ومتزايدًا بتحسين جودة حياتنا اليومية، وهذا يمتد ليشمل الصناعة أيضًا، وفي ظل هذا التقدم التكنولوجي الذي نعيشه أصبح من المستحيل تجنب التفاعل مع أنظمة الذكاء الاصطناعي، وتأتي ضرورة تطبيقه من مشاكل التحكم الإداري والهندسي ومن التعقيد المتزايد للأنظمة الصناعية الحالية، وكذلك من تزايد النفقات، والقيود الزمنية، ومحدودية توافر الخبرة البشرية، وغيرها الكثير من القضايا الأخرى.
</p>

<p>
	إن مستقبل العمل الصناعي الواضح، ستكون الثورة الصناعية الرابعة أو ما يعرف بالثورة الصناعية الرابعة "Industry 4.0 " مؤتمتة إلى حد كبير جدًا، مع استخدام جداول زمنية أسرع للإنتاج ومستودعات ذكية، مما يسمح بإنتاج وتوزيع المنتجات بسرعة وفعالية أكبر، كما أنها ستتطلب قوة عاملة ذات مهارة عالية ومتعلمة وتتقن كيفية استخدام وتشغيل أحدث التقنيات، ومن الواضح أن هذا يمثل عددًا كبيرًا من التغييرات لما اعتدنا عليه تقليديًا في هذا القطاع.
</p>

<p>
	إن أنظمة الذكاء الاصطناعي يمكن أن تساعد الصناعة على إحداث هذه التغييرات بسرعة وسلاسة، ولاسيما من خلال الأنظمة الخبيرة والرؤية الحاسوبية والروبوتات وإنترنت الأشياء.
</p>

<p>
	<strong>كيف سيؤثر الذكاء الصناعي على مستقبل العمليات الصناعية؟</strong>
</p>

<ol>
	<li>
		<p>
			<strong>إنترنت الأشياء الصناعي</strong>: يُقصد به إنترنت الأشياء عند تطبيقه على الصناعات التحويلية. إنه مفهوم يهدف إلى دمج آلات التصنيع الذكية (اتصال من آلة إلى آلة) وإجراء تحليلات متقدمة للبيانات الضخمة التي تقدمها مختلف أنواع الآلات للمساعدة في جعل كل عامل وكل مصنع أكثر كفاءة. على سبيل المثال يمكن استخدام نظام MindSphere من شركة Siemens، لربط المنتجات والمصانع والأنظمة والآلات مع بعضها، وهي واحدة من أهم الأسس التي تتيح استخدام الذكاء الاصطناعي في الصناعة.
		</p>
	</li>
	<li>
		<p>
			<strong>الرؤية الحاسوبية Computer Vision</strong>: من خلال تقنيات الرؤية الحاسوبية يمكن "زيادة الإنتاجية" من خلال استخدام أنظمة مراقبة العاملين والتحقق من أنهم جميعًا يستفيدون بأفضل شكل من أوقات عملهم. يمكننا أيضًا "مراقبة الجودة الآلية" عن طريق إجراء فحوصات مراقبة الجودة بسرعة وموثوقية أكبر بكثير من أي موظف بشري.
		</p>
	</li>
	<li>
		<p>
			<strong>الأنظمة الخبيرة Expert Systems</strong>: توفر الأنظمة الخبيرة للمهندسين الصناعيين أداة قوية لحل المشكلات. يمكن للأنظمة الخبيرة أن تكون بمثابة مساعدة في اتخاذ القرار، وكمستشار لنمذجة المشكلات وإجراء التحليل.
		</p>
	</li>
</ol>

<h3>
	تطبيق الذكاء الاصطناعي في مجال الطب والرعاية الصحية
</h3>

<p>
	للذكاء الاصطناعي تطبيقات عديدة في مجال الرعاية الصحية، وهذا يشمل اكتشاف وتشخيص الأمراض ووصف الأدوية المناسبة وتصنيف المرضى والحفاظ على السجلات الطبية وتتبعها والتعامل مع قضايا التأمين الصحي.
</p>

<ol>
	<li>
		<p>
			<strong>تشخيص الأمراض والتنبؤ بها:</strong> تُستخدم تطبيقات الذكاء الاصطناعي في الرعاية الصحية لبناء آلات متطورة يمكنها اكتشاف الأمراض والتعرف على الخلايا السرطانية وبعض الأمراض الأخرى. ربما تكون قد سمعت عن النظام الخبير مايسين MYCIN الذي يستطيع ﺗﺸﺨﻴﺺ اﻷﻣﺮاض المعدية، ﺧﺎﺻﺔً ﻋﺪوى اﻟﺪم كما أنه يساعد على اﻗﺘﺮاح العلاج المناسب. من الأنظمة الأخرى الشهيرة هو النظام IBM Watson الذي يُستخدم في التشخيص وتحديد خيارات العلاج للمرضى.
		</p>
	</li>
	<li>
		<p>
			<strong>تصّنيع الأدوية:</strong> استخدمت شركة Pfizer الذكاء الاصطناعي طوال عملية تطوير لقاحها ضد الكورونا للتأكد من أن لقاح COVID-19 يلبي احتياجات الأفراد.
		</p>
	</li>
	<li>
		<p>
			<strong>رعاية المرضى:</strong> تشمل تطبيقات الذكاء الاصطناعي الأخرى استخدام مساعدين صحيين افتراضيين عبر الإنترنت وروبوتات دردشة لمساعدة المرضى والمُمرضين في العثور على المعلومات الطبية وجدولة المواعيد وفهم عملية الفوترة وإكمال العمليات الإدارية الأخرى.
		</p>

		<p>
			يُعتقد أيضًا أن الابتكارات المستقبلية تشمل الجراحة الروبوتية بمساعدة الذكاء الاصطناعي والممرضات أو الأطباء الافتراضيين.
		</p>
	</li>
</ol>

<h3>
	تطبيق الذكاء الاصطناعي في مجال الفضاء
</h3>

<p>
	يُعتبر اكتشاف الفضاء مهمة خطرة بالنسبة للبشر، وهنا يأتي دور الذكاء الصناعي الذي يمكنه أن ينوب عن البشر من خلال الروبوتات والأنظمة الخبيرة التي تحاكي عمل البشر. من الأمثلة على ذلك هي مركبة "مارس روفر Mars rover" التي تستطيع السير بمفردها على سطح المريخ.
</p>

<p>
	تعمل شركة ناسا NASA أيضًا على استخدام تقنيات الذكاء الاصطناعي الأخرى في استكشاف الفضاء وأتمتة تحليل صور المجرات والكواكب وتطوير مركبات فضائية ذكية مستقلة يمكنها تجنب الحطام الفضائي دون تدخل بشري وإنشاء شبكات اتصال أكثر كفاءة وخالية من التشويه باستخدام أجهزة تعتمد على الذكاء الاصطناعي.
</p>

<p>
	يُستخدم الذكاء الصناعي أيضًا للمراقبة عن بعد وتقديم الملاحظات للتحكم في الأقمار الصناعية. إحدى الأمثلة على ذلك هو استخدام شركة سبيس إكس SpaceX تقنيات الذكاء الاصطناعي لتجنب اصطدام أقمارها الصناعية مع الأقمار الصناعية الأخرى.
</p>

<h3>
	تطبيق الذكاء الاصطناعي في مجال الفن والإبداع
</h3>

<p>
	تتجاوز إمكانات الذكاء الاصطناعي لمحاكاة عمليات التفكير البشري المهام الإدراكية مثل التعرف على الأشياء، أو المهام التفاعلية مثل قيادة السيارة. إنّها تمتد إلى الأنشطة الإبداعية. ذكر فرانسوا كوليت (أحد أشهر باحثي جوجل) في كتابه "Deep Learning with Python" عام 2017، إن الجزء الأكبر من المحتوى الثقافي الذي سنستهلكه في المستقبل القريب، سيكون بمساعدة كبيرة من الذكاء الاصطناعي. لقد كان محقًا تمامًا، فمن منا لم يسمع بالنموذج المذهل ChatGPT الذي أطلقتها OpenAI منذ مدة قصيرة، حيث يمكن لهذا النموذج أن يوّلد لك قصصًا قصيرة بمجرد أن تعطيه عنوانًا.
</p>

<p>
	بعيدًا عن ChatGPT، وفي صيف عام 2015 أطلقت جوجل خوارزمية حلم عميق Deep Dream التي تستخدم فيه شبكات عصبية التفافية CNNs والتي تُعالج الصور وتخلق ظواهر باريدوليا في الصور المعالجة لجعلها أشبه بصور تكون بالأحلام. في عام 2016؛ ربما تكون قد جربت أيضًا تطبيق بريزما Prisma لتحويل صورك إلى لوحات ذات أنماط مختلفة. في صيف عام 2016، كان إخراج أول فيلم قصير تجريبي باسم Sunspring، باستخدام نص مكتوب بواسطة شبكات LSTMs. ربما حتى أنك استمعت مؤخرًا إلى موسيقى أُنتجت بالكامل باستخدام الذكاء الصناعي (هناك الكثير على اليوتيوب).
</p>

<p>
	يمكن للذكاء الصناعي أيضًا أن يقوم بتوليد الصور بمجرد وصفها، وهذا ماقد يكون له أهمية كبيرة في مجالات مثل التصميم، حيث قد تلجأ الكثير من الشركات لاستخدام هذه التقنيات بدلًا من توظيف مصممين وتحمل تكاليف أكبر.
</p>

<h3>
	تطبيق الذكاء الاصطناعي في مجال الألعاب والترفيه
</h3>

<p>
	تتضمن معظم الألعاب شكلًا من أشكال الذكاء الاصطناعي، فغالبًا ما يحاول المطورون إضفاء الطابع الذكي على شخصيات اللعبة الخاصة بهم - إن إضفاء هذا الطابع بدون استخدام تقنيات الذكاء الصناعي هو أمر مُعقد للغاية. إليك بعض الأمثلة:
</p>

<ol>
	<li>
		تستخدم ألعاب Alien Isolation التي صدرت في عام 2014 الذكاء الاصطناعي لملاحقة اللاعب طوال اللعبة. تستخدم اللعبة نظامي ذكاء اصطناعي - "Director AI" الذي يكتشف موقعك دومًا و "Alien AI"، مع أجهزة استشعار وسلوكيات تُمسك اللاعب باستمرار.
	</li>
	<li>
		يمكن لخوارزميات الذكاء الاصطناعي أن تلعب ألعابًا استراتيجية (التي تحتاج تخطيط) مثل الشطرنج، حيث تحتاج الآلة إلى التفكير في عدد كبير من الأماكن الممكنة.
	</li>
</ol>

<h3>
	تطبيق الذكاء الاصطناعي في مجال التمويل
</h3>

<p>
	التمويل Finance مجال متنوع يشمل مجموعة واسعة من القضايا، بدءًا من مراقبة الشركات العامة إلى تدفق الصفقات المصرفية الاستثمارية. من المتوقع أن تنمو صناعة الخدمات المالية عالميًّا إلى 26 تريليون دولار أمريكي مع نهاية عام 2022. عند دمج سياق استخدام تقنيات الذكاء الصناعي مع سياق الأطر المالية والعمليات والتقارير والتقييم.
</p>

<p>
	يمكننا النظر إلى التمويل من الزوايا الثلاث التالية:
</p>

<ul>
	<li>
		<strong>وجهات نظر المنظمة:</strong> أنواع المنظمات المختلفة لها متطلبات ووجهات نظر مختلفة يجب أخذها في الاعتبار.
	</li>
	<li>
		<strong>إجراءات:</strong> هناك إجراءات مختلفة يمكن أن تتخذها المنظمة.
	</li>
	<li>
		<strong>السياق المالي:</strong> يمكن أن يكون لهذه الإجراءات سياقات مختلفة، تتضمن: التنبؤ والميزنة، الخدمات المصرفية للأفراد، الخدمات المصرفية الاستثمارية، عمليات سوق الأوراق المالية، عمليات العملات المشفرة.
	</li>
</ul>

<p>
	لاتخاذ قرارات مدروسة ومخططة في الوقت الحقيقي Real-time حول هيكلة التدفقات المالية وعرضها وإدارتها والإبلاغ عنها، يجب أن يكون هناك تركيز مستمر على الطبيعة المتغيرة للشركة، ويجب بناء البنية التحتية المالية وتصميمها وفقًا لذلك. هنا يأتي دور تعلم الآلة ML ومعالجة اللغات الطبيعية NLP، حيث يمكن أن تساعد في تصميم مثل هذا النظام. يوضح الشكل التالي كيف يُفكّر المصرفيون البريطانيون في أن ML و NLP يمكن أن تحسن عملياتهم في المجالات المختلفة.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="117605" href="https://academy.hsoub.com/uploads/monthly_2023_01/1312215733_---.png.ef15fa956ab619294a67dd90b4fcdbb1.png" rel=""><img alt="تطبيق الذكاء الاصطناعي في مجال التمويل" class="ipsImage ipsImage_thumbnailed" data-fileid="117605" data-ratio="42.83" data-unique="790lb1tvu" style="width: 600px; height: auto;" width="600" src="https://academy.hsoub.com/uploads/monthly_2023_01/890806970_---.thumb.png.7b2e4953475c42bf7594511d6effcda2.png"> </a>
</p>

<ul>
	<li>
		النقاط الزرقاء تُشير إلى الفائدة الحالية.
	</li>
	<li>
		النقاط البنفسجية تُشير إلى الفائدة المتوقعة في السنوات الثلاث التالية.
	</li>
	<li>
		توضح التقديرات أن هناك تحسينات كبيرة في الكفاءة التشغيلية بالإضافة إلى الرؤى والتحليلات والاستنتاجات، من المتوقع أيضًا أن تتحسن نتائج مكافحة الاحتيال ومكافحة غسيل الأموال إلى الأفضل.
	</li>
</ul>

<h3>
	تطبيق الذكاء الاصطناعي في مجال الأعمال
</h3>

<p>
	مع الكم الهائل من البيانات المتاحة اليوم وتعقيدات الأسواق والعملاء والأعمال لم يعد بإمكان الشركات الاعتماد على أساليب العمل التقليدية لدفع النمو، فكان لابد من إدخال تقنيات الذكاء الصناعي لزيادة الإيرادات وتحسين تجربة العملاء وزيادة الإنتاجية والكفاءة ودفع نمو الأعمال والتحوّل.
</p>

<p>
	باستخدام الذكاء الاصطناعي في الأعمال التجارية، يمكن للشركات الآن فهم العملاء وإشراكهم في عملية الإنتاج وأتمتة العمليات التجارية والإدارية وتحسين الإنتاجية والإيرادات مع تقليل النفقات التشغيلية.
</p>

<p>
	ربما سمعت سابقًا بمصطلح "ذكاء الأعمال"، إنّه يُشير إلى النظريات والمنهجيات والعمليات والخصائص والتقنيات التي تعمل على تحويل البيانات الخام إلى معلومات ذات مغزى تخدم الأعمال. الآن مع الحجم الهائل من البيانات، أصبحت عملية الحصول على معلومات من البيانات أمرًا صعبًا للغاية. هنا أتى دور الذكاء الصناعي وتخصص علوم البيانات الذي يتداخل إلى حد كبير مع تعلم الآلة، حيث أصبح بالإمكان التعامل مع البيانات مهما كان حجمها واستثمارها بأفضل شكل ممكن لتحقيق النمو.
</p>

<h3>
	تطبيق الذكاء الاصطناعي في مجال الزراعة والمناخ
</h3>

<p>
	يمكن أن تساعد روبوتات الذكاء الاصطناعي في حصاد المحاصيل بحجم أكبر ووتيرة أسرع من العمال البشر. يستخدم الذكاء الاصطناعي أيضًا لتحديد العيوب ونقص المغذيات في التربة ومراقبة المحاصيل، وذلك من خلال تقنيات الرؤية الحاسوبية والروبوتات وتطبيقات التعلم الآلي.
</p>

<p>
	يمكن للذكاء الاصطناعي أيضًا تحليل مكان نمو الأعشاب الضارة واقتراح حلول لمعالجة المشكلات والآفات الزراعية. فيما يلي أهم استخدامين حاليًا للذكاء الصناعي في هذا المجال:
</p>

<ul>
	<li>
		<strong>استخدام الروبوتات في حصاد المزارع ومواجهة تحديات العمالة:</strong> تساعد هذه الآلات في تحسين حجم المحصول وتقليل النفايات الناتجة عن ترك المحاصيل في الحقل، بالإضافة إلى خفض تكاليف اليد العاملة وندرتها إلى جانب السرعة في الحصاد. تعتمد هذه الآلات على المستشعرات وتقنيات الرؤية الحاسوبية ونماذج الذكاء الاصطناعي لتحديد موقع المنتجات الممكن حصادها والمساعدة في انتقاء الثمار المناسبة.
	</li>
	<li>
		<strong>التحليلات التنبؤية واتخاذ القرار الصحيح:</strong> وهذا يتضمن توقع أفضل وقت للزرع وتوقعات غلة المحاصيل وتوقعات الأسعار. على سبيل المثال استخدم علماء ICRISAT أداة تحليلات تنبؤية للوصول إلى موعد محدد لبذر البذور للحصول على أقصى إنتاجية، كما أنها تُعطي أفكارًا حول سلامة التربة وتوصي بالأسمدة المناسبة لها.
	</li>
</ul>

<p>
	يمكن للذكاء الصناعي أيضًا التنبؤ بالعواصف والزلازل وحالة الطقس عمومًا.
</p>

<h3>
	تطبيق الذكاء الاصطناعي في مجال التعليم
</h3>

<p>
	للذكاء الاصطناعي العديد من التطبيقات في مجال التعليم، مثل أتمتة المهام الإدارية وأتمتة عملية وضع الدرجات للطلاب ومراقبة سلوكهم وحتى تعليمهم من خلال المُدرّسين الافتراضيين بمساعدة الأنظمة الخبيرة. على سبيل المثال، النظام الخبير GUIDON يُعلّم طلبة الطب القواعد اللازمة لاختيار العلاج المناسب للأمراض المصاحبة للالتهابات البكتيرية المُعدية، وذلك باختيار حالة مرضية تُعرض على الطلبة ومن ثم يُصحح النظام الإجابة ويعرض الأسلوب الصحيح للحل. مثال آخر هو نظام التدريب الذكي Intelligent Tutoring System والذي يمكن أن يوفر ملاحظات دقيقة ومحددة للطلاب طوال فترة تدريبهم أو تعليمهم.
</p>

<h3>
	تطبيق الذكاء الاصطناعي في مجال الأمن السيبراني
</h3>

<p>
	إن إمكانية إنشاء برامج ذكية قادرة على التعلم من النشاط السابق وتطبيق رؤى وتحليلات لحل المشكلات المعقدة، يمكنها إحداث ثورة في كل جانب من جوانب الأعمال الحديثة تقريبًا، وهذا يمتد ليشمل الأمن السيبراني أيضًا. إن التطورات المستمرة في البرامج الخبيثة والتهديدات الأخرى تجعل الأمن السيبراني التقليدي أضعف.
</p>

<p>
	وفقًا <a href="https://www.capgemini.com/wp-content/uploads/2019/07/AI-in-Cybersecurity_Report_20190711_V06.pdf" rel="external nofollow">لإحصائية</a> كشفتها شركة Capgemini، فإن ما يقرب من 60٪ من المؤسسات، لن تكون قادرة على تحديد التهديدات الخطيرة بدون تقنيات الذكاء الاصطناعي. تعود أهمية الذكاء الصناعي في الأمن السيبراني إلى العوامل التالية:
</p>

<ul>
	<li>
		الذكاء الصناعي قادر على تحديد التهديدات المحتملة للأمن السيبراني والتنبؤ بها والاستجابة لها والتعرف عليها دون الاعتماد على المدخلات البشرية. يمكن لأدوات الذكاء الاصطناعي المتطورة أيضًا التعلم بشكل مستقل بناءً على السلوكيات المُكتشفة سابقًا.
	</li>
	<li>
		يساعد الذكاء الصناعي في ملء الفجوات في القوى العاملة في مجال الأمن السيبراني: تتسارع وتيرة التحول الرقمي في جميع أنحاء العالم، وتوافر المتخصصين المدربين وذوي الخبرة في مجال الأمن السيبراني لا يواكب هذا التطور. يمكن للذكاء الصناعي ملء تلك الفجوات.
	</li>
	<li>
		يعزز الذكاء الصناعي إمكانية التعرف بسرعة على التهديدات: أدوات الأمان التي تعمل بالذكاء الاصطناعي قادرة على فرز الأحداث، وتقليص الوقت المطلوب للاستجابة للحوادث.
	</li>
</ul>

<h3>
	تطبيق الذكاء الاصطناعي في إدارة الموارد البشرية
</h3>

<p>
	تُمكّنك تقنيات الذكاء الصناعي من أتمتة معظم المهام المتكررة، مما يسمح للمؤسسات بتوفير الوقت والموارد، مثلًا تُستخدم في عمليات التوظيف لفلترة السير الذاتية وفقًا لاحتياجات الشركة لتسهيل عملية التوظيف. إليك أهم الأدوار التي يلعبها الذكاء الاصطناعي في هذا المجال:
</p>

<ul>
	<li>
		تبسيط التوظيف وإزالة التحيزات.
	</li>
	<li>
		مُساعدة موظفي الموارد البشرية في إنجاز الأعمال من خلال أتمتة العمليات.
	</li>
	<li>
		تحسين عمليات تأهيل الموظفين الجدد.
	</li>
	<li>
		تطوير استراتيجية تدريب أكثر فائدة؛ يضمن الذكاء الاصطناعي تعلم موظفيك بشكل أسرع مع التركيز على المهارات التي يحتاجون إليها لمواكبة مجالهم.
	</li>
</ul>

<h3>
	تطبيق الذكاء الاصطناعي في مجال النقل
</h3>

<p>
	يُستخدم الذكاء الاصطناعي في تحسين إجراءات السلامة والكفاءة، بحيث تتمكن البلدات والمدن - وكذلك المدن الذكية التي تتبنى مفهوم إنترنت الأشياء - من تقليل عدد حوادث الطرقات وتنظيم حركة السير وتقليل الاختناقات المرورية (بالاستفادة من مبدأ خوارزميات النمل) وكذلك تحسين عملية جدولة النقل العام. كما تعمل العديد من الشركات العملاقة على تصنيع سيارات ذاتية القيادة. الذكاء الصناعي قادر أيضًا على إجراء العديد من الأعمال المتعلقة بالسفر مثل ترتيبات السفر واقتراح الفنادق والرحلات الجوية والفحوصات الأمنية في المطار. كما أن الذكاء الصناعي يُستخدم في عمليات توفير الوقود، إذ توظف حاليًا نماذج الذكاء الاصطناعي في عملية ترشيح الطرق الأكثر توفيرًا للوقود.
</p>

<p>
	تجدر الإشارة إلى أن الذكاء الاصطناعي بات جزءًا أساسيًّا من أنظمة الملاحة، فمثلًا تستخدم تطبيقات GPS مثل Waze وخرائط Google الذكاء الاصطناعي لتزويد المستخدمين بأفضل طريق ممكن إلى وجهتهم مع مراعاة عوامل مثل حركة المرور وبناء الأبنية والطقس.
</p>

<p>
	إذا أردت أيضًا البدء في تعلم لغة بايثون اللغة الأساسية لكتابة تطبيقات ونماذج الذكاء الاصطناعي وأيضًا تعلم أساسيات الذكاء الاصطناعي وتعلم الآلة، فيمكنك تعلمها من خلال دورة الذكاء الاصطناعي التي تشرح لك بأسلوب عملي وشيق برمجة الخوارزميات والمفاهيم البرمجية وراء تعلم الآلة Machine Learning والتعلم العميق Deep Learning وغيرها، وتمكنك من تطوير مشاريع حقيقية  باستخدام لغة بايثون Python تفيدك في سوق العمل وهي دورة شاملة مع مُدربين مُميزين يُرافقونك طوال الدورة للإجابة عن استفساراتك.
</p>

<div class="banner-container ipsBox ipsPadding">
	<div class="inner-banner-container">
		<p class="banner-heading">
			دورة الذكاء الاصطناعي
		</p>

		<p class="banner-subtitle">
			احترف برمجة الذكاء الاصطناعي AI وتحليل البيانات وتعلم كافة المعلومات التي تحتاجها لبناء نماذج ذكاء اصطناعي متخصصة.
		</p>

		<div>
			<a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://academy.hsoub.com/learn/artificial-intelligence" rel="">اشترك الآن</a>
		</div>
	</div>

	<div class="banner-img">
		<a href="https://academy.hsoub.com/learn/artificial-intelligence" rel=""><img alt="دورة الذكاء الاصطناعي AI" src="https://academy.hsoub.com/learn/assets/images/courses/artificial-intelligence.png"></a>
	</div>
</div>

<h2>
	خاتمة
</h2>

<p>
	تناولنا في هذه المقالة أهم تطبيقات الذكاء الاصطناعي في مختلف المجالات. للذكاء الاصطناعي العديد من التطبيقات في كل مكان. لا مفر من القول أن الذكاء الاصطناعي هو المستقبل، وأن الشركات والمؤسسات التي لا تحاول إدخاله في أعمالها اليوم ستكون متخلفة غدًا.
</p>

<p>
	يُمثل كتاب <a href="https://academy.hsoub.com/files/17-%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-%D9%88%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9/" rel="">مدخل إلى الذكاء الاصطناعي وتعلم الآلة</a> نقطة بدءٍ مناسبةٍ للمبتدئين الذين يرغبون الخوض في هذا المجال. يبدأ الكتاب معك من الأساسيات ليمهد الطريق أمامك للدخول إلى هذا المجال. يمكنك أيضًا الاطلاع على العديد من المقالات المتعلقة بالذكاء الصناعي، والتي توفرها <a href="https://academy.hsoub.com/" rel="">أكاديمية حسوب</a> من <a href="https://academy.hsoub.com/programming/artificial-intelligence/" rel="">هنا</a>.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">تعلم الذكاء الاصطناعي</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A3%D9%87%D9%85%D9%8A%D8%A9-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-r2243/" rel="">أهمية الذكاء الاصطناعي</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">برمجة الذكاء الاصطناعي</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">1880</guid><pubDate>Mon, 06 Feb 2023 15:09:00 +0000</pubDate></item><item><title>&#x623;&#x646;&#x648;&#x627;&#x639; &#x627;&#x644;&#x628;&#x64A;&#x627;&#x646;&#x627;&#x62A; &#x648;&#x627;&#x644;&#x639;&#x645;&#x644;&#x64A;&#x627;&#x62A; &#x627;&#x644;&#x623;&#x633;&#x627;&#x633;&#x64A;&#x629; &#x641;&#x64A; &#x644;&#x63A;&#x629; &#x628;&#x627;&#x64A;&#x62B;&#x648;&#x646;</title><link>https://academy.hsoub.com/programming/artificial-intelligence/%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D9%88%D8%A7%D9%84%D8%B9%D9%85%D9%84%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%81%D9%8A-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r1872/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_01/610723610_------.png.26920e7eb163dfe7dcc2ded314dbfa0a.png" /></p>
<p>
	استعرضنا في <a href="https://academy.hsoub.com/programming/python/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r1815/" rel="">المقال السابق</a> البرمجة بلغة بايثون لمحةً عن لغة بايثون وكيفية تثبيتها وكتابة تعليمات فيها، وسنكمل في هذا المقال <a href="https://academy.hsoub.com/python/" rel="">تعلم بايثون</a> والتعرف عليها أكثر بالتعرف على المتغيرات وأنواع البيانات بالإضافة إلى أنواع العمليات التي يمكن تطبيقها على المتغيرات.
</p>

<h2>
	المتغيرات
</h2>

<p>
	تمثِّل المتغيرات في أيّ <a href="https://academy.hsoub.com/programming/general/%D9%84%D8%BA%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">لغة برمجية</a> أماكن في ذاكرة الحاسوب مخصصةً لتخزين البيانات، وذلك يعني أنك عندما تعرِّف متغيرًا ما حسب قواعد المعرِّفات التي ذكرناها في المقال السابق، فأنت بذلك تحجز مكانًا في الذاكرة لتخزين ذلك المتغير وما يحتويه.
</p>

<h3>
	تعريف المتغيرات
</h3>

<p>
	يمكن تعريف متغير في بايثون بسهولة كبيرة وذلك بذكر اسم المتغير وإسناد قيمة له بالشكل التالي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6962_13" style=""><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="lit">10</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">print</span><span class="pun">(</span><span class="pln">x</span><span class="pun">)</span><span class="pln">
y </span><span class="pun">=</span><span class="pln"> </span><span class="lit">10.5</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">print</span><span class="pun">(</span><span class="pln">y</span><span class="pun">)</span><span class="pln">
z </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Word"</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">print</span><span class="pun">(</span><span class="pln">z</span><span class="pun">)</span></pre>

<p>
	عرَّفنا تلك المتغيرات في المثال السابق وأسندنا لها قيمة مباشرةً لتحجز <a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D9%85%D8%B1%D8%AC%D8%B9-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r735/" rel="">بايثون</a> لتلك المتغيرات مساحة في ذاكرة الحاسوب، أولها المتغير <code>x</code> من نوع بيانات الأعداد الصحيحة Integer، وثانيها المتغير <code>y</code> من نوع بيانات الأعداد العشرية Float؛ أما ثالثها فهو المتغير <code>z</code> من نوع نص أو سلسلة نصية String، وعلى الرغم من اختلاف أنواع تلك المتغيرات، إلا أننا لم نحدِّد تلك الأنواع مسبقًا، فقد عيّنا البيانات في المتغير فقط بعد تحديد اسم المتغير مباشرةً، ويمكن تغيير نوع البيانات في المتغير ببساطة وبدون أدنى مشكلة، وذلك ليس هو الحال في كل اللغات.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6962_16" style=""><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="lit">10</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">print</span><span class="pun">(</span><span class="pln">x</span><span class="pun">)</span><span class="pln">
x </span><span class="pun">=</span><span class="pln"> </span><span class="str">"word"</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">print</span><span class="pun">(</span><span class="pln">x</span><span class="pun">)</span></pre>

<p>
	فعند تعريف متغير جديد في كثير من لغات البرمجة، يلتزم المبرمِج بتعريف نوع البيانات التي ستُخزَّن في المتغير، وبناءً على ذلك تحدِّد اللغة مكانًا له في الذاكرة ولا يمكنك عادةً في تلك اللغات تغيير نوع البيانات التي قيدت بها المتغير لأن اللغة تفحص المتغير ونوعه أثناء تنفيذ كامل الشيفرة، فإذا عرَّفت متغير ما على سبيل المثال وحدَّدت نوع البيانات بأنه عدد عشري، فلا يمكن بعد ذلك تخزين نص في ذلك المتغير -أي في ذلك المكان في الذاكرة- وذلك النوع من اللغات يُطلق عليه لقب Statically Typed مثل Fortran و <a href="https://academy.hsoub.com/programming/java/%D8%A7%D9%84%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%B3%D8%B1%D9%8A%D8%B9-%D9%84%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-java-r599/" rel="">Java</a> وC؛ أما بايثون فتُعَدّ من اللغات الديناميكية، أي لا تتطلب تحديد نوع المتغير صراحةً، إذ يستطيع المتغير حواية أيّ نوع من أنواع البيانات وتغييرها لاحقًا، ولمزيد من التفاصيل حول هذه النقطة، ارجع إلى مقال <a href="https://academy.hsoub.com/programming/general/%D9%84%D8%BA%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/#%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D9%84%D8%BA%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9" rel="">لغات البرمجة</a> قسم أنواع لغات البرمجة.
</p>

<p>
	ومن ديناميكية <a href="https://academy.hsoub.com/programming/python/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A9-r211/" rel="">لغة بايثون</a> وجود إمكانية تعريف وتعيين قيمة لعدة متغيرات في التعليمة نفسها، ففي المثال التالي نسند رقم إلى ثلاثة متغيرات في الوقت نفسه.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6962_20" style=""><span class="pln">x </span><span class="pun">=</span><span class="pln"> y </span><span class="pun">=</span><span class="pln"> z </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span></pre>

<p>
	سيُطبَع الرقم 1 عند طباعة أيّ متغير من تلك المتغيرات لأنها تحمل البيانات نفسها، كما أنه من الممكن تعريف أكثر من متغير وتعيين بيانات مختلفة من أنواع متطابقة أو مختلفة لكل متغير في السطر نفسه كما في المثال التالي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6962_22" style=""><span class="pln">x</span><span class="pun">,</span><span class="pln"> y</span><span class="pun">,</span><span class="pln"> z </span><span class="pun">=</span><span class="pln"> </span><span class="lit">10</span><span class="pun">,</span><span class="pln"> </span><span class="str">"Hello"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"World"</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">x</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">y</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">z</span><span class="pun">)</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="lit">10</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="typ">Hello</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="typ">World</span></pre>

<h3>
	حذف المتغيرات
</h3>

<p>
	يمكنك في أيّ وقت حذف متغير أو أكثر من ذاكرة الحاسوب في بايثون وفي العديد من لغات البرمجة الأخرى، فتلك الخطوة مهمة في العديد من البرامج والتطبيقات لترشيد استهلاك ذاكرة الحاسوب خاصةً في التطبيقات الكبيرة والمعقَّدة والتي تحتوي على الكثير من البيانات والعمليات الحسابية مثل تطبيقات <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D9%85%D9%81%D8%A7%D9%87%D9%8A%D9%85-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-r1009/" rel="">تعلُّم الآلة</a>، إذ يُحذَف المتغير في بايثون عن طريق الكلمة المفتاحية <code>del</code> ثم اتباعها بمسافة وكتابة اسمه كما في المثال التالي وعندها لا يمكن استخدام المتغير بعد حذفه:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6962_25" style=""><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">x</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">del</span><span class="pln"> x</span></pre>

<h2>
	أنواع البيانات في لغة بايثون
</h2>

<p>
	تختلف أنواع البيانات التي تدعمها لغة بايثون، حيث تدعم البيانات النصية، وهي البيانات التي تحتوي على أحرف ونصوص Strings، والبيانات العددية سواءً كانت أعدادًا صحيحةً Integers أو أعدادًا عشرية Floats، أو أعدادًا عقدية Complex Numbers، كما توجد أنواع أخرى مثل الصفوف Tuples والقواميس Dictionaries والقوائم Lists.
</p>

<h3>
	النصوص Strings
</h3>

<p>
	توجد بعض المعلومات القيمة فيما يتعلق بالتعامل مع النصوص في بايثون، إذ توفِّر بايثون بعض العمليات الأساسية للتعامل مع النصوص وطباعتها والوصول إلى الأحرف والمقاطع داخل النص، حيث يمكن للمبرمج التعامل مع المتغير الذي يحتوي على نص مثل تعامله مع المصفوفات في اللغات الأخرى، وإذا كانت لديك خلفية في الرياضيات، فإنّ المصفوفات في البرمجة شبيهة بقدر كبير للمصفوفات في الرياضيات، كما توفِّر لغات البرمجة أساليب مختلفةً للتعامل مع تلك المصفوفات.
</p>

<p>
	يمكن التعامل مع <a href="https://academy.hsoub.com/programming/python/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D9%85%D8%AA%D8%BA%D9%8A%D8%B1%D8%A7%D8%AA-%D9%88%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9%D9%87%D8%A7-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r221/" rel="">المتغيرات النصية في بايثون</a> على أساس مصفوفة ذات بُعد واحد، إذ يمثِّل كل حرف قيمةً بذاتها داخل المصفوفة، فيمكن التفكير في النص التالي Hello World!‎ على أنه مصفوفة يُربَط كل حرف أو مسافة فيه بعدد، بحيث يبدأ الترقيم في المصفوفات وغيرها من أنواع البيانات المشابهة في معظم لغات البرمجة بالرقم صفر وليس واحد، أي كما يلي:
</p>
<style type="text/css">
table {
    width: 100%;
}

thead {
    vertical-align: middle;
    text-align: center;
} 

td, th {
    border: 1px solid #dddddd;
    text-align: right;
    padding: 8px;
    text-align: inherit;

}
tr:nth-child(even) {
    background-color: #dddddd;
}</style>
<table>
	<thead>
		<tr>
			<th>
				11
			</th>
			<th>
				10
			</th>
			<th>
				9
			</th>
			<th>
				8
			</th>
			<th>
				7
			</th>
			<th>
				6
			</th>
			<th>
				5
			</th>
			<th>
				4
			</th>
			<th>
				3
			</th>
			<th>
				2
			</th>
			<th>
				1
			</th>
			<th>
				0
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>
				!
			</td>
			<td>
				d
			</td>
			<td>
				l
			</td>
			<td>
				r
			</td>
			<td>
				o
			</td>
			<td>
				W
			</td>
			<td>
				 
			</td>
			<td>
				o
			</td>
			<td>
				l
			</td>
			<td>
				l
			</td>
			<td>
				e
			</td>
			<td>
				H
			</td>
		</tr>
	</tbody>
</table>

<p>
	يمكننا طباعة المحرف بناءً على الجدول بكتابة اسم المتغير الذي يحتوي على النص ثم كتابة رقمه بين علامَتي الأقواس المعقوفة <code>[]</code>، فلطباعة المحرف r مثلًا نستخدِم الرقم 8، ولطباعة المحرف H من النص السابق يمكن ذلك كما في الشيفرة التالية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6962_28" style=""><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Hello World!"</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">x</span><span class="pun">[</span><span class="lit">0</span><span class="pun">])</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> H</span></pre>

<p>
	يمكن الطباعة من محرف إلى آخر عن طريق كتابة رمز <code>:</code> بين رقم محرف البداية وعدد المحارف المطلوبة، فلطباعة كلمة Hello مثلًا، فسنبدأ بصفر ثم نعُد خمسة محارف من H إلى O، ولذلك نستطيع طباعة الكلمة عبر الشيفرة الآتي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6962_30" style=""><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Hello World!"</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">x</span><span class="pun">[</span><span class="lit">0</span><span class="pun">:</span><span class="lit">5</span><span class="pun">])</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="typ">Hello</span></pre>

<p>
	كما يمكن الطباعة من حرف محدد إلى نهاية النص عن طريق إضافة رمز النقطتين السابق ذكره وعدم إلحاقه بأيّ عدد.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6962_32" style=""><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Hello World!"</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">x</span><span class="pun">[</span><span class="lit">0</span><span class="pun">:])</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="typ">Hello</span><span class="pln"> </span><span class="typ">World</span><span class="pun">!</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">x</span><span class="pun">[</span><span class="lit">6</span><span class="pun">:])</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="typ">World</span><span class="pun">!</span></pre>

<p>
	يمكن أيضًا طباعة النص مرتين باستخدام علامة الضرب الرياضية.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6962_34" style=""><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Hello World! "</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">x </span><span class="pun">*</span><span class="pln"> </span><span class="lit">2</span><span class="pun">)</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="typ">Hello</span><span class="pln"> </span><span class="typ">World</span><span class="pun">!</span><span class="pln"> </span><span class="typ">Hello</span><span class="pln"> </span><span class="typ">World</span><span class="pun">!</span></pre>

<h3>
	القوائم Lists
</h3>

<p>
	تتوفر في بايثون ما يُدعى <a href="https://academy.hsoub.com/programming/python/%d8%a7%d9%84%d8%aa%d8%b9%d8%a7%d9%85%d9%84-%d9%85%d8%b9-%d8%a7%d9%84%d9%82%d9%88%d8%a7%d8%a6%d9%85-%d9%88%d8%a7%d9%84%d8%b3%d9%84%d8%a7%d8%b3%d9%84-%d8%a7%d9%84%d9%86%d8%b5%d9%8a%d8%a9-%d9%81%d9%8a-%d9%84%d8%ba%d8%a9-%d8%a8%d8%a7%d9%8a%d8%ab%d9%88%d9%86-r223/" rel="">بالقوائم Lists</a>، وهي تشبه إلى حد كبير المصفوفات في لغات البرمجة الأخرى، فببساطة يمكن تعريف القائمة في بايثون بأنها متغير يحتوي على مصفوفة من البيانات والتي من الممكن أن تكون من أنواع مختلفة، كما من الممكن التعامل معها كما أوردنا في التعامل مع النصوص على أساس مصفوفة، إذ تُعيَّن قيمة متغير القائمة عبر كتابة القيم بصورة متتابعة يليها فاصلة <code>,</code> بين الأقواس المعقوفة <code>[]</code>، وإليك المثال التالي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6962_37" style=""><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="str">'abc'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'efg'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">100</span><span class="pun">,</span><span class="pln"> </span><span class="str">'ilm'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">10.54</span><span class="pun">]</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">x</span><span class="pun">[</span><span class="lit">0</span><span class="pun">])</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> abc
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">x</span><span class="pun">)</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="pun">[</span><span class="str">'abc'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'efg'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">100</span><span class="pun">,</span><span class="pln"> </span><span class="str">'ilm'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">10.54</span><span class="pun">]</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">x</span><span class="pun">[</span><span class="lit">1</span><span class="pun">:</span><span class="lit">3</span><span class="pun">])</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="pun">[</span><span class="str">'efg'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">100</span><span class="pun">]</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">x</span><span class="pun">[</span><span class="lit">1</span><span class="pun">:])</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="pun">[</span><span class="str">'efg'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">100</span><span class="pun">,</span><span class="pln"> </span><span class="str">'ilm'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">10.54</span><span class="pun">]</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">x </span><span class="pun">*</span><span class="pln"> </span><span class="lit">2</span><span class="pun">)</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="pun">[</span><span class="str">'abc'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'efg'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">100</span><span class="pun">,</span><span class="pln"> </span><span class="str">'ilm'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">10.54</span><span class="pun">,</span><span class="pln"> </span><span class="str">'abc'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'efg'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">100</span><span class="pun">,</span><span class="pln"> </span><span class="str">'ilm'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">10.54</span><span class="pun">]</span><span class="pln">
y </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="str">'xyz'</span><span class="pun">]</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">x </span><span class="pun">+</span><span class="pln"> y</span><span class="pun">)</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="pun">[</span><span class="str">'abc'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'efg'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">100</span><span class="pun">,</span><span class="pln"> </span><span class="str">'ilm'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">10.54</span><span class="pun">,</span><span class="pln"> </span><span class="str">'xyz'</span><span class="pun">]</span></pre>

<p>
	كما نرى في المثال السابق أننا نستطيع الجمع بين قائمتين عبر علامة الجمع، كما نستطيع مضاعفة القائمة وتكرار قيمها عبر علامة الضرب.
</p>

<h3>
	الصفوف Tuples
</h3>

<p>
	تشبه الصفوف Tuples في بايثون القوائم إلى حد كبير، إذ تحتوي على مجموعة من القيم بصورة متتابعة ويلي كل منها فاصلة، لكنها تُضمَّن بين أقواس عادية <code>( )</code> على عكس القوائم، وتملك ميزات القوائم نفسها كما في المثال التالي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6962_39" style=""><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="str">'abc'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'efg'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">100</span><span class="pun">,</span><span class="pln"> </span><span class="str">'ilm'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">10.54</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">x</span><span class="pun">[</span><span class="lit">0</span><span class="pun">])</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> abc
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">x</span><span class="pun">)</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="pun">(</span><span class="str">'abc'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'efg'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">100</span><span class="pun">,</span><span class="pln"> </span><span class="str">'ilm'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">10.54</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">x</span><span class="pun">[</span><span class="lit">1</span><span class="pun">:</span><span class="lit">3</span><span class="pun">])</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="pun">(</span><span class="str">'efg'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">100</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">x</span><span class="pun">[</span><span class="lit">1</span><span class="pun">:])</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="pun">(</span><span class="str">'efg'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">100</span><span class="pun">,</span><span class="pln"> </span><span class="str">'ilm'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">10.54</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">x </span><span class="pun">*</span><span class="pln"> </span><span class="lit">2</span><span class="pun">)</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="pun">(</span><span class="str">'abc'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'efg'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">100</span><span class="pun">,</span><span class="pln"> </span><span class="str">'ilm'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">10.54</span><span class="pun">,</span><span class="pln"> </span><span class="str">'abc'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'efg'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">100</span><span class="pun">,</span><span class="pln"> </span><span class="str">'ilm'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">10.54</span><span class="pun">)</span><span class="pln">
y </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="str">'xyz'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'abc'</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">x </span><span class="pun">+</span><span class="pln"> y</span><span class="pun">)</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="pun">(</span><span class="str">'abc'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'efg'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">100</span><span class="pun">,</span><span class="pln"> </span><span class="str">'ilm'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">10.54</span><span class="pun">,</span><span class="pln"> </span><span class="str">'xyz'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'abc'</span><span class="pun">)</span></pre>

<p>
	توجد اختلافات بين القوائم والصفوف نلخصها في النقطتين الآتيتين.
</p>

<p>
	أولًا، عند إنشاء صف يحتوي على عنصر واحد، فسيُختصَر ذلك تلقائيًا في بايثون إلى نوع ذلك العنصر بعكس القوائم، إذ أنه إذا عُرِّف صف يحتوي على عنصر واحد وليكن نصًا، فسيُخزَّن في الذاكرة على أنه نص وليس صفًا؛ لذا أضفنا عنصرين عند تعيين قيمة للمتغير y في الشيفرة السابقة، كي يُخزَّن المتغير y على أساس صف وليس على أساس نص، ولكي يُتعامَل معه على أساس صف، وليتمكن مفسر اللغة من تنفيذ العملية الأخيرة وهي جمع صفين.
</p>

<p>
	ثانيًا، لا يمكن تغيير قيمة عنصر من عناصر الصفوف، في حين يمكن تغيير قيمة عنصر من عناصر القوائم كما يلي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6962_41" style=""><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="str">'hello'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'world'</span><span class="pun">]</span><span class="pln">
x</span><span class="pun">[</span><span class="lit">1</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'there'</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">x</span><span class="pun">)</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="pun">[</span><span class="str">'hello'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'there'</span><span class="pun">]</span></pre>

<p>
	أما عند محاولة تنفيذ التعليمات نفسها على الصفوف، فلن يقبل المفسر تغيير قيمة العنصر، إذ يجب بقاء قيمة العناصر في الصفوف ثابتةً، فمن الممكن تغيير المتغير كله، لكن لا يمكن تغيير قيمة عنصر واحد من داخل الصف مباشرةً، فعند أداء تلك المحاولة، فسيطبع مفسر اللغة الخطأ التالي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6962_43" style=""><span class="typ">TypeError</span><span class="pun">:</span><span class="pln"> </span><span class="str">'tuple'</span><span class="pln"> object does </span><span class="kwd">not</span><span class="pln"> support item assignment</span><span class="pun">.</span></pre>

<p>
	ما يعني أنّ الصفوف لا تدعم تعيين قيم للعناصر.
</p>

<h3>
	القواميس Dictionary
</h3>

<p>
	يشبه القاموس Dictionary في بايثون جدول Hash أي Hash-table وهو إحدى <a href="https://academy.hsoub.com/programming/general/%D9%87%D9%8A%D8%A7%D9%83%D9%84-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-data-structures/" rel="">هياكل البيانات في علوم الحاسوب</a> بحيث تُربَط القيم بمفتاح ومن ثم البحث عن القيم بسرعة كبيرة إذ أنها تعمل على أساس مصفوفة تحتوي على أزواج من المفاتيح والقيم، بحيث يوجد مفتاح ما لكل قيمة يتيح الوصول إليها، وتُعرَّف القواميس عبر الأقواس المعقوصة <code>{ }</code>، كما أنّ القواميس بدورها غير مرتبة، بعكس الصفوف والقوائم التي تُرتَّب فيها مفاتيح كل عنصر بالترتيب الرقمي بدءًا من الصفر أي يعيِّن المبرمج مفاتيح القواميس والتي من الممكن أن تكون نصيةً أو عدديةً بدون ترتيب.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6962_45" style=""><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="str">'key'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'value'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'2ndKey'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'2ndValue'</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">x</span><span class="pun">[</span><span class="str">'key'</span><span class="pun">])</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="str">'value'</span></pre>

<p>
	يمكن للمفاتيح أن تكون نصيةً أو عددية مثل الصفوف والقوائم، أي كما يلي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6962_48" style=""><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="str">'key'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'value'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">:</span><span class="pln"> </span><span class="str">'2ndValue'</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">x</span><span class="pun">[</span><span class="lit">2</span><span class="pun">])</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="str">'2ndValue'</span></pre>

<p>
	كما يمكن تغيير قيمة أحد عناصر القاموس مثل القوائم كما يلي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6962_50" style=""><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="str">'key'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'value'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">:</span><span class="pln"> </span><span class="str">'2ndValue'</span><span class="pun">}</span><span class="pln">
x</span><span class="pun">[</span><span class="str">'key'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Hello"</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">x</span><span class="pun">)</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="pun">{</span><span class="str">'key'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'Hello'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">:</span><span class="pln"> </span><span class="str">'2ndValue'</span><span class="pun">}</span></pre>

<p>
	ويمكن استخلاص مفاتيح القاموس أو قيمه عبر التوابع <code>keys</code> و<code>values</code> كما يلي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6962_52" style=""><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="str">'key'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'value'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">:</span><span class="pln"> </span><span class="str">'2ndValue'</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">x</span><span class="pun">.</span><span class="pln">keys</span><span class="pun">())</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> dict_keys</span><span class="pun">([</span><span class="str">'key'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">])</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">x</span><span class="pun">.</span><span class="pln">values</span><span class="pun">())</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> dict_values</span><span class="pun">([</span><span class="str">'value'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'2ndValue'</span><span class="pun">])</span></pre>

<h3>
	المجموعات Sets
</h3>

<p>
	تشبه المجموعات Sets والتي هي هياكل البيانات في بايثون إلى حد كبير الصفوف، لكنها تُكتب باستخدام الأقواس المعقوصة مثل القواميس، إذ نعرِّف في المثال التالي مجموعةً تحتوي على بضعة أسماء ثم نطبع عناصر المجموعة في السطر الثاني:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6962_54" style=""><span class="pln">names </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="str">'Adam'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Noah'</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">names</span><span class="pun">)</span></pre>

<p>
	قد يختلف ترتيب العناصر عند طباعة المجموعة لأن المجموعات في الأساس لا ترتِّب العناصر؛ لذلك قد يختلف ترتيب عناصر المجموعة في كل مرة يُشغَّل فيها البرنامج، أيضًا من الضروري معرفة أنّ المجموعات لا تُذكَر كثيرًا في الدورات ومساقات التعليم، إذ أنها محدودة للغاية في استخداماتها، ولا يمكن طباعة عنصر معيّن منها إلا بطرق معقدة وهي لا تستخدَم بصورة شائعة.
</p>

<h2>
	تحويل أنواع البيانات في لغة بايثون
</h2>

<p>
	توفِّر بايثون الكثير من <a href="https://academy.hsoub.com/programming/python/%d8%aa%d8%b9%d8%b1%d9%81-%d8%b9%d9%84%d9%89-%d8%a7%d9%84%d8%af%d9%88%d8%a7%d9%84-functions-%d9%81%d9%8a-%d8%a8%d8%a7%d9%8a%d8%ab%d9%88%d9%86-r292/" rel="">الدوال</a> التي يمكن استخدامها لتحويل أنواع البيانات إلى أنواع أخرى، فأحيانًا قد تضطر إلى تحويل <a href="https://academy.hsoub.com/programming/python/%d8%a7%d9%84%d8%aa%d8%b9%d8%a7%d9%85%d9%84-%d9%85%d8%b9-%d8%a7%d9%84%d9%82%d9%88%d8%a7%d8%a6%d9%85-%d9%88%d8%a7%d9%84%d8%b3%d9%84%d8%a7%d8%b3%d9%84-%d8%a7%d9%84%d9%86%d8%b5%d9%8a%d8%a9-%d9%81%d9%8a-%d9%84%d8%ba%d8%a9-%d8%a8%d8%a7%d9%8a%d8%ab%d9%88%d9%86-r223/" rel="">سلسلة نصية</a> إلى عدد إذ أنه من الممكن وجود أعداد مكتوبة على صورة سلسلة نصية مثل:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6962_58" style=""><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="str">'2'</span></pre>

<p>
	لا يمكنك في تلك الحالة إجراء عمليات حسابية على المتغير x، إذ أنه قد يحمل قيمةً نصيةً بالنسبة للمفسر بما أنّ الرقم متضمِّن بين علامتَي تنصيص، كما يمكنك التأكد من نوع المتغير باستخدام الدالة <code>type</code>.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6962_60" style=""><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">type</span><span class="pun">(</span><span class="pln">x</span><span class="pun">))</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="pun">&lt;</span><span class="kwd">class</span><span class="pln"> </span><span class="str">'str'</span><span class="pun">&gt;</span></pre>

<p>
	تُعَدّ كلمة str اختصارًا لكلمة String أي سلسلة نصية، وبالتالي ستفشل محاولات تنفيذ أيّ عملية حسابية على المتغير، إذ ستتسبب عمليتَي القسمة والطرح في ظهور رسالة خطأ؛ أما عمليتَي الجمع والضرب فستنتجان نتائج غير متوقعة، إذ أنه سيُتعامَل مع المتغير كما يُتعامَل مع النصوص، وبالتالي ستفضي عملية الضرب إلى تكرار النص عدد مرات يساوي العدد المضروب فيه، أما عملية الجمع فستلصق شقَّي الجمع على أساس نصوص وليس على أساس أعداد.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6962_62" style=""><span class="pln">x </span><span class="pun">*</span><span class="pln"> </span><span class="lit">2</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="str">'22'</span><span class="pln">
x </span><span class="pun">+</span><span class="pln"> </span><span class="str">'4'</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="str">'24'</span></pre>

<p>
	لاحظ أنه عند محاولة الجمع قمنا بتضمين الرقم بين علامتي تنصيص، لكي يكون طرفي الجمع نصَّين بما أنّ المتغير x يحتوي على نص، فلا يمكن جمع نوعين مختلفين من البيانات، فإما نصوصًا معًا، أو أعدادًا معًا.
</p>

<p>
	تُقرأ الأعداد في الكثير من الحالات على أساس نصوص، ولذلك تُعَدّ دوال تحويل أنواع البيانات من الميزات المهمة في لغة بايثون وغيرها من لغات البرمجة، وسنسرد فيما يلي أهم دوال تحويل البيانات في بايثون مع الأمثلة.
</p>

<h3>
	التحويل إلى عدد صحيح int
</h3>

<p>
	يمكن تحويل البيانات مثل النصوص إلى رقم صحيح باستخدام الدالة <code>int</code> التي هي اختصار لكلمة <code>Integer</code>، أي عدد صحيح، ففي المثال الآتي حوِّل المتغير النصي <code>x</code> إلى عدد صحيح، كما يمكن تنفيذ عمليات حسابية عليه.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6962_64" style=""><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="str">'2'</span><span class="pln">
x </span><span class="pun">=</span><span class="pln"> int</span><span class="pun">(</span><span class="pln">x</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">type</span><span class="pun">(</span><span class="pln">x</span><span class="pun">))</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="pun">&lt;</span><span class="kwd">class</span><span class="pln"> </span><span class="str">'int'</span><span class="pun">&gt;</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">x </span><span class="pun">*</span><span class="pln"> </span><span class="lit">2</span><span class="pun">)</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="lit">4</span></pre>

<h3>
	التحويل إلى عدد عشري float
</h3>

<p>
	يمكن تحويل البيانات مثل النصوص إلى عدد عشري باستخدام الدالة <code>float</code>، ففي المثال حوِّل نص إلى عدد عشري، كما يمكن تنفيذ عمليات حسابية عليه.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6962_66" style=""><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="str">'2.5'</span><span class="pln">
x </span><span class="pun">=</span><span class="pln"> float</span><span class="pun">(</span><span class="pln">x</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">type</span><span class="pun">(</span><span class="pln">x</span><span class="pun">))</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="pun">&lt;</span><span class="kwd">class</span><span class="pln"> </span><span class="str">'float'</span><span class="pun">&gt;</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">x </span><span class="pun">*</span><span class="pln"> </span><span class="lit">2</span><span class="pun">)</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="lit">5.0</span></pre>

<h3>
	التحويل إلى نص str
</h3>

<p>
	يمكن تحويل البيانات مثل الأعداد الصحيحة والعشرية إلى نصوص عبر الدالة <code>str</code>، ففي المثال التالي حُوِّل عدد عشري إلى نص.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6962_68" style=""><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1.5</span><span class="pln">
x </span><span class="pun">=</span><span class="pln"> str</span><span class="pun">(</span><span class="pln">x</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">type</span><span class="pun">(</span><span class="pln">x</span><span class="pun">))</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="pun">&lt;</span><span class="kwd">class</span><span class="pln"> </span><span class="str">'str'</span><span class="pun">&gt;</span></pre>

<h3>
	التحويل إلى صف Tuple
</h3>

<p>
	يمكن تحويل بعض أنواع البيانات لتكون صفًا Tuple باستخدام الدالة <code>tuple</code>، ومن تلك الأنواع النصوص والقواميس والقوائم، ولكن لا يمكن تحويل الأعداد إلى صفوف.
</p>

<p>
	يحوَّل كل حرف أو مسافة في النصوص إلى عنصر في الصف؛ أما القواميس فتُحوَّل كل المفاتيح فيها إلى عناصر في الصف، في حين تتحول القوائم إلى صفوف بالترتيب نفسه وبالعناصر نفسها، ونحوِّل في المثال التالي نصًا إلى صف ثم نطبعه لنرى أنه قد حوِّل المتغير إلى صف ذي عنصر واحد.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6962_71" style=""><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="str">'1'</span><span class="pun">;</span><span class="pln"> x </span><span class="pun">=</span><span class="pln"> tuple</span><span class="pun">(</span><span class="pln">x</span><span class="pun">);</span><span class="pln"> </span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">x</span><span class="pun">)</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="pun">(</span><span class="str">'1'</span><span class="pun">,)</span></pre>

<h3>
	التحويل إلى قائمة List
</h3>

<p>
	يمكن لبعض أنواع البيانات أن يتم تحويلها، إلى قائمة عبر الدالة list ، تمامًا كحال دالة التحويل إلى صف، يمكن تحويل الصفوف والقواميس والنصوص إلى قوائم.
</p>

<p>
	تعمل دالة التحويل إلى قائمة، كحال دالة التحويل إلى صف، فعند تحويل صف إلى قائمة، يتم تحويل العناصر كلها بنفس الترتيب، أما في حالة تحويل نص إلى قائمة، يتم تحويل كل حرف أو مسافة في النص، إلى عنصر في القائمة، أما في حالة تحويل القواميس إلى قائمة، فيتم تحويل مفاتيح القاموس إلى عناصر في القائمة.
</p>

<p>
	نُحوِّل في المثال الآتي نص إلى قائمة، ومن ثم نطبعه.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6962_73" style=""><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="str">'Hello'</span><span class="pun">;</span><span class="pln"> x </span><span class="pun">=</span><span class="pln"> list</span><span class="pun">(</span><span class="pln">x</span><span class="pun">);</span><span class="pln"> </span><span class="kwd">print</span><span class="pun">(</span><span class="pln">x</span><span class="pun">)</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="pun">[</span><span class="str">'H'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'e'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'l'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'l'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'o'</span><span class="pun">]</span></pre>

<h3>
	التحويل إلى قاموس Dictionary
</h3>

<p>
	على عكس باقي الدوال السابق ذكرها حيث يمكن التحويل من نوع بيانات إلى قائمة أو صف، لا يمكن تحويل نوع آخر إلى قاموس بشكل تلقائي من اللغة، حيث أن القاموس يحتاج إلى مفاتيح وقيم لكل مفتاح، وهي بيانات غير متوفرة في باقي أنواع البيانات التي أوردتها، حتى يتم التحويل منها إلى قاموس. مع ذلك يمكنك إنشاء قاموس جديد عبر الدالة <code>dict</code>، وهي طريقة أخرى لإنشاء القواميس في بايثون، ويمكنك في أي من الطريقتين القيام بنسخ قيم متغيرات أخرى أثناء إنشاء القاموس.
</p>

<p>
	في المثال الآتي نقوم بتعريف متغير جديد يحمل قيمة نصية، ومن ثم سنقوم بإنشاء قاموس بالطريقة التقليدية التي أوردتها من قبل، باستخدام المتغير النصي، ثم نقوم بفعل الأمر نفسه مجددًا عبر دالة <code>dict</code>.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6962_75" style=""><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="str">'value'</span><span class="pun">;</span><span class="pln"> y </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="str">'key'</span><span class="pun">:</span><span class="pln"> x</span><span class="pun">,</span><span class="pln"> </span><span class="str">'a'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'b'</span><span class="pun">};</span><span class="pln"> </span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">y</span><span class="pun">)</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="pun">{</span><span class="str">'key'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'value'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'a'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'b'</span><span class="pun">}</span><span class="pln">
z </span><span class="pun">=</span><span class="pln"> dict</span><span class="pun">(</span><span class="pln">key </span><span class="pun">=</span><span class="pln"> x</span><span class="pun">,</span><span class="pln"> a </span><span class="pun">=</span><span class="pln"> </span><span class="str">'b'</span><span class="pun">);</span><span class="pln"> </span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">z</span><span class="pun">)</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="pun">{</span><span class="str">'key'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'value'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'a'</span><span class="pun">:</span><span class="pln"> </span><span class="str">'b'</span><span class="pun">}</span></pre>

<h2>
	العمليات والعوامل في لغة بايثون
</h2>

<p>
	تتوفر في <a href="https://wiki.hsoub.com/Python" rel="external">بايثون</a> وفي العديد من لغات البرمجة الأخرى العديد من العوامل المفيدة التي تساعدنا على إجراء مختلف العمليات مثل العمليات الرياضية والحسابية أو عمليات التعريف والإسناد وسمي عامل من عوامل لأنه يجري عملية على عدة مُعامَلات تُستخدم معه مثل عملية الجمع <code>5+5</code> تسمى الإشارة <code>+</code> بعامل والعدد 5 بالمُعامَل.
</p>

<p>
	ويوجد في بايثون سبعة أنواع مختلفة من العوامل نستعرضها كما يلي:
</p>

<h3>
	العوامل الرياضية أو الحسابية Arithmetic Operators
</h3>

<p>
	تهدف العوامل الحسابية من اسمها إلى تنفيذ العمليات الحسابية من خلال شيفرة بايثون، فعلامات الجمع <code>+</code> والطرح <code>-</code> والقسمة <code>/</code> والضرب <code>*</code> كلها من العوامل الحسابية، ونذكر أيضًا عامل باقي القسمة وهو علامة النسبة المئوية <code>%</code>، وقد أوردتُ أمثلةً على جميع تلك العوامل في بداية المقال.
</p>

<p>
	نضيف إلى تلك العوامل عاملَين آخرين هما العامل الأسي Exponent Operator وعامل القسمة الصحيحة Floor Division.
</p>

<p>
	أما العامل الأسي <code>**</code> فيقوم بعملية ضرب أُسي على الأرقام، فمثلًا 5 أُس 4 تعني ضرب الرقم 5 في نفسه 4 مرات، وينتج ذلك الرقم 625. أما مهمة عامل القسمة الصحيحة <code>//</code>، هي عملية القسمة العادية مع إنتاج الرقم الصحيح فقط من الناتج دونًا عن الأرقام والكسور العشرية، فمثلًا ناتج قسمة 26 على 5 هو 5.2، لكن في القسمة الصحيحة ينتج ذلك الرقم 5 فقط ويتم حذف 0.2 من الناتج.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6962_78" style=""><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="lit">5</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">x </span><span class="pun">**</span><span class="pln"> </span><span class="lit">4</span><span class="pun">)</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="lit">625</span><span class="pln">
y </span><span class="pun">=</span><span class="pln"> </span><span class="lit">26</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">y </span><span class="pun">//</span><span class="pln"> </span><span class="lit">5</span><span class="pun">)</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="lit">5</span></pre>

<h3>
	معوامل الموازنة Comparison Operators
</h3>

<p>
	تُستخدم تلك العوامل للموازنة بين القيم والمتغيرات، إذ يكون الأمر أشبه بطرح سؤال ما على لغة بايثون مثل هل قيمة المتغير كذا تساوي قيمة المتغير كذا؟ أو هل قيمة المتغير كذا لا تساوي قيمة المتغير كذا؟ فتلك الأسئلة من الضروري سؤالها للغة في كثير من البرامج لأنه بناءً على الإجابات سيُتَّخذ قرار بتنفيذ كتلة شيفرة ما، كما أنّ عوامل الموازنة تتشابه في كثير من لغات البرمجة وتكون في بايثون كما يلي:
</p>

<table>
	<thead>
		<tr>
			<th>
				العامل
			</th>
			<th>
				الاستخدام
			</th>
			<th>
				مثال
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>
				==
			</td>
			<td>
				هل القيمة التي على يسار العامل تساوي القيمة التي على يمينه؟
			</td>
			<td>
				x == y
			</td>
		</tr>
		<tr>
			<td>
				=!
			</td>
			<td>
				هل القيمة التي على يسار العامل لا تساوي القيمة التي على يمينه؟
			</td>
			<td>
				x != y
			</td>
		</tr>
		<tr>
			<td>
				&lt;
			</td>
			<td>
				هل القيمة التي على يسار العامل أكبر من القيمة التي على يمينه؟
			</td>
			<td>
				x &gt; y
			</td>
		</tr>
		<tr>
			<td>
				&gt;
			</td>
			<td>
				هل القيمة التي على يسار العامل أصغر من القيمة التي على يمينه؟
			</td>
			<td>
				x &lt; y
			</td>
		</tr>
		<tr>
			<td>
				=&lt;
			</td>
			<td>
				هل القيمة التي على يسار العامل أكبر أو تساوي القيمة التي على يمينه؟
			</td>
			<td>
				x &gt;= y
			</td>
		</tr>
		<tr>
			<td>
				=&gt;
			</td>
			<td>
				هل القيمة التي على يسار العامل أصغر أو تساوي القيمة التي على يمينه؟
			</td>
			<td>
				x &lt;= y
			</td>
		</tr>
	</tbody>
</table>

<p>
	وبناءً على السابق فإنه إذا وُجد متغيران يحملان قيمًا متساويةً، فسيكون المثال الأول في عامل التساوي صحيحًا <code>True</code>؛ أما إذا كان المتغيران يحملان قيمًا مختلفةً، فسيكون المثال خاطئًا <code>False</code>، وكذلك الحال في العوامل الأخرى، وقد تبدو تلك العوامل مبهمةً قليلًا، إلا أنها تملك استخدامات مهمةً، إذ سيتضح ذلك أثناء دراسة جزء اتخاذ القرار.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6962_80" style=""><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln"> y </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">x </span><span class="pun">==</span><span class="pln"> y</span><span class="pun">)</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="kwd">True</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">x </span><span class="pun">!=</span><span class="pln"> y</span><span class="pun">)</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="kwd">False</span></pre>

<h3>
	المعوامل المنطقية Logical Operators
</h3>

<p>
	تُستخدَم العوامل المنطقية لتركيب أسئلة منطقية أكثر تعقيدًا من خلال عوامل الموازنة السابق ذكرها مثلًا، فبافتراض وجود أربعة متغيرات وهي x و y و z و v، وإذا سألنا السؤال التالي: هل قيمة المتغير x تساوي قيمة المتغير y أو قيمة المتغير z تساوي قيمة المتغير v؟
</p>

<p>
	يتكون السؤال المذكور من سؤالين فرعيين يفصل بينهما كلمة <strong>أو</strong> وهي عامل منطقي في البرمجة، وهنا تُعالَج الأسئلة الفرعية، ثم يُتخَذ القرار بناءً على ذلك العامل المنطقي.
</p>

<p>
	توجد ثلاثة عوامل منطقية هي AND و OR و NOT بصورة أساسية، وكل منها يتعامل مع الجمل بطرق مختلفة، فالعامل الأول والثاني يعالجان أسئلةً معقدةً تتكون من أكثر من سؤال فرعي؛ أما الثالث فيتعامل مع جملة محدَّدة بحيث ينفي نتيجتها المنطقية أي يُحوِّل الصح <code>True</code> إلى خطأ <code>False</code>.
</p>

<p>
	وفيما يلي استخدامات العوامل المنطقية:
</p>

<ul>
	<li>
		And: إذا كانت جميع الجمل أو الأسئلة الفرعية صحيحةً، فستنتُج إجابة صحيحة True، وإذا كانت أيّ من الأسئلة الفرعية خاطئةً، فسينتُج خطأ False.
	</li>
</ul>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6962_82" style=""><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">  y </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pln">
x </span><span class="pun">==</span><span class="pln"> </span><span class="lit">1</span><span class="pln">  </span><span class="kwd">and</span><span class="pln"> y </span><span class="pun">==</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="com"># &gt;&gt; True</span></pre>

<ul>
	<li>
		or: إذا كانت أي من الجمل صحيحةً، فستنتُج إجابة صحيحة حتى إذا كانت باقي الجمل غير صحيحة
	</li>
</ul>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6962_84" style=""><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">  y </span><span class="pun">=</span><span class="lit">1</span><span class="pln">
x </span><span class="pun">==</span><span class="pln"> </span><span class="lit">2</span><span class="pln">  </span><span class="kwd">or</span><span class="pln"> y </span><span class="pun">==</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="com"># &gt;&gt; True</span></pre>

<ul>
	<li>
		Not: يعكس القيمة المنطقية الناتجة.
	</li>
</ul>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6962_86" style=""><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pln">
</span><span class="kwd">not</span><span class="pln"> x </span><span class="pun">==</span><span class="pln"> </span><span class="lit">1</span><span class="pln">  </span><span class="com"># &gt;&gt; False</span></pre>

<h3>
	عوامل العضوية Membership Operators
</h3>

<p>
	وهي إحدى العوامل المستخدَمة في الموازنة، أو بمعنى أبسط المستخدَمة في طرح أسئلة يُبنَى عليها اتخاذ قرار ما في البرنامج، ويوجد في بايثون عاملان فقط تحت ذلك التصنيف وهما عامل الوجود <code>in</code> وعامل عدم الوجود <code>not in</code>، إذ يستخدَم العامل الأول للتحقق من وجود قيمة ما بداخل سلسلة من القيم؛ أما الثاني فيستخدَم للتحقق من عدم وجود القيمة في سلسلة ما.
</p>

<p>
	تعني سلسلة القيم هنا القوائم والصفوف والمفاتيح الموجودة في القواميس، بمعنى أنه يمكننا التحقق من وجود قيمة معينة بداخل قائمة أو صف، أو من وجود قيمة معينة مثل المفاتيح الموجودة في قاموس، وفيما يلي ثلاثة أمثلة على التحقق من وجود قيمة باستخدام العامل الأول:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6962_88" style=""><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="lit">5</span><span class="pun">,</span><span class="pln"> </span><span class="lit">6</span><span class="pun">,</span><span class="pln"> </span><span class="lit">7</span><span class="pun">]</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="lit">5</span><span class="pln"> </span><span class="kwd">in</span><span class="pln"> x</span><span class="pun">)</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="kwd">True</span><span class="pln">
y </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="lit">5</span><span class="pun">,</span><span class="pln"> </span><span class="lit">6</span><span class="pun">,</span><span class="pln"> </span><span class="lit">7</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="lit">5</span><span class="pln"> </span><span class="kwd">in</span><span class="pln"> y</span><span class="pun">)</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="kwd">True</span><span class="pln">
z </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="lit">5</span><span class="pun">:</span><span class="pln"> </span><span class="str">'x'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">6</span><span class="pun">:</span><span class="pln"> </span><span class="str">'y'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">7</span><span class="pun">:</span><span class="pln"> </span><span class="str">'z'</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="lit">5</span><span class="pln"> </span><span class="kwd">in</span><span class="pln"> z</span><span class="pun">)</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="kwd">True</span></pre>

<p>
	أما العامل الثاني فيتحقق من عدم وجود القيمة في السلسلة، وفيما يلي الأمثلة السابقة نفسها ولكن باستخدام العامل الثاني:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6962_90" style=""><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="lit">5</span><span class="pun">,</span><span class="pln"> </span><span class="lit">6</span><span class="pun">,</span><span class="pln"> </span><span class="lit">7</span><span class="pun">]</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="lit">5</span><span class="pln"> </span><span class="kwd">not</span><span class="pln"> </span><span class="kwd">in</span><span class="pln"> x</span><span class="pun">)</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="kwd">False</span><span class="pln">
y </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="lit">5</span><span class="pun">,</span><span class="pln"> </span><span class="lit">6</span><span class="pun">,</span><span class="pln"> </span><span class="lit">7</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="lit">5</span><span class="pln"> </span><span class="kwd">not</span><span class="pln"> </span><span class="kwd">in</span><span class="pln"> y</span><span class="pun">)</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="kwd">False</span><span class="pln">
z </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="lit">5</span><span class="pun">:</span><span class="pln"> </span><span class="str">'x'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">6</span><span class="pun">:</span><span class="pln"> </span><span class="str">'y'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">7</span><span class="pun">:</span><span class="pln"> </span><span class="str">'z'</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="lit">5</span><span class="pln"> </span><span class="kwd">not</span><span class="pln"> </span><span class="kwd">in</span><span class="pln"> z</span><span class="pun">)</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="kwd">False</span></pre>

<h3>
	عوامل الهوية Identity Operators
</h3>

<p>
	وهي إحدى الأنواع المستخدَمة في الموازنة، إذ توازن بين شيئين للتحقق من تطابقهما تمامًا، ويوجد عاملان فقط تحت هذا التصنيف وهما عامل <code>is</code> وعامل نفيه <code>is not</code>، إذ يستخدَم العامل الأول للتحقق من تطابق كائنين؛ أما الثاني فيستخدَم للتحقق من عدم تطابق كائنين، وفيما يلي مثال على ذلك:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6962_92" style=""><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="lit">5</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">x </span><span class="kwd">is</span><span class="pln"> </span><span class="lit">5</span><span class="pun">)</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="kwd">True</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">x </span><span class="kwd">is</span><span class="pln"> </span><span class="kwd">not</span><span class="pln"> </span><span class="lit">5</span><span class="pun">)</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="kwd">False</span></pre>

<h3>
	عوامل الإسناد Assignment Operators
</h3>

<p>
	يوجد عامل إسناد واحد بصورة أساسية في بايثون وفي معظم لغات البرمجة وهو <code>=</code>، إذ يُستخدَم لإسناد قيمة إلى متغير، فإذا كان لدينا متغير ما يدعى x وقيمته الرقم 1، فنستطيع كما يلي إجراء عملية جمع على المتغير ثم إسناد ناتج العملية إلى المتغير.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6962_94" style=""><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pln">
x </span><span class="pun">=</span><span class="pln"> x </span><span class="pun">+</span><span class="pln"> </span><span class="lit">1</span><span class="pln">

</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">x</span><span class="pun">)</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="lit">2</span></pre>

<p>
	توجد بعض العوامل الأخرى التي تجري عمليةً ما على قيمة المتغير وتسند قيمةً جديدةً من ناتج تلك العملية، أي هي اختصار لعمليتين، بحيث تكون الأولى هي تنفيذ عملية رياضية على قيمة المتغير، وتكون الثانية إسناد نتيجة تلك العملية الرياضية على أساس قيمة جديدة للمتغير، لذلك فتوجد في بايثون وفي لغات البرمجة الأخرى عوامل إسناد تختصر تلك التعليمات كما يلي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6962_96" style=""><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pln">
x </span><span class="pun">+=</span><span class="pln"> </span><span class="lit">1</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">x</span><span class="pun">)</span><span class="pln">
</span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="lit">2</span></pre>

<p>
	نذكر في الجدول التالي تلك العوامل مع استخداماتها:
</p>

<table>
	<thead>
		<tr>
			<th>
				العامل
			</th>
			<th>
				الاستخدام
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>
				=
			</td>
			<td>
				يسند القيمة الموجودة على يمينه كما هي إلى المتغير الموجود على يساره إذا كان المتغير موجودًا بالفعل، أو ينشئ المتغير في الذاكرة إذا لم يكن موجودًا ثم يسند إليه القيمة الموجودة على يمينه كما هي.
			</td>
		</tr>
		<tr>
			<td>
				=+
			</td>
			<td>
				يضيف القيمة الموجودة على يمينه إلى قيمة المتغير الموجود على يساره.
			</td>
		</tr>
		<tr>
			<td>
				=-
			</td>
			<td>
				يطرح القيمة الموجودة على يمينه من قيمة المتغير الموجود على يساره ثم يسند الناتج إلى المتغير.
			</td>
		</tr>
		<tr>
			<td>
				=*
			</td>
			<td>
				يضرب قيمة المتغير الموجود على يساره بالقيمة الموجودة على يمينه ثم يسند الناتج إلى المتغير.
			</td>
		</tr>
		<tr>
			<td>
				=/
			</td>
			<td>
				يقسِّم قيمة المتغير الموجود على يساره على القيمة الموجودة على يمينه ثم يسند الناتج إلى المتغير.
			</td>
		</tr>
		<tr>
			<td>
				=%
			</td>
			<td>
				يُوجِد باقي قسمة قيمة المتغير الموجود على يساره على القيمة الموجودة على يمينه ثم يسند الناتج إلى المتغير.
			</td>
		</tr>
		<tr>
			<td>
				=**
			</td>
			<td>
				يُجري حسابًا أسيًا على قيمة المتغير، إذ يكون الاْس هو القيمة الموجودة على يمينه، ثم يسند الناتج إلى المتغير.
			</td>
		</tr>
		<tr>
			<td>
				=//
			</td>
			<td>
				يُجري عملية قسمة صحيحة على قيمة المتغير من اليسار على القيمة الموجودة على يمينه، ثم يسند الناتج إلى المتغير.
			</td>
		</tr>
	</tbody>
</table>

<p>
	نترك لك تجربة تلك العوامل وبقية العوامل الأخرى أيضًا كتطبيق على ما تعلمته.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/programming/python/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r1815/" rel="">أساسيات البرمجة بلغة بايثون</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%AF%D9%84%D9%8A%D9%84%D9%83-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-r1726/#%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D9%81%D9%8A-%D9%84%D8%BA%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9" rel="">أنواع البيانات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%B5%D9%81%D9%88%D9%81%D8%8C-%D8%A7%D9%84%D9%85%D8%AC%D9%85%D9%88%D8%B9%D8%A7%D8%AA-%D9%88%D8%A7%D9%84%D9%82%D9%88%D8%A7%D9%85%D9%8A%D8%B3-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r226/" rel="">التعامل مع الصفوف، المجموعات والقواميس في بايثون</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/python/%D9%81%D9%87%D9%85-%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-r720/" rel="">فهم أنواع البيانات في بايثون 3</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">1872</guid><pubDate>Wed, 01 Feb 2023 16:01:00 +0000</pubDate></item><item><title>&#x645;&#x62C;&#x627;&#x644;&#x627;&#x62A; &#x627;&#x644;&#x630;&#x643;&#x627;&#x621; &#x627;&#x644;&#x627;&#x635;&#x637;&#x646;&#x627;&#x639;&#x64A;</title><link>https://academy.hsoub.com/programming/artificial-intelligence/%D9%85%D8%AC%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_02/1260230370_--.png.e933410324b6966d399bca386b898567.png" /></p>
<p>
	مصطلح الذكاء الاصطناعي هو أكثر مصطلح رنان واسع الشهرة في عصرنا الحالي وهناك سببٌ واحدٌ لذلك؛ فتنتنا بالذكاء الذي يمنحنا نحن البشر مكانة خاصة بين أشكال الحياة، وقد تظهر أسئلة مثل "ما هو الذكاء؟" وسؤال "كيف يمكن قياس الذكاء؟" أو "كيف يعمل الدماغ؟" وكل هذه الأسئلة ذات مغزى عند محاولة فهم الذكاء الاصطناعي، وقد جاوبنا عنها وفصلنا فيها وفي شرح الذكاء الاصطناعي وتعريفاته في مقالة <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">الذكاء الاصطناعي: دليلك الشامل</a> وسنتحدث في هذا المقال بالتفصيل عن مجالات الذكاء الاصطناعي.
</p>

<h2>
	ما هو الذكاء الاصطناعي؟
</h2>

<p>
	عرفنا في المقال السابق الذكاء الاصطناعي ولكن لابد في بداية المقال من الإشارة باختصار إليه وإلى مدى انتشار الذكاء الاصطناعي حولنا هذه الأيام.
</p>

<p>
	يمكن القول أن <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-%D8%A3%D9%87%D9%85-%D8%A7%D9%84%D8%A5%D9%86%D8%AC%D8%A7%D8%B2%D8%A7%D8%AA-%D9%88%D8%A7%D9%84%D8%A7%D8%AE%D8%AA%D8%B1%D8%A7%D8%B9%D8%A7%D8%AA-%D9%88%D9%83%D9%8A%D9%81-%D8%A3%D8%AB%D8%B1%D8%AA-%D9%81%D9%8A-%D8%AD%D9%8A%D8%A7%D8%AA%D9%86%D8%A7-%D8%A7%D9%84%D9%8A%D9%88%D9%85%D9%8A%D8%A9-r975/" rel="">الذكاء الاصطناعي</a> هو العملية الناتجة عن تحويل الآلات والحواسيب من أدوات مطيعة منفذة للأوامر فقط إلى أدوات آمرة تعطي اقتراحات وتتخذ القرارات بمفردها دون تدخل بشري بناء على معطيات أو تدريبات مسبقة.
</p>

<p>
	كنا سابقًا نبحث عن النتائج لنصل إلى ما نريد أما اليوم باتت الآلات تعرض لنا نتائج تكون في بعض الحالات مطابقة تمامًا لما نضمر البحث عنه أو نميل إلى إليه خصوصًا فيما يتعلق بنية الشراء أو المشاهدة أو حتى البحث وذلك بناءً على إحاطة الحواسيب والهواتف بنا وتسجيلها كل شاردة وواردة عنا.
</p>

<p>
	دخل الذكاء الاصطناعي في أغلب الحواسيب والأجهزة المحيطة بنا، فاصرخ الآن اسم المساعد الآلي في هاتفك ليجيبك مباشرةً وكأنه المارد المختبئ في المصباح السحري، وانشر صورة في إحدى منصات التواصل الاجتماعي لتتعرف على الأشخاص مباشرة أو تخمنهم ونتوقع في السنوات القادمة أن يصبح الأساس فيها ويمتد إلى سائر مجالات الحياة وكل ذلك لم يأت من فراغ بل مبني على مجالات وأسس متينة سنتعرف عليها تاليًا.
</p>

<h2>
	أهم مجالات الذكاء الاصطناعي
</h2>

<p>
	يتضمن الذكاء الصناعي العديد من المجالات أو الفروع، وكلٌ منها يعالج مواضيع محددة أو يُقدّم مناهج وأساليبًا مختلفة، كما أن معظمها يتضمن جوانبًا علميةً وهندسيةً في نفس الوقت تجتمع كلها ليُبنى عليها علم الذكاء الصناعي، وسنتحدث عن أشهر مجالات الذكاء الاصطناعي بشيئٍ من التفصيل.
</p>

<h3>
	1. تعلم الآلة Machine learning
</h3>

<p>
	في عام 1959 نُشرت ورقة بحثية مثيرة للفضول تتحدث عن استخدام التعلم الآلي في لعبة الداما Checkers في مجلة "IBM للبحوث والتطوير" من تأليف آرثر صموئيل الذي يعمل في شركة IBM. كان الهدف هو التحقق من إمكانية برمجة الحاسب، بحيث يتعلم لعب لعبة الداما بطريقة أفضل مما يمكن أن يلعبه الشخص الذي كتب البرنامج، أي أن الحاسب يلعب معك ويتحسن أداؤه باستمرار بعد كل مرة يلعب ضدك فيها لدرجة يصبح فيها أفضل منك "يتعلم ويتحسن".
</p>

<p>
	لقد قدّم آرثر صموئيل التعلم الآلي في ورقته البحثية تلك باعتباره <strong>مجالًا فرعيًا من علوم الحاسب، يمنحها القدرة على التعلم دون أن تُبرمج صراحةً.</strong>
</p>

<p>
	إن السمة الرئيسية للتعلم الآلي هي مفهوم التعلّم الذاتي (على الرغم من عدم ذكره صراحةً في تعريف آرثر صموئيل). إنّه يشير إلى تطبيق النمذجة الإحصائية لاكتشاف الأنماط وتحسين الأداء بناءً على البيانات والمعلومات التجريبية؛ كل ذلك بدون أوامر برمجية صريحة.
</p>

<p>
	كان ذلك نهجًا ثوريًّا في علوم الحاسب والبرمجة، لأن تطوير البرامج في ذلك الوقت، كان فقط عبارة عن قائمة من الأوامر التي تتبع سير عمل منطقي مُحدد.
</p>

<div class="banner-container ipsBox ipsPadding">
	<div class="inner-banner-container">
		<p class="banner-heading">
			دورة تطوير التطبيقات باستخدام لغة Python
		</p>

		<p class="banner-subtitle">
			احترف تطوير التطبيقات مع أكاديمية حسوب والتحق بسوق العمل فور انتهائك من الدورة
		</p>

		<div>
			<a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://academy.hsoub.com/learn/python-application-development" rel="">اشترك الآن</a>
		</div>
	</div>

	<div class="banner-img">
		<img alt="دورة تطوير التطبيقات باستخدام لغة Python" src="https://academy.hsoub.com/learn/assets/images/courses/python-application-development.png">
	</div>
</div>

<h4>
	أنواع تعلم الآلة في الذكاء الاصطناعي
</h4>

<p>
	ينقسم <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D9%85%D9%81%D8%A7%D9%87%D9%8A%D9%85-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-r1009/" rel="">تعلم الآلة</a> -وهو أحد أهم ركائز ومجالات الذكاء الاصطناعي- إلى أربعة أنواع أساسية بناءً على أسلوب وطريقة التعلم، أولها <strong>التعليم الخاضع للإشراف Supervised learning</strong> وهنا تُعطى الخوارزمية مجموعةً من البيانات بالإضافة إلى الخرج الصحيح لها. الأمر يُشبه أن تُعطي طفلًا في الثالثة من عمره مجموعةً من الصور، ولتكن 10 صور؛ بعضها يُمثّل مربع والأخرى تُمثّل مستطيل وتعرضها عليه وتخبره أن هذه صور مربع وتلك صور مستطيل. هنا الخوارزمية الذكية القادرة على التعلم هي عقل الطفل، ومجموعة البيانات التي يتعلم منها هي الصور العشر. يمكن تصنيف مهام التعليم بإشراف إلى نوعين، هما:
</p>

<ul>
	<li>
		التصنيف Classification
	</li>
	<li>
		التوقع Regression
	</li>
</ul>

<p>
	النوع الثاني هو <strong>التعليم غير الخاضع للإشراف UnSupervised learning</strong>، وهنا تُعطى الخوارزمية مجموعةً من البيانات بدون الخرج الصحيح لها، ويكون على عاتق الخوارزمية اكتشاف الأنماط المخفية في البيانات والفروقات بينها. نفس المثال السابق لكن هنا لن نخبر الطفل (الخوارزمية الذكية) أيّ الصور هي صور مربع وأيّ الصور هي مستطيل، لكنه سيكون قادرًا على معرفة أنهما شيئان مختلفان، فإذا أعطيته صورة مربع جديدة (ليست من ضمن الصور العشر) وطلبت منه أن يُصنفها سيضعها تلقائيًا في جانب المربعات (نمط).
</p>

<p>
	يمكن تصنيف مهام التعليم بدون بإشراف إلى نوعين، هما:
</p>

<ul>
	<li>
		التجميع Clustering.
	</li>
	<li>
		الربط Association.
	</li>
</ul>

<p>
	أما النوع الثالث هو <strong>التعليم شبه الخاضع للإشراف Semi-Supervised Learning</strong> يمزج بين النوع الأول والثاني، ويهدف إلى تحسين أداء التعلم. تظهر الحاجة إليه عندما يكون لديك كمية صغيرة من البيانات الغير مُعلّق عليها التي تريد استخدامها في نموذجك. في هذه الحالة يمكنك استخدام أنظمة التعلم العميق لتسمية تلك البيانات، وبالتالي تحويلها من بيانات غير خاضعة للإشراف إلى بيانات خاضعة للإشراف -وهي عملية تسمى التسمية الزائفة Pseudo-Labeling.
</p>

<p>
	<strong>ملاحظة</strong>: نقول عن مجموعة بيانات أنّها <strong>غير معنونة</strong> أو <strong>غير مُسماة</strong> Unlabeled، عندما لا تتضمن تعليقات توضيحية (تسميات) لكل عينة بيانات فيها. بينما نقول عنها <strong>معنونة</strong> أو <strong>مُسماة</strong> Labeled في الحالة المُعاكسة مثل إذا كان لدينا مجموعة بيانات مكونة من 10 صور، وكل صورة لديها تعليق يوضح ماهيتها (صورة كلب قطة سيارة ..إلخ) نقول عنها "مجموعة بيانات مُسماة"، وإذا لم تتضمن تعليقات توضيحية تُسمى "مجموعة بيانات غير مُسماة".
</p>

<p>
	أما النوع الرابع هو <strong>التعليم المُعزز Reinforcement learning</strong>، هو التعلم من خلال التفاعل مع البيئة. هنا يتعلم الوكيل Agent (الوكيل هو الخوارزمية أو الروبوت أو البرنامج) من من عواقب أفعاله، بدلاً من تعليمه صراحةً. يختار الوكيل أفعاله على أساس تجاربه السابقة (الاستغلال) وأيضًا من خلال الخيارات الجديدة (الاستكشاف)، أي أن التعلم يرتكز على مبدأ التجربة والخطأ. بالعودة للمثال السابق نفسه، نعطي الطفل صورة من مجموعة الصور العشر، ونسأله هل هي صورة مربع أم مستطيل، فإذا كانت إجابته صحيحة نعطيه دولارًا (مكافأة) وإن أخطأ نوبخه (عقاب)، ثم نعطيه الصورة الثانية ونكرر نفس العملية. سيسعى الطفل إلى الحصول على أكبر قدر من الدولارات (تعظيم مكافأته)، وبالتالي سيكون قادرًا على التفريق بين الصور في نهاية المطاف.
</p>

<h3>
	2. الشبكات العصبية الاصطناعية Artificial Neural Networks
</h3>

<p>
	الشبكات العصبية الاصطناعية هي تطبيقات برمجية للبنية العصبية لأدمغتنا؛ إنها تحاول تبسيط وتقليد سلوك الدماغ (فقط تشبيه، ليس إلا).
</p>

<p>
	يتكون الدماغ من خلايا عصبية، وهي خلايا قابلة للاستثارة كهربائيًا ويُمكنها معالجة ونقل المعلومات عبر إشارات كهربائية وكيميائية. بالمقابل تتكون الشبكات العصبية الاصطناعية من خلايا عصبية، حيث:
</p>

<ul>
	<li>
		الخلية العصبية هي الوحدة الحسابية الأساسية في أي شبكة عصبية، أي كما في الدماغ.
	</li>
	<li>
		تأخذ الخلايا العصبية المدخلات (البيانات) وتعالجها وتمررها إلى الخلايا العصبية الأخرى الموجودة في الطبقات الأخرى من الشبكة، حتى تصل المخرجات المعالجة إلى طبقة الخرج النهائية.
	</li>
</ul>

<p>
	تحتوي الشبكة العصبية الاصطناعية البسيطة على ثلاث طبقات فقط - طبقة الإدخال وطبقة الإخراج والطبقة المخفية. الشكل التالي يوضح المقصود:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="117571" href="https://academy.hsoub.com/uploads/monthly_2023_01/1561028703_----.png.069eaf6e9c9d871b3dbf23bed781518a.png" rel=""><img alt="الشبكات العصبية الاصطناعية" class="ipsImage ipsImage_thumbnailed" data-fileid="117571" data-ratio="54.20" data-unique="bpnvr3cyj" style="width: 441px; height: auto;" width="441" src="https://academy.hsoub.com/uploads/monthly_2023_01/1561028703_----.png.069eaf6e9c9d871b3dbf23bed781518a.png"> </a>
</p>

<p>
	شبكة عصبية بثلاث طبقات (طبقة دخل - طبقة داخلية خفية - طبقة خرج)
</p>

<h3>
	3. التعلم العميق Deep Learning
</h3>

<p>
	إذا أردنا اختصار التعلم العميق بجملة واحدة، فستكون "التعلم العميق هو شبكة عصبية اصطناعية تمتلك عددًا كبيرًا من الطبقات الداخلية الخفية". إنّه أسلوب جديد لتعلم التمثيلات من البيانات (تعلم الميزة Feature Learning أو تعلم التمثيل Feature Representation)، يرتكز على تعلم "طبقات" متتالية تمثيلات ذات مغزى بطريقة متزايدة.
</p>

<p>
	كلمة "عميق" في "التعلم العميق" لا تشير إلى أي نوع من الفهم "الأعمق" الذي يُحقق من خلال النهج، بل إنّه يُمثّل ببساطة فكرة الطبقات المتتالية للتمثيلات. قد تكون الأسماء الأخرى المناسبة لهذا الحقل هي "تعلم التمثيلات الطبقية" أو "تعلم التمثيلات الهرمية"، حيث تتعلم الشبكة تمثيلات أعقد مع ازدياد عمق الطبقة.
</p>

<p>
	غالبًا ما يتضمن التعلم العميق عشرات أو حتى مئات من طبقات التمثيل المتتالية، إلا أن بعض المناهج الأخرى للتعلم الآلي تميل إلى التركيز على استخدام طبقة تعلم واحدة أو طبقتين فقط (يُسمى ذلك أحيانًا "التعلم الضحل Shallow Learning").
</p>

<p>
	تعلّم هذه التمثيلات الطبقية يكون من خلال نماذج تسمى "الشبكات العصبية" (التي تعرفنا عليها منذ قليل)، حيث تكون منظمة في طبقات مكدسة واحدة تلو الأخرى.
</p>

<p>
	<strong>ملاحظة</strong> يُقصد <strong>بتعلّم التمثيل Representation learning أو تعلّم الميزة Feature learning</strong>، مجموعة من التقنيات التي تسمح للنظام بمعرفة التمثيلات اللازمة لاكتشاف الميزات أو تصنيفها من البيانات الخام تلقائيًا.
</p>

<p>
	سنلقي الآن نظرةً على كيفية قيام شبكة عميقة مكونة من 3 طبقات خفية بتحويل صورة رقم مكتوب بخط اليد (الرقم 4) عبر هذه الطبقات، من أجل التعرف عليه، حيث تظهر لنا في أقصى اليسار الصورة الأصلية التي تمثل الدخل، تليها 3 طبقات مع التمثيلات المقابلة لكل منها. تنتهي الشبكة بطبقة خرج تشير إلى الرقم:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="jpg" data-fileid="117569" href="https://academy.hsoub.com/uploads/monthly_2023_01/1058628137_-.jpg.a2a495241803950f814efb858e320f33.jpg" rel=""><img alt="التعلم العميق والذكاء الاصطناعي" class="ipsImage ipsImage_thumbnailed" data-fileid="117569" data-ratio="54.03" data-unique="z6hruws4h" style="width: 857px; height: auto;" width="857" src="https://academy.hsoub.com/uploads/monthly_2023_01/439676479_-.thumb.jpg.21bb93f9179a54a0fedf17d194116395.jpg"> </a>
</p>

<p>
	يمكنك أن تلاحظ أن الشبكة تحوّل الصورة الرقمية إلى تمثيلات تختلف عن بعضها في كل طبقة، كما أن كل تمثيل أعقد من سابقه (من الأبسط "الصورة الأصلية" إلى الأعقد "تمثيل الصورة في آخر طبقة مخفية").
</p>

<p>
	يمكنك التفكير في الشبكة العميقة على أنها عملية متعددة المراحل لتقطير المعلومات، حيث تمر المعلومات من خلال مرشحات Filters متتالية وتكون أكثر "نقاء" بطريقة متزايدة من أول طبقة إلى آخر طبقة مخفية (أي يتغير تمثيل الصورة إلى شكل يمكن أن تفهمه الخوارزمية أكثر عبر الطبقات).
</p>

<h4>
	إنجازات التعلم العميق
</h4>

<p>
	على الرغم من أن التعلم العميق هو حقل فرعي قديم إلى حد ما من التعلم الآلي، إلا أنه لم يبرز إلا في أوائل عام 2010. في السنوات القليلة التي تلت ذلك حقق التعلم العميق ثورةً في هذا المجال، حيث حقق نتائج ملحوظة في جميع المشكلات الإدراكية، مثل "الرؤية" و "السمع"؛ المشكلات التي تبدو سهلة جدًا بالنسبة للإنسان، لكنها كانت بعيدة المنال بالنسبة للآلات سابقًا. لنكون أكثر دقة، حقق التعلم العميق الإنجازات التالية، التي كانت صعبة تاريخياً في التعلم الآلي):
</p>

<ul>
	<li>
		التعرّف على الكلام بمستوى قريب من البشر.
	</li>
	<li>
		نسخ الكلام المكتوب بخط اليد Handwriting transcription بمستوى قريب من البشر.
	</li>
	<li>
		تصنيف الصور بمستوى قريب من البشر.
	</li>
	<li>
		القيادة الذاتية بمستوى قريب من البشر.
	</li>
	<li>
		تحسين الترجمة الآلية.
	</li>
	<li>
		الإجابة عن الأسئلة.
	</li>
	<li>
		تحسين نتائج البحث في محركات البحث.
	</li>
	<li>
		تحسين استهداف الإعلانات.
	</li>
	<li>
		المساعدين الرقميين مثل Google Now أو Amazon Alexa.
	</li>
</ul>

<h4>
	ما الفرق بين الشبكات العصبية الاصطناعية والتعلم العميق؟
</h4>

<p>
	التعلم العميق هو توسيع للشبكات العصبية، فبدلًا من استخدام طبقة مخفية واحدة أصبح هناك عدد كبير أو كبير جدًا من الطبقات المخفية. إن التطور الكبير في العتاديات الحوسبيّة ساهم في ظهور التعلم العميق، لأنّه يتطلب قدرات حوسبية كبيرة.
</p>

<h4>
	ما الفرق بين تعلم الآلة والتعلم العميق؟
</h4>

<p>
	تعلم الآلة هو فرع من الذكاء الصناعي، أما التعلم العميق فهو فرع من تعلم الآلة قدّم نهجًا مختلفًا وثوريًّا لمعالجة المشكلات.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="117570" href="https://academy.hsoub.com/uploads/monthly_2023_01/670974920_--.png.f42f3111f1b41cac43a13db02cf715de.png" rel=""><img alt="مجالات الذكاء الاصطناعي" class="ipsImage ipsImage_thumbnailed" data-fileid="117570" data-ratio="52.33" data-unique="8w9xy9xci" style="width: 579px; height: auto;" width="579" src="https://academy.hsoub.com/uploads/monthly_2023_01/670974920_--.png.f42f3111f1b41cac43a13db02cf715de.png"> </a>
</p>

<p>
	لاحظ أن التعلم العميق Deep Learning هو الدائرة الصغيرة التي يشملها تعلم الآلة Machine Learning والتي بدورها تشكل جزءًا من الدائرة الأكبر المتمثلة في الذكاء الصناعي Artificial Intelligence.
</p>

<h3>
	4. أتمتة العمليات الآلية Robotic Process Automation
</h3>

<p>
	تمتلك الشركات الناجحة اليوم عددًا أقل من الموظفين مقارنة بما كان عليه الحال في الماضي. مثلًا شركة كوداك Kodak في ذروتها في عام 1973 وظفت 120.000، ولكن عندما اشترى فيسبوك Facebook انستغرام Instagram في عام 2012، كان موقع مشاركة الصور (انستغرام) لديه 13 عامل فقط؛ يعود الفضل في ذلك إلى مبادئ الأتمتة.
</p>

<p>
	<strong>ما المقصود بأتمتة العمليات الآلية RPA؟</strong>
</p>

<p>
	لا تعني كلمة آلية أو روبوتية هنا الآلات والروبوتات الفيزيائية وإنما الروبوتات التي تُمثل برامج تحاكي عمل الإنسان (برامج نشبهها بالروبوتات لأنها تقوم بأعمال الإنسان). عندما نقول RPA، فنحن نشير إلى البوتات bots أو الروبوتات التي تعمل كبرمجيات آلية أو يمكن القول أنّها تقنية تحاكي الطريقة التي يتفاعل بها البشر مع البرامج لأداء مهام كبيرة الحجم وقابلة للتكرار (مثلًا نسخ ولصق الملفات من مكان لآخر أو تسجيل بعض المعلومات على الحاسب أو حذف الرسائل بعد مرور شهر ..إلخ). تتضمن بعض الأمثلة ما يلي:
</p>

<ul>
	<li>
		إرسال الفواتير.
	</li>
	<li>
		إدخال وتغيير وتتبع الموارد البشرية HR.
	</li>
	<li>
		مطابقة السجلات المالية.
	</li>
	<li>
		المستندات والعقود ومعلومات الموظف.
	</li>
	<li>
		تقديم ردود نموذجية للعملاء.
	</li>
	<li>
		نقل البيانات من نظام إلى آخر.
	</li>
	<li>
		الكشف عن المشكلات المتعلقة بخدمة العملاء واتخاذ الإجراءات لحل المشاكل.
	</li>
</ul>

<h3>
	5. الروبوتات Robots
</h3>

<p>
	تعود أصول كلمة "جسم آلي" أو جسمال اختصارًا إلى عام 1921 في مسرحية كتبها كاريل كابيك بعنوان "Rossum’s Universal Robots"، وتأتي كلمة روبوت من الكلمة التشيكية robata التي تشير إلى العمل القسري. هناك خلاف حول تعريف الروبوتات، لكن يمكن القول أنها الآلة التي يمكنها إنجاز المهام الموكلة إليها من خلال تنفيذ سلسلة معقدة من الإجراءات تلقائيًا. يمكن توجيه الروبوت بواسطة جهاز تحكم خارجي، أو قد يكون عنصر التحكم مضمنًا فيه.
</p>

<p>
	هل تعرف فيليبي؟ إنّه روبوت يعمل بالذكاء الصناعي يمكنه طهي البرجر. إن كنت قد ذهبت إلى أحد فروع مطعم CaliBurger، فربما ستتمكن من مشاهدته وهو يطهو (لديهم فرع في الإمارات).
</p>

<p>
	يقول الرئيس التنفيذي والمؤسس المشارك لشركة Miso Robotics التي بنت النظام: "فيليبي يساعد على تحسين جودة الطعام بسبب الاتساق (يخلو من التناقضات) ويقلل من تكاليف الإنتاج، لقد بنينا الروبوت ليكون في حالة امتثال صارم للمعايير التنظيمية."
</p>

<p>
	<strong>ما هو الروبوت؟</strong> هناك العديد من الاختلافات في التعاريف، لأن الروبوتات تتضمن عددًا لا يُحصى من الأشكال والوظائف، لكن يمكننا تلخيصها في بضعة أجزاء رئيسية هي:
</p>

<ul>
	<li>
		<p>
			<strong>المادي Physical:</strong> يمكن أن يتراوح حجم الروبوت من الآلات الصغيرة التي يمكنها استكشاف أجسادنا إلى الأنظمة الصناعية الضخمة إلى الآلات الطائرة إلى السفن تحت الماء. يجب أيضًا أن يكون هناك نوع من مصادر الطاقة لها، مثل البطارية أو الكهرباء أو الطاقة الشمسية.
		</p>
	</li>
	<li>
		<p>
			<strong>الإجرائي Act:</strong> يجب أن يكون الروبوت قادرًا على اتخاذ إجراءات معينة. يمكن أن يشمل ذلك تحريك عنصر أو حتى التحدث.
		</p>
	</li>
	<li>
		<p>
			<strong>الحسي Sense:</strong> يجب أن يفهم الروبوت بيئته من أجل أن يتخذ إجراءًا ما. يمكن تحقيق ذلك من خلال أجهزة الاستشعار وأنظمة التغذية الراجعة.
		</p>
	</li>
	<li>
		<p>
			<strong>الذكاء Intelligence:</strong> هذا لا يعني أن يمتلك كل قدرات الذكاء الصناعي الممكنة؛ يجب أن يكون الروبوت قابلًا للبرمجة ليكون قادرًا على اتخاذ الإجراءات - من خلال البرمجة يمكننا إضافة الطابع الذكي للآلة.
		</p>
	</li>
</ul>

<h4>
	مستقبل الروبوتات
</h4>

<p>
	على الرغم من أن الروبوتات هي أذكى التقنيات، إلا أنها من الممكن أن تُخطئ، كما أن سوقها مُعقّد جدًا وتطورها يبدو متقطعًا ومتقلبًا.
</p>

<p>
	يقول شلونتز من شركة كوبالت في هذا الصدد:
</p>

<blockquote class="ipsQuote" data-gramm="false" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		"لقد أحرزت الصناعة تقدمًا في العقد الماضي، لكن الروبوتات لم تدرك بعد إمكاناتها الكاملة. ستخلق أي تقنية جديدة موجة من العديد من الشركات الجديدة، لكن القليل منها فقط هو الذي سيبقى على قيد الحياة ويتحول إلى أعمال دائمة. وقد قتل انهيار فقاعة الدوت كوم Dot-Com غالبية شركات الإنترنت، لكن نجت كل من جوجل وأمازون Amazon ونتفلكس Netflix. ما تحتاجه شركات الروبوتات هو أن تكون صريحة بشأن ما يمكن أن تفعله روبوتاتها للعملاء، والتغلب على الصور النمطية في هوليوود للروبوتات باعتبارها أشياء خطرة وشريرة، وإظهار عائد استثمار واضح للعملاء."
	</p>
</blockquote>

<h3>
	6. المنطق الترجيحي أو الضبابي Fuzzy Logic
</h3>

<p>
	جاءت نظرية المنطق الضبابي -التي هي ركيزة من ركائز مجالات الذكاء الاصطناعي- لتسد الثغرات الكبيرة في المنطق الكلاسيكي المعروف بالمنطق الثنائي (صحيح أو خاطئ، 0 أو 1)، الذي يعتمد على الأساليب الكمية لتحليل الأنظمة واتخاذ القرارات. إذا كانت الدقة مطلوبة عند التعامل مع الأنظمة والقرارات البسيطة، فإن تحقيق الدقة غير ممكن في المنطق الكلاسيكي، وأحيانًا غير مطلوب عند التعامل مع المسائل المعقدة، فكلما زاد تعقيد المسألة، فقدت العبارات الدقيقة فائدتها وفقدت العبارات المُقيدة دقتها.
</p>

<p>
	يعتمد المنطق الضبابي أو الغيمي على الأساليب الإحصائية ويقدم طريقة للتعامل مع القرارات بشكل ضبابي وبدون حدود مباشرة للقرارات.
</p>

<p>
	الفرق بين المنطق الضبابي والمنطق الكلاسيكي هو فرق فلسفي مهم يعتمد على جدلية الأهمية والدقة، فليس كل ما هو دقيق واضح مهم، ليس كل مهم دقيق، فأحيانًا الدقة متعبة قاتلة والغموض رحمة.
</p>

<h4>
	ما هو المنطق الضبابي؟
</h4>

<p>
	بفرض أننا نريد تصنيف الأشخاص إلى مجموعات حسب الطول. لدينا مجموعة للأشخاص طوال القامة (أي الشخص الذي يعتبر طويل) ومجموعة للأشخاص قصار القامة (الشخص الذي نعتبره قصير)، نلاحظ أن جملة "يعتبر طويل" وجملة "يعتبر قصير" هي جمل نسبية، إذ أن مفهوم الشخص الطويل والقصير يختلف من مكان لآخر ومن منطقة لأخرى - في هذا المثال سنعتبر أن الشخص الطويل هو الشخص الذي طوله يساوي أو يتجاوز 170 سم، عندها أي شخص وليكن x نقول أنه ينتمي لمجموعة الأشخاص الطوال إذا حقق شرط أن يكون طول x أكبر من 170 سم، لكن بفرض لدينا شخص طوله 169 فهل من الصحيح اعتباره شخص غير طويل لأنه لم يحقق خاصية مجموعة الأشخاص الطوال! فمن خلال النظر لا نستطيع تمييز شخص طوله 170 من شخص طوله 169، فكيف سنتعامل مع هذه الحالات الحرجة؟
</p>

<p>
	حسب المنطق الكلاسيكي ومجموعاته الكلاسيكية، فإن هذا الشخص (169 سم) لن ينتمي لمجموعة طوال القامة، بالتالي نحن بحاجة لتعريف آخر للمجموعات من أجل القدرة على جعل هذه الحالات ممكنة، وباختصار شديد يمكن القول إننا بحاجة إلى حد فاصل بين انتماء وعدم انتماء أكثر مرونة ونسبية. هنا يأتي دور المنطق الضبابي والمجموعات الضبابية، فمن خلاله يمكننا إضافة عدد كبير من المجموعات (مثلًا: طويل جدًا، طويل، متوسط، قصير، قصير جدًا …إلخ)، حيث تُضاف هذه المجموعات وفقًا لتحليلات واستبيانات وإحصاءات دقيقة، وبالتالي نحصل على إجابات أكثر دقة ومرونة.
</p>

<h3>
	7. الأنظمة الخبيرة Expert systems
</h3>

<p>
	المعلومات هي ناتج تحليل البيانات التي تعتبر المادة الخام، فالمعلومات تبدأ من حيث تنتهي البيانات، ومنه ظهرت المعلومات متخذة من<a href="https://academy.hsoub.com/devops/servers/databases/%D9%82%D9%88%D8%A7%D8%B9%D8%AF-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-database/" rel=""> قواعد البيانات</a> أساسًا لها، فنظم قواعد البيانات تتضمن العلاقات التي تربط بين البيانات للحصول على المعلومات. أما المعارف فهي استنتاجية أكثر منها حسابية أو بيانية، ومنه تبدأ المعارف من حيث تنتهي المعلومات، ومنه ظهرت قواعد المعرفة Knowledge Base والنظم الخبيرة، وهو البديل الأرقى لنظم المعلومات.
</p>

<h4>
	ما هو النظام الخبير؟
</h4>

<p>
	هو نظام ذكي يستخدم القواعد المأخوذة من الخبرة الإنسانية (والمنظمة ضمن قواعد بيانات) على هيئة شروط ونتائج في مجال معين ويستخدم طرق الاشتقاق والاستدلال لاستخراج واستنتاج النتائج المعللة بالأسباب والناتجة عن تطابق هذه الشروط أو النتائج مع شرط أو نتيجة ما والخاصة بمشكلة معينة يراد إيجاد حل لها.
</p>

<p>
	هذه الأنظمة لديها قدرات مميزة في مجالات معينة مثل التخطيط وتحليل العوارض وتشخيص الأخطاء وتشخيص الأمراض وفي التصميم وفي نظم دعم اتخاذ القرار وغيرها من المجالات المتخصصة التي تم فهم العمليات المطلوبة لها، والتي تتناسب مع القدرات التمثيلية والاستنتاجية لهياكل الأنظمة المستخدمة.
</p>

<h4>
	استخدامات النظم الخبيرة
</h4>

<p>
	يمكن استخدام النظم الخبيرة في العديد من المجالات والمهام، إليك بعضها:
</p>

<ul>
	<li>
		<strong>التفسير:</strong> تستخدم النظم الخبيرة بكثرة في تفسير المواقف من واقع المعلومات المتاحة منها. أشهر الأمثلة هو النظام الخبير PUFF الذي يُستخدم في تشخيص أمراض الرئة.
	</li>
	<li>
		<strong>التنبؤ:</strong> يُستخدم النظام الخبير METEOR للتنبؤ بالعواصف على المدى القصير.
	</li>
	<li>
		<strong>التشخيص:</strong> يُستخدم النظام DIET لمساعدة أطباء التغذية في عملية وصف الحمية الغذائية. كما يُستخدم النظام MYCIN لتشخيص أمراض الدم و وصف العلاج أيضًا.
	</li>
	<li>
		<strong>إزالة الأعطال:</strong> يُحدد النظام ACE مواقع الأعطال في الشبكات الهاتفية ويقترح الصيانة المناسبة.
	</li>
	<li>
		<strong>التخطيط:</strong> النظام الخبير KNOBS يساعد مراكز القيادات الجوية التكتيكية على التخطيط للمهام من خلال معرفة الأهداف والإمكانيات المتاحة والمهام المخططة.
	</li>
</ul>

<p>
	تُستخدم النظم الخبيرة أيضًا في المراقبة والتصميم والتدريب والتعليم والتحكم.
</p>

<h3>
	8. معالجة اللغات الطبيعية Natural Language Processing
</h3>

<p>
	بعض المراجع تعتبر معالجة اللغات الطبيعية مجرد مجال من مجالات الذكاء الاصطناعي لكن لنكون دقيقين؛ معالجة اللغات الطبيعية -اختصارًا NLP- هي مجال تتقاطع فيه علوم الحاسب والذكاء الصناعي واللسانيات (اللغويات أو علم اللغة). إنّها المجال الذي يهتم ببناء وتطوير الأنظمة التي يمكنها معالجة وفهم وتوليد لغة الإنسان.
</p>

<p>
	منذ نشأتها في الخمسينيات وحتى وقت قريب جدًا، كانت معالجة اللغات مجالًا بحثيًّا أكثر مما هو تطبيقيًّا، إلا أن التطورات الأخيرة التي شهدتها في العقد الماضي، أدت إلى استخدام البرمجة اللغوية العصبية بكثرة في العديد من التطبيقات التجارية والرعاية الصحية والتمويل والقانون والتسويق والموارد البشرية وغيرها الكثير.
</p>

<h4>
	استخدامات معالجة اللغات الطبيعية
</h4>

<p>
	الآن وبعد أن تعرّفنا على معالجة اللغات الطبيعية، دعنا نتحدث عن بعض استخداماتها وتطبيقاتها في المجالات المختلفة:
</p>

<ul>
	<li>
		<p>
			<strong>تصنيف النص Text Classification:</strong> إحدى المزايا الخاصة بخدمات البريد الإلكتروني؛ قدرتها على فصل الرسائل العشوائية Spam عن الرسائل العادية. تمثل هذه العملية واحدة من حالات الاستخدام الشهيرة لمعالجة اللغات والمعروفة باسم "تصنيف النص". من التطبيقات الأخرى التي تستخدم تصنيف النص هي: تصنيف وتنظيم المحتوى، دعم العملاء، التجارة الإلكترونية E-commerce، محركات البحث.
		</p>
	</li>
	<li>
		<p>
			<strong>استخراج المعلومات Information extraction:</strong> هي عملية استخراج معلومات معينة من المستندات. إحدى الأمثلة على استخدامها في تطبيقات العالم الحقيقي هي الدعاية القصيرة التي نراها على اليمين عندما نبحث عن اسم شخصية مشهورة على جوجل. كما أنها تُستخدم أيضًا في روبوتات الدردشة Chatbots واستخراج البيانات من الاستمارات والإيصالات …إلخ.
		</p>
	</li>
	<li>
		<p>
			<strong>الترجمة الآلية Machine Translation:</strong> وفقًا لتعريف جامعة ستانفورد؛ هي مهمة التحويل التلقائي من لغة طبيعية إلى أخرى مع الحفاظ على معنى النص المُدخل وفصاحته، وتستخدم العديد من الشركات مثل جوجل (مُترجم جوجل الشهير) ومايكروسوفت الذكاء الصناعي والتعلم الآلي لتقديم مُترجمات آلية عالية الجودة.
		</p>
	</li>
	<li>
		<p>
			<strong>التجارة الإلكترونية E-commerce:</strong> لعبت التطورات الحديثة في تعلم الآلة و معالجة اللغات دورًا رئيسيًا في النمو السريع الذي شهدته <a href="https://academy.hsoub.com/entrepreneurship/ecommerce/%D9%88%D8%A7%D9%82%D8%B9-%D8%A7%D9%84%D8%AA%D8%AC%D8%A7%D8%B1%D8%A9-%D8%A7%D9%84%D8%A5%D9%84%D9%83%D8%AA%D8%B1%D9%88%D9%86%D9%8A%D8%A9-%D9%81%D9%8A-%D8%A7%D9%84%D8%B9%D8%A7%D9%84%D9%85-%D8%A7%D9%84%D8%B9%D8%B1%D8%A8%D9%8A-%D9%88%D8%A7%D9%84%D8%B9%D9%88%D8%A7%D9%85%D9%84-%D8%A7%D9%84%D9%85%D8%A4%D8%AB%D8%B1%D8%A9-%D9%81%D9%8A%D9%87%D8%A7-r765/" rel="">التجارة الإلكترونية</a>. عند زيارة الصفحة الرئيسية لأي بائع تجزئة إلكتروني، ستجد الكثير من المعلومات على هيئة نصوص وصور تعبر عن المنتجات وأصنافها. يسعى تجار التجزئة إلى استخدام هذه المعلومات بذكاء لإرضاء العملاء وبناء ميزة تنافسية، وهنا يأتي دور معالجة اللغات لحل العديد من المشكلات ذات الصلة مثل تحليل مراجعات الزبائن والبحث عن المنتجات وتوصيات المنتج ..إلخ.
		</p>
	</li>
	<li>
		<p>
			<strong>الرعاية الصحية HealthCare:</strong> تُطبّق معالجة اللغات في جميع الصناعات والقطاعات الرئيسية وتحسّنها، وهذا يشمل مجال الطب والرعاية الصحية. يمكن للباحثين فرز البيانات غير المهيكلة لتحسين رعاية المرضى والجهود البحثية وتشخيص الأمراض …إلخ.
		</p>
	</li>
</ul>

<p>
	تُطبق معالجة اللغات أيضًا في العديد من المجالات كالموراد المالية والقانون ومواقع التواصل الإجتماعي.
</p>

<p>
	انظر مثلًا مقال <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AA%D8%AD%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D9%85%D8%B4%D8%A7%D8%B9%D8%B1-%D9%81%D9%8A-%D8%A7%D9%84%D9%86%D8%B5%D9%88%D8%B5-%D8%A7%D9%84%D8%B9%D8%B1%D8%A8%D9%8A%D8%A9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%B9%D9%85%D9%8A%D9%82-r1476/" rel="">تحليل المشاعر في النصوص العربية باستخدام التعلم العميق</a> الذي يطبق ما تحدثنا عنه على نصوص عربية بمشروع عملي.
</p>

<h4>
	بماذا تختلف معالجة اللغات الطبيعية عن التعلم الآلي والتعلم العميق؟
</h4>

<p>
	على الرغم من التداخل الكبير بين معالجة اللغات والتعلم العميق وتعلم الآلة، إلا أنها مجالات مختلفة تمامًا. في البداية كانت تعتمد مناهج معالجة اللغات على الاحتمالات والإحصاء والقواعد والاستدلال، لكن في العقود القليلة الماضية بدأت تتأثر كثيرًا بمناهج تعلم الآلة، وفي الآونة الأخيرة ومع تطور التعلم العميق، لاحظنا استخدام واسع لمناهجه في بناء تطبيقات معالجة اللغات. إذًا هي مجالات تتقاطع مع بعضها، لكن كل منها مُستقل عن الآخر.
</p>

<p>
	يُمثل كتاب <a href="https://academy.hsoub.com/files/17-%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-%D9%88%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9/" rel="">مدخل إلى الذكاء الاصطناعي وتعلم الآلة</a> نقطة بدءٍ مناسبةٍ للمبتدئين الذين يرغبون الخوض في هذا المجال. يبدأ الكتاب معك من الأساسيات ليمهد الطريق أمامك لتعلم هذا المجال. يمكنك أيضًا الاطلاع على العديد من المقالات المتعلقة بالذكاء الصناعي، والتي توفرها <a href="https://academy.hsoub.com/" rel="">أكاديمية حسوب</a> من <a href="https://academy.hsoub.com/programming/artificial-intelligence/" rel="">هنا</a>.
</p>

<p>
	إذا أردت أيضًا البدء بتعلم خوازرميات الذكاء الاصطناعي وتعلم الآلة وبناء تطبيقات عملية تفيدك في سوق العمل يمكنك الاشتراك في <a href="https://academy.hsoub.com/learn/artificial-intelligence/" rel="">دورة الذكاء الاصطناعي</a> التي توفرها الأكاديمية والتي ستتعلم فيها الكثير من المواضيع الرائدة مثل التعامل مع مختلف النماذج اللغوية الكبيرة LLMs مثل GPT من OpenAI و LLaMA 2 من Meta وكيفية دمجها مع تطبيقاتك كما ستتعلم في هذه الدورة أساسيات <a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%AD%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA/" rel="">تحليل البيانات Data Analysis</a> وتمثيلها مرئيًا، وبرمجة خوارزميات تعلم الآلة Machine Learning والتعلم العميق Deep Learning وغيرها من المواضيع المفيدة بأسلوب عملي وشيق.
</p>

<div class="banner-container ipsBox ipsPadding">
	<div class="inner-banner-container">
		<p class="banner-heading">
			دورة الذكاء الاصطناعي
		</p>

		<p class="banner-subtitle">
			احترف برمجة الذكاء الاصطناعي AI وتحليل البيانات وتعلم كافة المعلومات التي تحتاجها لبناء نماذج ذكاء اصطناعي متخصصة.
		</p>

		<div>
			<a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://academy.hsoub.com/learn/artificial-intelligence" rel="">اشترك الآن</a>
		</div>
	</div>

	<div class="banner-img">
		<a href="https://academy.hsoub.com/learn/artificial-intelligence" rel=""><img alt="دورة الذكاء الاصطناعي AI" src="https://academy.hsoub.com/learn/assets/images/courses/artificial-intelligence.png"></a>
	</div>
</div>

<h2>
	خاتمة
</h2>

<p>
	تعرفنا في مقال اليوم على أهم مجالات الذكاء الاصطناعي ولكن للذكاء الاصطناعي فروع ومجالات عديدة أخرى يزداد عددها باستمرار ولا يمكن حصرها في مقالٍ واحد وهذا العلم مازال في تطور متسارع.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">تعلم الذكاء الاصطناعي</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">تطبيقات الذكاء الاصطناعي</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A3%D9%87%D9%85%D9%8A%D8%A9-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-r2243/" rel="">أهمية الذكاء الاصطناعي</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">1878</guid><pubDate>Mon, 30 Jan 2023 15:00:00 +0000</pubDate></item><item><title>&#x627;&#x644;&#x630;&#x643;&#x627;&#x621; &#x627;&#x644;&#x627;&#x635;&#x637;&#x646;&#x627;&#x639;&#x64A;: &#x62F;&#x644;&#x64A;&#x644;&#x643; &#x627;&#x644;&#x634;&#x627;&#x645;&#x644;</title><link>https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_02/1125443548_-.png.f79e58c70dce52b817bd25a892b21d08.png" /></p>
<blockquote class="ipsQuote" data-gramm="false" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		"سيكون الإصدار النهائي من جوجل Google هو الذكاء الاصطناعي، محرك بحث يمكنه فهم كل شيء على الويب. على الرغم من أننا لسنا قريبين من إنجاز ذلك، إلا أننا نتقدم تدريجيًّا لتحقيقه. هذا ما نعمل عليه."
	</p>

	<p>
		-- لاري بايج، أحد مؤسسي شركة جوجل
	</p>
</blockquote>

<p>
	نحن نسمي أنفسنا "إنسان عاقل أو حكيم"، لأن ذكائنا أمر مهم جدًا بالنسبة لنا. لقد حاولنا منذ آلاف السنين أن نفهم كيف نفكر، أي كيف يمكن للعقل البشري أن يدرك ويُحلل ويفهم ويتنبأ ويتلاعب بعالم كبير ومعقد. يذهب الذكاء الصناعي إلى ماهو أبعد من ذلك؛ يحاول فهم الكيانات الذكية إلى جانب بناء كيانات ذكية أيضًا.
</p>

<p>
	الذكاء الاصطناعي هو أحد أحدث المجالات في العلوم والهندسة، وقد بدأ العمل به بجدية بعد الحرب العالمية الثانية بفترة وجيزة، لكنه لم يُبصر النور إلا مع بداية القرن الحادي والعشرين، حيث بدأ الإنترنت والبيانات بالانتشار إلى جانب تطور أجهزة الحواسيب.
</p>

<p>
	يتميز الذكاء الصناعي بأنه علم كبير وتعددي؛ يشارك فيه علماء الحاسوب والرياضيات والهندسة واللغة والفلسفة والمنطق. الذكاء الاصطناعي وثيق الصلة بأي مهمة فكرية؛ إنه مجال عالمي.
</p>

<h2>
	ماهو الذكاء الاصطناعي
</h2>

<p>
	لنتفق بدايةً أنّه لا فرق في قول "الذكاء الاصطناعي" أو "الذكاء الصناعي" بالعربية، فكلاهما يُشيران إلى شيء من صنع البشر وليس الطبيعة.
</p>

<p>
	مفهوم الذكاء الصناعي Artificial Intelligence -اختصارًا AI- هو مجال جديد ظهر تقريبًا عام 1950 على يد آلان تورينج (يُسميه البعض الأب الروحي للذكاء الصناعي) المقصود به باختصار هو جعل الآلة تفكر وتعمل مثل الإنسان.
</p>

<p>
	في البداية لاقى هذا المجال الكثير من الصعوبات لأن العلماء كانوا يحاولون محاكاة الذكاء والتفكير البشري، محاولين جعل الآلة تفكر وتعمل مثل الإنسان. بسبب هذا التفكير فشل العلماء في الوصول إلى تقدم حقيقي في هذا المجال، لأنه رغم كل التقدم الذي وصلت إليه العلوم لم يستطع العلماء تحديد الطريقة التي يفكر بها الإنسان.
</p>

<p>
	وصل العلماء لاحقًا إلى قناعة تفيد بأننا كبشر لا يهمنا كيف تعمل الآلة (أي لن نُقيد الآلة بطريقة التفكير البشري)؛ المهم أن نحصل على نفس النتيجة التي نحصل عليها من خلال الإنسان، فالإنسان يرى الصورة على أنها انعكاسات للضوء، والآلة ترى الصورة على أنها مصفوفة من البيكسلات والأصفار والواحدات.
</p>

<p>
	آنذاك بدأ الذكاء الصناعي بالتطور ودخل جميع مجالات حياتنا العملية سواءًا المجال العسكري والطبي والصناعي والتجاري وحتى التعليمي والترفيهي، فكانت دقة الأداء عالية جدًا، وفي بعض المجالات كانت نسبة الخطأ شبه معدومة، أي أن الآلة بدأت تحاكي التفكير البشري، حتى أنها أصبحت أفضل منه في كثير من المجالات، فالعلوم حاليًا هي علوم الذكاء الصناعي. إن كان الإنترنت هو ثورة السنوات الماضية، فالذكاء الصناعي هو ثورة الحاضر والمستقبل.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="jpg" data-fileid="117537" href="https://academy.hsoub.com/uploads/monthly_2023_01/339761455_---.jpg.1a58e33bfa95d6b51619ae7302077cbf.jpg" rel=""><img alt="آلة تمثل الذكاء الاصطناعي" class="ipsImage ipsImage_thumbnailed" data-fileid="117537" data-ratio="71.26" data-unique="ldpwv98hn" style="width: 842px; height: auto;" width="842" src="https://academy.hsoub.com/uploads/monthly_2023_01/891374731_---.thumb.jpg.91529d63c81d9917deff06abacbe9e2c.jpg"> </a>
</p>

<h3>
	تعريف الذكاء الاصطناعي
</h3>

<p>
	الذكاء الصناعي هو مصطلح صاغه البروفيسور الفخري في جامعة ستانفورد جون مكارثي في عام 1955 لأول مرة ضمن ورشة عمل صيفية تسمى مشروع دارتموث الصيفي للبحوث حول الذكاء الاصطناعي على أنه:
</p>

<blockquote class="ipsQuote" data-gramm="false" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		"علم وهندسة صناعة الآلات الذكية"
	</p>
</blockquote>

<p>
	بالرغم من أن هناك اختلافات حول التعريف، إلا أن الجامعة الأشهر في الذكاء الصناعي "ستانفورد" تعتمده. من التعاريف الأخرى هو التعريف الذي صاغه أندرياس كابلان ومايكل هاينلين، وينص على أن الذكاء الصناعي هو:
</p>

<blockquote class="ipsQuote" data-gramm="false" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		"قدرة النظام على تفسير البيانات الخارجية بطريقة صحيحة والتعلم من هذه البيانات واستخدام تلك المعرفة لتحقيق أهداف ومهام محددة من خلال التكيف المرن"
	</p>
</blockquote>

<p>
	تُركز تعريفات الذكاء الاصطناعي الحديثة على أنّه مجال فرعي لعلوم الحاسب وكيف يمكن للآلات تقليد الذكاء البشري. يُقدم قاموس أكسفورد هذا التعريف:
</p>

<blockquote class="ipsQuote" data-gramm="false" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		"نظرية وتطوير أنظمة الحاسب القادرة على أداء المهام التي تتطلب عادةً ذكاءً بشريًا، مثل الإدراك البصري والتعرف على الكلام واتخاذ القرار والترجمة بين اللغات"
	</p>
</blockquote>

<h3>
	ما هو ذكاء الآلة ومتى نقول عن الآلة أنها ذكية؟
</h3>

<p>
	يُجيب عن هذا السؤال <a href="https://en.wikipedia.org/wiki/Turing_test" rel="external nofollow">اختبار تورينج</a> (نسبةً لآلان تورينج). إنها أشبه بلعبة بين ثلاث أطراف؛ اثنان من البشر (الأول لاعب والثاني حكم أو مراقب) والآلة المُراد اختبارها إن كانت ذكية (اللاعب الثاني). اللاعبين الثلاثة معزولين عن بعضهم البعض، ويكون التراسل بين الأطراف كتابيًا. يبدأ المراقب بطرح أسئلة على اللاعبين (الحاسب والشخص الآخر). ينجح الحاسوب في الاختبار (يكون ذكي) إذا لم يستطع المراقب التفريق بينه وبين الإنسان.
</p>

<p>
	عبقرية هذا المفهوم هي أنه ليست هناك حاجة لمعرفة ما إذا كانت الآلة تعرف شيئًا ما بالفعل أو أنها تُدرك ذاتها أو حتى إذا كانت إجاباتها صحيحة، وإنما يشير إلى قدرة تلك الآلة على معالجة كميات كبيرة من المعلومات وتفسير اللغة البشرية.
</p>

<h3>
	الذكاء الاصطناعي وتعلم الآلة
</h3>

<p>
	على الرغم من الخلط بين المصطلحين في بعض السياقات، إلا أن تعلم الآلة فرع من فروع الذكاء الصناعي العديدة. يشير الذكاء الصناعي إلى أي أسلوب يُعطي الآلة القدرة على محاكاة الذكاء البشري، بينما يشير التعلم الآلي إلى مجموعة التقنيات والخوارزميات التي تسمح للآلات بالتعلم من البيانات دون أن تُبرمج عليها صراحةً.
</p>

<h2>
	ما أهمية الذكاء الاصطناعي؟
</h2>

<p>
	يُنظر إلى تقنيات الذكاء الصناعي على أنها أدوات وتقنيات تهدف لخدمة البشرية وتسهيل حياة الأفراد، فهي تهدف إلى جعل حياتنا أسهل، كما يمكن تطبيقه في جميع المجالات تقريبًا للحصول على كفاءة أعلى.
</p>

<p>
	فيُقدم الذكاء الصناعي العديد من الميزات والحلول التي تعود بالفائدة لأي مؤسسة حديثة تقريبًا، يتضمن ذلك:
</p>

<ul>
	<li>
		<p>
			<strong>أتمتة العمليات</strong>: الذكاء الاصطناعي قادر على أتمتة المهام التي نُنجزها يدويًّا وبدقة وسرعة دون الشعور بأي إرهاق أو الاضطرار إلى أخذ فترات راحة مثلما يحتاج الموظف البشري (مثلًا مراقبة السيارات والإبلاغ عن المخالفات).
		</p>
	</li>
	<li>
		<p>
			<strong>تحليل البيانات الضخمة</strong>: كمية البيانات الموجودة حاليًّا على الإنترنت تفوق بكثير قدرة البشر على استيعابها وتفسيرها واتخاذ قرارات معقدة بناءً عليها. يمكن لخوارزميات الذكاء الصناعي معالجة تلك البيانات وتحليلها وفهمها، وبالتالي تمنح المؤسسات رؤى حول عملياتها ربما لم تكن على دراية بها من قبل.
		</p>
	</li>
	<li>
		<p>
			<strong>اتخاذ القرارات</strong>: يمكن لخوارزميات الذكاء الاصطناعي اتخاذ قرارات أكثر دقة من البشر في بعض الأحيان نظرًا لقدرتها على تحليل العلاقات المعقدة والمتعددة والاستفادة من البيانات الضخمة المنتشرة على الإنترنت.
		</p>
	</li>
</ul>

<h2>
	مجالات الذكاء الاصطناعي
</h2>

<p>
	يعد الذكاء الاصطناعي مجالًا واسعًا للدراسة يتضمن العديد من النظريات والأساليب والتقنيات المختلفة، ومن أبرز <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D9%85%D8%AC%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">مجالات الذكاء الاصطناعي</a> مايلي:
</p>

<ol>
	<li>
		<p>
			<strong>تعلم الآلة Machine learning:</strong> عرّف آرثر صموئيل تعلم الآلة بأنّه المجال الذي يعطي الحاسوب القدرة على التعلم من المشاكل التي يصادفها دون تعليمات واضحة تُعطى له، أي القدرة على معالجة مشاكل جديدة.
		</p>
	</li>
	<li>
		<p>
			<strong>الشبكات العصبية الاصطناعية Artificial Neural Networks:</strong> عبارة عن مجموعة من الخوارزميات المُصممة بطريقة مُستوحاة من الخلايا العصبية في الدماغ البشري، وهي مصممة للتعرف على الأنماط.
		</p>
	</li>
	<li>
		<p>
			<strong>التعلم العميق Deep Learning:</strong> يستخدم شبكات عصبية ضخمة مع العديد من طبقات وحدات المعالجة، حيث يستفيد من التطورات الحوسبية الكبيرة (المعالجات القوية مثلًا) وتقنيات التدريب المحسنة لتعلم الأنماط المعقدة بكميات كبيرة من البيانات.
		</p>
	</li>
	<li>
		<p>
			<strong>أتمتة العمليات الآلية Robotic Process Automation:</strong> يمكن أن يكون مصطلح أتمتة العمليات الآلية مربكًا بعض الشيء؛ لا تعني كلمة آلية أو روبوتية هنا الروبوتات المادية، وإنما الروبوتات التي تُمثل برامج (برامج آلية) تُنفِّذ بعض العمليات التقليدية المكررة، مثل وإدارة المعاملات وإرسال الفواتير وتقديم ردود نموذجية للعملاء (روبوتات الدردشة، لابد وأنك تعرفها).
		</p>
	</li>
	<li>
		<p>
			<strong>الروبوتات Robots:</strong> هو آلة يمكنها إنجاز المهام الموكلة إليها من خلال تنفيذ سلسلة معقدة من الإجراءات تلقائيًا. يمكن توجيه الروبوت بواسطة جهاز تحكم خارجي، أو قد يكون عنصر التحكم مضمنًا فيه.
		</p>
	</li>
	<li>
		<p>
			<strong>الأنظمة الخبيرة Expert systems:</strong> النظام الخبير هو محاولة جمع الخبرة البشرية المتعلقة بمجال محدد ضمن الحاسب لكي يحل محل الخبير، أو يمكننا القول أنّه برنامج مصمم لينفد مهاماً متعلقة بالخبرة البشرية، وهذا يتضمن التحليل والتشخيص واتخاذ القرارات والتنفيذ أيضًا.
		</p>
	</li>
	<li>
		<p>
			<strong>المنطق الترجيحي أو الضبابي Fuzzy Logic:</strong> المنطق الضبابي هو نهج للحوسبة يعتمد على "درجات الحقيقة degrees of truth" بدلاً من المنطق الثنائي "صح أو خطأ" المعتاد (1 أو 0) الذي يعتمد عليه الحاسب ويحاول حل المشكلات باستخدام طيف مفتوح وغير دقيق من البيانات والاستدلالات التي تجعل من الممكن الحصول على مجموعة من الاستنتاجات الدقيقة.
		</p>
	</li>
</ol>

<p>
	لمزيد من التفاصيل المتعلقة بفروع أو مجالات الذكاء الصناعي، يمكنك قراءة مقالة <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D9%85%D8%AC%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">مجالات الذكاء الاصطناعي</a>.
</p>

<p>
	تعمل العديد من التقنيات على تمكين ودعم تطبيق الذكاء الاصطناعي منها:
</p>

<ul>
	<li>
		<p>
			<strong>الرؤية الحاسوبية Computer vision</strong> تعتمد على خوارزميات التعلم العميق للتعرف على ما هو موجود في الصورة (أو الفيديو) وتحليلها وفهمها وتفسير مكوناتها.
		</p>
	</li>
	<li>
		<p>
			<strong>معالجة اللغة الطبيعية Natural language processing</strong> هي قدرة أجهزة الحاسب على تحليل وفهم وتوليد اللغة البشرية، بما في ذلك الكلام. تطور خوارزميات الذكاء الصناعي نقل هذا المجال من الظلام إلى النور.
		</p>
	</li>
	<li>
		<p>
			<strong><a href="https://academy.hsoub.com/programming/general/%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA/" rel="">علم البيانات</a> Data science:</strong> هو دراسة البيانات لاستخراج رؤى ذات مغزى تخدم الأعمال والمؤسسات. إنها مصطلح شامل للتقنيات الإحصائية وتقنيات التصميم وطرق التطوير. يُستخدم الذكاء الاصطناعي فيها بشكل متزايد للتعامل مع البيانات، وإزالة الإنسان من المهمة بأكملها للعمل بمفرده.
		</p>
	</li>
	<li>
		<p>
			<strong>إنترنت الأشياء Internet of things</strong>، هو ربط الأشياء (كرسي طاولة ثلاجة ..إلخ) مع بعضها البعض من خلال الإنترنت، وتمكينها من الاتصال مع بعضها البعض وتبادل المعلومات واتخاذ القرارات؛ أي باختصار "هو جعل الأشياء تتكلم وتتخذ القرارات من أجل خدمتنا".
		</p>
	</li>
	<li>
		<p>
			تعتبر <strong>وحدات المعالجة الرسومية Graphics processing unit</strong> مفتاحًا للذكاء الاصطناعي لأنها توفر القوة الحوسبية الكبيرة المطلوبة للمعالجة. يتطلب تدريب الشبكات العصبية بيانات كبيرة بالإضافة إلى قوة حوسبية.
		</p>
	</li>
	<li>
		<p>
			<strong>واجهات برمجة التطبيقات APIs</strong> عبارة عن حزم من التعليمات البرمجية التي تتيح إمكانية إضافة وظائف الذكاء الصناعي إلى المنتجات الحالية والبرامج.
		</p>
	</li>
</ul>

<h2>
	أنواع الذكاء الاصطناعي
</h2>

<p>
	هناك عدة <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">أنواع للذكاء الصناعي</a> يمكن وضعها ضمن فئتين، الأولى تعتمد على القدرات والثانية تعتمد على الوظيفية. بالنسبة لفئة القدرات، تنقسم إلى:
</p>

<ol>
	<li>
		ذكاء اصطناعي ضعيف أو ذكاء اصطناعي ضيق: هو الذكاء الاصطناعي الذي يتخصص في مجال واحد (يستطيع تنفيذ مهمة واحدة فقط).
	</li>
	<li>
		ذكاء اصطناعي عام: حواسيب بمستوى ذكاء الإنسان في جميع المجالات.
	</li>
	<li>
		ذكاء اصطناعي خارق: هو ذكاء اصطناعي يفوق ذكاء وقدرة الإنسان.
	</li>
</ol>

<p>
	أما بالنسبة للفئة التي تعتمد على الوظيفة تنقسم إلى:
</p>

<ol>
	<li>
		الآلات التفاعلية Reactive machines: لا تتضمن أنظمة الذكاء الاصطناعي هذه ذاكرة، ويكون لها مهمة معينة.
	</li>
	<li>
		ذاكرة محدودة Limited memory: تتمتع أنظمة الذكاء الاصطناعي هذه بذاكرة، لذا يمكنها استخدام الخبرات السابقة في القرارات المستقبلية.
	</li>
	<li>
		نظرية العقل Theory of mind: يجب أن يفهم الذكاء الاصطناعي المشاعر البشرية والناس والمعتقدات وأن يكون قادرًا على التفاعل اجتماعيًا مثل البشر.
	</li>
	<li>
		الإدراك الذاتي Self-awareness: <span ipsnoautolink="true">مستقبل الذكاء الاصطناعي</span>. ستكون هذه الآلات فائقة الذكاء، وسيكون لها وعيها ومشاعرها وإدراكها الذاتي.
	</li>
</ol>

<h2>
	تطبيقات الذكاء الاصطناعي
</h2>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="jpg" data-fileid="117536" href="https://academy.hsoub.com/uploads/monthly_2023_01/151643263_--.jpg.fb3741d534b9a29665cc31616df69347.jpg" rel=""><img alt="تطبيقات الذكاء الاصطناعي" class="ipsImage ipsImage_thumbnailed" data-fileid="117536" data-ratio="66.67" data-unique="kn1sf1u9x" style="width: 800px; height: auto;" width="900" src="https://academy.hsoub.com/uploads/monthly_2023_01/914198987_--.thumb.jpg.5ecd1b6f662ed4f8b56d2ed95cb488b3.jpg"> </a>
</p>

<p>
	<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">تطبيقات الذكاء الاصطناعي</a> لا حصر لها؛ يمكن تطبيق هذه التكنولوجيا على العديد من القطاعات والصناعات المختلفة.
</p>

<p>
	إليك أهم 10 تطبيقات للذكاء الاصطناعي:
</p>

<h3>
	1. الطب والرعاية الصحية
</h3>

<p>
	أحدث الذكاء الصناعي تأثيرًا غير مسبوق في المجال الطبي، إذ أصبحت خوارزميات ونماذج التعلم الآلي قادرةً على تشخيص العديد من الأمراض والتنبؤ بها، مثل تحديد ما إذا كان مريض معين مصابًا بسرطان أو ورم خبيث أو حميد بناءً على الأعراض والسجلات الصحية والتاريخ أو التنبؤ بالإصابة بأمراض وأوبئة ..إلخ.
</p>

<h3>
	2. النقل
</h3>

<p>
	أصبح إنتاج السيارات ذاتية القيادة التي تعتمد على الذكاء الصناعي -الشغل الشاغل للعديد من الشركات العالمية مثل شركة تسلا التي يرأسها إيلون ماسك. كما أنه يساعد في تقليل الازدحام والاختناقات المرورية. أما في النقل الجوي؛ فقد أصبحت الآلة تشارك في تخطيط المسارات جنبًا إلى جنب مع مخططات هبوط الطائرة والإقلاع.
</p>

<h3>
	3. التعليم
</h3>

<p>
	يمكن للذكاء الاصطناعي أتمتة عملية تقييم الطلاب ووضع الدرجات، وبالتالي توفير الجهد والوقت على المدرسين. بالمناسبة، لقد كان مشروع التخرج الخاص بي هو نظام ذكي لمراقبة سلوك الطلاب خلال الدرس ورصد تعابير وجوههم لمعرفة الطالب الذي يشعر بالملل أو النائم والذي يُشارك باستمرار والذي يُثير الشغب ..إلخ، وتقديم تقرير عن كل طالب في نهاية الدرس.
</p>

<h3>
	4. الأعمال
</h3>

<p>
	دُمجت خوارزميات التعلم الآلي مع أنظمة تحليل وإدارة علاقات العملاء CRM، لمعرفة كيفية خدمة العملاء بطريقة أفضل. كما دُمجت روبوتات الدردشة في مواقع الويب لتقديم خدمة فورية للعملاء. أصبحت أتمتة المناصب الوظيفية أيضًا نقطة نقاش بين الأكاديميين ومحللي تكنولوجيا المعلومات.
</p>

<h3>
	5. الأمن والحماية
</h3>

<p>
	تستخدم المؤسسات التعلم الآلي في برامج إدارة المعلومات والأحداث SIEM والمجالات ذات الصلة لاكتشاف الحالات الشاذة وتحديد الأنشطة المشبوهة التي تشير إلى التهديدات.
</p>

<h3>
	6. المؤسسات المالية والمصرفية
</h3>

<p>
	يلعب الذكاء الاصطناعي دورًا حيويًا في إدارة المعاملات المالية والتعامل مع العديد من الأنشطة البنكية الأخرى. من خلال نماذج التعلم الآلي يمكن التعامل مع العمليات اليومية للبنوك، مثل المعاملات والعمليات المالية وأموال سوق الأوراق المالية وإدارتها وما إلى ذلك بسهولة وكفاءة أكبر. كما تُستخدم في عمليات مكافحة غسيل الأموال وتحليل أنظمة الائتمان.
</p>

<h3>
	7. الألعاب والترفيه
</h3>

<p>
	حقق الذكاء الصناعي تقدمًا كبيرًا في ألعاب الواقع الافتراضي والألعاب الحديثة، حيث يُستخدم لتوليد سلوكيات متجاوبة أو متكيفة أو ذكية لشخصيات اللاعبين تُحاكي الذكاء البشري.
</p>

<h3>
	8. الصناعة
</h3>

<p>
	من خلال الذكاء الصناعي يمكننا توفير الوقت والمال عن طريق أتمتة العمليات والمهام الروتينية وتحسينها. زيادة الإنتاجية والكفاءات التشغيلية. اتخاذ قرارات أعمال أسرع بناءً على مخرجات التقنيات المعرفية.
</p>

<h3>
	9. الزراعة
</h3>

<p>
	تساعد أنظمة الذكاء الاصطناعي في تحسين الجودة الشاملة للحصاد ودقته (تُعرق بالزراعة الدقيقة). يمكن للذكاء الصناعي أن يتنبأ بالوقت الذي يستغرقه محصول ما ليصبح ناضجًا وجاهزًا للقطف واكتشاف الأمراض في النباتات والآفات وسوء تغذية المزارع، وهذا ما يزيد من كفاءة الزراعة.
</p>

<h3>
	10. الفنون
</h3>

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

<h2>
	الذكاء الاصطناعي والثورة الصناعية الرابعة 4IR
</h2>

<p>
	لابد وأنك قد سمعت عن العصر الجديد من الصناعة والذي يُعرف بالثورة الصناعية الرابع "0.4 Industry". ترتكز الثورة الصناعية الرابعة على أتمتة العمليات إلى حد كبير جدًا واستخدام جداول زمنية أسرع للإنتاج ومستودعات ذكية (مخازن ذكية)، مما يسمح بإنتاج وتوزيع المنتجات بسرعة وفعالية أكبر، كما أنها ستتطلب قوة عاملة ذات مهارات عالية ومتعلمة وتتقن كيفية استخدام وتشغيل أحدث التقنيات.
</p>

<p>
	يأتي دور الذكاء الصناعي هنا في قدرته على إحداث هذه التغييرات بسرعة وسلاسة، ولاسيما من خلال الأنظمة الخبيرة والرؤية الحاسوبية والروبوتات وإنترنت الأشياء.
</p>

<h2>
	ما هي مزايا وعيوب الذكاء الاصطناعي؟
</h2>

<p>
	تتطور تقنيات الذكاء الصناعي بسرعة كبيرة جدًا، ويرجع ذلك إلى أن الذكاء الاصطناعي يُمكنه معالجة كميات كبيرة من البيانات بسرعة، كما أنه يعطي تنبؤات أكثر دقة من الإنسان.
</p>

<p>
	إن الكميات الهائلة من البيانات يمكنها دفن قدرة العقل البشري على معالجتها وتحويلها إلى معلومات ذات معنى، إلا أن تقنيات الذكاء الاصطناعي يمكنها أخذ وتحويل تلك البيانات إلى معلومات مُفيدة وقابلة للتنفيذ بسرعة، لكن العيب الأساسي لاستخدام الذكاء الاصطناعي هو أنه من المكلف معالجة الكميات الكبيرة من البيانات التي تتطلبها <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">برمجة الذكاء الاصطناعي</a>.
</p>

<h3>
	مزايا الذكاء الاصطناعي
</h3>

<ul>
	<li>
		يجعل الآلات أكثر قوة وفائدة.
	</li>
	<li>
		يُقدم أساليب جديدة لحل المشاكل.
	</li>
	<li>
		أفضل من البشر في التعامل مع المعلومات.
	</li>
	<li>
		يُحسّن كفاءة العمل، إذ يقلل من المدة الزمنية لإنجاز مهمة مقارنة بالبشر.
	</li>
	<li>
		غالبًا ما يكون أكثر دقة من البشر.
	</li>
</ul>

<h3>
	عيوب الذكاء الاصطناعي
</h3>

<ul>
	<li>
		عدم القدرة على التعميم من مهمة إلى أخرى. أي يمكن للآلة أن تنفذ مهمة (أو عدة مهمات) محددة مُدربة عليها مسبقًا فقط، ولايمكنها أن تنفذ مهمة لم تُدرب عليها مُسبقًا.
	</li>
	<li>
		التكلفة (تكلفة تنفيذ تطبيقات الذكاء الاصطناعي مرتفعة للغاية).
	</li>
	<li>
		قلة الكفاءات (يتوفر عدد قليل من المبرمجين الأكفاء القادرين على تطوير برامج الذكاء الاصطناعي).
	</li>
	<li>
		يتطلب خبرة فنية عميقة.
	</li>
	<li>
		الروبوتات هي إحدى تطبيقات الذكاء الصناعي التي تحل محل الوظائف التي يشغلها البشر، وبالتالي قد تؤدي إلى تزايد البطالة.
	</li>
</ul>

<h2>
	كيف يتم استخدام الذكاء الصناعي اليوم؟
</h2>

<p>
	يُستخدم الذكاء الاصطناعي بمستويات متفاوتة من التطور على نطاق واسع وعبر مجموعة من التطبيقات اليوم. لابد وأنك تستخدم اليوتيوب أو الفيسبوك، ولابد أنك لاحظت أنهم يقترحون لك مقاطع فيديو مُشابهة لما تُشاهده في العادة، هذه الاقتراحات هي من فعل "أنظمة التوصية" (أو أنظمة الاقتراح) التي تُراقب ما تبحث عنه في العادة لكي تقترح لك في المرات القادمة أشياء مُشابهة.
</p>

<p>
	من الأمثلة الأخرى برامج الدردشة التي تراها على مواقع الويب أو إن كنت من مستخدمي ويندوز فربما أنت تعرف المساعد الافتراضي الذكي آليكسا.
</p>

<p>
	يُستخدم الذكاء الاصطناعي أيضًا للتنبؤ بحالة الطقس والتنبؤات المالية (كأسعار الأسهم) ولتبسيط عمليات الإنتاج، كما يُستخدم في الألعاب والنقل والتسوق ومعالجة اللغة البشرية وغير ذلك الكثير.
</p>

<p>
	عمومًا، يمكن القول أن الذكاء الاصطناعي بدأ التشعب في جميع مفاصيل حياتنا اليومية وسيزداد استخدامه أكثر ويصبح البشر أكثر اعتمادًا عليه من قبل في السنوات القادمة.
</p>

<h2>
	مستقبل الذكاء الاصطناعي
</h2>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="jpg" data-fileid="117535" href="https://academy.hsoub.com/uploads/monthly_2023_01/1252360304_--.jpg.6bf007f151e29fab2b179a23401e346d.jpg" rel=""><img alt="مستقبل الذكاء الاصطناعي" class="ipsImage ipsImage_thumbnailed" data-fileid="117535" data-ratio="71.34" data-unique="0962e6loi" style="width: 841px; height: auto;" width="841" src="https://academy.hsoub.com/uploads/monthly_2023_01/356937052_--.thumb.jpg.03dd9ef3d07be65db1ce74047b2a1848.jpg"> </a>
</p>

<p>
	في مؤتمر Web Summit في أواخر عام 2017، قدم الفيزيائي ستيفن هوكينغ رأيه حول <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D9%85%D8%B3%D8%AA%D9%82%D8%A8%D9%84-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">مستقبل الذكاء الاصطناعي</a>. كان يأمل في أن تتفوق التكنولوجيا على الذكاء البشري. قد يعني هذا على الأرجح أنه سيتم الشفاء من العديد من الأمراض الرهيبة وربما تكون هناك طرق للتعامل مع المشكلات البيئية، بما في ذلك تغير المناخ. لكن كان هناك جانب مظلم أيضًا.
</p>

<p>
	تحدث هوكينج عن إمكانية أن تكون التكنولوجيا "أسوأ حدث في تاريخ حضارتنا"، فربما تُحدث بعض المشاكل مثل البطالة الجماعية وحتى الروبوتات القاتلة! لهذا السبب، حث على طرق للتحكم في الذكاء الاصطناعي. أفكار هوكينغ ليست مجرد كلام على الهامش بالتأكيد، فقد أعرب رواد الأعمال البارزين في مجال التكنولوجيا مثل إيلون ماسك وبيل غيتس مرارًا وتكرارًا عن قلقهم العميق بشأن الذكاء الاصطناعي.
</p>

<p>
	على الجانب الآخر هنا الكثير من العلماء ورواد الأعمال المتفائلون. ماسايوشي سون، الرئيس التنفيذي لشركة SoftBank ومدير صندوق Vision هو واحد منهم. في مقابلة مع CNBC، أعلن أنه في غضون 30 عامًا، سيكون لدينا سيارات طائرة وسيعيش الناس لفترة أطول وسنكون قد عالجنا العديد من الأمراض. أشار أيضًا إلى أن التركيز الرئيسي لصندوقه ينصب على الذكاء الصناعي.
</p>

<p>
	بغض النظر عن كل ذلك، هناك شيء واحد مؤكد: سنرى في السنوات القادمة الكثير من الابتكارات والتطورات في الذكاء الصناعي، خصوصًا وأن هناك مبالغ ضخمة مستثمرة فيه.
</p>

<p>
	لنلقي الآن نظرةً على بعض المجالات التي من المحتمل أن يكون لها تأثير كبير على المجتمع:
</p>

<ul>
	<li>
		<strong>السيارات ذاتية القيادة:</strong> لقد كانت سمة مميزة للعديد من قصص الخيال العلمي لعقود عديدة! لكنها الآن أقرب إلى الواقع من الخيال -يمكننا ملاحظة مؤشرات ذلك من التطورات الأخيرة في سيارات تسلا من شركة تسلا موتورز التابعة لإيلون ماسك.
	</li>
	<li>
		<strong>السباق الاقتصادي بين الدول:</strong> توظيف الذكاء الاصطناعي في تسريع عجلة الاقتصاد والتصنيع بمختلف المجالات والتنافس على المرتبة الاقتصادية الأولى عالميًا.
	</li>
	<li>
		<strong>البطالة التكنولوجية:</strong> اكتسب هذا المفهوم شهرةً من الاقتصادي الشهير جون مينارد كينز خلال فترة "الكساد الكبير"، والذي يُشير إلى كيف يمكن أن تؤدي الابتكارات إلى فقدان الوظائف على المدى الطويل. عمومًا قد تكون هذه الرؤية غير دقيقة، فغالبًا ما تخلق الأشياء الجديدة أعمالًا جديدة للإنسان.
	</li>
	<li>
		<strong>تسليح الذكاء الاصطناعي:</strong> يُعد تسليح الذكاء الاصطناعي أو استخدام الذكاء الاصطناعي في مجال الصناعات الحربية والدفاعية أحد أكبر التهديدات التي تواجه المجتمع الدولي.
	</li>
	<li>
		<strong>اكتشاف الأدوية:</strong> تواجه شركات الأدوية العديد من المشاكل في التوصل إلى العلاجات لذا يجري الاعتماد على الذكاء الاصطناعي لتسريع العجلة وتخطي العقبات.
	</li>
</ul>

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

<p>
	هناك العديد من المجالات الأخرى التي من المتوقع أن تتأثر مثل الأمور الحكومية والاجتماعية والتي لايسعنا ذكرها كلها الآن.
</p>

<h2>
	اللغات والأدوات المستخدمة في الذكاء الصناعي
</h2>

<p>
	هناك العديد من اللغات والأدوات المُساعدة في إنشاء نماذج الذكاء الاصطناعي، ومعظمها مفتوح المصدر. سنلقي الآن نظرةً على بعض اللغات والأدوات الأكثر شيوعًا للذكاء الاصطناعي:
</p>

<h3>
	لغة بايثون Python
</h3>

<p>
	هي لغة عالية المستوى مُفسَّرة ذات مجالٍ عام، وهي مرنةٌ وتحاول التعبير عن المفاهيم البرمجية بأقل قدر ممكن من الشيفرات. تدعم هذه اللغة البرمجة الكائنية و<a href="https://academy.hsoub.com/programming/general/%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%A5%D8%AC%D8%B1%D8%A7%D8%A6%D9%8A%D8%A9/" rel="">البرمجة الإجرائية</a>، وفيها مكتبة قياسية كبيرة.
</p>

<p>
	تُعتبر لغة بايثون اللغة الأفضل للتعامل مع مهام الذكاء الصناعي، حيث تتميز بسهولة الاستخدام وسرعة التنفيذ، إضافةً إلى احتوائها على مكتبات هامة وأطر عمل لا غنى عنها، حيث أن أغلب أطر العمل تعمل عليها، وقد وفرت أكاديمية حسوب دورة متخصصة لتعلم الذكاء الاصطناعي وتعلم الآلة Machine Learning والتعلم العميق Deep Learning وغيرها من المفاهيم باستخدام لغة بايثون وباتباع بأسلوب عملي وشيق يركز على ممارسة ما تتعلمه من خلال مشاريع حقيقية تفيدك في سوق العمل.
</p>

<div class="banner-container ipsBox ipsPadding">
	<div class="inner-banner-container">
		<p class="banner-heading">
			دورة الذكاء الاصطناعي
		</p>

		<p class="banner-subtitle">
			احترف برمجة الذكاء الاصطناعي AI وتحليل البيانات وتعلم كافة المعلومات التي تحتاجها لبناء نماذج ذكاء اصطناعي متخصصة.
		</p>

		<div>
			<a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://academy.hsoub.com/learn/artificial-intelligence" rel="">اشترك الآن</a>
		</div>
	</div>

	<div class="banner-img">
		<a href="https://academy.hsoub.com/learn/artificial-intelligence" rel=""><img alt="دورة الذكاء الاصطناعي AI" src="https://academy.hsoub.com/learn/assets/images/courses/artificial-intelligence.png"></a>
	</div>
</div>

<p>
	وتتضمن لغة بايثون العديد من المكتبات التي لا غنى عنها في مجال الذكاء الصناعي مثل:
</p>

<ol>
	<li>
		<p>
			<strong>نمباي Numpy:</strong> تُعد مكتبة نمباي إحدى مكتبات لغة بايثون. تستخدم لتنفيذ عمليات الحوسبة العلمية والتعامل مع المصفوفات، وتهدف إلى توفير كائن مصفوفة سريع جدًا.
		</p>
	</li>
	<li>
		<p>
			<strong>باندا Panda:</strong> توفر هياكل بيانات وأدوات تحليل بيانات عالية الأداء وسريعة وسهلة الاستخدام لمعالجة البيانات الرقمية والسلاسل الزمنية.
		</p>
	</li>
	<li>
		<p>
			<strong>ماتبلوتليب Matplotlib:</strong> هي مكتبة شاملة لإنشاء رسوم بيانية ثابتة ومتحركة وتفاعلية في بايثون.
		</p>
	</li>
	<li>
		<p>
			<strong>سيبورن Seaborn:</strong> هي مكتبة رسوم بيانية مبنية على ماتبلوتليب. توفر واجهة عالية المستوى لرسم رسومات إحصائية جذابة وغنية بالمعلومات.
		</p>
	</li>
</ol>

<h3>
	أطر العمل Frameworks
</h3>

<p>
	هناك عدد لا يحصى من أطر عمل الذكاء الاصطناعي، والتي توفر أنظمة شاملة لبناء النماذج وتدريبها ونشرها. إليك بعضًا من أهم هذه الأطر:
</p>

<ol>
	<li>
		<strong>تنسرفلو TensorFlow:</strong> هو إطار العمل الأكثر شعبية والمدعوم من شركة جوجل. بدأت الشركة في تطوير إطار العمل هذا في عام 2011، من خلال قسم دماغ جوجل Google Brain. كان الهدف هو إيجاد طريقة لإنشاء شبكات عصبية أسرع؛ لإتاحة إمكانية تضمين تكنولوجيا الذكاء الصناعي في التطبيقات.
	</li>
	<li>
		<strong>كيراس Keras:</strong> واحد من أطر العمل المهمة الأخرى، والذي ظهر لأول مرة في عام 2015 على يد الباحث فرانسوا كوليت (أحد باحثي جوجل). توفر كيراس واجهات برمجة تطبيقات متسقة وبسيطة، ويقلل من عدد إجراءات المستخدم المطلوبة لحالات الاستخدام الشائعة، ويوفر رسائل خطأ واضحة وقابلة للتنفيذ. كما أن لديها وثائق موسعة للمطورين. دُمجت كيراس مع تنسرفلو بدءًا من 2017.
	</li>
	<li>
		<strong>باي تورش PyTorch:</strong> في السنوات الأخيرة ظهر <a href="https://academy.hsoub.com/programming/general/%D8%A5%D8%B7%D8%A7%D8%B1-%D8%B9%D9%85%D9%84-framework/" rel="">إطار عمل </a>آخر يُدعى باي تورش مدعوم من قبل شركة ميتا Meta. إنها إطار عمل آخر مفتوح المصدر مستندة على تورش Torch. تتميز باي تورش عن أطر العمل الأخرى بكونها بايثونية أكثر (عندما تكتب النماذج باستخدامها تشعر وكأنك تكتب شيفرة بايثون عادية)، كما أن الباحثين يتجهون إلى استخدامها أكثر في الآونة الأخيرة.
	</li>
</ol>

<h2>
	فرص العمل في تخصص الذكاء الاصطناعي
</h2>

<p>
	مهندسو الذكاء الاصطناعي هم الأفراد الذين يقومون بتصميم وبناء واختبار وتحديث أنظمة وتقنيات الذكاء الاصطناعي التي يمكن أن تساعد المؤسسات على زيادة الكفاءة وخفض التكاليف وزيادة الأرباح واتخاذ قرارات أفضل.
</p>

<p>
	نظرًا للنمو الكبير والانتشار السريع للذكاء الاصطناعي، هناك حاجة إلى المهنيين المتخصصين في مجالاته المختلفة الآن أكثر من أي وقت مضى. الخبر السار هو أن هذا المجال مليء بالفرص الوظيفية المختلفة، مما يعني أنه يمكنك تولي أدوار ومسؤوليات مختلفة اعتمادًا على منصبك أو خبرتك أو اهتماماتك وبما أن الطلب مرتفع فالخبرة هي المقياس الوحيد ويمكن تخطي الشهادة الجامعية.
</p>

<p>
	تختلف رواتب مهندس الذكاء الاصطناعي بناءً على الخبرة والبلد، كما قد تختلف التعويضات من مؤسسة إلى أخرى. يمكنك البحث عن رواتب مهندس الذكاء الاصطناعي في موقع <a href="https://www.glassdoor.com" rel="external nofollow">Glassdoor</a> وملاحظة الفرق بسهولة. كما أن الراتب يختلف من تخصص لآخر، فراتب مهندس الذكاء الاصطناعي يختلف عن راتب المهندس الباحث في الذكاء الاصطناعي. وفقًا Glassdoor، فإن متوسط الراتب لمهندس الذكاء الاصطناعي في الولايات المتحدة هو 119297 دولارًا، ويمكن أن ينخفض الرقم إلى 78000 دولار أو يصل إلى 150 ألف دولار أو أكثر. أما في بلد عربي مثل الإمارات، فوفقًا للموقع المتخصص <a href="https://www.erieri.com/" rel="external nofollow">erieri</a>، يبلغ متوسط الأجر لمهندس الذكاء الاصطناعي هو 337،135 درهمًا إماراتيًا في السنة، وهذه الأرقام إن دلت على شيء فإنها تدل على الأجر المرتفع للعامل في هذا المجال.
</p>

<h2>
	كيفية تعلم الذكاء الاصطناعي
</h2>

<p>
	ربما تطرح السؤال التالي كمبتدأ: كيف أتعلم الذكاء الصناعي؟ ومن أين أبدأ؟
</p>

<p>
	يتطلب تعلم الذكاء الصناعي ما يلي:
</p>

<ol>
	<li>
		<strong>خلفية علمية بسيطة</strong> على الأقل (كلما زادت كان أفضل) في علم الجبر والجبر الخطي والإحصاء والاحتمالات والتحليل (لاسيما الاشتقاقات).
	</li>
	<li>
		<strong>خلفية برمجية</strong> جيدة، والقدرة على استخدام لغة بايثون (لا يجب أن تكون محترفًا لتبدأ، الاحتراف يأتي مع الممارسة والوقت).
	</li>
	<li>
		<strong>تعلم أُطر العمل الأساسية</strong>. هنا لن تحتاج إلى تعلم جميع أُطر ومكتبات الذكاء الصناعي؛ الأمر يعتمد على الفرع والمواضيع التي ترغب بالتخصص فيها.
	</li>
</ol>

<p>
	يمكنك أن تتعلم المجال إما بدخول أروقة الجامعة وهو الطريق الأطول الذي يأخذ عدة سنوات ولا توفر أغلب الجامعات تعلم مجال الذكاء الاصطناعي من البداية بل يكون ضمن برامج الماجستير والدراسات العليا، عدا عن التركيز على الجانب النظري والتقنيات القديمة، وقد فصلنا هذه النقطة في فقرة "طرق <a href="https://academy.hsoub.com/learn-programming/" rel="">لتعلم البرمجة</a>" من مقال <a href="https://academy.hsoub.com/programming/general/%D9%83%D9%8A%D9%81-%D8%AA%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D9%86%D8%B5%D8%A7%D8%A6%D8%AD-%D9%88%D8%A3%D8%AF%D9%88%D8%A7%D8%AA-%D9%84%D8%B1%D8%AD%D9%84%D8%AA%D9%83-%D9%81%D9%8A-%D8%B9%D8%A7%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-r206/#%D8%B7%D8%B1%D9%82-%D9%84%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9" rel="">كيف تتعلم البرمجة: نصائح وأدوات لرحلتك في عالم البرمجة</a>.
</p>

<p>
	وفي أي حال يُنصح دومًا بالدورات البرمجية والمخيمات والكتب المتخصصة لتعلم المجال منها خصوصًا ما هو عملي ومطلوب في سوق العمل، وإحدى أفضل الدورات العربية التي تعلمك تخصص الذكاء الاصطناعي دورة <a href="https://academy.hsoub.com/store/9-%D8%AF%D9%88%D8%B1%D8%A9-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D9%84%D8%BA%D8%A9-python/" rel="">تطوير التطبيقات باستخدام لغة Python</a> الشاملة التي تبدأ من الصفر حيث تعلمك أساسيات البرمجة وحتى احترافها بلغة بايثون ثم تعلمك أساسيات الذكاء الاصطناعي وتعلم الآلة بإنشاء تطبيقات عملية تضيفها في معرض أعمالك، كما أن الدورة تضمن لك دخول سوق العمل بعد التخرج مباشرةً.
</p>

<p>
	<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" frameborder="0" height="642" id="ips_uid_3295_16" src="https://academy.hsoub.com/applications/core/interface/index.html" title="دورة تطوير التطبيقات بلغة بايثون - أكاديمية حسوب" width="1142" data-embed-src="https://www.youtube.com/embed/1niwEWY7CN4"></iframe>
</p>

<p>
	إليك مصادر إضافية عربية لتعلم الذكاء الاصطناعي توفرها أكاديمية حسوب:
</p>

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%d8%aa%d8%b9%d9%84%d9%85-%d8%a7%d9%84%d8%b0%d9%83%d8%a7%d8%a1-%d8%a7%d9%84%d8%a7%d8%b5%d8%b7%d9%86%d8%a7%d8%b9%d9%8a/" rel="">تعلم الذكاء الاصطناعي</a>: مقال شامل لتعلم الذكاء الصناعي موجه للمبتدئين.
	</li>
	<li>
		<a href="https://academy.hsoub.com/files/15-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">البرمجة بلغة بايثون</a>: تعلم لغة بايثون تمهيدًا لكتابة تطبيقات ذكاء اصطناعي وتعلم آلة بها.
	</li>
	<li>
		<a href="https://academy.hsoub.com/files/17-%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-%D9%88%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9/" rel="">مدخل إلى الذكاء الاصطناعي وتعلم الآلة</a>: تعرف على أساسيات الذكاء الاصطناعي وتعلم الآلة.
	</li>
	<li>
		<a href="https://academy.hsoub.com/files/29-%D8%B9%D8%B4%D8%B1%D8%A9-%D9%85%D8%B4%D8%A7%D8%B1%D9%8A%D8%B9-%D8%B9%D9%85%D9%84%D9%8A%D8%A9-%D8%B9%D9%86-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">عشرة مشاريع عملية عن الذكاء الاصطناعي</a>: طبق ما تعلمته على مشاريع ذكاء اصطناعي عملية بلغة بايثون.
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/" rel="">قسم الذكاء الاصطناعي</a>: يحوي مقالات متنوعة عن كل ما يتعلق بمجال الذكاء الاصطناعي.
	</li>
</ul>

<h2>
	أهم مصطلحات الذكاء الصناعي
</h2>

<p>
	إليك قائمة مُختصرة بأهم المصطلحات والمفاهيم ذات الصلة بدراسة الذكاء الاصطناعي وتخصصاته:
</p>

<table>
	<thead>
		<tr>
			<th>
				المصطلح
			</th>
			<th>
				الترجمة
			</th>
			<th>
				التعريف
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>
				(Artificial intelligence (AI
			</td>
			<td>
				الذكاء الصناعي
			</td>
			<td>
				العلم الذي يحاول فهم الكيانات الذكية وبناء الآلات ذكية
			</td>
		</tr>
		<tr>
			<td>
				(Natural Language Processing (NLP
			</td>
			<td>
				معالجة اللغات الطبيعية
			</td>
			<td>
				العلم الذي يحاول فهم وتوليد ومعالجة اللغات البشرية
			</td>
		</tr>
		<tr>
			<td>
				(Computer vision (CV
			</td>
			<td>
				الرؤية الحاسوبية
			</td>
			<td>
				بناء تطبيقات ذكية قادرة على فهم محتوى الصور كما يفهمها الإنسان
			</td>
		</tr>
		<tr>
			<td>
				(Machine learning (ML
			</td>
			<td>
				تعلم الآلة
			</td>
			<td>
				قدرة الآلة على تقليد السلوك البشري الذكي من خلال بناء الخوارزميات التي "تتعلم" من البيانات
			</td>
		</tr>
		<tr>
			<td>
				(Reinforcement learning (RL
			</td>
			<td>
				التعليم المعزز
			</td>
			<td>
				أحد أنواع تعلم الآلة
			</td>
		</tr>
		<tr>
			<td>
				(Supervised learning (SL
			</td>
			<td>
				التعليم الخاضع للإشراف
			</td>
			<td>
				أحد أنواع تعلم الآلة
			</td>
		</tr>
		<tr>
			<td>
				(Semi-Supervised learning (<abbr title="Secure Socket Layer | طبقة المنافذ الآمنة"><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr></abbr>
			</td>
			<td>
				التعليم شبه الخاضع للإشراف
			</td>
			<td>
				أحد أنواع تعلم الآلة
			</td>
		</tr>
		<tr>
			<td>
				(UnSupervised learning (USL
			</td>
			<td>
				التعليم غير الخاضع للإشراف
			</td>
			<td>
				أحد أنواع تعلم الآلة
			</td>
		</tr>
		<tr>
			<td>
				(Deep Learning (DL
			</td>
			<td>
				التعلم العميق
			</td>
			<td>
				نوع من التعلم الآلي والذكاء الاصطناعي الذي يُقلد الطريقة التي يكتسب بها البشر أنواعًا معينة من المعرفة
			</td>
		</tr>
		<tr>
			<td>
				(Artificial neural networks (ANNs
			</td>
			<td>
				الشبكات العصبية الاصطناعية
			</td>
			<td>
				مجموعة مترابطة من عصبونات افتراضية تُنشئها برامج حاسوبية لتُشابه عمل العصبون البيولوجي
			</td>
		</tr>
		<tr>
			<td>
				(Robotic Process Automation (RPA
			</td>
			<td>
				أتمتة العمليات الآلية
			</td>
			<td>
				أحد أشكال تكنولوجيا أتمتة العمليات التجارية بناءً على روبوتات البرمجيات
			</td>
		</tr>
		<tr>
			<td>
				Expert systems
			</td>
			<td>
				الأنظمة الخبيرة
			</td>
			<td>
				برنامج مصمم لينفد مهاماً متعلقة بالخبرة البشرية
			</td>
		</tr>
		<tr>
			<td>
				Fuzzy Logic
			</td>
			<td>
				منطق ضبابي أو ترجيحي أو غيمي
			</td>
			<td>
				فرع من الذكاء الصناعي يُقدم حلولًا جديدًا ويرتكز على توسيع مفهوم المنطق الثنائي الكلاسيكي
			</td>
		</tr>
		<tr>
			<td>
				(Convolutional Neural Network (CNN
			</td>
			<td>
				شبكة عصبية التفافية
			</td>
			<td>
				نوع خاص من أنواع الشبكات العصبونية
			</td>
		</tr>
		<tr>
			<td>
				(Recurrent Neural Network (RNN
			</td>
			<td>
				شبكة عصبية تكرارية
			</td>
			<td>
				نوع خاص من أنواع الشبكات العصبونية
			</td>
		</tr>
		<tr>
			<td>
				(Long Short-Term Memory Network (LSTM
			</td>
			<td>
				الشبكات ذات الذّاكرة الطويلة قصيرة المدى
			</td>
			<td>
				نوع خاص من أنواع الشبكات العصبونية التكرارية RNNs
			</td>
		</tr>
		<tr>
			<td>
				Pre-trained Model
			</td>
			<td>
				نموذج مُدرّب مُسبقًا
			</td>
			<td>
				شبكة عصبية مُدربة مُسبقًا على مجموعة بيانات، ويمكن استخدامها وتكييفها على مهمة أخرى
			</td>
		</tr>
		<tr>
			<td>
				Model
			</td>
			<td>
				نموذج
			</td>
			<td>
				أداة أو خوارزمية تعتمد على مجموعة بيانات معينة يمكن من خلالها التوصل إلى قرار
			</td>
		</tr>
		<tr>
			<td>
				Transfer Learning
			</td>
			<td>
				نقل التعلم
			</td>
			<td>
				تخزين المعرفة المكتسبة أثناء حل مشكلة واحدة وتطبيقها على مشكلة مختلفة ذات صلة
			</td>
		</tr>
		<tr>
			<td>
				Optimization
			</td>
			<td>
				الاستمثال - التحسين
			</td>
			<td>
				اختيار العنصر أو القيمة الأمثل من بين مجموعة ممكنة من العناصر
			</td>
		</tr>
		<tr>
			<td>
				Structured Data
			</td>
			<td>
				البيانات المهيكلة
			</td>
			<td>
				البيانات المنظمة ضمن جداول
			</td>
		</tr>
		<tr>
			<td>
				Unstructured Data
			</td>
			<td>
				البيانات غير المهيكلة
			</td>
			<td>
				البيانات الغير منظمة، مثل الفيديو والصور والصوت
			</td>
		</tr>
		<tr>
			<td>
				Data augmentation
			</td>
			<td>
				تكثيف البيانات
			</td>
			<td>
				تقنية لتوليد بيانات جديدة من بيانات موجودة (مثل توليد صور جديدة من صورة معينة)
			</td>
		</tr>
		<tr>
			<td>
				Regression
			</td>
			<td>
				التوقع
			</td>
			<td>
				أحد تقنيات التعليم الخاضع للإشراف
			</td>
		</tr>
		<tr>
			<td>
				Clustering
			</td>
			<td>
				التجميع
			</td>
			<td>
				أحد تقنيات التعليم غير الخاضع للإشراف
			</td>
		</tr>
		<tr>
			<td>
				Classification
			</td>
			<td>
				التصنيف
			</td>
			<td>
				أحد تقنيات التعليم الخاضع للإشراف
			</td>
		</tr>
		<tr>
			<td>
				Logistic Regression
			</td>
			<td>
				الانحدار اللوجستي
			</td>
			<td>
				خوارزمية تعلم آلي للتصنيف
			</td>
		</tr>
		<tr>
			<td>
				Linear Regression
			</td>
			<td>
				الانحدار الخطي
			</td>
			<td>
				خوارزمية تعلم آلي للتنبؤ
			</td>
		</tr>
		<tr>
			<td>
				Neuron
			</td>
			<td>
				عصبون
			</td>
			<td>
				أحد عناصر الشبكات العصبونية
			</td>
		</tr>
		<tr>
			<td>
				Learning Rate
			</td>
			<td>
				مُعدّل التعلّم
			</td>
			<td>
				‏ معلمة فائقة تُحدد مقدار التعلم في خوارزميات الذكاء الصناعي
			</td>
		</tr>
	</tbody>
</table>

<h2>
	خاتمة
</h2>

<p>
	كانت هذه المقالة بمثابة مدخل إلى الذكاء الاصطناعي؛ إنها تُجيبك عن العديد من الأسئلة المتعلقة بالذكاء الصناعي، مثل مفهومه وتعريفه وأهميته وتطبيقاته ومجالاته والتقنيات التي يدعمها وتخصصاته وأدواته والبدء في تعلمه …إلخ. وسنتحدث في المقالات القادمة عن العديد من الأمور الأخرى المتعلقة بالذكاء الصناعي ونتوسع بالنقاط التي ذكرناها في هذا المقال التي سيطول ذكرها والحديث عنها.
</p>

<p>
	يعدنا الذكاء الاصطناعي بأنه سيغير العالم، والخبر السار هو أن هناك العديد من الأشخاص الذين يركزون على جعل هذا حقيقةً واقعةً، ولا يتعلق الأمر بجني مبالغ طائلة أو الحصول على الشهرة؛ الهدف هو مساعدة البشرية وتغيير العالم إلى الأفضل.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-%D8%A3%D9%87%D9%85-%D8%A7%D9%84%D8%A5%D9%86%D8%AC%D8%A7%D8%B2%D8%A7%D8%AA-%D9%88%D8%A7%D9%84%D8%A7%D8%AE%D8%AA%D8%B1%D8%A7%D8%B9%D8%A7%D8%AA-%D9%88%D9%83%D9%8A%D9%81-%D8%A3%D8%AB%D8%B1%D8%AA-%D9%81%D9%8A-%D8%AD%D9%8A%D8%A7%D8%AA%D9%86%D8%A7-%D8%A7%D9%84%D9%8A%D9%88%D9%85%D9%8A%D8%A9-r975/" rel="">الذكاء الاصطناعي: أهم الإنجازات والاختراعات وكيف أثرت في حياتنا اليومية</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A8%D8%B4%D8%B1%D9%8A-%D9%85%D9%82%D8%A7%D8%A8%D9%84-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-r1813/" rel="">الذكاء البشري مقابل الذكاء الاصطناعي</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A3%D9%87%D9%85%D9%8A%D8%A9-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-r2243/" rel="">أهمية الذكاء الاصطناعي</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D9%85%D8%B1%D8%AC%D8%B9-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r735/" rel="">تعلم لغة بايثون</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D9%81%D9%88%D8%A7%D8%A6%D8%AF-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-r2247/" rel="">فوائد الذكاء الاصطناعي</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D9%84%D8%BA%D8%A7%D8%AA-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">لغات برمجة الذكاء الاصطناعي</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">1877</guid><pubDate>Thu, 26 Jan 2023 13:04:00 +0000</pubDate></item><item><title>&#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x629; &#x648;&#x627;&#x644;&#x62E;&#x648;&#x627;&#x631;&#x632;&#x645;&#x64A;&#x627;&#x62A; &#x648;&#x627;&#x644;&#x630;&#x643;&#x627;&#x621; &#x627;&#x644;&#x627;&#x635;&#x637;&#x646;&#x627;&#x639;&#x64A;</title><link>https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D9%88%D8%A7%D9%84%D8%AE%D9%88%D8%A7%D8%B1%D8%B2%D9%85%D9%8A%D8%A7%D8%AA-%D9%88%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-r1814/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_12/6394508b14a0e_---.png.ee52bbc0f0fbaa8cd831b776124857fb.png" /></p>
<p>
	تعرفنا في <span ipsnoautolink="true">المقال السابق</span> على مفهوم <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">الذكاء الاصطناعي</a> وناقشنا فكرة خطر الذكاء الاصطناعي ونكمل في هذه السلسلة <span ipsnoautolink="true">برمجة الذكاء الاصطناعي</span> الحديث عن البرمجة والتعرف عليها وعلى <a href="https://wiki.hsoub.com/Algorithms" rel="external">الخوارزميات</a> المرتبطة بها ونبحث علاقتهما بالذكاء الاصطناعي.
</p>

<h2>
	ما هي البرمجة؟
</h2>

<p>
	إذا كنت تتوقع زيارة صديق لك، فقد تكتب له عنوانك بالكامل، وإذا كان العنوان صعب الوصول، فمن الممكن أن تكتب العنوان له على صورة مجموعة من التعليمات للوصول إلى منزلك مثل:
</p>

<ul>
	<li>
		عندما تصل إلى ناصية الشارع، اتجه إلى اليمين
	</li>
	<li>
		امش عشر خطوات، ثم اتجه إلى اليمين مرةً أخرى
	</li>
	<li>
		اُدخل أول منزل من جهة اليسار
	</li>
	<li>
		اصعد إلى الدور الثاني
	</li>
</ul>

<p>
	فالبرمجة هي الشيء نفسه تمامًا مع الحاسوب، فبدلًا من الخطوات السابقة، تُكتب تعبيرات مشابهة تخاطب الحاسوب بلغة برمجة لتنفيذ مهمة مشابهة بدلًا من صديقك السابق.
</p>

<p>
	تُعَدّ <a href="https://academy.hsoub.com/programming/general/%D9%84%D8%BA%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">لغات البرمجة</a> مجموعةً من المفردات والقواعد اللغوية التي تمثِّل لغةً وسيطةً للتخاطب مع الحاسوب وأمره بتنفيذ تعليمات وأمور محدَّدة، فلا الحاسوب يفهم لغة البشر، ولا البشر يفهمون لغة الحاسوب، إذ لا تخرج لغة الحاسوب في الأصل خارج حدود الصفر والواحد، وهي الشحنة الكهربائية الموجبة والشحنة الكهربائية السالبة، لكن لا أحد يستطيع التعامل مباشرةً مع تلك اللغة؛ لذا كانت هنالك حاجة ملحة لوجود لغة وسيطة يفهمها كلا البشر والآلة؛ ونتيجةً لذلك فقد اُخترعت لغات البرمجة، وهي نوعان منخفضة المستوى وعالية المستوى.
</p>

<p>
	إذا أردنا أمر الحاسوب بالأمر "افعل كذا" بعبارة أخرى، فسنحتاج إلى لغة مشتركة بيننا وبينه ليفهم ما نبتغيه، وهنا يأتي دور لغات البرمجة، إذ يمكنك عَدّ لغات البرمجة بأنها الوسيط بين المبرمج والحاسوب، <a href="https://academy.hsoub.com/programming/os-embedded-systems/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D9%88%D8%AD%D8%AF%D8%A9-%D8%A7%D9%84%D9%85%D8%B9%D8%A7%D9%84%D8%AC%D8%A9-%D8%A7%D9%84%D9%85%D8%B1%D9%83%D8%B2%D9%8A%D8%A9-%D9%88%D8%B9%D9%85%D9%84%D9%8A%D8%A7%D8%AA%D9%87%D8%A7-%D9%81%D9%8A-%D9%85%D8%B9%D9%85%D8%A7%D8%B1%D9%8A%D8%A9-%D8%A7%D9%84%D8%AD%D8%A7%D8%B3%D9%88%D8%A8-r1716/" rel="">فوحدة المعالجة المركزية للحاسوب CPU</a> غير قادرة على التحدث بأية لغة في الأصل غير لغتها لغة الآلة، وفيما يلي نموذج من تعليمة تعريف متغير يحوي القيمة 97 في لغة الآلة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5263_9" style=""><span class="lit">10110000</span><span class="pln"> </span><span class="lit">01100001</span></pre>

<p>
	كان على المبرمجين كتابة برامج مباشرة بلغة الآلة عندما اختُرِعت أجهزة الحاسوب لأول مرة، وهو أمر صعب للغاية ويستغرق وقتًا طويلًا، فكيفية تنظيم هذه التعليمات هو أمر خارج نطاق هذه السلسلة، ولكن من المثير للاهتمام ملاحظة أمرين، أولًا هو أن تكون لغة الآلة كلها تسلسلًا من 1 و0 فقط، إذ يُطلق على كل رقم 0 أو 1 برقم ثنائي binary digit أو اختصارًا بت Bit، كما يختلف عدد وحدات البت Bit أو الأرقام الثنائية التي تكوِّن أمرًا واحدًا، فبعض <a href="https://academy.hsoub.com/certificates/comptia/%D9%88%D8%AD%D8%AF%D8%A9-%D8%A7%D9%84%D9%85%D8%B9%D8%A7%D9%84%D8%AC%D8%A9-%D8%A7%D9%84%D9%85%D8%B1%D9%83%D8%B2%D9%8A%D8%A9-r58/" rel="">وحدات المعالجة المركزية CPU</a> مثلًا تعالِج تعليمات يبلغ طولها دائمًا ‎32 ‎‎‎Bit‎، في حين تحتوي بعض وحدات المعالجة المركزية الأخرى على تعليمات يمكن أن يكون طولها متغيرًا؛ أما ثانيًا، فتُفسَّر كل مجموعة من الوحدات من وحدة المعالجة المركزية للحاسوب لأداء أمر دقيق جدًا فقط مثل موازنة عددين، أو تخزين عدد أو نص في الذاكرة …إلخ.
</p>

<p>
	الجدير بالذكر أنّ كل شيفرة تنفيذية أو ثنائية -نسبة إلى الأرقام الثنائية- تعمل على وحدة معالجة مركزية ما ولا تعمل على غيره إلا إن كانت المعالجات تشترك بتعليمات التنفيذ نفسها منخفضة المستوى، ما يعني أنه ليعمل برنامجك المكتوب بلغة الآلة على حاسوب معالجه مختلفة، من المرجح أن يتطلب الأمر مجهودًا مضنيًا، وإعادة كتابة أجزاء كبيرة من الشيفرة لملاءمة حزمة التعليمات التي تفهمها وحدة المعالجة المركزية للحاسوب الآخر.
</p>

<p>
	ونظرًا لصعوبة قراءة لغة الآلة وفهمها لأنها مكتوبة بأرقام ثنائية فقط أصفار وواحدات، فقد اختُرِِعت لغة التجميع Assembly Language، بحيث تُحدَّد كل تعليمة باختصار قصير بدلًا من مجموعة من الأرقام الثنائية، كما يمكن استخدام الأسماء والأرقام الأخرى، وإليك التعليمة السابقة المذكورة أعلاه بلغة الآلة مكتوبة بلغة التجميع:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9416_8" style=""><span class="pln">mov al</span><span class="pun">,</span><span class="pln"> </span><span class="lit">061h</span></pre>

<p>
	يجعل هذا من لغة التجميع أسهل بكثير للقراءة والكتابة من لغة الآلة، ومع ذلك لا يمكن لوحدة المعالجة المركزية فهم لغة التجميع مباشرةً، حيث يجب ترجمتها إلى لغة الآلة بدلًا من ذلك وقبل تمكِّن الحاسوب من تنفيذه، وذلك باستخدام برنامج يسمى المُجمِّع Assembler، فالبرامج المكتوبة بلغات التجميع تكون سريعةً للغاية غالبًا، ولا تزال لغة التجميع مستخدَمةً إلى اليوم عندما تكون السرعة مطلوبةً ومهمةً في برمجة بعض البرامج.
</p>

<p>
	تملك لغة التجميع مع ذلك بعض السلبيات، أولًا: لا تزال لغة التجميع تتطلب الكثير من التعليمات للقيام بمهام بسيطة، في حين أن التعليمات الفردية نفسها قابلة للقراءة إلى حد ما، إلا أنّ فهم ما يفعله البرنامج بأكمله يمكن أن يمثِّل تحديًا يشبه إلى حد ما محاولة فهم جملة من خلال النظر إلى كل حرف على حدة؛ أما ثانيًا، فلغة التجميع لا تزال غير متكيّفة، فمن المحتمل ألا يعمل برنامج مكتوب بلغة التجميع لوحدة معالجة مركزية معينة على وحدات معالجة مركزية أخرى، إذ يجب إعادة كتابة البرنامج أو تعديله على نطاق واسع.
</p>

<p>
	طُوِّرت لغات برمجة جديدة مثل C ولغة <a href="https://academy.hsoub.com/programming/cpp/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-c-r802/" rel="">C++</a>‎ ولغة PascalK ولاحقًا لغات مثل <a href="https://academy.hsoub.com/programming/java/%D8%A7%D9%84%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%B3%D8%B1%D9%8A%D8%B9-%D9%84%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-java-r599/" rel="">جافا Java</a> و<a href="https://academy.hsoub.com/programming/javascript/%D8%A7%D9%84%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%B3%D8%B1%D9%8A%D8%B9-%D8%A5%D9%84%D9%89-%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D9%8A%D8%A8%D8%AA-javascript-r550/" rel="">جافاسكربت Javascript</a> وبيرل Perl و<a href="https://academy.hsoub.com/programming/python/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A9-r211/" rel="">بايثون Python</a> لمعالجة مشكلات قابلية القراءة وإمكانية النقل والتنفيذ على وحدات معالجة مركزية مختلفة، حيث تسمى هذه اللغات بلغات عالية المستوى، وذلك لأنها مصممة للسماح للمبرمج بكتابة البرامج دون الحاجة إلى القلق بشأن نوع الحاسوب الذي سيُشغَّل البرنامج عليه، فتُكتب التعليمة السابقة بلغة C ومثلها في لغة <a href="https://wiki.hsoub.com/Python" rel="external">بايثون</a>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9416_16" style=""><span class="pln">a </span><span class="pun">=</span><span class="pln"> </span><span class="lit">97</span><span class="pln"> </span></pre>

<p>
	يجب تحويل البرامج المكتوبة بلغات عالية المستوى إلى لغة يمكن للحاسوب فهمها قبل تشغيل البرنامج مثل البرامج المكتوبة بلغة التجميع والآلة، وهناك طريقتان أساسيتان للقيام بذلك هما التصريف Compiling والتفسير Interpreting، فالمصرِّف Compiler هو برنامج يقرأ الشيفرة المصدرية وينتج برنامجًا منفصلًا قابلًا للتنفيذ يمكن تشغيله بعد ذلك بمجرد تحويل الشيفرة الخاصة بك إلى ملف قابل للتنفيذ، إذ لا تحتاج إلى المترجِم لتشغيل البرنامج، كما كانت برامج المصرِّفات Compilers رديئةً في البداية وتنتج برامجًا بطيئةً للغاية، ولكن على مر السنين أصبحت برامج المترجِمات سريعةً جدًا.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="113629" href="https://academy.hsoub.com/uploads/monthly_2022_12/image-000.png.724109fcefa268e987864eaf8112e923.png" rel=""><img alt="برامج المصرِّفات Compilers " class="ipsImage ipsImage_thumbnailed" data-fileid="113629" data-unique="u6kem4m8r" style="width: 600px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_12/image-000.thumb.png.e509f6dbef6e28567938afbbc13c361f.png"></a>
</p>

<p>
	تستطيع التعرُّف في الصورة السابقة على خطوات إنتاج وتشغيل البرامج المُبرمَجة بلغات عالية المستوى والتي تستخدِم هذا النظام؛ أما المفسِّر Interpreter فهو برنامج ينفِّذ التعليمات الموجودة في الشيفرة البرمجية مباشرةً دون الحاجة إلى تجميعها في ملف تنفيذي أولًا، فبرامج التفسير غالبًا أكثر مرونةً من برامج المصرِّفات لكنها أقل كفاءة عند تشغيل البرامج، وذلك لأن عملية التفسير تحتاج إلى تنفيذ في كل مرة يُشغَّل فيها البرنامج، وهذا يعني أنّ المفسِّر مطلوب في كل مرة يُشغَّل فيها البرنامج.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="113630" href="https://academy.hsoub.com/uploads/monthly_2022_12/image-002.png.61570d259cfdbc33a1efba16ff36c892.png" rel=""><img alt="عملية التفسير " class="ipsImage ipsImage_thumbnailed" data-fileid="113630" data-unique="pyqz487f8" style="width: 700px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_12/image-002.thumb.png.be725d2e857df5531b82a19a0e4d2b42.png"></a>
</p>

<p>
	يوضِّح الشكل السابق خطوات إنتاج وتشغيل البرامج المُبرمَجة بلغات عالية المستوى التي تستخدِم <a href="https://stackoverflow.com/a/38491646" rel="external nofollow">نظام التحويل</a> للغات منخفضة المستوى.
</p>

<h2>
	علاقة البرمجة بالذكاء الاصطناعي وتعلم الآلة
</h2>

<p>
	لا تزيد نماذج الذكاء الاصطناعي و<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D9%85%D9%81%D8%A7%D9%87%D9%8A%D9%85-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-r1009/" rel="">تعلّم الآلة</a> عن كونها خوارزميات رياضية تستطيع كتابتها والتعبير عنها على الورق، لكن عندما يتعلق الأمر بتجربة تلك الخوارزميات على أرض الواقع، فإنّ البرمجة هي الوسيلة لتطبيق تلك الخوارزميات، فالمبرمج عادةً هو شخص مهمته صناعة برامج تحل مشكلةً ما بكتابة شيفرة تتكون من عدة خوارزميات، وقد لا يتطلب الأمر خوارزميةً ذكيةً في أغلب الأحيان، ولكن قد يتطلب العمل في بعض البرامج تنفيذ خوارزمية ذكية للتوقع كما يتوقع الإنسان مثلًا أو لأي مهمة أخرى تتطلب ذكاءً بشريًا، إذ يحتاج المبرمج في تلك الحالة إلى خوارزمية ذكاء اصطناعي للتوقُّع مثل الإنسان ليستطيع ترجمة رموزها الرياضية إلى شيفرة برمجية.
</p>

<p>
	الجدير بالذكر أنّ الكثير من الشركات الناشئة التي تدَّعي أنها مدعومة ببرامج وخوارزميات ذكاء اصطناعي مبهرة ليست كذلك بالفعل، ولكنها فقط تدعي ذلك للحصول على التمويل ولأغراض تسويقية كما بيَّنا من قبل عن شركة Hanson Robotics مثلًا، وذلك بناءً على <a href="https://www.mmcventures.com/wp-content/uploads/2019/02/The-State-of-AI-2019-Divergence.pdf" rel="external nofollow">دراسة</a> أجرتها شركة MMC Ventures، فغالبًا ما تكون خوارزميات الذكاء الاصطناعي مجموعةً من الخطوات، وكل خطوة فيها مجموعة من المعادلات الرياضية على بعض المدخلات التي تأتي من الحاسوب أو من البرنامج، وتختلف المعادلات كثيرًا في فحواها وهدفها، وبالتالي تُعَدّ البرمجة حلقة الوصل بين باحثي الذكاء الاصطناعي وبين تطبيق واختبار خوارزمياتهم ومعادلاتهم الرياضية على أرض الواقع.
</p>

<h2>
	الخوارزميات في علوم الحاسوب والبرمجة
</h2>

<p>
	الخوارزميات كما من اسمها مشتقة من اسم العالم المسلم أبو جعفر <a href="https://ar.wikipedia.org/wiki/%D9%85%D8%AD%D9%85%D8%AF_%D8%A8%D9%86_%D9%85%D9%88%D8%B3%D9%89_%D8%A7%D9%84%D8%AE%D9%88%D8%A7%D8%B1%D8%B2%D9%85%D9%8A" rel="external nofollow">محمد بن موسى الخوارزمي</a>، وهو من مدينة خوارزم المشتقة منها كنيته، وخوارزم حاليًا مكان مقسم بين ثلاث دول وهي: أوزباكستان، وكازاخستان، وتركمانستان.
</p>

<p>
	يعتبر من أوائل علماء الرياضيات المسلمين، حيث ساهمت أعماله بدور كبير في تقدم الرياضيات في عصره. اتصل بالخليفة العباسي المأمون، وعمل في بيت الحكمة في بغداد، وكسب ثقة الخليفة إذ ولاه المأمون بيت الحكمة، كما عهد إليه برسم خارطة للأرض عمل فيها أكثر من سبعين جغرافيًا.
</p>

<p>
	قبل وفاته في عام 850م/232هـ المُقدَّر كان الخوارزمي قد ترك العديد من المؤلفات في علوم الرياضيات والفلك والجغرافيا، ومن أهمها: كتاب المختصر في حساب الجبر، والمقابلة الذي يعد أهم كتبه. تُرجمت كتبه بعد ذلك من قبل علماء أوروبا، وتم ترجمة بعض المصطلحات التي كانت شبيهة بشكل كبير للعربية، مثل كلمة الجبر التي تُرجمت إلى Algebra.
</p>

<p>
	يُعَدّ البرنامج الحاسوبي سلسلةً من التعليمات المكتوبة باستخدام لغة البرمجة لأداء مهمة محدَّدة بوساطة الحاسوب، ويوجد مصطلحان مهمان يجب إيضاحهما هما سلسلة التعليمات instructions ولغة البرمجة programming language، ففي المثال الذي ذكرناه في بداية هذا المقال الذي يقول إذا كنت تنتظر صديقًا لك ليزورك، فإنّ التعليمات التي ذكرناها من الممكن كتابتها على الصورة التالية:
</p>

<p>
	عندما تصل إلى ناصية الشارع:
</p>

<ul>
	<li>
		اتجه إلى اليمين
	</li>
	<li>
		امش عشر خطوات
	</li>
	<li>
		اتجه إلى اليمين مرةً أخرى
	</li>
	<li>
		اُدخل أول منزل من جهة اليسار
	</li>
	<li>
		اصعد إلى الدور الثاني
	</li>
</ul>

<p>
	تُعَدّ سلسلة التعليمات أعلاه في الواقع برنامجًا بشريًا مكتوبًا باللغة العربية، والذي يرشِد إلى كيفية الوصول إلى بيتك من نقطة بداية معينة، كما يمكن كتابة تلك السلسلة باللغة الإسبانية أو الهندية أو الإنجليزية أو أيّ لغة بشرية أخرى بشرط معرفة الشخص الذي يسعى للحصول على التوجيه أيًا من تلك اللغات، وكذلك هو الأمر في الحاسوب، فالبرنامج الحاسوبي هو مجموعة من التعليمات المكتوبة بلغة برمجية ينفِّذها الحاسوب، وفيما يلي مثال عن تعليمة مكتوبة بلغة بايثون، وهي أمر للحاسوب بطباعة جملة Hello World على الشاشة.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9416_22" style=""><span class="kwd">print</span><span class="pun">(</span><span class="str">"Hello World"</span><span class="pun">)</span></pre>

<p>
	يمكن أن يتكون البرنامج الحاسوبي من سطر أو تعليمة واحدة إلى ملايين من السطور؛ أما سلسلة التعليمات المكتوبة بلغة برمجة معينة هي ما تُدعى الشيفرة المصدرية للبرنامج source code؛ أما من وجهة نظرالبرمجة الخوارزمية، فهي مجموعة من الخطوات لحل مشكلة ما، ويُعبِّر عنه على أساس مجموعة محدودة من التعليمات، كما أنّ كل تلك التعليمات يمكن تطبيقها والتعبير عنها بلغة البرمجة، كما لا ترتبط الخوارزمية بلغة برمجة معينة، فالخوارزمية هي خطوات مجرَّدة يمكن حتى كتابتها باللغة البشرية ومن ثم تطبيقها بأيّ لغة برمجة مع الأخذ في الحسبان بأنّ كلمة الخوارزمية في البرمجة لها بعض الشروط وهي:
</p>

<ul>
	<li>
		<strong>الخلو من الغموض</strong>: من المهم أن تكون كل خطوة أو كل تعليمة من تعليمات الخوارزمية واضحةً وضوحًا كبيرًا ولا تحمل أكثر من معنى مثل قولنا في تعليمة ما "اجمع س مع ص"، لا أن نقول في إحدى التعليمات "جرب تقريبًا جمع أو طرح س مع ص".
	</li>
	<li>
		<strong>المخرجات</strong>: من المهم أن تُنتج الخوارزمية على الأقل مخرجًا واحدًا نتيجةً واحدةً، فخوارزمية للتوقع مثلًا يجب عليها إنتاج ناتج ما لعملية التوقع في النهاية حتمًا.
	</li>
	<li>
		<strong>منتهية في نقطة ما</strong>: من الضروري انتهاء عمل الخوارزمية بعد إنتاج المخرجات المطلوبة، فلا خوارزمية تعمل بصورة مستمرة إلى الأبد.
	</li>
	<li>
		<strong>الجدوى/إمكانية التطبيق</strong>: يجب أن تعمل الخوارزمية بناءً على الموارد المتاحة، بمعنى أنه لا يمكننا تطبيق خوارزمية تتطلب ذاكرةً تخزينيةً لا يُمكن إنتاجها بالفعل مثل طلب تخزين عدد ذرات الكون.
	</li>
	<li>
		<strong>الاستقلالية</strong>: من الضروري أن تكون الخوارزمية مستقلة عن لغات البرمجة، أي يمكن تطبيقها بأيّ لغة برمجة، فلا يمكن مثلًا أن تعتمد الخوارزمية على مكتبة جاهزة للاستخدام موجودة في إحدى لغات البرمجة، إذ يؤدي ذلك إلى الاعتماد اعتمادًا كليًا على تلك المكتبة، فلا يمكن للخوارزمية أن تعمل على أية لغة برمجة أخرى.
	</li>
</ul>

<p>
	تتكون الخوارزمية من خطوات عدة كما ذكرنا، وتتكون كل خطوة من تعليمة واضحة، كما توجد طرق محدَّدة لتقييم أداء الخوارزمية وتحليلها، وتلك الخطوات مهمة للغاية في حالة خوارزميات الذكاء الاصطناعي، لأن خوارزميات الذكاء الاصطناعي غالبًا ما تطلب في كل تعليمة عددًا ضخمًا جدًا من العمليات الرياضية التي تستهلك الكثير من موارد الحاسوب، ولذلك يلجأ الكثير من مبرمجي تعلّم الآلة والذكاء الاصطناعي إلى استئجار حاسوب فائق الإمكانات عبر الانترنت لتشغيل الخوارزميات، لذلك يُعَدّ تقييم وتحليل أداء الخوارزمية أمرًا مهمًا للباحثين.
</p>

<p>
	توجد طريقتان لتحليل الخوارزميات وهما تحليل نظري مسبَق يفترض جميع العوامل ويفترض أداء الخوارزمية بناءً على الموارد المتاحة في الحاسوب، وتحليل متقدِّم وهو تحليل تجريبي، فبعد تنفيذ الخوارزمية على حاسوب معيَّن بإمكانات معينة، تُجمَّع بيانات حقيقية في تلك الحالة مثل الوقت الذي مرَّ منذ بدء تشغيل الخوارزمية والمساحة المستخدَمة من الذاكرة من قبلها أيضًا، كما يتم حساب وتحليل أداء الخوارزمية حسب عاملين رئيسيين كما ذكرنا وهما الوقت المُستهلك في تنفيذ الخوارزمية على الحاسوب ومساحة ذاكرة الوصول العشوائية RAM القصوى المطلوبة لتعمل الخوارزمية بكفاءة.
</p>

<p>
	يهمنا مما سبق فهم أنّ خوارزميات الذكاء الاصطناعي مثلها مثل باقي الخوارزميات، فهي في الأساس مستقلة عن لغات البرمجة، وهي خوارزميات لديها مدخلات Inputs وتنتهي إلى استخراج مخرجات أو نتائج Outputs، كما تتكون كل تعليمة من تعليمات الخوارزمية من خطوات واضحة ويكون معظمها عمليات رياضية في الغالب، ويمكن تنفيذ جميعها بأيّ لغة برمجة، ومن الجدير بالذكر أنه بالرغم من إمكانية تطبيق أيّ خوارزمية بأيّ لغة برمجة، إلا أنّ ذلك يتطلب من المبرمج فهمًا دقيقًا وعميقًا لكل خطوة من خطوات الخوارزمية ليستطيع تطبيقها حسب اللغة التي يجيدها، لكن يتطلب ذلك من المبرمج فهمًا عميقًا للرياضيات المستخدَمة في معادلات الذكاء الاصطناعي أيضًا لكي يستطيع تطبيقها بلغة البرمجة التي يجيدها.
</p>

<p>
	وليس كذلك هو الحال في جميع لغات البرمجة، إذ طوَّر مبرمجون كثر من مجتمع بايثون حول العالم مكتبات جاهزة للاستخدام تحتوي على دوال Functions جاهزة للاستدعاء فيها الكثير من خوارزميات تعلّم الآلة، أي أنه يمكن لمبرمج بايثون استخدام تلك المكتبات بدلًا من كتابة الخوارزميات بنفسه، لأن ذلك يتطلب كما أوردنا فهمًا عميقًا لكل خطوة من خطوات الخوارزمية التي تحتوي على الكثير من الرياضيات المعقَّدة، لذلك تستطيع تلك المكتبات توفير لك الكثير من المجهود في معظم الأحيان لكي تستطيع استخدام خوارزميات الذكاء الاصطناعي بسهولة دون الدخول في تفاصيل ما يحصل فيما وراء الأحداث.
</p>

<p>
	مع ذلك تملك تلك الطريقة عيوبًا لا تخفى على أحد، فالمبرمج إذا لم يكن مدركًا إدراكًا قويًا لما يحدث وراء الأحداث -أي في الخوارزمية وخطواتها-، وقد تكون نتائج الخوارزمية غير مرضية له على الإطلاق، فخوارزميات الذكاء الاصطناعي وتعلّم الآلة عادةً لها الكثير من المتغيرات التي تتحكم تحكمًا كبيرًا في دقة عمل الخوارزمية ودقة استنتاجاتها، لذلك ينصح الخبراء المبرمجين والمطورين بدراسة الخوارزميات دراسةً عميقةً، ودراسة الرياضيات المطلوبة لذلك على قدر المستطاع حتى يتمكن المبرمج من فهم تلك المتغيرات التي تلعب دورًا مفصليًا في دقة برنامجه.
</p>

<h2>
	لماذا تعلم البرمجة مهم
</h2>

<p>
	تُعَدّ البرمجة حلقة الوصل بين باحثي الذكاء الاصطناعي وبين تطبيق أبحاثهم على أرض الواقع كما أوردنا، لذلك يلعب المبرمجون دورًا مفصليًا في مجال الذكاء الاصطناعي، كما أنّ البرمجة من أفضل المهن من النواحي المستقبلية، فلا يخفى على أحد التحوّل التقني السريع الذي يحدث حول العالم، فالتقنية المعتمدة على الحواسيب والحوسبة اليوم هي عصب حياتنا ودخلت في عمق تفاصيل يومياتنا ولا يخفى ذلك على الناس، فمهن البرمجة أصبحت من أكثر المهن طلبًا، وستصبح أكثر طلبًا بمرور الزمن بالطبع.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A8%D8%B4%D8%B1%D9%8A-%D9%85%D9%82%D8%A7%D8%A8%D9%84-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-r1813/" rel="">الذكاء البشري مقابل الذكاء الاصطناعي</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/learn-programming/" rel="">تعلم البرمجة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">تعلم الذكاء الاصطناعي</a><a href="https://academy.hsoub.com/programming/general/%D9%81%D9%88%D8%A7%D8%A6%D8%AF-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel=""> </a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%81%D9%88%D8%A7%D8%A6%D8%AF-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">فوائد البرمجة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%B9%D9%84%D9%88%D9%85-%D8%A7%D9%84%D8%AD%D8%A7%D8%B3%D9%88%D8%A8/" rel="">المدخل الشامل لتعلم علوم الحاسوب</a>
	</li>
	<li>
		النسخة الكاملة من كتاب <a href="https://academy.hsoub.com/files/17-%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-%D9%88%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9/" rel="">مدخل إلى الذكاء الاصطناعي وتعلم الآلة</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">1814</guid><pubDate>Mon, 12 Dec 2022 18:04:00 +0000</pubDate></item><item><title>&#x627;&#x644;&#x630;&#x643;&#x627;&#x621; &#x627;&#x644;&#x628;&#x634;&#x631;&#x64A; &#x645;&#x642;&#x627;&#x628;&#x644; &#x627;&#x644;&#x630;&#x643;&#x627;&#x621; &#x627;&#x644;&#x627;&#x635;&#x637;&#x646;&#x627;&#x639;&#x64A;</title><link>https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A8%D8%B4%D8%B1%D9%8A-%D9%85%D9%82%D8%A7%D8%A8%D9%84-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-r1813/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_12/63944ff88b841_----.png.bc63b85cac1fa46d4cafc62da667cddf.png" /></p>
<p>
	يصف <a href="https://www.gsb.stanford.edu/insights/andrew-ng-why-ai-new-electricity" rel="external nofollow">الدكتور أندرو Andrew N G</a> عالم الحاسوب في جامعة ستانفورد بالولايات المتحدة نماذج تعلُّم الآلة Machine Learning بأنها كهرباء العصر الحديث، و<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D9%85%D9%81%D8%A7%D9%87%D9%8A%D9%85-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-r1009/" rel="">تعلم الآلة</a> هو نوع من خوارزميات الذكاء الاصطناعي المستنبطة من الرياضيات، والتي بدأت بالانتشار والرواج في العقدين الماضيين، ومع أنّ صفة كهرباء العصر الحديث تلك قد يجدها البعض مبالغًا فيها قليلًا كون كثير من تلك <a href="https://wiki.hsoub.com/Algorithms" rel="external">الخوارزميات</a> معروفة منذ زمن، إلا أنها تشكِّل بالفعل ثورةً علميةً، في حين يقول بروفيسور علوم الحاسوب الألماني فولفجانج ارتل Wolfgang Ertel في كتابه مقدمة إلى الذكاء الاصطناعي introduction to artificial intelligence: "إنَّ تقنيات الذكاء الاصطناعي لها هدف محدد وهو فهم الذكاء وبناء أنظمة ذكية مماثلة، مع ذلك فإنَّ الطرق والأساليب لهذا الهدف ليست محددةً أو قطعيةً بعد؛ ولذلك أصبح الذكاء الاصطناعي يتكون من عدة تخصصات فرعية اليوم".
</p>

<p>
	يثير <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-%D9%85%D8%B1%D8%A7%D8%AD%D9%84-%D8%A7%D9%84%D8%A8%D8%AF%D8%A1-%D9%88%D8%A7%D9%84%D8%AA%D8%B7%D9%88%D8%B1-%D9%88%D8%A7%D9%84%D8%A3%D8%B3%D8%B3-%D8%A7%D9%84%D8%AA%D9%8A-%D9%86%D8%B4%D8%A3-%D8%B9%D9%84%D9%8A%D9%87%D8%A7-r988/" rel="">مصطلح الذكاء الاصطناعي</a> المشاعر، إذ يُعَدّ الذكاء خاصيةً يتميز بها البشر دونًا عن باقي الكائنات، فما هو الذكاء؟ كيف نستطيع قياس الذكاء؟ وكيف يعمل العقل البشري؟ كل تلك اسئلة ذات معنىً وفائدة لمهندسي الذكاء الاصطناعي وعلماء الحاسوب، لكنها ليست سهلة الإجابة ولا قطعيةً كما قد يظن العوام، كما يصعب إعطاء الذكاء الاصطناعي تعريفًا كاملًا دقيقًا، ومع ذلك أول من وضع تعريف له كان جون مكارثي John McCarthy في عام 1955م، حيث قال أنّ الهدف من الذكاء الاصطناعي هو تطوير آلات تتصرف كما لو كانت ذكيةً، لكن يعتقد بعض العلماء بأنَ ذلك التعريف ليس دقيقًا للغاية، ويوصِّف البعض ذلك المصطلح بأنه ببساطة عبارة عن صنع نماذج حسابية للسلوك البشري، فإننا نؤمن بأنّ البشر أذكياء وبناءً على ذلك نفهم نماذج الذكاء، وما علينا سوى فهم تلك السلوكيات ومحاكاتها باستخدام الرياضيات ثم تطبيقها على <a href="https://academy.hsoub.com/programming/general/%D8%B9%D9%84%D9%88%D9%85-%D8%A7%D9%84%D8%AD%D8%A7%D8%B3%D9%88%D8%A8/" rel="">الحاسوب</a>.
</p>

<p>
	من الطرق الأخرى للوصول إلى المبتغى نفسه هو صناعة نماذج حسابية لعمليات التفكير البشري وليس السلوك، إذ أنه لا يكفي أن تبرمِج حاسوبًا يحاكي سلوك البشر، وإنما يجب عليك التفكير مثلهم عن طريق البحث في علم الأعصاب الإدراكي Cognitive Neuroscience، وغالبًا ما تكون استراتيجية البحث قائمةً على تجارب تكشف عما يحدث بداخل رؤوس الناس ومن ثم تطبيق نماذج حسابية تعكس تلك العمليات؛ أما الطريقة الأخيرة في هذا العقد فتكون عن طريق محاكاة ما يجري داخل خلية عصبية واحدة أو ما يُدعى بالشبكة العصبية أو العصبون Neuron، ويبدو ذلك منطقيًا لمعرفتنا بأنَ المخ البشري يتكون من خلايا عصبية، ولكن مع ذلك فهل بالفعل محاكاة الخلايا العصبية تعني محاكاة الذكاء البشري؟ وهل يعني ذلك محاكاة العقل البشري؟ أم فقط الدماغ؟ أم كلاهما؟ لا توجد إجابة قطعية عن تلك التساؤلات حاليًا لدى العلماء.
</p>

<p>
	لدى الكثير من العلماء في مختلف الجامعات تعريفهم الخاص بهم عندما يتعلق الأمر بالذكاء الاصطناعي، إذ تتشابه كلها في المعنى وتختلف في الألفاظ، فمثلًا يُعرَّف لغويًا في <a href="https://www.oed.com/viewdictionaryentry/Entry/271625" rel="external nofollow">معجم أوكسفورد</a> للغة الإنجليزية بأنه نظرية وتطوير أنظمة الحاسوب القادرة على أداء المهام التي تتطلب عادةً الذكاء البشري مثل الإدراك البصري والتعرف على الكلام واتخاذ القرار والترجمة بين اللغات، في حين يقول بروفسور أرتل في كتابه Introduction to artificial intelligence (مقدمة إلى الذكاء الاصطناعي) أنَ أفضل تعريف وُضِع حتى الآن للذكاء الاصطناعي هو التعريف الذي ذكرته الدكتورة إيلين ريتش elaine rich بقولها أنَ الذكاء الاصطناعي هو دراسة كيفية جعل أجهزة الحاسوب تقوم بأشياء يكون الإنسان فيها أفضل في الوقت الحالي، وقد شخَّص هذا التعريف ما كان يفعله باحثو الذكاء الاصطناعي خلال الخمسين عامًا الماضية وحتى لسنوات كثيرة قادمة، أي سيبقى هذا التعريف فعالًا كونه واسع النطاق.
</p>

<p>
	تتمثَّل قوة الأنظمة الحاسوبية في نقاط عدة، من ضمنها التفوق على البشر في إمكانية تطبيق آلاف العمليات الحسابية المعقدة في ثوان معدودة، ومع ذلك يتفوق الإنسان على الحاسوب بفارق شاسع في أشياء أخرى، فعند دخول الشخص مثلًا إلى غرفة ما أو مكان ما لم يدخله من قبل، فسيتعرَّف على ما يحيطه من أشياء في أجزاء من الثانية، ثم سيتمكن من اتخاذ القرارات فورًا أو التفكير في خطة ما للقيام بأمور عدة بصورة منظَّمة، فحتى الآن تُعَدّ مثل تلك المهام -وبناءً على تعريف أي لين ريتش- هدفًا لباحثي الذكاء الاصطناعي، وبناءً على هذا التعريف لا يمكن بناء الأنظمة الحاسوبية الذكية بدون الذكاء والمنطق الإنساني، فهي مرهونة بالذكاء البشري، فلذلك يُعَدّ علم الأعصاب ذا أهمية كبيرة للذكاء الاصطناعي، كما تُعَدّ القدرة على التكيف أيضًا من أقوى نقاط القوة في الذكاء البشري، فنحن قادرون على التكيف مع الظروف البيئية المختلفة وتغيير سلوكنا وفقًا لذلك من خلال التعلّم لأنّ قدرتنا على التعلّم المستمر مذهلة، وبالتالي فإنَّ تعلّم الآلة وفقًا لتعريف ريتش هو من أهم المجالات الفرعية للذكاء الاصطناعي كونه يعتمد على محاكاة عملية التعلم البشرية.
</p>

<p>
	تُعَدّ نصف برامج الحاسوب الحالية ذكيةً بشكل أو بآخر عمومًا، ولا تستطيع العامة في بعض الأوقات التمييز بين <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">تطبيقات الذكاء الاصطناعي</a> والتطبيقات الاعتيادية، فالتطبيقات الاعتيادية رغم أننا نصِفها بالذكية، إلا أنها لا تندرج فعليًا تحت تصنيف الذكاء الاصطناعي، إذ يختلف الأمر كثيرًا عند كتابة برنامج محادثة آلية مثلًا لمساعدة العملاء عند استخدام خوارزميات الذكاء الاصطناعي أو استخدام التعليمات البرمجية الشرطية العادية، ففي حال استخدام التعليمات الشرطية العادية، فسيسلك البرنامج طريقًا واضحًا مرسومًا له يتكون من بضعة أسئلة وإجابات محددة، فإذا ذكر المستخدِم كلمة "الدفع" مثلًا، فاعرض صفحة الدفع، وإذا ذكر كلمة "الخروج"، فسجِّل خروج المستخدِم؛ أما إذا ذكر كلمة "المدفوعات" مثلًا، فلن يكون الحاسوب قادرًا على فهم الأمر لأن مطوِّر البرنامج لم يذكر له تلك الكلمة المفتاحية بالتحديد؛ أي يتكون البرنامج الاعتيادي من مجموعة أوامر لا تنتج ذكاءً ولا تستطيع التصرف في خارج حدودها من الناحية الكمية والنوعية، لذلك من أهم سمات الذكاء الاصطناعي هو محاكاة الذكاء البشري في أمور مثل التعلم والاستنتاج ورد الفعل واتخاذ قرارات لم تكن مبرمجة في الآلة بصورة مباشرة، ومع ذلك فإنَّ تلك القرارات في نهاية الأمر لها حدود نوعية وكمية دائمًا.
</p>

<p>
	يحاول الباحثون دائمًا فهم السلوك البشري عمومًا لمحاولة صياغة أو محاكاة ذلك على الحاسوب، إذ كوِّنت بعض من تلك الأفكار والمبادئ في مجال الشبكات العصبية Neural Networks المستمد من علوم المخ والأعصاب، ويُعَدّ هذا نموذجًا واحدًا من نماذج البحث العلمي في الذكاء الاصطناعي، ومن النماذج الأخرى في البحث توجد ما تُسمى بالنظم هدفية التوجه goal-oriented systems، والتي تبدأ بتحديد المشكلة التي نحاول حلها ثم محاولة إيجاد الحل الأمثل لتلك المشكلة عمومًا وبغض النظر عن آلية حل البشر لمثل تلك المشاكل، وبناءً على ذلك كله فإن المهام في الذكاء الاصطناعي متعددة، والحلول والطرق أيضًا متعددة ومختلفة مثل الطب، حيث تملك الأمراض طرق معالجة وخطوات مداواة مختلفة، وكذلك الذكاء الاصطناعي، فهو يقدِّم لوحةً كبيرةً من مختلف الحلول للكثير من التطبيقات مثل صيدلية تحتوي على دواء خاص لكل مرض؛ أما العلوم المعرفية Cognitive Science فهي علوم مكرسة للبحث في تفكير الإنسان، وهي على مستوى أعلى من علوم المخ والأعصاب، أي لا تبحث بالضرورة في تفاعلات الدماغ المادية، كما تُعَدّ من العلوم المهمة أيضًا التي تقدِّم حلولًا ونماذج فعالة للذكاء الاصطناعي.
</p>

<p>
	توجد الكثير من الأسئلة الفلسفية الخاصة بالذكاء الاصطناعي التي تطرأ عندما نحاول محاكاة تفكير الإنسان أو محاكاة دماغه، فيرى بعض الفلاسفة أنَّ الوعي والعقل مرتبطان بالدماغ، وبعضهم يستشكلون ذلك؛ أما البتُّ بتطابق العقل والمخ فهو استكشالي إلى حد كبير، فلم يستطع العلم التجريبي الولوج في أمور عدة حتى الآن مثل النية والضمير والوعي والتفكير في الأخلاق وغير ذلك، وبناءً على ذلك فإننا نستطيع تفهُّم تسخيف المسخِّفين لفكرة الإنسان الآلي المدمِّر للبشرية التي تصر السينما العالمية عليها، ففكرة الإنسان الآلي الواعي فكرة خيالية لا وجود لها سوى في سيناريوهات أفلام هوليوود، وذلك لأننا بعيدون جدًا عن تحقيق ذلك حتى الآن، ومع ذلك فهي أفكار تُطرَح من قِبل الفلاسفة بالفعل لأن فكرة الذكاء دون وعي مشكلة إلى حد مفهوم.
</p>

<h2>
	ظاهرة تأثير الذكاء الاصطناعي
</h2>

<p>
	ما يُمكن تصنيفه واعتبار كونه ذكاءً اصطناعيًا ليس بالأمر الواضح الجلي في معظم الأوقات، حيث يتغيّر تفسير مصطلح الذكاء الاصطناعي على الأغلب بمرور الوقت والسنوات، فمنذ عدة عقود كان يَعُدّ البشر ما تفعله الآلات في يومنا هذا ذكاءً اصطناعيًا متقدمًا، ولكن عند بلوغنا لما نحن فيه فسنشعر نحن البشر بأنَّ ذلك لم يكن حقًا ذكيّا، حيث يُدعى ذلك بتأثير الذكاء الاصطناعي Artificial Intelligence Effect.
</p>

<p>
	ففي عام 1997م مثلًا عندما فاز الحاسوب Deep Blue الذي صنعته شركة IBM على بطل العالم في الشطرنج جاري كاسباروف Garry Kasparov، كانت هنالك أصوات تصدح بأنَّ ذلك لم يكن حقًا ذكاءً، وإنما كان ما يُدعى بالقوة الغاشمة Brute Force، وهي تقنية لحل المشكلات عبر تجربة كل الاحتمالات، والتحقق من مآلات كل احتمال، كما يظهر ذلك التأثير جليًا عبر تاريخ تطور الذكاء الاصطناعي وتطبيقاته، ولذلك يقول دوجلاس هوفستادتر Douglas Hofstadter -هو عالم أمريكي متخصص في الفيزياء وعلوم الإدراك- أنّ الذكاء الاصطناعي هو ما لم يُحقَّق بعد.
</p>

<h2>
	مختصر تاريخ الذكاء الاصطناعي
</h2>

<p>
	نسرد في الجدول التالي بعضًا من <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-%D9%85%D8%B1%D8%A7%D8%AD%D9%84-%D8%A7%D9%84%D8%A8%D8%AF%D8%A1-%D9%88%D8%A7%D9%84%D8%AA%D8%B7%D9%88%D8%B1-%D9%88%D8%A7%D9%84%D8%A3%D8%B3%D8%B3-%D8%A7%D9%84%D8%AA%D9%8A-%D9%86%D8%B4%D8%A3-%D8%B9%D9%84%D9%8A%D9%87%D8%A7-r988/" rel="">العناوين المؤرِّخة للذكاء الاصطناعي</a> من بداية القرن العشرين حتى بداية القرن الحالي.
</p>
<style type="text/css">
table {
    width: 100%;
}

thead {
    vertical-align: middle;
    text-align: center;
} 

td, th {
    border: 1px solid #dddddd;
    text-align: right;
    padding: 8px;
    text-align: inherit;

}
tr:nth-child(even) {
    background-color: #dddddd;
}</style>
<table>
	<thead>
		<tr>
			<th>
				العام
			</th>
			<th>
				الحدث
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>
				1937م
			</td>
			<td>
				أظهر الآن تورنج Alan Turing حدود ذكاء الآلات عبر <a href="http://www.cs.toronto.edu/~hehner/PHP.pdf" rel="external nofollow">مشكلة التوقف</a> The Halting Problem، وهي مشكلة تحديد ما إذا سينتهي البرنامج الحاسوبي أو سيعمل إلى الأبد، كما أثبت استحالة وجود خوارزمية عامة لحل تلك المشكلة.
			</td>
		</tr>
		<tr>
			<td>
				1943م
			</td>
			<td>
				صاغ وارن مكولتش Warren MuCulloch وولتر بيتس Walter Pitts نموذج شبكة عصبية صنعية أو عصبون صنعي Artificial Neuron.
			</td>
		</tr>
		<tr>
			<td>
				1950م
			</td>
			<td>
				وضع الآن تورنج تعريفًا لذكاء الآلة عبر ما عُرِف باختبار تورنج Turing Test، وكتب عن تعلم الآلة والخوارزميات الجينية.
			</td>
		</tr>
		<tr>
			<td>
				1951م
			</td>
			<td>
				استطاع مارفين مينسكي Marvin Minsky تطوير آلة شبكة عصبية عبر ٣٠٠ أنبوبًا مفرَّغًا حاكى ٤٠ عصبونًا.
			</td>
		</tr>
		<tr>
			<td>
				1955م
			</td>
			<td>
				بنى آرثر صامويل Arthur Samuel من شركة IBM برنامجًا للعب الشطرنج.
			</td>
		</tr>
		<tr>
			<td>
				1956م
			</td>
			<td>
				نظَّم جون مكارثي John Mccarthy ندوةً في كلية دارتموث Dartmouth في الولايات المتحدة، وقدَّم لأول مرة مفهوم الذكاء الاصطناعي.
			</td>
		</tr>
		<tr>
			<td>
				1958م
			</td>
			<td>
				اخترع مكارثي في معهد ماساشوستس للتقنية لغة البرمجة LISP.
			</td>
		</tr>
		<tr>
			<td>
				1961م
			</td>
			<td>
				اخترع كل من Herbert A. Simon وJ. C. Shaw وAllen Newell أداةً اسمها حل المشكلات العامة General Problem Solver، حيث تستطيع حل بعض المشكلات التي يمكن وصفها رياضيًا على صورة معادلات مثل لعبة أو أحجية برج هانوي، وهي لعبة يمكن وصفها بالرياضيات؛ ومع ذلك فهي أداة لا تستطيع حل أيّ مشكلة من مشكلات العالم الحقيقي.
			</td>
		</tr>
		<tr>
			<td>
				1963م
			</td>
			<td>
				أسس مكارثي مختبر الذكاء الاصطناعي في جامعة ستانفورد.
			</td>
		</tr>
		<tr>
			<td>
				1966م
			</td>
			<td>
				أسس جوزيف فايزنباوم Joseph Weizenbaum برنامج Eliza الذي حاور الناس لأول مرة عبر اللغات الطبيعية بعد عمل دام سنتين في معهد ماساشوستس للتقنية.
			</td>
		</tr>
		<tr>
			<td>
				1969م
			</td>
			<td>
				أظهر مارفين مينسكي Marvin Minsky وسيمور بابرت Seymour Papert في كتابهما Perceptrons شبكةً عصبونيةً بسيطةً جدًا يمكن التعبير عنها بالدوال الخطيّة.
			</td>
		</tr>
		<tr>
			<td>
				1972م
			</td>
			<td>
				اخترع العالم الفرنسي آلان كولميرور Alain Colmerauer لغة برمجة المنطق PROLOG.
			</td>
		</tr>
		<tr>
			<td>
				1976م
			</td>
			<td>
				طور شورتليف Shortliffe وبوكانان Buchanan برنامج MYCIN، وهو نظام خبير لتشخيص الأمراض المعدية وقادر على التعامل مع عدم اليقين.
			</td>
		</tr>
		<tr>
			<td>
				1986م
			</td>
			<td>
				نشر تيرينس سيجنوفسكي Terrence J. Sejnowski وتشارلز روزنبرج Charles R. Rosenberg <a href="https://papers.cnl.salk.edu/PDFs/NETtalk_%20A%20Parallel%20Network%20That%20Learns%20to%20Read%20Aloud%201988-3562.pdf" rel="external nofollow">ورقةً بحثيةً في معهد Salk للدراسات البيولوجية</a> عن نظام Nettalk الذي يستطيع التعلُّم ليقرأ النصوص.
			</td>
		</tr>
		<tr>
			<td>
				1993م
			</td>
			<td>
				مبادرة RoboCup العالمية لبناء روبوتات مستقلة للعب كرة القدم.
			</td>
		</tr>
		<tr>
			<td>
				1997م
			</td>
			<td>
				يهزم حاسوب الشطرنج DeepBlue من IBM بطل العالم في الشطرنج غاري كاسباروف Garry Kasparov، وحدوث أول مسابقة RoboCup دولية في اليابان.
			</td>
		</tr>
	</tbody>
</table>

<h2>
	هل الذكاء الاصطناعي خطر؟
</h2>

<p>
	يكمن خطر الذكاء الاصطناعي في الواقع ومن وجهة نظر الكثيرين في نقطتين أولهما خطر التفرد التكنولوجي، وثانيهما خطر الخصوصية والاقتصاد؛ أما أولهما فهي فكرة غريبة بعض الشيء، وهي أن تُصنَّع خوارزميات قادرة على تطوير نفسها بنفسها إلى ما لا نهاية، وفي الحقيقة فإنَّ الفكرة نفسها فيها إشكالية كبيرة لا مساحة للخوض فيها، ولقب التفرد مأخوذ من تفرد الجاذبية، وهي الظاهرة التي تحدث في مركز الثقوب السوداء، كما هي نقطة أحادية البعد كثيفة بلا حدود، حيث تبدأ قوانين الفيزياء كما نفهمها في الانهيار تمامًا، فليس لدينا رؤية واضحة ولا أية معرفة لما يحدث في أفق الثقوب السوداء، وبالمثل فإنَّ صناعة خوارزمية تطوِّر نفسها بنفسها إلى ما لا نهاية أمر لا نعرف عن حقيقته شيء.
</p>

<p>
	أما بعيدًا عن ذلك الخطر الوجودي، فلا يتوقف الأمر عند هذا الحد، فبرامج الذكاء الاصطناعي عمومًا تمثِّل تحديًا وخطرًا على الخصوصية وخطرًا على الاقتصاد الإنساني والكرامة الإنسانية كما تُوصَف في بعض المقالات، ويتجلى خطر الخصوصية وضوحًا في بعض البرامج التي تستخدِمها الشركات في قراءة الرسائل البريدية للمستخدِمين لفهمها واستنباط أنماط وإحصائيات منها، كما تتمثل أيضًا في برامج التحدث التي تسجِّل الصوتيات وفهم اللغات الطبيعية البشرية، إذ تحاول كافة الشركات الحصول على أكبر قدر من البيانات حتى ولو كان ذلك على حساب خصوصية مستخدِميها.
</p>

<p>
	أما الخطر الاقتصادي فقد بدا واضحًا منذ الثورة الصناعية والثورة التقنية التي بدأ فيها رجال الأعمال باستبدال العامل الآلي بالعامل البشري دون النظر إلى مخاطر هذا الاستبدال على المستقبل البعيد من إضعاف القوة الشرائية للكثير من الناس الذين هم في الأساس المستهلكون الحقيقيون لمنتجات تلك المصانع وخدمات تلك الشركات، فبدأنا نسمع بمطاعم لا تعمل فيها سوى الآلات، ومحلات تجارية ذكية مدعومة ببرامج وأجهزة في كل ركن من أركانها لتحل محل العمال، وفي حقيقة الأمر أنَّ معظم تلك النظم في الشركات والمصانع لا تحتاج أصلًا إلى ذكاء اصطناعي بالمعنى العلمي، فمعظم تلك الحالات عبارة عن آلات مبرمجة خصيصًا لهدف ومهمة محدَّدة.
</p>

<p>
	لمن المُهين من وجهة نظر الكثيرين أن نرى يومًا ما استبدال الآلات والبرامج الذكية منها وغير الذكية بوظائف مرموقة مثل المحاماة التي تبدو من تلك المهن المستهدَف غزوها من قبل مبرمجي الذكاء الاصطناعي، وكذلك من المُهين رؤية طبيب آلي وجراح آلي وقاضي آلي وشُرطي آلي في المستقبل كما تُعَدّ احتمالية استبدال تطبيقات الذكاء الاصطناعي ببعض المهن عاليةً جدًا بحلول عام 2035م بحسب <a href="https://www.bbc.com/news/technology-33327659" rel="external nofollow">تقرير شبكة الإذاعة البريطانية BBC المُعَد سنة 2015م</a>، فاحتمالية استبدال مهنة النادل 90% والمحاسب القانوني بنسبة 95% وعامل الاستقبال بنسبة 96% وسائق سيارات الأجرة بنسبة 57%.
</p>

<p>
	يحذِّر عدد لا بأس به من رجال الأعمال والمبتكرين مثل أيلون ماسك مرارًا وتكرارًا من الأخطار المحتمَلة للذكاء الاصطناعي مع إدراكهم التام بأنَّ ما توصَّل إليه البشر حتى الآن لا يشكل أي خطر حقيقي ولا حتى في المستقبل القريب، ومع ذلك فإنَّ أيلون ماسك يحذِّر من خطوات العلماء وشغفهم للوصول إلى تلك النقطة التي لا يعتقد هو أنهم يدركون كافة جوانبها، في حين يعتقد البعض مثل <a href="https://futurism.com/stephen-hawking-ai-replace-humans" rel="external nofollow">ستيفن هوكينج</a> أنه إذا اكتسب الذكاء الاصطناعي المتقدِّم يومًا ما القدرة على إعادة تصميم نفسه بمعدل متزايد، فقد يؤدي ذلك إلى انفجار ذكائي لا يمكن إيقافه حتى الانقراض التام للإنسان، ومع أنّ أيلون ماسك نفسه يصف الذكاء الاصطناعي بأنه أكبر خطر وجودي للبشرية، إلا أنه أسس شركة OpenAI على صورة منظمة غير ربحية مع شركاء آخرين حتى يتمكن من تركيز أبحاث المنظمة على تطوير ذكاء اصطناعي إيجابي لا يمثِّل خطرًا على الإنسان.
</p>
<div class="banner-container ipsBox ipsPadding">
    <div class="inner-banner-container">
            <p class="banner-heading">
                    دورة الذكاء الاصطناعي
            </p>



            <p class="banner-subtitle">
        احترف برمجة الذكاء الاصطناعي AI وتحليل البيانات وتعلم كافة المعلومات التي تحتاجها لبناء نماذج ذكاء اصطناعي متخصصة.
            </p>

            <div>
                    <a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://academy.hsoub.com/learn/artificial-intelligence" rel="">اشترك الآن</a>
            </div>
    </div>
<div class="banner-img"> <a href="https://academy.hsoub.com/learn/artificial-intelligence" rel=""><img alt="دورة الذكاء الاصطناعي AI" src="https://academy.hsoub.com/learn/assets/images/courses/artificial-intelligence.png"></a></div>
</div>
<h2>
	إشكالية الوعي في الذكاء الاصطناعي
</h2>

<p>
	ما نستفيدهُ من النقاشات الفلسفية والعلمية الأكاديمية هو أنَّ الذكاء البشري الذي يُعَدّ جزءًا ركيزيًا في العقل البشري من الصعب جدًا فهمه فهمًا كاملًا من قِبَل الأكاديميين والعلماء؛ لذلك وبالرغم من بدء المجال البحثي في الذكاء الاصطناعي منذ منتصف القرن الماضي إلا أنَّ التطور يُعَدّ محدودًا، وعمومًا حتى في ذروة تقدُّم المجال البحثي وذروة تقدُّم الذكاء الاصطناعي، فكل الخوارزميات في نهاية الأمر تتعلق بأساليب وظيفية تتمحور حول القيام بمهمة واحدة معينة فقط.
</p>

<p>
	تستطيع طبعًا برمجة تطبيق شامل فيه أكثر من برنامج حاسوبي لأداء العديد من المهام في الوقت نفسه مثل برنامج لقراءة المدخلات الصوتية، بحيث يستطيع الحاسوب فهم ما يتحدث به غيره ليعالج ذلك على أساس مدخلات في برنامجه، وبرنامج آخر لقراءة تلك المدخلات لصياغة نص للرد، وبرنامج آخر لتحويل نص الرد إلى صوت مرةً أخرى لتشغيله، وبذلك نكون قد صنعنا تطبيقًا مناسبًا لإنسان آلي يستطيع سماع بعض الجمل لتحويلها إلى نصوص، لتعالَج رياضيًا لاستخراج وصياغة مخرجات، ولكن مع ذلك فلا يستطيع الإنسان الآلي بأي حال من الأحوال إنتاج ذكاء في مهمات أخرى وبخوارزميات أخرى غير تلك الخوارزميات التي أُدخلت إليه من قِبَل المبرمج لفعل أمر معيّن مثل معالجة نص ما أو معالجة مدخلات مطلوبة لتوقع نتيجة ما، حتى مع أساليب الذكاء الاصطناعي الحالية فإنتاج ذكاء في مهام أخرى يمكن أن يتطلب وعيًا أو نوعًا من الإرادة.
</p>

<p>
	بُرمِجت برامج للإنسان الآلي في مثالنا السابق تحاكي تلك الوظائف الموجودة في جسم الإنسان مثل برنامج لاستقبال الأصوات وبرنامج لترجمة الأصوات إلى لغة الآلة وبرنامج تحليل النصوص …إلخ، لكن في حالة عُطل أي برنامج من تلك المنظومة التي تربط بعضها بعضًا، فهو حكم بالموت على المنظومة بكاملها؛ أما في حالة الإنسان، فعُطل حاسة ما في كل الأحوال لا يمُيت باقي حواسه ولا يؤثر ذلك على وعيه، ومنذ آلاف السنين يتحدث الفلاسفة عن الوعي، ولا يكاد فيلسوف يوافق الآخر على مفهوم فلسفي صحيح للوعي، فما بالك أصلًا بافتراض وجود حس للوعي يستطيع العلماء محاكاتها رياضيًا لإنتاج الوعي حاسوبيًا؟ إذ لم يستطع باحثو الذكاء الاصطناعي حتى تاريخ كتابة هذا الكتاب فهم الوعي البشري بعد تطور مجال الذكاء الاصطناعي وخاصةً تعلّم الآلة وبالأخص أيضًا <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-%D9%84%D9%81%D9%87%D9%85-%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%B9%D9%85%D9%8A%D9%82-r1422/" rel="">التعلّم العميق Deep Learning</a> والشبكات العصبية التي تحاكي الخلايا العصبونية في المخ، رغم أننا الآن فعليًا نستطيع محاكاة خلية من الدماغ عبر ما يُدعى ببرمجة الشبكات العصبية، لكن لا يزيد الأمر عن خوارزميات رياضية مستخدَمة لتوقُّع مخرجات في مَهمة معينة في تعلم الآلة ومثلها خوارزميات تحاكي خليةً واحدةً من خلايا المخ.
</p>

<p>
	أحد الفوارق بين النماذج التي أقصدها هنا بالواعية وغير الواعية هو أنَّ غير الواعية لديها حدود كمية ونوعية دائمًا كما هو الأمر في نماذج الذكاء الاصطناعي، فمن أهم النماذج التي سأذكرها في الكتاب مثلًا نماذج التصنيف أو المُصنِّفات التي هي خوارزمية تعلّم آلة تستطيع من خلالها إنتاج تصنيفات فقط حسبما بُرمجَت عليه، فقد يستخدمها الإنسان مثلًا في مهام مثل تصنيف الرسائل البريدية لتكون مزعجةً أم لا، أو تصنيف نوع سرطان خبيث أم حميد، لكن لا تستطيع الخوارزمية بأيّ حال من الأحوال فهم أو معالجة أمر لم تبرمَج عليه، فإذا كان لدينا برنامج يستطيع تحليل صور الأشعة الطبية لتحديد نوع السرطان الموجود فيها، فسيفترض النموذج دائمًا أنَّ مُدخلاته أشعة طبية، فلن يدرك البرنامج إذا أدخلتَ صورتك الشخصية للنموذج أنَّ تلك الصورة دخيلة عليه إذا لم يُبرمَج على ذلك، وبالتالي سيخبرك البرنامج بتوقعه لنوع السرطان بناءً على تلك الصورة غير الصحيحة أصلًا، فهو في النهاية محدود الأهداف والقدرة، حيث بُرمِج وصُنع لهدف ثابت ومحدد وهو توقُّع تصنيف السرطان حسب خوارزمية مستنبَطة من علم الإحصاء والجبر الخطي والتفاضل والتكامل وليس لديه وعي لذاته.
</p>

<p>
	يقول <a href="https://www.theverge.com/2017/11/10/16617092/sophia-the-robot-citizen-ai-hanson-robotics-ben-goertzel" rel="external nofollow">بين جورتزل</a> Ben Goertzel وهو أحد علماء شركة Hanson Robotics المصنعة للروبوت صوفيا الشهير أنَّ الروبوت يضايق المتخصصين لأنه يعطي للعامة إحساسًا بأننا بالفعل توصَّلنا لذكاء اصطناعي مشابه لذكاء الإنسان، وهذا بالطبع ليس صحيحًا أبدًا، فبالرغم من كون جورتزل من المتفائلين باستطاعة البشر يومًا ما خلال العقدين القادمين صناعة ذكاء اصطناعي عام AGI اختصارًا لمصطلح Artificial General Intelligence، إلا أنه يعترف بأنَّ الروبوت صوفيا ما هي إلا برنامج دردشة مدهش.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">تعلم الذكاء الاصطناعي</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-%D8%A3%D9%87%D9%85-%D8%A7%D9%84%D8%A5%D9%86%D8%AC%D8%A7%D8%B2%D8%A7%D8%AA-%D9%88%D8%A7%D9%84%D8%A7%D8%AE%D8%AA%D8%B1%D8%A7%D8%B9%D8%A7%D8%AA-%D9%88%D9%83%D9%8A%D9%81-%D8%A3%D8%AB%D8%B1%D8%AA-%D9%81%D9%8A-%D8%AD%D9%8A%D8%A7%D8%AA%D9%86%D8%A7-%D8%A7%D9%84%D9%8A%D9%88%D9%85%D9%8A%D8%A9-r975/" rel="">الذكاء الاصطناعي: أهم الإنجازات والاختراعات وكيف أثرت في حياتنا اليومية</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A8%D9%86%D8%A7%D8%A1-%D8%B4%D8%A8%D9%83%D8%A9-%D8%B9%D8%B5%D8%A8%D9%8A%D8%A9-%D9%84%D9%84%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D8%A3%D8%B1%D9%82%D8%A7%D9%85-%D8%A7%D9%84%D9%85%D9%83%D8%AA%D9%88%D8%A8%D8%A9-%D8%A8%D8%AE%D8%B7-%D8%A7%D9%84%D9%8A%D8%AF-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D9%85%D9%83%D8%AA%D8%A8%D8%A9-tensorflow-r1267/" rel="">بناء شبكة عصبية للتعرف على الأرقام المكتوبة بخط اليد باستخدام مكتبة TensorFlow</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%B4%D8%A8%D9%83%D8%A9-%D8%B9%D8%B5%D8%A8%D9%8A%D8%A9-%D8%B5%D9%86%D8%B9%D9%8A%D8%A9-%D9%88%D8%AA%D8%AF%D8%B1%D9%8A%D8%A8%D9%87%D8%A7-%D9%84%D9%84%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D9%88%D8%AC%D9%88%D9%87-r1198/" rel="">إعداد شبكة عصبية صنعية وتدريبها للتعرف على الوجوه</a>
	</li>
	<li>
		النسخة الكاملة من كتاب <a href="https://academy.hsoub.com/files/17-%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-%D9%88%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9/" rel="">مدخل إلى الذكاء الاصطناعي وتعلم الآلة</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">1813</guid><pubDate>Fri, 09 Dec 2022 16:07:00 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641; &#x62A;&#x628;&#x62F;&#x623; &#x641;&#x64A; &#x645;&#x62C;&#x627;&#x644; &#x627;&#x644;&#x630;&#x643;&#x627;&#x621; &#x627;&#x644;&#x627;&#x635;&#x637;&#x646;&#x627;&#x639;&#x64A;</title><link>https://academy.hsoub.com/programming/artificial-intelligence/%D9%83%D9%8A%D9%81-%D8%AA%D8%A8%D8%AF%D8%A3-%D9%81%D9%8A-%D9%85%D8%AC%D8%A7%D9%84-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-r2075/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_08/aca-----(1).png.3eb84d71a459bcfb98419d16c486b80f.png" /></p>
<p>
	سنتحدث في هذا الفيديو عن الذكاء الاصطناعي AI أو Artificial Intelligence وسنذكر لكم أشهر أقسام وتفرعات الذكاء الاصطناعي كما سنعرض سريعًا تاريخه وسنتطرق لأسباب ازدهاره في الوقت الراهن وسنذكر أشهر تطبيقاته وأخيرًا سنرسم لك مسار تعلم الذكاء الاصطناعي من الصفر.
</p>

<p>
	<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" frameborder="0" height="603" id="ips_uid_5178_6" src="https://academy.hsoub.com/applications/core/interface/index.html" title="كيف تبدأ في مجال الذكاء الاصطناعي" width="1072" data-embed-src="https://www.youtube.com/embed/GeJTSuIW25s"></iframe>
</p>

<p>
	انضم الآن إلى <a href="https://academy.hsoub.com/learn/artificial-intelligence/" rel="">دورة الذكاء الاصطناعي AI</a> وتعلم كيفية بناء تطبيقات ذكية تستفيد من مختلف النماذج اللغوية الكبيرة LLMs مثل GPT من OpenAI و LLaMA 2 من Meta وتطبق مبادئ تعلم الآلة Machine Learning والتعلم العميق Deep Learning بأسلوب شيق وعملي يفيدك في سوق العمل.
</p>

<p>
	ولا تنسَ الاستعانة خلال رحلة تعلمك وعملك بتوثيقات <a href="https://wiki.hsoub.com/%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A9_%D8%A7%D9%84%D8%B1%D8%A6%D9%8A%D8%B3%D9%8A%D8%A9" rel="external">موسوعة حسوب</a> المجانية. وإذا أردت متابعة المعلومات البرمجية العلمية مكتوبة فيمكنك الاطلاع على <a href="https://academy.hsoub.com/programming/" rel="">قسم البرمجة في أكاديمية حسوب</a>، كما يمكنك متابعة جديد الفيديوهات التقنية المتاحة على <a href="https://www.youtube.com/@HsoubAcademy" rel="external nofollow">يوتيوب أكاديمية حسوب</a> مجانًا.
</p>

<div class="banner-container ipsBox ipsPadding">
    <div class="inner-banner-container">
            <p class="banner-heading">
                    دورة الذكاء الاصطناعي
            </p>



            <p class="banner-subtitle">
        احترف برمجة الذكاء الاصطناعي AI وتحليل البيانات وتعلم كافة المعلومات التي تحتاجها لبناء نماذج ذكاء اصطناعي متخصصة.
            </p>

            <div>
                    <a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://academy.hsoub.com/learn/artificial-intelligence" rel="">اشترك الآن</a>
            </div>
    </div>
<div class="banner-img"> <a href="https://academy.hsoub.com/learn/artificial-intelligence" rel=""><img alt="دورة الذكاء الاصطناعي AI" src="https://academy.hsoub.com/learn/assets/images/courses/artificial-intelligence.png"></a></div>
</div>
]]></description><guid isPermaLink="false">2075</guid><pubDate>Wed, 02 Nov 2022 15:00:00 +0000</pubDate></item><item><title>&#x645;&#x627;&#x630;&#x627; &#x64A;&#x639;&#x646;&#x64A; &#x62A;&#x639;&#x644;&#x645; &#x627;&#x644;&#x622;&#x644;&#x629;&#x61F;</title><link>https://academy.hsoub.com/programming/artificial-intelligence/%D9%85%D8%A7%D8%B0%D8%A7-%D9%8A%D8%B9%D9%86%D9%8A-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9%D8%9F-r2074/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_08/aca---(1).png.92dad3beb2028c3a5e953afc7bd1e559.png" /></p>
<p>
	سنشرح في هذا الفيديو ما هو تعلم الآلة، ولماذا نريد من الآلات أن تتعلم، وسنتعرف على المكونات الرئيسية لتعلم الآلة مثل البيانات و المعاملات أو المتغيرات وسنشرح مفهوم الخوارزميات باختصار وأهميتها هنا مع توضيح الفروقات بين مفاهيم الذكاء الاصطناعي مثل علوم الحاسب و الذكاء الاصطناعي و تعلم الآلة و الشبكات العصبية الاصطناعية و التعلم العميق.
</p>

<p>
	<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" frameborder="0" height="603" id="ips_uid_89_6" src="https://academy.hsoub.com/applications/core/interface/index.html" title="ماذا يعني تعلم الآلة" width="1072" data-embed-src="https://www.youtube.com/embed/7up0GP1Y8aM"></iframe>
</p>

<p>
	إذا أردت التعرف أكثر على تعلم الآلة، فننصحك بالانضمام إلى <a href="https://academy.hsoub.com/learn/artificial-intelligence/" rel="">دورة الذكاء الاصطناعي AI</a>، ولا تنسَ الاستعانة خلال رحلة تعلمك وعملك بتوثيقات <a href="https://wiki.hsoub.com/%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A9_%D8%A7%D9%84%D8%B1%D8%A6%D9%8A%D8%B3%D9%8A%D8%A9" rel="external">موسوعة حسوب</a> المجانية. وإذا أردت متابعة المعلومات البرمجية العلمية مكتوبة فيمكنك الاطلاع على <a href="https://academy.hsoub.com/programming/" rel="">قسم البرمجة في أكاديمية حسوب</a>، كما يمكنك متابعة جديد الفيديوهات التقنية المتاحة على <a href="https://www.youtube.com/@HsoubAcademy" rel="external nofollow">يوتيوب أكاديمية حسوب</a> مجانًا.
</p>

<div class="banner-container ipsBox ipsPadding">
	<div class="inner-banner-container">
		<p class="banner-heading">
			دورة الذكاء الاصطناعي
		</p>

		<p class="banner-subtitle">
			احترف برمجة الذكاء الاصطناعي AI وتحليل البيانات وتعلم كافة المعلومات التي تحتاجها لبناء نماذج ذكاء اصطناعي متخصصة.
		</p>

		<div>
			<a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://academy.hsoub.com/learn/artificial-intelligence" rel="">اشترك الآن</a>
		</div>
	</div>

	<div class="banner-img">
		<a href="https://academy.hsoub.com/learn/artificial-intelligence" rel=""><img alt="دورة الذكاء الاصطناعي AI" src="https://academy.hsoub.com/learn/assets/images/courses/artificial-intelligence.png"></a>
	</div>
</div>
]]></description><guid isPermaLink="false">2074</guid><pubDate>Tue, 04 Oct 2022 15:00:00 +0000</pubDate></item><item><title>&#x62A;&#x642;&#x64A;&#x64A;&#x645; &#x648;&#x627;&#x62E;&#x62A;&#x64A;&#x627;&#x631; &#x646;&#x645;&#x627;&#x630;&#x62C; &#x62A;&#x639;&#x644;&#x645; &#x627;&#x644;&#x622;&#x644;&#x629;</title><link>https://academy.hsoub.com/programming/artificial-intelligence/%D8%AA%D9%82%D9%8A%D9%8A%D9%85-%D9%88%D8%A7%D8%AE%D8%AA%D9%8A%D8%A7%D8%B1-%D9%86%D9%85%D8%A7%D8%B0%D8%AC-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-r1635/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_07/62e2ad8d360b3_----.jpg.d2fa5415b1290d5cbb2b3a3f21657aa8.jpg" /></p>
<p>
	تُعدّ مسألة تقييم نماذج تعلم الآلة، أي حساب مجموعة من مقاييس تقييم الأداء والتي تُبرهن على وصول النموذج المُتعلم إلى درجة جيدة من التعلم وبحيث يُمكن الاعتماد عليه واستخدامه في مسألة ما، أمرًا أساسيًا في مسائل <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D9%85%D9%81%D8%A7%D9%87%D9%8A%D9%85-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-r1009/" rel="">تعلم الآلة</a>.
</p>

<p>
	تسمح هذه المقاييس، في نهاية المطاف، بالمقارنة بين مختلف نماذج التعلم المُمكن استخدامها (والتي يولد كل منها باستخدام <a href="https://academy.hsoub.com/programming/advanced/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AE%D9%88%D8%A7%D8%B1%D8%B2%D9%85%D9%8A%D8%A7%D8%AA-r1282/" rel="">خوارزمية</a> ما معينة)، مما يسمح باختيار الأنسب منها.
</p>

<p>
	نعرض في هذه المقالة مجموعة المقاييس الأكثر استخدامًا لتقييم نماذج تعلم التصنيف classification وتقييم نماذج الانحدار regression ومن ثم نعرض كيفية المقارنة بين عدة نماذج تعلم ممكنة واختيار الأفضل منها.
</p>

<h2>
	مقاييس تقييم نماذج تعلم التصنيف
</h2>

<p>
	تهدف نماذج تعلم التصنيف إلى بناء مُصنف يُمكن استخدامه لتصنيف غرض ما إلى صف مُعين مثلًا ليكن لدينا مسألة تعلم تصنيف صورة إلى كلب أو قط، وبفرض أن لدينا عشرة صور لها قيم الصفوف التالية (كلب أم قط):
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_298_7" style=""><span class="typ">Actual</span><span class="pln"> values </span><span class="pun">=</span><span class="pln">      </span><span class="pun">[</span><span class="str">'cat'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'dog'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'cat'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'dog'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'cat'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'cat'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'dog'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'cat, '</span><span class="pln">dog</span><span class="str">', '</span><span class="pln">cat</span><span class="str">']</span></pre>

<p>
	وبفرض أن نموذج تصنيف أعطى التصنيفات التالية لنفس الصور (ندعوها عادًة تنبؤ نموذج التعلم):
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_298_9" style=""><span class="typ">Predicted</span><span class="pln"> values </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="str">'cat'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'cat'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'cat'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'dog'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'cat'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'cat'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'dog'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'dog'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'dog'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'dog'</span><span class="pun">]</span></pre>

<p>
	من الواضح أن نموذج التصنيف أصاب في بعض الحالات وأخطأ في البعض الآخر. والسؤال المطروح هنا بشكل أساسي: ما كفاءة (تقييم) هذا النموذج؟
</p>

<h3>
	مصفوفة الارتباك confusion matrix
</h3>

<p>
	وهي عبارة عن جدول يُستخدم لبيان كفاءة نموذج تعلم التصنيف، إذ يعرض عدد حالات الصواب والخطأ المُمكنة المختلفة.
</p>

<p>
	يُبين الجدول التالي مثلًا الحالات المختلفة في المثال السابق (ندعو، للتبسيط، صف الكلب بالموجب وصف القط بالسالب):
</p>
<style type="text/css">
table {
    width: 100%;
}

thead {
    vertical-align: middle;
    text-align: center;
} 

td, th {
    border: 1px solid #dddddd;
    text-align: right;
    padding: 8px;
    text-align: inherit;

}
tr:nth-child(even) {
    background-color: #dddddd;
}</style>
<table>
	<thead>
		<tr>
			<th>
				تنبؤ نموذج التصنيف
			</th>
			<th>
				القيمة الحقيقية: كلب (موجب)
			</th>
			<th>
				القيمة الحقيقية: قط (سالب)
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>
				كلب (موجب)
			</td>
			<td>
				3
			</td>
			<td>
				1
			</td>
		</tr>
		<tr>
			<td>
				قط (سالب)
			</td>
			<td>
				2
			</td>
			<td>
				4
			</td>
		</tr>
	</tbody>
</table>

<p>
	يُبين الجدول السابق أن نموذج التعلم أصاب في 3 حالات (الحقيقة: كلب / التنبؤ: كلب) + 4 حالات (الحقيقة: قط / التنبؤ: قط) = 7 حالات.
</p>

<p>
	وأخطأ في حالتين (الحقيقة: كلب / التنبؤ: قط) + حالة (الحقيقة: قط / التنبؤ: كلب) = 3 حالات.
</p>

<table>
	<thead>
		<tr>
			<th>
				تنبؤ نموذج التصنيف
			</th>
			<th>
				القيمة الحقيقية: (موجب)
			</th>
			<th>
				القيمة الحقيقية: (سالب)
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>
				موجب
			</td>
			<td>
				عدد الحالات الصحيحة الموجبة
			</td>
			<td>
				عدد الحالات الخاطئة الموجبة
			</td>
		</tr>
		<tr>
			<td>
				سالب
			</td>
			<td>
				عدد الحالات الخاطئة السالبة
			</td>
			<td>
				عدد الحالات الصحيحة السالبة
			</td>
		</tr>
	</tbody>
</table>

<h4>
	الحالات الصحيحة الموجبة True Positive
</h4>

<p>
	الحالات الصحيحة الموجبة True Positive وتختصر إلى TP وهي الحالات التي يكون من أجلها تنبؤ النموذج موجب والقيمة الحقيقة موجب (تنبؤ صحيح).
</p>

<h4>
	الحالات الصحيحة السالبة True Negative
</h4>

<p>
	الحالات الصحيحة السالبة True Negative وتختصر إلى TN وهي الحالات التي يكون من أجلها تنبؤ النموذج سالب والقيمة الحقيقة سالب (تنبؤ صحيح).
</p>

<h4>
	الحالات الخاطئة الموجبة False Positive (FP)
</h4>

<p>
	الحالات الخاطئة الموجبة False Positive وتختصر إلى FP وهي الحالات التي يكون من أجلها تنبؤ النموذج موجب والقيمة الحقيقة سالب (تنبؤ خاطئ).
</p>

<h4>
	الحالات الخاطئة السالبة False Negative (FN)
</h4>

<p>
	الحالات الخاطئة السالبة False Negative وتختصر إلى FN وهي الحالات التي يكون من أجلها تنبؤ النموذج سالب والقيمة الحقيقة موجب (تنبؤ خاطئ).
</p>

<h3>
	مقياس الصحة Accuracy
</h3>

<p>
	مقياس الصحة Accuracy وهو نسبة التصنيفات الصحيحة من العدد الكلي للأمثلة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_298_11" style=""><span class="pun">????????=</span><span class="pln">  </span><span class="pun">(??+??)/(??+??+??+??)</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="lit">100</span></pre>

<p>
	تكون الصحة في مثالنا السابق:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_298_13" style=""><span class="pun">????????=</span><span class="pln">  </span><span class="pun">(</span><span class="lit">3</span><span class="pun">+</span><span class="lit">4</span><span class="pun">)/</span><span class="lit">10</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="lit">100</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">70</span><span class="pun">%</span></pre>

<h3>
	مقياس الدقة Precision
</h3>

<p>
	مقياس الدقة Precision هو نسبة التصنيفات الصحيحة للأمثلة الموجبة على العدد الكلي للأمثلة التي صُنّفت موجبة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_298_15" style=""><span class="pun">?????????=</span><span class="pln">  </span><span class="pun">??/(??+??)</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="lit">100</span></pre>

<p>
	تكون الدقة في مثالنا السابق:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_298_17" style=""><span class="pun">?????????=</span><span class="pln">  </span><span class="lit">3</span><span class="pun">/(</span><span class="lit">3</span><span class="pun">+</span><span class="lit">1</span><span class="pun">)</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="lit">100</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">75</span><span class="pun">%</span></pre>

<h3>
	مقياس الاستذكار Recall
</h3>

<p>
	مقياس الاستذكار Recall هو نسبة التصنيفات الصحيحة للأمثلة الموجبة على العدد الكلي للأمثلة الموجبة (يُدعى هذا المقياس أيضًا بالحساسية Sensitivity أو نسبة الموجب الصحيح True Positive Rate):
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_298_19" style=""><span class="pun">??????=</span><span class="pln">  </span><span class="pun">??/(??+??)</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="lit">100</span></pre>

<p>
	يكون الاستذكار في مثالنا السابق:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_298_21" style=""><span class="pun">??????=</span><span class="pln">  </span><span class="lit">3</span><span class="pun">/(</span><span class="lit">3</span><span class="pun">+</span><span class="lit">2</span><span class="pun">)</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="lit">100</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">60</span><span class="pun">%</span></pre>

<h3>
	المقياس F1
</h3>

<p>
	المقياس F1 وهو مقياس يوازن بين الدقة والاستذكار في قيمة واحدة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_298_23" style=""><span class="pun">?</span><span class="lit">1</span><span class="pun">−?????=</span><span class="pln">  </span><span class="pun">(</span><span class="lit">2</span><span class="pun">∗?????????∗??????)/(?????????+??????)</span></pre>

<p>
	يكون F1 في مثالنا السابق:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_298_25" style=""><span class="pun">?</span><span class="lit">1</span><span class="pun">−?????=</span><span class="pln">  </span><span class="pun">(</span><span class="lit">2</span><span class="pun">∗</span><span class="lit">75</span><span class="pun">∗</span><span class="lit">60</span><span class="pun">)/(</span><span class="lit">75</span><span class="pun">+</span><span class="lit">60</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">66.66</span><span class="pun">%</span></pre>

<h3>
	الخصوصية Specificity
</h3>

<p>
	الخصوصية Specificity هو نسبة التصنيفات الخاطئة للأمثلة الموجبة على العدد الكلي للأمثلة السالبة (يُدعى هذا المقياس أيضًا بنسبة الموجب الخاطئ False Positive Rate):
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_298_27" style=""><span class="pun">???=</span><span class="pln">  </span><span class="pun">??/(??+??)</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="lit">100</span></pre>

<p>
	تكون الخصوصية في مثالنا السابق:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_298_29" style=""><span class="pun">???=</span><span class="pln">  </span><span class="lit">1</span><span class="pun">/(</span><span class="lit">1</span><span class="pun">+</span><span class="lit">4</span><span class="pun">)</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="lit">100</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">20</span><span class="pun">%</span></pre>

<h3>
	حساب مقاييس الأداء في بايثون
</h3>

<p>
	توفر المكتبة sklearn.metrics في <a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D9%85%D8%B1%D8%AC%D8%B9-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r735/" rel="">بايثون</a> إمكانية حساب كل المقاييس السابقة، كما تُبين الشيفرة البرمجية التالية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_298_31" style=""><span class="com"># تقييم نماذج التصنيف</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">metrics </span><span class="kwd">import</span><span class="pln"> confusion_matrix
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">metrics </span><span class="kwd">import</span><span class="pln"> accuracy_score
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">metrics </span><span class="kwd">import</span><span class="pln"> precision_score
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">metrics </span><span class="kwd">import</span><span class="pln"> recall_score
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">metrics </span><span class="kwd">import</span><span class="pln"> f1_score
</span><span class="com"># الصفوف</span><span class="pln">
actual </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="str">'cat'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'dog'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'cat'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'dog'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'cat'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'cat'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'dog'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'cat'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'dog'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'cat'</span><span class="pun">]</span><span class="pln">
</span><span class="com"># التنيؤ</span><span class="pln">
predicted </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="str">'cat'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'cat'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'cat'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'dog'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'cat'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'cat'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'dog'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'dog'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'dog'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'dog'</span><span class="pun">]</span><span class="pln">
</span><span class="com"># مصفوفة الارتباك</span><span class="pln">
cf_matrix </span><span class="pun">=</span><span class="pln"> confusion_matrix</span><span class="pun">(</span><span class="pln">actual </span><span class="pun">,</span><span class="pln"> predicted</span><span class="pun">,</span><span class="pln"> labels</span><span class="pun">=[</span><span class="str">"dog"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"cat"</span><span class="pun">]</span><span class="pln"> </span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="str">'Confusion Matrix :'</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">cf_matrix</span><span class="pun">)</span><span class="pln">
</span><span class="com"># مقاييس الأداء</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="str">'Accuracy Score :{:.2f}'</span><span class="pun">.</span><span class="pln">format</span><span class="pun">(</span><span class="pln">accuracy_score</span><span class="pun">(</span><span class="pln">actual</span><span class="pun">,</span><span class="pln"> predicted</span><span class="pun">)*</span><span class="lit">100</span><span class="pun">))</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="str">'Precision Score :{:.2f}'</span><span class="pun">.</span><span class="pln">format</span><span class="pun">(</span><span class="pln">precision_score</span><span class="pun">(</span><span class="pln">actual</span><span class="pun">,</span><span class="pln"> predicted</span><span class="pun">,</span><span class="pln"> pos_label</span><span class="pun">=</span><span class="str">'dog'</span><span class="pun">)*</span><span class="lit">100</span><span class="pun">))</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="str">'Recall Score :{:.2f}'</span><span class="pun">.</span><span class="pln">format</span><span class="pun">(</span><span class="pln">recall_score</span><span class="pun">(</span><span class="pln">actual</span><span class="pun">,</span><span class="pln"> predicted</span><span class="pun">,</span><span class="pln"> pos_label</span><span class="pun">=</span><span class="str">'dog'</span><span class="pun">)*</span><span class="lit">100</span><span class="pun">))</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="str">'F1 Score :{:.2f}'</span><span class="pun">.</span><span class="pln">format</span><span class="pun">(</span><span class="pln">f1_score</span><span class="pun">(</span><span class="pln">actual</span><span class="pun">,</span><span class="pln"> predicted</span><span class="pun">,</span><span class="pln"> pos_label</span><span class="pun">=</span><span class="str">'dog'</span><span class="pun">)*</span><span class="lit">100</span><span class="pun">))</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="str">'Specificity :{:.2f}'</span><span class="pun">.</span><span class="pln">format</span><span class="pun">(</span><span class="pln">cf_matrix</span><span class="pun">[</span><span class="lit">0</span><span class="pun">,</span><span class="lit">1</span><span class="pun">]/(</span><span class="pln">cf_matrix</span><span class="pun">[</span><span class="lit">0</span><span class="pun">,</span><span class="lit">1</span><span class="pun">]+</span><span class="pln">cf_matrix</span><span class="pun">[</span><span class="lit">1</span><span class="pun">,</span><span class="lit">1</span><span class="pun">])*</span><span class="lit">100</span><span class="pun">))</span></pre>

<p>
	نستخدم في الشيفرة السابقة كل من <a href="https://academy.hsoub.com/programming/python/%d8%aa%d8%b9%d8%b1%d9%81-%d8%b9%d9%84%d9%89-%d8%a7%d9%84%d8%af%d9%88%d8%a7%d9%84-functions-%d9%81%d9%8a-%d8%a8%d8%a7%d9%8a%d8%ab%d9%88%d9%86-r292/" rel="">الدوال</a> التالية والتي يكون لها معاملين هما قائمة القيم الحقيقية وقائمة قيم التنبؤ:
</p>

<table>
	<thead>
		<tr>
			<th>
				الوصف
			</th>
			<th>
				الدالة
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>
				حساب مصفوفة الارتباك
			</td>
			<td>
				confusion_matrix
			</td>
		</tr>
		<tr>
			<td>
				حساب الصحة
			</td>
			<td>
				accuracy_score
			</td>
		</tr>
		<tr>
			<td>
				حساب الدقة
			</td>
			<td>
				precision_score
			</td>
		</tr>
		<tr>
			<td>
				حساب الاستذكار
			</td>
			<td>
				recall_score
			</td>
		</tr>
		<tr>
			<td>
				حساب F1
			</td>
			<td>
				f1_score
			</td>
		</tr>
	</tbody>
</table>

<p>
	تكون نتائج مثالنا:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_298_33" style=""><span class="typ">Confusion</span><span class="pln"> </span><span class="typ">Matrix</span><span class="pln"> </span><span class="pun">:</span><span class="pln">
</span><span class="pun">[[</span><span class="lit">3</span><span class="pln"> </span><span class="lit">1</span><span class="pun">]</span><span class="pln">
 </span><span class="pun">[</span><span class="lit">2</span><span class="pln"> </span><span class="lit">4</span><span class="pun">]]</span><span class="pln">
</span><span class="typ">Accuracy</span><span class="pln"> </span><span class="typ">Score</span><span class="pln"> </span><span class="pun">:</span><span class="lit">70.00</span><span class="pln">
</span><span class="typ">Precision</span><span class="pln"> </span><span class="typ">Score</span><span class="pln"> </span><span class="pun">:</span><span class="lit">60.00</span><span class="pln">
</span><span class="typ">Recall</span><span class="pln"> </span><span class="typ">Score</span><span class="pln"> </span><span class="pun">:</span><span class="lit">75.00</span><span class="pln">
F1 </span><span class="typ">Score</span><span class="pln"> </span><span class="pun">:</span><span class="lit">66.67</span></pre>

<p>
	يُمكن أيضًا رسم مصفوفة الارتباك باستخدام المكتبة seaborn كما يلي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_298_35" style=""><span class="kwd">import</span><span class="pln"> seaborn </span><span class="kwd">as</span><span class="pln"> sns
sns</span><span class="pun">.</span><span class="pln">heatmap</span><span class="pun">(</span><span class="pln">cf_matrix</span><span class="pun">,</span><span class="pln"> annot</span><span class="pun">=</span><span class="kwd">True</span><span class="pun">)</span></pre>

<p>
	مما يُظهر الشكل التالي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103949" href="https://academy.hsoub.com/uploads/monthly_2022_07/001.png.67126728ee04b158a31fc9260763399f.png" rel="" data-fileext="png"><img alt="001.png" class="ipsImage ipsImage_thumbnailed" data-fileid="103949" data-unique="d1e5s4yg4" src="https://academy.hsoub.com/uploads/monthly_2022_07/001.png.67126728ee04b158a31fc9260763399f.png"></a>
</p>

<h3>
	خصائص المُستقبل التشغيلية ROC
</h3>

<p>
	خصائص المُستقبل التشغيلية ROC -اختصار Receiver Operating Characteristic- هو منحني يُبين كفاءة نموذج التصنيف في قدرته على الفصل بين الصفوف الموجبة والسالبة.
</p>

<p>
	كي يكون نموذج تصنيف ممتازًا، يجب أن يصل إلى الزاوية العليا اليسارية أي أن تكون نسبة الصفوف الموجبة الصحيحة (الاستذكار) TPR أقرب للواحد، ونسبة الصفوف الموجبة الخاطئة (الخصوصية) FPR أقرب للصفر.
</p>

<p>
	يُبين الشكل التالي منحنيات ROC مختلفة ممكنة. كلما اقتربنا من أعلى اليسار كان المُصنّف أفضل:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103950" href="https://academy.hsoub.com/uploads/monthly_2022_07/002.png.f9586979574a7c572515a26dc6620aa8.png" rel="" data-fileext="png"><img alt="002.png" class="ipsImage ipsImage_thumbnailed" data-fileid="103950" data-unique="c18yr60hf" style="width: 300px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_07/002.thumb.png.bf8dc422d248907627c6516590d5127b.png"></a>
</p>

<h3>
	المساحة تحت المنحني AUC
</h3>

<p>
	كلما كانت المساحة AUC -اختصار Area Under the Curve- تحت منحني ROC أكبر (أقرب من الواحد)، كان المُصنّف أفضل (لأن ذلك يعني أن المنحني أقرب للأعلى يسارًا).
</p>

<p>
	يُمكن رسم منحني ROC في بايثون وحساب المساحة تحت المنحني AUC كما تُبين الشيفرة البرمجية التالية لمثالنا السابق:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_298_38" style=""><span class="com"># مكتبة الترميز</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">preprocessing </span><span class="kwd">import</span><span class="pln"> </span><span class="typ">LabelEncoder</span><span class="pln">
</span><span class="com"># الصفوف</span><span class="pln">
actual </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="str">'cat'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'dog'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'cat'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'dog'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'cat'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'cat'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'dog'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'cat'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'dog'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'cat'</span><span class="pun">]</span><span class="pln">
</span><span class="com"># التنيؤ</span><span class="pln">
predicted </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="str">'cat'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'cat'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'cat'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'dog'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'cat'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'cat'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'dog'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'dog'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'dog'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'dog'</span><span class="pun">]</span><span class="pln">
</span><span class="com"># ترميز الصفوف</span><span class="pln">
le </span><span class="pun">=</span><span class="pln"> </span><span class="typ">LabelEncoder</span><span class="pun">()</span><span class="pln">
</span><span class="com"># ترميز الصفوف كأرقام</span><span class="pln">
actual</span><span class="pun">=</span><span class="pln">le</span><span class="pun">.</span><span class="pln">fit_transform</span><span class="pun">(</span><span class="pln">actual</span><span class="pun">)</span><span class="pln">
</span><span class="com"># ترميز التنبؤ كأرقام</span><span class="pln">
predicted </span><span class="pun">=</span><span class="pln"> le</span><span class="pun">.</span><span class="pln">fit_transform</span><span class="pun">(</span><span class="pln">predicted</span><span class="pun">)</span><span class="pln">
</span><span class="com"># مكتبة المقاييس اللازمة</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> sklearn </span><span class="kwd">import</span><span class="pln"> metrics
</span><span class="com"># مكتبة الرسم</span><span class="pln">
</span><span class="kwd">import</span><span class="pln"> matplotlib</span><span class="pun">.</span><span class="pln">pyplot </span><span class="kwd">as</span><span class="pln"> plt
</span><span class="com"># حساب المقاييس</span><span class="pln">
fpr</span><span class="pun">,</span><span class="pln"> tpr</span><span class="pun">,</span><span class="pln"> _ </span><span class="pun">=</span><span class="pln"> metrics</span><span class="pun">.</span><span class="pln">roc_curve</span><span class="pun">(</span><span class="pln">actual</span><span class="pun">,</span><span class="pln"> predicted</span><span class="pun">)</span><span class="pln">
auc </span><span class="pun">=</span><span class="pln"> metrics</span><span class="pun">.</span><span class="pln">roc_auc_score</span><span class="pun">(</span><span class="pln">actual</span><span class="pun">,</span><span class="pln"> predicted</span><span class="pun">)</span><span class="pln">
</span><span class="com"># رسم المنحني</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">plot</span><span class="pun">(</span><span class="pln">fpr</span><span class="pun">,</span><span class="pln">tpr</span><span class="pun">,</span><span class="pln">label</span><span class="pun">=</span><span class="str">"AUC="</span><span class="pun">+</span><span class="pln">str</span><span class="pun">(</span><span class="pln">auc</span><span class="pun">))</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">ylabel</span><span class="pun">(</span><span class="str">'True Positive Rate'</span><span class="pun">)</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">xlabel</span><span class="pun">(</span><span class="str">'False Positive Rate'</span><span class="pun">)</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">legend</span><span class="pun">(</span><span class="pln">loc</span><span class="pun">=</span><span class="lit">4</span><span class="pun">)</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">show</span><span class="pun">()</span></pre>

<p>
	لاحظ استخدام الصف LabelEncoder من المكتبة sklearn.preprocessing لترميز الصفوف كأرقام.
</p>

<p>
	يكون الإظهار:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103952" href="https://academy.hsoub.com/uploads/monthly_2022_07/003.png.41d8ea9d6e46dee9bf62e0a17a213715.png" rel="" data-fileext="png"><img alt="003.png" class="ipsImage ipsImage_thumbnailed" data-fileid="103952" data-unique="cnz66gow6" style="width: 500px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_07/003.thumb.png.34bdee5ee4065405f42c48be57d7fe22.png"></a>
</p>

<p>
	لاحظ أن المساحة تحت المنحني تُساوي إلى 0.75 مما يعني أن المُصنف جيد نسبيًا.
</p>

<h2>
	تقييم نماذج الانحدار
</h2>

<p>
	نُذكّر أولًا بأن الهدف من نماذج الانحدار هو التنبؤ بقيمة رقمية y انطلاقًا من قيمة (أو مجموعة من القيم) x.
</p>

<p>
	ليكن لدينا مثلًا جدول بيانات التدريب التالي والذي يُعطي عدد الأعطال لآلة وفق عمر الآلة بالسنوات:
</p>

<table>
	<thead>
		<tr>
			<th>
				Failures
			</th>
			<th>
				Age
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>
				15
			</td>
			<td>
				10
			</td>
		</tr>
		<tr>
			<td>
				30
			</td>
			<td>
				20
			</td>
		</tr>
		<tr>
			<td>
				40
			</td>
			<td>
				40
			</td>
		</tr>
		<tr>
			<td>
				55
			</td>
			<td>
				50
			</td>
		</tr>
		<tr>
			<td>
				75
			</td>
			<td>
				70
			</td>
		</tr>
		<tr>
			<td>
				90
			</td>
			<td>
				90
			</td>
		</tr>
	</tbody>
</table>

<p>
	يُبين الشكل التالي هذه النقاط على محور العمر Age والأعطال Failures:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103954" href="https://academy.hsoub.com/uploads/monthly_2022_07/004.png.fba8f7575bbd49a57b41a3af96a336a7.png" rel="" data-fileext="png"><img alt="004.png" class="ipsImage ipsImage_thumbnailed" data-fileid="103954" data-unique="qgjwbaktk" style="width: 300px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_07/004.thumb.png.08984917393ee647ecbdfcfc0919a386.png"></a>
</p>

<p>
	يُعدّ الانحدار الخطي linear regression من أكثر أنواع الانحدار استخدامًا نظرًا لبساطته في كل من التعلم والتنبؤ، فيُمكن مثلًا أن يتلائم fit الانحدار الخطي مع البيانات السابقة ليولد المستقيم التالي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103956" href="https://academy.hsoub.com/uploads/monthly_2022_07/005.png.5f41a7260d48095d6169e2b3e4d1e20f.png" rel="" data-fileext="png"><img alt="005.png" class="ipsImage ipsImage_thumbnailed" data-fileid="103956" data-unique="vozfm4u66" style="width: 300px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_07/005.thumb.png.3be0edfabaf283c74b85acfada1e74fa.png"></a>
</p>

<p>
	يُمكن حساب التنبؤ Predictions لكل من قيم الجدول السابق باستخدام معادلة المستقيم الناتجة عن نموذج الانحدار، مما يُعطي:
</p>

<table>
	<thead>
		<tr>
			<th>
				Failures
			</th>
			<th>
				Age
			</th>
			<th>
				Predictions
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>
				15
			</td>
			<td>
				10
			</td>
			<td>
				26
			</td>
		</tr>
		<tr>
			<td>
				30
			</td>
			<td>
				20
			</td>
			<td>
				32
			</td>
		</tr>
		<tr>
			<td>
				40
			</td>
			<td>
				40
			</td>
			<td>
				44
			</td>
		</tr>
		<tr>
			<td>
				55
			</td>
			<td>
				50
			</td>
			<td>
				50
			</td>
		</tr>
		<tr>
			<td>
				75
			</td>
			<td>
				70
			</td>
			<td>
				62
			</td>
		</tr>
		<tr>
			<td>
				90
			</td>
			<td>
				90
			</td>
			<td>
				74
			</td>
		</tr>
	</tbody>
</table>

<p>
	يُمكن الآن قياس مدى ملائمة المستقيم للبيانات بحساب المسافة بين النقاط الأساسية والمستقيم، وذلك بحساب الأخطاء Errors الحاصلة أي الفروقات بين القيم الأساسية و قيم التنبؤ، كما يُبين الجدول التالي:
</p>

<table>
	<thead>
		<tr>
			<th>
				Errors
			</th>
			<th>
				Predictions
			</th>
			<th>
				Failures
			</th>
			<th>
				Age
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>
				11
			</td>
			<td>
				26
			</td>
			<td>
				15
			</td>
			<td>
				10
			</td>
		</tr>
		<tr>
			<td>
				2
			</td>
			<td>
				32
			</td>
			<td>
				30
			</td>
			<td>
				20
			</td>
		</tr>
		<tr>
			<td>
				4
			</td>
			<td>
				44
			</td>
			<td>
				40
			</td>
			<td>
				40
			</td>
		</tr>
		<tr>
			<td>
				-5
			</td>
			<td>
				50
			</td>
			<td>
				55
			</td>
			<td>
				50
			</td>
		</tr>
		<tr>
			<td>
				-13
			</td>
			<td>
				62
			</td>
			<td>
				75
			</td>
			<td>
				70
			</td>
		</tr>
		<tr>
			<td>
				-16
			</td>
			<td>
				74
			</td>
			<td>
				90
			</td>
			<td>
				90
			</td>
		</tr>
	</tbody>
</table>

<p>
	يُبين الشكل التالي هذه الفروقات أيضًا:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103958" href="https://academy.hsoub.com/uploads/monthly_2022_07/006.png.9c97fe482ce3d6e6a75daca4645be8e9.png" rel="" data-fileext="png"><img alt="006.png" class="ipsImage ipsImage_thumbnailed" data-fileid="103958" data-unique="tpcc774sw" style="width: 300px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_07/006.thumb.png.e3d20e2b6ae22f617e7a6886cafe5554.png"></a>
</p>

<p>
	تُستخدم المقاييس التالية لتقييم أداء الانحدار:
</p>

<ul>
	<li>
		الجذر التربيعي لمتوسطات مربعات الأخطاء Root Mean Square Error (ويختصر إلى RMSE)
	</li>
	<li>
		متوسط الأخطاء بالقيمة المطلقة Mean Absolute Error (ويختصر إلى MAE)
	</li>
</ul>

<h3>
	الجذر التربيعي لمتوسطات مربعات الأخطاء RMSE
</h3>

<p>
	تُستخدم عملية التربيع أولًا للتخلص من الإشارة السالبة للأخطاء:
</p>

<table>
	<thead>
		<tr>
			<th>
				Errors2
			</th>
			<th>
				Errors
			</th>
			<th>
				Predictions
			</th>
			<th>
				Failutres
			</th>
			<th>
				Age
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>
				121
			</td>
			<td>
				11
			</td>
			<td>
				26
			</td>
			<td>
				15
			</td>
			<td>
				10
			</td>
		</tr>
		<tr>
			<td>
				4
			</td>
			<td>
				2
			</td>
			<td>
				32
			</td>
			<td>
				30
			</td>
			<td>
				20
			</td>
		</tr>
		<tr>
			<td>
				16
			</td>
			<td>
				4
			</td>
			<td>
				44
			</td>
			<td>
				40
			</td>
			<td>
				40
			</td>
		</tr>
		<tr>
			<td>
				25
			</td>
			<td>
				-5
			</td>
			<td>
				50
			</td>
			<td>
				55
			</td>
			<td>
				50
			</td>
		</tr>
		<tr>
			<td>
				169
			</td>
			<td>
				-13
			</td>
			<td>
				62
			</td>
			<td>
				75
			</td>
			<td>
				70
			</td>
		</tr>
		<tr>
			<td>
				256
			</td>
			<td>
				-16
			</td>
			<td>
				74
			</td>
			<td>
				90
			</td>
			<td>
				90
			</td>
		</tr>
	</tbody>
</table>

<p>
	ومن ثم نحسب متوسط مربعات الأخطاء، مما يُعطي 89.5. وأخيًرا نجذر المتوسط السابق فيكون الناتج 9.9 قيمة المقياس RMSE أي الجذر التربيعي لمتوسطات مربعات الأخطاء Root Mean Square Error.
</p>

<p>
	بالطبع، كلما كان هذا العدد صغيرًا فهذا يعني أن الملائمة أفضل (الحالة المثالية هي الصفر).
</p>

<h3>
	متوسط الأخطاء بالقيمة المطلقة MAE
</h3>

<table>
	<thead>
		<tr>
			<th>
				\Errors\
			</th>
			<th>
				Errors
			</th>
			<th>
				Predictions
			</th>
			<th>
				Failutres
			</th>
			<th>
				Age
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>
				11
			</td>
			<td>
				11
			</td>
			<td>
				26
			</td>
			<td>
				15
			</td>
			<td>
				10
			</td>
		</tr>
		<tr>
			<td>
				2
			</td>
			<td>
				2
			</td>
			<td>
				32
			</td>
			<td>
				30
			</td>
			<td>
				20
			</td>
		</tr>
		<tr>
			<td>
				4
			</td>
			<td>
				4
			</td>
			<td>
				44
			</td>
			<td>
				40
			</td>
			<td>
				40
			</td>
		</tr>
		<tr>
			<td>
				5
			</td>
			<td>
				-5
			</td>
			<td>
				50
			</td>
			<td>
				55
			</td>
			<td>
				50
			</td>
		</tr>
		<tr>
			<td>
				13
			</td>
			<td>
				-13
			</td>
			<td>
				62
			</td>
			<td>
				75
			</td>
			<td>
				70
			</td>
		</tr>
		<tr>
			<td>
				16
			</td>
			<td>
				-16
			</td>
			<td>
				74
			</td>
			<td>
				90
			</td>
			<td>
				90
			</td>
		</tr>
	</tbody>
</table>

<p>
	ومن ثم نحسب المتوسط الحسابي لها، مما يُعطي: 8.5 في مثالنا وهو مقياس MAE أي متوسط الأخطاء بالقيمة المطلقة Mean Absolute Error.
</p>

<p>
	يُمكن حساب هذه المقاييس في بايثون باستخدام الدوال الموافقة من المكتبة sklearn.metrics، كما تُبين الشيفرة البرمجية التالية والتي نستخدم فيها بيانات مثالنا السابق:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_298_48" style=""><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">metrics </span><span class="kwd">import</span><span class="pln"> mean_absolute_error
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">metrics </span><span class="kwd">import</span><span class="pln"> mean_squared_error
</span><span class="kwd">from</span><span class="pln"> math </span><span class="kwd">import</span><span class="pln"> sqrt
y_true </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="lit">15</span><span class="pun">,</span><span class="pln"> </span><span class="lit">30</span><span class="pun">,</span><span class="pln"> </span><span class="lit">40</span><span class="pun">,</span><span class="pln"> </span><span class="lit">55</span><span class="pun">,</span><span class="pln"> </span><span class="lit">75</span><span class="pun">,</span><span class="pln"> </span><span class="lit">90</span><span class="pun">]</span><span class="pln">
y_pred </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="lit">26</span><span class="pun">,</span><span class="pln"> </span><span class="lit">32</span><span class="pun">,</span><span class="pln"> </span><span class="lit">44</span><span class="pun">,</span><span class="pln"> </span><span class="lit">50</span><span class="pun">,</span><span class="pln"> </span><span class="lit">62</span><span class="pun">,</span><span class="pln"> </span><span class="lit">74</span><span class="pun">]</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="str">'MAE :{:.2f}'</span><span class="pun">.</span><span class="pln">format</span><span class="pun">(</span><span class="pln">mean_absolute_error</span><span class="pun">(</span><span class="pln">y_true</span><span class="pun">,</span><span class="pln"> y_pred</span><span class="pun">)))</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="str">'RMSE :{:.2f}'</span><span class="pun">.</span><span class="pln">format</span><span class="pun">(</span><span class="pln">sqrt</span><span class="pun">(</span><span class="pln">mean_squared_error </span><span class="pun">(</span><span class="pln">y_true</span><span class="pun">,</span><span class="pln"> y_pred</span><span class="pun">))))</span></pre>

<p>
	يكون الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_298_50" style=""><span class="pln">RMSE </span><span class="pun">:</span><span class="lit">9.92</span><span class="pln">
MAE </span><span class="pun">:</span><span class="lit">8.50</span></pre>

<h2>
	تقييم نماذج التعلم باستخدام طريقة التقسيم العشوائي Hold-out method
</h2>

<p>
	لبناء نموذج مُتعلم، يجب توفير مجموعة من البيانات dataset لتنفيذ خوارزمية التعلم عليها أولًا، ومن ثم تقييم نموذج التعلم الناتج.
</p>

<p>
	يجب لتقييم نموذج التعلم، بشكل حيادي، أن نمرر له مجموعة من البيانات التي لم يرها خلال تدريبه وذلك تفاديًا لحصولنا على مقاييس تقييم ممتازة مزيفة نتيجة وقوع نموذج التعلم في مطب مشكلة فرط التخصيص overfitting، أي أن النموذج تعلم بشكل جيد على الأمثلة المُمره له فقط، وهو غير قادر على تعميم التعلم ليتعامل مع أمثلة جديدة بشكل جيد.
</p>

<p>
	تُعدّ طريقة التقسيم العشوائي من أبسط الطرق المستخدمة لتقييم نماذج التعلم والتي تُقسّم البيانات المتاحة إلى قسمين بشكل عشوائي: ندعو القسم الأول ببيانات التدريب training data (عادًة حوالي 80% من البيانات)، والقسم الآخر المتبقي (حوالي 20%) ببينات الاختبار testing data.
</p>

<p>
	نعمد إلى تدريب وبناء نموذج التعلم باستخدام بيانات التدريب فقط، ومن ثم تقييم النموذج الناتج باستخدام بيانات الاختبار.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103960" href="https://academy.hsoub.com/uploads/monthly_2022_07/007.png.75aa887cb9d5898b9470e523a7200590.png" rel="" data-fileext="png"><img alt="007.png" class="ipsImage ipsImage_thumbnailed" data-fileid="103960" data-unique="wxhemgp4g" style="width: 500px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_07/007.thumb.png.ce128a51fb0b0af93bcf2d0ded389261.png"></a>
</p>

<p>
	توفر المكتبة sklearn في بايثون كل ما يلزم للقيام بذلك كما تٌبين الشيفرة البرمجية التالية والتي نبني فيها نموذج تصنيف باستخدام مُصنّف بايز Bayes وذلك على مجموعة بيانات تصنيف أزهار السوسن iris المتاحة من المكتبة نفسها.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_298_54" style=""><span class="com"># مجموعة بيانات </span><span class="pln">
</span><span class="com"># أزهار السوسن</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">datasets </span><span class="kwd">import</span><span class="pln"> load_iris
</span><span class="com"># مكتبة تقسيم البيانات إلى تدريب واختبار</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">model_selection </span><span class="kwd">import</span><span class="pln"> train_test_split
</span><span class="com"># مكتبة مُصنف بايز</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">naive_bayes </span><span class="kwd">import</span><span class="pln"> </span><span class="typ">GaussianNB</span><span class="pln">
</span><span class="com"># مكتبات مقاييس التقييم</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">metrics </span><span class="kwd">import</span><span class="pln"> accuracy_score
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">metrics </span><span class="kwd">import</span><span class="pln"> precision_score
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">metrics </span><span class="kwd">import</span><span class="pln"> recall_score
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">metrics </span><span class="kwd">import</span><span class="pln"> f1_score
</span><span class="com"># تحميل البيانات </span><span class="pln">
X</span><span class="pun">,</span><span class="pln"> y </span><span class="pun">=</span><span class="pln"> load_iris</span><span class="pun">(</span><span class="pln">return_X_y</span><span class="pun">=</span><span class="kwd">True</span><span class="pun">)</span><span class="pln">
</span><span class="com"># تقسيم البيانات إلى تدريب و اختبار</span><span class="pln">
X_train</span><span class="pun">,</span><span class="pln"> X_test</span><span class="pun">,</span><span class="pln"> y_train</span><span class="pun">,</span><span class="pln"> y_test </span><span class="pun">=</span><span class="pln"> train_test_split</span><span class="pun">(</span><span class="pln">X</span><span class="pun">,</span><span class="pln"> y</span><span class="pun">,</span><span class="pln"> test_size</span><span class="pun">=</span><span class="lit">0.2</span><span class="pun">)</span><span class="pln">
</span><span class="com"># بناء مصنف بايز</span><span class="pln">
gnb </span><span class="pun">=</span><span class="pln"> </span><span class="typ">GaussianNB</span><span class="pun">()</span><span class="pln">
</span><span class="com"># الملائمة على بيانات التدريب</span><span class="pln">
</span><span class="com"># والتنبؤ على بيانات الاختبار</span><span class="pln">
y_pred </span><span class="pun">=</span><span class="pln"> gnb</span><span class="pun">.</span><span class="pln">fit</span><span class="pun">(</span><span class="pln">X_train</span><span class="pun">,</span><span class="pln"> y_train</span><span class="pun">).</span><span class="pln">predict</span><span class="pun">(</span><span class="pln">X_test</span><span class="pun">)</span><span class="pln">
</span><span class="com"># حساب مقاييس التقييم</span><span class="pln">
</span><span class="com"># بمقارنة بيانات الاختبار</span><span class="pln">
</span><span class="com"># مع تنبؤ المصنف</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="str">'Accuracy Score :{:.2f}'</span><span class="pun">.</span><span class="pln">format</span><span class="pun">(</span><span class="pln">accuracy_score</span><span class="pun">(</span><span class="pln">y_test</span><span class="pun">,</span><span class="pln"> y_pred</span><span class="pun">)*</span><span class="lit">100</span><span class="pun">))</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="str">'Precision Score :{:.2f}'</span><span class="pun">.</span><span class="pln">format</span><span class="pun">(</span><span class="pln">precision_score</span><span class="pun">(</span><span class="pln">y_test</span><span class="pun">,</span><span class="pln"> y_pred</span><span class="pun">,</span><span class="pln"> average</span><span class="pun">=</span><span class="str">'macro'</span><span class="pun">)*</span><span class="lit">100</span><span class="pun">))</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="str">'Recall Score ::{:.2f}'</span><span class="pun">.</span><span class="pln">format</span><span class="pun">(</span><span class="pln">recall_score</span><span class="pun">(</span><span class="pln">y_test</span><span class="pun">,</span><span class="pln"> y_pred</span><span class="pun">,</span><span class="pln"> average</span><span class="pun">=</span><span class="str">'macro'</span><span class="pun">)*</span><span class="lit">100</span><span class="pun">))</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="str">'F1 Score ::{:.2f}'</span><span class="pun">.</span><span class="pln">format</span><span class="pun">(</span><span class="pln">f1_score</span><span class="pun">(</span><span class="pln">y_test</span><span class="pun">,</span><span class="pln"> y_pred</span><span class="pun">,</span><span class="pln"> average</span><span class="pun">=</span><span class="str">'macro'</span><span class="pun">)*</span><span class="lit">100</span><span class="pun">))</span></pre>

<p>
	لاحظ أن الدالة train_<em>test_</em>split والتي نُمرر لها كل من:
</p>

<ul>
	<li>
		X: مصفوفة ثنائية يكون كل عنصر فيها مصفوفة من 4 عناصر (طول وعرض كل من السبال والبتلات لزهرة السوسن).
	</li>
	<li>
		y: مصفوفة أحادية (تصنيف الزهرة الموافق)
	</li>
	<li>
		test_size: النسبة المئوية لبيانات الاختبار من البيانات الكليه (20% افتراضيًا)
	</li>
</ul>

<p>
	تُعيد:
</p>

<ul>
	<li>
		X_train: بيانات التدريب المختارة عشوائيًا من X.
	</li>
	<li>
		X_test: بيانات الاختبار المختارة عشوائيًا من X.
	</li>
	<li>
		y_train: صفوف بيانات التدريب.
	</li>
	<li>
		y_test: صفوف بيانات الاختبار.
	</li>
</ul>

<p>
	يُمكن تنفيذ الشيفرة لمعاينة قيم مقاييس الأداء:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_298_56" style=""><span class="typ">Accuracy</span><span class="pln"> </span><span class="typ">Score</span><span class="pln"> </span><span class="pun">:</span><span class="lit">93.33</span><span class="pln">
</span><span class="typ">Precision</span><span class="pln"> </span><span class="typ">Score</span><span class="pln"> </span><span class="pun">:</span><span class="lit">92.59</span><span class="pln">
</span><span class="typ">Recall</span><span class="pln"> </span><span class="typ">Score</span><span class="pln"> </span><span class="pun">:</span><span class="lit">93.94</span><span class="pln">
F1 </span><span class="typ">Score</span><span class="pln"> </span><span class="pun">:</span><span class="lit">92.50</span></pre>

<p>
	يجب الانتباه إلى أن هذه القيم هي قيم استرشادية، بمعنى أنها ستختلف عند كل تنفيذ للشيفرة البرمجية إذ أن حسابها يعتمد في كل مرة على مجموعة مختلفة من بيانات الاختبار (إذ أن هذه البيانات تُختار كل مرة بشكل عشوائي) مثلًا يُعطي تنفيذ ثاني لنفس الشيفرة السابقة النتائج التالية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_298_58" style=""><span class="typ">Accuracy</span><span class="pln"> </span><span class="typ">Score</span><span class="pln"> </span><span class="pun">:</span><span class="lit">90.00</span><span class="pln">
</span><span class="typ">Precision</span><span class="pln"> </span><span class="typ">Score</span><span class="pln"> </span><span class="pun">:</span><span class="lit">92.31</span><span class="pln">
</span><span class="typ">Recall</span><span class="pln"> </span><span class="typ">Score</span><span class="pln"> </span><span class="pun">:</span><span class="lit">92.86</span><span class="pln">
F1 </span><span class="typ">Score</span><span class="pln"> </span><span class="pun">:</span><span class="lit">91.65</span></pre>

<h2>
	تقييم نماذج التعلم باستخدام طريقة التقييم المتقاطع Cross Validation method
</h2>

<p>
	تهدف هذه الطريقة بشكل أساسي إلى استخدام كل البيانات للتدريب (بخلاف الطريقة السابقة والتي تستخدم قسمًا منها فقط)، كما أن قيم مقاييس التقييم ستكون نفسها من أجل كل تنفيذ للشيفرة (بخلاف الطريقة السابقة كما عرضنا أعلاه).
</p>

<p>
	عوضًا عن تقسيم البيانات إلى بيانات للتدريب وبيانات للاختبار (التقييم) مما يُخفّض من البيانات التي يُمكن لنا استخدامها للتدريب، نستخدم التقويم المتقاطع مع عدد محدّد من الحاويات K-Fold.
</p>

<p>
	تُقسم بيانات التدريب إلى عدد K من الحاويات ومن ثم نقوم بتكرار ما يلي K مرة: في كل مرة i نقوم بتدريب النموذج مع بيانات K-1 حاوية (كل الحاويات ما عدا الحاوية i) ومن ثم تقييمه مع بيانات الحاوية i. في النهاية، يكون مقياس الأداء النهائي هو متوسط مقياس التقييم لكل التكرارات (i:1..K).
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103962" href="https://academy.hsoub.com/uploads/monthly_2022_07/008.png.9ee7e42ca86d6e229049a2994393bdd9.png" rel="" data-fileext="png"><img alt="008.png" class="ipsImage ipsImage_thumbnailed" data-fileid="103962" data-unique="rmiib2ikz" style="width: 500px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_07/008.thumb.png.4edc0eb604d55739df221a6344c66d38.png"></a>
</p>

<p>
	توفر المكتبة sklearn في <a href="https://wiki.hsoub.com/Python" rel="external">بايثون</a> الدالة cross_val_score لتنفيذ التقييم المتقاطع مع تحديد عدد الحاويات المطلوب، كما تُبين الشيفرة البرمجية التالية والتي نحسب فيها مقياس الدقة مثلًا:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_298_61" style=""><span class="com"># مجموعة بيانات </span><span class="pln">
</span><span class="com"># أزهار السوسن</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">datasets </span><span class="kwd">import</span><span class="pln"> load_iris
</span><span class="com"># مكتبة تقسيم البيانات إلى تدريب واختبار</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">model_selection </span><span class="kwd">import</span><span class="pln"> train_test_split
</span><span class="com"># مكتبة مُصنف بايز</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">naive_bayes </span><span class="kwd">import</span><span class="pln"> </span><span class="typ">GaussianNB</span><span class="pln">
</span><span class="com"># مكتبة التقييم المتقاطع</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">model_selection </span><span class="kwd">import</span><span class="pln"> cross_val_score
</span><span class="com"># مكتبات مقاييس التقييم</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">metrics </span><span class="kwd">import</span><span class="pln"> accuracy_score
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">metrics </span><span class="kwd">import</span><span class="pln"> precision_score
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">metrics </span><span class="kwd">import</span><span class="pln"> recall_score
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">metrics </span><span class="kwd">import</span><span class="pln"> f1_score
</span><span class="com"># تحميل البيانات </span><span class="pln">
X</span><span class="pun">,</span><span class="pln"> y </span><span class="pun">=</span><span class="pln"> load_iris</span><span class="pun">(</span><span class="pln">return_X_y</span><span class="pun">=</span><span class="kwd">True</span><span class="pun">)</span><span class="pln">
</span><span class="com"># تقسيم البيانات إلى تدريب و اختبار</span><span class="pln">
X_train</span><span class="pun">,</span><span class="pln"> X_test</span><span class="pun">,</span><span class="pln"> y_train</span><span class="pun">,</span><span class="pln"> y_test </span><span class="pun">=</span><span class="pln"> train_test_split</span><span class="pun">(</span><span class="pln">X</span><span class="pun">,</span><span class="pln"> y</span><span class="pun">,</span><span class="pln"> test_size</span><span class="pun">=</span><span class="lit">0.2</span><span class="pun">)</span><span class="pln">
</span><span class="com"># بناء مصنف بايز</span><span class="pln">
gnb </span><span class="pun">=</span><span class="pln"> </span><span class="typ">GaussianNB</span><span class="pun">()</span><span class="pln">
</span><span class="com"># حساب مقياس الصحة</span><span class="pln">
scores </span><span class="pun">=</span><span class="pln"> cross_val_score</span><span class="pun">(</span><span class="pln">gnb</span><span class="pun">,</span><span class="pln"> X</span><span class="pun">,</span><span class="pln"> y</span><span class="pun">,</span><span class="pln"> cv</span><span class="pun">=</span><span class="lit">5</span><span class="pun">,</span><span class="pln"> scoring</span><span class="pun">=</span><span class="str">"accuracy"</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">scores</span><span class="pun">)</span><span class="pln">
</span><span class="com"># حساب المتوسط</span><span class="pln">
meanScore </span><span class="pun">=</span><span class="pln"> scores</span><span class="pun">.</span><span class="pln">mean</span><span class="pun">()</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">meanScore </span><span class="pun">*</span><span class="pln"> </span><span class="lit">100</span><span class="pun">)</span></pre>

<p>
	يكون ناتج التنفيذ (في كل مرة):
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_298_63" style=""><span class="pun">[</span><span class="lit">0.93333333</span><span class="pln"> </span><span class="lit">0.96666667</span><span class="pln"> </span><span class="lit">0.93333333</span><span class="pln"> </span><span class="lit">0.93333333</span><span class="pln"> </span><span class="lit">1.</span><span class="pln">        </span><span class="pun">]</span><span class="pln">
</span><span class="lit">95.33333333333334</span></pre>

<h2>
	اختيار نموذج التعلم الأفضل
</h2>

<p>
	يُمكن استخدام طريقة التقويم المتقاطع السابقة لتقييم مجموعة من نماذج التعلم. نُعرّف في الشيفرة البرمجية التالية الدالة cv_comparison_classification والتي نُمرر لها مجموعة من نماذج التعلم models والبيانات كلها (X,y) وعدد الحاويات cv، وتُعيد هذه الدالة إطار بيانات يُظهر مقياس الدقة لكل نموذج.
</p>

<p>
	تدور حلقة for في الدالة على النماذج المُمرره، وتستدعي من أجل كل نموذج دالة التقويم المتقاطع من المكتبة sklearn.model والتي تُعيد قائمة بقيم مقياس الصحة (كل عنصر في القائمة هو قيمة مقياس الصحة من أجل حاوية اختبار ما).
</p>

<p>
	نحسب متوسط mean القائمة السابقة، ونضيف عمودًا جديدًا إلى إطار البيانات يكون اسمه اسم النموذج والقيمة في الخلية الموافقة للسطر الوحيد في إطار البيانات (والمفهرس بـ Accuracy) قيمة مقياس الصحة.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_298_65" style=""><span class="com"># مكتبة أطر البيانات</span><span class="pln">
</span><span class="kwd">import</span><span class="pln"> pandas </span><span class="kwd">as</span><span class="pln"> pd
</span><span class="com"># مكتبة التقييم المتقاطع</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">model_selection </span><span class="kwd">import</span><span class="pln"> cross_val_score
</span><span class="com"># دالة لمقارنة مجموعة من النماذج</span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> cv_comparison_classification</span><span class="pun">(</span><span class="pln">models</span><span class="pun">,</span><span class="pln"> X</span><span class="pun">,</span><span class="pln"> y</span><span class="pun">,</span><span class="pln"> cv</span><span class="pun">):</span><span class="pln">
    </span><span class="com"># تهيئة إطار بيانات لمقاييس التقييم</span><span class="pln">
    cv_df </span><span class="pun">=</span><span class="pln"> pd</span><span class="pun">.</span><span class="typ">DataFrame</span><span class="pun">()</span><span class="pln">
    </span><span class="com"># الدوران على النماذج</span><span class="pln">
    </span><span class="com"># تطبيق التقييم المتقاطع</span><span class="pln">
    </span><span class="kwd">for</span><span class="pln"> model </span><span class="kwd">in</span><span class="pln"> models</span><span class="pun">:</span><span class="pln">
        </span><span class="com">#  حساب مقياس الصحة لكل حاوية</span><span class="pln">
        acc </span><span class="pun">=</span><span class="pln"> cross_val_score</span><span class="pun">(</span><span class="pln">model</span><span class="pun">,</span><span class="pln"> X</span><span class="pun">,</span><span class="pln"> y</span><span class="pun">,</span><span class="pln">scoring</span><span class="pun">=</span><span class="str">'accuracy'</span><span class="pun">,</span><span class="pln">  cv</span><span class="pun">=</span><span class="pln">cv</span><span class="pun">)</span><span class="pln">
        </span><span class="com"># حساب متوسط الصحة للنموذج</span><span class="pln">
        acc_avg </span><span class="pun">=</span><span class="pln"> round</span><span class="pun">(</span><span class="pln">acc</span><span class="pun">.</span><span class="pln">mean</span><span class="pun">(),</span><span class="pln"> </span><span class="lit">4</span><span class="pun">)</span><span class="pln">
        </span><span class="com"># كتابة النتيجة في إطار البيانات</span><span class="pln">
        cv_df</span><span class="pun">[</span><span class="pln">str</span><span class="pun">(</span><span class="pln">model</span><span class="pun">)]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="pln"> acc_avg</span><span class="pun">]</span><span class="pln">
        cv_df</span><span class="pun">.</span><span class="pln">index </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="str">'Accuracy'</span><span class="pun">]</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> cv_df</span></pre>

<p>
	نستدعي في الشيفرة البرمجية التالية الدالة السابقة للمقارنة بين ثلاثة نماذج للتصنيف: مصنف بايز GaussianNB ومصنف أشجار القرار DecisionTreeClassifier ومصنف أقرب الجيران KNeighborsClassifier.
</p>

<p>
	نستخدم بيانات تصنيف أزهار السوسن المتاحة من sklearn.datasets لتنفيذ نماذج التعلم عليها.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_298_67" style=""><span class="com"># مجموعة بيانات </span><span class="pln">
</span><span class="com"># أزهار السوسن</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">datasets </span><span class="kwd">import</span><span class="pln"> load_iris
</span><span class="com"># مصنف بايز</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">naive_bayes </span><span class="kwd">import</span><span class="pln"> </span><span class="typ">GaussianNB</span><span class="pln">
</span><span class="com"># مصنف شجرة القرار</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">tree </span><span class="kwd">import</span><span class="pln"> </span><span class="typ">DecisionTreeClassifier</span><span class="pln">
</span><span class="com"># مصنف أقرب الجيران</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">neighbors </span><span class="kwd">import</span><span class="pln"> </span><span class="typ">KNeighborsClassifier</span><span class="pln">
</span><span class="com"># تحميل البيانات </span><span class="pln">
X</span><span class="pun">,</span><span class="pln"> y </span><span class="pun">=</span><span class="pln"> load_iris </span><span class="pun">(</span><span class="pln">return_X_y</span><span class="pun">=</span><span class="kwd">True</span><span class="pun">)</span><span class="pln">
</span><span class="com"># إنشاء متغيرات النماذج</span><span class="pln">
mlr_g </span><span class="pun">=</span><span class="pln"> </span><span class="typ">GaussianNB</span><span class="pun">()</span><span class="pln">
mlr_d </span><span class="pun">=</span><span class="pln"> </span><span class="typ">DecisionTreeClassifier</span><span class="pun">()</span><span class="pln">
mlr_k </span><span class="pun">=</span><span class="pln"> </span><span class="typ">KNeighborsClassifier</span><span class="pun">()</span><span class="pln">
</span><span class="com"># وضع النماذج في قائمة</span><span class="pln">
models </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="pln">mlr_g</span><span class="pun">,</span><span class="pln"> mlr_d</span><span class="pun">,</span><span class="pln"> mlr_k</span><span class="pun">]</span><span class="pln">
</span><span class="com"># استدعاء دالة المقارنة</span><span class="pln">
comp_df </span><span class="pun">=</span><span class="pln"> cv_comparison_classification</span><span class="pun">(</span><span class="pln">models</span><span class="pun">,</span><span class="pln"> X</span><span class="pun">,</span><span class="pln"> y</span><span class="pun">,</span><span class="pln"> </span><span class="lit">4</span><span class="pun">)</span><span class="pln">
</span><span class="com"># إظهار إطار البيانات للمقارنه</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">comp_df</span><span class="pun">)</span></pre>

<p>
	يُظهر تنفيذ الشيفرة السابقة إطار البيانات التالي والذي يسمح لنا بمعاينة مقياس الصحة لكل نموذج مما يسمح لنا باختيار الأنسب منها:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103964" href="https://academy.hsoub.com/uploads/monthly_2022_07/009.png.b9e3c11d7e3b566c9fab9b26e61a571d.png" rel="" data-fileext="png"><img alt="009.png" class="ipsImage ipsImage_thumbnailed" data-fileid="103964" data-unique="iea80i8jv" style="width: 650px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_07/009.png.b9e3c11d7e3b566c9fab9b26e61a571d.png"></a>
</p>

<h2>
	الخلاصة
</h2>

<p>
	عرضنا في هذه المقالة مقاييس تقييم نماذج التعلم المختلفة وكيفية اختيار النموذج الأفضل منها لمسألة معينة.
</p>

<p>
	يُمكن تجربة جميع أمثلة المقالة من موقع Google Colab من <a href="https://colab.research.google.com/drive/1rOmTMlbwnqBOYVoDIAXW84rGb0Dddxw0" rel="external nofollow">الرابط</a> أو من الملف المرفق.
</p>

<p>
	الملف المرفق <a class="ipsAttachLink" data-fileid="103948" href="https://academy.hsoub.com/applications/core/interface/file/attachment.php?id=103948" rel="" data-fileext="zip">eval.zip</a>.
</p>
<div class="banner-container ipsBox ipsPadding">
	<div class="inner-banner-container">
		<p class="banner-heading">
			دورة الذكاء الاصطناعي
		</p>

		<p class="banner-subtitle">
			احترف برمجة الذكاء الاصطناعي AI وتحليل البيانات وتعلم كافة المعلومات التي تحتاجها لبناء نماذج ذكاء اصطناعي متخصصة.
		</p>

		<div>
			<a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://academy.hsoub.com/learn/artificial-intelligence" rel="">اشترك الآن</a>
		</div>
	</div>

	<div class="banner-img">
		<a href="https://academy.hsoub.com/learn/artificial-intelligence" rel=""><img alt="دورة الذكاء الاصطناعي AI" src="https://academy.hsoub.com/learn/assets/images/courses/artificial-intelligence.png"></a>
	</div>
</div>
<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D9%85%D9%81%D8%A7%D9%87%D9%8A%D9%85-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-r1009/" rel="">المفاهيم الأساسية لتعلم الآلة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-%D8%A7%D9%84%D8%AA%D8%AD%D8%AF%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%B1%D8%A6%D9%8A%D8%B3%D9%8A%D8%A9-%D9%88%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D9%88%D8%B3%D8%B9-%D9%81%D9%8A-%D8%A7%D9%84%D9%85%D8%AC%D8%A7%D9%84-r1010/" rel="">تعلم الآلة: التحديات الرئيسية وكيفية التوسع في المجال</a>
	</li>
	<li>
		النسخة الكاملة لكتاب <a href="https://academy.hsoub.com/files/17-%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-%D9%88%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9/" rel="">مدخل إلى الذكاء الاصطناعي وتعلم الآلة</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">1635</guid><pubDate>Tue, 09 Aug 2022 16:01:00 +0000</pubDate></item><item><title>&#x627;&#x633;&#x62A;&#x643;&#x634;&#x627;&#x641; &#x642;&#x648;&#x627;&#x639;&#x62F; &#x627;&#x644;&#x62A;&#x631;&#x627;&#x628;&#x637; &#x641;&#x64A; &#x645;&#x628;&#x64A;&#x639;&#x627;&#x62A; &#x627;&#x644;&#x645;&#x62A;&#x627;&#x62C;&#x631; &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; &#x62A;&#x642;&#x646;&#x64A;&#x627;&#x62A; &#x62A;&#x639;&#x644;&#x645; &#x627;&#x644;&#x622;&#x644;&#x629;</title><link>https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D8%B3%D8%AA%D9%83%D8%B4%D8%A7%D9%81-%D9%82%D9%88%D8%A7%D8%B9%D8%AF-%D8%A7%D9%84%D8%AA%D8%B1%D8%A7%D8%A8%D8%B7-%D9%81%D9%8A-%D9%85%D8%A8%D9%8A%D8%B9%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%AA%D8%A7%D8%AC%D8%B1-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AA%D9%82%D9%86%D9%8A%D8%A7%D8%AA-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-r1634/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_07/62e2751f47545_-----.jpg.3988d99140530f5093783377a2786d85.jpg" /></p>
<p>
	تُعدّ مسألة استكشاف قواعد الترابط في مبيعات المتاجر من المسائل المهمة جدًا لأصحاب <a href="https://academy.hsoub.com/entrepreneurship/ecommerce/%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D8%A7%D9%84%D9%85%D8%AA%D8%A7%D8%AC%D8%B1-%D8%A7%D9%84%D8%A5%D9%84%D9%83%D8%AA%D8%B1%D9%88%D9%86%D9%8A%D8%A9-%D9%88%D9%86%D9%85%D8%A7%D8%B0%D8%AC-%D8%A5%D9%8A%D8%B1%D8%A7%D8%AF%D8%A7%D8%AA%D9%87%D8%A7-r733/" rel="">المتاجر الإلكترونية</a>، إذ يسمح إيجاد هذه القواعد بإظهار توصيات recommandations الشراء المناسبة للزبائن مما يساهم في زيادة مبيعات المتجر مثلًا لو عرفنا أن معظم الزبائن تشتري السلعة B مع السلعة A دومًا، فسيكون من المناسب إظهار توصية بشراء السلعة B لكل زبون يطلب شراء السلعة A مما يُحقق، في نهاية المطاف، رضى الزبون وزيادة أرباح المتجر.
</p>

<p>
	نعرض في هذه المقالة استخدام تقنيات تعلم الآلة لإيجاد قواعد الترابط انطلاقًا من حركات الشراء السابقة للمتجر.
</p>

<h2>
	بيانات التدريب
</h2>

<p>
	نستخدم بيانات عمليات الشراء لأحد متاجر مبيعات التجزئة والمتاحة على <a href="https://www.kaggle.com/datasets/irfanasrullah/groceries" rel="external nofollow">الرابط</a> أو يمكنك تنزيلها من الملف <a class="ipsAttachLink" data-fileid="103934" href="https://academy.hsoub.com/applications/core/interface/file/attachment.php?id=103934" rel="" data-fileext="zip">data.zip</a> في المقال. تأتي هذه البيانات في الملف Groceries.csv المرفق والذي يحوي حوالي 10000 صف. يحوي كل صف بيانات عربة تسوق واحدة أي مجموعة من السلع التي اشتراها أحد الزبائن معًا كما يُبين الشكل التالي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103919" href="https://academy.hsoub.com/uploads/monthly_2022_07/001.png.6763862a43206592b05f031c82de3f89.png" rel="" data-fileext="png"><img alt="001.png" class="ipsImage ipsImage_thumbnailed" data-fileid="103919" data-unique="9mms0aln6" style="width: 600px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_07/001.png.6763862a43206592b05f031c82de3f89.png"></a>
</p>

<h2>
	أساسيات في التنقيب عن قواعد الترابط
</h2>

<p>
	نعرض فيما يلي بعض التعاريف الأساسية في مسألة التنقيب عن قواعد الترابط.
</p>

<h3>
	التنقيب عن قواعد الترابط
</h3>

<p>
	تُعرّف مسألة التنقيب عن قواعد الترابط كما يلي:
</p>

<p>
	بفرض أن لدينا مجموعة من الإجراءات transactions، يتألف كل إجراء من مجموعة من العناصر items.
</p>

<p>
	يكون المطلوب إيجاد جميع الترابطات correlations بين ظهور مجموعة جزئية من العناصر مع مجموعة جزئية أخرى. يُبين الشكل التالي مثالًا توضيحيًا:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103921" href="https://academy.hsoub.com/uploads/monthly_2022_07/002.png.95d66f11ed134f67578857931d8481dd.png" rel="" data-fileext="png"><img alt="002.png" class="ipsImage ipsImage_thumbnailed" data-fileid="103921" data-unique="2szrai7m5" style="width: 650px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_07/002.thumb.png.f2e0f6d4018ac270b8e4f774f6094130.png"></a>
</p>

<p>
	نستخدم فيما يلي المثال التالي التعليمي والذي يحوي 5 إجراءات:
</p>
<style type="text/css">
table {
    width: 100%;
}

thead {
    vertical-align: middle;
    text-align: center;
} 

td, th {
    border: 1px solid #dddddd;
    text-align: right;
    padding: 8px;
    text-align: inherit;

}
tr:nth-child(even) {
    background-color: #dddddd;
}</style>
<table>
	<thead>
		<tr>
			<th>
				الإجراء
			</th>
			<th>
				Transaction
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>
				خبز، حليب
			</td>
			<td>
				Bread,Milk
			</td>
		</tr>
		<tr>
			<td>
				خبز، فوط، عصير، بيض
			</td>
			<td>
				Bread, Diaper, Juice, Eggs
			</td>
		</tr>
		<tr>
			<td>
				حليب، فوط، عصير، كولا
			</td>
			<td>
				Milk, Diaper, Juice, Coke
			</td>
		</tr>
		<tr>
			<td>
				خبز، حليب، فوط، عصير
			</td>
			<td>
				Bread, Milk, Diaper, Juice
			</td>
		</tr>
		<tr>
			<td>
				خبز، حليب، فوط، كولا
			</td>
			<td>
				Bread, Milk, Diaper, Coke
			</td>
		</tr>
	</tbody>
</table>

<p>
	نُعطي أولًا أهم التعاريف الأساسية:
</p>

<h4>
	مجموعة عناصر itemset
</h4>

<p>
	وهي مجموعة من العناصر مثلًا: { Milk , Bread , Diaper} (فوط أطفال، خبز، حليب) كما ندون k-itemset للدلالة على مجموعة عناصر تحوي k عنصر.
</p>

<h4>
	عدد الدعم support count لمجموعة من العناصر
</h4>

<p>
	وهو عدد مرات تواتر (ظهور) مجموعة من العناصر في الإجراءات مثلًا يكون عدد الدعم في مثالنا التعليمي لمجموعة العناصر السابقة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7191_10" style=""><span class="pln">sc</span><span class="pun">({</span><span class="typ">Milk</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Bread</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Diaper</span><span class="pun">})</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span></pre>

<h4>
	الدعم support لمجموعة من العناصر
</h4>

<p>
	وهو النسبة المئوية لظهور مجموعة من العناصر في الإجراءات، مثلًا يكون عدد الدعم في مثالنا التعليمي لمجموعة العناصر سابقة الذكر:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7191_12" style=""><span class="pln">s</span><span class="pun">({</span><span class="typ">Milk</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Bread</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Diaper</span><span class="pun">})</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="lit">2</span><span class="pun">/</span><span class="lit">5</span><span class="pun">)*</span><span class="lit">100</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">40</span><span class="pun">%</span></pre>

<h4>
	الحد الأدنى للدعم minimum support
</h4>

<p>
	وهو حد أدنى تجريبي للدعم (يُمكن أن يكون رقم أو نسبة مئوية) نُحدّده لخوارزميات التنقيب عن القواعد.
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<div class="ipsQuote_contents ipsClearfix" data-gramm="false">
		<p>
			<strong>ملاحظة</strong>: يُمثّل الدعم عمليًا أهمية العناصر، بمعنى أنه كلما كان الدعم مرتفعًا فهذا يحصر اهتمامنا في السلع التي تُباع مرارًا في المتجر.
		</p>
	</div>
</blockquote>

<div class="banner-container ipsBox ipsPadding">
	<div class="inner-banner-container">
		<p class="banner-heading">
			دورة الذكاء الاصطناعي
		</p>

		<p class="banner-subtitle">
			احترف برمجة الذكاء الاصطناعي AI وتحليل البيانات وتعلم كافة المعلومات التي تحتاجها لبناء نماذج ذكاء اصطناعي متخصصة.
		</p>

		<div>
			<a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://academy.hsoub.com/learn/artificial-intelligence" rel="">اشترك الآن</a>
		</div>
	</div>

	<div class="banner-img">
		<a href="https://academy.hsoub.com/learn/artificial-intelligence" rel=""><img alt="دورة الذكاء الاصطناعي AI" src="https://academy.hsoub.com/learn/assets/images/courses/artificial-intelligence.png"></a>
	</div>
</div>

<h4>
	مجموعة عناصر متواترة frequent itemset
</h4>

<p>
	نقول عن مجموعة عناصر أنها متواترة إذا كان دعم المجموعة أكبر أو يساوي الحد الأدنى للدعم.
</p>

<h4>
	قاعدة ترابط association rule
</h4>

<p>
	وهي اقتضاء من الشكل:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7191_14" style=""><span class="pun">{</span><span class="pln">X</span><span class="pun">}</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">{</span><span class="pln">Y</span><span class="pun">}</span></pre>

<p>
	وحيث X و Y هي مجموعات من العناصر (لا تحوي، بالطبع، عناصر مشتركة) مثلاً:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7191_16" style=""><span class="pun">{</span><span class="typ">Milk</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Diaper</span><span class="pun">}</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">{</span><span class="typ">Bread</span><span class="pun">}</span><span class="pln"> </span></pre>

<h4>
	الدعم لقاعدة ترابط association rule support
</h4>

<p>
	يكون الدعم لقاعدة ترابط X=&gt;Y هو الدعم لاجتماع العناصر X و Y معًا. أي نسبة الإجراءات التي تحوي X و Y معًا من عدد الإجراءات الكلي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103923" href="https://academy.hsoub.com/uploads/monthly_2022_07/004.png.80185f49bfd3b9619b44707a3475bdb1.png" rel="" data-fileext="png"><img alt="004.png" class="ipsImage ipsImage_thumbnailed" data-fileid="103923" data-unique="lcj5c2ah5" style="width: 500px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_07/004.png.80185f49bfd3b9619b44707a3475bdb1.png"></a>
</p>

<h4>
	الثقة في قاعدة ترابط association rule confidence
</h4>

<p>
	وهو الاحتمال الشرطي لظهور مجموعة العناصر Y في إجراء يحوي X، أي عمليًا احتمال (الثقة) أن تظهر مجموعة العناصر Y في عربة تسوق تحوي العناصر X.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103924" href="https://academy.hsoub.com/uploads/monthly_2022_07/005.png.6c130d7b77e6d8f025d9d03c3cb4ce53.png" rel="" data-fileext="png"><img alt="005.png" class="ipsImage ipsImage_thumbnailed" data-fileid="103924" data-unique="u4opdpygc" style="width: 500px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_07/005.png.6c130d7b77e6d8f025d9d03c3cb4ce53.png"></a>
</p>

<p>
	مثلًا يكون الدعم لمجموعة العناصر {Milk, Diaper, Bread} في المثال السابق مساويًا 40% لأن هذه العناصر ظهرت مع بعضها البعض مرتين في الإجراءات الخمسة الكلية.
</p>

<p>
	يُمكن من هذه العناصر الثلاثة {Milk, Diaper, Bread} توليد مجموعة من القواعد المختلفة (يكفي أن نوزع هذه العناصر على الطرف اليساري واليمني بكل الطرق الممكنة لنحصل على جميع القواعد). يُمكن أن يكون لكل قاعدة معامل ثقة مختلف كما تُبين الأمثلة التالية (المحسوبة من مثالنا التعليمي):
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7191_20" style=""><span class="pun">{</span><span class="typ">Milk</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Diaper</span><span class="pun">}</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">{</span><span class="typ">Bread</span><span class="pun">}</span><span class="pln"> </span><span class="pun">(</span><span class="pln">s</span><span class="pun">=</span><span class="lit">0.4</span><span class="pun">,</span><span class="pln"> c</span><span class="pun">=</span><span class="lit">0.67</span><span class="pun">)</span><span class="pln">
</span><span class="pun">{</span><span class="typ">Milk</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Bread</span><span class="pun">}</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">{</span><span class="typ">Diaper</span><span class="pun">}</span><span class="pln"> </span><span class="pun">(</span><span class="pln">s</span><span class="pun">=</span><span class="lit">0.4</span><span class="pun">,</span><span class="pln"> c</span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.67</span><span class="pun">)</span><span class="pln">
</span><span class="pun">{</span><span class="typ">Diaper</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Bread</span><span class="pun">}</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">{</span><span class="typ">Milk</span><span class="pun">}</span><span class="pln"> </span><span class="pun">(</span><span class="pln">s</span><span class="pun">=</span><span class="lit">0.4</span><span class="pun">,</span><span class="pln"> c</span><span class="pun">=</span><span class="lit">0.67</span><span class="pun">)</span><span class="pln">
</span><span class="pun">{</span><span class="typ">Bread</span><span class="pun">}</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">{</span><span class="typ">Milk</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Diaper</span><span class="pun">}</span><span class="pln"> </span><span class="pun">(</span><span class="pln">s</span><span class="pun">=</span><span class="lit">0.4</span><span class="pun">,</span><span class="pln"> c</span><span class="pun">=</span><span class="lit">0.50</span><span class="pun">)</span><span class="pln"> 
</span><span class="pun">{</span><span class="typ">Diaper</span><span class="pun">}</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">{</span><span class="typ">Milk</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Bread</span><span class="pun">}</span><span class="pln"> </span><span class="pun">(</span><span class="pln">s</span><span class="pun">=</span><span class="lit">0.4</span><span class="pun">,</span><span class="pln"> c</span><span class="pun">=</span><span class="lit">0.5</span><span class="pun">)</span><span class="pln"> 
</span><span class="pun">{</span><span class="typ">Milk</span><span class="pun">}</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">{</span><span class="typ">Diaper</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Bread</span><span class="pun">}</span><span class="pln"> </span><span class="pun">(</span><span class="pln">s</span><span class="pun">=</span><span class="lit">0.4</span><span class="pun">,</span><span class="pln"> c</span><span class="pun">=</span><span class="lit">0.5</span><span class="pun">)</span></pre>

<p>
	نعرض في هذه المقالة كيفية استخراج قواعد الترابط التي تحقق دعم وثقة معينين.
</p>

<h2>
	إعداد المشروع
</h2>

<p>
	يحتاج تنفذ شيفرات هذه المقالة بيئةً برمجيةً <a href="https://academy.hsoub.com/programming/python/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A9-r211/" rel="">للغة بايثون</a> الإصدار 3.8. ويجب أن تتضمن هذه البيئة البرمجية مدير الحِزم <a href="https://pypi.org/project/pip/" rel="external nofollow">pip</a> لتثبيت الحِزم، ومُنشئ البيئات الافتراضية <a href="https://docs.python.org/3/library/venv.html" rel="external nofollow">venv</a> لإنشاء بيئاتٍ افتراضيةٍ.
</p>

<p>
	نستخدم محرر الشيفرات البرمجية <a href="https://academy.hsoub.com/devops/linux/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D9%87%D9%8A%D8%A6%D8%A9-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%A7%D9%84%D9%85%D9%81%D9%83%D8%B1%D8%A9-jupyter-notebook-%D9%84%D9%84%D8%B9%D9%85%D9%84-%D9%85%D8%B9-%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-python-3-r388/" rel="">Jupyter Notebooks</a>، وهو مفيد جدًا لتجربة وتشغيل الأمثلة الخاصة بتَعَلّم الآلة بطريقةٍ تفاعليةٍ، حيث نستطيع من خلاله تشغيل كتلًا صغيرةً من الشيفرات البرمجية ورؤية النتائج بسرعة، مما يُسهّل علينا اختبار الشيفرات البرمجية وتصحيحها.
</p>

<p>
	نحتاج أولًا لتثبيت بعض التبعيات، وذلك لإنشاء مساحة عملٍ للاحتفاظ بملفاتنا قبل أن نتمكن من تطوير برنامجنا.
</p>

<p>
	نُنشئ مجلدًا جديدًا خاصًا بمشروعنا وندخل إليه هكذا:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7191_65" style=""><span class="pln">mkdir asoc
cd asoc</span></pre>

<p>
	نُنفذّ الأمر التالي لإنشاء البيئة الافتراضية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7191_67" style=""><span class="pln">python </span><span class="pun">-</span><span class="pln">m venv asoc</span></pre>

<p>
	ومن ثم الأمر التالي في <a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%A7-%D9%87%D9%88-%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D9%84%D9%8A%D9%86%D9%83%D8%B3%D8%9F-r451/" rel="">Linux</a> لتنشيط البيئة الافتراضية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7191_28" style=""><span class="pln">source asoc</span><span class="pun">/</span><span class="pln">bin</span><span class="pun">/</span><span class="pln">activate</span></pre>

<p>
	أما في Windows، فيكون أمر التنشيط:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7191_24" style=""><span class="str">"asoc/Scripts/activate.bat"</span></pre>

<p>
	نستخدم إصداراتٍ مُحددةٍ من المكتبات اللازمة، من خلال إنشاء ملف <code>requirements.txt</code> في مجلد المشروع، وسيُحدِّد هذا الملف المتطلبات والإصدارات التي سنحتاج إليها.
</p>

<p>
	نفتح الملف <code>requirements.txt</code> في محرر النصوص، ونُضيف الأسطر التالية، وذلك لتحديد المكتبات التي نريدها وإصداراتها:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7191_22" style=""><span class="pln">asttokens</span><span class="pun">==</span><span class="lit">2.0</span><span class="pun">.</span><span class="lit">5</span><span class="pln">
backcall</span><span class="pun">==</span><span class="lit">0.2</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
colorama</span><span class="pun">==</span><span class="lit">0.4</span><span class="pun">.</span><span class="lit">4</span><span class="pln">
cycler</span><span class="pun">==</span><span class="lit">0.11</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
debugpy</span><span class="pun">==</span><span class="lit">1.6</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
decorator</span><span class="pun">==</span><span class="lit">5.1</span><span class="pun">.</span><span class="lit">1</span><span class="pln">
entrypoints</span><span class="pun">==</span><span class="lit">0.4</span><span class="pln">
executing</span><span class="pun">==</span><span class="lit">0.8</span><span class="pun">.</span><span class="lit">3</span><span class="pln">
fonttools</span><span class="pun">==</span><span class="lit">4.33</span><span class="pun">.</span><span class="lit">3</span><span class="pln">
ipykernel</span><span class="pun">==</span><span class="lit">6.13</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
ipython</span><span class="pun">==</span><span class="lit">8.4</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
jedi</span><span class="pun">==</span><span class="lit">0.18</span><span class="pun">.</span><span class="lit">1</span><span class="pln">
joblib</span><span class="pun">==</span><span class="lit">1.1</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
jupyter</span><span class="pun">-</span><span class="pln">client</span><span class="pun">==</span><span class="lit">7.3</span><span class="pun">.</span><span class="lit">1</span><span class="pln">
jupyter</span><span class="pun">-</span><span class="pln">core</span><span class="pun">==</span><span class="lit">4.10</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
kiwisolver</span><span class="pun">==</span><span class="lit">1.4</span><span class="pun">.</span><span class="lit">2</span><span class="pln">
matplotlib</span><span class="pun">==</span><span class="lit">3.5</span><span class="pun">.</span><span class="lit">2</span><span class="pln">
matplotlib</span><span class="pun">-</span><span class="pln">inline</span><span class="pun">==</span><span class="lit">0.1</span><span class="pun">.</span><span class="lit">3</span><span class="pln">
mlxtend</span><span class="pun">==</span><span class="lit">0.20</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
nest</span><span class="pun">-</span><span class="pln">asyncio</span><span class="pun">==</span><span class="lit">1.5</span><span class="pun">.</span><span class="lit">5</span><span class="pln">
numpy</span><span class="pun">==</span><span class="lit">1.22</span><span class="pun">.</span><span class="lit">4</span><span class="pln">
packaging</span><span class="pun">==</span><span class="lit">21.3</span><span class="pln">
pandas</span><span class="pun">==</span><span class="lit">1.4</span><span class="pun">.</span><span class="lit">2</span><span class="pln">
parso</span><span class="pun">==</span><span class="lit">0.8</span><span class="pun">.</span><span class="lit">3</span><span class="pln">
pickleshare</span><span class="pun">==</span><span class="lit">0.7</span><span class="pun">.</span><span class="lit">5</span><span class="pln">
</span><span class="typ">Pillow</span><span class="pun">==</span><span class="lit">9.1</span><span class="pun">.</span><span class="lit">1</span><span class="pln">
prompt</span><span class="pun">-</span><span class="pln">toolkit</span><span class="pun">==</span><span class="lit">3.0</span><span class="pun">.</span><span class="lit">29</span><span class="pln">
psutil</span><span class="pun">==</span><span class="lit">5.9</span><span class="pun">.</span><span class="lit">1</span><span class="pln">
pure</span><span class="pun">-</span><span class="pln">eval</span><span class="pun">==</span><span class="lit">0.2</span><span class="pun">.</span><span class="lit">2</span><span class="pln">
</span><span class="typ">Pygments</span><span class="pun">==</span><span class="lit">2.12</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
pyparsing</span><span class="pun">==</span><span class="lit">3.0</span><span class="pun">.</span><span class="lit">9</span><span class="pln">
python</span><span class="pun">-</span><span class="pln">dateutil</span><span class="pun">==</span><span class="lit">2.8</span><span class="pun">.</span><span class="lit">2</span><span class="pln">
pytz</span><span class="pun">==</span><span class="lit">2022.1</span><span class="pln">
pywin32</span><span class="pun">==</span><span class="lit">304</span><span class="pln">
pyzmq</span><span class="pun">==</span><span class="lit">23.0</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
scikit</span><span class="pun">-</span><span class="pln">learn</span><span class="pun">==</span><span class="lit">1.1</span><span class="pun">.</span><span class="lit">1</span><span class="pln">
scipy</span><span class="pun">==</span><span class="lit">1.8</span><span class="pun">.</span><span class="lit">1</span><span class="pln">
seaborn</span><span class="pun">==</span><span class="lit">0.11</span><span class="pun">.</span><span class="lit">2</span><span class="pln">
six</span><span class="pun">==</span><span class="lit">1.16</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
stack</span><span class="pun">-</span><span class="pln">data</span><span class="pun">==</span><span class="lit">0.2</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
threadpoolctl</span><span class="pun">==</span><span class="lit">3.1</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
tornado</span><span class="pun">==</span><span class="lit">6.1</span><span class="pln">
traitlets</span><span class="pun">==</span><span class="lit">5.2</span><span class="pun">.</span><span class="lit">2.post1</span><span class="pln">
wcwidth</span><span class="pun">==</span><span class="lit">0.2</span><span class="pun">.</span><span class="lit">5</span></pre>

<p>
	نحفظ التغييرات التي طرأت على الملف ونخرج من محرر النصوص، ثم نُثَبت هذه المكتبات بالأمر التالي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7191_70" style=""><span class="pun">(</span><span class="pln">asoc</span><span class="pun">)</span><span class="pln"> $ pip install </span><span class="pun">-</span><span class="pln">r requirements</span><span class="pun">.</span><span class="pln">txt</span></pre>

<p>
	بعد تثبيتنا لهذه التبعيات، نُصبح جاهزين لبدء العمل على مشروعنا.
</p>

<h2>
	كتابة الشيفرة البرمجية
</h2>

<p>
	نُشغّل محرر الشيفرات البرمجية Jupyter Notebook بمجرد اكتمال عملية التثبيت هكذا:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7191_32" style=""><span class="pun">(</span><span class="pln">asoc</span><span class="pun">)</span><span class="pln"> $ jupyter notebook</span></pre>

<p>
	ثم نُنشئ ملفًا جديدًا في داخل المحرر ونُسمّه باسم asc مثلًا.
</p>

<h3>
	توليد قواعد الترابط
</h3>

<p>
	نعرض في الشيفرة التالية توليد قواعد الترابط للمثال السابق بهدف التعرف على المكتبات اللازمة وآلية استخدامها.
</p>

<p>
	نضع إجراءات المثال السابق أولًا في مصفوفة ثنائية وبحيث يكون كل عنصر منها هو مصفوفة من عناصر إجراء واحد.
</p>

<p>
	نحتاج أولًا إلى توليد إطار بيانات dataframe وبحيث تكون رؤوس الأعمدة هي العناصر وقيم الخلايا هي إما True في حال وجود العنصر في صف row الإجراء الموافق أو False في حال عدم وجوده.
</p>

<p>
	نستخدم الصنف <code>TransactionEncoder</code> من المكتبة mlxtend.preprocessing للوصول إلى ذلك.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7191_34" style=""><span class="com"># الإجراءات</span><span class="pln">
transactions </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[[</span><span class="str">'Bread'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Milk'</span><span class="pun">],</span><span class="pln">
</span><span class="pun">[</span><span class="str">'Bread'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Diaper'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Juice'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Eggs'</span><span class="pun">],</span><span class="pln">
</span><span class="pun">[</span><span class="str">'Milk'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Diaper'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Juice'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Coke'</span><span class="pln"> </span><span class="pun">],</span><span class="pln">
</span><span class="pun">[</span><span class="str">'Bread'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Milk'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Diaper'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Juice'</span><span class="pun">],</span><span class="pln">
</span><span class="pun">[</span><span class="str">'Bread'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Milk'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Diaper'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Coke'</span><span class="pun">]]</span><span class="pln">

</span><span class="com"># مكتبة ترميز الإجراءات</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> mlxtend</span><span class="pun">.</span><span class="pln">preprocessing </span><span class="kwd">import</span><span class="pln"> </span><span class="typ">TransactionEncoder</span><span class="pln">

</span><span class="com"># إنشاء غرض من الصف </span><span class="pln">
te </span><span class="pun">=</span><span class="pln"> </span><span class="typ">TransactionEncoder</span><span class="pun">()</span><span class="pln">
</span><span class="com"># ملائمة المرمز مع البيانات</span><span class="pln">
te_model </span><span class="pun">=</span><span class="pln"> te</span><span class="pun">.</span><span class="pln">fit</span><span class="pun">(</span><span class="pln">transactions</span><span class="pun">)</span><span class="pln">
</span><span class="com"># تحويل الإجراءات </span><span class="pln">
rows</span><span class="pun">=</span><span class="pln">te_model</span><span class="pun">.</span><span class="pln">transform</span><span class="pun">(</span><span class="pln">transactions</span><span class="pun">)</span><span class="pln">
</span><span class="com"># استيراد مكتبة إطار البيانات</span><span class="pln">
</span><span class="kwd">import</span><span class="pln"> pandas </span><span class="kwd">as</span><span class="pln"> pd
</span><span class="com"># بناء إطار بيانات الإجراءات </span><span class="pln">
df </span><span class="pun">=</span><span class="pln"> pd</span><span class="pun">.</span><span class="typ">DataFrame</span><span class="pun">(</span><span class="pln">rows</span><span class="pun">,</span><span class="pln"> columns</span><span class="pun">=</span><span class="pln">te_model</span><span class="pun">.</span><span class="pln">columns_</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">df</span><span class="pun">)</span></pre>

<p>
	وبالنتيجة يكون لدينا إطار بيانات الإجراءات التالي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103925" href="https://academy.hsoub.com/uploads/monthly_2022_07/006.png.7377065b16420657ac7c6ffbcd28321b.png" rel="" data-fileext="png"><img alt="006.png" class="ipsImage ipsImage_thumbnailed" data-fileid="103925" data-unique="nbfc6vz17" style="width: 400px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_07/006.png.7377065b16420657ac7c6ffbcd28321b.png"></a>
</p>

<p>
	لاحظ مثلًا أن الصف الأول من إطار البيانات يوافق الإجراء الأول: {Bread, Milk}.
</p>

<p>
	نستدعي في الشيفرة التالية الدالة apriori من المكتبة mlxtend.frequent_patterns والتي تحسب العناصر المتواترة في إطار البيانات السابق (df) وفق حد أدنى معين للدعم min_support (يساوي 40% في مثالنا).
</p>

<p>
	يكون ناتج تطبيق هذه الدالة إطار بيانات frequent_itemsets ذي عمودين: مجموعة العناصر المتواترة itemsets والدعم support. نُضيف عمود محسوب جديد لإطار البيانات الناتج يحسب طول كل مجموعة عناصر length.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7191_37" style=""><span class="com"># مكتبة خوارزمية إيجاد العناصر المتواترة</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> mlxtend</span><span class="pun">.</span><span class="pln">frequent_patterns </span><span class="kwd">import</span><span class="pln"> apriori
</span><span class="com"># توليد المجموعات المتواترة مع تحديد الحد الأدنى للدعم</span><span class="pln">
frequent_itemsets </span><span class="pun">=</span><span class="pln"> apriori</span><span class="pun">(</span><span class="pln">df</span><span class="pun">,</span><span class="pln"> min_support</span><span class="pun">=</span><span class="lit">0.4</span><span class="pun">,</span><span class="pln"> use_colnames</span><span class="pun">=</span><span class="kwd">True</span><span class="pun">)</span><span class="pln">
</span><span class="com"># حساب أطوال مجموعات العناصر</span><span class="pln">
frequent_itemsets</span><span class="pun">[</span><span class="str">'length'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> frequent_itemsets</span><span class="pun">[</span><span class="str">'itemsets'</span><span class="pun">].</span><span class="pln">apply</span><span class="pun">(</span><span class="kwd">lambda</span><span class="pln"> x</span><span class="pun">:</span><span class="pln"> len</span><span class="pun">(</span><span class="pln">x</span><span class="pun">))</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">frequent_itemsets</span><span class="pun">)</span></pre>

<p>
	تُظهر الطباعة دعم وطول كل مجموعة من مجموعات العناصر المتواترة:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103926" href="https://academy.hsoub.com/uploads/monthly_2022_07/007.png.fdbc0c6911bfd0f836131bd88d2d6a14.png" rel="" data-fileext="png"><img alt="007.png" class="ipsImage ipsImage_thumbnailed" data-fileid="103926" data-unique="d7p8dqs6r" style="width: 400px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_07/007.png.fdbc0c6911bfd0f836131bd88d2d6a14.png"></a>
</p>

<p>
	يُمكن الآن توليد قواعد الترابط باستخدام إطار بيانات العناصر المتواترة frequent_itemsets السابق، كما تُبين الشيفرة التالية.
</p>

<p>
	نستخدم الدالة association_rules من المكتبة mlxtend.frequent_patterns مع تحديد الحد الأدنى للثقة min_threshold (لنأخذ القيمة 60% في مثالنا).
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7191_41" style=""><span class="com"># مكتبة خوارزمية إيجاد قواعد الترابط </span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> mlxtend</span><span class="pun">.</span><span class="pln">frequent_patterns </span><span class="kwd">import</span><span class="pln"> association_rules
</span><span class="com"># توليد القواعد مع تحديد الحد الأدنى للثقة</span><span class="pln">
rules </span><span class="pun">=</span><span class="pln"> association_rules</span><span class="pun">(</span><span class="pln">frequent_itemsets</span><span class="pun">,</span><span class="pln">metric</span><span class="pun">=</span><span class="str">"confidence"</span><span class="pun">,</span><span class="pln">min_threshold</span><span class="pun">=</span><span class="lit">0.6</span><span class="pun">)</span><span class="pln">
</span><span class="com"># الترتيب التنازلي وفق معامل الثقة</span><span class="pln">
rules </span><span class="pun">=</span><span class="pln"> rules</span><span class="pun">.</span><span class="pln">sort_values</span><span class="pun">([</span><span class="str">'confidence'</span><span class="pun">],</span><span class="pln"> ascending </span><span class="pun">=[</span><span class="kwd">False</span><span class="pun">])</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">rules</span><span class="pun">)</span></pre>

<p>
	يُبين الشكل التالي قواعد الترابط الناتجة:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103927" href="https://academy.hsoub.com/uploads/monthly_2022_07/008.png.c030eeb938c1e18176128cafc65de500.png" rel="" data-fileext="png"><img alt="008.png" class="ipsImage ipsImage_thumbnailed" data-fileid="103927" data-unique="eiqotw9lh" style="width: 750px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_07/008.thumb.png.4187ac403a398864ca1b031fb786b2a3.png"></a>
</p>

<p>
	يُمكن استخدام رسم الإحداثيات المتوازية parallel_coordinates من المكتبة pandas.plotting لرسم مشاهدة توضيحية للقواعد السابقة.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7191_45" style=""><span class="kwd">from</span><span class="pln"> matplotlib </span><span class="kwd">import</span><span class="pln"> pyplot </span><span class="kwd">as</span><span class="pln"> plt
</span><span class="kwd">from</span><span class="pln"> pandas</span><span class="pun">.</span><span class="pln">plotting </span><span class="kwd">import</span><span class="pln"> parallel_coordinates
</span><span class="com"># دالة تحويل القواعد إلى إحداثيات</span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> rules_to_coordinates</span><span class="pun">(</span><span class="pln">rules</span><span class="pun">):</span><span class="pln">
    rules</span><span class="pun">[</span><span class="str">'antecedent'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> rules</span><span class="pun">[</span><span class="str">'antecedents'</span><span class="pun">].</span><span class="pln">apply</span><span class="pun">(</span><span class="kwd">lambda</span><span class="pln"> antecedent</span><span class="pun">:</span><span class="pln"> list</span><span class="pun">(</span><span class="pln">antecedent</span><span class="pun">)[</span><span class="lit">0</span><span class="pun">])</span><span class="pln">
    rules</span><span class="pun">[</span><span class="str">'consequent'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> rules</span><span class="pun">[</span><span class="str">'consequents'</span><span class="pun">].</span><span class="pln">apply</span><span class="pun">(</span><span class="kwd">lambda</span><span class="pln"> consequent</span><span class="pun">:</span><span class="pln"> list</span><span class="pun">(</span><span class="pln">consequent</span><span class="pun">)[</span><span class="lit">0</span><span class="pun">])</span><span class="pln">
    rules</span><span class="pun">[</span><span class="str">'rule'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> rules</span><span class="pun">.</span><span class="pln">index
    </span><span class="kwd">return</span><span class="pln"> rules</span><span class="pun">[[</span><span class="str">'antecedent'</span><span class="pun">,</span><span class="str">'consequent'</span><span class="pun">,</span><span class="str">'rule'</span><span class="pun">]]</span><span class="pln">
</span><span class="com"># توليد الإحداثيات المتوازية</span><span class="pln">
coords </span><span class="pun">=</span><span class="pln"> rules_to_coordinates</span><span class="pun">(</span><span class="pln">rules</span><span class="pun">)</span><span class="pln">
</span><span class="com"># توليد رسم الإحداثيات المتوازية</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">figure</span><span class="pun">(</span><span class="pln">figsize</span><span class="pun">=(</span><span class="lit">4</span><span class="pun">,</span><span class="lit">8</span><span class="pun">))</span><span class="pln">
parallel_coordinates</span><span class="pun">(</span><span class="pln">coords</span><span class="pun">,</span><span class="pln"> </span><span class="str">'rule'</span><span class="pun">)</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">grid</span><span class="pun">(</span><span class="kwd">True</span><span class="pun">)</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">show</span><span class="pun">()</span></pre>

<p>
	يكون الرسم البياني الناتج:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103928" href="https://academy.hsoub.com/uploads/monthly_2022_07/009.png.7cd4afba51aa65492c9072a22afddbee.png" rel="" data-fileext="png"><img alt="009.png" class="ipsImage ipsImage_thumbnailed" data-fileid="103928" data-unique="xubalnqg4" style="width: 300px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_07/009.thumb.png.46a6b75e7b59ce8df880ec621747f8d2.png"></a>
</p>

<p>
	يُبين الرسم ارتباطات العناصر، وذلك برسم خط بين العنصر من الجهة اليسرى وبين نهاية الخط الأفقي للعنصر الآخر المرتبط معه من الجهة اليمنى، مثلًا يرتبط الحليب Milk مع كل من الخبز Bread و الفوط Diaper.
</p>

<h3>
	تحميل بيانات المتجر
</h3>

<p>
	نبدأ أولًا بتحميل بيانات المتجر من الملف Groceries.csv ضمن إطار من البيانات DataFrame من مكتبة Pandas ومن ثم عرض بعضها:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7191_47" style=""><span class="com"># تحميل بيانات المتجر</span><span class="pln">
df </span><span class="pun">=</span><span class="pln"> pd</span><span class="pun">.</span><span class="pln">read_csv</span><span class="pun">(</span><span class="str">'Groceries.csv'</span><span class="pun">,</span><span class="pln">header</span><span class="pun">=</span><span class="kwd">None</span><span class="pun">)</span><span class="pln">
df</span><span class="pun">.</span><span class="pln">head</span><span class="pun">()</span></pre>

<p>
	يظهر لنا أوائل صفوف الملف:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103929" href="https://academy.hsoub.com/uploads/monthly_2022_07/010.png.03bc23a9bf0e7f85214f166d3ad703c3.png" rel="" data-fileext="png"><img alt="010.png" class="ipsImage ipsImage_thumbnailed" data-fileid="103929" data-unique="1hwmioux3" style="width: 600px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_07/010.png.03bc23a9bf0e7f85214f166d3ad703c3.png"></a>
</p>

<p>
	نلاحظ وجود قيم كثيرة فارغة NaN وذلك لأن عدد العناصر في كل صف غير متساوي.
</p>

<p>
	نحذف في الشفرة التالية القيم الفارغة، ثم نُنشئ مصفوفة الإجراءات والتي هي مصفوفة يكون كل عنصر منها مصفوفة من عناصر صف واحد من إطار البيانات:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7191_50" style=""><span class="com"># حذف القيم الفارغة</span><span class="pln">
</span><span class="com"># وإنشاء مصفوفة</span><span class="pln">
transactions </span><span class="pun">=</span><span class="pln">  df</span><span class="pun">.</span><span class="pln">T</span><span class="pun">.</span><span class="pln">apply</span><span class="pun">(</span><span class="kwd">lambda</span><span class="pln"> x</span><span class="pun">:</span><span class="pln"> x</span><span class="pun">.</span><span class="pln">dropna</span><span class="pun">().</span><span class="pln">tolist</span><span class="pun">()).</span><span class="pln">tolist</span><span class="pun">()</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">transactions</span><span class="pun">[</span><span class="lit">1</span><span class="pun">:</span><span class="lit">10</span><span class="pun">]))</span></pre>

<p>
	يُبين الشكل التالي مثلًا العناصر العشرة الأولى من مصفوفة الإجراءات الناتجة:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103930" href="https://academy.hsoub.com/uploads/monthly_2022_07/011.png.a0f926f9920d74589b9f78420043e433.png" rel="" data-fileext="png"><img alt="011.png" class="ipsImage ipsImage_thumbnailed" data-fileid="103930" data-unique="o3iv5bx1f" src="https://academy.hsoub.com/uploads/monthly_2022_07/011.thumb.png.b266711b4c6f5deb7b0a04706147cebd.png"></a>
</p>

<p>
	نستخدم في الشيفرة التالية مُرمز الإجراءات للحصول على إطار بيانات الإجراءات:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7191_52" style=""><span class="com"># إنشاء غرض من الصف </span><span class="pln">
te </span><span class="pun">=</span><span class="pln"> </span><span class="typ">TransactionEncoder</span><span class="pun">()</span><span class="pln">
</span><span class="com"># ملائمة المرمز مع البيانات</span><span class="pln">
te_model </span><span class="pun">=</span><span class="pln"> te</span><span class="pun">.</span><span class="pln">fit</span><span class="pun">(</span><span class="pln">transactions</span><span class="pun">)</span><span class="pln">
</span><span class="com"># تحويل الإجراءات </span><span class="pln">
rows</span><span class="pun">=</span><span class="pln">te_model</span><span class="pun">.</span><span class="pln">transform</span><span class="pun">(</span><span class="pln">transactions</span><span class="pun">)</span><span class="pln">
</span><span class="com"># بناء إطار بيانات الإجراءات </span><span class="pln">
df </span><span class="pun">=</span><span class="pln"> pd</span><span class="pun">.</span><span class="typ">DataFrame</span><span class="pun">(</span><span class="pln">rows</span><span class="pun">,</span><span class="pln"> columns</span><span class="pun">=</span><span class="pln">te_model</span><span class="pun">.</span><span class="pln">columns_</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">df</span><span class="pun">.</span><span class="pln">shape</span><span class="pun">)</span></pre>

<p>
	مما يُعطي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7191_54" style=""><span class="pun">(</span><span class="lit">9835</span><span class="pun">,</span><span class="pln"> </span><span class="lit">169</span><span class="pun">)</span></pre>

<p>
	لاحظ أن عدد أعمدة إطار البيانات الناتج هو 169 عمودًا مما يعني وجود 169 عنصرًا مختلفًا فقط في الإجراءات البالغ عددها 9835 إجراء.
</p>

<p>
	نستدعي في الشيفرة التالية الدالة apriori والتي تحسب العناصر المتواترة في إطار البيانات df وفق حد أدنى معين للدعم min_support يساوي 0.5% (هو رقم تجريبي حصلنا عليه بتكرار توليد العناصر المتواترة وقواعد الترابط حتى الوصول لقواعد ترابط عددها محدود نسبيًا).
</p>

<p>
	يكون ناتج تطبيق هذه الدالة إطار بيانات frequent_itemsets ذي عمودين: مجموعة العناصر المتواترة itemsets والدعم support. نُضيف عمود محسوب جديد لإطار البيانات الناتج يحسب طول length كل مجموعة عناصر.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7191_56" style=""><span class="com"># توليد المجموعات المتواترة مع تحديد الحد الأدنى للدعم</span><span class="pln">
frequent_itemsets </span><span class="pun">=</span><span class="pln"> apriori</span><span class="pun">(</span><span class="pln">df</span><span class="pun">,</span><span class="pln"> min_support</span><span class="pun">=</span><span class="lit">0.005</span><span class="pun">,</span><span class="pln"> use_colnames</span><span class="pun">=</span><span class="kwd">True</span><span class="pun">)</span><span class="pln">
</span><span class="com"># حساب أطوال مجموعات العناصر</span><span class="pln">
frequent_itemsets</span><span class="pun">[</span><span class="str">'length'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> frequent_itemsets</span><span class="pun">[</span><span class="str">'itemsets'</span><span class="pun">].</span><span class="pln">apply</span><span class="pun">(</span><span class="kwd">lambda</span><span class="pln"> x</span><span class="pun">:</span><span class="pln"> len</span><span class="pun">(</span><span class="pln">x</span><span class="pun">))</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">frequent_itemsets</span><span class="pun">)</span></pre>

<p>
	تُبين النتائج أن لدينا 1001 مجموعة من العناصر المتواترة المُحققة للحد الأدنى للدعم ويتراوح طولها بين 1 و 4:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103930" href="https://academy.hsoub.com/uploads/monthly_2022_07/011.png.a0f926f9920d74589b9f78420043e433.png" rel="" data-fileext="png"><img alt="011.png" class="ipsImage ipsImage_thumbnailed" data-fileid="103930" data-unique="o3iv5bx1f" src="https://academy.hsoub.com/uploads/monthly_2022_07/011.thumb.png.b266711b4c6f5deb7b0a04706147cebd.png"></a>
</p>

<p>
	يُمكن الآن توليد قواعد الترابط باستخدام إطار بيانات العناصر المتواترة السابق كما تُبين الشيفرة التالية. نستخدم الدالة <code>association_rules</code> مع تحديد الحد الأدنى للثقة 55% (رقم تجريبي حصلنا عليه بعد عدة محاولات لتوليد قواعد الترابط حتى وصلنا لمجموعة معقولة من القواعد).
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7191_58" style=""><span class="com"># توليد القواعد مع تحديد الحد الأدنى للثقة</span><span class="pln">
rules </span><span class="pun">=</span><span class="pln"> association_rules</span><span class="pun">(</span><span class="pln">frequent_itemsets</span><span class="pun">,</span><span class="pln">metric</span><span class="pun">=</span><span class="str">"confidence"</span><span class="pun">,</span><span class="pln">min_threshold</span><span class="pun">=</span><span class="lit">0.55</span><span class="pun">)</span><span class="pln">
</span><span class="com"># الترتيب التنازلي وفق معامل الثقة</span><span class="pln">
rules </span><span class="pun">=</span><span class="pln"> rules</span><span class="pun">.</span><span class="pln">sort_values</span><span class="pun">([</span><span class="str">'confidence'</span><span class="pun">],</span><span class="pln"> ascending </span><span class="pun">=[</span><span class="kwd">False</span><span class="pun">])</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">rules</span><span class="pun">)</span></pre>

<p>
	يُبين الشكل التالي قواعد الترابط الناتجة (حوالي 50 قاعدة):
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103932" href="https://academy.hsoub.com/uploads/monthly_2022_07/013.png.d5fd47c3d4e1d73259fa2edc43816253.png" rel="" data-fileext="png"><img alt="013.png" class="ipsImage ipsImage_thumbnailed" data-fileid="103932" data-unique="evqo6225a" src="https://academy.hsoub.com/uploads/monthly_2022_07/013.thumb.png.d56a5f8c80111d083d3d9af89344696f.png"></a>
</p>

<p>
	يُمكن استخدام رسم الإحداثيات المتوازية لرسم مشاهدة توضيحية للقواعد السابقة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7191_60" style=""><span class="kwd">from</span><span class="pln"> pandas</span><span class="pun">.</span><span class="pln">plotting </span><span class="kwd">import</span><span class="pln"> parallel_coordinates
</span><span class="com"># دالة تحويل القواعد إلى إحداثيات</span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> rules_to_coordinates</span><span class="pun">(</span><span class="pln">rules</span><span class="pun">):</span><span class="pln">
    rules</span><span class="pun">[</span><span class="str">'antecedent'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> rules</span><span class="pun">[</span><span class="str">'antecedents'</span><span class="pun">].</span><span class="pln">apply</span><span class="pun">(</span><span class="kwd">lambda</span><span class="pln"> antecedent</span><span class="pun">:</span><span class="pln"> list</span><span class="pun">(</span><span class="pln">antecedent</span><span class="pun">)[</span><span class="lit">0</span><span class="pun">])</span><span class="pln">
    rules</span><span class="pun">[</span><span class="str">'consequent'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> rules</span><span class="pun">[</span><span class="str">'consequents'</span><span class="pun">].</span><span class="pln">apply</span><span class="pun">(</span><span class="kwd">lambda</span><span class="pln"> consequent</span><span class="pun">:</span><span class="pln"> list</span><span class="pun">(</span><span class="pln">consequent</span><span class="pun">)[</span><span class="lit">0</span><span class="pun">])</span><span class="pln">
    rules</span><span class="pun">[</span><span class="str">'rule'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> rules</span><span class="pun">.</span><span class="pln">index
    </span><span class="kwd">return</span><span class="pln"> rules</span><span class="pun">[[</span><span class="str">'antecedent'</span><span class="pun">,</span><span class="str">'consequent'</span><span class="pun">,</span><span class="str">'rule'</span><span class="pun">]]</span><span class="pln">
</span><span class="com"># توليد الإحداثيات المتوازية</span><span class="pln">
coords </span><span class="pun">=</span><span class="pln"> rules_to_coordinates</span><span class="pun">(</span><span class="pln">rules</span><span class="pun">)</span><span class="pln">
</span><span class="com"># توليد رسم الإحداثيات المتوازية</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">figure</span><span class="pun">(</span><span class="pln">figsize</span><span class="pun">=(</span><span class="lit">4</span><span class="pun">,</span><span class="lit">8</span><span class="pun">))</span><span class="pln">
parallel_coordinates</span><span class="pun">(</span><span class="pln">coords</span><span class="pun">,</span><span class="pln"> </span><span class="str">'rule'</span><span class="pun">)</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">legend</span><span class="pun">([])</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">grid</span><span class="pun">(</span><span class="kwd">True</span><span class="pun">)</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">show</span><span class="pun">()</span></pre>

<p>
	يكون الرسم البياني الناتج:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="103933" href="https://academy.hsoub.com/uploads/monthly_2022_07/014.png.5d5c76124531f0c1b3c25efe37367fe9.png" rel="" data-fileext="png"><img alt="014.png" class="ipsImage ipsImage_thumbnailed" data-fileid="103933" data-unique="6075l0d3y" src="https://academy.hsoub.com/uploads/monthly_2022_07/014.png.5d5c76124531f0c1b3c25efe37367fe9.png"></a>
</p>

<h2>
	الخلاصة
</h2>

<p>
	عرضنا في هذه المقالة خطوات بناء إيجاد قواعد الترابط بين مبيعات العناصر في المتاجر.
</p>

<p>
	يُمكن تجربة المثال كاملًا من موقع Google Colab من <a href="https://colab.research.google.com/drive/16u5gL95n5EzzX1io4VXcXZwMZ6N3Bl1R?usp=sharing" rel="external nofollow">الرابط</a> أو تنزيله من الملف المرفق.
</p>

<p>
	الملف المرفق: <a class="ipsAttachLink" data-fileid="103934" href="https://academy.hsoub.com/applications/core/interface/file/attachment.php?id=103934" rel="" data-fileext="zip">data (1).zip</a>
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D9%85%D9%81%D8%A7%D9%87%D9%8A%D9%85-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-r1009/" rel="">المفاهيم الأساسية لتعلم الآلة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-%D8%A7%D9%84%D8%AA%D8%AD%D8%AF%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%B1%D8%A6%D9%8A%D8%B3%D9%8A%D8%A9-%D9%88%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D9%88%D8%B3%D8%B9-%D9%81%D9%8A-%D8%A7%D9%84%D9%85%D8%AC%D8%A7%D9%84-r1010/" rel="">تعلم الآلة: التحديات الرئيسية وكيفية التوسع في المجال</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AE%D8%B7%D9%88%D8%A7%D8%AA-%D8%AA%D9%86%D9%81%D9%8A%D8%B0-%D9%85%D8%B4%D8%B1%D9%88%D8%B9-%D8%B9%D9%86-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-%D8%A7%D9%84%D8%AC%D8%B2%D8%A1-%D8%A7%D9%84%D8%A3%D9%88%D9%84-r1357/" rel="">خطوات تنفيذ مشروع عن تعلم الآلة في بايثون: الجزء الأول</a>
	</li>
	<li>
		النسخة الكاملة لكتاب <a href="https://academy.hsoub.com/files/17-%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-%D9%88%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9/" rel="">مدخل إلى الذكاء الاصطناعي وتعلم الآلة</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">1634</guid><pubDate>Mon, 01 Aug 2022 16:03:00 +0000</pubDate></item><item><title>&#x62A;&#x635;&#x646;&#x64A;&#x641; &#x627;&#x644;&#x634;&#x62E;&#x635;&#x64A;&#x627;&#x62A; &#x628;&#x627;&#x644;&#x627;&#x639;&#x62A;&#x645;&#x627;&#x62F; &#x639;&#x644;&#x649; &#x62A;&#x63A;&#x631;&#x64A;&#x62F;&#x627;&#x62A;&#x647;&#x645; &#x627;&#x644;&#x639;&#x631;&#x628;&#x64A;&#x629; &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; &#x627;&#x644;&#x62A;&#x639;&#x644;&#x645; &#x627;&#x644;&#x639;&#x645;&#x64A;&#x642;</title><link>https://academy.hsoub.com/programming/artificial-intelligence/%D8%AA%D8%B5%D9%86%D9%8A%D9%81-%D8%A7%D9%84%D8%B4%D8%AE%D8%B5%D9%8A%D8%A7%D8%AA-%D8%A8%D8%A7%D9%84%D8%A7%D8%B9%D8%AA%D9%85%D8%A7%D8%AF-%D8%B9%D9%84%D9%89-%D8%AA%D8%BA%D8%B1%D9%8A%D8%AF%D8%A7%D8%AA%D9%87%D9%85-%D8%A7%D9%84%D8%B9%D8%B1%D8%A8%D9%8A%D8%A9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%B9%D9%85%D9%8A%D9%82-r1630/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_07/62c81b056ede6_--------2.jpg.12b2a4c92273448772801d968f4df796.jpg" /></p>

<p>
	تُعدّ مسألة تصنيف الشخصيات بالاعتماد على تغريداتهم على <a href="https://academy.hsoub.com/marketing/social-media/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D9%88%D8%B3%D8%A7%D8%A6%D9%84-%D8%A7%D9%84%D8%AA%D9%88%D8%A7%D8%B5%D9%84-%D8%A7%D9%84%D8%A7%D8%AC%D8%AA%D9%85%D8%A7%D8%B9%D9%8A-%D9%88%D8%A2%D9%84%D9%8A%D8%A9-%D8%B9%D9%85%D9%84%D9%87%D8%A7-r526/" rel="">وسائل التواصل الاجتماعي</a> من المسائل المهمة مثلًا يُمكن أن يكون من المفيد تحديد الأشخاص الذين يكتبون تحليلات مهمة في مجالات الأعمال أو الاقتصاد أو الرياضة وغيرها مما يتيح للآخرين معرفة تقييمات أو آراء الأشخاص المغردين واتخاذ الإجراء المناسب.
</p>

<p>
	نعرض في هذه المقالة استخدام تقنيات التعلم العميق في تصنيف الشخصيات المغردة بنصوص مكتوبة باللغة العربية وباللهجة السعودية بمعنى أن اللغة المستخدمة ليست بالضرورة اللغة العربية الفصحى بل يُمكن أن تدخل فيها ألفاظ عامية يستخدمها المغردون عادةً.
</p>

<p>
	لتصنيف شخص ما، سنلجأ أولًا إلى تصنيف تغريداته (أي إسناد كل تغريده إلى صف معين)، ومن ثم تصنيفه بناًء على نتائج تصنيف تغريداته (الصفوف ذات التواتر الكبر).
</p>

<h2>
	بيانات التدريب
</h2>

<p>
	تحوي مجموعة البيانات المتوفرة حوالي 26500 تغريدة لمجموعة متنوعة من المغردين المشهورين في المملكة العربية السعودية. جُمّعت هذه التغريدات عن طريق مجموعة من الطلاب الجامعيين وذلك من موقع تويتر Twitter. بالطبع، لا يوجد تصنيف متوفر لهذه التغريدات على تويتر. تجدها موجودة هي وبقية ملفات هذا الفصل في <a data-fileid="110320" href="https://academy.hsoub.com/applications/core/interface/file/attachment.php?id=110320" rel="">الملف المضغوط المرفق</a>.
</p>

<h2>
	تصنيف بيانات التدريب
</h2>

<p>
	يتطلب استخدام <a href="https://wiki.hsoub.com/Algorithms" rel="external">خوارزميات</a> تعلم الآلة (خوارزميات تصنيف التغريدات في حالتنا) توفر بيانات للتدريب أي مجموعة من التغريدات مُصنفّة مُسبقًا إلى مجموعة من الصفوف، ويُمكن، كما في حالتنا، اللجوء إلى الطرق اليدوية أي الطلب من مجموعة من الأشخاص قراءة النصوص وتصنيفها وهو حل يصلح في حال كان عدد النصوص صغيرًا نسبيًا، ويتميز هذا الحل بالدقة العالية لأن الأشخاص تُدرك، بشكل عام، معاني النصوص من خلال خبرتها اللغوية المُكتسبة وتُصنّف النصوص بشكل صحيح غالبًا.
</p>

<p>
	طلبنا من الطلاب المشاركين في مشروعنا تصنيف كل تغريدة إلى واحدة من المواضيع (الصفوف) التالية:
</p>
<style type="text/css">
table {
    width: 100%;
}

thead {
    vertical-align: middle;
    text-align: center;
} 

td, th {
    border: 1px solid #dddddd;
    text-align: right;
    padding: 8px;
    text-align: inherit;

}
tr:nth-child(even) {
    background-color: #dddddd;
}</style>
<table>
<thead><tr>
<th style="text-align:right">
				الصف بالعربي
			</th>
			<th>
				English
			</th>
		</tr></thead>
<tbody>
<tr>
<td style="text-align:right">
				الرياضة
			</td>
			<td>
				Sports
			</td>
		</tr>
<tr>
<td style="text-align:right">
				الأعمال
			</td>
			<td>
				Business
			</td>
		</tr>
<tr>
<td style="text-align:right">
				التكنولوجيا
			</td>
			<td>
				Technology
			</td>
		</tr>
<tr>
<td style="text-align:right">
				المجتمع
			</td>
			<td>
				Social
			</td>
		</tr>
<tr>
<td style="text-align:right">
				السياسة
			</td>
			<td>
				Politics
			</td>
		</tr>
<tr>
<td style="text-align:right">
				الأخبار
			</td>
			<td>
				News
			</td>
		</tr>
<tr>
<td style="text-align:right">
				الاقتصاد
			</td>
			<td>
				Economy
			</td>
		</tr>
</tbody>
</table>
<p>
	نُعطي فيما يلي أمثلة عن هذه التغريدات (بعد تصنيفها):
</p>

<ol>
<li>
		"الحمد لله مباراة الدوري وهدف غالي يشابه هدف القناص مباراة الفتح الرائد الهلال" (الرياضة).
	</li>
	<li>
		"قريبا جدا… تتابع السوق السعودي وشركاته والأمريكي وشركاته والعملات والكربتو النفط والذهب بمنصة واحدة مباشرة وتقدر ت…" (الأعمال).
	</li>
	<li>
		"فايروس خطير جدا يستهدف مستخدمي نظام الاندرويد قادر يسرق بيانات حساسه الصور وتسجيل صوت المستخدم والوصول لمعلوماتهم وسرقة…" (التكنولوجيا)
	</li>
	<li>
		"أالسلام عليكم ورحمة الله وبركاتة اللهم فرج يفرج همه ويبارك ماله ويفتح أبواب الخيروال…" (المجتمع)
	</li>
	<li>
		"مبادرون لأجل فلسطين.. تكريم كويتي لرافضي التطبيع في الفعاليات الرياضية والأدبية" (السياسة)
	</li>
	<li>
		"الخط العربي ومخاوف التقنية في الزمن الرقمي.. تجربة عالمية أم خروج عن تقاليد الفن العريق؟" (الأخبار)
	</li>
	<li>
		"معلومة فنية (٢)للشراء المضاربي ١- اقفال السوق ٥ دقايق اذا كانت شمعة ايجابية للحصول ربح مضاربي يوم ٢-عند…" (الاقتصاد).
	</li>
</ol>
<p>
	نعرض في هذه المقالة كيفية بناء مُصنّف حاسوبي آلي يُصنّف أي تغريدة عربية إلى أحد الصفوف السبعة السابقة ومن ثم تصنيف الشخص المغرد لواحد أو أكثر من هذه الصفوف (الأكثر تواترًا).
</p>

<h2>
	المعالجة الأولية للنصوص
</h2>

<p>
	تتميز التغريدات، بشكل عام، باحتوائها على مجموعة من الأمور غير المهمة في مسألة التصنيف مثل الروابط Links والوسوم Hashtags والرموز التعبيرية Emojis وغيرها.
</p>

<p>
	يُبين الشكل التالي مثالًا عن التغريدات المُجمّعة:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="102761" href="https://academy.hsoub.com/uploads/monthly_2022_07/001.png.48d351b19a8fe4ab6565be2da73926fc.png" rel=""><img alt="001.png" class="ipsImage ipsImage_thumbnailed" data-fileid="102761" data-unique="h0dq26jg4" src="https://academy.hsoub.com/uploads/monthly_2022_07/001.thumb.png.2b92db36eeaddba6d520b2e3a112df7e.png" style="width: 650px; height: auto;"></a>
</p>

<p>
	تهدف المعالجة الأولية إلى الحصول على الكلمات المهمة فقط من النصوص وذلك عن طريق تنفيذ بعض العمليات اللغوية عليها.
</p>

<p>
	لتكن لدينا مثلًا الجملة التالية: "أنا أحب الذهاب إلى الحديقة ?، كل يوم 9 صباحاً، مع رفاقي هؤلاء! @toto "، سنقوم بتنفيذ العمليات التالية:
</p>

<ol>
<li>
		حذف الروابط والوسوم والرموز التعبيرية: يكون ناتج الجملة السابقة: "أنا أحب الذهاب إلى الحديقة، كل يوم 9 صباحاً، مع رفاقي هؤلاء!"
	</li>
	<li>
		حذف إشارات الترقيم المختلفة كالفواصل وإشارات الاستفهام وغيرها: يكون ناتج الجملة السابقة: "أنا أحب الذهاب إلى الحديقة كل يوم 9 صباحاً مع رفاقي هؤلاء"
	</li>
	<li>
		حذف الأرقام الواردة في النص: يكون ناتج الجملة السابقة: "أنا أحب الذهاب إلى الحديقة كل يوم صباحاً مع رفاقي هؤلاء"
	</li>
	<li>
		حذف كلمات التوقف stop words وهي الكلمات التي تتكرر كثيرًا في النصوص ولا تؤثر في معانيها كأحرف الجر (من، إلى، …) والضمائر (أنا، هو، …) وغيرها فيكون ناتج الجملة السابقة: " أحب الذهاب الحديقة يوم صباحاً رفاقي"
	</li>
	<li>
		تجذيع الكلمات stemming أي إرجاع الكلمات المتشابهة إلى كلمة واحدة (جذع) مما يُساهم في إنقاص عدد الكلمات الكلية المختلفة في النصوص، ومطابقة الكلمات المتشابهة مع بعضها البعض. مثلًا: يكون للكلمات الأربع: (رائع، رايع، رائعون، رائعين) نفس الجذع المشترك: (رايع) فيكون ناتج الجملة السابقة: " احب ذهاب حديق يوم صباح رفاق"
	</li>
</ol>
<h2>
	إعداد المشروع
</h2>

<p>
	يحتاج تنفذ شيفرات هذه المقالة بيئةً برمجيةً للغة بايثون الإصدار 3.8. ويجب أن تتضمن هذه البيئة البرمجية مدير الحِزم <a href="https://pypi.org/project/pip/" rel="external nofollow">pip</a> لتثبيت الحِزم، ومُنشئ البيئات الافتراضية <a href="https://docs.python.org/3/library/venv.html" rel="external nofollow">venv</a> لإنشاء بيئاتٍ افتراضيةٍ.
</p>

<p>
	نستخدم محرر الشيفرات البرمجية <a href="https://academy.hsoub.com/devops/linux/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D9%87%D9%8A%D8%A6%D8%A9-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%A7%D9%84%D9%85%D9%81%D9%83%D8%B1%D8%A9-jupyter-notebook-%D9%84%D9%84%D8%B9%D9%85%D9%84-%D9%85%D8%B9-%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-python-3-r388/" rel="">Jupyter Notebooks</a>، وهو مفيد جدًا لتجربة وتشغيل الأمثلة الخاصة <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-%D8%A7%D9%84%D8%AA%D8%AD%D8%AF%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%B1%D8%A6%D9%8A%D8%B3%D9%8A%D8%A9-%D9%88%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D9%88%D8%B3%D8%B9-%D9%81%D9%8A-%D8%A7%D9%84%D9%85%D8%AC%D8%A7%D9%84-r1010/" rel="">بتَعَلّم الآلة</a> بطريقةٍ تفاعليةٍ، حيث نستطيع من خلاله تشغيل كتلًا صغيرةً من الشيفرات البرمجية ورؤية النتائج بسرعة، مما يُسهّل علينا اختبار الشيفرات البرمجية وتصحيحها.
</p>

<p>
	نحتاج أولًا لتثبيت بعض التبعيات، وذلك لإنشاء مساحة عمل للاحتفاظ بملفاتنا قبل أن نتمكن من تطوير برنامجنا.
</p>

<p>
	نُنشئ مجلدًا جديدًا خاصًا بمشروعنا وندخل إليه هكذا:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8198_30" style="">
<span class="pln">mkdir arc
cd arc</span></pre>

<p>
	نُنفذّ الأمر التالي لإنشاء البيئة الافتراضية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8198_32" style="">
<span class="pln">python </span><span class="pun">-</span><span class="pln">m venv arc</span></pre>

<p>
	ومن ثم الأمر التالي في <a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%A7-%D9%87%D9%88-%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D9%84%D9%8A%D9%86%D9%83%D8%B3%D8%9F-r451/" rel="">Linux</a> لتنشيط البيئة الافتراضية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8198_34" style="">
<span class="pln">source arc</span><span class="pun">/</span><span class="pln">bin</span><span class="pun">/</span><span class="pln">activate</span></pre>

<p>
	أما في Windows، فيكون أمر التنشيط:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8198_36" style="">
<span class="str">"arc/Scripts/activate.bat"</span></pre>

<p>
	نستخدم إصداراتٍ محددةٍ من المكتبات اللازمة، من خلال إنشاء ملف <code>requirements.txt</code> في مجلد المشروع، وسيُحدِّد هذا الملف المتطلبات والإصدارات التي سنحتاج إليها.
</p>

<p>
	نفتح الملف <code>requirements.txt</code> في محرر النصوص، ونُضيف الأسطر التالية، وذلك لتحديد المكتبات التي نريدها وإصداراتها:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8198_39" style="">
<span class="pln">absl</span><span class="pun">-</span><span class="pln">py</span><span class="pun">==</span><span class="lit">1.0</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
asttokens</span><span class="pun">==</span><span class="lit">2.0</span><span class="pun">.</span><span class="lit">5</span><span class="pln">
astunparse</span><span class="pun">==</span><span class="lit">1.6</span><span class="pun">.</span><span class="lit">3</span><span class="pln">
backcall</span><span class="pun">==</span><span class="lit">0.2</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
cachetools</span><span class="pun">==</span><span class="lit">5.1</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
certifi</span><span class="pun">==</span><span class="lit">2021.10</span><span class="pun">.</span><span class="lit">8</span><span class="pln">
charset</span><span class="pun">-</span><span class="pln">normalizer</span><span class="pun">==</span><span class="lit">2.0</span><span class="pun">.</span><span class="lit">12</span><span class="pln">
click</span><span class="pun">==</span><span class="lit">8.1</span><span class="pun">.</span><span class="lit">3</span><span class="pln">
colorama</span><span class="pun">==</span><span class="lit">0.4</span><span class="pun">.</span><span class="lit">4</span><span class="pln">
cycler</span><span class="pun">==</span><span class="lit">0.11</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
debugpy</span><span class="pun">==</span><span class="lit">1.6</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
decorator</span><span class="pun">==</span><span class="lit">5.1</span><span class="pun">.</span><span class="lit">1</span><span class="pln">
entrypoints</span><span class="pun">==</span><span class="lit">0.4</span><span class="pln">
executing</span><span class="pun">==</span><span class="lit">0.8</span><span class="pun">.</span><span class="lit">3</span><span class="pln">
flatbuffers</span><span class="pun">==</span><span class="lit">1.12</span><span class="pln">
fonttools</span><span class="pun">==</span><span class="lit">4.33</span><span class="pun">.</span><span class="lit">3</span><span class="pln">
gast</span><span class="pun">==</span><span class="lit">0.4</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
google</span><span class="pun">-</span><span class="pln">auth</span><span class="pun">==</span><span class="lit">2.6</span><span class="pun">.</span><span class="lit">6</span><span class="pln">
google</span><span class="pun">-</span><span class="pln">auth</span><span class="pun">-</span><span class="pln">oauthlib</span><span class="pun">==</span><span class="lit">0.4</span><span class="pun">.</span><span class="lit">6</span><span class="pln">
google</span><span class="pun">-</span><span class="pln">pasta</span><span class="pun">==</span><span class="lit">0.2</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
grpcio</span><span class="pun">==</span><span class="lit">1.46</span><span class="pun">.</span><span class="lit">1</span><span class="pln">
h5py</span><span class="pun">==</span><span class="lit">3.6</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
idna</span><span class="pun">==</span><span class="lit">3.3</span><span class="pln">
imbalanced</span><span class="pun">-</span><span class="pln">learn</span><span class="pun">==</span><span class="lit">0.9</span><span class="pun">.</span><span class="lit">1</span><span class="pln">
imblearn</span><span class="pun">==</span><span class="lit">0.0</span><span class="pln">
importlib</span><span class="pun">-</span><span class="pln">metadata</span><span class="pun">==</span><span class="lit">4.11</span><span class="pun">.</span><span class="lit">3</span><span class="pln">
ipykernel</span><span class="pun">==</span><span class="lit">6.13</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
ipython</span><span class="pun">==</span><span class="lit">8.3</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
jedi</span><span class="pun">==</span><span class="lit">0.18</span><span class="pun">.</span><span class="lit">1</span><span class="pln">
joblib</span><span class="pun">==</span><span class="lit">1.1</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
jupyter</span><span class="pun">-</span><span class="pln">client</span><span class="pun">==</span><span class="lit">7.3</span><span class="pun">.</span><span class="lit">1</span><span class="pln">
jupyter</span><span class="pun">-</span><span class="pln">core</span><span class="pun">==</span><span class="lit">4.10</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
keras</span><span class="pun">==</span><span class="lit">2.6</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
</span><span class="typ">Keras</span><span class="pun">-</span><span class="typ">Applications</span><span class="pun">==</span><span class="lit">1.0</span><span class="pun">.</span><span class="lit">8</span><span class="pln">
</span><span class="typ">Keras</span><span class="pun">-</span><span class="typ">Preprocessing</span><span class="pun">==</span><span class="lit">1.1</span><span class="pun">.</span><span class="lit">2</span><span class="pln">
kiwisolver</span><span class="pun">==</span><span class="lit">1.4</span><span class="pun">.</span><span class="lit">2</span><span class="pln">
libclang</span><span class="pun">==</span><span class="lit">14.0</span><span class="pun">.</span><span class="lit">1</span><span class="pln">
</span><span class="typ">Markdown</span><span class="pun">==</span><span class="lit">3.3</span><span class="pun">.</span><span class="lit">7</span><span class="pln">
matplotlib</span><span class="pun">==</span><span class="lit">3.5</span><span class="pun">.</span><span class="lit">2</span><span class="pln">
matplotlib</span><span class="pun">-</span><span class="pln">inline</span><span class="pun">==</span><span class="lit">0.1</span><span class="pun">.</span><span class="lit">3</span><span class="pln">
nest</span><span class="pun">-</span><span class="pln">asyncio</span><span class="pun">==</span><span class="lit">1.5</span><span class="pun">.</span><span class="lit">5</span><span class="pln">
nltk</span><span class="pun">==</span><span class="lit">3.7</span><span class="pln">
numpy</span><span class="pun">==</span><span class="lit">1.22</span><span class="pun">.</span><span class="lit">3</span><span class="pln">
oauthlib</span><span class="pun">==</span><span class="lit">3.2</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
opt</span><span class="pun">-</span><span class="pln">einsum</span><span class="pun">==</span><span class="lit">3.3</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
packaging</span><span class="pun">==</span><span class="lit">21.3</span><span class="pln">
pandas</span><span class="pun">==</span><span class="lit">1.4</span><span class="pun">.</span><span class="lit">2</span><span class="pln">
parso</span><span class="pun">==</span><span class="lit">0.8</span><span class="pun">.</span><span class="lit">3</span><span class="pln">
pickleshare</span><span class="pun">==</span><span class="lit">0.7</span><span class="pun">.</span><span class="lit">5</span><span class="pln">
</span><span class="typ">Pillow</span><span class="pun">==</span><span class="lit">9.1</span><span class="pun">.</span><span class="lit">1</span><span class="pln">
prompt</span><span class="pun">-</span><span class="pln">toolkit</span><span class="pun">==</span><span class="lit">3.0</span><span class="pun">.</span><span class="lit">29</span><span class="pln">
protobuf</span><span class="pun">==</span><span class="lit">3.20</span><span class="pun">.</span><span class="lit">1</span><span class="pln">
psutil</span><span class="pun">==</span><span class="lit">5.9</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
pure</span><span class="pun">-</span><span class="pln">eval</span><span class="pun">==</span><span class="lit">0.2</span><span class="pun">.</span><span class="lit">2</span><span class="pln">
</span><span class="typ">PyArabic</span><span class="pun">==</span><span class="lit">0.6</span><span class="pun">.</span><span class="lit">14</span><span class="pln">
pyasn1</span><span class="pun">==</span><span class="lit">0.4</span><span class="pun">.</span><span class="lit">8</span><span class="pln">
pyasn1</span><span class="pun">-</span><span class="pln">modules</span><span class="pun">==</span><span class="lit">0.2</span><span class="pun">.</span><span class="lit">8</span><span class="pln">
</span><span class="typ">Pygments</span><span class="pun">==</span><span class="lit">2.12</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
pyparsing</span><span class="pun">==</span><span class="lit">3.0</span><span class="pun">.</span><span class="lit">9</span><span class="pln">
python</span><span class="pun">-</span><span class="pln">dateutil</span><span class="pun">==</span><span class="lit">2.8</span><span class="pun">.</span><span class="lit">2</span><span class="pln">
pytz</span><span class="pun">==</span><span class="lit">2022.1</span><span class="pln">
</span><span class="com">#pywin32==304</span><span class="pln">
pyzmq</span><span class="pun">==</span><span class="lit">22.3</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
regex</span><span class="pun">==</span><span class="lit">2022.4</span><span class="pun">.</span><span class="lit">24</span><span class="pln">
requests</span><span class="pun">==</span><span class="lit">2.27</span><span class="pun">.</span><span class="lit">1</span><span class="pln">
requests</span><span class="pun">-</span><span class="pln">oauthlib</span><span class="pun">==</span><span class="lit">1.3</span><span class="pun">.</span><span class="lit">1</span><span class="pln">
rsa</span><span class="pun">==</span><span class="lit">4.8</span><span class="pln">
scikit</span><span class="pun">-</span><span class="pln">learn</span><span class="pun">==</span><span class="lit">1.1</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
scipy</span><span class="pun">==</span><span class="lit">1.8</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
seaborn</span><span class="pun">==</span><span class="lit">0.11</span><span class="pun">.</span><span class="lit">2</span><span class="pln">
six</span><span class="pun">==</span><span class="lit">1.16</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
sklearn</span><span class="pun">==</span><span class="lit">0.0</span><span class="pln">
snowballstemmer</span><span class="pun">==</span><span class="lit">2.2</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
stack</span><span class="pun">-</span><span class="pln">data</span><span class="pun">==</span><span class="lit">0.2</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
tensorboard</span><span class="pun">==</span><span class="lit">2.9</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
tensorboard</span><span class="pun">-</span><span class="pln">data</span><span class="pun">-</span><span class="pln">server</span><span class="pun">==</span><span class="lit">0.6</span><span class="pun">.</span><span class="lit">1</span><span class="pln">
tensorboard</span><span class="pun">-</span><span class="pln">plugin</span><span class="pun">-</span><span class="pln">wit</span><span class="pun">==</span><span class="lit">1.8</span><span class="pun">.</span><span class="lit">1</span><span class="pln">
tensorflow</span><span class="pun">==</span><span class="lit">2.9</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
tensorflow</span><span class="pun">-</span><span class="pln">estimator</span><span class="pun">==</span><span class="lit">2.9</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
tensorflow</span><span class="pun">-</span><span class="pln">io</span><span class="pun">-</span><span class="pln">gcs</span><span class="pun">-</span><span class="pln">filesystem</span><span class="pun">==</span><span class="lit">0.26</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
termcolor</span><span class="pun">==</span><span class="lit">1.1</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
threadpoolctl</span><span class="pun">==</span><span class="lit">3.1</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
tornado</span><span class="pun">==</span><span class="lit">6.1</span><span class="pln">
tqdm</span><span class="pun">==</span><span class="lit">4.64</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
traitlets</span><span class="pun">==</span><span class="lit">5.2</span><span class="pun">.</span><span class="lit">1.post0</span><span class="pln">
typing</span><span class="pun">-</span><span class="pln">extensions</span><span class="pun">==</span><span class="lit">4.2</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
urllib3</span><span class="pun">==</span><span class="lit">1.26</span><span class="pun">.</span><span class="lit">9</span><span class="pln">
wcwidth</span><span class="pun">==</span><span class="lit">0.2</span><span class="pun">.</span><span class="lit">5</span><span class="pln">
</span><span class="typ">Werkzeug</span><span class="pun">==</span><span class="lit">2.1</span><span class="pun">.</span><span class="lit">2</span><span class="pln">
wrapt</span><span class="pun">==</span><span class="lit">1.14</span><span class="pun">.</span><span class="lit">1</span><span class="pln">
zipp</span><span class="pun">==</span><span class="lit">3.8</span><span class="pun">.</span><span class="lit">0</span></pre>

<p>
	نحفظ التغييرات التي طرأت على الملف ونخرج من محرر النصوص، ثم نُثَبت هذه المكتبات بالأمر التالي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8198_41" style="">
<span class="pun">(</span><span class="pln">arc</span><span class="pun">)</span><span class="pln"> $ pip install </span><span class="pun">-</span><span class="pln">r requirements</span><span class="pun">.</span><span class="pln">txt</span></pre>

<p>
	بعد تثبيتنا لهذه التبعيات، نُصبح جاهزين لبدء العمل على مشروعنا.
</p>

<h2>
	كتابة الشيفرة البرمجية
</h2>

<p>
	نُشغّل محرر الشيفرات البرمجية Jupyter Notebook بمجرد اكتمال عملية التثبيت هكذا:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8198_43" style="">
<span class="pun">(</span><span class="pln">arc</span><span class="pun">)</span><span class="pln"> $ jupyter notebook</span></pre>

<p>
	ثم نُنشئ ملفًا جديدًا في داخل المحرر ونُسمّه باسم ac مثلًا.
</p>

<h3>
	تحميل البيانات
</h3>

<p>
	نبدأ أولًا بتحميل التغريدات من الملف tweets.csv ضمن إطار من البيانات DataFrame من مكتبة Pandas ومن ثم عرض بعضها:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8198_47" style="">
<span class="kwd">import</span><span class="pln"> pandas </span><span class="kwd">as</span><span class="pln"> pd
</span><span class="com"># قراءة التغريدات وتحميلها ضمن إطار من البيانات </span><span class="pln">
tweets </span><span class="pun">=</span><span class="pln"> pd</span><span class="pun">.</span><span class="pln">read_csv</span><span class="pun">(</span><span class="str">'tweets.csv'</span><span class="pun">,</span><span class="pln">encoding </span><span class="pun">=</span><span class="pln"> </span><span class="str">"utf-8"</span><span class="pun">)</span><span class="pln">
</span><span class="com"># إظهار الجزء الأعلى من إطار البيانات</span><span class="pln">
tweets</span><span class="pun">.</span><span class="pln">head</span><span class="pun">()</span></pre>

<p>
	يظهر لنا أوائل التغريدات:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="102762" href="https://academy.hsoub.com/uploads/monthly_2022_07/002.png.337f688092b2612283e55d2dd6faa79d.png" rel=""><img alt="002.png" class="ipsImage ipsImage_thumbnailed" data-fileid="102762" data-unique="i557gdw29" src="https://academy.hsoub.com/uploads/monthly_2022_07/002.png.337f688092b2612283e55d2dd6faa79d.png" style="width: 550px; height: auto;"></a>
</p>

<p>
	يُمكن استخدام خاصية الشكل shape لمعرفة عدد الصفوف والأعمدة للبيانات المُحمّلة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8198_51" style="">
<span class="kwd">print</span><span class="pun">(</span><span class="str">'Data size:'</span><span class="pun">,</span><span class="pln"> tweets</span><span class="pun">.</span><span class="pln">shape</span><span class="pun">)</span></pre>

<p>
	يكون الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8198_53" style="">
<span class="typ">Data</span><span class="pln"> size</span><span class="pun">:</span><span class="pln"> </span><span class="pun">(</span><span class="lit">26748</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">)</span></pre>

<h3>
	المعالجة الأولية للنصوص
</h3>

<p>
	نستخدم فيما يلي بعض الخدمات التي توفرها المكتبة <code>nltk</code> لمعالجة اللغات الطبيعية كتوفير قائمة كلمات التوقف باللغة العربية (حوالي 700 كلمة) واستخراج الوحدات tokens من النصوص. كما نستخدم مجذع الكلمات العربية من مكتبة snowballstemmer.
</p>

<p>
	كما نستخدم <a href="https://academy.hsoub.com/programming/general/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D8%A8%D9%8A%D8%B1-%D8%A7%D9%84%D9%86%D9%85%D8%B7%D9%8A%D8%A9-%D9%81%D9%8A-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-r1374/" rel="">التعابير النمطية regular expressions</a> للتعرف على الرموز التعبيرية والوسوم والروابط وحذفها.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8198_55" style="">
<span class="com"># مكتبة  السلاسل النصية </span><span class="pln">
</span><span class="kwd">import</span><span class="pln"> string
</span><span class="com"># مكتبة التعابير النظامية</span><span class="pln">
</span><span class="kwd">import</span><span class="pln"> re
</span><span class="com"># مكتبة معالجة اللغات الطبيعية</span><span class="pln">
</span><span class="kwd">import</span><span class="pln"> nltk
</span><span class="com">#nltk.download('punkt')</span><span class="pln">
</span><span class="com">#nltk.download('stopwords')</span><span class="pln">
</span><span class="com"># مكتبة  كلمات التوقف</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> nltk</span><span class="pun">.</span><span class="pln">corpus </span><span class="kwd">import</span><span class="pln"> stopwords
</span><span class="com"># مكتبة استخراج الوحدات</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> nltk</span><span class="pun">.</span><span class="pln">tokenize </span><span class="kwd">import</span><span class="pln"> word_tokenize
</span><span class="com"># مكتبة المجذع العربي</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> snowballstemmer </span><span class="kwd">import</span><span class="pln"> stemmer
ar_stemmer </span><span class="pun">=</span><span class="pln"> stemmer</span><span class="pun">(</span><span class="str">"arabic"</span><span class="pun">)</span><span class="pln">

</span><span class="com"># دالة حذف المحارف غير اللازمة</span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> remove_chars</span><span class="pun">(</span><span class="pln">text</span><span class="pun">,</span><span class="pln"> del_chars</span><span class="pun">):</span><span class="pln">
    translator </span><span class="pun">=</span><span class="pln"> str</span><span class="pun">.</span><span class="pln">maketrans</span><span class="pun">(</span><span class="str">''</span><span class="pun">,</span><span class="pln"> </span><span class="str">''</span><span class="pun">,</span><span class="pln"> del_chars</span><span class="pun">)</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> text</span><span class="pun">.</span><span class="pln">translate</span><span class="pun">(</span><span class="pln">translator</span><span class="pun">)</span><span class="pln">

</span><span class="com"># دالة حذف المحارف المكررة</span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> remove_repeating_char</span><span class="pun">(</span><span class="pln">text</span><span class="pun">):</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> re</span><span class="pun">.</span><span class="pln">sub</span><span class="pun">(</span><span class="pln">r</span><span class="str">'(.)\1{2,}'</span><span class="pun">,</span><span class="pln"> r</span><span class="str">'\1'</span><span class="pun">,</span><span class="pln"> text</span><span class="pun">)</span><span class="pln">

</span><span class="com"># دالة تنظيف التغريدات</span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> clean_tweet</span><span class="pun">(</span><span class="pln">tweet</span><span class="pun">):</span><span class="pln">
    stop_words </span><span class="pun">=</span><span class="pln"> stopwords</span><span class="pun">.</span><span class="pln">words</span><span class="pun">(</span><span class="str">'arabic'</span><span class="pun">)</span><span class="pln">
    </span><span class="com"># محارف الرموز التعبيرية  </span><span class="pln">
    emoj </span><span class="pun">=</span><span class="pln"> re</span><span class="pun">.</span><span class="pln">compile</span><span class="pun">(</span><span class="str">"["</span><span class="pln">
            u</span><span class="str">"\U0001F600-\U0001F64F"</span><span class="pln">  
            u</span><span class="str">"\U0001F300-\U0001F5FF"</span><span class="pln">  
            u</span><span class="str">"\U0001F680-\U0001F6FF"</span><span class="pln">  
            u</span><span class="str">"\U0001F1E0-\U0001F1FF"</span><span class="pln"> 
            u</span><span class="str">"\U00002500-\U00002BEF"</span><span class="pln">  
            u</span><span class="str">"\U00002702-\U000027B0"</span><span class="pln">
            u</span><span class="str">"\U00002702-\U000027B0"</span><span class="pln">
            u</span><span class="str">"\U000024C2-\U0001F251"</span><span class="pln">
            u</span><span class="str">"\U0001f926-\U0001f937"</span><span class="pln">
            u</span><span class="str">"\U00010000-\U0010ffff"</span><span class="pln">
            u</span><span class="str">"\u2640-\u2642"</span><span class="pln"> 
            u</span><span class="str">"\u2600-\u2B55"</span><span class="pln">
            u</span><span class="str">"\u200d"</span><span class="pln">
            u</span><span class="str">"\u23cf"</span><span class="pln">
            u</span><span class="str">"\u23e9"</span><span class="pln">
            u</span><span class="str">"\u231a"</span><span class="pln">
            u</span><span class="str">"\ufe0f"</span><span class="pln">  
            u</span><span class="str">"\u3030"</span><span class="pln">
                        </span><span class="str">"]+"</span><span class="pun">,</span><span class="pln"> re</span><span class="pun">.</span><span class="pln">UNICODE</span><span class="pun">)</span><span class="pln">
    tweet </span><span class="pun">=</span><span class="pln"> str</span><span class="pun">(</span><span class="pln">tweet</span><span class="pun">)</span><span class="pln">
    </span><span class="com"># حذف @ وما يتبعها</span><span class="pln">
    tweet </span><span class="pun">=</span><span class="pln"> re</span><span class="pun">.</span><span class="pln">sub</span><span class="pun">(</span><span class="str">"@[^\s]+"</span><span class="pun">,</span><span class="str">""</span><span class="pun">,</span><span class="pln">tweet</span><span class="pun">)</span><span class="pln"> 
    tweet </span><span class="pun">=</span><span class="pln"> re</span><span class="pun">.</span><span class="pln">sub</span><span class="pun">(</span><span class="str">"RT"</span><span class="pun">,</span><span class="str">""</span><span class="pun">,</span><span class="pln">tweet</span><span class="pun">)</span><span class="pln"> 
    </span><span class="com"># حذف الروابط</span><span class="pln">
    tweet </span><span class="pun">=</span><span class="pln"> re</span><span class="pun">.</span><span class="pln">sub</span><span class="pun">(</span><span class="pln">r</span><span class="str">"(?:\@|http?\://|https?\://|www)\S+"</span><span class="pun">,</span><span class="pln"> </span><span class="str">""</span><span class="pun">,</span><span class="pln"> tweet</span><span class="pun">)</span><span class="pln">
    </span><span class="com"># حذف الرموز التعبيرية</span><span class="pln">
    tweet </span><span class="pun">=</span><span class="pln">  re</span><span class="pun">.</span><span class="pln">sub</span><span class="pun">(</span><span class="pln">emoj</span><span class="pun">,</span><span class="pln"> </span><span class="str">''</span><span class="pun">,</span><span class="pln"> tweet</span><span class="pun">)</span><span class="pln">
    </span><span class="com"># حذف كلمات التوقف</span><span class="pln">
    tweet </span><span class="pun">=</span><span class="pln"> </span><span class="str">' '</span><span class="pun">.</span><span class="pln">join</span><span class="pun">(</span><span class="pln">word </span><span class="kwd">for</span><span class="pln"> word </span><span class="kwd">in</span><span class="pln"> tweet</span><span class="pun">.</span><span class="pln">split</span><span class="pun">()</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> word </span><span class="kwd">not</span><span class="pln"> </span><span class="kwd">in</span><span class="pln"> stop_words</span><span class="pun">)</span><span class="pln"> 
    </span><span class="com"># حذف الإشارات #</span><span class="pln">
    tweet </span><span class="pun">=</span><span class="pln"> tweet</span><span class="pun">.</span><span class="pln">replace</span><span class="pun">(</span><span class="str">"#"</span><span class="pun">,</span><span class="pln"> </span><span class="str">""</span><span class="pun">).</span><span class="pln">replace</span><span class="pun">(</span><span class="str">"_"</span><span class="pun">,</span><span class="pln"> </span><span class="str">" "</span><span class="pun">)</span><span class="pln"> 
    </span><span class="com"># حذف الأرقام</span><span class="pln">
    tweet </span><span class="pun">=</span><span class="pln"> re</span><span class="pun">.</span><span class="pln">sub</span><span class="pun">(</span><span class="pln">r</span><span class="str">'[0-9]+'</span><span class="pun">,</span><span class="pln"> </span><span class="str">''</span><span class="pun">,</span><span class="pln"> tweet</span><span class="pun">)</span><span class="pln">  
    </span><span class="com"># حذف المحارف غير اللازمة</span><span class="pln">
    </span><span class="com"># علامات الترقيم العربية</span><span class="pln">
    arabic_punctuations </span><span class="pun">=</span><span class="pln"> </span><span class="str">'''`÷×؛&lt;&gt;_()*&amp;^%][ـ،/:"؟.,'{}~¦+|!”…“–ـ'''</span><span class="pln">
    </span><span class="com"># علامات الترقيم الإنجليزية</span><span class="pln">
    english_punctuations </span><span class="pun">=</span><span class="pln"> string</span><span class="pun">.</span><span class="pln">punctuation
    </span><span class="com"># دمج علامات الترقيم العربية والانكليزية</span><span class="pln">
    punctuations_list </span><span class="pun">=</span><span class="pln"> arabic_punctuations </span><span class="pun">+</span><span class="pln"> english_punctuations
    tweet </span><span class="pun">=</span><span class="pln"> remove_chars</span><span class="pun">(</span><span class="pln">tweet</span><span class="pun">,</span><span class="pln"> punctuations_list</span><span class="pun">)</span><span class="pln">
    </span><span class="com"># حذف المحارف المكررة  </span><span class="pln">
    tweet </span><span class="pun">=</span><span class="pln"> remove_repeating_char</span><span class="pun">(</span><span class="pln">tweet</span><span class="pun">)</span><span class="pln">
    </span><span class="com"># استبدال الأسطر الجديدة بفراغات  </span><span class="pln">
    tweet </span><span class="pun">=</span><span class="pln"> tweet</span><span class="pun">.</span><span class="pln">replace</span><span class="pun">(</span><span class="str">'\n'</span><span class="pun">,</span><span class="pln"> </span><span class="str">' '</span><span class="pun">)</span><span class="pln">  
    </span><span class="com"># حذف الفراغات الزائدة من اليمين واليسار   </span><span class="pln">
    tweet </span><span class="pun">=</span><span class="pln"> tweet</span><span class="pun">.</span><span class="pln">strip</span><span class="pun">(</span><span class="str">' '</span><span class="pun">)</span><span class="pln">  
    </span><span class="kwd">return</span><span class="pln"> tweet

</span><span class="com"># دالة تقسيم النص إلى مجموعة من الوحدات</span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> tokenizingText</span><span class="pun">(</span><span class="pln">text</span><span class="pun">):</span><span class="pln"> 
    tokens_list </span><span class="pun">=</span><span class="pln"> word_tokenize</span><span class="pun">(</span><span class="pln">text</span><span class="pun">)</span><span class="pln"> 
    </span><span class="kwd">return</span><span class="pln"> tokens_list

</span><span class="com"># دالة حذف كلمات التوقف</span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> filteringText</span><span class="pun">(</span><span class="pln">tokens_list</span><span class="pun">):</span><span class="pln">  
    </span><span class="com"># قائمة كلمات التوقف العربية</span><span class="pln">
    listStopwords </span><span class="pun">=</span><span class="pln"> set</span><span class="pun">(</span><span class="pln">stopwords</span><span class="pun">.</span><span class="pln">words</span><span class="pun">(</span><span class="str">'arabic'</span><span class="pun">))</span><span class="pln">
    filtered </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[]</span><span class="pln">
    </span><span class="kwd">for</span><span class="pln"> txt </span><span class="kwd">in</span><span class="pln"> tokens_list</span><span class="pun">:</span><span class="pln">
        </span><span class="kwd">if</span><span class="pln"> txt </span><span class="kwd">not</span><span class="pln"> </span><span class="kwd">in</span><span class="pln"> listStopwords</span><span class="pun">:</span><span class="pln">
            filtered</span><span class="pun">.</span><span class="pln">append</span><span class="pun">(</span><span class="pln">txt</span><span class="pun">)</span><span class="pln">
    tokens_list </span><span class="pun">=</span><span class="pln"> filtered 
    </span><span class="kwd">return</span><span class="pln"> tokens_list

</span><span class="com"># دالة التجذيع  </span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> stemmingText</span><span class="pun">(</span><span class="pln">tokens_list</span><span class="pun">):</span><span class="pln"> 
    tokens_list </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="pln">ar_stemmer</span><span class="pun">.</span><span class="pln">stemWord</span><span class="pun">(</span><span class="pln">word</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">for</span><span class="pln"> word </span><span class="kwd">in</span><span class="pln"> tokens_list</span><span class="pun">]</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> tokens_list

</span><span class="com"># دالة دمج قائمة من الكلمات في جملة</span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> toSentence</span><span class="pun">(</span><span class="pln">words_list</span><span class="pun">):</span><span class="pln">  
    sentence </span><span class="pun">=</span><span class="pln"> </span><span class="str">' '</span><span class="pun">.</span><span class="pln">join</span><span class="pun">(</span><span class="pln">word </span><span class="kwd">for</span><span class="pln"> word </span><span class="kwd">in</span><span class="pln"> words_list</span><span class="pun">)</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> sentence</span></pre>

<p>
	شرح الدوال السابقة:
</p>

<ul>
<li>
		الدالة <code>clean_tweet</code> تحذف الرموز التعبيرية والروابط والوسوم والأرقام وعلامات الترقيم العربية والإنكليزية من النص وذلك باستخدام التعابير النظامية الموافقة.
	</li>
	<li>
		الدالة <code>remove_repeating_char</code> تحذف المحارف المكررة والتي قد يستخدمها كاتب التغريدة.
	</li>
	<li>
		الدالة <code>tokenizingText</code> تعمل على تجزئة النص إلى قائمة من الوحدات tokens.
	</li>
	<li>
		الدالة <code>filteringText</code> تحذف كلمات التوقف من قائمة الوحدات.
	</li>
	<li>
		الدالة <code>stemmingText</code> تعمل على تجذيع كلمات قائمة الوحدات المتبقية.
	</li>
</ul>
<p>
	يُبين المثال التالي نتيجة استدعاء كل دالة من الدوال السابقة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8198_26" style="">
<span class="com"># مثال</span><span class="pln">
text</span><span class="pun">=</span><span class="pln"> </span><span class="str">"أنا أحب الذهاب إلى الحديقة ?، كل يوم 9 صباحاً، مع رفاقي هؤلاء! @toto  "</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">text</span><span class="pun">)</span><span class="pln">
text</span><span class="pun">=</span><span class="pln">clean_tweet</span><span class="pun">(</span><span class="pln">text</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">text</span><span class="pun">)</span><span class="pln">
tokens_list</span><span class="pun">=</span><span class="pln">tokenizingText</span><span class="pun">(</span><span class="pln">text</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">tokens_list</span><span class="pun">)</span><span class="pln">
tokens_list</span><span class="pun">=</span><span class="pln">filteringText</span><span class="pun">(</span><span class="pln">tokens_list</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">tokens_list</span><span class="pun">)</span><span class="pln">
tokens_list</span><span class="pun">=</span><span class="pln">stemmingText</span><span class="pun">(</span><span class="pln">tokens_list</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">tokens_list</span><span class="pun">)</span></pre>

<p>
	يكون ناتج التنفيذ:
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<div class="ipsQuote_contents ipsClearfix">
		<p>
			أنا أحب الذهاب إلى الحديقة ?، كل يوم 9 صباحاً، مع رفاقي هؤلاء! @toto
		</p>

		<p>
			أحب الذهاب الحديقة يوم صباحاً رفاقي هؤلاء
		</p>

		<p>
			['أحب', 'الذهاب', 'الحديقة', 'يوم', 'صباحاً', 'رفاقي', 'هؤلاء']
		</p>

		<p>
			['أحب', 'الذهاب', 'الحديقة', 'يوم', 'صباحاً', 'رفاقي']
		</p>

		<p>
			['احب', 'ذهاب', 'حديق', 'يوم', 'صباح', 'رفاق']
		</p>
	</div>
</blockquote>

<p>
	تعرض الشيفرة التالية التصريح عن الدالة <code>process_tweet</code> والتي تقوم أولًا بتنظيف التغريدات وذلك باستدعاء الدالة <code>clean_tweet</code>، ومن ثم تحويل التغريدات إلى وحدات وذلك باستدعاء الدالة <code>tokenizingText</code>، وأخيرًا تجذيع الوحدات عن طريق الدالة <code>stemmingText</code>.
</p>

<p>
	ومن ثم تنفيذ دالة المعالجة الأولية على جميع التغريدات:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8198_8" style="">
<span class="com"># دالة معالجة التغريدات</span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> process_tweet</span><span class="pun">(</span><span class="pln">tweet</span><span class="pun">):</span><span class="pln">
    </span><span class="com"># تنظيف التغريدة</span><span class="pln">
    tweet</span><span class="pun">=</span><span class="pln">clean_tweet</span><span class="pun">(</span><span class="pln">tweet</span><span class="pun">)</span><span class="pln">
    </span><span class="com"># التحويل إلى وحدات</span><span class="pln">
    tweet</span><span class="pun">=</span><span class="pln">tokenizingText</span><span class="pun">(</span><span class="pln">tweet</span><span class="pun">)</span><span class="pln">
    </span><span class="com"># التجذيع</span><span class="pln">
    tweet</span><span class="pun">=</span><span class="pln">stemmingText</span><span class="pun">(</span><span class="pln">tweet</span><span class="pun">)</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> tweet

</span><span class="com"># المعالجة الأولية للتغريدات </span><span class="pln">
tweets</span><span class="pun">[</span><span class="str">'tweet'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> tweets</span><span class="pun">[</span><span class="str">'tweet'</span><span class="pun">].</span><span class="pln">apply</span><span class="pun">(</span><span class="pln">process_tweet</span><span class="pun">)</span></pre>

<h2>
	موازنة الصفوف
</h2>

<p>
	تتطلب معظم خوارزميات التصنيف توفر بيانات للتدريب وبصفوف متوازنة، بمعنى أن يكون عدد أسطر البيانات من كل صف متساوية تقريبًا تجنبًا لانحياز المُصنف إلى الصف ذي العدد الأكبر من الأسطر في بيانات التدريب.
</p>

<p>
	من المفيد إذًا أولًا معاينة توزع أعداد الصفوف.
</p>

<p>
	نستخدم في الشيفرة البرمجية التالية مكتبات الرسم اللازمة لرسم أشرطة تُمثّل أعداد الصفوف:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8198_59" style="">
<span class="com"># مكتبات الرسم</span><span class="pln">
</span><span class="kwd">import</span><span class="pln"> matplotlib</span><span class="pun">.</span><span class="pln">pyplot </span><span class="kwd">as</span><span class="pln"> plt
</span><span class="kwd">import</span><span class="pln"> seaborn </span><span class="kwd">as</span><span class="pln"> sns
</span><span class="com"># حجم الرسم</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">figure</span><span class="pun">(</span><span class="pln">figsize</span><span class="pun">=(</span><span class="lit">12</span><span class="pun">,</span><span class="pln"> </span><span class="lit">6</span><span class="pun">))</span><span class="pln">
</span><span class="com"># رسم عدد كل صف</span><span class="pln">
sns</span><span class="pun">.</span><span class="pln">countplot</span><span class="pun">(</span><span class="pln">data</span><span class="pun">=</span><span class="pln">tweets</span><span class="pun">,</span><span class="pln"> y</span><span class="pun">=</span><span class="str">'topic'</span><span class="pun">);</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">title</span><span class="pun">(</span><span class="str">'Topics Distribution'</span><span class="pun">,</span><span class="pln"> fontsize</span><span class="pun">=</span><span class="lit">18</span><span class="pun">)</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">show</span><span class="pun">()</span></pre>

<p>
	يُبين الشكل الناتج عدم توازن الصفوف على الإطلاق:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="102763" href="https://academy.hsoub.com/uploads/monthly_2022_07/003.png.238141a4bf37fc969bbdcd7e1cc768bc.png" rel=""><img alt="003.png" class="ipsImage ipsImage_thumbnailed" data-fileid="102763" data-unique="rudj91rxg" src="https://academy.hsoub.com/uploads/monthly_2022_07/003.thumb.png.7bdff7c55dd81d3598a786e665d9d2ba.png" style="width: 500px; height: auto;"></a>
</p>

<p>
	نستخدم في الشيفرة التالية الصنف <code>RandomOverSampler</code> من المكتبة <code>imblearn.over_sampling</code> والذي يقوم باختيار أسطر عشوائية من الصفوف القليلة العدد ويُكررها في مجموعة البيانات.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8198_61" style="">
<span class="com"># استيراد مكتبة الموازنة</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> imblearn</span><span class="pun">.</span><span class="pln">over_sampling </span><span class="kwd">import</span><span class="pln"> </span><span class="typ">RandomOverSampler</span><span class="pln">
</span><span class="com"># إنشاء كائن من الصنف</span><span class="pln">
oversample </span><span class="pun">=</span><span class="pln"> </span><span class="typ">RandomOverSampler</span><span class="pun">()</span><span class="pln">
</span><span class="com"># توليد سطر عشوائي</span><span class="pln">
tweets </span><span class="pun">=</span><span class="pln"> tweets</span><span class="pun">.</span><span class="pln">sample</span><span class="pun">(</span><span class="pln">frac</span><span class="pun">=</span><span class="lit">1</span><span class="pun">)</span><span class="pln">
</span><span class="com"># توليد الأسطر الجديدة</span><span class="pln">
tweets</span><span class="pun">,</span><span class="pln"> Y </span><span class="pun">=</span><span class="pln"> oversample</span><span class="pun">.</span><span class="pln">fit_resample</span><span class="pun">(</span><span class="pln">tweets</span><span class="pun">,</span><span class="pln"> tweets</span><span class="pun">.</span><span class="pln">topic</span><span class="pun">)</span></pre>

<p>
	نعيد رسم أعداد الصفوف بعد الموازنة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8198_63" style="">
<span class="com"># إعادة رسم أعداد الصفوف</span><span class="pln">
</span><span class="com"># بعد الموازنة</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">figure</span><span class="pun">(</span><span class="pln">figsize</span><span class="pun">=(</span><span class="lit">12</span><span class="pun">,</span><span class="pln"> </span><span class="lit">6</span><span class="pun">))</span><span class="pln">
sns</span><span class="pun">.</span><span class="pln">countplot</span><span class="pun">(</span><span class="pln">data</span><span class="pun">=</span><span class="pln">tweets</span><span class="pun">,</span><span class="pln"> y</span><span class="pun">=</span><span class="str">'topic'</span><span class="pun">);</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">title</span><span class="pun">(</span><span class="str">'Topics Distribution After OverSampling'</span><span class="pun">,</span><span class="pln"> fontsize</span><span class="pun">=</span><span class="lit">18</span><span class="pun">)</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">show</span><span class="pun">()</span></pre>

<p>
	يُبين الشكل الناتج توازن الصفوف بشكل كامل:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="102765" href="https://academy.hsoub.com/uploads/monthly_2022_07/004.png.97a425b381e93733f1d0b6b197150e0a.png" rel=""><img alt="004.png" class="ipsImage ipsImage_thumbnailed" data-fileid="102765" data-unique="fu2pje3d7" src="https://academy.hsoub.com/uploads/monthly_2022_07/004.thumb.png.55b2fc1ba12a8159e6152d7ae25b58b3.png" style="width: 500px; height: auto;"></a>
</p>

<h2>
	ترميز الصفوف
</h2>

<p>
	لا تقبل بنى تعلم الآلة النصوص كمدخلات لها، تقوم الشيفرة التالية باستخدام الصنف <code>LabelEncoder</code> من المكتبة <code>sklearn.preprocessing</code> لترميز الصفوف باستخدام الأرقام.
</p>

<p>
	نطبع في النهاية أسماء الصفوف والترميز المقابل لها:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8198_69" style="">
<span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">preprocessing </span><span class="kwd">import</span><span class="pln"> </span><span class="typ">LabelEncoder</span><span class="pln">
</span><span class="com"># ترميز الصفوف</span><span class="pln">
le_topics </span><span class="pun">=</span><span class="pln"> </span><span class="typ">LabelEncoder</span><span class="pun">()</span><span class="pln">
tweets</span><span class="pun">[</span><span class="str">'topic'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> tweets</span><span class="pun">[[</span><span class="str">'topic'</span><span class="pun">]].</span><span class="pln">apply</span><span class="pun">(</span><span class="pln">le_topics</span><span class="pun">.</span><span class="pln">fit_transform</span><span class="pun">)</span><span class="pln">
classes </span><span class="pun">=</span><span class="pln"> le_topics</span><span class="pun">.</span><span class="pln">classes_ </span><span class="com"># الصفوف</span><span class="pln">
n_classes </span><span class="pun">=</span><span class="pln"> len</span><span class="pun">(</span><span class="pln">classes</span><span class="pun">)</span><span class="pln"> </span><span class="com"># عدد الصفوف</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"No. of classes:"</span><span class="pun">,</span><span class="pln"> n_classes</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"Classes:"</span><span class="pun">,</span><span class="pln"> classes</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"Coding: "</span><span class="pun">,</span><span class="pln"> le_topics</span><span class="pun">.</span><span class="pln">transform</span><span class="pun">(</span><span class="pln">classes</span><span class="pun">))</span></pre>

<p>
	يكون الإظهار:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8198_71" style="">
<span class="typ">No</span><span class="pun">.</span><span class="pln"> of classes</span><span class="pun">:</span><span class="pln"> </span><span class="lit">7</span><span class="pln"> 

</span><span class="typ">Classes</span><span class="pun">:</span><span class="pln"> </span><span class="pun">[</span><span class="str">'Business'</span><span class="pln"> </span><span class="str">'Economy'</span><span class="pln"> </span><span class="str">'News'</span><span class="pln"> </span><span class="str">'Politics'</span><span class="pln"> </span><span class="str">'Social'</span><span class="pln"> </span><span class="str">'Sports'</span><span class="pln"> </span><span class="str">'Technology'</span><span class="pun">]</span><span class="pln"> 

</span><span class="typ">Coding</span><span class="pun">:</span><span class="pln">  </span><span class="pun">[</span><span class="lit">0</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> </span><span class="lit">5</span><span class="pln"> </span><span class="lit">6</span><span class="pun">]</span></pre>

<h2>
	تحويل النصوص إلى أشعة رقمية
</h2>

<p>
	لا تقبل بنى تعلم الآلة النصوص كمدخلات لها، بل تحتاج إلى أشعة رقمية كمدخلات.
</p>

<p>
	نستخدم الشيفرة التالية لتحويل الشعاع النصي لكل تغريدة <code>tweet_preprocessed</code> إلى شعاع رقمي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8198_73" style="">
<span class="kwd">from</span><span class="pln"> keras</span><span class="pun">.</span><span class="pln">preprocessing</span><span class="pun">.</span><span class="pln">text </span><span class="kwd">import</span><span class="pln"> </span><span class="typ">Tokenizer</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> keras</span><span class="pun">.</span><span class="pln">preprocessing</span><span class="pun">.</span><span class="pln">sequence </span><span class="kwd">import</span><span class="pln"> pad_sequences
</span><span class="com"># نركيب جمل التغريدات من المفردات المعالجة</span><span class="pln">
sentences </span><span class="pun">=</span><span class="pln"> tweets</span><span class="pun">[</span><span class="str">'tweet'</span><span class="pun">].</span><span class="pln">apply</span><span class="pun">(</span><span class="pln">toSentence</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">sentences</span><span class="pun">[</span><span class="lit">6</span><span class="pun">])</span><span class="pln"> 
</span><span class="com"># عدد الكلمات الأعظمي ذات التواتر الأكبر</span><span class="pln">
</span><span class="com"># التي ستُستخدم</span><span class="pln">
max_words </span><span class="pun">=</span><span class="pln"> </span><span class="lit">5000</span><span class="pln">
</span><span class="com"># الطول الأعظمي لشعاع الأرقام</span><span class="pln">
max_len </span><span class="pun">=</span><span class="pln"> </span><span class="lit">50</span><span class="pln">
</span><span class="com">#   التصريح عن المجزئ </span><span class="pln">
</span><span class="com">#   مع تحديد عدد الكلمات التي ستبقى </span><span class="pln">
</span><span class="com">#  بالاعتماد على تواترها </span><span class="pln">
tokenizer </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Tokenizer</span><span class="pun">(</span><span class="pln">num_words</span><span class="pun">=</span><span class="pln">max_words </span><span class="pun">)</span><span class="pln">
</span><span class="com"># ملائمة المجزئ لنصوص التغريدات</span><span class="pln">
tokenizer</span><span class="pun">.</span><span class="pln">fit_on_texts</span><span class="pun">(</span><span class="pln">sentences</span><span class="pun">)</span><span class="pln">
</span><span class="com"># تحويل النص إلى قائمة من الأرقام</span><span class="pln">
S </span><span class="pun">=</span><span class="pln"> tokenizer</span><span class="pun">.</span><span class="pln">texts_to_sequences</span><span class="pun">(</span><span class="pln">sentences</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">S</span><span class="pun">[</span><span class="lit">0</span><span class="pun">])</span><span class="pln"> 
</span><span class="com"># توحيد أطوال الأشعة</span><span class="pln">
X </span><span class="pun">=</span><span class="pln"> pad_sequences</span><span class="pun">(</span><span class="pln">S</span><span class="pun">,</span><span class="pln"> maxlen</span><span class="pun">=</span><span class="pln">max_len</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">X</span><span class="pun">[</span><span class="lit">0</span><span class="pun">])</span><span class="pln"> 
X</span><span class="pun">.</span><span class="pln">shape</span></pre>

<p>
	نجد من الشيفرة أن المتغير <code>max_words</code> يُحدّد عدد الكلمات الأعظمي التي سيتم الاحتفاظ بها حيث يُحسب تواتر كل كلمة في كل النصوص ومن ثم تُرتب حسب تواترها (المرتبة الأولى للكلمة ذات التواتر الأكبر). ستُهمل الكلمات ذات المرتبة أكبر من <code>max_words</code>، و يُحدّد المتغير <code>max_len</code> طول الشعاع الرقمي النهائي فإذا كان موافقًا لنص أقل من <code>max_len</code> تُضاف أصفار للشعاع حتى يُصبح طوله مساويًا إلى <code>max_len</code>. أما إذا كان طوله أكبر يُقتطع جزءًا منه ليُصبح طوله مساويًا إلى <code>max_len</code>.
</p>

<p>
	بينما تقوم الدالة <code>fit_on_texts</code> بملائمة المُجزء tokenizer لنصوص جمل التغريدات <code>sentences.values</code> أي حساب تواتر الكلمات والاحتفاظ بالكلمات ذات التواتر أكبر أو يساوي <code>max_words</code>.
</p>

<p>
	نطبع في الشيفرة السابقة، بهدف التوضيح، ناتج كل مرحلة.
</p>

<p>
	اخترنا مثلًا شعاع التغريدة 6 بعد المعالجة:
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p>
		دخل يوم يوافق يوم نوم عالم وفي يتم تذكير اهم نوم فوايد عظيم لجسم انس تبخل نفس
	</p>
</blockquote>

<p>
	تكون نتيجة تحويل الشعاع السابق النصي إلى شعاع من الأرقام:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8198_75" style="">
<span class="pun">[</span><span class="lit">1839</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1375</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2751</span><span class="pun">,</span><span class="pln"> </span><span class="lit">315</span><span class="pun">,</span><span class="pln"> </span><span class="lit">975</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1420</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1839</span><span class="pun">,</span><span class="pln"> </span><span class="lit">3945</span><span class="pun">,</span><span class="pln"> </span><span class="lit">436</span><span class="pun">,</span><span class="pln"> </span><span class="lit">794</span><span class="pun">,</span><span class="pln"> </span><span class="lit">919</span><span class="pun">,</span><span class="pln"> </span><span class="lit">445</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1290</span><span class="pun">,</span><span class="pln"> </span><span class="lit">312</span><span class="pun">,</span><span class="pln"> </span><span class="lit">258</span><span class="pun">]</span></pre>

<p>
	وبعد عملية توحيد الطول يكون الشعاع الرقمي النهائي الناتج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8198_77" style="">
<span class="pun">[</span><span class="pln">   </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">
    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">
    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln"> </span><span class="lit">1839</span><span class="pln"> </span><span class="lit">1375</span><span class="pln"> </span><span class="lit">2751</span><span class="pln">  </span><span class="lit">315</span><span class="pln">  </span><span class="lit">975</span><span class="pln"> </span><span class="lit">1420</span><span class="pln"> </span><span class="lit">1839</span><span class="pln">
 </span><span class="lit">3945</span><span class="pln">  </span><span class="lit">436</span><span class="pln">  </span><span class="lit">794</span><span class="pln">  </span><span class="lit">919</span><span class="pln">  </span><span class="lit">445</span><span class="pln"> </span><span class="lit">1290</span><span class="pln">  </span><span class="lit">312</span><span class="pln">  </span><span class="lit">258</span><span class="pun">]</span></pre>

<h2>
	تجهيز دخل وخرج الشبكة العصبية
</h2>

<p>
	تعرض الشيفرة التالية حساب شعاع الخرج أولًا وذلك بإسناد العمود <code>topic</code> من إطار البيانات، والذي يحوي الترميز الرقمي للصفوف إلى المتغير <code>y</code>.
</p>

<p>
	نستخدم الدالة <code>train_test_split</code> لتقسيم البيانات المتاحة إلى 80% منها لعملية التدريب و20% لعملية الاختبار وحساب مقاييس الأداء:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8198_79" style="">
<span class="com"># توليد شعاع الخرج</span><span class="pln">
y </span><span class="pun">=</span><span class="pln"> tweets</span><span class="pun">[</span><span class="str">'topic'</span><span class="pun">]</span><span class="pln">
</span><span class="com"># مكنبة تقسيم البيانات إلى تدريب واختبار</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">model_selection </span><span class="kwd">import</span><span class="pln"> train_test_split
</span><span class="com"># تقسيم البيانات إلى تدريب واختبار</span><span class="pln">
X_train</span><span class="pun">,</span><span class="pln"> X_test</span><span class="pun">,</span><span class="pln"> y_train</span><span class="pun">,</span><span class="pln"> y_test </span><span class="pun">=</span><span class="pln"> train_test_split</span><span class="pun">(</span><span class="pln">X</span><span class="pun">,</span><span class="pln"> y</span><span class="pun">,</span><span class="pln"> test_size </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.2</span><span class="pun">,</span><span class="pln"> random_state </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">X_train</span><span class="pun">.</span><span class="pln">shape</span><span class="pun">,</span><span class="pln"> y_train</span><span class="pun">.</span><span class="pln">shape</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">X_test</span><span class="pun">.</span><span class="pln">shape</span><span class="pun">,</span><span class="pln"> y_test</span><span class="pun">.</span><span class="pln">shape</span><span class="pun">)</span></pre>

<p>
	نطبع في الشيفرة السابقة حجوم أشعة الدخل والخرج للتدريب وللاختبار:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8198_81" style="">
<span class="pun">(</span><span class="lit">30520</span><span class="pun">,</span><span class="pln"> </span><span class="lit">50</span><span class="pun">)</span><span class="pln"> </span><span class="pun">(</span><span class="lit">30520</span><span class="pun">,)</span><span class="pln">
</span><span class="pun">(</span><span class="lit">7630</span><span class="pun">,</span><span class="pln"> </span><span class="lit">50</span><span class="pun">)</span><span class="pln"> </span><span class="pun">(</span><span class="lit">7630</span><span class="pun">,)</span></pre>

<h2>
	نموذج الشبكة العصبية المتعلم
</h2>

<p>
	تُعدّ المكتبة Keras من أهم <a href="https://academy.hsoub.com/programming/python/%D8%A3%D9%87%D9%85-8-%D9%85%D9%83%D8%AA%D8%A8%D8%A7%D8%AA-%D8%A8%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-%D8%AA%D8%B3%D8%AA%D8%AE%D8%AF%D9%85-%D9%81%D9%8A-%D8%A7%D9%84%D9%85%D8%B4%D8%A7%D8%B1%D9%8A%D8%B9-%D8%A7%D9%84%D8%B5%D8%BA%D9%8A%D8%B1%D8%A9-r654/" rel="">مكتبات بايثون</a> التي توفر بناء شبكات عصبية لمسائل التعلم الآلي.
</p>

<p>
	تعرض الشيفرة التالية التصريح عن دالة بناء نموذج التعلّم <code>create_model</code> مع إعطاء جميع المعاملات المترفعة قيمًا ابتدائية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8198_83" style="">
<span class="com"># تضمين النموذج التسلسلي</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> keras</span><span class="pun">.</span><span class="pln">models </span><span class="kwd">import</span><span class="pln"> </span><span class="typ">Sequential</span><span class="pln">
</span><span class="com"># تضمين  الطبقات اللازمة</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> keras</span><span class="pun">.</span><span class="pln">layers </span><span class="kwd">import</span><span class="pln"> </span><span class="typ">Embedding</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Dense</span><span class="pun">,</span><span class="pln"> LSTM
</span><span class="com"># دوال التحسين</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> tensorflow</span><span class="pun">.</span><span class="pln">keras</span><span class="pun">.</span><span class="pln">optimizers </span><span class="kwd">import</span><span class="pln"> </span><span class="typ">Adam</span><span class="pun">,</span><span class="pln"> </span><span class="typ">RMSprop</span><span class="pln"> 

</span><span class="com"># التصريح عن دالة إنشاء نموذج التعلم</span><span class="pln">
</span><span class="com"># مع إعطاء قيم أولية للمعاملات المترفعة</span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> create_model</span><span class="pun">(</span><span class="pln">embed_dim </span><span class="pun">=</span><span class="pln"> </span><span class="lit">32</span><span class="pun">,</span><span class="pln"> hidden_unit </span><span class="pun">=</span><span class="pln"> </span><span class="lit">16</span><span class="pun">,</span><span class="pln"> dropout_rate </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.2</span><span class="pun">,</span><span class="pln"> 
optimizers </span><span class="pun">=</span><span class="pln"> </span><span class="typ">RMSprop</span><span class="pun">,</span><span class="pln"> learning_rate </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.001</span><span class="pun">):</span><span class="pln">
    </span><span class="com"># التصريح عن نموذج تسلسلي</span><span class="pln">
    model </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Sequential</span><span class="pun">()</span><span class="pln">
    </span><span class="com"># طبقة التضمين</span><span class="pln">
    model</span><span class="pun">.</span><span class="pln">add</span><span class="pun">(</span><span class="typ">Embedding</span><span class="pun">(</span><span class="pln">input_dim </span><span class="pun">=</span><span class="pln"> max_words</span><span class="pun">,</span><span class="pln"> output_dim </span><span class="pun">=</span><span class="pln"> embed_dim</span><span class="pun">,</span><span class="pln"> input_length </span><span class="pun">=</span><span class="pln"> MAX_LENGTH</span><span class="pun">))</span><span class="pln">
    </span><span class="com"># LSTM</span><span class="pln">
    model</span><span class="pun">.</span><span class="pln">add</span><span class="pun">(</span><span class="pln">LSTM</span><span class="pun">(</span><span class="pln">units </span><span class="pun">=</span><span class="pln"> hidden_unit </span><span class="pun">,</span><span class="pln">dropout</span><span class="pun">=</span><span class="pln">dropout_rate</span><span class="pun">))</span><span class="pln">
    </span><span class="com"># الطبقة الأخيرة</span><span class="pln">
    model</span><span class="pun">.</span><span class="pln">add</span><span class="pun">(</span><span class="typ">Dense</span><span class="pun">(</span><span class="pln">units </span><span class="pun">=</span><span class="pln"> len</span><span class="pun">(</span><span class="pln">classes</span><span class="pun">),</span><span class="pln"> activation </span><span class="pun">=</span><span class="pln"> </span><span class="str">'softmax'</span><span class="pun">))</span><span class="pln">
    </span><span class="com"># يناء النموذج</span><span class="pln">
    model</span><span class="pun">.</span><span class="pln">compile</span><span class="pun">(</span><span class="pln">loss </span><span class="pun">=</span><span class="pln"> </span><span class="str">'sparse_categorical_crossentropy'</span><span class="pun">,</span><span class="pln"> optimizer </span><span class="pun">=</span><span class="pln"> optimizers</span><span class="pun">(</span><span class="pln">learning_rate </span><span class="pun">=</span><span class="pln"> learning_rate</span><span class="pun">),</span><span class="pln"> metrics </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="str">'accuracy'</span><span class="pun">])</span><span class="pln">
    </span><span class="com"># طباعة ملخص النموذج</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="pln">model</span><span class="pun">.</span><span class="pln">summary</span><span class="pun">())</span><span class="pln">

    </span><span class="kwd">return</span><span class="pln"> model</span></pre>

<p>
	نستخدم من أجل مسألتنا نموذج شبكة عصبية تسلسلي يتألف من ثلاث طبقات هي: طبقة التضمين Embedding وطبقة LSTM (شبكة ذات ذاكرة طويلة المدى) والطبقة الكثيفة Dense.
</p>

<h3>
	الطبقة الأولى: طبقة التضمين Embedding
</h3>

<p>
	نستخدم هذه الطبقة لتوليد ترميز مكثف للكلمات dense word encoding مما يُساهم في تحسين عملية التعلم. نطلب تحويل الشعاع الذي طوله <code>input_length</code> (في حالتنا 50) والذي يحوي قيم ضمن المجال <code>input_dim</code> (من 1 إلى 5000 في مثالنا) إلى شعاع من القيم ضمن المجال <code>output_dim</code> (مثلًا 32 قيمة).
</p>

<h3>
	الطبقة الثانية: شبكة ذات ذاكرة طويلة المدى Long Short-Term Memory
</h3>

<p>
	يُحدّد المعامل المترفع <code>units</code> عدد الوحدات المخفية لهذه الطبقة. يُساهم المعامل <code>dropout</code> في معايرة الشبكة خلال التدريب حيث يقوم بإيقاف تشغيل الوحدات المخفية بشكل عشوائي أثناء التدريب، وبهذه الطريقة لا تعتمد الشبكة بنسبة 100٪ على جميع الخلايا العصبية الخاصة بها. وبدلاً من ذلك، تُجبر نفسها على العثور على أنماط أكثر أهمية في البيانات من أجل زيادة المقياس الذي تحاول تحسينه (الدقة مثلًا).
</p>

<h3>
	الطبقة الثالثة: الكثيفة Dense
</h3>

<p>
	يُحدّد المعامل <code>units</code> حجم الخرج لهذه الطبقة (7 في حالتنا: عدد الصفوف) ويُبين الشكل التالي ملخص النموذج:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="102767" href="https://academy.hsoub.com/uploads/monthly_2022_07/005.png.c622555d569608d7327386e60c1a407e.png" rel=""><img alt="005.png" class="ipsImage ipsImage_thumbnailed" data-fileid="102767" data-unique="6sffe5y3z" src="https://academy.hsoub.com/uploads/monthly_2022_07/005.png.c622555d569608d7327386e60c1a407e.png" style="width: 550px; height: auto;"></a>
</p>

<h2>
	معايرة المعاملات الفائقة للوصول لنموذج أمثلي
</h2>

<p>
	يمكن الوصول لنموذج تعلم أمثلي بمعايرة معاملاته الفائقة وفق معطيات المشروع. لنُبين أولًا الفرق بين المعاملات الفائقة لنموذج والمعاملات الأخرى له:
</p>

<ul>
<li>
		المعاملات الفائقة hyperparameters: هي إعدادات خوارزمية التعلّم قبل التدريب (والتي وضعها مصممو الخوارزمية).
	</li>
	<li>
		المعاملات parameters: هي المعاملات التي يتعلّمها النموذج أثناء التدريب مثل أوزان الشبكة العصبية.
	</li>
</ul>
<p>
	تؤثر عملية معايرة المعاملات الفائقة على أداء النموذج لاسيما لجهة التوزان المطلوب بين مشكلة قلة التخصيص underfitting ومشكلة فرط التخصيص overfitting واللتان تؤديان إلى نموذج غير قادر على تعميم أمثلة التدريب وبالتالي لن يتمكن من التصنيف مع معطيات جديدة (يُمكن العودة لمقال <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-%D8%A7%D9%84%D8%AA%D8%AD%D8%AF%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%B1%D8%A6%D9%8A%D8%B3%D9%8A%D8%A9-%D9%88%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D9%88%D8%B3%D8%B9-%D9%81%D9%8A-%D8%A7%D9%84%D9%85%D8%AC%D8%A7%D9%84-r1010/" rel="">تعلم الآلة: التحديات الرئيسية وكيفية التوسع في المجال</a> من أكاديمية حسوب للمزيد من التفصيل حول هاتين المشكلتين).
</p>

<p>
	تظهر مشكلة قلة التخصيص عندما لا يكون للنموذج درجات حرية كافية ليتعلّم الربط بين الميزات والهدف، وبالتالي يكون له انحياز كبير Bias–variance tradeoff نحو قيم معينة للهدف. يُمكن تصحيح قلة التخصيص بجعل النموذج أكثر تعقيدًا. أما مشكلة فرط التخصيص فتظهر عندما يقوم النموذج بتخزين بيانات التدريب فيكون له بالتالي تباين كبير والذي يُمكن تصحيحه بالحد من تعقيد النموذج باستخدام التسوية regularization.
</p>

<p>
	تكمن المشكلة في معايرة المعاملات الفائقة بأن قيمها المثلى تختلف من مسألة لأخرى! وبالتالي، فإن الطريقة الوحيدة للوصول لهذه القيم المثلى هي تجريب قيم مختلفة مع كل مجموعة بيانات تدريب جديدة.
</p>

<p>
	يوفر Scikit-Learn العديد من الطرق لتقويم المعاملات الفائقة وبالتالي سنعتمد في مشروعنا عليها دون أن نُعقّد الأمور أكثر.
</p>

<p>
	يُمكن العودة إلى مقال <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AA%D8%AD%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D9%85%D8%B4%D8%A7%D8%B9%D8%B1-%D9%81%D9%8A-%D8%A7%D9%84%D9%86%D8%B5%D9%88%D8%B5-%D8%A7%D9%84%D8%B9%D8%B1%D8%A8%D9%8A%D8%A9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%B9%D9%85%D9%8A%D9%82-r1476/" rel="">تحليل المشاعر في اللغة العربية باستخدام التعلم العميق</a> فقرة "البحث الشبكي مع التقييم المتقاطع" لشرح طريقة حسابنا لأفضل القيم للمعاملات المترفعة.
</p>

<h3>
	بناء نموذج التعلم النهائي
</h3>

<p>
	نستخدم الدالة <code>KerasClassifier</code> من <code>scikit</code> لبناء المُصنف مع الدالة السابقة <code>create_model</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8198_87" style="">
<span class="com"># مكتبة التصنيف</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> keras</span><span class="pun">.</span><span class="pln">wrappers</span><span class="pun">.</span><span class="pln">scikit_learn </span><span class="kwd">import</span><span class="pln"> </span><span class="typ">KerasClassifier</span><span class="pln">

</span><span class="com"># إنشاء النموذج مع قيم المعاملات المترفعة الأمثلية</span><span class="pln">

model </span><span class="pun">=</span><span class="pln"> </span><span class="typ">KerasClassifier</span><span class="pun">(</span><span class="pln">build_fn </span><span class="pun">=</span><span class="pln"> create_model</span><span class="pun">,</span><span class="pln">
                        </span><span class="com"># معاملات النموذج</span><span class="pln">
                        dropout_rate </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.2</span><span class="pun">,</span><span class="pln">
                        embed_dim </span><span class="pun">=</span><span class="pln"> </span><span class="lit">32</span><span class="pun">,</span><span class="pln">
                        hidden_unit </span><span class="pun">=</span><span class="pln"> </span><span class="lit">64</span><span class="pun">,</span><span class="pln">
                        optimizers </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Adam</span><span class="pun">,</span><span class="pln">
                        learning_rate </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.001</span><span class="pun">,</span><span class="pln">
                        </span><span class="com"># معاملات التدريب</span><span class="pln">
                        epochs</span><span class="pun">=</span><span class="lit">10</span><span class="pun">,</span><span class="pln"> 
                        batch_size</span><span class="pun">=</span><span class="lit">256</span><span class="pun">,</span><span class="pln">
                        </span><span class="com"># نسبة بيانات التقييم</span><span class="pln">
                        validation_split </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.1</span><span class="pun">)</span><span class="pln">
</span><span class="com"># ملائمة النموذج مع بيانات التدريب</span><span class="pln">
model_prediction </span><span class="pun">=</span><span class="pln"> model</span><span class="pun">.</span><span class="pln">fit</span><span class="pun">(</span><span class="pln">X_train</span><span class="pun">,</span><span class="pln"> y_train</span><span class="pun">)</span></pre>

<p>
	يُمكن الآن رسم منحني الدقة accuracy لكل من بيانات التدريب والتقييم (لاحظ أننا في الشيفرة السابقة احتفاظنا بـ 10% من بيانات التدريب للتقييم):
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8198_89" style="">
<span class="com"># معاينة دقة النموذج</span><span class="pln">
</span><span class="com"># التدريب والتقييم</span><span class="pln">
fig</span><span class="pun">,</span><span class="pln"> ax </span><span class="pun">=</span><span class="pln"> plt</span><span class="pun">.</span><span class="pln">subplots</span><span class="pun">(</span><span class="pln">figsize </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="lit">10</span><span class="pun">,</span><span class="pln"> </span><span class="lit">4</span><span class="pun">))</span><span class="pln">
ax</span><span class="pun">.</span><span class="pln">plot</span><span class="pun">(</span><span class="pln">model_prediction</span><span class="pun">.</span><span class="pln">history</span><span class="pun">[</span><span class="str">'accuracy'</span><span class="pun">],</span><span class="pln"> label </span><span class="pun">=</span><span class="pln"> </span><span class="str">'train accuracy'</span><span class="pun">)</span><span class="pln">
ax</span><span class="pun">.</span><span class="pln">plot</span><span class="pun">(</span><span class="pln">model_prediction</span><span class="pun">.</span><span class="pln">history</span><span class="pun">[</span><span class="str">'val_accuracy'</span><span class="pun">],</span><span class="pln"> label </span><span class="pun">=</span><span class="pln"> </span><span class="str">'val accuracy'</span><span class="pun">)</span><span class="pln">
ax</span><span class="pun">.</span><span class="pln">set_title</span><span class="pun">(</span><span class="str">'Model Accuracy'</span><span class="pun">)</span><span class="pln">
ax</span><span class="pun">.</span><span class="pln">set_xlabel</span><span class="pun">(</span><span class="str">'Epoch'</span><span class="pun">)</span><span class="pln">
ax</span><span class="pun">.</span><span class="pln">set_ylabel</span><span class="pun">(</span><span class="str">'Accuracy'</span><span class="pun">)</span><span class="pln">
ax</span><span class="pun">.</span><span class="pln">legend</span><span class="pun">(</span><span class="pln">loc </span><span class="pun">=</span><span class="pln"> </span><span class="str">'upper left'</span><span class="pun">)</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">show</span><span class="pun">()</span></pre>

<p>
	يكون للمنحي الشكل التالي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="102768" href="https://academy.hsoub.com/uploads/monthly_2022_07/006.png.47a761dc9b04c0f27674ffc2bc319141.png" rel=""><img alt="006.png" class="ipsImage ipsImage_thumbnailed" data-fileid="102768" data-unique="miliul16p" src="https://academy.hsoub.com/uploads/monthly_2022_07/006.thumb.png.145d165563a92a42e6cfa8551df4780b.png" style="width: 600px; height: auto;"></a>
</p>

<h3>
	حساب مقاييس الأداء
</h3>

<p>
	يُمكن الآن حساب مقاييس الأداء المعروفة في مسائل التصنيف (الصحة Accuracy، الدقة Precision، الاستذكار Recall، المقياس F1) للنموذج المتعلم باستخدام الشيفرة التالية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8198_91" style="">
<span class="com"># مقاييس الأداء</span><span class="pln">

</span><span class="com"># مقياس الصحة</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">metrics </span><span class="kwd">import</span><span class="pln"> accuracy_score 
</span><span class="com"># مقياس الدقة</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">metrics </span><span class="kwd">import</span><span class="pln"> precision_score
</span><span class="com"># مقياس الاستذكار</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">metrics </span><span class="kwd">import</span><span class="pln"> recall_score
</span><span class="com"># f1</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">metrics </span><span class="kwd">import</span><span class="pln"> f1_score
</span><span class="com"># مصفوفة الارتباك</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">metrics </span><span class="kwd">import</span><span class="pln"> confusion_matrix
</span><span class="com"># تصنيف بيانات الاختبار</span><span class="pln">
y_pred </span><span class="pun">=</span><span class="pln"> model</span><span class="pun">.</span><span class="pln">predict</span><span class="pun">(</span><span class="pln">X_test</span><span class="pun">)</span><span class="pln">
</span><span class="com"># حساب مقاييس الأداء</span><span class="pln">
accuracy </span><span class="pun">=</span><span class="pln"> accuracy_score</span><span class="pun">(</span><span class="pln">y_test</span><span class="pun">,</span><span class="pln"> y_pred</span><span class="pun">)</span><span class="pln">
precision</span><span class="pun">=</span><span class="pln">precision_score</span><span class="pun">(</span><span class="pln">y_test</span><span class="pun">,</span><span class="pln"> y_pred </span><span class="pun">,</span><span class="pln"> average</span><span class="pun">=</span><span class="str">'weighted'</span><span class="pun">)</span><span class="pln">
recall</span><span class="pun">=</span><span class="pln"> recall_score</span><span class="pun">(</span><span class="pln">y_test</span><span class="pun">,</span><span class="pln"> y_pred</span><span class="pun">,</span><span class="pln"> zero_division</span><span class="pun">=</span><span class="lit">1</span><span class="pun">,</span><span class="pln"> average</span><span class="pun">=</span><span class="str">'weighted'</span><span class="pun">)</span><span class="pln">
f1</span><span class="pun">=</span><span class="pln"> f1_score</span><span class="pun">(</span><span class="pln">y_test</span><span class="pun">,</span><span class="pln"> y_pred</span><span class="pun">,</span><span class="pln"> zero_division</span><span class="pun">=</span><span class="lit">1</span><span class="pun">,</span><span class="pln">  average</span><span class="pun">=</span><span class="str">'weighted'</span><span class="pun">)</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="str">'Model Accuracy on Test Data:'</span><span class="pun">,</span><span class="pln"> accuracy</span><span class="pun">*</span><span class="lit">100</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="str">'Model Precision on Test Data:'</span><span class="pun">,</span><span class="pln"> precision</span><span class="pun">*</span><span class="lit">100</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="str">'Model Recall on Test Data:'</span><span class="pun">,</span><span class="pln"> recall</span><span class="pun">*</span><span class="lit">100</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="str">'Model F1 on Test Data:'</span><span class="pun">,</span><span class="pln"> f1</span><span class="pun">*</span><span class="lit">100</span><span class="pun">)</span><span class="pln">

confusion_matrix</span><span class="pun">(</span><span class="pln">y_test</span><span class="pun">,</span><span class="pln"> y_pred</span><span class="pun">)</span></pre>

<p>
	تكون النتائج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8198_93" style="">
<span class="typ">Model</span><span class="pln"> </span><span class="typ">Accuracy</span><span class="pln"> on </span><span class="typ">Test</span><span class="pln"> </span><span class="typ">Data</span><span class="pun">:</span><span class="pln"> </span><span class="lit">90.90</span><span class="pln">
</span><span class="typ">Model</span><span class="pln"> </span><span class="typ">Precision</span><span class="pln"> on </span><span class="typ">Test</span><span class="pln"> </span><span class="typ">Data</span><span class="pun">:</span><span class="pln"> </span><span class="lit">90.88</span><span class="pln">
</span><span class="typ">Model</span><span class="pln"> </span><span class="typ">Recall</span><span class="pln"> on </span><span class="typ">Test</span><span class="pln"> </span><span class="typ">Data</span><span class="pun">:</span><span class="pln"> </span><span class="lit">90.90</span><span class="pln">
</span><span class="typ">Model</span><span class="pln"> F1 on </span><span class="typ">Test</span><span class="pln"> </span><span class="typ">Data</span><span class="pun">:</span><span class="pln"> </span><span class="lit">90.86</span><span class="pln">
array</span><span class="pun">([[</span><span class="pln"> </span><span class="lit">964</span><span class="pun">,</span><span class="pln">   </span><span class="lit">22</span><span class="pun">,</span><span class="pln">   </span><span class="lit">24</span><span class="pun">,</span><span class="pln">   </span><span class="lit">57</span><span class="pun">,</span><span class="pln">   </span><span class="lit">16</span><span class="pun">,</span><span class="pln">   </span><span class="lit">12</span><span class="pun">,</span><span class="pln">   </span><span class="lit">19</span><span class="pun">],</span><span class="pln">
       </span><span class="pun">[</span><span class="pln">  </span><span class="lit">18</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1029</span><span class="pun">,</span><span class="pln">   </span><span class="lit">26</span><span class="pun">,</span><span class="pln">   </span><span class="lit">20</span><span class="pun">,</span><span class="pln">   </span><span class="lit">15</span><span class="pun">,</span><span class="pln">    </span><span class="lit">9</span><span class="pun">,</span><span class="pln">    </span><span class="lit">8</span><span class="pun">],</span><span class="pln">
       </span><span class="pun">[</span><span class="pln">  </span><span class="lit">13</span><span class="pun">,</span><span class="pln">   </span><span class="lit">18</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1033</span><span class="pun">,</span><span class="pln">   </span><span class="lit">19</span><span class="pun">,</span><span class="pln">    </span><span class="lit">5</span><span class="pun">,</span><span class="pln">    </span><span class="lit">8</span><span class="pun">,</span><span class="pln">    </span><span class="lit">3</span><span class="pun">],</span><span class="pln">
       </span><span class="pun">[</span><span class="pln">  </span><span class="lit">45</span><span class="pun">,</span><span class="pln">   </span><span class="lit">19</span><span class="pun">,</span><span class="pln">   </span><span class="lit">52</span><span class="pun">,</span><span class="pln">  </span><span class="lit">871</span><span class="pun">,</span><span class="pln">   </span><span class="lit">59</span><span class="pun">,</span><span class="pln">   </span><span class="lit">12</span><span class="pun">,</span><span class="pln">   </span><span class="lit">10</span><span class="pun">],</span><span class="pln">
       </span><span class="pun">[</span><span class="pln">  </span><span class="lit">11</span><span class="pun">,</span><span class="pln">   </span><span class="lit">25</span><span class="pun">,</span><span class="pln">   </span><span class="lit">18</span><span class="pun">,</span><span class="pln">   </span><span class="lit">38</span><span class="pun">,</span><span class="pln">  </span><span class="lit">990</span><span class="pun">,</span><span class="pln">   </span><span class="lit">11</span><span class="pun">,</span><span class="pln">    </span><span class="lit">3</span><span class="pun">],</span><span class="pln">
       </span><span class="pun">[</span><span class="pln">   </span><span class="lit">3</span><span class="pun">,</span><span class="pln">   </span><span class="lit">10</span><span class="pun">,</span><span class="pln">   </span><span class="lit">13</span><span class="pun">,</span><span class="pln">    </span><span class="lit">3</span><span class="pun">,</span><span class="pln">   </span><span class="lit">15</span><span class="pun">,</span><span class="pln">  </span><span class="lit">986</span><span class="pun">,</span><span class="pln">    </span><span class="lit">3</span><span class="pun">],</span><span class="pln">
       </span><span class="pun">[</span><span class="pln">   </span><span class="lit">4</span><span class="pun">,</span><span class="pln">   </span><span class="lit">10</span><span class="pun">,</span><span class="pln">    </span><span class="lit">8</span><span class="pun">,</span><span class="pln">    </span><span class="lit">2</span><span class="pun">,</span><span class="pln">    </span><span class="lit">0</span><span class="pun">,</span><span class="pln">    </span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1063</span><span class="pun">]],</span><span class="pln"> dtype</span><span class="pun">=</span><span class="pln">int64</span><span class="pun">)</span></pre>

<p>
	لاحظ ارتفاع قيم جميع المقاييس مما يعني جودة المُصنف.
</p>

<p>
	يُمكن رسم مصفوفة الارتباك confusion matrix بشكل أوضح باستخدام المكتبة <code>seaborn</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8198_12" style="">
<span class="com"># رسم مصفوفة الارتباك</span><span class="pln">
</span><span class="kwd">import</span><span class="pln"> seaborn </span><span class="kwd">as</span><span class="pln"> sns
sns</span><span class="pun">.</span><span class="pln">set</span><span class="pun">(</span><span class="pln">style </span><span class="pun">=</span><span class="pln"> </span><span class="str">'whitegrid'</span><span class="pun">)</span><span class="pln">

fig</span><span class="pun">,</span><span class="pln"> ax </span><span class="pun">=</span><span class="pln"> plt</span><span class="pun">.</span><span class="pln">subplots</span><span class="pun">(</span><span class="pln">figsize </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="lit">8</span><span class="pun">,</span><span class="lit">6</span><span class="pun">))</span><span class="pln">
sns</span><span class="pun">.</span><span class="pln">heatmap</span><span class="pun">(</span><span class="pln">confusion_matrix</span><span class="pun">(</span><span class="pln">y_true </span><span class="pun">=</span><span class="pln"> y_test</span><span class="pun">,</span><span class="pln"> y_pred </span><span class="pun">=</span><span class="pln"> y_pred</span><span class="pun">),</span><span class="pln"> fmt </span><span class="pun">=</span><span class="pln"> </span><span class="str">'g'</span><span class="pun">,</span><span class="pln"> annot </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">True</span><span class="pun">)</span><span class="pln">
ax</span><span class="pun">.</span><span class="pln">xaxis</span><span class="pun">.</span><span class="pln">set_label_position</span><span class="pun">(</span><span class="str">'top'</span><span class="pun">)</span><span class="pln">
ax</span><span class="pun">.</span><span class="pln">xaxis</span><span class="pun">.</span><span class="pln">set_ticks_position</span><span class="pun">(</span><span class="str">'top'</span><span class="pun">)</span><span class="pln">
ax</span><span class="pun">.</span><span class="pln">set_xlabel</span><span class="pun">(</span><span class="str">'Prediction'</span><span class="pun">,</span><span class="pln"> fontsize </span><span class="pun">=</span><span class="pln"> </span><span class="lit">14</span><span class="pun">)</span><span class="pln">
ax</span><span class="pun">.</span><span class="pln">set_ylabel</span><span class="pun">(</span><span class="str">'Actual'</span><span class="pun">,</span><span class="pln"> fontsize </span><span class="pun">=</span><span class="pln"> </span><span class="lit">14</span><span class="pun">)</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">show</span><span class="pun">()</span></pre>

<p>
	مما يُظهر المخطط التالي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="102770" href="https://academy.hsoub.com/uploads/monthly_2022_07/007.png.4bb5632c51ae94830234ef0f91c7cb30.png" rel=""><img alt="007.png" class="ipsImage ipsImage_thumbnailed" data-fileid="102770" data-unique="46h6w8tfp" src="https://academy.hsoub.com/uploads/monthly_2022_07/007.thumb.png.bce53598cddf28cf8fab598a2f0ce940.png" style="width: 600px; height: auto;"></a>
</p>

<p>
	يُمكن حساب بعض مقاييس الأداء الأخرى المُستخدمة في حالة وجود أكثر من صف في المسألة (Micro, Macro, Weighted):
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8198_15" style="">
<span class="com"># مقاييس الأداء في حالة أكثر من صفين</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="str">'\nAccuracy: {:.2f}\n'</span><span class="pun">.</span><span class="pln">format</span><span class="pun">(</span><span class="pln">accuracy_score</span><span class="pun">(</span><span class="pln">y_test</span><span class="pun">,</span><span class="pln"> y_pred</span><span class="pun">)))</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="str">'Micro Precision: {:.2f}'</span><span class="pun">.</span><span class="pln">format</span><span class="pun">(</span><span class="pln">precision_score</span><span class="pun">(</span><span class="pln">y_test</span><span class="pun">,</span><span class="pln"> y_pred</span><span class="pun">,</span><span class="pln"> average</span><span class="pun">=</span><span class="str">'micro'</span><span class="pun">)))</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="str">'Micro Recall: {:.2f}'</span><span class="pun">.</span><span class="pln">format</span><span class="pun">(</span><span class="pln">recall_score</span><span class="pun">(</span><span class="pln">y_test</span><span class="pun">,</span><span class="pln"> y_pred</span><span class="pun">,</span><span class="pln"> average</span><span class="pun">=</span><span class="str">'micro'</span><span class="pun">)))</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="str">'Micro F1-score: {:.2f}\n'</span><span class="pun">.</span><span class="pln">format</span><span class="pun">(</span><span class="pln">f1_score</span><span class="pun">(</span><span class="pln">y_test</span><span class="pun">,</span><span class="pln"> y_pred</span><span class="pun">,</span><span class="pln"> average</span><span class="pun">=</span><span class="str">'micro'</span><span class="pun">)))</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="str">'Macro Precision: {:.2f}'</span><span class="pun">.</span><span class="pln">format</span><span class="pun">(</span><span class="pln">precision_score</span><span class="pun">(</span><span class="pln">y_test</span><span class="pun">,</span><span class="pln"> y_pred</span><span class="pun">,</span><span class="pln"> average</span><span class="pun">=</span><span class="str">'macro'</span><span class="pun">)))</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="str">'Macro Recall: {:.2f}'</span><span class="pun">.</span><span class="pln">format</span><span class="pun">(</span><span class="pln">recall_score</span><span class="pun">(</span><span class="pln">y_test</span><span class="pun">,</span><span class="pln"> y_pred</span><span class="pun">,</span><span class="pln"> average</span><span class="pun">=</span><span class="str">'macro'</span><span class="pun">)))</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="str">'Macro F1-score: {:.2f}\n'</span><span class="pun">.</span><span class="pln">format</span><span class="pun">(</span><span class="pln">f1_score</span><span class="pun">(</span><span class="pln">y_test</span><span class="pun">,</span><span class="pln"> y_pred</span><span class="pun">,</span><span class="pln"> average</span><span class="pun">=</span><span class="str">'macro'</span><span class="pun">)))</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="str">'Weighted Precision: {:.2f}'</span><span class="pun">.</span><span class="pln">format</span><span class="pun">(</span><span class="pln">precision_score</span><span class="pun">(</span><span class="pln">y_test</span><span class="pun">,</span><span class="pln"> y_pred</span><span class="pun">,</span><span class="pln"> average</span><span class="pun">=</span><span class="str">'weighted'</span><span class="pun">)))</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="str">'Weighted Recall: {:.2f}'</span><span class="pun">.</span><span class="pln">format</span><span class="pun">(</span><span class="pln">recall_score</span><span class="pun">(</span><span class="pln">y_test</span><span class="pun">,</span><span class="pln"> y_pred</span><span class="pun">,</span><span class="pln"> average</span><span class="pun">=</span><span class="str">'weighted'</span><span class="pun">)))</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="str">'Weighted F1-score: {:.2f}'</span><span class="pun">.</span><span class="pln">format</span><span class="pun">(</span><span class="pln">f1_score</span><span class="pun">(</span><span class="pln">y_test</span><span class="pun">,</span><span class="pln"> y_pred</span><span class="pun">,</span><span class="pln"> average</span><span class="pun">=</span><span class="str">'weighted'</span><span class="pun">)))</span><span class="pln">

</span><span class="com"># تقرير التصنيف</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">metrics </span><span class="kwd">import</span><span class="pln"> classification_report
</span><span class="kwd">print</span><span class="pun">(</span><span class="str">'\nClassification Report\n'</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">classification_report</span><span class="pun">(</span><span class="pln">y_test</span><span class="pun">,</span><span class="pln"> y_pred</span><span class="pun">,</span><span class="pln"> target_names</span><span class="pun">=</span><span class="pln">classes</span><span class="pun">))</span></pre>

<p>
	مما يُعطي الناتج التالي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="102772" href="https://academy.hsoub.com/uploads/monthly_2022_07/008.png.bd36a501f23396f15191b36140d9b721.png" rel=""><img alt="008.png" class="ipsImage ipsImage_thumbnailed" data-fileid="102772" data-unique="zh622nmhc" src="https://academy.hsoub.com/uploads/monthly_2022_07/008.thumb.png.1f1aa632ec9814902c97f66cb3e3e94e.png" style="width: 400px; height: auto;"></a>
</p>

<p>
	لاحظ ارتفاع جميع المقاييس مما يعني جودة المُصنف.
</p>

<h2 id="-">
	تصنيف الأشخاص
</h2>

<p>
	يُمكن الآن تصنيف الأشخاص وذلك وفق تصنيفات تغريداتهم.
</p>

<p>
	تقوم الشيفرة التالية بتصنيف تغريدة واحدة، فيكون دخل الدالة <code>classify_tweet</code> سلسلة نصية نضعها أولًا في متجهة تحوي النص. نستدعي دالة تحويل النص إلى أرقام <code>tokenizer.texts_to_sequences</code> ومن ثم توحيد طول المتجهة الرقمية الناتجة وذلك باستدعاء الدالة <code>pad_sequences</code>.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8198_21" style="">
<span class="com"># دالة تصنيف تغريدة</span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> classify_tweet</span><span class="pun">(</span><span class="pln">tweet</span><span class="pun">):</span><span class="pln">
    </span><span class="com"># تحويل شعاع الكلمات إلى جملة</span><span class="pln">
    tweet </span><span class="pun">=</span><span class="pln"> toSentence</span><span class="pun">(</span><span class="pln">tweet</span><span class="pun">)</span><span class="pln">
    </span><span class="com"># وضع الجملة في شعاع</span><span class="pln">
    ar</span><span class="pun">=[]</span><span class="pln">
    ar</span><span class="pun">.</span><span class="pln">append</span><span class="pun">(</span><span class="pln">tweet</span><span class="pun">)</span><span class="pln">
    </span><span class="com"># تحويل النص إلى قائمة من الأرقام</span><span class="pln">
    seq </span><span class="pun">=</span><span class="pln"> tokenizer</span><span class="pun">.</span><span class="pln">texts_to_sequences</span><span class="pun">(</span><span class="pln">ar</span><span class="pun">)</span><span class="pln">
    </span><span class="com"># توحيد طول المتجهة الرقمية</span><span class="pln">
    pseq </span><span class="pun">=</span><span class="pln"> pad_sequences</span><span class="pun">(</span><span class="pln">seq</span><span class="pun">,</span><span class="pln"> maxlen</span><span class="pun">=</span><span class="pln">max_len</span><span class="pun">)</span><span class="pln">
    </span><span class="com"># استدعاء دالة التنبؤ للنموذج</span><span class="pln">
    pred </span><span class="pun">=</span><span class="pln"> model</span><span class="pun">.</span><span class="pln">predict</span><span class="pun">(</span><span class="pln">pseq</span><span class="pun">)</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> pred</span></pre>

<p>
	تقوم الدالة <code>classify_person</code> بتصنيف شخص، ويكون معامل الدالة اسم الشخص (بفرض أن ملف تغريداته يحمل نفس الاسم مع اللاحقة csv)، إذ تعمل الدالة أولًا على تحميل تغريدات الشخص في إطار بيانات <code>df</code>.
</p>

<p>
	وأخيرًا تكون دالة تصنيف الشخص <code>classify_person</code> هي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8198_23" style="">
<span class="com"># دالة تصنيف الشخص</span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> classify_person</span><span class="pun">(</span><span class="pln">person_name</span><span class="pun">):</span><span class="pln">
    </span><span class="com"># تحميل تغريدات الشخص</span><span class="pln">
    </span><span class="com"># في إطار بيانات</span><span class="pln">
    path </span><span class="pun">=</span><span class="pln"> person_name </span><span class="pun">+</span><span class="pln"> </span><span class="str">'.csv'</span><span class="pln">
    df </span><span class="pun">=</span><span class="pln"> pd</span><span class="pun">.</span><span class="pln">read_csv</span><span class="pun">(</span><span class="pln">path</span><span class="pun">)</span><span class="pln">
    </span><span class="com"># إنشاء قاموس لعد</span><span class="pln">
    </span><span class="com"># التغريدات من كل صف</span><span class="pln">
    classes_count</span><span class="pun">=</span><span class="pln">dict</span><span class="pun">()</span><span class="pln">
    </span><span class="com"># إعطاء قيم ابتدائيه 0</span><span class="pln">
    </span><span class="kwd">for</span><span class="pln"> i </span><span class="kwd">in</span><span class="pln"> range</span><span class="pun">(</span><span class="pln">len</span><span class="pun">(</span><span class="pln">classes</span><span class="pun">)):</span><span class="pln">
        key</span><span class="pun">=</span><span class="pln">classes</span><span class="pun">[</span><span class="pln">i</span><span class="pun">]</span><span class="pln">
        classes_count</span><span class="pun">[</span><span class="pln">key</span><span class="pun">]=</span><span class="lit">0</span><span class="pln">
    </span><span class="com"># الحد الأدنى لطول التغريدة</span><span class="pln">
    min_tweet_len</span><span class="pun">=</span><span class="lit">5</span><span class="pln">

    total</span><span class="pun">=</span><span class="lit">0</span><span class="pln">
    </span><span class="kwd">for</span><span class="pln"> _</span><span class="pun">,</span><span class="pln"> row </span><span class="kwd">in</span><span class="pln"> df</span><span class="pun">.</span><span class="pln">iterrows</span><span class="pun">():</span><span class="pln">
        tweet</span><span class="pun">=</span><span class="pln">row</span><span class="pun">[</span><span class="str">'tweet'</span><span class="pun">]</span><span class="pln">
        </span><span class="com"># تنظيف التغريدة</span><span class="pln">
        processed_tweet</span><span class="pun">=</span><span class="pln">process_tweet</span><span class="pun">(</span><span class="pln">tweet</span><span class="pun">)</span><span class="pln">
        </span><span class="kwd">if</span><span class="pln"> len</span><span class="pun">(</span><span class="pln">processed_tweet</span><span class="pun">)&gt;</span><span class="pln">min_tweet_len</span><span class="pun">:</span><span class="pln">
          </span><span class="com"># تصنيف التغريدة</span><span class="pln">
          c</span><span class="pun">=</span><span class="pln"> classify_tweet</span><span class="pun">(</span><span class="pln">processed_tweet</span><span class="pun">)</span><span class="pln">
          </span><span class="com"># إيجاد اسم الصف من رمزه</span><span class="pln">
          topic</span><span class="pun">=</span><span class="pln">le_topics</span><span class="pun">.</span><span class="pln">inverse_transform</span><span class="pun">(</span><span class="pln">c</span><span class="pun">)[</span><span class="lit">0</span><span class="pun">]</span><span class="pln">
          </span><span class="com"># إضافة 1 للصف الموافق</span><span class="pln">
          classes_count</span><span class="pun">[</span><span class="pln">topic</span><span class="pun">]=</span><span class="pln">classes_count</span><span class="pun">[</span><span class="pln">topic</span><span class="pun">]+</span><span class="lit">1</span><span class="pln">
          total</span><span class="pun">=</span><span class="pln">total</span><span class="pun">+</span><span class="lit">1</span><span class="pln">

    </span><span class="com"># ترتيب الصفوف وفق العدد</span><span class="pln">
    </span><span class="com"># تنازلياً</span><span class="pln">

    sorted_classes </span><span class="pun">=</span><span class="pln"> sorted</span><span class="pun">(</span><span class="pln">classes_count</span><span class="pun">,</span><span class="pln"> key</span><span class="pun">=</span><span class="pln">classes_count</span><span class="pun">.</span><span class="pln">get</span><span class="pun">,</span><span class="pln">reverse</span><span class="pun">=</span><span class="kwd">True</span><span class="pun">)</span><span class="pln">  

    </span><span class="com"># القاموس النهائي</span><span class="pln">
    sorted_classes_cleaned </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{}</span><span class="pln">
    min_display</span><span class="pun">=</span><span class="pln">total</span><span class="pun">/</span><span class="lit">25</span><span class="pln">
    </span><span class="com"># إهمال الصفوف ذات العدد الصغير</span><span class="pln">
    </span><span class="kwd">for</span><span class="pln"> w </span><span class="kwd">in</span><span class="pln"> sorted_classes</span><span class="pun">:</span><span class="pln">
      </span><span class="kwd">if</span><span class="pln"> classes_count</span><span class="pun">[</span><span class="pln">w</span><span class="pun">]&gt;</span><span class="pln">min_display</span><span class="pun">:</span><span class="pln">
        sorted_classes_cleaned</span><span class="pun">[</span><span class="pln">w</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> classes_count</span><span class="pun">[</span><span class="pln">w</span><span class="pun">]</span><span class="pln">

    </span><span class="com"># طباعة النتائج</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="pln">sorted_classes_cleaned</span><span class="pun">)</span><span class="pln"> 
    n</span><span class="pun">=</span><span class="lit">0</span><span class="pln">
    </span><span class="kwd">for</span><span class="pln"> key</span><span class="pun">,</span><span class="pln"> value </span><span class="kwd">in</span><span class="pln"> sorted_classes_cleaned</span><span class="pun">.</span><span class="pln">items</span><span class="pun">():</span><span class="pln">
      n</span><span class="pun">=</span><span class="pln">n</span><span class="pun">+</span><span class="pln">value

    </span><span class="kwd">print</span><span class="pun">(</span><span class="pln">person_name</span><span class="pun">,</span><span class="pln"> </span><span class="str">"is classified as :"</span><span class="pun">)</span><span class="pln">
    </span><span class="kwd">for</span><span class="pln"> key</span><span class="pun">,</span><span class="pln"> value </span><span class="kwd">in</span><span class="pln"> sorted_classes_cleaned</span><span class="pun">.</span><span class="pln">items</span><span class="pun">():</span><span class="pln">  
      </span><span class="kwd">print</span><span class="pun">(</span><span class="pln">key</span><span class="pun">,</span><span class="pln"> </span><span class="str">"("</span><span class="pun">,</span><span class="pln"> </span><span class="str">"{:.2f}"</span><span class="pun">.</span><span class="pln">format</span><span class="pun">((</span><span class="pln">value</span><span class="pun">/</span><span class="pln">n</span><span class="pun">)*</span><span class="lit">100</span><span class="pun">)</span><span class="pln"> </span><span class="pun">,</span><span class="pln"> </span><span class="str">"%)"</span><span class="pun">)</span><span class="pln">

    </span><span class="com"># رسم فطيرة أعداد الصفوف</span><span class="pln">
    x </span><span class="pun">=</span><span class="pln"> sorted_classes_cleaned</span><span class="pun">.</span><span class="pln">keys</span><span class="pun">()</span><span class="pln">
    y </span><span class="pun">=</span><span class="pln"> sorted_classes_cleaned</span><span class="pun">.</span><span class="pln">values</span><span class="pun">()</span><span class="pln">

    </span><span class="kwd">import</span><span class="pln"> matplotlib</span><span class="pun">.</span><span class="pln">pyplot </span><span class="kwd">as</span><span class="pln"> plt
    </span><span class="com"># pie</span><span class="pln">
    plt</span><span class="pun">.</span><span class="pln">figure</span><span class="pun">(</span><span class="pln">figsize</span><span class="pun">=(</span><span class="lit">9</span><span class="pun">,</span><span class="lit">9</span><span class="pun">));</span><span class="pln">
    plt</span><span class="pun">.</span><span class="pln">title</span><span class="pun">(</span><span class="pln">person_name</span><span class="pun">,</span><span class="pln"> fontdict </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="str">'fontsize'</span><span class="pun">:</span><span class="lit">20</span><span class="pun">})</span><span class="pln">
    plt</span><span class="pun">.</span><span class="pln">pie</span><span class="pun">(</span><span class="pln">y</span><span class="pun">,</span><span class="pln"> labels </span><span class="pun">=</span><span class="pln"> x</span><span class="pun">,</span><span class="pln">autopct</span><span class="pun">=</span><span class="str">'%1.1f%%'</span><span class="pun">)</span><span class="pln">
    plt</span><span class="pun">.</span><span class="pln">show</span><span class="pun">()</span><span class="pln">
</span><span class="com"># مثال</span><span class="pln">
classify_person</span><span class="pun">(</span><span class="str">"salem"</span><span class="pun">)</span></pre>

<p>
	نجد من الشيفرة السابقة، تُنشئ الدالة القاموس <code>classes_count</code> والذي يكون مفتاحه اسم الصف وقيمته ستكون عدد التغريدات من هذا الصف (تُعطي أولًا قيمة ابتدائية 0 لكل قيم القاموس).
</p>

<p>
	يُحدّد المتغير <code>min_tweet_len</code> الطول الأدنى للتغريدة لتؤخذ بعين الاعتبار (لا تحمل التغريدات الصغيرة جدًا معاني بل تكون على الأغلب عبارات مجاملة وترحيب).
</p>

<p>
	تدور الدالة على تغريدات الشخص وتستدعي من أجل كل تغريدة دالة المعالجة الأولية للتغريدة <code>process_tweet</code> ثم دالة التصنيف السابقة <code>classify_tweet</code>.
</p>

<p>
	يكون ناتج التصنيف رقم (ترميز الصف) ولذا تستدعي الدالة <code>inverse_transform</code> للحصول على اسم الصف ثم نزيد عدد الصف الموافق في القاموس بـ 1.
</p>

<p>
	يحسب المتغير <code>total</code> العدد الكلي للتغريدات التي تم أخذها بعين الاعتبار، وتُستخدم الدالة المتغير <code>sorted</code> لترتيب القاموس تنازليا (المعامل reverse=True) وفق العدد.
</p>

<p>
	نضع في المتغير <code>min_display</code> مثلًا القيمة total/25 وذلك بهدف عدم إظهار صفوف الشخص قليلة التواتر في تغريداته، ونضع أخيرًا في القاموس <code>sorted_classes_cleaned</code> الصفوف الأكثر تواترًا ونطبع النتائج ونرسم فطيرة تُمثل النسب المئوية لتغريدات الشخص.
</p>

<p>
	تكون النتائج مثلًا:
</p>

<p style="text-align: center;">
	<img alt="009.png" class="ipsImage ipsImage_thumbnailed" data-fileid="102774" data-unique="p9qpyosgr" src="https://academy.hsoub.com/uploads/monthly_2022_07/009.png.db37788c96260ea7b6247f091666a5d8.png" style="width: 400px; height: auto;"></p>

<h2 id="-">
	الخلاصة
</h2>

<p>
	عرضنا في هذه المقالة خطوات بناء نموذج تعلّم لتصنيف الأشخاص وفق تغريداتهم.
</p>

<p>
	يُمكن تجربة المثال كاملًا من موقع Google Colab من <a href="https://colab.research.google.com/drive/1OEUxkUXUEqfkoW2JLriPQPT0t0ZAFV6b" rel="external nofollow">الرابط</a> أو من الملف المرفق <a data-fileid="110320" href="https://academy.hsoub.com/applications/core/interface/file/attachment.php?id=110320" rel="">data.zip</a>.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AA%D8%AD%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D9%85%D8%B4%D8%A7%D8%B9%D8%B1-%D9%81%D9%8A-%D8%A7%D9%84%D9%86%D8%B5%D9%88%D8%B5-%D8%A7%D9%84%D8%B9%D8%B1%D8%A8%D9%8A%D8%A9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%B9%D9%85%D9%8A%D9%82-r1476/" rel="">تحليل المشاعر في النصوص العربية باستخدام التعلم العميق</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-%D9%84%D9%81%D9%87%D9%85-%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%B9%D9%85%D9%8A%D9%82-r1422/" rel="">دليل المبتدئين لفهم أساسيات التعلم العميق</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AE%D8%B7%D9%88%D8%A7%D8%AA-%D8%AA%D9%86%D9%81%D9%8A%D8%B0-%D9%85%D8%B4%D8%B1%D9%88%D8%B9-%D8%B9%D9%86-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-%D8%A7%D9%84%D8%AC%D8%B2%D8%A1-%D8%A7%D9%84%D8%A3%D9%88%D9%84-r1357/" rel="">خطوات تنفيذ مشروع عن تعلم الآلة في بايثون: الجزء الأول</a>
	</li>
</ul>
<p>
	<a class="ipsAttachLink" data-fileid="110320" href="https://academy.hsoub.com/applications/core/interface/file/attachment.php?id=110320" rel="">data.zip</a>
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">1630</guid><pubDate>Fri, 29 Jul 2022 16:05:00 +0000</pubDate></item><item><title>&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; &#x62E;&#x648;&#x627;&#x631;&#x632;&#x645;&#x64A;&#x627;&#x62A; &#x627;&#x644;&#x639;&#x646;&#x642;&#x62F;&#x629; &#x644;&#x62A;&#x62C;&#x632;&#x626;&#x629; &#x639;&#x645;&#x644;&#x627;&#x621; &#x645;&#x62A;&#x62C;&#x631; &#x625;&#x644;&#x643;&#x62A;&#x631;&#x648;&#x646;&#x64A;</title><link>https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AE%D9%88%D8%A7%D8%B1%D8%B2%D9%85%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%B9%D9%86%D9%82%D8%AF%D8%A9-%D9%84%D8%AA%D8%AC%D8%B2%D8%A6%D8%A9-%D8%B9%D9%85%D9%84%D8%A7%D8%A1-%D9%85%D8%AA%D8%AC%D8%B1-%D8%A5%D9%84%D9%83%D8%AA%D8%B1%D9%88%D9%86%D9%8A-r1477/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_02/620a0e03e53c5_.png.f762e457b01d978ddaab7034750729df.png" /></p>
<p>
	تُعدّ مسألة تصنيف العملاء أي تجزئتهم إلى مجموعات متشابهة في سلوكها (<a href="https://academy.hsoub.com/entrepreneurship/ecommerce/%D9%85%D8%B1%D8%A7%D8%AD%D9%84-%D8%B9%D9%85%D9%84%D9%8A%D8%A9-%D8%A7%D9%84%D8%B4%D8%B1%D8%A7%D8%A1-%D9%85%D8%A7-%D9%82%D8%A8%D9%84-%D8%A7%D8%AA%D8%AE%D8%A7%D8%B0-%D9%82%D8%B1%D8%A7%D8%B1-%D8%A7%D9%84%D8%B4%D8%B1%D8%A7%D8%A1-r775/" rel="">عمليات الشراء والتسوق</a>) من المسائل الهامة في <a href="https://academy.hsoub.com/marketing/core-concepts-of-marketing/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%AA%D8%B3%D9%88%D9%8A%D9%82-r417/" rel="">عالم التسويق</a> وذلك بهدف <a href="https://academy.hsoub.com/marketing/performance-marketing/%d8%af%d9%84%d9%8a%d9%84%d9%83-%d8%ae%d8%b7%d9%88%d8%a9-%d8%a8%d8%ae%d8%b7%d9%88%d8%a9-%d9%84%d8%b9%d9%85%d9%84-%d8%ad%d9%85%d9%84%d8%a9-%d8%aa%d8%b3%d9%88%d9%8a%d9%82%d9%8a%d8%a9-%d9%86%d8%a7%d8%ac%d8%ad%d8%a9-9-%d8%a3%d8%af%d9%88%d8%a7%d8%aa-%d8%aa%d8%b3%d8%a7%d8%b9%d8%af%d9%83-%d9%81%d9%8a-%d8%b0%d9%84%d9%83-r91/" rel="">إعداد حملات تسويقية</a> مختلفة مناسبة لكل مجموعة من المجموعات المُستهدفة.
</p>

<p>
	سنعرض في هذه المقالة استخدام خوارزميات العنقدة Clustering لاستكشاف مجموعات العملاء أو الزبائن المختلفة، ويُمكن تنزيل بيانات التدريب والشيفرة البرمجية من <a data-fileid="91930" href="https://academy.hsoub.com/applications/core/interface/file/attachment.php?id=91930" rel="" data-fileext="zip">الملف المضغوط</a> (والذي تجده أيضًا بنهاية المقال)، لتتمكن من فهم المحتوى أكثر.
</p>

<p>
	نستخدم في هذه المقالة التعليمية مجموعة بيانات حول 200 زبون تتألف من عمودين:
</p>

<ul>
	<li>
		الدخل السنوي للزبون بآلاف الدولارات Annual Income.
	</li>
	<li>
		تقييم الزبون Spending Score وهو رقم يتراوح بين 1 و 100 ويعكس مدى ولاء الزبون للمتجر والمبالغ التي أنفقها في الشراء منه (100 يعني الزبون الأكثر انفاقًا).
	</li>
</ul>

<p>
	يُمكن تنزيل هذه البيانات المتاحة على <a href="https://www.kaggle.com/roshansharma/mall-customers-clustering-analysis" rel="external nofollow">موقع Kaggle</a> أو من <a data-fileid="91930" href="https://academy.hsoub.com/applications/core/interface/file/attachment.php?id=91930" rel="" data-fileext="zip">الرابط هنا</a>.
</p>

<h2>
	ما هي العنقدة Clustering
</h2>

<p>
	العنقدة هي عملية تجزئة (تقسيم) مجموعة من البيانات إلى عناقيد clusters (مجموعات) وبحيث تكون العناصر الموجودة في عنقود واحد متشابهة فيما بينها وأقل تشابهًا مع عناصر العناقيد الأخرى.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="91915" href="https://academy.hsoub.com/uploads/monthly_2022_02/001.png.8f578259abee13d045416fb69bd30008.png" rel="" data-fileext="png"><img alt="001.png" class="ipsImage ipsImage_thumbnailed" data-fileid="91915" data-unique="0lerq2naa" src="https://academy.hsoub.com/uploads/monthly_2022_02/001.png.8f578259abee13d045416fb69bd30008.png"></a>
</p>

<p>
	تندرج خوارزميات العنقدة ضمن خوارزميات <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D9%85%D9%81%D8%A7%D9%87%D9%8A%D9%85-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-r1009/" rel="">التعلم الآلي</a> المدعوة "ليست تحت الإشراف" unsupervised بمعنى أن البيانات المُقدّمة في البداية لا تحوي أي تسميات labels أو تصنيفات بشكل مُسبق. سنرى مثًلا أن مسألة تحديد عدد العناقيد هو مسألة مهمة يجب الاعتناء بها إذ لا نعرف مُسبقًا ما هو عدد العناقيد الأمثلي.
</p>

<p>
	نعرض في هذه المقالة نوعين أساسيين من خوارزميات العنقدة:
</p>

<ul>
	<li>
		خوارزميات التجزئة Partitioning: تبدأ هذه <a href="https://academy.hsoub.com/programming/advanced/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AE%D9%88%D8%A7%D8%B1%D8%B2%D9%85%D9%8A%D8%A7%D8%AA-r1282/" rel="">الخوارزميات</a> بتجزئة عناصر البيانات إلى k عنقود (مختارة بشكل عشوائي) ومن ثم تُكرر تعديل هذه المجموعات وصولًا إلى حل جيد. من أشهر هذه الخوارزميات الخوارزمية المدعوة k-means (أي k وسطي).
	</li>
	<li>
		الخوارزميات التكتلية Agglomerative: تبني هذه الخوارزمية هرمية من العناقيد حيث تبدأ بوضع كل عنصر من عناصر البيانات في عنقود مستقل ثم تكرر دمج العناقيد المتشابهة وصولًا إلى عنقود واحد في نهاية المطاف.
	</li>
</ul>

<h2>
	الخوارزمية K-Means
</h2>

<p>
	تُعدّ الخوارزمية K-Means من أشهر وأبسط خوارزميات العنقدة بالتجزئة:
</p>

<p>
	<strong>دخل الخوارزمية:</strong>
</p>

<ul>
	<li>
		عدد العناقيد المطلوب k
	</li>
	<li>
		بيانات التدريب وهي عبارة عن مجموعة من العناصر (أشعة رقمية): {x1, x2, . . . , xN} حيث xi هو شعاع من الأرقام.
	</li>
</ul>

<p>
	<strong>خرج الخوارزمية:</strong>
</p>

<ul>
	<li>
		تُسندّ الخوارزمية كل عنصر من عناصر الدخل إلى أحد العناقيد (التي عددها k).
	</li>
</ul>

<p>
	<strong>المعالجة:</strong>
</p>

<ul>
	<li>
		تختار الخوارزمية أولًا k شعاع من أشعة الدخل بشكل عشوائي كمراكز العناقيد.
	</li>
	<li>
		تُكرر الخوارزمية ما يلي وصولًا إلى التقارب:
	</li>
	<li>
		إسناد كل شعاع من أشعة الدخل إلى المركز الأقرب
	</li>
	<li>
		حساب المركز الجديد لكل عنقود
	</li>
</ul>

<p>
	يعني التقارب عدم انتقال أي شعاع من عنقوده الحالي الموضوع فيه إلى عنقود آخر.
</p>

<p>
	يُبين الشكل التالي المراحل الأساسية للخوارزمية:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="91916" href="https://academy.hsoub.com/uploads/monthly_2022_02/002.png.bed9b71624b9dcf7673cc0e89fcd492f.png" rel="" data-fileext="png"><img alt="002.png" class="ipsImage ipsImage_thumbnailed" data-fileid="91916" data-unique="nh87m2hnk" style="width: 800px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_02/002.thumb.png.fff43802f914c31a727f94f5dafe38a3.png"></a>
</p>

<p>
	لفهم مراحل الخوارزمية نعرض أولًا خطوات تنفيذها على المثال التعليمي التالي:
</p>

<p>
	ليكن لدينا مجموعة العناصر العشرة التالية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7327_18" style=""><span class="pln">D </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="pun">(</span><span class="lit">5</span><span class="pun">,</span><span class="lit">3</span><span class="pun">),</span><span class="pln"> </span><span class="pun">(</span><span class="lit">10</span><span class="pun">,</span><span class="lit">15</span><span class="pun">),</span><span class="pln"> </span><span class="pun">(</span><span class="lit">15</span><span class="pun">,</span><span class="lit">12</span><span class="pun">),</span><span class="pln"> </span><span class="pun">(</span><span class="lit">24</span><span class="pun">,</span><span class="lit">10</span><span class="pun">),</span><span class="pln"> </span><span class="pun">(</span><span class="lit">30</span><span class="pun">,</span><span class="lit">45</span><span class="pun">),</span><span class="pln"> </span><span class="pun">(</span><span class="lit">85</span><span class="pun">,</span><span class="lit">70</span><span class="pun">),</span><span class="pln"> </span><span class="pun">(</span><span class="lit">71</span><span class="pun">,</span><span class="lit">80</span><span class="pun">),</span><span class="pln"> </span><span class="pun">(</span><span class="lit">60</span><span class="pun">,</span><span class="lit">78</span><span class="pun">),</span><span class="pln"> </span><span class="pun">(</span><span class="lit">55</span><span class="pun">,</span><span class="lit">52</span><span class="pun">),</span><span class="pln"> </span><span class="pun">(</span><span class="lit">80</span><span class="pun">,</span><span class="lit">91</span><span class="pun">)</span><span class="pln"> </span><span class="pun">}</span></pre>

<p>
	وبفرض أننا نريد تقسيمها إلى عنقودين (k=2).
</p>

<p>
	لنختار مثلًا العنصر الأول كمركز للعنقود الأول والعنصر الثاني مركزًا للعنقود الثاني أي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7327_20" style=""><span class="pln">c1</span><span class="pun">(</span><span class="pln">x</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">5</span><span class="pun">,</span><span class="pln"> c1</span><span class="pun">(</span><span class="pln">y</span><span class="pun">)=</span><span class="lit">3</span><span class="pln">

c2</span><span class="pun">(</span><span class="pln">x</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">10</span><span class="pln"> </span><span class="pun">,</span><span class="pln"> c2</span><span class="pun">(</span><span class="pln">y</span><span class="pun">)=</span><span class="lit">15</span></pre>

<p>
	نحسب الآن بُعد (<a href="https://ar.wikipedia.org/wiki/%D9%85%D8%B3%D8%A7%D9%81%D8%A9_%D8%A5%D9%82%D9%84%D9%8A%D8%AF%D9%8A%D8%A9" rel="external nofollow">المسافة الإقليدية</a> euclidean distance) كل عنصر من عناصر البيانات عن كل من المركزين ونُسند العنصر إلى المركز الأقرب. يكون لدينا:
</p>
<style type="text/css">
table {
    width: 100%;
}

thead {
    vertical-align: middle;
    text-align: center;
} 

td, th {
    border: 1px solid #dddddd;
    text-align: right;
    padding: 8px;
    text-align: inherit;

}
tr:nth-child(even) {
    background-color: #dddddd;
}</style>
<table>
	<thead>
		<tr>
			<th>
				رقم
			</th>
			<th>
				العنصر
			</th>
			<th>
				المسافة الإقليدية عن المركز الأول
			</th>
			<th>
				المسافة الإقليدية عن المركز الثاني
			</th>
			<th>
				العنقود المُسند إليه
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>
				1
			</td>
			<td>
				(5,3)
			</td>
			<td>
				0
			</td>
			<td>
				13
			</td>
			<td>
				C1
			</td>
		</tr>
		<tr>
			<td>
				2
			</td>
			<td>
				(10,15)
			</td>
			<td>
				13
			</td>
			<td>
				0
			</td>
			<td>
				C2
			</td>
		</tr>
		<tr>
			<td>
				3
			</td>
			<td>
				(15,12)
			</td>
			<td>
				13.45
			</td>
			<td>
				5.83
			</td>
			<td>
				C2
			</td>
		</tr>
		<tr>
			<td>
				4
			</td>
			<td>
				(24,10)
			</td>
			<td>
				20.24
			</td>
			<td>
				14.86
			</td>
			<td>
				C2
			</td>
		</tr>
		<tr>
			<td>
				5
			</td>
			<td>
				(30,45)
			</td>
			<td>
				48.87
			</td>
			<td>
				36
			</td>
			<td>
				C2
			</td>
		</tr>
		<tr>
			<td>
				6
			</td>
			<td>
				(85,70)
			</td>
			<td>
				104.35
			</td>
			<td>
				93
			</td>
			<td>
				C2
			</td>
		</tr>
		<tr>
			<td>
				7
			</td>
			<td>
				(71,80)
			</td>
			<td>
				101.41
			</td>
			<td>
				89
			</td>
			<td>
				C2
			</td>
		</tr>
		<tr>
			<td>
				8
			</td>
			<td>
				(60,78)
			</td>
			<td>
				93
			</td>
			<td>
				80
			</td>
			<td>
				C2
			</td>
		</tr>
		<tr>
			<td>
				9
			</td>
			<td>
				(55,52)
			</td>
			<td>
				70
			</td>
			<td>
				58
			</td>
			<td>
				C2
			</td>
		</tr>
		<tr>
			<td>
				10
			</td>
			<td>
				(80,91)
			</td>
			<td>
				115.52
			</td>
			<td>
				103.32
			</td>
			<td>
				C2
			</td>
		</tr>
	</tbody>
</table>

<p>
	نحسب الآن مركزي العنقودين فنحصل على:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7327_22" style=""><span class="pln">c1</span><span class="pun">(</span><span class="pln">x</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">5</span><span class="pun">,</span><span class="pln"> c1</span><span class="pun">(</span><span class="pln">y</span><span class="pun">)=</span><span class="lit">3</span><span class="pln">

c2</span><span class="pun">(</span><span class="pln">x</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="lit">10</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">15</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">24</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">30</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">85</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">71</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">60</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">55</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">80</span><span class="pun">)</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">9</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">47.77</span><span class="pln">

c2</span><span class="pun">(</span><span class="pln">y</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="lit">15</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">12</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">10</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">45</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">70</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">80</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">78</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">52</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">91</span><span class="pun">)</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">9</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">50.33</span></pre>

<p>
	نُعيد العملية لنحصل على:
</p>

<table>
	<thead>
		<tr>
			<th>
				رقم
			</th>
			<th>
				العنصر
			</th>
			<th>
				المسافة الإقليدية عن المركز الأول
			</th>
			<th>
				المسافة الإقليدية عن المركز الثاني
			</th>
			<th>
				العنقود المُسند إليه
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>
				1
			</td>
			<td>
				(5,3)
			</td>
			<td>
				0
			</td>
			<td>
				63.79
			</td>
			<td>
				C1
			</td>
		</tr>
		<tr>
			<td>
				2
			</td>
			<td>
				(10,15)
			</td>
			<td>
				13
			</td>
			<td>
				51.71
			</td>
			<td>
				C1
			</td>
		</tr>
		<tr>
			<td>
				3
			</td>
			<td>
				(15,12)
			</td>
			<td>
				13.45
			</td>
			<td>
				50.42
			</td>
			<td>
				C1
			</td>
		</tr>
		<tr>
			<td>
				4
			</td>
			<td>
				(24,10)
			</td>
			<td>
				20.24
			</td>
			<td>
				46.81
			</td>
			<td>
				C1
			</td>
		</tr>
		<tr>
			<td>
				5
			</td>
			<td>
				(30,45)
			</td>
			<td>
				48.87
			</td>
			<td>
				18.55
			</td>
			<td>
				C2
			</td>
		</tr>
		<tr>
			<td>
				6
			</td>
			<td>
				(85,70)
			</td>
			<td>
				104.35
			</td>
			<td>
				42.1
			</td>
			<td>
				C2
			</td>
		</tr>
		<tr>
			<td>
				7
			</td>
			<td>
				(71,80)
			</td>
			<td>
				101.41
			</td>
			<td>
				37.68
			</td>
			<td>
				C2
			</td>
		</tr>
		<tr>
			<td>
				8
			</td>
			<td>
				(60,78)
			</td>
			<td>
				93
			</td>
			<td>
				30.25
			</td>
			<td>
				C2
			</td>
		</tr>
		<tr>
			<td>
				9
			</td>
			<td>
				(55,52)
			</td>
			<td>
				70
			</td>
			<td>
				7.42
			</td>
			<td>
				C2
			</td>
		</tr>
		<tr>
			<td>
				10
			</td>
			<td>
				(80,91)
			</td>
			<td>
				115.52
			</td>
			<td>
				51.89
			</td>
			<td>
				C2
			</td>
		</tr>
	</tbody>
</table>

<p>
	نحسب الآن مركزي العنقودين الجديدين فنحصل على:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7327_24" style=""><span class="pln">c1</span><span class="pun">(</span><span class="pln">x</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="lit">5</span><span class="pun">,</span><span class="pln"> </span><span class="lit">10</span><span class="pun">,</span><span class="pln"> </span><span class="lit">15</span><span class="pun">,</span><span class="pln"> </span><span class="lit">24</span><span class="pun">)</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">13.5</span><span class="pln"> 

c1</span><span class="pun">(</span><span class="pln">y</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="lit">3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">15</span><span class="pun">,</span><span class="pln"> </span><span class="lit">12</span><span class="pun">,</span><span class="pln"> </span><span class="lit">10</span><span class="pun">)</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">10.0</span><span class="pln">

c2</span><span class="pun">(</span><span class="pln">x</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="lit">30</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">85</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">71</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">60</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">55</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">80</span><span class="pun">)</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">6</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">63.5</span><span class="pln"> 

c2</span><span class="pun">(</span><span class="pln">y</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="lit">45</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">70</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">80</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">78</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">52</span><span class="pln"> </span><span class="pun">+</span><span class="lit">91</span><span class="pun">)</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">6</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">69.33</span></pre>

<p>
	نُعيد العملية مرة أخرى لنحصل على:
</p>

<table>
	<thead>
		<tr>
			<th>
				رقم
			</th>
			<th>
				العنصر
			</th>
			<th>
				المسافة الإقليدية عن المركز الأول
			</th>
			<th>
				المسافة الإقليدية عن المركز الثاني
			</th>
			<th>
				العنقود المُسند إليه
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>
				1
			</td>
			<td>
				(5,3)
			</td>
			<td>
				11.01
			</td>
			<td>
				88.44
			</td>
			<td>
				C1
			</td>
		</tr>
		<tr>
			<td>
				2
			</td>
			<td>
				(10,15)
			</td>
			<td>
				6.1
			</td>
			<td>
				76.24
			</td>
			<td>
				C1
			</td>
		</tr>
		<tr>
			<td>
				3
			</td>
			<td>
				(15,12)
			</td>
			<td>
				2.5
			</td>
			<td>
				75.09
			</td>
			<td>
				C1
			</td>
		</tr>
		<tr>
			<td>
				4
			</td>
			<td>
				(24,10)
			</td>
			<td>
				10.5
			</td>
			<td>
				71.27
			</td>
			<td>
				C1
			</td>
		</tr>
		<tr>
			<td>
				5
			</td>
			<td>
				(30,45)
			</td>
			<td>
				38.69
			</td>
			<td>
				41.4
			</td>
			<td>
				C1
			</td>
		</tr>
		<tr>
			<td>
				6
			</td>
			<td>
				(85,70)
			</td>
			<td>
				93.33
			</td>
			<td>
				21.51
			</td>
			<td>
				C2
			</td>
		</tr>
		<tr>
			<td>
				7
			</td>
			<td>
				(71,80)
			</td>
			<td>
				90.58
			</td>
			<td>
				13.04
			</td>
			<td>
				C2
			</td>
		</tr>
		<tr>
			<td>
				8
			</td>
			<td>
				(60,78)
			</td>
			<td>
				82.37
			</td>
			<td>
				9.34
			</td>
			<td>
				C2
			</td>
		</tr>
		<tr>
			<td>
				9
			</td>
			<td>
				(55,52)
			</td>
			<td>
				59.04
			</td>
			<td>
				19.3
			</td>
			<td>
				C2
			</td>
		</tr>
		<tr>
			<td>
				10
			</td>
			<td>
				(80,91)
			</td>
			<td>
				104.8
			</td>
			<td>
				27.23
			</td>
			<td>
				C2
			</td>
		</tr>
	</tbody>
</table>

<p>
	نحسب الآن مركزي العنقودين الجديدين فنحصل على:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7327_26" style=""><span class="pln">c1</span><span class="pun">(</span><span class="pln">x</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="lit">5</span><span class="pun">,</span><span class="pln"> </span><span class="lit">10</span><span class="pun">,</span><span class="pln"> </span><span class="lit">15</span><span class="pun">,</span><span class="pln"> </span><span class="lit">24</span><span class="pun">,</span><span class="pln"> </span><span class="lit">30</span><span class="pun">)</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">5</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">16.8</span><span class="pln"> 

c1</span><span class="pun">(</span><span class="pln">y</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="lit">3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">15</span><span class="pun">,</span><span class="pln"> </span><span class="lit">12</span><span class="pun">,</span><span class="pln"> </span><span class="lit">10</span><span class="pun">,</span><span class="pln"> </span><span class="lit">45</span><span class="pun">)</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">5</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">17.0</span><span class="pln">

c2</span><span class="pun">(</span><span class="pln">x</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="lit">85</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">71</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">60</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">55</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">80</span><span class="pun">)</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">5</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">70.2</span><span class="pln"> 

c2</span><span class="pun">(</span><span class="pln">y</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="lit">70</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">80</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">78</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">52</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">91</span><span class="pun">)</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">5</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">74.2</span></pre>

<p>
	نُعيد العملية فلا يتغير إسناد أي عنصر مما يعني التقارب وثبات المراكز والعناقيد clusters.
</p>
<div class="banner-container ipsBox ipsPadding">
    <div class="inner-banner-container">
        <p class="banner-heading">
            دورة الذكاء الاصطناعي
        </p>

        <p class="banner-subtitle">
            احترف برمجة الذكاء الاصطناعي AI وتحليل البيانات وتعلم كافة المعلومات التي تحتاجها لبناء نماذج ذكاء اصطناعي
            متخصصة.
        </p>

        <div>
            <a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://academy.hsoub.com/learn/artificial-intelligence" rel="">اشترك الآن</a>
        </div>
    </div>
    <div class="banner-img"> <a href="https://academy.hsoub.com/learn/artificial-intelligence" rel=""><img alt="دورة الذكاء الاصطناعي AI" src="https://academy.hsoub.com/learn/assets/images/courses/artificial-intelligence.png"></a></div>
</div>

<h2>
	إعداد المشروع
</h2>

<p>
	يحتاج تنفذ شيفرات هذه المقالة بيئةً برمجيةً <a href="https://wiki.hsoub.com/Python" rel="external">للغة بايثون</a> الإصدار 3.8. ويجب أن تتضمن هذه البيئة البرمجية مدير الحِزم <a href="https://pypi.org/project/pip/" rel="external nofollow">pip</a> لتثبيت الحِزم، ومُنشئ البيئات الافتراضية <a href="https://docs.python.org/3/library/venv.html" rel="external nofollow">venv</a> لإنشاء بيئاتٍ افتراضيةٍ.
</p>

<p>
	نستخدم محرر الشيفرات البرمجية <a href="https://academy.hsoub.com/devops/linux/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D9%87%D9%8A%D8%A6%D8%A9-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%A7%D9%84%D9%85%D9%81%D9%83%D8%B1%D8%A9-jupyter-notebook-%D9%84%D9%84%D8%B9%D9%85%D9%84-%D9%85%D8%B9-%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-python-3-r388/" rel="">Jupyter Notebooks</a>، وهو مفيد جدًا لتجربة وتشغيل الأمثلة البرمجية بطريقةٍ تفاعليةٍ، حيث نستطيع من خلاله تشغيل كتلًا صغيرةً من الشيفرات البرمجية ورؤية النتائج بسرعة، مما يُسهّل علينا اختبار الشيفرات البرمجية وتصحيحها.
</p>

<p>
	نحتاج أولًا لتثبيت بعض التبعيات، وذلك لإنشاء مساحة عملٍ للاحتفاظ بملفاتنا قبل أن نتمكن من تطوير برنامجنا. نُنشئ مجلدًا جديدًا خاصًا بمشروعنا وندخل إليه هكذا:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7327_29" style=""><span class="pln">mkdir clustering
cd clustering</span></pre>

<p>
	نُنفذّ الأمر التالي لإنشاء البيئة الافتراضية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7327_31" style=""><span class="pln">python </span><span class="pun">-</span><span class="pln">m venv clustering</span></pre>

<p>
	ومن ثم الأمر التالي في Linux لتنشيط البيئة الافتراضية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7327_33" style=""><span class="pln">source clustering</span><span class="pun">/</span><span class="pln">bin</span><span class="pun">/</span><span class="pln">activate</span></pre>

<p>
	أما في Windows، فيكون أمر التنشيط:
</p>

<pre class="ipsCode">"clustering/Scripts/activate.bat"
</pre>

<p>
	نستخدم إصداراتٍ محددةٍ من المكتبات اللازمة، من خلال إنشاء ملف <code>requirements.txt</code> في مجلد المشروع، وسيُحدِّد هذا الملف المتطلبات والإصدارات التي سنحتاج إليها.
</p>

<p>
	نفتح الملف <code>requirements.txt</code> في محرر النصوص، ونُضيف الأسطر التالية، وذلك لتحديد المكتبات التي نريدها وإصداراتها:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7327_35" style=""><span class="pln">jupyter</span><span class="pun">==</span><span class="lit">1.0</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
numpy</span><span class="pun">==</span><span class="lit">1.21</span><span class="pun">.</span><span class="lit">5</span><span class="pln">
scikit</span><span class="pun">-</span><span class="pln">learn</span><span class="pun">==</span><span class="lit">1.0</span><span class="pun">.</span><span class="lit">1</span><span class="pln">
scipy</span><span class="pun">==</span><span class="lit">1.7</span><span class="pun">.</span><span class="lit">3</span><span class="pln">
pandas</span><span class="pun">==</span><span class="lit">1.3</span><span class="pun">.</span><span class="lit">5</span><span class="pln">
matplotlib</span><span class="pun">==</span><span class="lit">3.5</span><span class="pun">.</span><span class="lit">1</span></pre>

<p>
	نحفظ التغييرات التي طرأت على الملف ونخرج من محرر النصوص، ثم نُثَبت هذه المكتبات بالأمر التالي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7327_40" style=""><span class="pun">(</span><span class="pln">clustering</span><span class="pun">)</span><span class="pln"> $ pip install </span><span class="pun">-</span><span class="pln">r requirements</span><span class="pun">.</span><span class="pln">txt</span></pre>

<p>
	بعد تثبيتنا لهذه التبعيات، نُصبح جاهزين لبدء العمل على مشروعنا.
</p>

<h2>
	كتابة شيفرة تطبيق العنقدة للعملاء
</h2>

<p>
	نُشغّل محرر الشيفرات البرمجية Jupyter Notebook بمجرد اكتمال عملية التثبيت. هكذا:
</p>

<pre class="ipsCode">(clustering) $ jupyter notebook
</pre>

<p>
	ثم نُنشئ ملفًا جديدًا في داخل المحرر ونُسمّه باسم clust مثلًا.
</p>

<h3>
	تنفيذ المثال التعليمي
</h3>

<p>
	نبدأ أولًا بإنشاء بيانات المثال التعليمي السابق ورسمها باستخدام المكتبة <code>matplotlib</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7327_43" style=""><span class="com"># المكتبة الرقمية</span><span class="pln">
</span><span class="kwd">import</span><span class="pln"> numpy </span><span class="kwd">as</span><span class="pln"> np
</span><span class="com"># مكتبة الرسم</span><span class="pln">
</span><span class="kwd">import</span><span class="pln"> matplotlib</span><span class="pun">.</span><span class="pln">pyplot </span><span class="kwd">as</span><span class="pln"> plt
</span><span class="com"># إنشاء البيانات</span><span class="pln">
X </span><span class="pun">=</span><span class="pln"> np</span><span class="pun">.</span><span class="pln">array</span><span class="pun">([[</span><span class="lit">5</span><span class="pun">,</span><span class="lit">3</span><span class="pun">],</span><span class="pln">
     </span><span class="pun">[</span><span class="lit">10</span><span class="pun">,</span><span class="lit">15</span><span class="pun">],</span><span class="pln">
     </span><span class="pun">[</span><span class="lit">15</span><span class="pun">,</span><span class="lit">12</span><span class="pun">],</span><span class="pln">
     </span><span class="pun">[</span><span class="lit">24</span><span class="pun">,</span><span class="lit">10</span><span class="pun">],</span><span class="pln">
     </span><span class="pun">[</span><span class="lit">30</span><span class="pun">,</span><span class="lit">45</span><span class="pun">],</span><span class="pln">     </span><span class="pun">[</span><span class="lit">85</span><span class="pun">,</span><span class="lit">70</span><span class="pun">],</span><span class="pln">
     </span><span class="pun">[</span><span class="lit">71</span><span class="pun">,</span><span class="lit">80</span><span class="pun">],</span><span class="pln">
     </span><span class="pun">[</span><span class="lit">60</span><span class="pun">,</span><span class="lit">78</span><span class="pun">],</span><span class="pln">
     </span><span class="pun">[</span><span class="lit">55</span><span class="pun">,</span><span class="lit">52</span><span class="pun">],</span><span class="pln">
     </span><span class="pun">[</span><span class="lit">80</span><span class="pun">,</span><span class="lit">91</span><span class="pun">],])</span><span class="pln">
</span><span class="com"># الرسم</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">scatter</span><span class="pun">(</span><span class="pln">X</span><span class="pun">[:,</span><span class="lit">0</span><span class="pun">],</span><span class="pln">X</span><span class="pun">[:,</span><span class="lit">1</span><span class="pun">])</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">show</span><span class="pun">()</span></pre>

<p>
	مما يُظهر:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="91917" href="https://academy.hsoub.com/uploads/monthly_2022_02/003.png.c8cbcebab5b32ac8e5c35870eb8ad691.png" rel="" data-fileext="png"><img alt="003.png" class="ipsImage ipsImage_thumbnailed" data-fileid="91917" data-unique="9f6l62gtf" src="https://academy.hsoub.com/uploads/monthly_2022_02/003.png.c8cbcebab5b32ac8e5c35870eb8ad691.png"></a>
</p>

<p>
	تُبين الشيفرة التالية استخدام الصف <code>KMeans</code> من مكتبة العنقدة <code>sklearn.cluster</code>. نُنشئ أولًا غرض (نموذج model) من هذا الصف مع تحديد عدد العناقيد المطلوبة. تُنفذّ الطريقة <code>fit</code> خوارزمية KMeans على بيانات التدريب لإيجاد العناقيد المطلوبة. تُرقّم الخوارزمية العناقيد بدءًا من الصفر (تسميات labels). يُمكن طبعًا طباعة مراكز العناقيد.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7327_45" style=""><span class="com"># KMeans</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">cluster </span><span class="kwd">import</span><span class="pln"> </span><span class="typ">KMeans</span><span class="pln">
</span><span class="com"># إنشاء غرض من الصف</span><span class="pln">
</span><span class="com"># تحديد عدد العناقيد المطلوب</span><span class="pln">
kmeans </span><span class="pun">=</span><span class="pln"> </span><span class="typ">KMeans</span><span class="pun">(</span><span class="pln">n_clusters</span><span class="pun">=</span><span class="lit">2</span><span class="pun">)</span><span class="pln">
</span><span class="com"># الملائمة مع البيانات</span><span class="pln">
kmeans</span><span class="pun">.</span><span class="pln">fit</span><span class="pun">(</span><span class="pln">X</span><span class="pun">)</span><span class="pln">
</span><span class="com"># طباعة المراكز</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">kmeans</span><span class="pun">.</span><span class="pln">cluster_centers_</span><span class="pun">)</span><span class="pln">
</span><span class="com"># طباعة تسميات العناقيد</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">kmeans</span><span class="pun">.</span><span class="pln">labels_</span><span class="pun">)</span></pre>

<p>
	يكون الخرج:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7327_47" style=""><span class="pun">[[</span><span class="lit">70.2</span><span class="pln"> </span><span class="lit">74.2</span><span class="pun">]</span><span class="pln"> </span><span class="pun">[</span><span class="lit">16.8</span><span class="pln"> </span><span class="lit">17.</span><span class="pln"> </span><span class="pun">]]</span><span class="pln"> 
</span><span class="pun">[</span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">0</span><span class="pun">]</span></pre>

<p>
	يُمكن الآن استخدام النموذج المُتعلم السابق للتنبؤ بعنقود أي مثال جديد وذلك باستخدام الطريقة <code>predict</code> كما تُبين الشيفرة التالية:
</p>

<pre class="ipsCode"># التنبؤ 
print(kmeans.predict([[10,10]]))
</pre>

<p>
	حيث يكون الخرج مثلًا:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7327_49" style=""><span class="pun">[</span><span class="lit">1</span><span class="pun">]</span></pre>

<p>
	يُمكن أيضًا رسم نقاط التدريب مع مراكزها بلون مميز كما تُبين الشيفرة التالية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7327_51" style=""><span class="com"># الرسم مع المراكز</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">scatter</span><span class="pun">(</span><span class="pln">X</span><span class="pun">[:,</span><span class="lit">0</span><span class="pun">],</span><span class="pln">X</span><span class="pun">[:,</span><span class="lit">1</span><span class="pun">],</span><span class="pln"> c</span><span class="pun">=</span><span class="pln">kmeans</span><span class="pun">.</span><span class="pln">labels_</span><span class="pun">,</span><span class="pln"> cmap</span><span class="pun">=</span><span class="str">'rainbow'</span><span class="pun">)</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">scatter</span><span class="pun">(</span><span class="pln">X</span><span class="pun">[:,</span><span class="lit">0</span><span class="pun">],</span><span class="pln"> X</span><span class="pun">[:,</span><span class="lit">1</span><span class="pun">],</span><span class="pln"> c</span><span class="pun">=</span><span class="pln">kmeans</span><span class="pun">.</span><span class="pln">labels_</span><span class="pun">,</span><span class="pln"> cmap</span><span class="pun">=</span><span class="str">'rainbow'</span><span class="pun">)</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">scatter</span><span class="pun">(</span><span class="pln">kmeans</span><span class="pun">.</span><span class="pln">cluster_centers_</span><span class="pun">[:,</span><span class="lit">0</span><span class="pun">]</span><span class="pln"> </span><span class="pun">,</span><span class="pln">kmeans</span><span class="pun">.</span><span class="pln">cluster_centers_</span><span class="pun">[:,</span><span class="lit">1</span><span class="pun">],</span><span class="pln"> color</span><span class="pun">=</span><span class="str">'black'</span><span class="pun">)</span></pre>

<p>
	يكون الخرج:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="91918" href="https://academy.hsoub.com/uploads/monthly_2022_02/004.png.39f629513badf3fa10a54d5b57b30166.png" rel="" data-fileext="png"><img alt="004.png" class="ipsImage ipsImage_thumbnailed" data-fileid="91918" data-unique="303tlz2v6" src="https://academy.hsoub.com/uploads/monthly_2022_02/004.png.39f629513badf3fa10a54d5b57b30166.png"></a>
</p>

<p>
	ننتقل الآن لمعالجة مسألتنا الأساسية وهي عنقدة الزبائن. تعرض الشيفرة التالية تحميل البيانات من الملف <code>shopping-data.csv</code> ووضعها في إطار بيانات من المكتبة <code>pandas</code>.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7327_53" style=""><span class="com"># مكتبة إطار البيانات</span><span class="pln">
</span><span class="kwd">import</span><span class="pln"> pandas </span><span class="kwd">as</span><span class="pln"> pd

</span><span class="com"># تحميل البيانات</span><span class="pln">
customer_data </span><span class="pun">=</span><span class="pln"> pd</span><span class="pun">.</span><span class="pln">read_csv</span><span class="pun">(</span><span class="str">'shopping-data.csv'</span><span class="pun">)</span><span class="pln">

</span><span class="com"># إظهار ترويسة البيانات</span><span class="pln">
customer_data</span><span class="pun">.</span><span class="pln">head</span><span class="pun">()</span></pre>

<p>
	تظهر أوائل البيانات:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="91919" href="https://academy.hsoub.com/uploads/monthly_2022_02/005.png.2daa46b3297c52fdd58d2ee0ce6dde77.png" rel="" data-fileext="png"><img alt="005.png" class="ipsImage ipsImage_thumbnailed" data-fileid="91919" data-unique="ashxp79ux" style="width: 550px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_02/005.png.2daa46b3297c52fdd58d2ee0ce6dde77.png"></a>
</p>

<p>
	نحذف في الشيفرة التالية رقم الزبون من إطار البيانات كي لا يدخل في عملية حساب العناقيد. ثم نُنشئ نموذجًا متعلمًا من الصف KMeans مع عدد العناقيد مساويًا لخمسه (نعرض لاحقًا كيفية تحديدنا لهذا الرقم):
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7327_56" style=""><span class="com"># حذف رقم الزبون</span><span class="pln">
data </span><span class="pun">=</span><span class="pln"> customer_data</span><span class="pun">.</span><span class="pln">iloc</span><span class="pun">[:,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">:</span><span class="lit">3</span><span class="pun">].</span><span class="pln">values

</span><span class="com"># إنشاء النموذج المتعلم</span><span class="pln">
kmeans </span><span class="pun">=</span><span class="pln"> </span><span class="typ">KMeans</span><span class="pun">(</span><span class="pln">n_clusters</span><span class="pun">=</span><span class="lit">5</span><span class="pun">)</span><span class="pln">

</span><span class="com"># الملائمة مع البيانات</span><span class="pln">
kmeans</span><span class="pun">.</span><span class="pln">fit</span><span class="pun">(</span><span class="pln">data</span><span class="pun">)</span><span class="pln">

</span><span class="com"># طباعة المراكز</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">kmeans</span><span class="pun">.</span><span class="pln">cluster_centers_</span><span class="pun">)</span><span class="pln">

</span><span class="com"># طباعة التسميات</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">kmeans</span><span class="pun">.</span><span class="pln">labels_</span><span class="pun">)</span></pre>

<p>
	يكون الإظهار:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7327_58" style=""><span class="pun">[[</span><span class="lit">88.2</span><span class="pln">        </span><span class="lit">17.11428571</span><span class="pun">]</span><span class="pln"> </span><span class="pun">[</span><span class="lit">55.2962963</span><span class="pln">  </span><span class="lit">49.51851852</span><span class="pun">]</span><span class="pln"> </span><span class="pun">[</span><span class="lit">25.72727273</span><span class="pln"> </span><span class="lit">79.36363636</span><span class="pun">]</span><span class="pln"> </span><span class="pun">[</span><span class="lit">86.53846154</span><span class="pln"> </span><span class="lit">82.12820513</span><span class="pun">]</span><span class="pln"> </span><span class="pun">[</span><span class="lit">26.30434783</span><span class="pln"> </span><span class="lit">20.91304348</span><span class="pun">]]</span><span class="pln"> 
</span><span class="pun">[</span><span class="lit">4</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">3</span><span class="pun">]</span></pre>

<p>
	يُمكن الآن أن نرسم النقاط مع المراكز باستخدام الشيفرة التالية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7327_60" style=""><span class="com"># الرسم</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">scatter</span><span class="pun">(</span><span class="pln">data</span><span class="pun">[:,</span><span class="lit">0</span><span class="pun">],</span><span class="pln">data</span><span class="pun">[:,</span><span class="lit">1</span><span class="pun">],</span><span class="pln"> c</span><span class="pun">=</span><span class="pln">kmeans</span><span class="pun">.</span><span class="pln">labels_</span><span class="pun">,</span><span class="pln"> cmap</span><span class="pun">=</span><span class="str">'rainbow'</span><span class="pun">)</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">scatter</span><span class="pun">(</span><span class="pln">data</span><span class="pun">[:,</span><span class="lit">0</span><span class="pun">],</span><span class="pln"> data</span><span class="pun">[:,</span><span class="lit">1</span><span class="pun">],</span><span class="pln"> c</span><span class="pun">=</span><span class="pln">kmeans</span><span class="pun">.</span><span class="pln">labels_</span><span class="pun">,</span><span class="pln"> cmap</span><span class="pun">=</span><span class="str">'rainbow'</span><span class="pun">)</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">scatter</span><span class="pun">(</span><span class="pln">kmeans</span><span class="pun">.</span><span class="pln">cluster_centers_</span><span class="pun">[:,</span><span class="lit">0</span><span class="pun">]</span><span class="pln"> </span><span class="pun">,</span><span class="pln">kmeans</span><span class="pun">.</span><span class="pln">cluster_centers_</span><span class="pun">[:,</span><span class="lit">1</span><span class="pun">],</span><span class="pln"> color</span><span class="pun">=</span><span class="str">'black'</span><span class="pun">)</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">show</span><span class="pun">()</span></pre>

<p>
	مما يُعطي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="91920" href="https://academy.hsoub.com/uploads/monthly_2022_02/006.png.669aabea47221b9e19ccb988079e4318.png" rel="" data-fileext="png"><img alt="006.png" class="ipsImage ipsImage_thumbnailed" data-fileid="91920" data-unique="imn72mmy4" src="https://academy.hsoub.com/uploads/monthly_2022_02/006.png.669aabea47221b9e19ccb988079e4318.png"></a>
</p>

<h2>
	تفسير نتائج العنقدة تقييمها
</h2>

<p>
	يُمكن لنا بمعاينة الشكل السابق استنتاج ما يلي (وهو الهدف الأساسي من عملية العنقدة):
</p>

<ul>
	<li>
		الزبائن في أعلى اليمين (نقاط البيانات الصفراء) هم الزبائن ذوو الرواتب المرتفعة والإنفاق المرتفع. هؤلاء هم الزبائن الواجب استهدافهم دومًا والمحافظة عليهم.
	</li>
	<li>
		الزبائن في أعلى اليسار (نقاط البيانات الخضراء) هم الزبائن ذوو الرواتب المنخفضة والإنفاق المرتفع. هؤلاء هم الزبائن الواجب العناية بهم واستهدافهم بحملات التخفيضات مثلًا.
	</li>
	<li>
		الزبائن في أسفل اليمين (نقاط البيانات البنفسجية) هم الزبائن ذوو الرواتب المرتفعة والإنفاق المنخفض. هؤلاء هم الزبائن الواجب جذبهم بالطرق التسويقية ما أمكن ذلك.
	</li>
	<li>
		الزبائن في أسفل اليسار (نقاط البيانات الحمراء) هم الزبائن ذوو الرواتب المنخفضة والإنفاق المنخفض. لا داع لإضاعة الكثير من الوقت والجهد معهم.
	</li>
	<li>
		الزبائن في الوسط (نقاط البيانات الزرقاء) هم الزبائن أصحاب الدخل المتوسط والإنفاق المتوسط. يُمكن استهدافهم أيضًا لاسيما أن عددهم كبيرًا كما يُبين الشكل السابق.
	</li>
</ul>

<p>
	يُمكن تقييم نتائج العنقدة باستخدام المعامل المدعو Silhouette Coefficient، ويُحسب هذا المعامل من أجل عنصر بيانات x كما يلي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="91921" href="https://academy.hsoub.com/uploads/monthly_2022_02/007.png.519c81fe6ed591979bf927b7bfbfb6b3.png" rel="" data-fileext="png"><img alt="007.png" class="ipsImage ipsImage_thumbnailed" data-fileid="91921" data-unique="hze3njhlp" style="width: 200px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_02/007.png.519c81fe6ed591979bf927b7bfbfb6b3.png"></a>
</p>

<p>
	حيث:
</p>

<ul>
	<li>
		a هي وسطي المسافات بين x وبين العناصر الموجودة في نفس العنقود الموجود فيه العنصر x.
	</li>
	<li>
		b هي وسطي المسافات بين x وبين العناصر الموجودة في العناقيد القريبة من عنقود x.
	</li>
</ul>

<p>
	كما يُبين الشكل التالي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="91922" href="https://academy.hsoub.com/uploads/monthly_2022_02/008.png.aac274f4d5bf53b8a5dc846842b1f2b5.png" rel="" data-fileext="png"><img alt="008.png" class="ipsImage ipsImage_thumbnailed" data-fileid="91922" data-unique="fe1ns6kxf" style="width: 400px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_02/008.png.aac274f4d5bf53b8a5dc846842b1f2b5.png"></a>
</p>

<p>
	يُمكن ملاحظة ما يلي حول هذا المعامل:
</p>

<ul>
	<li>
		أفضل قيمة له هي 1 وأسوأ قيمة له هي -1.
	</li>
	<li>
		تُشير القيمة 0 إلى وجد تراكب overlapping في العناقيد.
	</li>
	<li>
		تدل القيمة السالبة على وجود العنصر x في عنقود خاطئ إذ يوجد عنقود آخر أقرب إلى x.
	</li>
</ul>

<p>
	يكون المعامل <code>silhouette_score</code> لمجموعة من البيانات وسطي قيمة المعامل لكل منها أي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="91923" href="https://academy.hsoub.com/uploads/monthly_2022_02/009.png.04df7aaf7ce38216d97920be47bceb81.png" rel="" data-fileext="png"><img alt="009.png" class="ipsImage ipsImage_thumbnailed" data-fileid="91923" data-unique="wtb2jpi5t" style="width: 400px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_02/009.png.04df7aaf7ce38216d97920be47bceb81.png"></a>
</p>

<p>
	يُمكن تضمين حساب هذا المعامل من <code>sklearn.metrics</code> كما تُبين الشيفرة التالية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7327_64" style=""><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">metrics </span><span class="kwd">import</span><span class="pln"> silhouette_score
cluster_labels </span><span class="pun">=</span><span class="pln"> kmeans</span><span class="pun">.</span><span class="pln">fit_predict</span><span class="pun">(</span><span class="pln">data</span><span class="pun">)</span><span class="pln">

</span><span class="com"># حساب المعامل</span><span class="pln">
silhouette_avg </span><span class="pun">=</span><span class="pln"> silhouette_score</span><span class="pun">(</span><span class="pln">data</span><span class="pun">,</span><span class="pln"> cluster_labels</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">silhouette_avg</span><span class="pun">)</span></pre>

<p>
	يكون لطريقة حساب المعامل <code>silhouette_score</code> معاملي دخل الأول هو البيانات والثاني هو تسميات العناقيد الناتجة عن استدعاء الطريقة <code>fit_predict</code> أولًا.
</p>

<p>
	يكون الناتج في مثالنا:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7327_66" style=""><span class="lit">0.553931997444648</span></pre>

<h2>
	إيجاد عدد العناقيد الأمثلي
</h2>

<p>
	يُمكن استخدام المعامل Silhouette Coefficient لإيجاد عدد العناقيد الأمثلي المناسب لبيانات التدريب وذلك بحساب المعامل مع قيم مختلفة لعدد العناقيد ومن ثم اختيار العدد الذي يُعطي قيمة أعظمية للمعامل كما تُبين الشيفرة التالية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7327_68" style=""><span class="com"># مجموعة القيم الممكنة</span><span class="pln">
range_n_clusters </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">4</span><span class="pun">,</span><span class="pln"> </span><span class="lit">5</span><span class="pun">,</span><span class="pln"> </span><span class="lit">6</span><span class="pun">,</span><span class="pln"> </span><span class="lit">7</span><span class="pun">]</span><span class="pln">
</span><span class="kwd">for</span><span class="pln"> n_clusters </span><span class="kwd">in</span><span class="pln"> range_n_clusters</span><span class="pun">:</span><span class="pln">
    clusterer </span><span class="pun">=</span><span class="pln"> </span><span class="typ">KMeans</span><span class="pun">(</span><span class="pln">n_clusters</span><span class="pun">=</span><span class="pln">n_clusters</span><span class="pun">)</span><span class="pln">
    cluster_labels </span><span class="pun">=</span><span class="pln"> clusterer</span><span class="pun">.</span><span class="pln">fit_predict</span><span class="pun">(</span><span class="pln">data</span><span class="pun">)</span><span class="pln">
    </span><span class="com"># حساب المعامل</span><span class="pln">
    silhouette_avg </span><span class="pun">=</span><span class="pln"> silhouette_score</span><span class="pun">(</span><span class="pln">data</span><span class="pun">,</span><span class="pln"> cluster_labels</span><span class="pun">)</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="pln">
        </span><span class="str">"For n ="</span><span class="pun">,</span><span class="pln">
        n_clusters</span><span class="pun">,</span><span class="pln">
        </span><span class="str">"silhouette_score is :"</span><span class="pun">,</span><span class="pln">
        silhouette_avg</span><span class="pun">,</span><span class="pln">
    </span><span class="pun">)</span></pre>

<p>
	مما يُظهر المعامل من أجل كل قيمة محتملة لعدد العناقيد:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7327_70" style=""><span class="typ">For</span><span class="pln"> n </span><span class="pun">=</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> silhouette_score </span><span class="kwd">is</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.2968969162503008</span><span class="pln"> 
</span><span class="typ">For</span><span class="pln"> n </span><span class="pun">=</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> silhouette_score </span><span class="kwd">is</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.46761358158775435</span><span class="pln"> 
</span><span class="typ">For</span><span class="pln"> n </span><span class="pun">=</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> silhouette_score </span><span class="kwd">is</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.4931963109249047</span><span class="pln"> 
</span><span class="typ">For</span><span class="pln"> n </span><span class="pun">=</span><span class="pln"> </span><span class="lit">5</span><span class="pln"> silhouette_score </span><span class="kwd">is</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.553931997444648</span><span class="pln"> 
</span><span class="typ">For</span><span class="pln"> n </span><span class="pun">=</span><span class="pln"> </span><span class="lit">6</span><span class="pln"> silhouette_score </span><span class="kwd">is</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.5376203956398481</span><span class="pln"> 
</span><span class="typ">For</span><span class="pln"> n </span><span class="pun">=</span><span class="pln"> </span><span class="lit">7</span><span class="pln"> silhouette_score </span><span class="kwd">is</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.5270287298101395</span></pre>

<p>
	وبالتالي نلاحظ أن القيمة الأمثلية هي خمسة عناقيد.
</p>

<h2>
	الخوارزميات التكتلية
</h2>

<p>
	تمتاز الخوارزميات التكتلية بأنها توفر طريقة معاينة بسيطة لإيجاد عدد العناقيد الأمثلي عن طريق رسم شجرة دمج العناقيد مع بعضها البعض dendrogram:
</p>

<p>
	<strong>دخل الخوارزمية:</strong>
</p>

<ul>
	<li>
		بيانات التدريب وهي عبارة عن مجموعة من الأشعة الرقمية: {x1, x2, . . . , xN} حيث xi هو شعاع من الأرقام.
	</li>
</ul>

<p>
	<strong>خرج الخوارزمية:</strong>
</p>

<ul>
	<li>
		شجرة دمج العناقيد مع بعضها البعض dendrogram.
	</li>
</ul>

<p>
	<strong>المعالجة:</strong>
</p>

<ul>
	<li>
		تبدأ الخوارزمية بوضع كل عنصر من عناصر البيانات في عنقود.
	</li>
	<li>
		تُكرر الخوارزمية ما يلي وصولًا إلى عنقود وحيد:
	</li>
	<li>
		دمج أقرب عنقودين مع بعضهما البعض
	</li>
</ul>

<p>
	توجد عدة طرق لإيجاد أقرب عنقودين، من أبسطها الطريقة المسماة بالربط البسيط Single Linkage والتي تحسب المسافة بين عنقودين كما يلي: المسافة بين عنقودين هي أصغر مسافة بين عنصرين من هذين العنقودين.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="91929" href="https://academy.hsoub.com/uploads/monthly_2022_02/015.png.6d2f4e01bb7041057f166e1499eb62f0.png" rel="" data-fileext="png"><img alt="015.png" class="ipsImage ipsImage_thumbnailed" data-fileid="91929" data-unique="phv9raxqk" style="width: 400px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_02/015.png.6d2f4e01bb7041057f166e1499eb62f0.png"></a>
</p>

<p>
	نستخدم فيما يلي الخوارزمية التكتلية مع البيانات التعليمية ومن ثم مع بيانات الزبائن.
</p>

<p>
	تعرض الشيفرة التالية طريقة بسيطة لتسمية نقاط البيانات التعليمية (العشرة) لتسهيل عملية المشاهدة والمتابعة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7327_72" style=""><span class="com"># التسميات : 2,1, ..., 10</span><span class="pln">
labels </span><span class="pun">=</span><span class="pln"> range</span><span class="pun">(</span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">11</span><span class="pun">)</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">subplots_adjust</span><span class="pun">(</span><span class="pln">bottom</span><span class="pun">=</span><span class="lit">0.1</span><span class="pun">)</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">scatter</span><span class="pun">(</span><span class="pln">X</span><span class="pun">[:,</span><span class="lit">0</span><span class="pun">],</span><span class="pln">X</span><span class="pun">[:,</span><span class="lit">1</span><span class="pun">])</span><span class="pln">

</span><span class="com"># تسمية النقاط</span><span class="pln">
</span><span class="kwd">for</span><span class="pln"> label</span><span class="pun">,</span><span class="pln"> x</span><span class="pun">,</span><span class="pln"> y </span><span class="kwd">in</span><span class="pln"> zip</span><span class="pun">(</span><span class="pln">labels</span><span class="pun">,</span><span class="pln"> X</span><span class="pun">[:,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">],</span><span class="pln"> X</span><span class="pun">[:,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">]):</span><span class="pln">
    plt</span><span class="pun">.</span><span class="pln">annotate</span><span class="pun">(</span><span class="pln">
        label</span><span class="pun">,</span><span class="pln">
        xy</span><span class="pun">=(</span><span class="pln">x</span><span class="pun">,</span><span class="pln"> y</span><span class="pun">),</span><span class="pln"> xytext</span><span class="pun">=(-</span><span class="lit">3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">3</span><span class="pun">),</span><span class="pln">
        textcoords</span><span class="pun">=</span><span class="str">'offset points'</span><span class="pun">,</span><span class="pln"> ha</span><span class="pun">=</span><span class="str">'right'</span><span class="pun">,</span><span class="pln"> va</span><span class="pun">=</span><span class="str">'bottom'</span><span class="pun">)</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">show</span><span class="pun">()</span></pre>

<p>
	يكون الخرج:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="91924" href="https://academy.hsoub.com/uploads/monthly_2022_02/010.png.f69a159f3a4c232344d613a31b6ba8ac.png" rel="" data-fileext="png"><img alt="010.png" class="ipsImage ipsImage_thumbnailed" data-fileid="91924" data-unique="sv2xpn8yt" src="https://academy.hsoub.com/uploads/monthly_2022_02/010.png.f69a159f3a4c232344d613a31b6ba8ac.png"></a>
</p>

<p>
	نبدأ أولًا بالشيفرة اللازمة لرسم شجرة الدمج dendrogram من أجل إيجاد عدد العناقيد الأمثل:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7327_74" style=""><span class="com"># المكتبات اللازمة</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> scipy</span><span class="pun">.</span><span class="pln">cluster</span><span class="pun">.</span><span class="pln">hierarchy </span><span class="kwd">import</span><span class="pln"> dendrogram</span><span class="pun">,</span><span class="pln"> linkage

</span><span class="com"># اختيار الربط البسيط</span><span class="pln">
linked </span><span class="pun">=</span><span class="pln"> linkage</span><span class="pun">(</span><span class="pln">X</span><span class="pun">,</span><span class="pln"> </span><span class="str">'single'</span><span class="pun">)</span><span class="pln">

</span><span class="com"># التسميات: 2,1, .. ,10</span><span class="pln">
labelList </span><span class="pun">=</span><span class="pln"> range</span><span class="pun">(</span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">11</span><span class="pun">)</span><span class="pln">

</span><span class="com"># dendrogram</span><span class="pln">
dendrogram</span><span class="pun">(</span><span class="pln">linked</span><span class="pun">,</span><span class="pln">
            orientation</span><span class="pun">=</span><span class="str">'top'</span><span class="pun">,</span><span class="pln">
            labels</span><span class="pun">=</span><span class="pln">labelList</span><span class="pun">,</span><span class="pln">
            distance_sort</span><span class="pun">=</span><span class="str">'descending'</span><span class="pun">,</span><span class="pln">
            show_leaf_counts</span><span class="pun">=</span><span class="kwd">True</span><span class="pun">)</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">show</span><span class="pun">()</span></pre>

<p>
	نُعاين شجرة الدمج الناتجة والتي تُبين أن عدد العناقيد المُمكن هو عنقودين:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="91925" href="https://academy.hsoub.com/uploads/monthly_2022_02/011.png.6bdb4f6a215618bb8d0d2af27f09f3fb.png" rel="" data-fileext="png"><img alt="011.png" class="ipsImage ipsImage_thumbnailed" data-fileid="91925" data-unique="9e08r5qqq" src="https://academy.hsoub.com/uploads/monthly_2022_02/011.png.6bdb4f6a215618bb8d0d2af27f09f3fb.png"></a>
</p>

<p>
	نستدعي الآن الدالة <code>AgglomerativeClustering</code> مع طلب عدد العناقيد مساويًا إلى 2:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7327_76" style=""><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">cluster </span><span class="kwd">import</span><span class="pln"> </span><span class="typ">AgglomerativeClustering</span><span class="pln">

</span><span class="com"># العنقدة التكتلية</span><span class="pln">
cluster </span><span class="pun">=</span><span class="pln"> </span><span class="typ">AgglomerativeClustering</span><span class="pun">(</span><span class="pln">n_clusters</span><span class="pun">=</span><span class="lit">2</span><span class="pun">)</span><span class="pln">

</span><span class="com"># الملائمة مع البيانات</span><span class="pln">
cluster</span><span class="pun">.</span><span class="pln">fit_predict</span><span class="pun">(</span><span class="pln">X</span><span class="pun">)</span></pre>

<p>
	والتي تُظهر تسميات عنقود كل عنصر:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7327_78" style=""><span class="pln">array</span><span class="pun">([</span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">],</span><span class="pln"> dtype</span><span class="pun">=</span><span class="pln">int64</span><span class="pun">)</span></pre>

<p>
	يُمكن أيضًا رسم العناقيد:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7327_80" style=""><span class="com"># الرسم</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">scatter</span><span class="pun">(</span><span class="pln">X</span><span class="pun">[:,</span><span class="lit">0</span><span class="pun">],</span><span class="pln">X</span><span class="pun">[:,</span><span class="lit">1</span><span class="pun">],</span><span class="pln"> c</span><span class="pun">=</span><span class="pln">cluster</span><span class="pun">.</span><span class="pln">labels_</span><span class="pun">,</span><span class="pln"> cmap</span><span class="pun">=</span><span class="str">'rainbow'</span><span class="pun">)</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">show</span><span class="pun">()</span></pre>

<p>
	يكون الإظهار:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="91926" href="https://academy.hsoub.com/uploads/monthly_2022_02/012.png.f285eb8e29424642b9119927f65704c9.png" rel="" data-fileext="png"><img alt="012.png" class="ipsImage ipsImage_thumbnailed" data-fileid="91926" data-unique="n36qejcd1" src="https://academy.hsoub.com/uploads/monthly_2022_02/012.png.f285eb8e29424642b9119927f65704c9.png"></a>
</p>

<p>
	ننتقل الآن إلى مسألة الزبائن باستخدام شيفرة مماثلة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7327_82" style=""><span class="com"># نوع الربط</span><span class="pln">
linked </span><span class="pun">=</span><span class="pln"> linkage</span><span class="pun">(</span><span class="pln">data</span><span class="pun">,</span><span class="pln"> </span><span class="str">'ward'</span><span class="pun">)</span><span class="pln">
</span><span class="com"># dendrogram</span><span class="pln">
dendrogram</span><span class="pun">(</span><span class="pln">linked</span><span class="pun">,</span><span class="pln">
            orientation</span><span class="pun">=</span><span class="str">'top'</span><span class="pun">,</span><span class="pln">
            distance_sort</span><span class="pun">=</span><span class="str">'descending'</span><span class="pun">,</span><span class="pln">
            show_leaf_counts</span><span class="pun">=</span><span class="kwd">True</span><span class="pun">)</span><span class="pln">

</span><span class="com"># الرسم</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">title</span><span class="pun">(</span><span class="str">"Customer Dendograms"</span><span class="pun">)</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">show</span><span class="pun">()</span></pre>

<p>
	يُمكن معاينة شجرة الدمج الناتجة:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="91927" href="https://academy.hsoub.com/uploads/monthly_2022_02/013.png.12faec862f7d5c93534df53f478cf31b.png" rel="" data-fileext="png"><img alt="013.png" class="ipsImage ipsImage_thumbnailed" data-fileid="91927" data-unique="t4oawseqt" src="https://academy.hsoub.com/uploads/monthly_2022_02/013.png.12faec862f7d5c93534df53f478cf31b.png"></a>
</p>

<p>
	والتي تُبين أن عدد العناقيد المناسب هو 5.
</p>

<p>
	نستدعي الدالة <code>AgglomerativeClustering</code> في الشيفرة التالية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7327_84" style=""><span class="pln">cluster </span><span class="pun">=</span><span class="pln"> </span><span class="typ">AgglomerativeClustering</span><span class="pun">(</span><span class="pln">n_clusters</span><span class="pun">=</span><span class="lit">5</span><span class="pun">,</span><span class="pln"> affinity</span><span class="pun">=</span><span class="str">'euclidean'</span><span class="pun">,</span><span class="pln"> linkage</span><span class="pun">=</span><span class="str">'ward'</span><span class="pun">)</span><span class="pln">
cluster</span><span class="pun">.</span><span class="pln">fit_predict</span><span class="pun">(</span><span class="pln">data</span><span class="pun">)</span><span class="pln">
</span><span class="com"># الرسم</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">scatter</span><span class="pun">(</span><span class="pln">data</span><span class="pun">[:,</span><span class="lit">0</span><span class="pun">],</span><span class="pln"> data</span><span class="pun">[:,</span><span class="lit">1</span><span class="pun">],</span><span class="pln"> c</span><span class="pun">=</span><span class="pln">cluster</span><span class="pun">.</span><span class="pln">labels_</span><span class="pun">,</span><span class="pln"> cmap</span><span class="pun">=</span><span class="str">'rainbow'</span><span class="pun">)</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">show</span><span class="pun">()</span></pre>

<p>
	ويكون الخرج:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="91928" href="https://academy.hsoub.com/uploads/monthly_2022_02/014.png.a00c2ffd759cc97439eee5fcda678af7.png" rel="" data-fileext="png"><img alt="014.png" class="ipsImage ipsImage_thumbnailed" data-fileid="91928" data-unique="2frbrx475" src="https://academy.hsoub.com/uploads/monthly_2022_02/014.png.a00c2ffd759cc97439eee5fcda678af7.png"></a>
</p>

<p>
	وهو، بالطبع، يُشابه ما حصلنا عليه سابقًا مع الخوارزمية KMeans.
</p>

<h2>
	الخلاصة
</h2>

<p>
	عرضنا في هذه المقالة خطوات بناء نموذج تعلّم لعنقدة مجموعة من البيانات مع آليات اختيار عدد العناقيد المناسب للمسألة.
</p>

<p>
	يُمكن تجربة المثال كاملًا من موقع Google Colab من <a href="https://colab.research.google.com/drive/1n4lX6oNMh6CulFFLay9OzgTTXQAmPAtI?usp=sharing/" rel="external nofollow">الرابط</a>، ولا تنس الاطلاع على <a data-fileid="91930" href="https://academy.hsoub.com/applications/core/interface/file/attachment.php?id=91930" rel="" data-fileext="zip">ملف بيانات التدريب والشيفرة البرمجية</a>.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/advanced/%D8%AA%D8%B9%D9%82%D9%8A%D8%AF-%D8%A7%D9%84%D8%AE%D9%88%D8%A7%D8%B1%D8%B2%D9%85%D9%8A%D8%A7%D8%AA-algorithms-complexity-r1284/" rel="">تعقيد الخوارزميات Algorithms Complexity</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/advanced/%D8%A3%D9%85%D8%AB%D9%84%D8%A9-%D8%B9%D9%86-%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D8%A7%D9%84%D8%AE%D9%88%D8%A7%D8%B1%D8%B2%D9%85%D9%8A%D8%A7%D8%AA-r1410/" rel="">أمثلة عن أنواع الخوارزميات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-machine-learning-%D9%81%D9%8A-php-r1179/" rel="">مدخل إلى تعلم الآلة (Machine learning) في PHP</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">1477</guid><pubDate>Sun, 20 Feb 2022 16:01:00 +0000</pubDate></item><item><title>&#x62A;&#x62D;&#x644;&#x64A;&#x644; &#x627;&#x644;&#x645;&#x634;&#x627;&#x639;&#x631; &#x641;&#x64A; &#x627;&#x644;&#x646;&#x635;&#x648;&#x635; &#x627;&#x644;&#x639;&#x631;&#x628;&#x64A;&#x629; &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; &#x627;&#x644;&#x62A;&#x639;&#x644;&#x645; &#x627;&#x644;&#x639;&#x645;&#x64A;&#x642;</title><link>https://academy.hsoub.com/programming/artificial-intelligence/%D8%AA%D8%AD%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D9%85%D8%B4%D8%A7%D8%B9%D8%B1-%D9%81%D9%8A-%D8%A7%D9%84%D9%86%D8%B5%D9%88%D8%B5-%D8%A7%D9%84%D8%B9%D8%B1%D8%A8%D9%8A%D8%A9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%B9%D9%85%D9%8A%D9%82-r1476/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_02/620a07bcbf4ce_-------.png.005a9e2042d649942d869b844cd0ab77.png" /></p>
<p>
	تُعدّ مسألة تحليل تعليقات وتغريدات الأشخاص على <a href="https://academy.hsoub.com/marketing/social-media/%D9%88%D8%B3%D8%A7%D8%A6%D9%84-%D8%A7%D9%84%D8%AA%D9%88%D8%A7%D8%B5%D9%84-%D8%A7%D9%84%D8%A7%D8%AC%D8%AA%D9%85%D8%A7%D8%B9%D9%8A-%D9%88%D8%A7%D9%84%D8%AA%D8%B3%D9%88%D9%8A%D9%82-%D9%82%D9%88%D8%A7%D8%B9%D8%AF-%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-r559/" rel="">مواقع التواصل الاجتماعي</a> من المسائل المهمة والتي لها الكثير من التطبيقات العملية. مثلًا: تهتم <a href="https://academy.hsoub.com/entrepreneurship/ecommerce/%D8%A7%D9%84%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D9%84%D8%A3%D8%B4%D9%87%D8%B1-%D8%A3%D9%86%D8%B8%D9%85%D8%A9-%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D9%88%D8%A5%D8%AF%D8%A7%D8%B1%D8%A9-%D8%A7%D9%84%D9%85%D8%AA%D8%A7%D8%AC%D8%B1-%D8%A7%D9%84%D8%A5%D9%84%D9%83%D8%AA%D8%B1%D9%88%D9%86%D9%8A%D8%A9-r420/" rel="">المتاجر الالكترونية</a> كثيرًا بتحليل تعليقات الزبائن على <a href="https://academy.hsoub.com/marketing/core-concepts-of-marketing/%D8%AA%D8%B9%D8%B1%D9%8A%D9%81-%D8%A7%D9%84%D9%85%D9%86%D8%AA%D8%AC-%D9%88%D8%A3%D9%86%D9%88%D8%A7%D8%B9%D9%87-r433/" rel="">منتجاتهم</a> لاستكشاف توجهات الزبائن ومواطن الضعف والقوة في المتجر.
</p>

<p>
	نعرض في هذه المقالة استخدام تقنيات <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-%D9%84%D9%81%D9%87%D9%85-%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%B9%D9%85%D9%8A%D9%82-r1422/" rel="">التعلّم العميق</a> deep learning في تحليل المشاعر لنصوص مكتوبة باللغة العربية وباللهجة السعودية بمعنى أن اللغة المستخدمة ليست بالضرورة اللغة العربية الفصحى، بل يُمكن أن تدخل فيها ألفاظ عامية يستخدمها المغردون عادةً.
</p>

<h2>
	بيانات التدريب
</h2>

<p>
	تحوي <a data-fileid="91902" href="https://academy.hsoub.com/applications/core/interface/file/attachment.php?id=91902" rel="" data-fileext="zip">مجموعة البيانات المتوفرة</a> dataset (التي تجدها أيضًا موضحةً بملف بنهاية المقال) حوالي 23500 تغريدة لتعليقات الأشخاص وملاحظاتهم حول مجموعة من الأماكن العامة في المملكة العربية السعودية. جُمّعت هذه التغريدات عن طريق مجموعة من الطلاب الجامعيين وذلك من مجموعة متنوعة من مواقع التواصل الاجتماعي.
</p>

<p>
	نُعطي فيما يلي أمثلة عن هذه التغريدات (تعليقات حول حديقة حيوانات مثلًا):
</p>

<ol>
	<li>
		"أنصحكم والله بزيارته مكان جميل جدا مرتب ونظيف"
	</li>
	<li>
		"جميلة وكبيرة وتحتاج واحد عنده لياقه يمشي فيها"
	</li>
	<li>
		"حيوانات قليلة جدا ولا يوجد اهتمام مكثف"
	</li>
	<li>
		"كان يعيبها وقت الافتتاح والاغلاق وعدم وجود خريطه"
	</li>
	<li>
		"أول مرة أزور حديقة حيوانات"
	</li>
	<li>
		"أيام العوائل الخميس والجمعة والسبت"
	</li>
</ol>

<p>
	يُمكننا، كبشر، تصنيف التغريدات السابقة وبشكل سريع إلى ثلاث فئات:
</p>

<ul>
	<li>
		التغريدات الموجبة (الأولى والثانية) أي التغريدات التي تحمل معاني إيجابية تُعّبر عن الرضا والارتياح.
	</li>
	<li>
		التغريدات السالبة (الثالثة والرابعة) أي التغريدات التي تحمل معاني سلبية تُعبّر عن الاستياء.
	</li>
	<li>
		التغريدات المحايدة (الخامسة والسادسة) أي التغريدات التي يُمكن أن تُعطي معلومات ولا تحمل أية مشاعر فيها سواء موجبة أم سالبة.
	</li>
</ul>

<p>
	نعرض في هذه المسألة كيفية بناء مُصنّف حاسوبي آلي يُصنّف أي جملة عربية إلى موجبة أو سالبة أو محايدة.
</p>

<h2>
	تصنيف بيانات التدريب
</h2>

<p>
	يتطلب استخدام <a href="https://academy.hsoub.com/programming/advanced/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%AA%D8%AD%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%AE%D9%88%D8%A7%D8%B1%D8%B2%D9%85%D9%8A%D8%A7%D8%AA-r1345/" rel="">خوارزميات</a> تعلّم الآلة (خوارزميات تصنيف النصوص في حالتنا) توفر بيانات للتدريب أي مجموعة من النصوص مُصنفّة مُسبقًا إلى: موجبة، سالبة، محايدة.
</p>

<p>
	يُمكن، في بعض الأحيان، اللجوء إلى الطرق اليدوية: أي الطلب من مجموعة من الأشخاص قراءة النصوص وتصنيفها. وهو حل يصلح في حال كان عدد النصوص صغيرًا نسبيًا. يتميز هذا الحل بالدقة العالية لأن الأشخاص تُدرك، بشكل عام، معاني النصوص من خلال خبرتها اللغوية المُكتسبة وتُصنّف النصوص بشكل صحيح غالبًا.
</p>

<p>
	نستخدم، في حالتنا، حلًا إحصائيًا بسيطًا لتصنيف نصوص التدريب إلى موجبة، سالبة، محايدة وذلك باستخدام قاموس للكلمات الموجبة وقاموس آخر للكلمات السالبة.
</p>

<p>
	يحوي قاموس الكلمات الموجبة على مجموعة من الكلمات الموجبة الشائعة مع نقاط لكل كلمة (1 موجبة، 2 موجبة جدًا، 3 موجبة كثيرًا). مثلًا:
</p>

<ul>
	<li>
		روعة، 3
	</li>
	<li>
		جيد، 2
	</li>
	<li>
		معقول، 1
	</li>
</ul>

<p>
	يحوي قاموس الكلمات السالبة على مجموعة من الكلمات السالبة الشائعة مع نقاط لكل كلمة (-1 سالبة، -2 سالبة جدًا، -3 سالبة كثيرًا). مثلًا:
</p>

<ul>
	<li>
		مقرف، -3
	</li>
	<li>
		سيء، -2
	</li>
	<li>
		زحمه، -1
	</li>
</ul>

<p>
	اختيرت كلمات القواميس الموجبة والسالبة من قبل مجموعة من الطلاب بعد أنا طلبنا منهم استعراض التغريدات المُتاحة وانتقاء الكلمات التي تُعطي التغريدة معنى موجب أو معنى سالب، وإعطاء كل كلمة موجبة نقاط تدل على شدة الإيجابية لها (1,2,3) وكل كلمة سالبة نقاط تدل على شدة السلبية (-3،-2،-1)
</p>

<p>
	نعدّ، فيما يلي، نصًا ما أنه موجبًا إذا كان مجموع نقاط الكلمات الموجبة الواردة ضمن النص أكبر من مجموع نقاط الكلمات السالبة الواردة ضمنه. وبالمقابل، نعدّ نصًا ما أنه سالبًا إذا كان مجموع نقاط الكلمات السالبة الواردة ضمن النص أكبر من مجموع نقاط الكلمات الموجبة الواردة ضمنه. يكون نصًا ما محايدًا إذا تساوى مجموع نقاط الكلمات الموجبة فيه مع مجموع نقاط الكلمات السالبة.
</p>

<p>
	بالطبع، لا تُعدّ هذه الطريقة صحيحة دومًا إذ يُمكن أن تُخطئ في بعض الحالات إلا أنها على وجه العموم تُستخدم عوضًا عن الطريقة اليدوية.
</p>

<h2>
	المعالجة الأولية للنصوص
</h2>

<p>
	تهدف المعالجة الأولية إلى الحصول على الكلمات المهمة فقط من النصوص وذلك عن طريق تنفيذ بعض العمليات اللغوية عليها. تُنفذّ هذه العمليات على كل من التغريدات وكلمات القواميس.
</p>

<p>
	لتكن لدينا مثلًا الجملة التالية: "أنا أحب الذهاب إلى الحديقة، كل يوم 9 صباحاً، مع رفاقي هؤلاء!"
</p>

<p>
	سنقوم بتنفيذ العمليات التالية:
</p>

<p>
	أولًا، حذف إشارات الترقيم المختلفة كالفواصل وإشارات الاستفهام وغيرها، ويكون ناتج الجملة السابقة:
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		"أنا أحب الذهاب إلى الحديقة كل يوم 9 صباحاً مع رفاقي هؤلاء".
	</p>
</blockquote>

<p>
	ثانيًا، حذف الأرقام الواردة في النص، فيكون ناتج الجملة السابقة:
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		"أنا أحب الذهاب إلى الحديقة كل يوم صباحاً مع رفاقي هؤلاء"
	</p>
</blockquote>

<p>
	ثالثًا، حذف كلمات التوقف stop words وهي الكلمات التي تتكرر كثيرًا في النصوص ولا تؤثر في معانيها كأحرف الجر (من، إلى، …) والضمائر (أنا، هو، …) وغيرها، فيكون ناتج الجملة السابقة:
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		"أحب الذهاب الحديقة يوم صباحاً رفاقي"
	</p>
</blockquote>

<p>
	رابعًا، تجذيع الكلمات stemming أي إرجاع الكلمات المتشابهة إلى كلمة واحدة (جذع أو جذر) مما يُساهم في إنقاص عدد الكلمات الكلية المختلفة في النصوص، ومطابقة الكلمات المتشابهة مع بعضها البعض. مثلًا: يكون للكلمات الأربع: (رائع، رايع، رائعون، رائعين) نفس الجذع المشترك: (رايع). فيكون ناتج الجملة السابقة:
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		"احب ذهاب حديق يوم صباح رفاق "
	</p>
</blockquote>

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

<h2>
	إعداد المشروع
</h2>

<p>
	يُمكن تنزيل بيانات التدريب والقواميس والشيفرة البرمجية من <a data-fileid="91902" href="https://academy.hsoub.com/applications/core/interface/file/attachment.php?id=91902" rel="" data-fileext="zip">الملف المرفق هنا</a>.
</p>

<p>
	يحتاج تنفذ شيفرات هذه المقالة بيئةً برمجيةً <a href="https://wiki.hsoub.com/Python" rel="external">للغة بايثون</a> الإصدار 3.8. ويجب أن تتضمن هذه <a href="https://academy.hsoub.com/programming/python/%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-3-%D9%88%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%A8%D9%8A%D8%A6%D8%AA%D9%87%D8%A7-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A9-r714/" rel="">البيئة البرمجية</a> مدير الحِزم <a href="https://pypi.org/project/pip/" rel="external nofollow">pip</a> لتثبيت الحِزم، ومُنشئ البيئات الافتراضية <a href="https://docs.python.org/3/library/venv.html" rel="external nofollow">venv</a> لإنشاء بيئاتٍ افتراضيةٍ.
</p>

<p>
	نستخدم محرر الشيفرات البرمجية <a href="https://academy.hsoub.com/devops/linux/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D9%87%D9%8A%D8%A6%D8%A9-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%A7%D9%84%D9%85%D9%81%D9%83%D8%B1%D8%A9-jupyter-notebook-%D9%84%D9%84%D8%B9%D9%85%D9%84-%D9%85%D8%B9-%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-python-3-r388/" rel="">Jupyter Notebooks</a>، وهو مفيد جدًا لتجربة وتشغيل الأمثلة الخاصة بتَعَلّم الآلة بطريقةٍ تفاعليةٍ، حيث نستطيع من خلاله تشغيل كتلًا صغيرةً من الشيفرات البرمجية ورؤية النتائج بسرعة، مما يُسهّل علينا اختبار الشيفرات البرمجية وتصحيحها.
</p>

<p>
	نحتاج أولًا لتثبيت بعض التبعيات، وذلك لإنشاء مساحة عملٍ للاحتفاظ بملفاتنا قبل أن نتمكن من تطوير برنامجنا.
</p>

<p>
	نُنشئ مجلدًا جديدًا خاصًا بمشروعنا وندخل إليه هكذا:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4681_10" style=""><span class="pln">mkdir sa
cd sa</span></pre>

<p>
	نُنفذّ الأمر التالي لإنشاء البيئة الافتراضية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4681_8" style=""><span class="pln">python </span><span class="pun">-</span><span class="pln">m venv sa</span></pre>

<p>
	ومن ثم الأمر التالي في <a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%A7-%D9%87%D9%88-%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D9%84%D9%8A%D9%86%D9%83%D8%B3%D8%9F-r451/" rel="">Linux</a> لتنشيط البيئة الافتراضية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4681_12" style=""><span class="pln">source sa</span><span class="pun">/</span><span class="pln">bin</span><span class="pun">/</span><span class="pln">activate</span></pre>

<p>
	أما في Windows، فيكون أمر التنشيط:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4681_16" style=""><span class="str">"sa/Scripts/activate.bat"</span></pre>

<p>
	نستخدم إصداراتٍ محددةٍ من المكتبات اللازمة، من خلال إنشاء ملف requirements.txt في مجلد المشروع، وسيُحدِّد هذا الملف المتطلبات والإصدارات التي سنحتاج إليها.
</p>

<p>
	نفتح الملف <code>requirements.txt</code> في محرر النصوص، ونُضيف الأسطر التالية، وذلك لتحديد المكتبات التي نريدها وإصداراتها:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4681_18" style=""><span class="pln">jupyter</span><span class="pun">==</span><span class="lit">1.0</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
keras</span><span class="pun">==</span><span class="lit">2.6</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
</span><span class="typ">Keras</span><span class="pun">-</span><span class="typ">Preprocessing</span><span class="pun">==</span><span class="lit">1.1</span><span class="pun">.</span><span class="lit">2</span><span class="pln">
matplotlib</span><span class="pun">==</span><span class="lit">3.5</span><span class="pun">.</span><span class="lit">1</span><span class="pln">
nltk</span><span class="pun">==</span><span class="lit">3.6</span><span class="pun">.</span><span class="lit">5</span><span class="pln">
numpy</span><span class="pun">==</span><span class="lit">1.19</span><span class="pun">.</span><span class="lit">5</span><span class="pln">
pandas</span><span class="pun">==</span><span class="lit">1.3</span><span class="pun">.</span><span class="lit">5</span><span class="pln">
scikit</span><span class="pun">-</span><span class="pln">learn</span><span class="pun">==</span><span class="lit">1.0</span><span class="pun">.</span><span class="lit">1</span><span class="pln">
seaborn</span><span class="pun">==</span><span class="lit">0.11</span><span class="pun">.</span><span class="lit">2</span><span class="pln">
sklearn</span><span class="pun">==</span><span class="lit">0.0</span><span class="pln">
snowballstemmer</span><span class="pun">==</span><span class="lit">2.2</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
tensorflow</span><span class="pun">==</span><span class="lit">2.6</span><span class="pun">.</span><span class="lit">0</span><span class="pln">
wordcloud</span><span class="pun">==</span><span class="lit">1.8</span><span class="pun">.</span><span class="lit">1</span><span class="pln">
python</span><span class="pun">-</span><span class="pln">bidi</span><span class="pun">==</span><span class="lit">0.4</span><span class="pun">.</span><span class="lit">2</span><span class="pln">
arabic</span><span class="pun">-</span><span class="pln">reshaper</span><span class="pun">==</span><span class="lit">2.1</span><span class="pun">.</span><span class="lit">3</span></pre>

<p>
	نحفظ التغييرات التي طرأت على الملف ونخرج من محرر النصوص، ثم نُثَبت هذه المكتبات بالأمر التالي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4681_20" style=""><span class="pun">(</span><span class="pln">sa</span><span class="pun">)</span><span class="pln"> $ pip install </span><span class="pun">-</span><span class="pln">r requirements</span><span class="pun">.</span><span class="pln">txt</span></pre>

<p>
	بعد تثبيتنا لهذه التبعيات، نُصبح جاهزين لبدء العمل على مشروعنا.
</p>

<h2>
	كتابة شيفرة برنامج تحليل المشاعر في النصوص العربي
</h2>

<p>
	نُشغّل محرر<a href="https://academy.hsoub.com/programming/general/%D8%A3%D8%B3%D9%84%D9%88%D8%A8-%D9%83%D8%AA%D8%A7%D8%A8%D8%A9-%D8%A7%D9%84%D8%B4%D9%8A%D9%81%D8%B1%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A9-%D9%88%D8%AA%D8%AD%D9%82%D9%8A%D9%82-%D8%B3%D9%87%D9%88%D9%84%D8%A9-%D9%82%D8%B1%D8%A7%D8%A1%D8%AA%D9%87%D8%A7-r1307/" rel=""> الشيفرات البرمجية</a> Jupyter Notebook بمجرد اكتمال عملية التثبيت. هكذا:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4681_22" style=""><span class="pun">(</span><span class="pln">sa</span><span class="pun">)</span><span class="pln"> $ jupyter notebook</span></pre>

<p>
	ثم نُنشئ ملفًا جديدًا في داخل المحرر ونُسمّه باسم asa مثلًا.
</p>

<p>
	يجب أولًا وضع كل من الملفات التالية في مجلد المشروع:
</p>

<ul>
	<li>
		ملف التغريدات: tweets.csv.
	</li>
	<li>
		القواميس: lexicon_positive.csv و lexicon_negative.csv.
	</li>
	<li>
		ملف الخط العربي: DroidSansMono.ttf.
	</li>
</ul>
<div class="banner-container ipsBox ipsPadding">
    <div class="inner-banner-container">
        <p class="banner-heading">
            دورة الذكاء الاصطناعي
        </p>

        <p class="banner-subtitle">
            احترف برمجة الذكاء الاصطناعي AI وتحليل البيانات وتعلم كافة المعلومات التي تحتاجها لبناء نماذج ذكاء اصطناعي
            متخصصة.
        </p>

        <div>
            <a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://academy.hsoub.com/learn/artificial-intelligence" rel="">اشترك الآن</a>
        </div>
    </div>
    <div class="banner-img"> <a href="https://academy.hsoub.com/learn/artificial-intelligence" rel=""><img alt="دورة الذكاء الاصطناعي AI" src="https://academy.hsoub.com/learn/assets/images/courses/artificial-intelligence.png"></a></div>
</div>

<h3>
	تحميل البيانات
</h3>

<p>
	نبدأ أولًا بتحميل التغريدات من الملف <code>tweets.csv</code> ضمن إطار من البيانات <code>DataFrame</code> من مكتبة <code>Pandas</code> ومن ثم عرض بعضها:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4681_24" style=""><span class="kwd">import</span><span class="pln"> pandas </span><span class="kwd">as</span><span class="pln"> pd
</span><span class="com"># قراءة التغريدات وتحميلها ضمن إطار من البيانات </span><span class="pln">
tweets_data </span><span class="pun">=</span><span class="pln"> pd</span><span class="pun">.</span><span class="pln">read_csv</span><span class="pun">(</span><span class="str">'tweets.csv'</span><span class="pun">,</span><span class="pln">encoding </span><span class="pun">=</span><span class="pln"> </span><span class="str">"utf-8"</span><span class="pun">)</span><span class="pln">
tweets </span><span class="pun">=</span><span class="pln"> tweets_data</span><span class="pun">[[</span><span class="str">'tweet'</span><span class="pun">]]</span><span class="pln">
</span><span class="com"># إظهار الجزء الأعلى من إطار البيانات</span><span class="pln">
tweets</span><span class="pun">.</span><span class="pln">head</span><span class="pun">()</span></pre>

<p>
	يظهر لنا أوائل التغريدات:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="91874" href="https://academy.hsoub.com/uploads/monthly_2022_02/001.png.d2c1e881827d434a26e5dc102db293a5.png" rel="" data-fileext="png"><img alt="001.png" class="ipsImage ipsImage_thumbnailed" data-fileid="91874" data-unique="121c4qd7y" src="https://academy.hsoub.com/uploads/monthly_2022_02/001.png.d2c1e881827d434a26e5dc102db293a5.png"></a>
</p>

<p>
	نُحمّل قاموس الكلمات الموجبة positive.csv وقاموس الكلمات السالبة negative.csv:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4681_26" style=""><span class="com"># قراءة قاموس الكلمات الموجبة</span><span class="pln">
positive_data </span><span class="pun">=</span><span class="pln"> pd</span><span class="pun">.</span><span class="pln">read_csv</span><span class="pun">(</span><span class="str">'positive.csv'</span><span class="pln"> </span><span class="pun">,</span><span class="pln">encoding </span><span class="pun">=</span><span class="pln"> </span><span class="str">"utf-8"</span><span class="pun">)</span><span class="pln">
positive </span><span class="pun">=</span><span class="pln"> positive_data</span><span class="pun">[[</span><span class="str">'word'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'polarity'</span><span class="pun">]]</span><span class="pln">
</span><span class="com"># قراءة قاموس الكلمات السالبة</span><span class="pln">
negative_data </span><span class="pun">=</span><span class="pln"> pd</span><span class="pun">.</span><span class="pln">read_csv</span><span class="pun">(</span><span class="str">'negative.csv'</span><span class="pln"> </span><span class="pun">,</span><span class="pln">encoding </span><span class="pun">=</span><span class="pln"> </span><span class="str">"utf-8"</span><span class="pun">)</span><span class="pln">
negative </span><span class="pun">=</span><span class="pln"> negative_data</span><span class="pun">[[</span><span class="str">'word'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'polarity'</span><span class="pun">]]</span><span class="pln">
positive</span><span class="pun">.</span><span class="pln">head</span><span class="pun">()</span></pre>

<p>
	نُظهر مثلًا أوائل الكلمات الموجبة ونقاطها:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="91875" href="https://academy.hsoub.com/uploads/monthly_2022_02/002.png.bc072b7c61f8c6b172b9e3649ab3a2b3.png" rel="" data-fileext="png"><img alt="002.png" class="ipsImage ipsImage_thumbnailed" data-fileid="91875" data-unique="oupgt23t4" src="https://academy.hsoub.com/uploads/monthly_2022_02/002.png.bc072b7c61f8c6b172b9e3649ab3a2b3.png"></a>
</p>

<h3>
	المعالجة الأولية للنصوص
</h3>

<p>
	نستخدم فيما يلي بعض الخدمات التي توفرها المكتبة <code>nltk</code> لمعالجة اللغات الطبيعية كتوفير قائمة كلمات التوقف باللغة العربية (حوالي 700 كلمة) واستخراج الوحدات tokens من النصوص. كما نستخدم مجذع الكلمات العربية من مكتبة <code>snowballstemmer</code>.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4681_28" style=""><span class="com"># مكتبة  السلاسل النصية </span><span class="pln">
</span><span class="kwd">import</span><span class="pln"> string
</span><span class="com"># مكتبة التعابير النظامية</span><span class="pln">
</span><span class="kwd">import</span><span class="pln"> re
</span><span class="com"># مكتبة معالجة اللغات الطبيعية</span><span class="pln">
</span><span class="kwd">import</span><span class="pln"> nltk
nltk</span><span class="pun">.</span><span class="pln">download</span><span class="pun">(</span><span class="str">'punkt'</span><span class="pun">)</span><span class="pln">
nltk</span><span class="pun">.</span><span class="pln">download</span><span class="pun">(</span><span class="str">'stopwords'</span><span class="pun">)</span><span class="pln">
</span><span class="com"># مكتبة  كلمات التوقف</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> nltk</span><span class="pun">.</span><span class="pln">corpus </span><span class="kwd">import</span><span class="pln"> stopwords
</span><span class="com"># مكتبة استخراج الوحدات</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> nltk</span><span class="pun">.</span><span class="pln">tokenize </span><span class="kwd">import</span><span class="pln"> word_tokenize
</span><span class="com"># مكتبة المجذع العربي</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> snowballstemmer </span><span class="kwd">import</span><span class="pln"> stemmer
ar_stemmer </span><span class="pun">=</span><span class="pln"> stemmer</span><span class="pun">(</span><span class="str">"arabic"</span><span class="pun">)</span><span class="pln">

</span><span class="com"># دالة حذف المحارف غير اللازمة</span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> remove_chars</span><span class="pun">(</span><span class="pln">text</span><span class="pun">,</span><span class="pln"> del_chars</span><span class="pun">):</span><span class="pln">
    translator </span><span class="pun">=</span><span class="pln"> str</span><span class="pun">.</span><span class="pln">maketrans</span><span class="pun">(</span><span class="str">''</span><span class="pun">,</span><span class="pln"> </span><span class="str">''</span><span class="pun">,</span><span class="pln"> del_chars</span><span class="pun">)</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> text</span><span class="pun">.</span><span class="pln">translate</span><span class="pun">(</span><span class="pln">translator</span><span class="pun">)</span><span class="pln">

</span><span class="com"># دالة حذف المحارف المكررة</span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> remove_repeating_char</span><span class="pun">(</span><span class="pln">text</span><span class="pun">):</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> re</span><span class="pun">.</span><span class="pln">sub</span><span class="pun">(</span><span class="pln">r</span><span class="str">'(.)\1{2,}'</span><span class="pun">,</span><span class="pln"> r</span><span class="str">'\1'</span><span class="pun">,</span><span class="pln"> text</span><span class="pun">)</span><span class="pln">

</span><span class="com"># دالة تنظيف النصوص</span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> cleaningText</span><span class="pun">(</span><span class="pln">text</span><span class="pun">):</span><span class="pln">
    </span><span class="com"># حذف الأرقام</span><span class="pln">
    text </span><span class="pun">=</span><span class="pln"> re</span><span class="pun">.</span><span class="pln">sub</span><span class="pun">(</span><span class="pln">r</span><span class="str">'[0-9]+'</span><span class="pun">,</span><span class="pln"> </span><span class="str">''</span><span class="pun">,</span><span class="pln"> text</span><span class="pun">)</span><span class="pln">  
    </span><span class="com"># حذف المحارف غير اللازمة</span><span class="pln">
    </span><span class="com"># علامات الترقيم العربية</span><span class="pln">
    arabic_punctuations </span><span class="pun">=</span><span class="pln"> </span><span class="str">'''`÷×؛&lt;&gt;_()*&amp;^%][ـ،/:"؟.,'{}~¦+|!”…“–ـ'''</span><span class="pln">
    </span><span class="com"># علامات الترقيم الانكليزية</span><span class="pln">
    english_punctuations </span><span class="pun">=</span><span class="pln"> string</span><span class="pun">.</span><span class="pln">punctuation
    </span><span class="com"># دمج علامات الترقيم العربية والانكليزية</span><span class="pln">
    punctuations_list </span><span class="pun">=</span><span class="pln"> arabic_punctuations </span><span class="pun">+</span><span class="pln"> english_punctuations
    text </span><span class="pun">=</span><span class="pln"> remove_chars</span><span class="pun">(</span><span class="pln">text</span><span class="pun">,</span><span class="pln"> punctuations_list</span><span class="pun">)</span><span class="pln">
    </span><span class="com"># حذف المحارف المكررة  </span><span class="pln">
    text </span><span class="pun">=</span><span class="pln"> remove_repeating_char</span><span class="pun">(</span><span class="pln">text</span><span class="pun">)</span><span class="pln">
    </span><span class="com"># استبدال الأسطر الجديدة بفراغات  </span><span class="pln">
    text </span><span class="pun">=</span><span class="pln"> text</span><span class="pun">.</span><span class="pln">replace</span><span class="pun">(</span><span class="str">'\n'</span><span class="pun">,</span><span class="pln"> </span><span class="str">' '</span><span class="pun">)</span><span class="pln">  
    </span><span class="com"># حذف الفراغات الزائدة من اليمين واليسار   </span><span class="pln">
    text </span><span class="pun">=</span><span class="pln"> text</span><span class="pun">.</span><span class="pln">strip</span><span class="pun">(</span><span class="str">' '</span><span class="pun">)</span><span class="pln">  
    </span><span class="kwd">return</span><span class="pln"> text

</span><span class="com"># دالة تقسيم النص إلى مجموعة من الوحدات</span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> tokenizingText</span><span class="pun">(</span><span class="pln">text</span><span class="pun">):</span><span class="pln"> 
    tokens_list </span><span class="pun">=</span><span class="pln"> word_tokenize</span><span class="pun">(</span><span class="pln">text</span><span class="pun">)</span><span class="pln"> 
    </span><span class="kwd">return</span><span class="pln"> tokens_list

</span><span class="com"># دالة حذف كلمات التوقف</span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> filteringText</span><span class="pun">(</span><span class="pln">tokens_list</span><span class="pun">):</span><span class="pln">  
    </span><span class="com"># قائمة كلمات التوقف العربية</span><span class="pln">
    listStopwords </span><span class="pun">=</span><span class="pln"> set</span><span class="pun">(</span><span class="pln">stopwords</span><span class="pun">.</span><span class="pln">words</span><span class="pun">(</span><span class="str">'arabic'</span><span class="pun">))</span><span class="pln">
    filtered </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[]</span><span class="pln">
    </span><span class="kwd">for</span><span class="pln"> txt </span><span class="kwd">in</span><span class="pln"> tokens_list</span><span class="pun">:</span><span class="pln">
        </span><span class="kwd">if</span><span class="pln"> txt </span><span class="kwd">not</span><span class="pln"> </span><span class="kwd">in</span><span class="pln"> listStopwords</span><span class="pun">:</span><span class="pln">
            filtered</span><span class="pun">.</span><span class="pln">append</span><span class="pun">(</span><span class="pln">txt</span><span class="pun">)</span><span class="pln">
    tokens_list </span><span class="pun">=</span><span class="pln"> filtered 
    </span><span class="kwd">return</span><span class="pln"> tokens_list

</span><span class="com"># دالة التجذيع  </span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> stemmingText</span><span class="pun">(</span><span class="pln">tokens_list</span><span class="pun">):</span><span class="pln"> 
    tokens_list </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="pln">ar_stemmer</span><span class="pun">.</span><span class="pln">stemWord</span><span class="pun">(</span><span class="pln">word</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">for</span><span class="pln"> word </span><span class="kwd">in</span><span class="pln"> tokens_list</span><span class="pun">]</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> tokens_list

</span><span class="com"># دالة دمج قائمة من الكلمات في جملة</span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> toSentence</span><span class="pun">(</span><span class="pln">words_list</span><span class="pun">):</span><span class="pln">  
    sentence </span><span class="pun">=</span><span class="pln"> </span><span class="str">' '</span><span class="pun">.</span><span class="pln">join</span><span class="pun">(</span><span class="pln">word </span><span class="kwd">for</span><span class="pln"> word </span><span class="kwd">in</span><span class="pln"> words_list</span><span class="pun">)</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> sentence</span></pre>

<p>
	شرح الدوال التي كتبناها في الشيفرة:
</p>

<ul>
	<li>
		<code>cleaningText</code>: تحذف الأرقام وعلامات الترقيم العربية والإنكليزية من النص.
	</li>
	<li>
		<code>remove_repeating_char</code>: تحذف المحارف المكررة والتي قد يستخدمها كاتب التغريدة.
	</li>
	<li>
		<code>tokenizingText</code>: تعمل على تجزئة النص إلى قائمة من الوحدات tokens.
	</li>
	<li>
		<code>filteringText</code>: تحذف كلمات التوقف من قائمة الوحدات.
	</li>
	<li>
		<code>stemmingText</code>: تعمل على تجذيع كلمات قائمة الوحدات المتبقية.
	</li>
</ul>

<p>
	يُبين المثال التالي تجذيع بعض الكلمات المتشابهة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4681_30" style=""><span class="com"># مثال</span><span class="pln">
stem </span><span class="pun">=</span><span class="pln"> ar_stemmer</span><span class="pun">.</span><span class="pln">stemWord</span><span class="pun">(</span><span class="pln">u</span><span class="str">"رايع"</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">stem</span><span class="pun">)</span><span class="pln">
stem </span><span class="pun">=</span><span class="pln"> ar_stemmer</span><span class="pun">.</span><span class="pln">stemWord</span><span class="pun">(</span><span class="pln">u</span><span class="str">"رائع"</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">stem</span><span class="pun">)</span><span class="pln">
stem </span><span class="pun">=</span><span class="pln"> ar_stemmer</span><span class="pun">.</span><span class="pln">stemWord</span><span class="pun">(</span><span class="pln">u</span><span class="str">"رائعون"</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">stem</span><span class="pun">)</span><span class="pln">
stem </span><span class="pun">=</span><span class="pln"> ar_stemmer</span><span class="pun">.</span><span class="pln">stemWord</span><span class="pun">(</span><span class="pln">u</span><span class="str">"رائعين"</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="pun">(</span><span class="pln">stem</span><span class="pun">)</span></pre>

<p>
	يكون ناتج التنفيذ:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4681_32" style=""><span class="pun">رايع</span><span class="pln">
</span><span class="pun">رايع</span><span class="pln">
</span><span class="pun">رايع</span><span class="pln">
</span><span class="pun">رايع</span></pre>

<p>
	يُبين المثال التالي نتيجة استدعاء كل دالة من الدوال السابقة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4681_34" style=""><span class="com"># مثال</span><span class="pln">
text</span><span class="pun">=</span><span class="pln"> </span><span class="str">"!أنا أحب الذهاب إلى الحديقة، كل يووووم 9 صباحاً، مع رفاقي هؤلاء "</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">text</span><span class="pun">)</span><span class="pln">
text</span><span class="pun">=</span><span class="pln">cleaningText</span><span class="pun">(</span><span class="pln">text</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">text</span><span class="pun">)</span><span class="pln">
tokens_list</span><span class="pun">=</span><span class="pln">tokenizingText</span><span class="pun">(</span><span class="pln">text</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">tokens_list</span><span class="pun">)</span><span class="pln">
tokens_list</span><span class="pun">=</span><span class="pln">filteringText</span><span class="pun">(</span><span class="pln">tokens_list</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">tokens_list</span><span class="pun">)</span><span class="pln">
tokens_list</span><span class="pun">=</span><span class="pln">stemmingText</span><span class="pun">(</span><span class="pln">tokens_list</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">tokens_list</span><span class="pun">)</span></pre>

<p>
	يكون ناتج التنفيذ:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_4681_36" style=""><span class="pun">!أنا</span><span class="pln"> </span><span class="pun">أحب</span><span class="pln"> </span><span class="pun">الذهاب</span><span class="pln"> </span><span class="pun">إلى</span><span class="pln"> </span><span class="pun">الحديقة،</span><span class="pln"> </span><span class="pun">كل</span><span class="pln"> </span><span class="pun">يووووم</span><span class="pln"> </span><span class="lit">9</span><span class="pln"> </span><span class="pun">صباحاً،</span><span class="pln"> </span><span class="pun">مع</span><span class="pln"> </span><span class="pun">رفاقي</span><span class="pln"> </span><span class="pun">هؤلاء</span><span class="pln"> 

</span><span class="pun">أنا</span><span class="pln"> </span><span class="pun">أحب</span><span class="pln"> </span><span class="pun">الذهاب</span><span class="pln"> </span><span class="pun">إلى</span><span class="pln"> </span><span class="pun">الحديقة</span><span class="pln"> </span><span class="pun">كل</span><span class="pln"> </span><span class="pun">يوم</span><span class="pln">  </span><span class="pun">صباحاً</span><span class="pln"> </span><span class="pun">مع</span><span class="pln"> </span><span class="pun">رفاقي</span><span class="pln"> </span><span class="pun">هؤلاء</span><span class="pln">

</span><span class="pun">[</span><span class="str">'أنا'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'أحب'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'الذهاب'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'إلى'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'الحديقة'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'كل'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'يوم'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'صباحاً'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'مع'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'رفاقي'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'هؤلاء'</span><span class="pun">]</span><span class="pln">

</span><span class="pun">[</span><span class="str">'أحب'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'الذهاب'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'الحديقة'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'يوم'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'صباحاً'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'رفاقي'</span><span class="pun">]</span><span class="pln">

</span><span class="pun">[</span><span class="str">'احب'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'ذهاب'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'حديق'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'يوم'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'صباح'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'رفاق'</span><span class="pun">]</span></pre>

<p>
	تعرض الشيفرة التالية تنفيذ جميع دوال المعالجة الأولية على نصوص التغريدات ومن ثم حفظ النتائج في ملف جديد <code>tweet_clean.csv</code>. وبنفس الطريقة، نُنفذ دوال المعالجة الأولية على قاموس الكلمات الموجبة وقاموس الكلمات السالبة ونحفظ النتائج في ملفات جديدة لاستخدامها لاحقًا: <code>positive_clean.csv</code> و <code>negative_clean.csv</code>.
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_4681_38" style=""><span class="pun">#</span><span class="pln"> </span><span class="pun">المعالجة</span><span class="pln"> </span><span class="pun">الأولية</span><span class="pln"> </span><span class="pun">للتغريدات</span><span class="pln"> 
tweets</span><span class="pun">[</span><span class="str">'tweet_clean'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> tweets</span><span class="pun">[</span><span class="str">'tweet'</span><span class="pun">].</span><span class="pln">apply</span><span class="pun">(</span><span class="pln">cleaningText</span><span class="pun">)</span><span class="pln">
tweets</span><span class="pun">[</span><span class="str">'tweet_preprocessed'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> tweets</span><span class="pun">[</span><span class="str">'tweet_clean'</span><span class="pun">].</span><span class="pln">apply</span><span class="pun">(</span><span class="pln">tokenizingText</span><span class="pun">)</span><span class="pln">
tweets</span><span class="pun">[</span><span class="str">'tweet_preprocessed'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> tweets</span><span class="pun">[</span><span class="str">'tweet_preprocessed'</span><span class="pun">].</span><span class="pln">apply</span><span class="pun">(</span><span class="pln">filteringText</span><span class="pun">)</span><span class="pln">
tweets</span><span class="pun">[</span><span class="str">'tweet_preprocessed'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> tweets</span><span class="pun">[</span><span class="str">'tweet_preprocessed'</span><span class="pun">].</span><span class="pln">apply</span><span class="pun">(</span><span class="pln">stemmingText</span><span class="pun">)</span><span class="pln">

</span><span class="pun">#</span><span class="pln"> </span><span class="pun">حذف</span><span class="pln"> </span><span class="pun">التغريدات</span><span class="pln"> </span><span class="pun">المكررة</span><span class="pln">
tweets</span><span class="pun">.</span><span class="pln">drop_duplicates</span><span class="pun">(</span><span class="pln">subset </span><span class="pun">=</span><span class="pln"> </span><span class="str">'tweet_clean'</span><span class="pun">,</span><span class="pln"> inplace </span><span class="pun">=</span><span class="pln"> </span><span class="typ">True</span><span class="pun">)</span><span class="pln">
</span><span class="pun">#</span><span class="pln"> </span><span class="pun">التصدير</span><span class="pln"> </span><span class="pun">إلى</span><span class="pln"> </span><span class="pun">ملف</span><span class="pln">
tweets</span><span class="pun">.</span><span class="pln">to_csv</span><span class="pun">(</span><span class="pln">r</span><span class="str">'tweet_clean.csv'</span><span class="pun">,</span><span class="pln">encoding</span><span class="pun">=</span><span class="str">"utf-8"</span><span class="pun">,</span><span class="pln"> index </span><span class="pun">=</span><span class="pln"> </span><span class="typ">False</span><span class="pun">,</span><span class="pln"> header </span><span class="pun">=</span><span class="pln"> </span><span class="typ">True</span><span class="pun">,</span><span class="pln">index_label</span><span class="pun">=</span><span class="typ">None</span><span class="pun">)</span><span class="pln">

</span><span class="pun">#</span><span class="pln"> </span><span class="pun">معالجة</span><span class="pln"> </span><span class="pun">القاموس</span><span class="pln"> </span><span class="pun">الموجب</span><span class="pln">
positive</span><span class="pun">[</span><span class="str">'word_clean'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> positive</span><span class="pun">[</span><span class="str">'word'</span><span class="pun">].</span><span class="pln">apply</span><span class="pun">(</span><span class="pln">cleaningText</span><span class="pun">)</span><span class="pln">
positive</span><span class="pun">.</span><span class="pln">drop</span><span class="pun">([</span><span class="str">'word'</span><span class="pun">],</span><span class="pln"> axis </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> inplace </span><span class="pun">=</span><span class="pln"> </span><span class="typ">True</span><span class="pun">)</span><span class="pln">
positive</span><span class="pun">[</span><span class="str">'word_preprocessed'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> positive</span><span class="pun">[</span><span class="str">'word_clean'</span><span class="pun">].</span><span class="pln">apply</span><span class="pun">(</span><span class="pln">tokenizingText</span><span class="pun">)</span><span class="pln">
positive</span><span class="pun">[</span><span class="str">'word_preprocessed'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> positive</span><span class="pun">[</span><span class="str">'word_preprocessed'</span><span class="pun">].</span><span class="pln">apply</span><span class="pun">(</span><span class="pln">filteringText</span><span class="pun">)</span><span class="pln">
positive</span><span class="pun">[</span><span class="str">'word_preprocessed'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> positive</span><span class="pun">[</span><span class="str">'word_preprocessed'</span><span class="pun">].</span><span class="pln">apply</span><span class="pun">(</span><span class="pln">stemmingText</span><span class="pun">)</span><span class="pln">

</span><span class="pun">#</span><span class="pln"> </span><span class="pun">حذف</span><span class="pln"> </span><span class="pun">التكرار</span><span class="pln"> </span><span class="pun">والخطأ</span><span class="pln">
positive</span><span class="pun">.</span><span class="pln">drop_duplicates</span><span class="pun">(</span><span class="pln">subset </span><span class="pun">=</span><span class="pln"> </span><span class="str">'word_clean'</span><span class="pun">,</span><span class="pln"> inplace </span><span class="pun">=</span><span class="pln"> </span><span class="typ">True</span><span class="pun">)</span><span class="pln">
nan_value </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">float</span><span class="pun">(</span><span class="str">"NaN"</span><span class="pun">)</span><span class="pln">
positive</span><span class="pun">.</span><span class="pln">replace</span><span class="pun">(</span><span class="str">""</span><span class="pun">,</span><span class="pln"> nan_value</span><span class="pun">,</span><span class="pln"> inplace</span><span class="pun">=</span><span class="typ">True</span><span class="pun">)</span><span class="pln">
positive</span><span class="pun">.</span><span class="pln">dropna</span><span class="pun">(</span><span class="pln">subset</span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="str">'word_clean'</span><span class="pun">],</span><span class="pln"> inplace</span><span class="pun">=</span><span class="typ">True</span><span class="pun">)</span><span class="pln"> 

</span><span class="pun">#</span><span class="pln"> </span><span class="pun">التصدير</span><span class="pln"> </span><span class="pun">إلى</span><span class="pln"> </span><span class="pun">ملف</span><span class="pln">
positive</span><span class="pun">.</span><span class="pln">to_csv</span><span class="pun">(</span><span class="pln">r</span><span class="str">'positive_clean.csv'</span><span class="pun">,</span><span class="pln">encoding</span><span class="pun">=</span><span class="str">"utf-8"</span><span class="pun">,</span><span class="pln"> index </span><span class="pun">=</span><span class="pln"> </span><span class="typ">False</span><span class="pun">,</span><span class="pln"> header </span><span class="pun">=</span><span class="pln"> </span><span class="typ">True</span><span class="pun">,</span><span class="pln">index_label</span><span class="pun">=</span><span class="typ">None</span><span class="pun">)</span><span class="pln">

</span><span class="pun">#</span><span class="pln"> </span><span class="pun">معالجة</span><span class="pln"> </span><span class="pun">القاموس</span><span class="pln"> </span><span class="pun">السالب</span><span class="pln">
negative</span><span class="pun">[</span><span class="str">'word_clean'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> negative</span><span class="pun">[</span><span class="str">'word'</span><span class="pun">].</span><span class="pln">apply</span><span class="pun">(</span><span class="pln">cleaningText</span><span class="pun">)</span><span class="pln">
negative</span><span class="pun">.</span><span class="pln">drop</span><span class="pun">([</span><span class="str">'word'</span><span class="pun">],</span><span class="pln"> axis </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> inplace </span><span class="pun">=</span><span class="pln"> </span><span class="typ">True</span><span class="pun">)</span><span class="pln">
negative</span><span class="pun">[</span><span class="str">'word_preprocessed'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> negative</span><span class="pun">[</span><span class="str">'word_clean'</span><span class="pun">].</span><span class="pln">apply</span><span class="pun">(</span><span class="pln">tokenizingText</span><span class="pun">)</span><span class="pln">
negative</span><span class="pun">[</span><span class="str">'word_preprocessed'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> negative</span><span class="pun">[</span><span class="str">'word_preprocessed'</span><span class="pun">].</span><span class="pln">apply</span><span class="pun">(</span><span class="pln">filteringText</span><span class="pun">)</span><span class="pln">
negative</span><span class="pun">[</span><span class="str">'word_preprocessed'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> negative</span><span class="pun">[</span><span class="str">'word_preprocessed'</span><span class="pun">].</span><span class="pln">apply</span><span class="pun">(</span><span class="pln">stemmingText</span><span class="pun">)</span><span class="pln">

</span><span class="pun">#</span><span class="pln"> </span><span class="pun">حذف</span><span class="pln"> </span><span class="pun">التكرار</span><span class="pln"> </span><span class="pun">والخطأ</span><span class="pln">
negative</span><span class="pun">.</span><span class="pln">drop_duplicates</span><span class="pun">(</span><span class="pln">subset </span><span class="pun">=</span><span class="pln"> </span><span class="str">'word_clean'</span><span class="pun">,</span><span class="pln"> inplace </span><span class="pun">=</span><span class="pln"> </span><span class="typ">True</span><span class="pun">)</span><span class="pln">
negative</span><span class="pun">.</span><span class="pln">replace</span><span class="pun">(</span><span class="str">""</span><span class="pun">,</span><span class="pln"> nan_value</span><span class="pun">,</span><span class="pln"> inplace</span><span class="pun">=</span><span class="typ">True</span><span class="pun">)</span><span class="pln">
negative</span><span class="pun">.</span><span class="pln">dropna</span><span class="pun">(</span><span class="pln">subset</span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="str">'word_clean'</span><span class="pun">],</span><span class="pln"> inplace</span><span class="pun">=</span><span class="typ">True</span><span class="pun">)</span><span class="pln"> 

</span><span class="pun">#</span><span class="pln"> </span><span class="pun">التصدير</span><span class="pln"> </span><span class="pun">إلى</span><span class="pln"> </span><span class="pun">ملف</span><span class="pln">
negative</span><span class="pun">.</span><span class="pln">to_csv</span><span class="pun">(</span><span class="pln">r</span><span class="str">'negative_clean.csv'</span><span class="pun">,</span><span class="pln"> encoding</span><span class="pun">=</span><span class="str">"utf-8"</span><span class="pun">,</span><span class="pln"> index </span><span class="pun">=</span><span class="pln"> </span><span class="typ">False</span><span class="pun">,</span><span class="pln"> header </span><span class="pun">=</span><span class="pln"> </span><span class="typ">True</span><span class="pun">,</span><span class="pln">index_label</span><span class="pun">=</span><span class="typ">None</span><span class="pun">)</span></pre>

<p>
	تعرض الشيفرة التالية بناء قاموسين <code>dict</code> الأول للكلمات الموجبة والثاني للكلمات السالبة وبحيث يكون المفتاح key هو الكلمة والقيمة value هي نقاط الكلمة. يُعدّ استخدام بنية القاموس <code>dict</code> في بايثون مفيدًا جدًا للوصول المباشر إلى نقاط أي كلمة دون القيام بأي عملية بحث.
</p>

<p>
	لاحظ أننا نقرأ الكلمات الموجبة والسالبة من الملفات الجديدة ناتج المعالجة الأولية لملفات الكلمات الأصلية.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4681_40" style=""><span class="com"># التصريح عن قاموس للكلمات الموجية</span><span class="pln">
dict_positive </span><span class="pun">=</span><span class="pln"> dict</span><span class="pun">()</span><span class="pln">

</span><span class="com"># بناء قاموس الكلمات الموجبة</span><span class="pln">
myfile </span><span class="pun">=</span><span class="pln"> </span><span class="str">'positive_clean.csv'</span><span class="pln">
positive_data </span><span class="pun">=</span><span class="pln"> pd</span><span class="pun">.</span><span class="pln">read_csv</span><span class="pun">(</span><span class="pln">myfile</span><span class="pun">,</span><span class="pln"> encoding</span><span class="pun">=</span><span class="str">'utf-8'</span><span class="pun">)</span><span class="pln">
positive </span><span class="pun">=</span><span class="pln"> positive_data</span><span class="pun">[[</span><span class="str">'word_clean'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'polarity'</span><span class="pun">]]</span><span class="pln">
</span><span class="kwd">for</span><span class="pln"> i </span><span class="kwd">in</span><span class="pln"> range</span><span class="pun">(</span><span class="pln">len</span><span class="pun">(</span><span class="pln">positive</span><span class="pun">)):</span><span class="pln"> 
    dict_positive</span><span class="pun">[</span><span class="pln">positive_data</span><span class="pun">[</span><span class="str">'word_clean'</span><span class="pun">][</span><span class="pln">i</span><span class="pun">].</span><span class="pln">strip</span><span class="pun">()]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> int</span><span class="pun">(</span><span class="pln">positive_data</span><span class="pun">[</span><span class="str">'polarity'</span><span class="pun">][</span><span class="pln">i</span><span class="pun">])</span><span class="pln">

</span><span class="com"># التصريح عن قاموس للكلمات السالبة</span><span class="pln">
dict_negative </span><span class="pun">=</span><span class="pln"> dict</span><span class="pun">()</span><span class="pln">

</span><span class="com"># بناء قاموس الكلمات السالبة</span><span class="pln">
myfile </span><span class="pun">=</span><span class="pln"> </span><span class="str">'negative_clean.csv'</span><span class="pln">
negative_data </span><span class="pun">=</span><span class="pln"> pd</span><span class="pun">.</span><span class="pln">read_csv</span><span class="pun">(</span><span class="pln">myfile</span><span class="pun">,</span><span class="pln"> encoding</span><span class="pun">=</span><span class="str">'utf-8'</span><span class="pun">)</span><span class="pln">
negative </span><span class="pun">=</span><span class="pln"> negative_data</span><span class="pun">[[</span><span class="str">'word_clean'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'polarity'</span><span class="pun">]]</span><span class="pln">
</span><span class="kwd">for</span><span class="pln"> i </span><span class="kwd">in</span><span class="pln"> range</span><span class="pun">(</span><span class="pln">len</span><span class="pun">(</span><span class="pln">negative</span><span class="pun">)):</span><span class="pln">  
    dict_negative</span><span class="pun">[</span><span class="pln">negative_data</span><span class="pun">[</span><span class="str">'word_clean'</span><span class="pun">][</span><span class="pln">i</span><span class="pun">].</span><span class="pln">strip</span><span class="pun">()]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> int</span><span class="pun">(</span><span class="pln">negative_data</span><span class="pun">[</span><span class="str">'polarity'</span><span class="pun">][</span><span class="pln">i</span><span class="pun">])</span></pre>

<p>
	تقوم الدالة التالية <code>sentiment_analysis_dict_arabic</code> بحساب مجموع نقاط <code>score</code> قائمة من الكلمات وذلك بجمع نقاط الكلمات الواردة في قاموسي الكلمات الموجبة والسالبة. وفي النهاية تُعدّ قطبية polarity قائمة الكلمات موجبة <code>positive</code> إذا كان مجموع نقاطها أكبر من الصفر، وتُعدّ سالبة <code>negative</code> إذا كان مجموع نقاطها أصغر من الصفر، وإلا فإنها تكون محايدة <code>neutral</code>.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4681_44" style=""><span class="com"># دالة حساب قطبية قائمة من الكلمات       </span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> sentiment_analysis_dict_arabic</span><span class="pun">(</span><span class="pln">words_list</span><span class="pun">):</span><span class="pln">
    score </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pln">
    </span><span class="kwd">for</span><span class="pln"> word </span><span class="kwd">in</span><span class="pln"> words_list</span><span class="pun">:</span><span class="pln">
        </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">word </span><span class="kwd">in</span><span class="pln"> dict_positive</span><span class="pun">):</span><span class="pln">
            score </span><span class="pun">=</span><span class="pln"> score </span><span class="pun">+</span><span class="pln"> dict_positive</span><span class="pun">[</span><span class="pln">word</span><span class="pun">]</span><span class="pln">
    </span><span class="kwd">for</span><span class="pln"> word </span><span class="kwd">in</span><span class="pln"> words_list</span><span class="pun">:</span><span class="pln">
        </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">word </span><span class="kwd">in</span><span class="pln"> dict_negative</span><span class="pun">):</span><span class="pln">
            score </span><span class="pun">=</span><span class="pln"> score </span><span class="pun">+</span><span class="pln"> dict_negative</span><span class="pun">[</span><span class="pln">word</span><span class="pun">]</span><span class="pln">
    polarity</span><span class="pun">=</span><span class="str">''</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">score </span><span class="pun">&gt;</span><span class="pln"> </span><span class="lit">0</span><span class="pun">):</span><span class="pln">
        polarity </span><span class="pun">=</span><span class="pln"> </span><span class="str">'positive'</span><span class="pln">
    </span><span class="kwd">elif</span><span class="pln"> </span><span class="pun">(</span><span class="pln">score </span><span class="pun">&lt;</span><span class="pln"> </span><span class="lit">0</span><span class="pun">):</span><span class="pln">
        polarity </span><span class="pun">=</span><span class="pln"> </span><span class="str">'negative'</span><span class="pln">
    </span><span class="kwd">else</span><span class="pun">:</span><span class="pln">
        polarity </span><span class="pun">=</span><span class="pln"> </span><span class="str">'neutral'</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> score</span><span class="pun">,</span><span class="pln"> polarity</span></pre>

<p>
	نستخدم الدالة السابقة في حساب قطبية كل تغريدة وذلك بتنفيذ الدالة على قائمة الكلمات التي حصلنا عليها بعد المعالجة الأولية لنص التغريدة <code>tweet_preprocessed</code>. أي أنه سيكون لكل تغريدة في نهاية المطاف قطبية <code>polarity</code> موجبة أو سالبة أو محايدة وفق مجموع النقاط الحاصلة عليها <code>polarity_score</code>. نحفظ نتائج الحساب في ملف جديد tweets_<em>clean_</em>polarity.csv.
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_4681_56" style=""><span class="pun">#</span><span class="pln"> </span><span class="pun">حساب</span><span class="pln"> </span><span class="pun">قطبية</span><span class="pln"> </span><span class="pun">التغريدات</span><span class="pln"> 
results </span><span class="pun">=</span><span class="pln"> tweets</span><span class="pun">[</span><span class="str">'tweet_preprocessed'</span><span class="pun">].</span><span class="pln">apply</span><span class="pun">(</span><span class="pln">sentiment_analysis_dict_arabic</span><span class="pun">)</span><span class="pln">
results </span><span class="pun">=</span><span class="pln"> list</span><span class="pun">(</span><span class="pln">zip</span><span class="pun">(*</span><span class="pln">results</span><span class="pun">))</span><span class="pln">
tweets</span><span class="pun">[</span><span class="str">'polarity_score'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> results</span><span class="pun">[</span><span class="lit">0</span><span class="pun">]</span><span class="pln">
tweets</span><span class="pun">[</span><span class="str">'polarity'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> results</span><span class="pun">[</span><span class="lit">1</span><span class="pun">]</span><span class="pln">

</span><span class="pun">#</span><span class="pln"> </span><span class="pun">كتابة</span><span class="pln"> </span><span class="pun">النتائج</span><span class="pln"> </span><span class="pun">في</span><span class="pln"> </span><span class="pun">ملف</span><span class="pln">
tweets</span><span class="pun">.</span><span class="pln">to_csv</span><span class="pun">(</span><span class="pln">r</span><span class="str">'tweets_clean_polarity.csv'</span><span class="pun">,</span><span class="pln"> encoding</span><span class="pun">=</span><span class="str">'utf-8'</span><span class="pun">,</span><span class="pln"> index </span><span class="pun">=</span><span class="pln"> </span><span class="typ">False</span><span class="pun">,</span><span class="pln"> header </span><span class="pun">=</span><span class="pln"> </span><span class="typ">True</span><span class="pun">,</span><span class="pln">index_label</span><span class="pun">=</span><span class="typ">None</span><span class="pun">)</span></pre>

<p>
	تعرض الشيفرة التالية حساب عدد التغريدات من كل قطبية (موجبة، سالبة، محايدة) ومن ثم استخدام المكتبة <code>matplotlib</code> لرسم مخطط بياني من النوع <code>pie</code> يعرض نسب قطبية التغريدات:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_4681_54" style=""><span class="pun">#</span><span class="pln"> </span><span class="pun">رسم</span><span class="pln"> </span><span class="pun">نسب</span><span class="pln"> </span><span class="pun">قطبية</span><span class="pln"> </span><span class="pun">التغريدات</span><span class="pln">
</span><span class="kwd">import</span><span class="pln"> matplotlib</span><span class="pun">.</span><span class="pln">pyplot as plt
fig</span><span class="pun">,</span><span class="pln"> ax </span><span class="pun">=</span><span class="pln"> plt</span><span class="pun">.</span><span class="pln">subplots</span><span class="pun">(</span><span class="pln">figsize </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="lit">6</span><span class="pun">,</span><span class="pln"> </span><span class="lit">6</span><span class="pun">))</span><span class="pln">

</span><span class="pun">#</span><span class="pln"> </span><span class="pun">حساب</span><span class="pln"> </span><span class="pun">عدد</span><span class="pln"> </span><span class="pun">التغريدات</span><span class="pln"> </span><span class="pun">من</span><span class="pln"> </span><span class="pun">كل</span><span class="pln"> </span><span class="pun">قطبية</span><span class="pln">
x </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="pln">count </span><span class="kwd">for</span><span class="pln"> count in tweets</span><span class="pun">[</span><span class="str">'polarity'</span><span class="pun">].</span><span class="pln">value_counts</span><span class="pun">()]</span><span class="pln">

</span><span class="pun">#</span><span class="pln"> </span><span class="pun">تسميات</span><span class="pln"> </span><span class="pun">الرسم</span><span class="pln">
labels </span><span class="pun">=</span><span class="pln"> list</span><span class="pun">(</span><span class="pln">tweets</span><span class="pun">[</span><span class="str">'polarity'</span><span class="pun">].</span><span class="pln">value_counts</span><span class="pun">().</span><span class="pln">index</span><span class="pun">)</span><span class="pln">
explode </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="lit">0.1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">)</span><span class="pln">

</span><span class="pun">#</span><span class="pln"> </span><span class="pun">تنفيذ</span><span class="pln"> </span><span class="pun">الرسم</span><span class="pln">
ax</span><span class="pun">.</span><span class="pln">pie</span><span class="pun">(</span><span class="pln">x </span><span class="pun">=</span><span class="pln"> x</span><span class="pun">,</span><span class="pln"> labels </span><span class="pun">=</span><span class="pln"> labels</span><span class="pun">,</span><span class="pln"> autopct </span><span class="pun">=</span><span class="pln"> </span><span class="str">'%1.1f%%'</span><span class="pun">,</span><span class="pln"> explode </span><span class="pun">=</span><span class="pln"> explode</span><span class="pun">,</span><span class="pln"> textprops</span><span class="pun">={</span><span class="str">'fontsize'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">14</span><span class="pun">})</span><span class="pln">

</span><span class="pun">#</span><span class="pln"> </span><span class="pun">عنوان</span><span class="pln"> </span><span class="pun">الرسم</span><span class="pln">
ax</span><span class="pun">.</span><span class="pln">set_title</span><span class="pun">(</span><span class="str">'Tweets Polarities '</span><span class="pun">,</span><span class="pln"> fontsize </span><span class="pun">=</span><span class="pln"> </span><span class="lit">16</span><span class="pun">,</span><span class="pln"> pad </span><span class="pun">=</span><span class="pln"> </span><span class="lit">20</span><span class="pun">)</span><span class="pln">

</span><span class="pun">#</span><span class="pln"> </span><span class="pun">الإظهار</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">show</span><span class="pun">()</span></pre>

<p>
	يكون الإظهار:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="91876" href="https://academy.hsoub.com/uploads/monthly_2022_02/003.png.e06e0dcdbe54fa71894989fa9d9e69cc.png" rel="" data-fileext="png"><img alt="003.png" class="ipsImage ipsImage_thumbnailed" data-fileid="91876" data-unique="jagay77y6" style="width: 350px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_02/003.png.e06e0dcdbe54fa71894989fa9d9e69cc.png"></a>
</p>

<p>
	يُمكن الآن إظهار التغريدات الأكثر إيجابيًة باستخدام الشيفرة التالية:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_4681_52" style=""><span class="pun">#</span><span class="pln"> </span><span class="pun">طباعة</span><span class="pln"> </span><span class="pun">أكثر</span><span class="pln"> </span><span class="pun">التغريدات</span><span class="pln"> </span><span class="pun">إيجابية</span><span class="pln">
pd</span><span class="pun">.</span><span class="pln">set_option</span><span class="pun">(</span><span class="str">'display.max_colwidth'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">3000</span><span class="pun">)</span><span class="pln">
positive_tweets </span><span class="pun">=</span><span class="pln"> tweets</span><span class="pun">[</span><span class="pln">tweets</span><span class="pun">[</span><span class="str">'polarity'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="str">'positive'</span><span class="pun">]</span><span class="pln">
positive_tweets </span><span class="pun">=</span><span class="pln"> positive_tweets</span><span class="pun">[[</span><span class="str">'tweet_clean'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'polarity_score'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'polarity'</span><span class="pun">]].</span><span class="pln">sort_values</span><span class="pun">(</span><span class="pln">by </span><span class="pun">=</span><span class="pln"> </span><span class="str">'polarity_score'</span><span class="pun">,</span><span class="pln"> ascending</span><span class="pun">=</span><span class="typ">False</span><span class="pun">).</span><span class="pln">reset_index</span><span class="pun">(</span><span class="pln">drop </span><span class="pun">=</span><span class="pln"> </span><span class="typ">True</span><span class="pun">)</span><span class="pln">
positive_tweets</span><span class="pun">.</span><span class="pln">index </span><span class="pun">+=</span><span class="pln"> </span><span class="lit">1</span><span class="pln">
positive_tweets</span><span class="pun">[</span><span class="lit">0</span><span class="pun">:</span><span class="lit">10</span><span class="pun">]</span></pre>

<p>
	يكون الإظهار:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="91877" href="https://academy.hsoub.com/uploads/monthly_2022_02/004.png.284793b8b8ac88b1f958514a1d461635.png" rel="" data-fileext="png"><img alt="004.png" class="ipsImage ipsImage_thumbnailed" data-fileid="91877" data-unique="2wnp7trja" style="width: 750px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_02/004.thumb.png.687b8ec40280a8bb5589209fbc095466.png"></a>
</p>

<p>
	كما يُمكن إظهار التغريدات الأكثر سلبيًة:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_4681_59" style=""><span class="pun">#</span><span class="pln"> </span><span class="pun">طباعة</span><span class="pln"> </span><span class="pun">أكثر</span><span class="pln"> </span><span class="pun">التغريدات</span><span class="pln"> </span><span class="pun">سلبية</span><span class="pln">
pd</span><span class="pun">.</span><span class="pln">set_option</span><span class="pun">(</span><span class="str">'display.max_colwidth'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">3000</span><span class="pun">)</span><span class="pln">
negative_tweets </span><span class="pun">=</span><span class="pln"> tweets</span><span class="pun">[</span><span class="pln">tweets</span><span class="pun">[</span><span class="str">'polarity'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="str">'negative'</span><span class="pun">]</span><span class="pln">
negative_tweets </span><span class="pun">=</span><span class="pln"> negative_tweets</span><span class="pun">[[</span><span class="str">'tweet_clean'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'polarity_score'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'polarity'</span><span class="pun">]].</span><span class="pln">sort_values</span><span class="pun">(</span><span class="pln">by </span><span class="pun">=</span><span class="pln"> </span><span class="str">'polarity_score'</span><span class="pun">,</span><span class="pln"> ascending</span><span class="pun">=</span><span class="typ">True</span><span class="pun">)[</span><span class="lit">0</span><span class="pun">:</span><span class="lit">10</span><span class="pun">].</span><span class="pln">reset_index</span><span class="pun">(</span><span class="pln">drop </span><span class="pun">=</span><span class="pln"> </span><span class="typ">True</span><span class="pun">)</span><span class="pln">
negative_tweets</span><span class="pun">.</span><span class="pln">index </span><span class="pun">+=</span><span class="pln"> </span><span class="lit">1</span><span class="pln">
negative_tweets</span><span class="pun">[</span><span class="lit">0</span><span class="pun">:</span><span class="lit">10</span><span class="pun">]</span></pre>

<p>
	يكون الإظهار:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="91878" href="https://academy.hsoub.com/uploads/monthly_2022_02/005.png.86bcc0c6b5bbe9eb2685d3acf0435f60.png" rel="" data-fileext="png"><img alt="005.png" class="ipsImage ipsImage_thumbnailed" data-fileid="91878" data-unique="4fkzrodfb" style="width: 750px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_02/005.thumb.png.60bba14f1b79050067a81efb99a33b49.png"></a>
</p>

<p>
	يُمكن استخدام مكتبة سحابة الكلمات <code>WordCloud</code> لرسم مجموعة من الكلمات بشكل فني كما تُبين الشيفرة التالية:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_4681_62" style=""><span class="pun">#</span><span class="pln"> </span><span class="pun">سحابة</span><span class="pln"> </span><span class="pun">الكلمات</span><span class="pln">
from wordcloud </span><span class="kwd">import</span><span class="pln"> </span><span class="typ">WordCloud</span><span class="pln">

</span><span class="pun">#</span><span class="pln"> </span><span class="pun">مكتبة</span><span class="pln"> </span><span class="pun">للغة</span><span class="pln"> </span><span class="pun">العربية</span><span class="pln">
</span><span class="kwd">import</span><span class="pln"> arabic_reshaper
from bidi</span><span class="pun">.</span><span class="pln">algorithm </span><span class="kwd">import</span><span class="pln"> get_display

</span><span class="pun">#</span><span class="pln"> </span><span class="pun">انتقاء</span><span class="pln"> </span><span class="pun">بعض</span><span class="pln"> </span><span class="pun">الكلمات</span><span class="pln"> </span><span class="pun">المعالجة</span><span class="pln">
list_words</span><span class="pun">=</span><span class="str">''</span><span class="pln">
i</span><span class="pun">=</span><span class="lit">0</span><span class="pln">
</span><span class="kwd">for</span><span class="pln"> tweet in tweets</span><span class="pun">[</span><span class="str">'tweet_preprocessed'</span><span class="pun">]:</span><span class="pln">
    </span><span class="kwd">for</span><span class="pln"> word in tweet</span><span class="pun">:</span><span class="pln">
        i</span><span class="pun">=</span><span class="pln">i</span><span class="pun">+</span><span class="lit">1</span><span class="pln">
        </span><span class="kwd">if</span><span class="pln"> i</span><span class="pun">&gt;</span><span class="lit">100</span><span class="pun">:</span><span class="pln">
            </span><span class="kwd">break</span><span class="pln">
        list_words </span><span class="pun">+=</span><span class="pln"> </span><span class="str">' '</span><span class="pun">+(</span><span class="pln">word</span><span class="pun">)</span><span class="pln">

</span><span class="pun">#</span><span class="pln"> </span><span class="pun">ضبط</span><span class="pln"> </span><span class="pun">اللغة</span><span class="pln"> </span><span class="pun">العربية</span><span class="pln">
reshaped_text </span><span class="pun">=</span><span class="pln"> arabic_reshaper</span><span class="pun">.</span><span class="pln">reshape</span><span class="pun">(</span><span class="pln">list_words</span><span class="pun">)</span><span class="pln">
artext </span><span class="pun">=</span><span class="pln"> get_display</span><span class="pun">(</span><span class="pln">reshaped_text</span><span class="pun">)</span><span class="pln">

</span><span class="pun">#</span><span class="pln"> </span><span class="pun">إعدادات</span><span class="pln"> </span><span class="pun">سحابة</span><span class="pln"> </span><span class="pun">الكلمات</span><span class="pln">
wordcloud </span><span class="pun">=</span><span class="pln"> </span><span class="typ">WordCloud</span><span class="pun">(</span><span class="pln">font_path</span><span class="pun">=</span><span class="str">'DroidSansMono.ttf'</span><span class="pun">,</span><span class="pln"> width </span><span class="pun">=</span><span class="pln"> </span><span class="lit">600</span><span class="pun">,</span><span class="pln"> height </span><span class="pun">=</span><span class="pln"> </span><span class="lit">400</span><span class="pun">,</span><span class="pln"> background_color </span><span class="pun">=</span><span class="pln"> </span><span class="str">'black'</span><span class="pun">,</span><span class="pln"> min_font_size </span><span class="pun">=</span><span class="pln"> </span><span class="lit">10</span><span class="pun">).</span><span class="pln">generate</span><span class="pun">(</span><span class="pln">artext</span><span class="pun">)</span><span class="pln">
fig</span><span class="pun">,</span><span class="pln"> ax </span><span class="pun">=</span><span class="pln"> plt</span><span class="pun">.</span><span class="pln">subplots</span><span class="pun">(</span><span class="pln">figsize </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">6</span><span class="pun">))</span><span class="pln">

</span><span class="pun">#</span><span class="pln"> </span><span class="pun">عنوان</span><span class="pln"> </span><span class="pun">السحابة</span><span class="pln">
ax</span><span class="pun">.</span><span class="pln">set_title</span><span class="pun">(</span><span class="str">'Word Cloud of Tweets'</span><span class="pun">,</span><span class="pln"> fontsize </span><span class="pun">=</span><span class="pln"> </span><span class="lit">18</span><span class="pun">)</span><span class="pln">
ax</span><span class="pun">.</span><span class="pln">grid</span><span class="pun">(</span><span class="typ">False</span><span class="pun">)</span><span class="pln">
ax</span><span class="pun">.</span><span class="pln">imshow</span><span class="pun">((</span><span class="pln">wordcloud</span><span class="pun">))</span><span class="pln">
fig</span><span class="pun">.</span><span class="pln">tight_layout</span><span class="pun">(</span><span class="pln">pad</span><span class="pun">=</span><span class="lit">0</span><span class="pun">)</span><span class="pln">
ax</span><span class="pun">.</span><span class="pln">axis</span><span class="pun">(</span><span class="str">'off'</span><span class="pun">)</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">show</span><span class="pun">()</span></pre>

<p>
	يكون الإظهار:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="91879" href="https://academy.hsoub.com/uploads/monthly_2022_02/006.png.214a400611ecb81f78962324e410c00e.png" rel="" data-fileext="png"><img alt="006.png" class="ipsImage ipsImage_thumbnailed" data-fileid="91879" data-unique="7a1qvz5j3" style="width: 500px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_02/006.png.214a400611ecb81f78962324e410c00e.png"></a>
</p>

<p>
	تُجمّع الدالة التالية <code>words_with_sentiment</code> الكلمات الموجبة والكلمات السالبة المستخرجة من قائمة الكلمات المُمررة للدالة <code>list_words</code> في قائمتين منفصلتين الأولى للكلمات الموجبة والثانية للكلمات السالبة. تستخدم الدالة قاموسي الكلمات الموجبة والسالبة السابقين.
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_4681_68" style=""><span class="pun">#</span><span class="pln"> </span><span class="pun">تجميع</span><span class="pln"> </span><span class="pun">الكلمات</span><span class="pln"> </span><span class="pun">الموجبة</span><span class="pln"> </span><span class="pun">والكلمات</span><span class="pln"> </span><span class="pun">السالبة</span><span class="pln">
def words_with_sentiment</span><span class="pun">(</span><span class="pln">list_words</span><span class="pun">):</span><span class="pln">
    positive_words</span><span class="pun">=[]</span><span class="pln">
    negative_words</span><span class="pun">=[]</span><span class="pln">
    </span><span class="kwd">for</span><span class="pln"> word in list_words</span><span class="pun">:</span><span class="pln">
        score_pos </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pln">
        score_neg </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pln">
        </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">word in dict_positive</span><span class="pun">):</span><span class="pln">
            score_pos </span><span class="pun">=</span><span class="pln"> dict_positive</span><span class="pun">[</span><span class="pln">word</span><span class="pun">]</span><span class="pln">
        </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">word in dict_negative</span><span class="pun">):</span><span class="pln">
            score_neg </span><span class="pun">=</span><span class="pln"> dict_negative</span><span class="pun">[</span><span class="pln">word</span><span class="pun">]</span><span class="pln">

        </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">score_pos </span><span class="pun">+</span><span class="pln"> score_neg </span><span class="pun">&gt;</span><span class="pln"> </span><span class="lit">0</span><span class="pun">):</span><span class="pln">
            positive_words</span><span class="pun">.</span><span class="pln">append</span><span class="pun">(</span><span class="pln">word</span><span class="pun">)</span><span class="pln">
        elif </span><span class="pun">(</span><span class="pln">score_pos </span><span class="pun">+</span><span class="pln"> score_neg </span><span class="pun">&lt;</span><span class="pln"> </span><span class="lit">0</span><span class="pun">):</span><span class="pln">
            negative_words</span><span class="pun">.</span><span class="pln">append</span><span class="pun">(</span><span class="pln">word</span><span class="pun">)</span><span class="pln">

    </span><span class="kwd">return</span><span class="pln"> positive_words</span><span class="pun">,</span><span class="pln"> negative_words</span></pre>

<p>
	نستخدم الدالة السابقة في الشيفرة التالية لاستخراج قائمة الكلمات الموجبة وقائمة الكلمات السالبة من التغريدات، ومن ثم إنشاء سحابتي كلمات لكل منهما لعرض الكلمات الموجبة والكلمات السالبة بشكل فني:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_4681_70" style=""><span class="pun">#</span><span class="pln"> </span><span class="pun">سحابة</span><span class="pln"> </span><span class="pun">الكلمات</span><span class="pln"> </span><span class="pun">الموجبة</span><span class="pln"> </span><span class="pun">والسالبة</span><span class="pln">
</span><span class="pun">#</span><span class="pln"> </span><span class="pun">فرز</span><span class="pln"> </span><span class="pun">الكلمات</span><span class="pln"> </span><span class="pun">الموجبة</span><span class="pln"> </span><span class="pun">والسالبة</span><span class="pln">
sentiment_words </span><span class="pun">=</span><span class="pln"> tweets</span><span class="pun">[</span><span class="str">'tweet_preprocessed'</span><span class="pun">].</span><span class="pln">apply</span><span class="pun">(</span><span class="pln">words_with_sentiment</span><span class="pun">)</span><span class="pln">
sentiment_words </span><span class="pun">=</span><span class="pln"> list</span><span class="pun">(</span><span class="pln">zip</span><span class="pun">(*</span><span class="pln">sentiment_words</span><span class="pun">))</span><span class="pln">

</span><span class="pun">#</span><span class="pln"> </span><span class="pun">قائمة</span><span class="pln"> </span><span class="pun">الكلمات</span><span class="pln"> </span><span class="pun">الموجبة</span><span class="pln">
positive_words </span><span class="pun">=</span><span class="pln"> sentiment_words</span><span class="pun">[</span><span class="lit">0</span><span class="pun">]</span><span class="pln">

</span><span class="pun">#</span><span class="pln"> </span><span class="pun">قائمة</span><span class="pln"> </span><span class="pun">الكلمات</span><span class="pln"> </span><span class="pun">السالبة</span><span class="pln">
negative_words </span><span class="pun">=</span><span class="pln"> sentiment_words</span><span class="pun">[</span><span class="lit">1</span><span class="pun">]</span><span class="pln">

</span><span class="pun">#</span><span class="pln"> </span><span class="pun">سحابة</span><span class="pln"> </span><span class="pun">الكلمات</span><span class="pln"> </span><span class="pun">الموجبة</span><span class="pln">
fig</span><span class="pun">,</span><span class="pln"> ax </span><span class="pun">=</span><span class="pln"> plt</span><span class="pun">.</span><span class="pln">subplots</span><span class="pun">(</span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln">figsize </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="lit">12</span><span class="pun">,</span><span class="pln"> </span><span class="lit">10</span><span class="pun">))</span><span class="pln">
list_words_postive</span><span class="pun">=</span><span class="str">''</span><span class="pln">
</span><span class="kwd">for</span><span class="pln"> row_word in positive_words</span><span class="pun">:</span><span class="pln">
    </span><span class="kwd">for</span><span class="pln"> word in row_word</span><span class="pun">:</span><span class="pln">
        list_words_postive </span><span class="pun">+=</span><span class="pln"> </span><span class="str">' '</span><span class="pun">+(</span><span class="pln">word</span><span class="pun">)</span><span class="pln">
reshaped_text </span><span class="pun">=</span><span class="pln"> arabic_reshaper</span><span class="pun">.</span><span class="pln">reshape</span><span class="pun">(</span><span class="pln">list_words_postive</span><span class="pun">)</span><span class="pln">
artext </span><span class="pun">=</span><span class="pln"> get_display</span><span class="pun">(</span><span class="pln">reshaped_text</span><span class="pun">)</span><span class="pln">

wordcloud_positive </span><span class="pun">=</span><span class="pln"> </span><span class="typ">WordCloud</span><span class="pun">(</span><span class="pln">font_path</span><span class="pun">=</span><span class="str">'DroidSansMono.ttf'</span><span class="pun">,</span><span class="pln">width </span><span class="pun">=</span><span class="pln"> </span><span class="lit">800</span><span class="pun">,</span><span class="pln"> height </span><span class="pun">=</span><span class="pln"> </span><span class="lit">600</span><span class="pun">,</span><span class="pln"> background_color </span><span class="pun">=</span><span class="pln"> </span><span class="str">'black'</span><span class="pun">,</span><span class="pln"> colormap </span><span class="pun">=</span><span class="pln"> </span><span class="str">'Greens'</span><span class="pln">
                               </span><span class="pun">,</span><span class="pln"> min_font_size </span><span class="pun">=</span><span class="pln"> </span><span class="lit">10</span><span class="pun">).</span><span class="pln">generate</span><span class="pun">(</span><span class="pln">artext</span><span class="pun">)</span><span class="pln">
ax</span><span class="pun">[</span><span class="lit">0</span><span class="pun">].</span><span class="pln">set_title</span><span class="pun">(</span><span class="str">' Positive Words'</span><span class="pun">,</span><span class="pln"> fontsize </span><span class="pun">=</span><span class="pln"> </span><span class="lit">14</span><span class="pun">)</span><span class="pln">
ax</span><span class="pun">[</span><span class="lit">0</span><span class="pun">].</span><span class="pln">grid</span><span class="pun">(</span><span class="typ">False</span><span class="pun">)</span><span class="pln">
ax</span><span class="pun">[</span><span class="lit">0</span><span class="pun">].</span><span class="pln">imshow</span><span class="pun">((</span><span class="pln">wordcloud_positive</span><span class="pun">))</span><span class="pln">
fig</span><span class="pun">.</span><span class="pln">tight_layout</span><span class="pun">(</span><span class="pln">pad</span><span class="pun">=</span><span class="lit">0</span><span class="pun">)</span><span class="pln">
ax</span><span class="pun">[</span><span class="lit">0</span><span class="pun">].</span><span class="pln">axis</span><span class="pun">(</span><span class="str">'off'</span><span class="pun">)</span><span class="pln">

</span><span class="pun">#</span><span class="pln"> </span><span class="pun">سحابة</span><span class="pln"> </span><span class="pun">الكلمات</span><span class="pln"> </span><span class="pun">السالبة</span><span class="pln">
list_words_negative</span><span class="pun">=</span><span class="str">''</span><span class="pln">
</span><span class="kwd">for</span><span class="pln"> row_word in negative_words</span><span class="pun">:</span><span class="pln">
    </span><span class="kwd">for</span><span class="pln"> word in row_word</span><span class="pun">:</span><span class="pln">
        list_words_negative </span><span class="pun">+=</span><span class="pln"> </span><span class="str">' '</span><span class="pun">+(</span><span class="pln">word</span><span class="pun">)</span><span class="pln">
reshaped_text </span><span class="pun">=</span><span class="pln"> arabic_reshaper</span><span class="pun">.</span><span class="pln">reshape</span><span class="pun">(</span><span class="pln">list_words_negative</span><span class="pun">)</span><span class="pln">
artext </span><span class="pun">=</span><span class="pln"> get_display</span><span class="pun">(</span><span class="pln">reshaped_text</span><span class="pun">)</span><span class="pln">

wordcloud_negative </span><span class="pun">=</span><span class="pln"> </span><span class="typ">WordCloud</span><span class="pun">(</span><span class="pln">font_path</span><span class="pun">=</span><span class="str">'DroidSansMono.ttf'</span><span class="pun">,</span><span class="pln">width </span><span class="pun">=</span><span class="pln"> </span><span class="lit">800</span><span class="pun">,</span><span class="pln"> height </span><span class="pun">=</span><span class="pln"> </span><span class="lit">600</span><span class="pun">,</span><span class="pln"> background_color </span><span class="pun">=</span><span class="pln"> </span><span class="str">'black'</span><span class="pun">,</span><span class="pln"> colormap </span><span class="pun">=</span><span class="pln"> </span><span class="str">'Reds'</span><span class="pln">
                               </span><span class="pun">,</span><span class="pln"> min_font_size </span><span class="pun">=</span><span class="pln"> </span><span class="lit">10</span><span class="pun">).</span><span class="pln">generate</span><span class="pun">(</span><span class="pln">artext</span><span class="pun">)</span><span class="pln">
ax</span><span class="pun">[</span><span class="lit">1</span><span class="pun">].</span><span class="pln">set_title</span><span class="pun">(</span><span class="str">'Negative Words'</span><span class="pun">,</span><span class="pln"> fontsize </span><span class="pun">=</span><span class="pln"> </span><span class="lit">14</span><span class="pun">)</span><span class="pln">
ax</span><span class="pun">[</span><span class="lit">1</span><span class="pun">].</span><span class="pln">grid</span><span class="pun">(</span><span class="typ">False</span><span class="pun">)</span><span class="pln">
ax</span><span class="pun">[</span><span class="lit">1</span><span class="pun">].</span><span class="pln">imshow</span><span class="pun">((</span><span class="pln">wordcloud_negative</span><span class="pun">))</span><span class="pln">
fig</span><span class="pun">.</span><span class="pln">tight_layout</span><span class="pun">(</span><span class="pln">pad</span><span class="pun">=</span><span class="lit">0</span><span class="pun">)</span><span class="pln">
ax</span><span class="pun">[</span><span class="lit">1</span><span class="pun">].</span><span class="pln">axis</span><span class="pun">(</span><span class="str">'off'</span><span class="pun">)</span><span class="pln">

plt</span><span class="pun">.</span><span class="pln">show</span><span class="pun">()</span></pre>

<p>
	يكون الإظهار:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="91880" href="https://academy.hsoub.com/uploads/monthly_2022_02/007.png.27ced59577cb77f3d333c80cdbd9a94c.png" rel="" data-fileext="png"><img alt="007.png" class="ipsImage ipsImage_thumbnailed" data-fileid="91880" data-unique="i1vdgx82u" style="width: 700px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_02/007.png.27ced59577cb77f3d333c80cdbd9a94c.png"></a>
</p>

<h2>
	تحويل النصوص إلى أشعة رقمية
</h2>

<p>
	لا تقبل بنى تعلم الآلة النصوص كمدخلات لها، بل تحتاج إلى أشعة رقمية كمدخلات، لذا نستخدم الشيفرة التالية لتحويل الشعاع النصي لكل تغريده <code>tweet_preprocessed</code> إلى شعاع رقمي:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_4681_73" style=""><span class="pun">#</span><span class="pln"> </span><span class="pun">تحويل</span><span class="pln"> </span><span class="pun">التغريدات</span><span class="pln"> </span><span class="pun">إلى</span><span class="pln"> </span><span class="pun">أشعة</span><span class="pln"> </span><span class="pun">رقمية</span><span class="pln">
from keras</span><span class="pun">.</span><span class="pln">preprocessing</span><span class="pun">.</span><span class="pln">text </span><span class="kwd">import</span><span class="pln"> </span><span class="typ">Tokenizer</span><span class="pln">
from keras</span><span class="pun">.</span><span class="pln">preprocessing</span><span class="pun">.</span><span class="pln">sequence </span><span class="kwd">import</span><span class="pln"> pad_sequences

</span><span class="pun">#</span><span class="pln"> </span><span class="pun">تركيب</span><span class="pln"> </span><span class="pun">جمل</span><span class="pln"> </span><span class="pun">التغريدات</span><span class="pln"> </span><span class="pun">من</span><span class="pln"> </span><span class="pun">المفردات</span><span class="pln"> </span><span class="pun">المعالجة</span><span class="pln">
sentences </span><span class="pun">=</span><span class="pln"> tweets</span><span class="pun">[</span><span class="str">'tweet_preprocessed'</span><span class="pun">].</span><span class="pln">apply</span><span class="pun">(</span><span class="pln">toSentence</span><span class="pun">)</span><span class="pln">
print</span><span class="pun">(</span><span class="pln">sentences</span><span class="pun">.</span><span class="pln">values</span><span class="pun">[</span><span class="lit">25</span><span class="pun">])</span><span class="pln"> 
max_words </span><span class="pun">=</span><span class="pln"> </span><span class="lit">5000</span><span class="pln">
max_len </span><span class="pun">=</span><span class="pln"> </span><span class="lit">50</span><span class="pln">

</span><span class="pun">#</span><span class="pln">   </span><span class="pun">التصريح</span><span class="pln"> </span><span class="pun">عن</span><span class="pln"> </span><span class="pun">المجزئ</span><span class="pln"> 
</span><span class="pun">#</span><span class="pln">   </span><span class="pun">مع</span><span class="pln"> </span><span class="pun">تحديد</span><span class="pln"> </span><span class="pun">عدد</span><span class="pln"> </span><span class="pun">الكلمات</span><span class="pln"> </span><span class="pun">التي</span><span class="pln"> </span><span class="pun">ستبقى</span><span class="pln"> 
</span><span class="pun">#</span><span class="pln">  </span><span class="pun">بالاعتماد</span><span class="pln"> </span><span class="pun">على</span><span class="pln"> </span><span class="pun">تواترها</span><span class="pln"> 
tokenizer </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Tokenizer</span><span class="pun">(</span><span class="pln">num_words</span><span class="pun">=</span><span class="pln">max_words </span><span class="pun">)</span><span class="pln">

</span><span class="pun">#</span><span class="pln"> </span><span class="pun">ملائمة</span><span class="pln"> </span><span class="pun">المجزئ</span><span class="pln"> </span><span class="pun">لنصوص</span><span class="pln"> </span><span class="pun">التغريدات</span><span class="pln">
tokenizer</span><span class="pun">.</span><span class="pln">fit_on_texts</span><span class="pun">(</span><span class="pln">sentences</span><span class="pun">.</span><span class="pln">values</span><span class="pun">)</span><span class="pln">

</span><span class="pun">#</span><span class="pln"> </span><span class="pun">تحويل</span><span class="pln"> </span><span class="pun">النص</span><span class="pln"> </span><span class="pun">إلى</span><span class="pln"> </span><span class="pun">قائمة</span><span class="pln"> </span><span class="pun">من</span><span class="pln"> </span><span class="pun">الأرقام</span><span class="pln">
S </span><span class="pun">=</span><span class="pln"> tokenizer</span><span class="pun">.</span><span class="pln">texts_to_sequences</span><span class="pun">(</span><span class="pln">sentences</span><span class="pun">.</span><span class="pln">values</span><span class="pun">)</span><span class="pln">
print</span><span class="pun">(</span><span class="pln">S</span><span class="pun">[</span><span class="lit">0</span><span class="pun">])</span><span class="pln"> 

</span><span class="pun">#</span><span class="pln"> </span><span class="pun">توحيد</span><span class="pln"> </span><span class="pun">أطوال</span><span class="pln"> </span><span class="pun">الأشعة</span><span class="pln">
X </span><span class="pun">=</span><span class="pln"> pad_sequences</span><span class="pun">(</span><span class="pln">S</span><span class="pun">,</span><span class="pln"> maxlen</span><span class="pun">=</span><span class="pln">max_len</span><span class="pun">)</span><span class="pln">
print</span><span class="pun">(</span><span class="pln">X</span><span class="pun">[</span><span class="lit">0</span><span class="pun">])</span><span class="pln"> 
X</span><span class="pun">.</span><span class="pln">shape</span></pre>

<p>
	نقاط في الشيفرة السابقة لشرحها:
</p>

<ul>
	<li>
		يُحدّد المتغير <code>max_words</code> عدد الكلمات الأعظمي التي سيتم الاحتفاظ بها حيث يُحسب تواتر كل كلمة في كل النصوص ومن ثم تُرتب حسب تواترها (المرتبة الأولى للكلمة ذات التواتر الأكبر). ستُهمل الكلمات ذات المرتبة أكبر من <code>max_words</code>.
	</li>
	<li>
		يُحدّد المتغير <code>max_len</code> طول الشعاع الرقمي النهائي. إذا كان طول الشعاع الرقمي الموافق لنص أقل من <code>max_len</code> تُضاف أصفار للشعاع حتى يُصبح طوله مساويًا إلى <code>max_len</code>. أما إذا كان طوله أكبر يُقتطع جزءًا منه ليُصبح طوله مساويًا إلى <code>max_len</code>.
	</li>
	<li>
		تقوم الدالة <code>fit_on_texts(sentences.values)‎</code> بملائمة المُجزء tokenizer لنصوص جمل التغريدات أي حساب تواتر الكلمات والاحتفاظ بالكلمات ذات التواتر أكبر أو يساوي <code>max_words</code>.
	</li>
</ul>

<p>
	نطبع في الشيفرة السابقة، بهدف التوضيح، ناتج كل مرحلة. اخترنا مثلًا شعاع التغريدة 25 بعد المعالجة:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_4681_75" style=""><span class="pun">[مكان</span><span class="pln"> </span><span class="pun">جميل</span><span class="pln"> </span><span class="pun">انصح</span><span class="pln"> </span><span class="pun">زيار</span><span class="pln"> </span><span class="pun">رسوم</span><span class="pln"> </span><span class="pun">دخول]</span></pre>

<p>
	تكون نتيجة تحويل الشعاع السابق النصي إلى شعاع من الأرقام:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_4681_77" style=""><span class="pun">[</span><span class="lit">246</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1401</span><span class="pun">,</span><span class="pln"> </span><span class="lit">467</span><span class="pun">,</span><span class="pln"> </span><span class="lit">19</span><span class="pun">,</span><span class="pln"> </span><span class="lit">87</span><span class="pun">,</span><span class="pln"> </span><span class="lit">17</span><span class="pun">,</span><span class="pln"> </span><span class="lit">74</span><span class="pun">,</span><span class="pln"> </span><span class="lit">515</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2602</span><span class="pun">,</span><span class="pln"> </span><span class="lit">330</span><span class="pun">,</span><span class="pln"> </span><span class="lit">218</span><span class="pun">,</span><span class="pln"> </span><span class="lit">579</span><span class="pun">,</span><span class="pln"> </span><span class="lit">507</span><span class="pun">,</span><span class="pln"> </span><span class="lit">465</span><span class="pun">,</span><span class="pln"> </span><span class="lit">270</span><span class="pun">,</span><span class="pln"> </span><span class="lit">45</span><span class="pun">,</span><span class="pln"> </span><span class="lit">54</span><span class="pun">,</span><span class="pln"> </span><span class="lit">343</span><span class="pun">,</span><span class="pln"> </span><span class="lit">587</span><span class="pun">,</span><span class="pln"> </span><span class="lit">7</span><span class="pun">,</span><span class="pln"> </span><span class="lit">33</span><span class="pun">,</span><span class="pln"> </span><span class="lit">58</span><span class="pun">,</span><span class="pln"> </span><span class="lit">434</span><span class="pun">,</span><span class="pln"> </span><span class="lit">30</span><span class="pun">,</span><span class="pln"> </span><span class="lit">74</span><span class="pun">,</span><span class="pln"> </span><span class="lit">144</span><span class="pun">,</span><span class="pln"> </span><span class="lit">233</span><span class="pun">,</span><span class="pln"> </span><span class="lit">451</span><span class="pun">,</span><span class="pln"> </span><span class="lit">468</span><span class="pun">]</span></pre>

<p>
	وبعد عملية توحيد الطول يكون الشعاع الرقمي النهائي الناتج:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_4681_79" style=""><span class="pun">[</span><span class="pln">   </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">    </span><span class="lit">0</span><span class="pln">  </span><span class="lit">246</span><span class="pln"> </span><span class="lit">1401</span><span class="pln">  </span><span class="lit">467</span><span class="pln">   </span><span class="lit">19</span><span class="pln">   </span><span class="lit">87</span><span class="pln">   </span><span class="lit">17</span><span class="pln">   </span><span class="lit">74</span><span class="pln">  </span><span class="lit">515</span><span class="pln"> </span><span class="lit">2602</span><span class="pln">  </span><span class="lit">330</span><span class="pln">  </span><span class="lit">218</span><span class="pln">  </span><span class="lit">579</span><span class="pln">  </span><span class="lit">507</span><span class="pln">  </span><span class="lit">465</span><span class="pln">  </span><span class="lit">270</span><span class="pln">   </span><span class="lit">45</span><span class="pln">   </span><span class="lit">54</span><span class="pln">  </span><span class="lit">343</span><span class="pln">  </span><span class="lit">587</span><span class="pln">    </span><span class="lit">7</span><span class="pln">   </span><span class="lit">33</span><span class="pln">   </span><span class="lit">58</span><span class="pln">  </span><span class="lit">434</span><span class="pln">   </span><span class="lit">30</span><span class="pln">   </span><span class="lit">74</span><span class="pln">  </span><span class="lit">144</span><span class="pln">  </span><span class="lit">233</span><span class="pln">  </span><span class="lit">451</span><span class="pln">  </span><span class="lit">468</span><span class="pun">]</span></pre>

<h2>
	تجهيز دخل وخرج الشبكة العصبية
</h2>

<p>
	تعرض الشيفرة التالية حساب شعاع الخرج أولًا، حيث نقوم بترميز القطبيات الثلاث إلى 0 للسالبة و1 للمحايدة و2 للموجبة. نستخدم الدالة <code>train_test_split</code> لتقسيم البيانات المتاحة إلى 80% منها لعملية التدريب و20% لعملية الاختبار وحساب مقاييس الأداء:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4681_86" style=""><span class="com"># ترميز الخرج</span><span class="pln">
polarity_encode </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="str">'negative'</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="str">'neutral'</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="str">'positive'</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="lit">2</span><span class="pun">}</span><span class="pln">

</span><span class="com"># توليد شعاع الخرج</span><span class="pln">
y </span><span class="pun">=</span><span class="pln"> tweets</span><span class="pun">[</span><span class="str">'polarity'</span><span class="pun">].</span><span class="pln">map</span><span class="pun">(</span><span class="pln">polarity_encode</span><span class="pun">).</span><span class="pln">values

</span><span class="com"># مكنبة تقسيم البيانات إلى تدريب واختبار</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">model_selection </span><span class="kwd">import</span><span class="pln"> train_test_split

</span><span class="com"># تقسيم البيانات إلى تدريب واختبار</span><span class="pln">
X_train</span><span class="pun">,</span><span class="pln"> X_test</span><span class="pun">,</span><span class="pln"> y_train</span><span class="pun">,</span><span class="pln"> y_test </span><span class="pun">=</span><span class="pln"> train_test_split</span><span class="pun">(</span><span class="pln">X</span><span class="pun">,</span><span class="pln"> y</span><span class="pun">,</span><span class="pln"> test_size </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.2</span><span class="pun">,</span><span class="pln"> random_state </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">X_train</span><span class="pun">.</span><span class="pln">shape</span><span class="pun">,</span><span class="pln"> y_train</span><span class="pun">.</span><span class="pln">shape</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">X_test</span><span class="pun">.</span><span class="pln">shape</span><span class="pun">,</span><span class="pln"> y_test</span><span class="pun">.</span><span class="pln">shape</span><span class="pun">)</span></pre>

<p>
	نطبع في الشيفرة السابقة حجوم أشعة الدخل والخرج للتدريب وللاختبار:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4681_84" style=""><span class="pun">(</span><span class="lit">16428</span><span class="pun">,</span><span class="pln"> </span><span class="lit">50</span><span class="pun">)</span><span class="pln"> </span><span class="pun">(</span><span class="lit">16428</span><span class="pun">,)</span><span class="pln"> 

</span><span class="pun">(</span><span class="lit">4107</span><span class="pun">,</span><span class="pln"> </span><span class="lit">50</span><span class="pun">)</span><span class="pln"> </span><span class="pun">(</span><span class="lit">4107</span><span class="pun">,)</span></pre>

<h2>
	نموذج الشبكة العصبية المتعلم
</h2>

<p>
	تُعدّ المكتبة <code>Keras</code> من أهم مكتبات بايثون التي توفر بناء شبكات عصبية لمسائل <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D9%85%D9%81%D8%A7%D9%87%D9%8A%D9%85-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-r1009/" rel="">التعلم الآلي</a>.
</p>

<p>
	تعرض الشيفرة التالية التصريح عن دالة بناء نموذج التعلّم <code>create_model</code> مع إعطاء جميع المعاملات المترفعة قيمًا ابتدائية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4681_88" style=""><span class="com"># تضمين النموذج التسلسلي</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> keras</span><span class="pun">.</span><span class="pln">models </span><span class="kwd">import</span><span class="pln"> </span><span class="typ">Sequential</span><span class="pln">

</span><span class="com"># تضمين  الطبقات اللازمة</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> keras</span><span class="pun">.</span><span class="pln">layers </span><span class="kwd">import</span><span class="pln"> </span><span class="typ">Embedding</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Dense</span><span class="pun">,</span><span class="pln"> LSTM

</span><span class="com"># دوال التحسين</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> tensorflow</span><span class="pun">.</span><span class="pln">keras</span><span class="pun">.</span><span class="pln">optimizers </span><span class="kwd">import</span><span class="pln"> </span><span class="typ">Adam</span><span class="pun">,</span><span class="pln"> </span><span class="typ">RMSprop</span><span class="pln"> 

</span><span class="com"># التصريح عن دالة إنشاء نموذج التعلم</span><span class="pln">
</span><span class="com"># مع إعطاء قيم أولية للمعاملات المترفعة</span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> create_model</span><span class="pun">(</span><span class="pln">embed_dim </span><span class="pun">=</span><span class="pln"> </span><span class="lit">32</span><span class="pun">,</span><span class="pln"> hidden_unit </span><span class="pun">=</span><span class="pln"> </span><span class="lit">16</span><span class="pun">,</span><span class="pln"> dropout_rate </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.2</span><span class="pun">,</span><span class="pln"> optimizers </span><span class="pun">=</span><span class="pln"> </span><span class="typ">RMSprop</span><span class="pun">,</span><span class="pln"> learning_rate </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.001</span><span class="pun">):</span><span class="pln">
    </span><span class="com"># التصريح عن نموذج تسلسلي</span><span class="pln">
    model </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Sequential</span><span class="pun">()</span><span class="pln">
    </span><span class="com"># طبقة التضمين</span><span class="pln">
    model</span><span class="pun">.</span><span class="pln">add</span><span class="pun">(</span><span class="typ">Embedding</span><span class="pun">(</span><span class="pln">input_dim </span><span class="pun">=</span><span class="pln"> max_words</span><span class="pun">,</span><span class="pln"> output_dim </span><span class="pun">=</span><span class="pln"> embed_dim</span><span class="pun">,</span><span class="pln"> input_length </span><span class="pun">=</span><span class="pln"> max_len</span><span class="pun">))</span><span class="pln">
    </span><span class="com"># LSTM</span><span class="pln">
    model</span><span class="pun">.</span><span class="pln">add</span><span class="pun">(</span><span class="pln">LSTM</span><span class="pun">(</span><span class="pln">units </span><span class="pun">=</span><span class="pln"> hidden_unit </span><span class="pun">,</span><span class="pln">dropout</span><span class="pun">=</span><span class="pln">dropout_rate</span><span class="pun">))</span><span class="pln">
    </span><span class="com"># الطبقة الأخيرة</span><span class="pln">
    model</span><span class="pun">.</span><span class="pln">add</span><span class="pun">(</span><span class="typ">Dense</span><span class="pun">(</span><span class="pln">units </span><span class="pun">=</span><span class="pln"> </span><span class="lit">3</span><span class="pun">,</span><span class="pln"> activation </span><span class="pun">=</span><span class="pln"> </span><span class="str">'softmax'</span><span class="pun">))</span><span class="pln">
    </span><span class="com"># بناء النموذج</span><span class="pln">
    model</span><span class="pun">.</span><span class="pln">compile</span><span class="pun">(</span><span class="pln">loss </span><span class="pun">=</span><span class="pln"> </span><span class="str">'sparse_categorical_crossentropy'</span><span class="pun">,</span><span class="pln"> optimizer </span><span class="pun">=</span><span class="pln"> optimizers</span><span class="pun">(</span><span class="pln">learning_rate </span><span class="pun">=</span><span class="pln"> learning_rate</span><span class="pun">),</span><span class="pln"> metrics </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="str">'accuracy'</span><span class="pun">])</span><span class="pln">
    </span><span class="com"># طباعة ملخص النموذج</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="pln">model</span><span class="pun">.</span><span class="pln">summary</span><span class="pun">())</span><span class="pln">

    </span><span class="kwd">return</span><span class="pln"> model</span></pre>

<p>
	نستخدم من أجل مسألتنا نموذج شبكة عصبية تسلسلي يتألف من ثلاث طبقات:
</p>

<h3>
	الطبقة الأولى: طبقة التضمين Embedding
</h3>

<p>
	نستخدم هذه الطبقة لتوليد ترميز مكثف للكلمات dense word encoding مما يُساهم في تحسين عملية التعلم. نطلب تحويل الشعاع الذي طوله <code>input_length</code> (في حالتنا 50) والذي يحوي قيم ضمن المجال <code>input_dim</code> (من 1 إلى 5000 في مثالنا) إلى شعاع من القيم ضمن المجال <code>output_dim</code> (مثلًا 32 قيمة).
</p>

<h3>
	الطبقة الثانية LSTM
</h3>

<p>
	يُحدّد المعامل المترفع <code>units</code> عدد الوحدات المخفية لهذه الطبقة. يُساهم المعامل <code>dropout</code> في معايرة الشبكة خلال التدريب حيث يقوم بإيقاف تشغيل الوحدات المخفية بشكل عشوائي أثناء التدريب، وبهذه الطريقة لا تعتمد الشبكة بنسبة 100٪ على جميع الخلايا العصبية الخاصة بها، وبدلاً من ذلك، تُجبر نفسها على العثور على أنماط أكثر أهمية في البيانات من أجل زيادة المقياس الذي تحاول تحسينه (الدقة مثلًا).
</p>

<h3>
	الطبقة الثالثة Dense
</h3>

<p>
	يُحدّد المعامل <code>units</code> حجم الخرج لهذه الطبقة (3 في حالتنا: 0 سالبة، 1 محايدة، 2 موجبة) ويُبين الشكل التالي ملخص النموذج:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="91881" href="https://academy.hsoub.com/uploads/monthly_2022_02/008.png.bf0b6e35c638a85c8cabbaf301eafac5.png" rel="" data-fileext="png"><img alt="008.png" class="ipsImage ipsImage_thumbnailed" data-fileid="91881" data-unique="chz3q42ck" style="width: 550px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_02/008.png.bf0b6e35c638a85c8cabbaf301eafac5.png"></a>
</p>

<h2>
	معايرة المعاملات الفائقة وصولا لنموذج أمثلي
</h2>

<p>
	يُمكن الوصول لنموذج تعلم أمثلي بمعايرة معاملاته الفائقة وفق معطيات المشروع. لنُبين أولًا الفرق بين المعاملات الفائقة لنموذج والمعاملات الأخرى له:
</p>

<ul>
	<li>
		المعاملات الفائقة hyperparameters: هي إعدادات خوارزمية التعلّم قبل التدريب (والتي وضعها مصممو الخوارزمية) .
	</li>
	<li>
		المعاملات parameters: هي المعاملات التي يتعلّمها النموذج أثناء التدريب مثل أوزان الشبكة العصبية.
	</li>
</ul>

<p>
	تؤثر عملية معايرة المعاملات الفائقة على أداء النموذج لاسيما لجهة التوزان المطلوب بين مشكلة قلة التخصيص underfitting ومشكلة فرط التخصيص overfitting واللتان تؤديان إلى نموذج غير قادر على تعميم أمثلة التدريب وبالتالي لن يتمكن من التصنيف مع معطيات جديدة (يُمكن العودة <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-%D8%A7%D9%84%D8%AA%D8%AD%D8%AF%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%B1%D8%A6%D9%8A%D8%B3%D9%8A%D8%A9-%D9%88%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D9%88%D8%B3%D8%B9-%D9%81%D9%8A-%D8%A7%D9%84%D9%85%D8%AC%D8%A7%D9%84-r1010/" rel="">للرابط</a> من أكاديمية حسوب للمزيد من التفصيل حول هاتين المشكلتين).
</p>

<p>
	تظهر مشكلة قلة التخصيص عندما لا يكون للنموذج درجات حرية كافية ليتعلّم الربط بين الميزات والهدف، وبالتالي يكون له انحياز كبير نحو قيم معينة للهدف. يُمكن تصحيح قلة التخصيص بجعل النموذج أكثر تعقيدًا. أما مشكلة فرط التخصيص فتظهر عندما يقوم النموذج بتخزين بيانات التدريب فيكون له بالتالي تباين كبير والذي يُمكن تصحيحه بالحد من تعقيد النموذج باستخدام التسوية regularization.
</p>

<p>
	تكمن المشكلة في معايرة المعاملات الفائقة بأن قيمها المثلى تختلف من مسألة لأخرى! وبالتالي، فإن الطريقة الوحيدة للوصول لهذه القيم المثلى هي تجريب قيم مختلفة مع كل مجموعة بيانات تدريب جديدة.
</p>

<p>
	يوفر Scikit-Learn العديد من الطرق لتقويم المعاملات الفائقة وبالتالي سنعتمد في مشروعنا عليها دون أن نُعقّد الأمور أكثر.
</p>

<h3>
	البحث الشبكي مع التقييم المتقاطع
</h3>

<p>
	تُدعى الطريقة التي سنستخدمها في إيجاد القيم المثلى بالبحث الشبكي مع التقويم المتقاطع grid search with cross validation:
</p>

<ul>
	<li>
		البحث الشبكي grid search: نُعرّف شبكة grid من بعض القيم المُمكنة ومن ثم نولد كل التركيبات المُمكنة بينها.
	</li>
	<li>
		التقييم المتقاطع cross validation: وهو الطريقة المستخدمة لتقييم مجموعة قيم مُحدّدة للمعاملات الفائقة. عوضًا عن تقسيم البيانات إلى بيانات للتدريب وبيانات للتقييم مما يُخفّض من البيانات التي يُمكن لنا استخدامها للتدريب، نستخدم التقييم المتقاطع مع عدد محدّد من الحاويات K-Fold. تُقسم بيانات التدريب إلى عدد K من الحاويات ومن ثم نقوم بتكرار ما يلي K مرة: في كل مرة نقوم بتدريب النموذج مع بيانات K-1 حاوية ومن ثم تقويمه مع بيانات الحاوية K. في النهاية، يكون مقياس الأداء النهائي هو متوسط الخطأ لكل التكرارات.
	</li>
</ul>

<p>
	يُمكن تلخيص خطوات البحث الشبكي مع التقييم المتقاطع كما يلي:
</p>

<ol>
	<li>
		إعداد شبكة من المعاملات الفائقة.
	</li>
	<li>
		توليد كل تركيبات قيم المعاملات الفائقة.
	</li>
	<li>
		إنشاء نموذج لكل تركيب من القيم.
	</li>
	<li>
		تقييم النموذج باستخدام التقويم المتقاطع.
	</li>
	<li>
		اختيار تركيب قيم المعاملات ذو الأداء الأفضل.
	</li>
</ol>

<p>
	بالطبع، لن نقوم ببرمجة هذه الخطوات لأن الكائن <code>GridSearchCV</code> في Scikit-Learn يقوم بكل ذلك (يجب ملاحظة أن تنفيذ الشيفرة قد يستغرق بعض الوقت: حوالي الساعة على حاسوب ذو مواصفات عالية):
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_4681_92" style=""><span class="pln">from sklearn</span><span class="pun">.</span><span class="pln">model_selection </span><span class="kwd">import</span><span class="pln"> </span><span class="typ">GridSearchCV</span><span class="pln">
from keras</span><span class="pun">.</span><span class="pln">wrappers</span><span class="pun">.</span><span class="pln">scikit_learn </span><span class="kwd">import</span><span class="pln"> </span><span class="typ">KerasClassifier</span><span class="pln">

</span><span class="pun">#</span><span class="pln"> </span><span class="pun">حساب</span><span class="pln"> </span><span class="pun">القيم</span><span class="pln"> </span><span class="pun">الأمثلية</span><span class="pln"> </span><span class="pun">للمعاملات</span><span class="pln"> </span><span class="pun">المترفعة</span><span class="pln">
model </span><span class="pun">=</span><span class="pln"> </span><span class="typ">KerasClassifier</span><span class="pun">(</span><span class="pln">build_fn </span><span class="pun">=</span><span class="pln"> create_model</span><span class="pun">,</span><span class="pln"> epochs </span><span class="pun">=</span><span class="pln"> </span><span class="lit">25</span><span class="pun">,</span><span class="pln"> batch_size</span><span class="pun">=</span><span class="lit">128</span><span class="pun">)</span><span class="pln"> 

</span><span class="pun">#</span><span class="pln"> </span><span class="pun">بعض</span><span class="pln"> </span><span class="pun">القيم</span><span class="pln"> </span><span class="pun">الممكنة</span><span class="pln"> </span><span class="pun">للمعاملات</span><span class="pln"> </span><span class="pun">المترفعة</span><span class="pln">   
embed_dim </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="lit">32</span><span class="pun">,</span><span class="pln"> </span><span class="lit">64</span><span class="pun">]</span><span class="pln">
hidden_unit </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="lit">16</span><span class="pun">,</span><span class="pln"> </span><span class="lit">32</span><span class="pun">,</span><span class="pln"> </span><span class="lit">64</span><span class="pun">]</span><span class="pln">
dropout_rate </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="lit">0.2</span><span class="pun">]</span><span class="pln">
optimizers </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="typ">Adam</span><span class="pun">,</span><span class="pln"> </span><span class="typ">RMSprop</span><span class="pun">]</span><span class="pln">
learning_rate </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="lit">0.01</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0.001</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0.0001</span><span class="pun">]</span><span class="pln">
epochs </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="lit">10</span><span class="pun">,</span><span class="pln"> </span><span class="lit">15</span><span class="pun">,</span><span class="pln">  </span><span class="lit">25</span><span class="pln"> </span><span class="pun">]</span><span class="pln">
batch_size </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="lit">128</span><span class="pun">,</span><span class="pln"> </span><span class="lit">256</span><span class="pun">]</span><span class="pln">
param_grid </span><span class="pun">=</span><span class="pln"> dict</span><span class="pun">(</span><span class="pln">embed_dim </span><span class="pun">=</span><span class="pln"> embed_dim</span><span class="pun">,</span><span class="pln"> hidden_unit </span><span class="pun">=</span><span class="pln"> hidden_unit</span><span class="pun">,</span><span class="pln"> dropout_rate </span><span class="pun">=</span><span class="pln"> dropout_rate</span><span class="pun">,</span><span class="pln">
                learning_rate </span><span class="pun">=</span><span class="pln"> learning_rate</span><span class="pun">,</span><span class="pln"> optimizers </span><span class="pun">=</span><span class="pln"> optimizers</span><span class="pun">,</span><span class="pln"> epochs </span><span class="pun">=</span><span class="pln"> epochs</span><span class="pun">,</span><span class="pln"> batch_size </span><span class="pun">=</span><span class="pln"> batch_size</span><span class="pun">)</span><span class="pln">

</span><span class="pun">#</span><span class="pln"> </span><span class="pun">تقويم</span><span class="pln"> </span><span class="pun">النموذج</span><span class="pln"> </span><span class="pun">لاختيار</span><span class="pln"> </span><span class="pun">أفضل</span><span class="pln"> </span><span class="pun">القيم</span><span class="pln">
grid </span><span class="pun">=</span><span class="pln"> </span><span class="typ">GridSearchCV</span><span class="pun">(</span><span class="pln">estimator </span><span class="pun">=</span><span class="pln"> model</span><span class="pun">,</span><span class="pln"> param_grid </span><span class="pun">=</span><span class="pln"> param_grid</span><span class="pun">,</span><span class="pln"> cv </span><span class="pun">=</span><span class="pln"> </span><span class="lit">3</span><span class="pun">)</span><span class="pln">
grid_result </span><span class="pun">=</span><span class="pln"> grid</span><span class="pun">.</span><span class="pln">fit</span><span class="pun">(</span><span class="pln">X_train</span><span class="pun">,</span><span class="pln"> y_train</span><span class="pun">)</span><span class="pln">

results </span><span class="pun">=</span><span class="pln"> pd</span><span class="pun">.</span><span class="typ">DataFrame</span><span class="pun">()</span><span class="pln">
results</span><span class="pun">[</span><span class="str">'means'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> grid_result</span><span class="pun">.</span><span class="pln">cv_results_</span><span class="pun">[</span><span class="str">'mean_test_score'</span><span class="pun">]</span><span class="pln">
results</span><span class="pun">[</span><span class="str">'stds'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> grid_result</span><span class="pun">.</span><span class="pln">cv_results_</span><span class="pun">[</span><span class="str">'std_test_score'</span><span class="pun">]</span><span class="pln">
results</span><span class="pun">[</span><span class="str">'params'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> grid_result</span><span class="pun">.</span><span class="pln">cv_results_</span><span class="pun">[</span><span class="str">'params'</span><span class="pun">]</span><span class="pln">
print</span><span class="pun">(</span><span class="str">"Best: %f using %s"</span><span class="pln"> </span><span class="pun">%</span><span class="pln"> </span><span class="pun">(</span><span class="pln">grid_result</span><span class="pun">.</span><span class="pln">best_score_</span><span class="pun">,</span><span class="pln"> grid_result</span><span class="pun">.</span><span class="pln">best_params_</span><span class="pun">))</span><span class="pln">

</span><span class="pun">#</span><span class="pln"> </span><span class="pun">حفظ</span><span class="pln"> </span><span class="pun">النتائج</span><span class="pln">
results</span><span class="pun">.</span><span class="pln">to_csv</span><span class="pun">(</span><span class="pln">r</span><span class="str">'gridsearchcv_results.csv'</span><span class="pun">,</span><span class="pln"> index </span><span class="pun">=</span><span class="pln"> </span><span class="typ">False</span><span class="pun">,</span><span class="pln"> header </span><span class="pun">=</span><span class="pln"> </span><span class="typ">True</span><span class="pun">)</span><span class="pln">
results</span><span class="pun">.</span><span class="pln">sort_values</span><span class="pun">(</span><span class="pln">by</span><span class="pun">=</span><span class="str">'means'</span><span class="pun">,</span><span class="pln"> ascending </span><span class="pun">=</span><span class="pln"> </span><span class="typ">False</span><span class="pun">).</span><span class="pln">reset_index</span><span class="pun">(</span><span class="pln">drop</span><span class="pun">=</span><span class="typ">True</span><span class="pun">)</span></pre>

<p>
	يُبين خرج الشيفرة السابقة أفضل القيم للمعاملات المترفعة:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_4681_94" style=""><span class="typ">Best</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.898588</span><span class="pln"> using </span><span class="pun">{</span><span class="str">'batch_size'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">256</span><span class="pun">,</span><span class="pln"> </span><span class="str">'dropout_rate'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.2</span><span class="pun">,</span><span class="pln"> </span><span class="str">'embed_dim'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">32</span><span class="pun">,</span><span class="pln"> </span><span class="str">'epochs'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">10</span><span class="pun">,</span><span class="pln"> </span><span class="str">'hidden_unit'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">64</span><span class="pun">,</span><span class="pln"> </span><span class="str">'learning_rate'</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.001</span><span class="pun">,</span><span class="pln"> </span><span class="str">'optimizers'</span><span class="pun">:</span><span class="pln"> </span><span class="pun">&lt;</span><span class="kwd">class</span><span class="pln"> </span><span class="str">'keras.optimizer_v2.adam.Adam'</span><span class="pun">&gt;}</span></pre>

<p>
	نحفظ نتائج حساب المعاملات الأمثلية في الملف <code>gridsearchcv_results.csv</code>.
</p>

<p>
	يُمكن معاينة هذه القيم:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_4681_96" style=""><span class="pun">#</span><span class="pln"> </span><span class="pun">قراءة</span><span class="pln"> </span><span class="pun">نتائج</span><span class="pln"> </span><span class="pun">معايرة</span><span class="pln"> </span><span class="pun">المعاملات</span><span class="pln"> </span><span class="pun">المترفعة</span><span class="pln">
results </span><span class="pun">=</span><span class="pln"> pd</span><span class="pun">.</span><span class="pln">read_csv</span><span class="pun">(</span><span class="str">'gridsearchcv_results.csv'</span><span class="pun">)</span><span class="pln">
results</span><span class="pun">.</span><span class="pln">sort_values</span><span class="pun">(</span><span class="pln">by</span><span class="pun">=</span><span class="str">'means'</span><span class="pun">,</span><span class="pln"> ascending </span><span class="pun">=</span><span class="pln"> </span><span class="typ">False</span><span class="pun">).</span><span class="pln">reset_index</span><span class="pun">(</span><span class="pln">drop</span><span class="pun">=</span><span class="typ">True</span><span class="pun">)</span><span class="pln">
print </span><span class="pun">(</span><span class="pln">results</span><span class="pun">)</span></pre>

<p>
	يكون الخرج:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="91885" href="https://academy.hsoub.com/uploads/monthly_2022_02/012.png.c78c3628070338236b74b8e8c07c9904.png" rel="" data-fileext="png"><img alt="012.png" class="ipsImage ipsImage_thumbnailed" data-fileid="91885" data-unique="thtujs77l" style="width: 850px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_02/012.thumb.png.fab65f5d73b8ea8a7ef3e98ecd6f4c8c.png"></a>
</p>

<h3>
	حساب أوزان الصفوف
</h3>

<p>
	يُمكن أن نلاحظ أن عدد التغريدات ذات القطبية الموجبة (73% من التغريدات) تطغى على عدد التغريدات السلبية (13%) والتغريدات المحايدة (13%) مما قد يؤدي إلى انحراف نتائج التعلم نحو القطبية الموجبة. يُمكن تلافي ذلك عن طريق الموازنة بين هذه الصفوف الثلاثة.
</p>

<p>
	نحسب في الشيفرة التالية عدد التغريدات الموجبة والسالبة والمحايدة ونسبها:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4681_99" style=""><span class="com"># حساب أوزان القطبيات</span><span class="pln">
posCount</span><span class="pun">=</span><span class="lit">0</span><span class="pln">
negCount</span><span class="pun">=</span><span class="lit">0</span><span class="pln">
neuCount</span><span class="pun">=</span><span class="lit">0</span><span class="pln">

</span><span class="com"># حساب عدد التغريدات الموجبة والسالبة والمحايدة</span><span class="pln">
</span><span class="kwd">for</span><span class="pln"> index</span><span class="pun">,</span><span class="pln"> row </span><span class="kwd">in</span><span class="pln"> tweets</span><span class="pun">.</span><span class="pln">iterrows</span><span class="pun">():</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> row</span><span class="pun">[</span><span class="str">'polarity'</span><span class="pun">]==</span><span class="str">'negative'</span><span class="pun">:</span><span class="pln">
        negCount</span><span class="pun">=</span><span class="pln">negCount</span><span class="pun">+</span><span class="lit">1</span><span class="pln">
    </span><span class="kwd">elif</span><span class="pln"> row</span><span class="pun">[</span><span class="str">'polarity'</span><span class="pun">]==</span><span class="str">'positive'</span><span class="pun">:</span><span class="pln">
        posCount</span><span class="pun">=</span><span class="pln">posCount</span><span class="pun">+</span><span class="lit">1</span><span class="pln">
    </span><span class="kwd">else</span><span class="pun">:</span><span class="pln">
        neuCount</span><span class="pun">=</span><span class="pln">neuCount</span><span class="pun">+</span><span class="lit">1</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">negCount</span><span class="pun">,</span><span class="pln">  neuCount</span><span class="pun">,</span><span class="pln"> posCount</span><span class="pun">)</span><span class="pln">        
total</span><span class="pun">=</span><span class="pln">posCount</span><span class="pun">+</span><span class="pln"> negCount</span><span class="pun">+</span><span class="pln">  neuCount

</span><span class="com"># حساب النسب</span><span class="pln">
weight_for_0 </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="lit">1</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> negCount</span><span class="pun">)</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="pun">(</span><span class="pln">total </span><span class="pun">/</span><span class="pln"> </span><span class="lit">3.0</span><span class="pun">)</span><span class="pln">
weight_for_1 </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="lit">1</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> neuCount</span><span class="pun">)</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="pun">(</span><span class="pln">total </span><span class="pun">/</span><span class="pln"> </span><span class="lit">3.0</span><span class="pun">)</span><span class="pln">
weight_for_2 </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="lit">1</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> posCount</span><span class="pun">)</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="pun">(</span><span class="pln">total </span><span class="pun">/</span><span class="pln"> </span><span class="lit">3.0</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">weight_for_0</span><span class="pun">,</span><span class="pln"> weight_for_1</span><span class="pun">,</span><span class="pln"> weight_for_2</span><span class="pun">)</span><span class="pln">

class_weight </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="lit">0</span><span class="pun">:</span><span class="pln"> weight_for_0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">:</span><span class="pln"> weight_for_1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">:</span><span class="pln">weight_for_2</span><span class="pun">}</span></pre>

<p>
	يكون ناتج طباعة هذه الأوزان ما يلي (لا حظ الوزن الأصغر للتغريدات الموجبة):
</p>

<pre class="ipsCode prettyprint lang-ruby prettyprinted" id="ips_uid_4681_101" style=""><span class="lit">2.4954429456799123</span><span class="pln"> </span><span class="lit">2.504573728503476</span><span class="pln"> </span><span class="lit">0.45454545454545453</span></pre>

<h3>
	بناء نموذج التعلم النهائي
</h3>

<p>
	نستخدم الدالة <code>KerasClassifier</code> من <code>scikit</code> لبناء المُصنف مع الدالة السابقة <code>create_model</code> :
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4681_103" style=""><span class="com"># مكتبة التصنيف</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> keras</span><span class="pun">.</span><span class="pln">wrappers</span><span class="pun">.</span><span class="pln">scikit_learn </span><span class="kwd">import</span><span class="pln"> </span><span class="typ">KerasClassifier</span><span class="pln">

</span><span class="com"># إنشاء النموذج مع قيم المعاملات المترفعة الأمثلية</span><span class="pln">

model </span><span class="pun">=</span><span class="pln"> </span><span class="typ">KerasClassifier</span><span class="pun">(</span><span class="pln">build_fn </span><span class="pun">=</span><span class="pln"> create_model</span><span class="pun">,</span><span class="pln">
                        </span><span class="com"># معاملات النموذج</span><span class="pln">
                        dropout_rate </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.2</span><span class="pun">,</span><span class="pln">
                        embed_dim </span><span class="pun">=</span><span class="pln"> </span><span class="lit">32</span><span class="pun">,</span><span class="pln">
                        hidden_unit </span><span class="pun">=</span><span class="pln"> </span><span class="lit">64</span><span class="pun">,</span><span class="pln">
                        optimizers </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Adam</span><span class="pun">,</span><span class="pln">
                        learning_rate </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.001</span><span class="pun">,</span><span class="pln">
                        </span><span class="com"># معاملات التدريب</span><span class="pln">
                        epochs</span><span class="pun">=</span><span class="lit">10</span><span class="pun">,</span><span class="pln"> 
                        batch_size</span><span class="pun">=</span><span class="lit">256</span><span class="pun">,</span><span class="pln">
                        </span><span class="com"># نسبة بيانات التقييم</span><span class="pln">
                        validation_split </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.1</span><span class="pun">)</span><span class="pln">

</span><span class="com"># ملائمة النموذج مع بيانات التدريب</span><span class="pln">
</span><span class="com"># مع موازنة الصفوف الثلاثة</span><span class="pln">
model_prediction </span><span class="pun">=</span><span class="pln"> model</span><span class="pun">.</span><span class="pln">fit</span><span class="pun">(</span><span class="pln">X_train</span><span class="pun">,</span><span class="pln"> y_train</span><span class="pun">,</span><span class="pln"> class_weight</span><span class="pun">=</span><span class="pln">class_weight</span><span class="pun">)</span></pre>

<p>
	يُمكن الآن رسم منحني الدقة accuracy لكل من بيانات التدريب والتقييم (لاحظ أننا في الشيفرة السابقة احتفاظنا بنسبة 10% من بيانات التدريب للتقييم):
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4681_105" style=""><span class="com"># معاينة دقة النموذج</span><span class="pln">
</span><span class="com"># التدريب والتقييم</span><span class="pln">
fig</span><span class="pun">,</span><span class="pln"> ax </span><span class="pun">=</span><span class="pln"> plt</span><span class="pun">.</span><span class="pln">subplots</span><span class="pun">(</span><span class="pln">figsize </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="lit">10</span><span class="pun">,</span><span class="pln"> </span><span class="lit">4</span><span class="pun">))</span><span class="pln">
ax</span><span class="pun">.</span><span class="pln">plot</span><span class="pun">(</span><span class="pln">model_prediction</span><span class="pun">.</span><span class="pln">history</span><span class="pun">[</span><span class="str">'accuracy'</span><span class="pun">],</span><span class="pln"> label </span><span class="pun">=</span><span class="pln"> </span><span class="str">'train accuracy'</span><span class="pun">)</span><span class="pln">
ax</span><span class="pun">.</span><span class="pln">plot</span><span class="pun">(</span><span class="pln">model_prediction</span><span class="pun">.</span><span class="pln">history</span><span class="pun">[</span><span class="str">'val_accuracy'</span><span class="pun">],</span><span class="pln"> label </span><span class="pun">=</span><span class="pln"> </span><span class="str">'val accuracy'</span><span class="pun">)</span><span class="pln">
ax</span><span class="pun">.</span><span class="pln">set_title</span><span class="pun">(</span><span class="str">'Model Accuracy'</span><span class="pun">)</span><span class="pln">
ax</span><span class="pun">.</span><span class="pln">set_xlabel</span><span class="pun">(</span><span class="str">'Epoch'</span><span class="pun">)</span><span class="pln">
ax</span><span class="pun">.</span><span class="pln">set_ylabel</span><span class="pun">(</span><span class="str">'Accuracy'</span><span class="pun">)</span><span class="pln">
ax</span><span class="pun">.</span><span class="pln">legend</span><span class="pun">(</span><span class="pln">loc </span><span class="pun">=</span><span class="pln"> </span><span class="str">'upper left'</span><span class="pun">)</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">show</span><span class="pun">()</span></pre>

<p>
	يكون للمنحني الشكل التالي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="91882" href="https://academy.hsoub.com/uploads/monthly_2022_02/009.png.6602fe88b2b86d9eedff9c40e5bcd1d8.png" rel="" data-fileext="png"><img alt="009.png" class="ipsImage ipsImage_thumbnailed" data-fileid="91882" data-unique="cn3exc92h" style="width: 600px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_02/009.png.6602fe88b2b86d9eedff9c40e5bcd1d8.png"></a>
</p>

<h3>
	حساب مقاييس الأداء
</h3>

<p>
	يُمكن الآن حساب مقاييس الأداء المعروفة في مسائل التصنيف (الصحة Accuracy، الدقة Precision، الاستذكار Recall، المقياس F1) للنموذج المتعلم باستخدام الشيفرة التالية:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4681_108" style=""><span class="com"># مقاييس الأداء</span><span class="pln">

</span><span class="com"># مقياس الصحة</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">metrics </span><span class="kwd">import</span><span class="pln"> accuracy_score 

</span><span class="com"># مقياس الدقة</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">metrics </span><span class="kwd">import</span><span class="pln"> precision_score

</span><span class="com"># مقياس الاستذكار</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">metrics </span><span class="kwd">import</span><span class="pln"> recall_score

</span><span class="com"># f1</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">metrics </span><span class="kwd">import</span><span class="pln"> f1_score

</span><span class="com"># مصفوفة الارتباك</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">metrics </span><span class="kwd">import</span><span class="pln"> confusion_matrix

</span><span class="com"># تصنيف بيانات الاختبار</span><span class="pln">
y_pred </span><span class="pun">=</span><span class="pln"> model</span><span class="pun">.</span><span class="pln">predict</span><span class="pun">(</span><span class="pln">X_test</span><span class="pun">)</span><span class="pln">

</span><span class="com"># حساب مقاييس الأداء</span><span class="pln">
accuracy </span><span class="pun">=</span><span class="pln"> accuracy_score</span><span class="pun">(</span><span class="pln">y_test</span><span class="pun">,</span><span class="pln"> y_pred</span><span class="pun">)</span><span class="pln">
precision</span><span class="pun">=</span><span class="pln">precision_score</span><span class="pun">(</span><span class="pln">y_test</span><span class="pun">,</span><span class="pln"> y_pred </span><span class="pun">,</span><span class="pln"> average</span><span class="pun">=</span><span class="str">'weighted'</span><span class="pun">)</span><span class="pln">
recall</span><span class="pun">=</span><span class="pln"> recall_score</span><span class="pun">(</span><span class="pln">y_test</span><span class="pun">,</span><span class="pln"> y_pred</span><span class="pun">,</span><span class="pln"> zero_division</span><span class="pun">=</span><span class="lit">1</span><span class="pun">,</span><span class="pln"> average</span><span class="pun">=</span><span class="str">'weighted'</span><span class="pun">)</span><span class="pln">
f1</span><span class="pun">=</span><span class="pln"> f1_score</span><span class="pun">(</span><span class="pln">y_test</span><span class="pun">,</span><span class="pln"> y_pred</span><span class="pun">,</span><span class="pln"> zero_division</span><span class="pun">=</span><span class="lit">1</span><span class="pun">,</span><span class="pln">  average</span><span class="pun">=</span><span class="str">'weighted'</span><span class="pun">)</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="str">'Model Accuracy on Test Data:'</span><span class="pun">,</span><span class="pln"> accuracy</span><span class="pun">*</span><span class="lit">100</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="str">'Model Precision on Test Data:'</span><span class="pun">,</span><span class="pln"> precision</span><span class="pun">*</span><span class="lit">100</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="str">'Model Recall on Test Data:'</span><span class="pun">,</span><span class="pln"> recall</span><span class="pun">*</span><span class="lit">100</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="str">'Model F1 on Test Data:'</span><span class="pun">,</span><span class="pln"> f1</span><span class="pun">*</span><span class="lit">100</span><span class="pun">)</span><span class="pln">

confusion_matrix</span><span class="pun">(</span><span class="pln">y_test</span><span class="pun">,</span><span class="pln"> y_pred</span><span class="pun">)</span></pre>

<p>
	تكون النتائج (لاحظ ارتفاع جميع المقاييس مما يعني جودة المُصنف):
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4681_110" style=""><span class="typ">Model</span><span class="pln"> </span><span class="typ">Accuracy</span><span class="pln"> on </span><span class="typ">Test</span><span class="pln"> </span><span class="typ">Data</span><span class="pun">:</span><span class="pln"> </span><span class="lit">90.1144387630874</span><span class="pln"> 

</span><span class="typ">Model</span><span class="pln"> </span><span class="typ">Precision</span><span class="pln"> on </span><span class="typ">Test</span><span class="pln"> </span><span class="typ">Data</span><span class="pun">:</span><span class="pln"> </span><span class="lit">90.90281584915091</span><span class="pln"> 

</span><span class="typ">Model</span><span class="pln"> </span><span class="typ">Recall</span><span class="pln"> on </span><span class="typ">Test</span><span class="pln"> </span><span class="typ">Data</span><span class="pun">:</span><span class="pln"> </span><span class="lit">90.1144387630874</span><span class="pln"> 

</span><span class="typ">Model</span><span class="pln"> F1 on </span><span class="typ">Test</span><span class="pln"> </span><span class="typ">Data</span><span class="pun">:</span><span class="pln"> </span><span class="lit">90.32645671662543</span><span class="pln">

array</span><span class="pun">([[</span><span class="pln"> </span><span class="lit">366</span><span class="pun">,</span><span class="pln">  </span><span class="lit">129</span><span class="pun">,</span><span class="pln">   </span><span class="lit">24</span><span class="pun">],</span><span class="pln">
       </span><span class="pun">[</span><span class="pln">  </span><span class="lit">53</span><span class="pun">,</span><span class="pln">  </span><span class="lit">444</span><span class="pun">,</span><span class="pln">   </span><span class="lit">62</span><span class="pun">],</span><span class="pln">
       </span><span class="pun">[</span><span class="pln">  </span><span class="lit">20</span><span class="pun">,</span><span class="pln">  </span><span class="lit">118</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2891</span><span class="pun">]],</span><span class="pln"> dtype</span><span class="pun">=</span><span class="pln">int64</span><span class="pun">)</span></pre>

<p>
	يُمكن رسم مصفوفة الارتباك confusion matrix بشكل أوضح باستخدام المكتبة <code>seaborn</code>:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4681_112" style=""><span class="com"># رسم مصفوفة الارتباك</span><span class="pln">
</span><span class="kwd">import</span><span class="pln"> seaborn </span><span class="kwd">as</span><span class="pln"> sns
sns</span><span class="pun">.</span><span class="pln">set</span><span class="pun">(</span><span class="pln">style </span><span class="pun">=</span><span class="pln"> </span><span class="str">'whitegrid'</span><span class="pun">)</span><span class="pln">

fig</span><span class="pun">,</span><span class="pln"> ax </span><span class="pun">=</span><span class="pln"> plt</span><span class="pun">.</span><span class="pln">subplots</span><span class="pun">(</span><span class="pln">figsize </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="lit">8</span><span class="pun">,</span><span class="lit">6</span><span class="pun">))</span><span class="pln">
sns</span><span class="pun">.</span><span class="pln">heatmap</span><span class="pun">(</span><span class="pln">confusion_matrix</span><span class="pun">(</span><span class="pln">y_true </span><span class="pun">=</span><span class="pln"> y_test</span><span class="pun">,</span><span class="pln"> y_pred </span><span class="pun">=</span><span class="pln"> y_pred</span><span class="pun">),</span><span class="pln"> fmt </span><span class="pun">=</span><span class="pln"> </span><span class="str">'g'</span><span class="pun">,</span><span class="pln"> annot </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">True</span><span class="pun">)</span><span class="pln">
ax</span><span class="pun">.</span><span class="pln">xaxis</span><span class="pun">.</span><span class="pln">set_label_position</span><span class="pun">(</span><span class="str">'top'</span><span class="pun">)</span><span class="pln">
ax</span><span class="pun">.</span><span class="pln">xaxis</span><span class="pun">.</span><span class="pln">set_ticks_position</span><span class="pun">(</span><span class="str">'top'</span><span class="pun">)</span><span class="pln">
ax</span><span class="pun">.</span><span class="pln">set_xlabel</span><span class="pun">(</span><span class="str">'Prediction'</span><span class="pun">,</span><span class="pln"> fontsize </span><span class="pun">=</span><span class="pln"> </span><span class="lit">14</span><span class="pun">)</span><span class="pln">
ax</span><span class="pun">.</span><span class="pln">set_xticklabels</span><span class="pun">([</span><span class="str">'negative (0)'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'neutral (1)'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'positive (2)'</span><span class="pun">])</span><span class="pln">
ax</span><span class="pun">.</span><span class="pln">set_ylabel</span><span class="pun">(</span><span class="str">'Actual'</span><span class="pun">,</span><span class="pln"> fontsize </span><span class="pun">=</span><span class="pln"> </span><span class="lit">14</span><span class="pun">)</span><span class="pln">
ax</span><span class="pun">.</span><span class="pln">set_yticklabels</span><span class="pun">([</span><span class="str">'negative (0)'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'neutral (1)'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'positive (2)'</span><span class="pun">])</span><span class="pln">
plt</span><span class="pun">.</span><span class="pln">show</span><span class="pun">()</span></pre>

<p>
	مما يُظهر:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="91883" href="https://academy.hsoub.com/uploads/monthly_2022_02/010.png.0f4a271fd4f02898b69752d6602d6052.png" rel="" data-fileext="png"><img alt="010.png" class="ipsImage ipsImage_thumbnailed" data-fileid="91883" data-unique="ex997h3dd" src="https://academy.hsoub.com/uploads/monthly_2022_02/010.png.0f4a271fd4f02898b69752d6602d6052.png"></a>
</p>

<p>
	يُمكن حساب بعض مقاييس الأداء الأخرى المُستخدمة في حالة وجود أكثر من صف في المسألة (Micro, Macro, Weighted):
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4681_114" style=""><span class="com"># مقاييس الأداء في حالة أكثر من صفين</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="str">'\nAccuracy: {:.2f}\n'</span><span class="pun">.</span><span class="pln">format</span><span class="pun">(</span><span class="pln">accuracy_score</span><span class="pun">(</span><span class="pln">y_test</span><span class="pun">,</span><span class="pln"> y_pred</span><span class="pun">)))</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="str">'Micro Precision: {:.2f}'</span><span class="pun">.</span><span class="pln">format</span><span class="pun">(</span><span class="pln">precision_score</span><span class="pun">(</span><span class="pln">y_test</span><span class="pun">,</span><span class="pln"> y_pred</span><span class="pun">,</span><span class="pln"> average</span><span class="pun">=</span><span class="str">'micro'</span><span class="pun">)))</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="str">'Micro Recall: {:.2f}'</span><span class="pun">.</span><span class="pln">format</span><span class="pun">(</span><span class="pln">recall_score</span><span class="pun">(</span><span class="pln">y_test</span><span class="pun">,</span><span class="pln"> y_pred</span><span class="pun">,</span><span class="pln"> average</span><span class="pun">=</span><span class="str">'micro'</span><span class="pun">)))</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="str">'Micro F1-score: {:.2f}\n'</span><span class="pun">.</span><span class="pln">format</span><span class="pun">(</span><span class="pln">f1_score</span><span class="pun">(</span><span class="pln">y_test</span><span class="pun">,</span><span class="pln"> y_pred</span><span class="pun">,</span><span class="pln"> average</span><span class="pun">=</span><span class="str">'micro'</span><span class="pun">)))</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="str">'Macro Precision: {:.2f}'</span><span class="pun">.</span><span class="pln">format</span><span class="pun">(</span><span class="pln">precision_score</span><span class="pun">(</span><span class="pln">y_test</span><span class="pun">,</span><span class="pln"> y_pred</span><span class="pun">,</span><span class="pln"> average</span><span class="pun">=</span><span class="str">'macro'</span><span class="pun">)))</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="str">'Macro Recall: {:.2f}'</span><span class="pun">.</span><span class="pln">format</span><span class="pun">(</span><span class="pln">recall_score</span><span class="pun">(</span><span class="pln">y_test</span><span class="pun">,</span><span class="pln"> y_pred</span><span class="pun">,</span><span class="pln"> average</span><span class="pun">=</span><span class="str">'macro'</span><span class="pun">)))</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="str">'Macro F1-score: {:.2f}\n'</span><span class="pun">.</span><span class="pln">format</span><span class="pun">(</span><span class="pln">f1_score</span><span class="pun">(</span><span class="pln">y_test</span><span class="pun">,</span><span class="pln"> y_pred</span><span class="pun">,</span><span class="pln"> average</span><span class="pun">=</span><span class="str">'macro'</span><span class="pun">)))</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="str">'Weighted Precision: {:.2f}'</span><span class="pun">.</span><span class="pln">format</span><span class="pun">(</span><span class="pln">precision_score</span><span class="pun">(</span><span class="pln">y_test</span><span class="pun">,</span><span class="pln"> y_pred</span><span class="pun">,</span><span class="pln"> average</span><span class="pun">=</span><span class="str">'weighted'</span><span class="pun">)))</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="str">'Weighted Recall: {:.2f}'</span><span class="pun">.</span><span class="pln">format</span><span class="pun">(</span><span class="pln">recall_score</span><span class="pun">(</span><span class="pln">y_test</span><span class="pun">,</span><span class="pln"> y_pred</span><span class="pun">,</span><span class="pln"> average</span><span class="pun">=</span><span class="str">'weighted'</span><span class="pun">)))</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="str">'Weighted F1-score: {:.2f}'</span><span class="pun">.</span><span class="pln">format</span><span class="pun">(</span><span class="pln">f1_score</span><span class="pun">(</span><span class="pln">y_test</span><span class="pun">,</span><span class="pln"> y_pred</span><span class="pun">,</span><span class="pln"> average</span><span class="pun">=</span><span class="str">'weighted'</span><span class="pun">)))</span><span class="pln">

</span><span class="com"># تقرير التصنيف</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">metrics </span><span class="kwd">import</span><span class="pln"> classification_report
</span><span class="kwd">print</span><span class="pun">(</span><span class="str">'\nClassification Report\n'</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">classification_report</span><span class="pun">(</span><span class="pln">y_test</span><span class="pun">,</span><span class="pln"> y_pred</span><span class="pun">,</span><span class="pln"> target_names</span><span class="pun">=[</span><span class="str">'Class 1'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Class 2'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Class 3'</span><span class="pun">]))</span></pre>

<p>
	مما يُعطي (لاحظ ارتفاع جميع المقاييس مما يعني جودة المُصنف):
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4681_116" style=""><span class="typ">Accuracy</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.88</span><span class="pln">

</span><span class="typ">Micro</span><span class="pln"> </span><span class="typ">Precision</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.88</span><span class="pln">
</span><span class="typ">Micro</span><span class="pln"> </span><span class="typ">Recall</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.88</span><span class="pln">
</span><span class="typ">Micro</span><span class="pln"> F1</span><span class="pun">-</span><span class="pln">score</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.88</span><span class="pln">

</span><span class="typ">Macro</span><span class="pln"> </span><span class="typ">Precision</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.79</span><span class="pln">
</span><span class="typ">Macro</span><span class="pln"> </span><span class="typ">Recall</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.83</span><span class="pln">
</span><span class="typ">Macro</span><span class="pln"> F1</span><span class="pun">-</span><span class="pln">score</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.80</span><span class="pln">

</span><span class="typ">Weighted</span><span class="pln"> </span><span class="typ">Precision</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.90</span><span class="pln">
</span><span class="typ">Weighted</span><span class="pln"> </span><span class="typ">Recall</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.88</span><span class="pln">
</span><span class="typ">Weighted</span><span class="pln"> F1</span><span class="pun">-</span><span class="pln">score</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.89</span><span class="pln">

</span><span class="typ">Classification</span><span class="pln"> </span><span class="typ">Report</span><span class="pln">

              precision    recall  f1</span><span class="pun">-</span><span class="pln">score   support

     </span><span class="typ">Class</span><span class="pln"> </span><span class="lit">1</span><span class="pln">       </span><span class="lit">0.79</span><span class="pln">      </span><span class="lit">0.75</span><span class="pln">      </span><span class="lit">0.77</span><span class="pln">       </span><span class="lit">519</span><span class="pln">
     </span><span class="typ">Class</span><span class="pln"> </span><span class="lit">2</span><span class="pln">       </span><span class="lit">0.59</span><span class="pln">      </span><span class="lit">0.82</span><span class="pln">      </span><span class="lit">0.69</span><span class="pln">       </span><span class="lit">559</span><span class="pln">
     </span><span class="typ">Class</span><span class="pln"> </span><span class="lit">3</span><span class="pln">       </span><span class="lit">0.98</span><span class="pln">      </span><span class="lit">0.92</span><span class="pln">      </span><span class="lit">0.95</span><span class="pln">      </span><span class="lit">3029</span><span class="pln">

    accuracy                           </span><span class="lit">0.88</span><span class="pln">      </span><span class="lit">4107</span><span class="pln">
   macro avg       </span><span class="lit">0.79</span><span class="pln">      </span><span class="lit">0.83</span><span class="pln">      </span><span class="lit">0.80</span><span class="pln">      </span><span class="lit">4107</span><span class="pln">
weighted avg       </span><span class="lit">0.90</span><span class="pln">      </span><span class="lit">0.88</span><span class="pln">      </span><span class="lit">0.89</span><span class="pln">      </span><span class="lit">4107</span></pre>

<p>
	يُمكن أيضًا اختيار مجموعة تغريدات عشوائية جديدة وتصنيفها وحفظ النتائج في ملف results.csv:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_4681_118" style=""><span class="com"># تصنيف مجموعة اختبار</span><span class="pln">
text_clean </span><span class="pun">=</span><span class="pln"> tweets</span><span class="pun">[</span><span class="str">'tweet_clean'</span><span class="pun">]</span><span class="pln">
text_train</span><span class="pun">,</span><span class="pln"> text_test </span><span class="pun">=</span><span class="pln"> train_test_split</span><span class="pun">(</span><span class="pln">text_clean</span><span class="pun">,</span><span class="pln"> test_size </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.2</span><span class="pun">,</span><span class="pln"> random_state </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">)</span><span class="pln">
result_test </span><span class="pun">=</span><span class="pln"> pd</span><span class="pun">.</span><span class="typ">DataFrame</span><span class="pun">(</span><span class="pln">data </span><span class="pun">=</span><span class="pln"> zip</span><span class="pun">(</span><span class="pln">text_test</span><span class="pun">,</span><span class="pln"> y_pred</span><span class="pun">),</span><span class="pln"> columns </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="str">'text'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'polarity'</span><span class="pun">])</span><span class="pln">
polarity_decode </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="lit">0</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="str">'Negative'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="str">'Neutral'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="str">'Positive'</span><span class="pun">}</span><span class="pln">
result_test</span><span class="pun">[</span><span class="str">'polarity'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> result_test</span><span class="pun">[</span><span class="str">'polarity'</span><span class="pun">].</span><span class="pln">map</span><span class="pun">(</span><span class="pln">polarity_decode</span><span class="pun">)</span><span class="pln">
pd</span><span class="pun">.</span><span class="pln">set_option</span><span class="pun">(</span><span class="str">'max_colwidth'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">300</span><span class="pun">)</span><span class="pln">

</span><span class="com"># حفظ النتائج</span><span class="pln">
result_test</span><span class="pun">.</span><span class="pln">to_csv</span><span class="pun">(</span><span class="str">"results.csv"</span><span class="pun">)</span><span class="pln">
result_test</span></pre>

<p>
	تكون النتائج مثلًا:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="91884" href="https://academy.hsoub.com/uploads/monthly_2022_02/011.png.7e7289bf6c07f3965c07d55b6587474d.png" rel="" data-fileext="png"><img alt="011.png" class="ipsImage ipsImage_thumbnailed" data-fileid="91884" data-unique="iidym61q0" style="width: 700px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2022_02/011.thumb.png.07ade3ca7a2a79cf43797f63cfd64664.png"></a>
</p>

<h2>
	الخلاصة
</h2>

<p>
	عرضنا في هذه المقالة خطوات بناء نموذج تعلّم لتصنيف النصوص العربية إلى موجبة وسالبة ومحايدة.
</p>

<p>
	يُمكن تجربة المثال كاملًا من موقع <a href="https://colab.research.google.com/drive/16t3LjuHgm0272TKjS7NZ_BbztwhFhr1p?usp=sharing" rel="external nofollow">Google Colab</a>، ولا تنسى الاطلاع على <a data-fileid="91902" href="https://academy.hsoub.com/applications/core/interface/file/attachment.php?id=91902" rel="" data-fileext="zip">مجموعة البيانات المتوفرة الخاصة بهذا المقال</a>.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-%D9%84%D9%81%D9%87%D9%85-%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%B9%D9%85%D9%8A%D9%82-r1422/" rel="">دليل المبتدئين لفهم أساسيات التعلم العميق</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-%D9%85%D8%B1%D8%A7%D8%AD%D9%84-%D8%A7%D9%84%D8%A8%D8%AF%D8%A1-%D9%88%D8%A7%D9%84%D8%AA%D8%B7%D9%88%D8%B1-%D9%88%D8%A7%D9%84%D8%A3%D8%B3%D8%B3-%D8%A7%D9%84%D8%AA%D9%8A-%D9%86%D8%B4%D8%A3-%D8%B9%D9%84%D9%8A%D9%87%D8%A7-r988/" rel="">لذكاء الاصطناعي: مراحل البدء والتطور والأسس التي نشأ عليها</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-%D8%A7%D9%84%D8%AA%D8%AD%D8%AF%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%B1%D8%A6%D9%8A%D8%B3%D9%8A%D8%A9-%D9%88%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D9%88%D8%B3%D8%B9-%D9%81%D9%8A-%D8%A7%D9%84%D9%85%D8%AC%D8%A7%D9%84-r1010/" rel="">تعلم الآلة: التحديات الرئيسية وكيفية التوسع في المجال</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">1476</guid><pubDate>Mon, 14 Feb 2022 16:01:00 +0000</pubDate></item></channel></rss>
