📋 المحتوى المنظم
📖 محتوى تعليمي مفصّل
4
نوع: QUESTION
لديك X_train_text وهي عبارة عن مصفوفة numpy تتضمن مستندًا واحدًا في كل صف. لديك كذلك مصفوفة ثانية Y_train تتضمن قيم المستندات في X_train_text. أكمل المقطع البرمجي التالي بحيث يمكن استخدام تكرار المصطلح - تكرار المستند العكسي (TF-IDF) لتمثيل البيانات بالمتجهات، وتدريب نموذج تصنيف MultinomialNB على الإصدار الممثل بالمتجهات، ثم تجميع أداة التمثيل بالمتجهات ونموذج التصنيف في خط أنابيب تنبؤ واحد:
from __________.naive_bayes import MultinomialNB
from sklearn.pipeline import make_pipeline
from sklearn.feature_extraction.text import _________
vectorizer = _________ (min_df=10)
vectorizer.fit(_________) # fits the vectorizer on the training data
X_train = vectorizer._________ (X_train_text) # uses the fitted vectorizer to vectorize the data
model_MNB = MultinomialNB() # a Naive Bayes Classifier
model_MNB.fit(X_train, _________) # fits the classifier on the vectorized training data
prediction_pipeline = make_pipeline(_________, _________)
5
نوع: QUESTION
أكمل المقطع البرمجي التالي بحيث يمكنه بناء مفسّر نصوص النموذج المحايد المحلي القابل للتفسير والشرح (LIME) لخط أنابيب التنبؤ الذي قمت ببنائه في التمرين السابق، واستخدم المفسّر لتفسير التنبؤ على مثال لنص آخر.
from _________ import LimeTextExplainer
text_example="I really enjoyed this movie, the actors were excellent"
class_names=['neg','pos'] # creates a local explainer for explaining individual predictions
explainer = _________ (class_names=class_names) # explains the prediction for this example
exp = explainer._________ (text_example.lower(),prediction_pipeline._________, _________=10) # focuses the explainer on the 10 most influential features
print(exp._________) # prints the words with the highest influence on the prediction
نوع: METADATA
وزارة التعليم
153
Ministry of Education
2025 - 1447
📄 النص الكامل للصفحة
--- SECTION: 4 --- لديك X_train_text وهي عبارة عن مصفوفة numpy تتضمن مستندًا واحدًا في كل صف. لديك كذلك مصفوفة ثانية Y_train تتضمن قيم المستندات في X_train_text. أكمل المقطع البرمجي التالي بحيث يمكن استخدام تكرار المصطلح - تكرار المستند العكسي (TF-IDF) لتمثيل البيانات بالمتجهات، وتدريب نموذج تصنيف MultinomialNB على الإصدار الممثل بالمتجهات، ثم تجميع أداة التمثيل بالمتجهات ونموذج التصنيف في خط أنابيب تنبؤ واحد:
from __________.naive_bayes import MultinomialNB from sklearn.pipeline import make_pipeline from sklearn.feature_extraction.text import _________
vectorizer = _________ (min_df=10)
vectorizer.fit(_________) # fits the vectorizer on the training data X_train = vectorizer._________ (X_train_text) # uses the fitted vectorizer to vectorize the data model_MNB = MultinomialNB() # a Naive Bayes Classifier model_MNB.fit(X_train, _________) # fits the classifier on the vectorized training data prediction_pipeline = make_pipeline(_________, _________)--- SECTION: 5 ---
أكمل المقطع البرمجي التالي بحيث يمكنه بناء مفسّر نصوص النموذج المحايد المحلي القابل للتفسير والشرح (LIME) لخط أنابيب التنبؤ الذي قمت ببنائه في التمرين السابق، واستخدم المفسّر لتفسير التنبؤ على مثال لنص آخر.
from _________ import LimeTextExplainer text_example="I really enjoyed this movie, the actors were excellent"
class_names=['neg','pos'] # creates a local explainer for explaining individual predictions explainer = _________ (class_names=class_names) # explains the prediction for this example exp = explainer._________ (text_example.lower(),prediction_pipeline._________, _________=10) # focuses the explainer on the 10 most influential features print(exp._________) # prints the words with the highest influence on the prediction2025 - 1447
📝 أسئلة اختبارية
عدد الأسئلة: 2
سؤال 4: لديك X_train_text وهي عبارة عن مصفوفة numpy تتضمن مستندًا واحدًا في كل صف. لديك كذلك مصفوفة ثانية Y_train تتضمن قيم المستندات في X_train_text. أكمل المقطع البرمجي التالي بحيث يمكن استخدام تكرار المصطلح - تكرار المستند العكسي (TF-IDF) لتمثيل البيانات بالمتجهات، وتدريب نموذج تصنيف MultinomialNB على الإصدار الممثل بالمتجهات، ثم تجميع أداة التمثيل بالمتجهات ونموذج التصنيف في خط أنابيب تنبؤ واحد:
from __________.naive_bayes import MultinomialNB from sklearn.pipeline import make_pipeline from sklearn.feature_extraction.text import _________
vectorizer = _________ (min_df=10)
vectorizer.fit(_________) # fits the vectorizer on the training data X_train = vectorizer._________ (X_train_text) # uses the fitted vectorizer to vectorize the data model_MNB = MultinomialNB() # a Naive Bayes Classifier model_MNB.fit(X_train, _________) # fits the classifier on the vectorized training data prediction_pipeline = make_pipeline(_________, _________)
- أ) from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import make_pipeline
from sklearn.feature_extraction.text import CountVectorizer
vectorizer = CountVectorizer(min_df=10)
vectorizer.fit(X_train_text)
X_train = vectorizer.fit_transform(X_train_text)
model_MNB = MultinomialNB()
model_MNB.fit(X_train, Y_train)
prediction_pipeline = make_pipeline(vectorizer, model_MNB)
- ب) from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import make_pipeline
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer(min_df=10)
vectorizer.fit(X_train_text)
X_train = vectorizer.transform(X_train_text)
model_MNB = MultinomialNB()
model_MNB.fit(X_train, Y_train)
prediction_pipeline = make_pipeline(vectorizer, model_MNB)
- ج) from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import make_pipeline
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer(min_df=10)
vectorizer.fit(Y_train)
X_train = vectorizer.transform(X_train_text)
model_MNB = MultinomialNB()
model_MNB.fit(X_train, Y_train)
prediction_pipeline = make_pipeline(model_MNB, vectorizer)
- د) from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import make_pipeline
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer(min_df=10)
vectorizer.fit(X_train_text)
X_train = vectorizer.fit_transform(X_train_text)
model_MNB = MultinomialNB()
model_MNB.fit(X_train, Y_train)
prediction_pipeline = make_pipeline(vectorizer, model_MNB)
الإجابة الصحيحة: from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import make_pipeline
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer(min_df=10)
vectorizer.fit(X_train_text)
X_train = vectorizer.transform(X_train_text)
model_MNB = MultinomialNB()
model_MNB.fit(X_train, Y_train)
prediction_pipeline = make_pipeline(vectorizer, model_MNB)
الشرح: يجب استيراد MultinomialNB من sklearn.naive_bayes واستيراد TfidfVectorizer من sklearn.feature_extraction.text. يتم إنشاء vectorizer باستخدام TfidfVectorizer مع معلمة min_df=10، ثم يتم تدريبه على بيانات التدريب X_train_text باستخدام fit(). يتم تحويل البيانات باستخدام transform()، ثم يتم تدريب نموذج MultinomialNB على البيانات المحولة والتسميات Y_train باستخدام fit(). أخيرًا، يتم إنشاء خط أنابيب باستخدام make_pipeline يجمع بين vectorizer وmodel_MNB.
تلميح: تأكد من استخدام الدوال المناسبة لتحويل البيانات وتدريب النموذج، وتذكر أن خط الأنابيب يجب أن يتضمن كلاً من أداة التمثيل بالمتجهات ونموذج التصنيف.
سؤال 5: أكمل المقطع البرمجي التالي بحيث يمكنه بناء مفسّر نصوص النموذج المحايد المحلي القابل للتفسير والشرح (LIME) لخط أنابيب التنبؤ الذي قمت ببنائه في التمرين السابق، واستخدم المفسّر لتفسير التنبؤ على مثال لنص آخر.
from _________ import LimeTextExplainer text_example="I really enjoyed this movie, the actors were excellent"
class_names=['neg','pos'] # creates a local explainer for explaining individual predictions explainer = _________ (class_names=class_names) # explains the prediction for this example exp = explainer._________ (text_example.lower(),prediction_pipeline._________, _________=10) # focuses the explainer on the 10 most influential features print(exp._________) # prints the words with the highest influence on the prediction
- أ) from lime import LimeTextExplainer
text_example="I really enjoyed this movie, the actors were excellent"
class_names=['neg','pos']
explainer = LimeTextExplainer(class_names=class_names)
exp = explainer.explain(text_example.lower(), prediction_pipeline.predict, features=10)
print(exp.show_in_notebook())
- ب) from lime.lime_text import LimeTextExplainer
text_example="I really enjoyed this movie, the actors were excellent"
class_names=['neg','pos']
explainer = LimeTextExplainer(class_names=class_names)
exp = explainer.explain_instance(text_example.lower(), prediction_pipeline.predict_proba, num_features=10)
print(exp.as_list())
- ج) from sklearn.explainers import LimeTextExplainer
text_example="I really enjoyed this movie, the actors were excellent"
class_names=['neg','pos']
explainer = LimeTextExplainer(class_names=class_names)
exp = explainer.explain(text_example.lower(), prediction_pipeline.predict_proba, num_features=10)
print(exp.words())
- د) from lime.lime_text import LimeTextExplainer
text_example="I really enjoyed this movie, the actors were excellent"
class_names=['neg','pos']
explainer = LimeTextExplainer(class_names=class_names)
exp = explainer.explain_instance(text_example.lower(), prediction_pipeline.predict, num_features=10)
print(exp.as_list())
الإجابة الصحيحة: from lime.lime_text import LimeTextExplainer
text_example="I really enjoyed this movie, the actors were excellent"
class_names=['neg','pos']
explainer = LimeTextExplainer(class_names=class_names)
exp = explainer.explain_instance(text_example.lower(), prediction_pipeline.predict_proba, num_features=10)
print(exp.as_list())
الشرح: يجب استيراد LimeTextExplainer من lime.lime_text. يتم إنشاء explainer باستخدام LimeTextExplainer مع class_names. ثم يتم استخدام explain_instance() لشرح التنبؤ، حيث يتم تمرير النص المحول إلى أحرف صغيرة، ودالة predict_proba من خط الأنابيب، وnum_features=10 لتحديد عدد الميزات الأكثر تأثيرًا. أخيرًا، يتم طباعة النتائج باستخدام as_list() للحصول على قائمة الكلمات المؤثرة.
تلميح: تأكد من استخدام الدالة الصحيحة لشرح التنبؤ وطباعة النتائج، وتذكر أن num_features تحدد عدد الميزات الأكثر تأثيرًا.
🎴 بطاقات تعليمية للمراجعة
عدد البطاقات: 5 بطاقة لهذه الصفحة
في سياق معالجة اللغات الطبيعية، ما هو الهدف الرئيسي من استخدام تكرار المصطلح - تكرار المستند العكسي (TF-IDF)؟
الإجابة: الهدف الرئيسي هو تمثيل البيانات النصية (المستندات) كمتجهات عددية، مع إعطاء وزن أكبر للمصطلحات الهامة التي تظهر بشكل متكرر في مستند معين ولكن بشكل نادر في المستندات الأخرى، مما يساعد نماذج التعلم الآلي على فهم أهمية الكلمات في سياقها.
الشرح: TF-IDF يحسب قيمة لكل كلمة في مستند ما تعكس أهميتها. الجزء الأول (TF - Term Frequency) يقيس عدد مرات ظهور الكلمة في المستند، بينما الجزء الثاني (IDF - Inverse Document Frequency) يقيس مدى ندرة الكلمة عبر جميع المستندات. الكلمات التي تظهر كثيراً في مستند واحد وقليلاً في المستندات الأخرى تحصل على درجة TF-IDF أعلى، مما يشير إلى أنها أكثر تمييزاً لهذا المستند.
تلميح: فكر كيف يوازن TF-IDF بين مدى ظهور الكلمة في مستند واحد ومدى ظهورها في مجموعة المستندات بأكملها.
ما هو الغرض من تجميع مكونات التمثيل بالمتجهات (Vectorizer) ونموذج التصنيف (Model) في خط أنابيب (Pipeline)؟
الإجابة: الغرض هو تبسيط سير عمل التعلم الآلي. يضمن خط الأنابيب أن يتم تطبيق خطوات معالجة البيانات (مثل تحويل النص إلى متجهات باستخدام TF-IDF) تلقائيًا قبل تمريرها إلى نموذج التصنيف، مما يسهل عملية التدريب والتنبؤ ويقلل من احتمالية الأخطاء.
الشرح: خط الأنابيب (Pipeline) هو طريقة لتجميع خطوات متعددة من معالجة البيانات والنمذجة في كائن واحد. هذا يجعل الكود أكثر تنظيمًا وقابلية لإعادة الاستخدام، ويضمن تطبيق نفس التحويلات على بيانات التدريب وبيانات الاختبار أو التنبؤ.
تلميح: تخيل أن لديك عدة خطوات متتالية، كيف تجمعها لتصبح خطوة واحدة فعالة؟
في مكتبة LIME، ما هو الدور الأساسي لكائن `LimeTextExplainer`؟
الإجابة: يقوم `LimeTextExplainer` ببناء مفسر محلي قابل للتفسير يركز على شرح التنبؤات التي يقوم بها نموذج التعلم الآلي لنصوص فردية.
الشرح: `LimeTextExplainer` هو جزء من مكتبة LIME (Local Interpretable Model-agnostic Explanations) ويُستخدم لشرح كيف توصل النموذج إلى قرار معين بشأن قطعة نصية معينة. إنه يفعل ذلك عن طريق إنشاء نماذج محلية بسيطة حول نقطة البيانات المراد تفسيرها.
تلميح: اسم الكائن نفسه يحتوي على مفتاح لفهم وظيفته.
عند استخدام `explainer.explain_instance` في LIME، ما هي المعلمات التي يتم تمريرها لشرح تنبؤ على نص معين؟
الإجابة: يتم تمرير النص المراد تفسيره (في صيغة حروف صغيرة)، ودالة التنبؤ الخاصة بالنموذج (والتي تأخذ النص وتعيد احتمالات الفئات)، وعدد الميزات (الكلمات) المراد التركيز عليها في التفسير.
الشرح: الدالة `explain_instance` تأخذ النص الأصلي (عادةً محولاً إلى حروف صغيرة)، و `classifier_fn` (وهي في هذه الحالة `prediction_pipeline.predict_proba`) التي تقوم بعمل التنبؤات، و `num_features` التي تحدد عدد الكلمات الأكثر تأثيراً التي سيتم عرضها في التفسير.
تلميح: فكر في المعلومات الأساسية التي يحتاجها المفسر ليعمل: ما الذي تفسره؟ وكيف تفعل ذلك؟ وبأي تفصيل؟
ماذا يعرض `exp.as_list()` عند استخدامه مع كائن مفسر LIME تم إنشاؤه من نص؟
الإجابة: يعرض قائمة بالكلمات (الميزات) الأكثر تأثيراً في تنبؤ النموذج لهذا النص المحدد، مع توضيح اتجاه تأثير كل كلمة (إيجابي أو سلبي) وقيمتها العددية.
الشرح: `exp.as_list()` (أو `exp.as_html()` أو `exp.show_in_notebook()`) هي طرق لعرض نتائج تفسير LIME. `as_list()` تقدم المعلومات كقائمة بسيطة مما يسهل تحليلها برمجيًا أو قراءتها.
تلميح: اسم الدالة يوحي بأنها ستقدم تفصيلاً على شكل قائمة.