تمرين برمجي لإيجاد تشابه الجمل باستخدام SBERT - كتاب الذكاء الإصطناعي - الصف 12 - الفصل 1 - المملكة العربية السعودية

الكتاب: كتاب الذكاء الإصطناعي - الصف 12 - الفصل 1 | المادة: الذكاء الإصطناعي | المرحلة: الصف 12 | الفصل الدراسي: 1

الدولة: المملكة العربية السعودية | المنهج: المنهج السعودي - وزارة التعليم

الدرس: استخدام تمثيلات ترميز الجمل ثنائية الاتجاه (SBERT) لحساب التشابه الدلالي

📚 معلومات الصفحة

الكتاب: كتاب الذكاء الإصطناعي - الصف 12 - الفصل 1 | المادة: الذكاء الإصطناعي | المرحلة: الصف 12 | الفصل الدراسي: 1

الدولة: المملكة العربية السعودية | المنهج: المنهج السعودي - وزارة التعليم

نوع المحتوى: تمارين وأسئلة

مستوى الصعوبة: متوسط

📝 ملخص الصفحة

هذا التمرين البرمجي يهدف إلى تعزيز فهم استخدام نموذج SBERT (تمثيلات ترميز الجمل ثنائية الاتجاه) في معالجة اللغة الطبيعية لحساب التشابه الدلالي بين الجمل. يتطلب من الطالب إكمال دالة Python تُسمى `get_max_sim` تقارن جملة معينة (`my_sentence`) مع قائمة من الجمل (`L1`) باستخدام نموذج SBERT المسمى 'all-MiniLM-L6-v2'.

يبدأ التمرين باستيراد المكتبات الضرورية من `sentence_transformers` و `numpy`، ثم تهيئة النموذج. بعد ذلك، يجب على الطالب حساب التضمينات (embeddings) للجملة المعطاة ولقائمة الجمل باستخدام دالة `encode`، ثم حساب درجات التشابه باستخدام دالة `cos_sim` لحساب التشابه الجيبي.

الخطوة الأخيرة تتضمن استخدام `np.argmax` للعثور على فهرس الجملة ذات أعلى درجة تشابه في القائمة، وإرجاع تلك الجملة. هذا التمرين يعزز مهارات البرمجة في مجال الذكاء الاصطناعي والتعلم الآلي، مع التركيز على تطبيقات SBERT في تحليل النصوص.

📋 المحتوى المنظم

📖 محتوى تعليمي مفصّل

5

نوع: QUESTION

أكمل المقطع البرمجي التالي حتى تستخدم الدالة get_max_sim() نموذج تمثيلات ترميز الجمل ثنائية الاتجاه من المحولات (SBERT) للمقارنة بين جملة محددة my_sentence وكل الجمل الواردة في قائمة أخرى من الجمل L1. يجب أن تعيد الدالة الجملة ذات مؤشر التشابه الأعلى من L1 إلى my_sentence.

نوع: METADATA

وزارة التعليم Ministry of Education 191 2023 - 1447

🔍 عناصر مرئية

مقطع برمجي لإيجاد تشابه الجمل

A Python code snippet designed to find the sentence with the highest similarity from a list (L1) to a given sentence (my_sentence) using SBERT embeddings. The code has several blanks (represented by underscores) that need to be filled to complete the function.

📄 النص الكامل للصفحة

--- SECTION: 5 --- أكمل المقطع البرمجي التالي حتى تستخدم الدالة get_max_sim() نموذج تمثيلات ترميز الجمل ثنائية الاتجاه من المحولات (SBERT) للمقارنة بين جملة محددة my_sentence وكل الجمل الواردة في قائمة أخرى من الجمل L1. يجب أن تعيد الدالة الجملة ذات مؤشر التشابه الأعلى من L1 إلى my_sentence. وزارة التعليم Ministry of Education 191 2023 - 1447 --- VISUAL CONTEXT --- **CODE_BLOCK**: مقطع برمجي لإيجاد تشابه الجمل Description: A Python code snippet designed to find the sentence with the highest similarity from a list (L1) to a given sentence (my_sentence) using SBERT embeddings. The code has several blanks (represented by underscores) that need to be filled to complete the function. X-axis: N/A Y-axis: N/A Data: The code defines a Python function `get_max_sim` that takes two arguments: `L1` (a list of sentences) and `my_sentence` (a single sentence). It imports necessary modules from `sentence_transformers`. A `model_sbert` is initialized with 'all-MiniLM-L6-v2'. The function calculates embeddings for `my_sentence` and `L1` using `model_sbert.encode`. It then computes `similarity_scores` using `util.cos_sim` between `my_embedding` and `L_embeddings`. Finally, it finds the `winner_index` using `np.argmax` and is expected to return the sentence from `L1` at that index. Key Values: from sentence_transformers import _____, util, from _____ import combinations # tool used to create combinations, model_sbert = _____('all-MiniLM-L6-v2'), , def get_max_sim(L1,my_sentence):, # embeds my_sentence, my_embedding = model_sbert._____( ([my_sentence], convert_to_tensor=True), # embeds the sentences from L2, L_embeddings = model_sbert._____(L, convert_to_tensor=True), similarity_scores = _____.cos_sim(_____, _____), winner_index=np.argmax(similarity_scores[0]), return _____ Context: This code snippet is an exercise in a programming context, likely related to Natural Language Processing (NLP) and machine learning, specifically using Sentence-BERT (SBERT) for semantic similarity tasks. The user is expected to fill in the blanks to complete the function, demonstrating understanding of SBERT usage for sentence embedding and similarity calculation.

