السلام عليكم يا جماعة الخير، معكم أبو عمر.
قبل كم سنة، كنت شغال على مشروع حساس شوي مع أحد المستشفيات الكبيرة. المشروع كان عبارة عن تطوير نظام ذكاء اصطناعي قادر على تحليل صور شبكية العين والتنبؤ بوجود اعتلال شبكية سكري (Diabetic Retinopathy) في مراحله المبكرة. بعد شهور من الشغل والتعب، وتدريب النموذج على آلاف الصور، وصلنا لنتائج خرافية. النموذج كان يحقق دقة 98%، إشي بصراحة بفتح النفس وبرفع الراس.
في اجتماع عرض النتائج، كان معنا رئيس قسم العيون، دكتور قدير ومخضرم اسمه الدكتور أحمد. عرضت الأرقام بفخر، وشرحت كيف النموذج تبعنا تفوق على متوسط دقة التشخيص البشري. الكل كان مبسوط وبيصفق، إلا الدكتور أحمد. كان ساكت وبيتطلع على الشاشة بنظرات فيها شك. بعد ما خلصت، سألني سؤال واحد، سؤال بسيط في ظاهره، لكنه كان زي المطرقة على راسي.
قال لي: “يا ابني، شغلكم ممتاز، والأرقام ما عليها غبار. بس عندي هالصورة لمريض، النموذج تبعك بحكي إنها ‘إيجابية’ وفيها بوادر اعتلال، وأنا بعيني المجردة وخبرة 30 سنة مش شايف إشي مقلق. ممكن تحكيلي ليش النموذج أخذ هاد القرار؟ على شو تطلع بالضبط في الصورة؟”
وقتها، حسيت حالي انحطيت في زاوية. الجواب الصادق والمحرج كان: “والله يا دكتور، ما بعرف”. نموذجنا كان “صندوق أسود” (Black Box). بنعطيه صورة، وبيعطينا جواب، بس شو بصير جوه… الله أعلم. هداك الموقف كان نقطة تحول في مسيرتي المهنية، وخلاني أبحث وأتعمق في عالم كان وقتها لسا في بداياته: عالم الذكاء الاصطناعي القابل للتفسير (Explainable AI)، أو اختصاراً XAI.
ما هو “الصندوق الأسود” اللعين هذا؟
قبل ما نغوص في الحلول، خلينا نفهم المشكلة. “الصندوق الأسود” هو مصطلح بنطلقه على أي نظام، وخصوصاً نماذج تعلم الآلة المعقدة، اللي بنقدر نشوف مدخلاته ومخرجاته، لكن العمليات الداخلية اللي بتحول المدخلات لمخرجات غامضة وغير مفهومة للبشر.
تخيلها زي شيف أسطوري في مطعم. بتطلب منه مكونات (مدخلات)، وبعطيك طبق أسطوري (مخرجات). لكن لو سألته عن الوصفة بالتفصيل، أو ليش استخدم رشة زعتر بدل الأوريجانو، بضحك وبحكيلك “هاي أسرار المهنة”.
أشهر النماذج اللي بتوقع في فخ الصندوق الأسود هي:
- الشبكات العصبونية العميقة (Deep Neural Networks): بملايين البارامترات والطبقات المتشابكة، من المستحيل تتبع مسار قرار واحد بشكل يدوي.
- نماذج التعزيز المتدرج (Gradient Boosting Machines) مثل XGBoost و LightGBM: رغم قوتها الهائلة، إلا إنها بتبني مئات أو آلاف الأشجار الصغيرة، وفهم مساهمة كل شجرة في القرار النهائي معقد جداً.
المشكلة إنه هاي النماذج هي الأقوى والأكثر دقة في كثير من المهام، فما بنقدر نستغني عنها. بس بنفس الوقت، ما بنقدر نثق فيها ثقة عمياء، خصوصاً في مجالات حساسة زي الطب، التمويل، والقانون.
ولادة المنقذ: الذكاء الاصطناعي القابل للتفسير (XAI)
من رحم هذه المشكلة، وُلد الـ XAI. الذكاء الاصطناعي القابل للتفسير هو مش نوع جديد من الذكاء الاصطناعي، بل هو مجموعة من التقنيات والممارسات اللي هدفها الرئيسي هو جعل قرارات نماذج الذكاء الاصطناعي مفهومة وقابلة للتفسير من قبل البشر.
ليش هالحكي مهم؟
- بناء الثقة: زي ما صار معي مع الدكتور أحمد، ما حدا رح يستخدم نظام ما بثق فيه، حتى لو دقته 100%. الطبيب لازم يفهم “ليش” النظام بيقترح تشخيص معين عشان يقدر ياخد القرار النهائي.
- تصحيح الأخطاء وتطوير النموذج: لما نفهم كيف النموذج بيفكر، ممكن نكتشف إنه بيعتمد على عوامل خاطئة. مثلاً، ممكن نكتشف إن نموذج تشخيص سرطان الجلد بيعطي أهمية لوجود مسطرة في الصورة (لأن أغلب صور الأورام الخبيثة اللي تدرب عليها كان فيها مسطرة لقياس الحجم)، وهذا خطأ كارثي!
- العدالة والأخلاق: كيف نتأكد إن نموذج منح القروض ما بيميز ضد فئة معينة من المجتمع؟ الـ XAI بيساعدنا نكشف التحيزات (Bias) الخفية في بياناتنا ونماذجنا.
- المتطلبات القانونية: في أماكن كثيرة بالعالم (مثل أوروبا مع GDPR)، صار للمواطن “الحق في التفسير” (Right to Explanation). يعني لو بنك رفض يعطيك قرض باستخدام نظام آلي، من حقك تعرف ليش.
كيف “نفتح” الصندوق الأسود؟ – أشهر تقنيات XAI
هنا بتبدأ المتعة. في عنا مجموعة أدوات وتقنيات، كل وحدة الها نقاط قوة وضعف. خلينا نحكي عن أشهرها بأسلوب بسيط.
1. تقنيات لا تعتمد على نوع النموذج (Model-Agnostic)
هاي التقنيات جميلة جداً لأنها بتشتغل مع أي نموذج، سواء كان شبكة عصبونية، XGBoost، أو حتى نموذج قديم. بتعامل النموذج كأنه صندوق أسود وبتحاول تفهم سلوكه من خلال مراقبة مدخلاته ومخرجاته.
LIME (Local Interpretable Model-agnostic Explanations)
فكرة LIME عبقرية في بساطتها. عشان يفهم قرار معين (مثلاً، ليش تم تصنيف هذا الإيميل كـ spam)، بيعمل الآتي:
- بيأخذ العينة الأصلية (الإيميل).
- بيعمل نسخ كثيرة منها مع تغييرات بسيطة وعشوائية (مثلاً، بيحذف بعض الكلمات، أو بيغيرها).
- بيسأل الصندوق الأسود (نموذجنا الأصلي) عن رأيه في كل هاي النسخ الجديدة.
- بعدها، بيقوم ببناء نموذج بسيط جداً وقابل للتفسير (مثل الانحدار الخطي)، بيحاول يقلد سلوك الصندوق الأسود “محلياً” حول العينة الأصلية فقط.
النتيجة؟ النموذج البسيط هاد بحكيلنا: “بالنسبة لهذا الإيميل تحديداً، أهم الكلمات اللي خلت النموذج الأصلي يعتبره spam هي ‘مجاناً’، ‘عرض حصري’، و ‘اضغط هنا'”.
SHAP (SHapley Additive exPlanations)
الـ SHAP هو الأداة المفضلة عندي، وهو المعيار الذهبي حالياً في عالم الـ XAI. فكرته مستوحاة من نظرية الألعاب وقيم شابلي (Shapley Values).
تخيل فريق كرة قدم سجل هدف. قيم شابلي بتجاوب على سؤال: ما هي مساهمة كل لاعب في تسجيل هذا الهدف؟ هل المهاجم هو الأهم لأنه سدد الكرة؟ أم لاعب الوسط اللي صنع التمريرة الحاسمة؟ أم المدافع اللي بدأ الهجمة؟
SHAP بيعمل نفس الإشي، بس بدل اللاعبين والهدف، عنده الخصائص (Features) والقرار النهائي. لكل قرار، بيعطيك قيمة (SHAP value) لكل خاصية، واللي بتمثل “مساهمة” هاي الخاصية في “دفع” القرار باتجاه معين (مثلاً، نحو “موافق على القرض” أو “مرفوض”).
الجميل في SHAP إنه بيعطينا تفسيرات محلية (لكل قرار) وعالمية (نظرة عامة على سلوك النموذج ككل).
2. تقنيات خاصة بنماذج معينة (Model-Specific)
هاي التقنيات مصممة لنوع معين من النماذج وبتستغل بنيتها الداخلية لتعطينا تفسيرات.
أهمية الخصائص (Feature Importance) في نماذج الأشجار
نماذج مثل Random Forest و XGBoost عندها طريقة مدمجة لحساب “أهمية” كل خاصية. بشكل عام، الخاصية اللي بتستخدمها الشجيرات كثير في تقسيم البيانات وبتؤدي لتحسين كبير في الدقة، بتعتبر خاصية مهمة. هاي طريقة سريعة ومفيدة لأخذ فكرة عامة عن أهم العوامل في نموذجك.
آليات الانتباه (Attention Mechanisms) في الشبكات العصبونية
في معالجة اللغات الطبيعية والصور، آليات الانتباه هي ثورة. لما نموذج بيترجم جملة أو بيوصف صورة، آلية الانتباه بتخليه “يركز” أو “ينتبه” على أجزاء معينة من المدخلات في كل خطوة.
والأجمل من هيك، إنه بنقدر “نرسم” هذا الانتباه. فبنشوف إنه عند ترجمة كلمة معينة، النموذج كان “بيتطلع” على كلمة مقابلة في الجملة الأصلية. أو لما النموذج بيتعرف على “قطة” في صورة، بنقدر نشوف إنه كان بيركز على منطقة الأذنين والشاربين.
مثال عملي: هيا بنا نفسر قرار نموذجنا
الحكي النظري حلو، بس خلينا نشوف شغل عملي. تخيل عنا نموذج XGBoost يتنبأ باحتمالية أن يترك العميل الشركة (Customer Churn).
أولاً، نقوم بتدريب النموذج (الكود للتوضيح، وليس للتشغيل المباشر بدون بيانات):
import xgboost as xgb
import pandas as pd
from sklearn.model_selection import train_test_split
# افترض أن لدينا بيانات في متغير data
# X = data.drop('Churn', axis=1)
# y = data['Churn']
# X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# تدريب نموذج XGBoost
# model = xgb.XGBClassifier()
# model.fit(X_train, y_train)
الآن، نموذجنا جاهز، وهو صندوق أسود. نريد أن نفهم لماذا اتخذ قراراً معيناً لعميل محدد. هنا يأتي دور SHAP.
import shap
# 1. إنشاء "مُفسِّر" (Explainer) للنموذج
explainer = shap.TreeExplainer(model)
# 2. حساب قيم SHAP لبيانات الاختبار
shap_values = explainer.shap_values(X_test)
# 3. تفسير قرار واحد لعميل معين (مثلاً، العميل رقم 5)
# shap.initjs() # لتهيئة العرض في الـ notebook
shap.force_plot(explainer.expected_value, shap_values[5,:], X_test.iloc[5,:])
هذا الكود سيُنتج مخططاً تفاعلياً جميلاً يسمى “Force Plot”. يوضح لك هذا المخطط:
- القيمة الأساسية (Base Value): متوسط التنبؤ لجميع العينات.
- الخصائص باللون الأحمر: هي الخصائص التي “دفعت” التنبؤ نحو الأعلى (مثلاً، نحو “سيترك الشركة”).
- الخصائص باللون الأزرق: هي الخصائص التي “دفعت” التنبؤ نحو الأسفل (نحو “سيبقى في الشركة”).
تخيل أن ترى مخططاً يوضح أن العميل رقم 5 لديه احتمال كبير للمغادرة لأن قيمة “الفاتورة الشهرية” عالية جداً (بالأحمر)، بينما “مدة بقائه كعميل” منخفضة (أيضاً بالأحمر). الآن، أصبح لديك فهم واضح وملموس للقرار!
وإذا أردنا نظرة عامة على أهم الخصائص في النموذج كله؟
# رسم ملخص لأهمية الخصائص وتأثيرها
shap.summary_plot(shap_values, X_test)
هذا المخطط (Summary Plot) يعطيك كنزا من المعلومات. لكل خاصية، يوضح لك كيف أن القيم المرتفعة (اللون الأحمر) والمنخفضة (اللون الأزرق) منها تؤثر على القرار النهائي. إنه يفتح الصندوق الأسود بالكامل.
نصائح من مطبخ أبو عمر
من خلال تجربتي في هذا المجال، تعلمت كم شغلة على الطريق الصعب، وبدي أشارككم إياها:
- ابدأ بالتفسير مبكراً: لا تنتظر حتى نهاية المشروع لتبدأ بالتفكير في XAI. ادمج أدوات التفسير خلال عملية التطوير. هذا يساعدك على اكتشاف المشاكل في بياناتك أو نموذجك في وقت مبكر.
- التفسير ليس لك فقط: تذكر أنك لا تفسر النموذج لنفسك (كمطور)، بل للمستخدم النهائي (الطبيب، مدير البنك، المحلل). يجب أن يكون التفسير بلغة بسيطة ومفهومة وقابلة للتنفيذ.
- لا يوجد حل سحري واحد: استخدم مجموعة من أدوات XAI. قد يعطيك SHAP نظرة، و LIME نظرة أخرى، وتحليل الأخطاء يكشف لك شيئاً ثالثاً. الصورة الكاملة تأتي من تجميع هذه الأجزاء معاً.
- الأبسط هو الأفضل (أحياناً): قبل أن تقفز إلى بناء شبكة عصبونية معقدة من 20 طبقة، اسأل نفسك: هل يمكن لنموذج انحدار لوجستي بسيط (وهو قابل للتفسير بطبيعته) أن يحل المشكلة بدقة مقبولة؟ أحياناً، التضحية بـ 1% من الدقة مقابل الحصول على نموذج شفاف بالكامل هي صفقة رابحة.
الخلاصة: من الظلام إلى النور 💡
العودة إلى قصة الدكتور أحمد. بعد عدة أشهر، عدت إلى المستشفى. هذه المرة، لم أعرض عليهم أرقام دقة فقط. عرضت عليهم نظاماً متكاملاً. عندما كان النموذج يحدد صورة على أنها “إيجابية”، كان يعرض بجانبها صورة أخرى تسمى “خريطة حرارية” (Heatmap) – ناتجة عن تقنية XAI تسمى Grad-CAM – تضيء بالضبط المناطق في شبكية العين التي “نظر” إليها النموذج ليتخذ قراره.
رأيت الابتسامة على وجه الدكتور أحمد. قال لي: “هيك صار الحكي. الآن، أنا والآلة بنقدر نشتغل مع بعض. هو بشوف إشي أنا ممكن ما أنتبهله، وأنا بخبرتي بقدر أقرر إذا كان هالإشي منطقي أو لا”.
الذكاء الاصطناعي بدون ثقة هو مجرد خوارزميات معقدة. والذكاء الاصطناعي بدون تفسير لا يمكن الوثوق به. الـ XAI هو الجسر الذي نبنيه بين قوة الآلة وحكمة الإنسان. إنه يحول نماذجنا من صناديق سوداء غامضة إلى شركاء شفافين في اتخاذ القرار.
فيا صديقي المبرمج، ويا صديقتي عالمة البيانات، لا تكن مجرد بنّاء للنماذج، كن مهندساً يفهم أساسها وجدرانها. لا تسلّم قرارات عمياء، بل اسعَ دائماً للفهم والتفسير. لأن المستقبل ليس للذكاء الاصطناعي الأقوى، بل للذكاء الاصطناعي الذي نفهمه ونثق به. شغل نظيف ومرتب، زي ما بنحكي. 😉