✅ حلول أسئلة الكتاب الرسمية

عدد الأسئلة: 9

سؤال مربع-1: أكمل المقطع البرمجي التالي حتى تستخدم الدالة get_max_sim() نموذج تمثيلات ترميز الجمل ثنائية الاتجاه من المحولات (SBERT) للمقارنة بين جملة محددة my_sentence وكل الجمل الواردة في قائمة أخرى من الجمل L1. يجب أن تعيد الدالة الجملة ذات مؤشر التشابه الأعلى من L1 إلى my_sentence.

الإجابة: SentenceTransformer

خطوات الحل:

  1. **الخطوة 1 (المفهوم):** عند التعامل مع مكتبة `sentence_transformers` في بايثون، نحتاج إلى استيراد الفئة الأساسية المسؤولة عن تحميل النماذج ومعالجة النصوص وتحويلها إلى متجهات (Embeddings).
  2. **الخطوة 2 (التطبيق):** هذه الفئة تُسمى بنفس اسم التقنية المستخدمة تقريباً، وهي المسؤولة عن إنشاء كائن النموذج الذي سنستخدمه لاحقاً.
  3. **الخطوة 3 (النتيجة):** لذلك، الكلمة الناقصة في جملة الاستيراد هي: **SentenceTransformer**

سؤال مربع-2: أكمل المقطع البرمجي التالي حتى تستخدم الدالة get_max_sim() نموذج تمثيلات ترميز الجمل ثنائية الاتجاه من المحولات (SBERT) للمقارنة بين جملة محددة my_sentence وكل الجمل الواردة في قائمة أخرى من الجمل L1. يجب أن تعيد الدالة الجملة ذات مؤشر التشابه الأعلى من L1 إلى my_sentence.

الإجابة: itertools

خطوات الحل:

  1. **الخطوة 1 (المفهوم):** في بعض العمليات البرمجية التي تتطلب التعامل مع التكرارات أو دمج القوائم أو معالجة البيانات المتسلسلة بكفاءة، نستخدم مكتبة بايثون القياسية المخصصة للأدوات التكرارية.
  2. **الخطوة 2 (التطبيق):** بالنظر إلى سياق بناء الدوال التي تتعامل مع القوائم والمقارنات، نحتاج لاستيراد المكتبة التي توفر وظائف مثل التكرار المتقدم.
  3. **الخطوة 3 (النتيجة):** إذن المكتبة المطلوبة هي: **itertools**

سؤال مربع-3: أكمل المقطع البرمجي التالي حتى تستخدم الدالة get_max_sim() نموذج تمثيلات ترميز الجمل ثنائية الاتجاه من المحولات (SBERT) للمقارنة بين جملة محددة my_sentence وكل الجمل الواردة في قائمة أخرى من الجمل L1. يجب أن تعيد الدالة الجملة ذات مؤشر التشابه الأعلى من L1 إلى my_sentence.

الإجابة: SentenceTransformer

خطوات الحل:

  1. **الخطوة 1 (المفهوم):** بعد استيراد المكتبات اللازمة، يجب علينا الآن إنشاء "كائن" (Object) من النموذج لكي نتمكن من استخدامه في معالجة الجمل.
  2. **الخطوة 2 (التطبيق):** يتم ذلك عن طريق استدعاء الفئة التي استوردناها في الخطوة الأولى وتمرير اسم النموذج المطلوب (مثل 'all-MiniLM-L6-v2') كمعامل لها.
  3. **الخطوة 3 (النتيجة):** لذا، نستخدم الأمر: **SentenceTransformer**

سؤال مربع-4: أكمل المقطع البرمجي التالي حتى تستخدم الدالة get_max_sim() نموذج تمثيلات ترميز الجمل ثنائية الاتجاه من المحولات (SBERT) للمقارنة بين جملة محددة my_sentence وكل الجمل الواردة في قائمة أخرى من الجمل L1. يجب أن تعيد الدالة الجملة ذات مؤشر التشابه الأعلى من L1 إلى my_sentence.

الإجابة: encode

خطوات الحل:

  1. **الخطوة 1 (المفهوم):** للمقارنة بين الجمل برمجياً، لا يمكننا استخدام النصوص مباشرة، بل يجب تحويل الجملة إلى تمثيل رقمي أو متجه (Vector).
  2. **الخطوة 2 (التطبيق):** في مكتبة SBERT، هناك دالة محددة تقوم بـ "ترميز" النص وتحويله إلى هذا المتجه.
  3. **الخطوة 3 (النتيجة):** هذه الدالة هي: **encode**

سؤال مربع-5: أكمل المقطع البرمجي التالي حتى تستخدم الدالة get_max_sim() نموذج تمثيلات ترميز الجمل ثنائية الاتجاه من المحولات (SBERT) للمقارنة بين جملة محددة my_sentence وكل الجمل الواردة في قائمة أخرى من الجمل L1. يجب أن تعيد الدالة الجملة ذات مؤشر التشابه الأعلى من L1 إلى my_sentence.

الإجابة: encode

خطوات الحل:

  1. **الخطوة 1 (المفهوم):** كما فعلنا مع الجملة المنفردة (my_sentence)، نحتاج أيضاً لتحويل قائمة الجمل الكاملة (L1) إلى متجهات رقمية لنتمكن من إجراء عملية المقارنة.
  2. **الخطوة 2 (التطبيق):** نستخدم نفس الوظيفة البرمجية التابعة لكائن النموذج والتي تعالج النصوص سواء كانت جملة واحدة أو قائمة من الجمل.
  3. **الخطوة 3 (النتيجة):** إذن الدالة المطلوبة هي: **encode**

سؤال مربع-6: أكمل المقطع البرمجي التالي حتى تستخدم الدالة get_max_sim() نموذج تمثيلات ترميز الجمل ثنائية الاتجاه من المحولات (SBERT) للمقارنة بين جملة محددة my_sentence وكل الجمل الواردة في قائمة أخرى من الجمل L1. يجب أن تعيد الدالة الجملة ذات مؤشر التشابه الأعلى من L1 إلى my_sentence.

الإجابة: util

خطوات الحل:

  1. **الخطوة 1 (المفهوم):** توفر مكتبة `sentence_transformers` أدوات مساعدة (Utilities) جاهزة لحساب التشابه بين المتجهات، مثل تشابه جيب التمام (Cosine Similarity).
  2. **الخطوة 2 (التطبيق):** للوصول إلى دالة `cos_sim` أو الدوال المشابهة، يجب استدعاء الوحدة الفرعية المخصصة للأدوات المساعدة داخل المكتبة.
  3. **الخطوة 3 (النتيجة):** هذه الوحدة تُسمى: **util**

سؤال مربع-7: أكمل المقطع البرمجي التالي حتى تستخدم الدالة get_max_sim() نموذج تمثيلات ترميز الجمل ثنائية الاتجاه من المحولات (SBERT) للمقارنة بين جملة محددة my_sentence وكل الجمل الواردة في قائمة أخرى من الجمل L1. يجب أن تعيد الدالة الجملة ذات مؤشر التشابه الأعلى من L1 إلى my_sentence.

الإجابة: my_embedding

خطوات الحل:

  1. **الخطوة 1 (المفهوم):** عند حساب التشابه، تأخذ دالة المقارنة مدخلين: المتجه الأول (الهدف) ومجموعة المتجهات الأخرى للمقارنة معها.
  2. **الخطوة 2 (التطبيق):** المتغير الذي قمنا بتخزين تمثيل الجملة الخاصة بنا فيه (التي تم تحويلها في الخطوة 4) هو ما يجب وضعه كمعامل أول.
  3. **الخطوة 3 (النتيجة):** بناءً على تسمية المتغيرات في الكود، المعامل هو: **my_embedding**

سؤال مربع-8: أكمل المقطع البرمجي التالي حتى تستخدم الدالة get_max_sim() نموذج تمثيلات ترميز الجمل ثنائية الاتجاه من المحولات (SBERT) للمقارنة بين جملة محددة my_sentence وكل الجمل الواردة في قائمة أخرى من الجمل L1. يجب أن تعيد الدالة الجملة ذات مؤشر التشابه الأعلى من L1 إلى my_sentence.

الإجابة: L_embeddings

خطوات الحل:

  1. **الخطوة 1 (المفهوم):** المعامل الثاني في دالة حساب التشابه يجب أن يكون هو قائمة المتجهات التي نريد البحث فيها عن الجملة الأكثر شبهاً.
  2. **الخطوة 2 (التطبيق):** لقد قمنا سابقاً بترميز القائمة L1 وتخزين نتيجتها في متغير مخصص للمتجهات الجماعية.
  3. **الخطوة 3 (النتيجة):** هذا المتغير هو: **L_embeddings**

سؤال مربع-9: أكمل المقطع البرمجي التالي حتى تستخدم الدالة get_max_sim() نموذج تمثيلات ترميز الجمل ثنائية الاتجاه من المحولات (SBERT) للمقارنة بين جملة محددة my_sentence وكل الجمل الواردة في قائمة أخرى من الجمل L1. يجب أن تعيد الدالة الجملة ذات مؤشر التشابه الأعلى من L1 إلى my_sentence.

الإجابة: L1[winner_index]

خطوات الحل:

  1. **الخطوة 1 (المفهوم):** بعد تحديد مؤشر (Index) الجملة التي حققت أعلى درجة تشابه وتخزينه في `winner_index`، نريد الآن استرجاع النص الأصلي لهذه الجملة.
  2. **الخطوة 2 (التطبيق):** يتم ذلك عن طريق الوصول إلى القائمة الأصلية للجمل `L1` باستخدام هذا المؤشر الذي حصلنا عليه.
  3. **الخطوة 3 (النتيجة):** لذلك، نكتب الأمر البرمجي: **L1[winner_index]**

📝 أسئلة اختبارية

عدد الأسئلة: 7

سؤال 5: أكمل المقطع البرمجي التالي حتى تستخدم الدالة get_max_sim() نموذج تمثيلات ترميز الجمل ثنائية الاتجاه من المحولات (SBERT) للمقارنة بين جملة محددة my_sentence وكل الجمل الواردة في قائمة أخرى من الجمل L1. يجب أن تعيد الدالة الجملة ذات مؤشر التشابه الأعلى من L1 إلى my_sentence.

الإجابة الصحيحة: انظر الأسئلة الفرعية

الشرح: هذا سؤال رئيسي يحتوي على أسئلة فرعية تتعلق بإكمال المقطع البرمجي

تلميح: راجع الأسئلة الفرعية أدناه لإكمال الأجزاء الناقصة في الكود

سؤال 5: from sentence_transformers import _____, util

  • أ) SentenceTransformer
  • ب) SBERTModel
  • ج) TransformerEncoder
  • د) BERTModel

الإجابة الصحيحة: SentenceTransformer

الشرح: يجب استيراد SentenceTransformer من مكتبة sentence_transformers لإنشاء نموذج SBERT

تلميح: ما هو اسم الفئة الرئيسية في مكتبة sentence_transformers لإنشاء النماذج؟

سؤال 5: model_sbert = _____('all-MiniLM-L6-v2')

  • أ) SentenceTransformer
  • ب) SBERT
  • ج) Transformer
  • د) Model

الإجابة الصحيحة: SentenceTransformer

الشرح: يتم إنشاء نموذج SBERT باستخدام فئة SentenceTransformer مع اسم النموذج 'all-MiniLM-L6-v2'

تلميح: ما هو اسم الفئة التي تم استيرادها في السطر السابق؟

سؤال 5: my_embedding = model_sbert._____(([my_sentence], convert_to_tensor=True)

  • أ) encode
  • ب) embed
  • ج) transform
  • د) convert

الإجابة الصحيحة: encode

الشرح: يتم استخدام دالة encode() لتحويل الجملة إلى تمثيل متجهي (embedding) باستخدام نموذج SBERT

تلميح: ما هي الدالة المستخدمة في SBERT لتحويل النص إلى تمثيل متجهي؟

سؤال 5: L_embeddings = model_sbert._____(L, convert_to_tensor=True)

  • أ) encode
  • ب) embed
  • ج) transform
  • د) process

الإجابة الصحيحة: encode

الشرح: نفس الدالة encode() تستخدم لتحويل قائمة الجمل L إلى تمثيلات متجهية

تلميح: هي نفس الدالة المستخدمة في السؤال السابق لتحويل الجمل إلى تمثيلات

سؤال 5: similarity_scores = _____.cos_sim(_____, _____)

  • أ) util.cos_sim(my_embedding, L_embeddings)
  • ب) np.cos_sim(my_embedding, L_embeddings)
  • ج) torch.cos_sim(my_embedding, L_embeddings)
  • د) sbert.cos_sim(my_embedding, L_embeddings)

الإجابة الصحيحة: similarity_scores = util.cos_sim(my_embedding, L_embeddings)

الشرح: يتم حساب تشابه جيب التمام باستخدام util.cos_sim() بين تمثيل الجملة my_sentence وتمثيلات قائمة الجمل L

تلميح: ما هي المكتبة التي تحتوي على دالة cos_sim() لحساب التشابه؟ وما هي المتغيرات التي تمثل التمثيلات؟

سؤال 5: return _____

  • أ) L1[winner_index]
  • ب) L[winner_index]
  • ج) my_sentence
  • د) winner_index

الإجابة الصحيحة: return L1[winner_index]

الشرح: يجب إرجاع الجملة من القائمة L1 التي تحتوي على أعلى تشابه، باستخدام الفهرس winner_index

تلميح: ما هو اسم القائمة الأصلية للجمل؟ وكيف نصل إلى عنصر باستخدام الفهرس؟

🎴 بطاقات تعليمية للمراجعة

عدد البطاقات: 5 بطاقة لهذه الصفحة

ما هي المكتبة الرئيسية المستخدمة في مقطع البرمجي لترميز الجمل والمقارنة بينها باستخدام نماذج SBERT؟

الإجابة: المكتبة الرئيسية المستخدمة هي `sentence_transformers`.

الشرح: يتم استيراد `SentenceTransformer` من مكتبة `sentence_transformers`، وهي المكتبة الأساسية لتطبيق نماذج SBERT.

تلميح: ابحث عن اسم المكتبة التي تحتوي على `SentenceTransformer` في استيرادها.

ما هي الدالة المستخدمة من مكتبة `combinations` لإنشاء تركيبات محتملة؟

الإجابة: الدالة المستخدمة هي `combinations`.

الشرح: المقطع البرمجي يستورد دالة `combinations` من مكتبة `combinations`، على الرغم من أن استخدامها غير ظاهر مباشرة في الجزء المعروض من الكود، إلا أن الاستيراد يشير إلى إمكانية استخدامها لاحقاً أو في سياقات أخرى لإنشاء تراكيب من العناصر.

تلميح: اسم الدالة المستوردة من `combinations` يتطابق مع اسم المكتبة نفسها.

ما هو اسم النموذج المستخدم من `all-MiniLM-L6-v2` في المقطع البرمجي؟

الإجابة: اسم النموذج هو `all-MiniLM-L6-v2`.

الشرح: يتم تحميل النموذج `all-MiniLM-L6-v2` عند إنشاء كائن `model_sbert` باستخدام `SentenceTransformer('all-MiniLM-L6-v2')`، وهو نموذج مصمم لترميز الجمل بكفاءة.

تلميح: النموذج هو السلسلة النصية التي تمرر كمعامل عند إنشاء كائن `SentenceTransformer`.

ما هي طريقة الترميز (embedding) التي تستخدمها الدالة `model_sbert.___________`؟

الإجابة: تستخدم الدالة `encode` لترميز الجمل.

الشرح: الدالة `encode` في مكتبة `sentence_transformers` هي المسؤولة عن تحويل النصوص إلى تمثيلات متجهية (embeddings).

تلميح: لتحويل نص إلى تمثيل رقمي (embedding) باستخدام نماذج اللغة، غالباً ما تُستخدم دالة تحمل اسم 'encode'.

ما هي الدالة المستخدمة لحساب التشابه cos_sim بين متجهين في مكتبة `util`؟

الإجابة: الدالة المستخدمة هي `util.cos_sim`.

الشرح: تُستخدم الدالة `util.cos_sim` لحساب التشابه في جيب التمام بين مجموعتين من المتجهات، وهي طريقة شائعة لقياس مدى تشابه جملتين أو أكثر بناءً على تمثيلاتهما المتجهية.

تلميح: ابحث عن الدالة التي تحسب جيب التمام بين المتجهات في مكتبة `util`.