نماذج اللغة2019متوسط11 دقيقة قراءة

Sentence-BERT: تضمينات الجمل باستخدام شبكات BERT السيامية

Sentence-BERT: Sentence Embeddings Using Siamese BERT-Networks

Reimers, N. · Gurevych, I. — EMNLP-IJCNLP

المشكلة

يُعطي BERT نتائج ممتازة في مهام مقارنة الجمل، ، لكنّه يعتمد بنية المرمِّز التقاطعي حيث يجب إدخال الجملتين معاً في كل مرة. هذا يعني أنّ مقارنة 10,000 جملة ببعضها تحتاج قرابة 50 مليون تمريرة أمامية، أي نحو 65 ساعة على معالج V100. والبديل البسيط — أن نستخرج متجهاً واحداً لكل جملة من BERT بحساب المتوسط أو بأخذ مخرج رمز [CLS] — يُنتج تمثيلات أضعف حتى من متوسطات GloVe عند قياسها . لذلك كان BERT عملياً غير صالح للبحث الدلالي أو التعنقد أو أي مهمة تحتاج مقارنات سريعة على نطاق واسع.

الإسهام

تقترح الورقة Sentence-BERT (اختصاراً SBERT) — وهو تعديل على BERT يستخدم بنية الشبكات السيامية وشبكات الثلاثيات لتوليد تضمينات جمل ثابتة الحجم تحمل دلالة معنوية حقيقية ويمكن مقارنتها مباشرة بتشابه جيب التمام. بعد ضبطه على بيانات اللغوي (SNLI وMultiNLI) بهدف التصنيف، يختصر SBERT البحث عن الزوج الأكثر تشابهاً بين 10,000 جملة من 65 ساعة إلى نحو 5 ثوانٍ دون التضحية بدقة BERT. وعلى سبعة معايير للتشابه الدلالي النصي تفوّق SBERT على InferSent بفارق 11.7 نقطة وعلى Universal Sentence Encoder بفارق 5.5 نقطة وفق .

الأثر

نقل SBERT تضمينات BERT من حيّز البحث الأكاديمي إلى التطبيقات العملية: البحث الدلالي، وكشف المحتوى المكرّر، والتعنقد، والتوليد المعزَّز بالاسترجاع. ومنه انطلقت مكتبة sentence-transformers التي أصبحت من أشهر أُطر التضمين اليوم. كذلك أرسى SBERT نموذج المرمِّز الثنائي كبنية معيارية تعتمد عليها أنظمة الحديثة مثل DPR وContriever ومعظم محرّكات البحث المتجهي. وأثبت أنّ لمرمِّزات مُدرَّبة مسبقاً ببنية سيامية هو الطريقة المُثلى للحصول على تضمينات بمستوى إنتاجي.

تخيّل قاضياً يريد أن يعرف هل شاهدان يحكيان القصة ذاتها. في طريقة BERT، لا بدّ أن يستمع القاضي إلى الشاهدين معاً في كل جلسة — ومع وجود 10,000 شاهد يصبح عنده 50 مليون جلسة. Sentence-BERT يتّبع منهجاً مختلفاً: يُعطي كل شاهد صورة بطاقة — ملخصاً مُكثَّفاً لشهادته. بعدها يكتفي القاضي بمقارنة الصور، فيُنجِز في ثوانٍ ما كان يستغرق أياماً. السرّ في الكاميرا () بحيث يحصل الشهود ذوو الروايات المتقاربة على صور متشابهة.

المشكلة: BERT عاجز عن مقارنة الجمل على نطاق واسع

طريقة BERT في التعامل مع أزواج الجمل تعتمد على بنية : تُربَط الجملتان برمز [SEP] وتدخلان معاً عبر جميع طبقات ، ثم يصدر التنبؤ من التمثيل المشترك. هذه الطريقة تُعطي دقّة عالية جداً — لكنّها كارثة حسابية حين نحتاج مقارنات على نطاق واسع.

لإيجاد أقرب زوج في مجموعة من n جملة نحتاج n(n−1)/2 . حين تكون n = 10,000 نتكلّم عن 50 مليون مقارنة تقريباً — أي نحو 65 ساعة على معالج V100. وعلى مستوى أسئلة Quora البالغة 40 مليون سؤال، استعلام تشابه واحد يستغرق أكثر من 50 ساعة.

الحلّ البديهي — أن نستخرج متجهاً واحداً لكل جملة من BERT — يفشل فشلاً ذريعاً. حساب متوسط مخرجات الرموز يُنتج تضمينات لا تتجاوز 54.81 على معايير التشابه الدلالي النصي وفق ارتباط سبيرمان، واستخدام رمز [CLS] يهبط إلى 29.19 — وكلاهما أسوأ من متوسطات GloVe البسيطة (61.32). السبب أنّ تمثيلات BERT الداخلية لم تُدرَّب أصلاً لتكون متجهات جمل مستقلة قابلة للمقارنة.

افتح في المختبر
قارن بين أسلوب المرمِّز التقاطعي (BERT) وأسلوب المرمِّز الثنائي (SBERT). لاحظ كيف يتضخّم عدد المقارنات مع زيادة الحجم.
تستيقظ التجربة عند وصولك…

الحل: BERT بشبكة سيامية وطبقة تجميع

الفكرة المحورية في Sentence-BERT بسيطة وأنيقة: مرِّر كل جملة باستقلال تامّ عبر مُرمِّز BERT يتشارك الأوزان مع نسخة مطابقة له — أي شبكة سيامية — ثم أضِف فوقه طبقة تجميع تضغط المخرجات متغيّرة الطول في متجه واحد ثابت الحجم، وأخيراً اضبط المنظومة كلّها بحيث تقع الجمل المتشابهة في مواقع قريبة داخل فضاء المتجهات.

تخيّلها كتدريب توأمين: نسختان متطابقتان من BERT (تتشاركان كل المعاملات) تعالج كلّ منهما جملة واحدة. عملية التجميع — وهي افتراضياً لجميع متجهات الرموز المُخرَجة — تضغط كل جملة في . بعدها تُقارَن التضمينات بدالة هدف مناسبة للمهمة أثناء التدريب. وفي مرحلة الاستدلال يكفي ترميز كل جملة مرة واحدة ثم المقارنة بـتشابه جيب التمام.

هذه البنية مستوحاة مباشرة من الشبكات السيامية وشبكات الثلاثيات في FaceNet، التي واجهت المشكلة ذاتها في تمييز الوجوه: بدلاً من مقارنة كل صورة بكل صورة، يتعلّم FaceNet تضميناً مُكثَّفاً لكل وجه يتيح البحث الفوري.

افتح في المختبر
استكشف البنية السيامية: نسختا BERT تتشاركان الأوزان، كلّ منهما تُنتج تضميناً مُجمَّعاً، ودالة الهدف تُقرِّب الجمل المتشابهة من بعضها.
تستيقظ التجربة عند وصولك…

استراتيجيات التجميع: ضغط مخرجات BERT في متجه واحد

BERT يُخرج متجهاً واحداً لكل رمز في الجملة. للحصول على تضمين واحد يمثّل الجملة بأكملها، يُضيف SBERT طبقة تجميع فوق هذه المخرجات. جُرِّبت ثلاث طرق:

  • التجميع بالمتوسط (الافتراضي): نحسب المتوسط الحسابي لجميع متجهات الرموز. هذه الطريقة تُعامل كل رمز بالتساوي وتُنتج ملخصاً متوازناً للجملة كاملة.
  • : نأخذ أعلى قيمة في كل بُعد عبر جميع متجهات الرموز. هذا يلتقط أقوى سمة مُفعَّلة في كل بُعد، فيُبرِز الإشارات الأقوى.
  • تجميع CLS: نستخدم مخرج رمز [CLS] مباشرةً، وهو الأسلوب الذي صُمِّم عليه BERT أصلاً للتصنيف.

كشفت أنّ التجميع بالمتوسط يتفوّق مع هدف التصنيف بدرجة 80.78 سبيرمان على STS، ويُقارب CLS مع هدف الانحدار. في المقابل، التجميع بالحد الأقصى تراجع بشكل ملحوظ مع الانحدار (69.92 مقابل 87.44 للمتوسط). لذلك اعتُمد المتوسط خياراً افتراضياً لأدائه المتّسق عبر جميع الأهداف.

افتح في المختبر
شاهد كيف تضغط كلّ من طرق التجميع بالمتوسط والحد الأقصى وCLS متجهاتِ الرموز في تضمين جملة واحد.
تستيقظ التجربة عند وصولك…

ثلاث دوال هدف للتدريب

البنية السيامية يمكن تدريبها بدوال هدف مختلفة حسب طبيعة البيانات المُعنونة المتوفّرة:

1. هدف التصنيف (الاستدلال اللغوي). حين تكون البيانات من مهمة بثلاث تسميات (استلزام، تناقض، حيادي)، يُؤخذ تضمينا الجملتين u وv ويُربطان بالصيغة [u; v; |u−v|] — أي نُلصق التضمينين معاً ونُضيف الفرق المطلق بين عناصرهما — ثم يُمرَّر الناتج إلى مُصنِّف softmax. الفرق المطلق |u−v| هو الإشارة الأهمّ هنا لأنّه يقيس مباشرةً مقدار التباعد بين التضمينين في كل بُعد على حِدة.

2. هدف الانحدار (التشابه الدلالي). حين تكون التسميات درجات تشابه مستمرة، يُحسب تشابه جيب التمام بين u وv ويُدرَّب النموذج بدالة خسارة متوسط مربع الخطأ.

3. هدف الثلاثيات. لدينا جملة مِرساة a وجملة إيجابية p وجملة سلبية n، والمطلوب أن تكون المسافة بين a وp أصغر من المسافة بين a وn بفارق لا يقلّ عن هامش ε. هذا يتبع التي ابتُكرت أولاً في FaceNet.

o=softmax ⁣(Wt[u;  v;  uv])o = \text{softmax}\!\bigl(W_t \cdot [u;\; v;\; |u - v|]\bigr)
هدف التصنيف — الربط مع الفرق المطلق بين العناصرu وv تضمينا الجملتين بعد التجميع. نربطهما مع الفرق المطلق بالصيغة [u; v; |u−v|] ثم نضربها في مصفوفة أوزان قابلة للتعلّم Wₜ بأبعاد (3d × k)، حيث d بُعد التضمين وk عدد التسميات (3 في حالة الاستدلال اللغوي). الفرق المطلق |u−v| يعمل ككاشف مسافة يُخبرنا في كل بُعد بمقدار الاختلاف بين الجملتين.
Ltriplet=max(apan+ε,  0)\mathcal{L}_{\text{triplet}} = \max\bigl(\|a - p\| - \|a - n\| + \varepsilon,\; 0\bigr)
خسارة الثلاثيات — المِرساة والعيّنة الإيجابية والسلبيةدالة الخسارة تدفع المِرساة a لتقترب من العيّنة الإيجابية p وتبتعد عن السلبية n. الهامش ε (قيمته 1 في الورقة) يضمن وجود فجوة دنيا بين المسافتين. حين يكون الشرط متحققاً مسبقاً تصبح الخسارة صفراً ولا يتدفّق أي تدرّج. تُستخدَم مسافة إقليدس مقياساً.
افتح في المختبر
انقر على أي دالة هدف لتشاهد كيف تُدرِّب الشبكة السيامية.
تستيقظ التجربة عند وصولك…

تفاصيل التدريب

يُجرى الضبط الدقيق لـ SBERT على مجموعتَي بيانات SNLI (570,000 زوج جمل) وMultiNLI (430,000 زوج)، أي نحو مليون مثال تدريبي بثلاث تسميات: استلزام وتناقض وحياد. يُستخدَم هدف التصنيف مع رأس softmax.

ما يلفت الانتباه أنّ التدريب يستغرق أقل من 20 دقيقة — وهو فارق كبير مقارنة بأساليب مثل InferSent التي تبدأ من الصفر. السبب أنّ SBERT ينطلق من أوزان BERT ولا يحتاج إلا حقبة تدريبية واحدة من الضبط. المعاملات الفائقة الأساسية: حجم 16، ومحسِّن Adam بمعدّل تعلُّم 2×10⁻⁵، و على أول 10% من بيانات التدريب.

الفكرة الجوهرية وراء استخدام بيانات الاستدلال اللغوي لبناء تضمينات الجمل هي أنّ مهمة الاستلزام والتناقض والحياد تُجبر النموذج على تعلّم مقارنة دلالية عميقة: الجمل المتلازمة يجب أن تتقارب في الفضاء، والمتناقضة يجب أن تتباعد. وهذا تحديداً هو الشكل الهندسي الذي نحتاجه لتضمينات فعّالة.

الفكرة بالكود

Sentence-BERT — البنية السيامية مع التجميع بالمتوسطpython

مبسَّط لإظهار الفكرة — ليس التنفيذ الحقيقي.

import torch
import torch.nn as nn

class SBERT(nn.Module):
    """BERT سيامي لتوليد تضمينات الجمل."""

    def __init__(self, bert_model, hidden_dim=768, num_labels=3):
        super().__init__()
        self.bert = bert_model       # المُرمِّز المشترك (التوأمان)
        # رأس التصنيف: 3d → عدد التسميات
        self.classifier = nn.Linear(hidden_dim * 3, num_labels)

    def mean_pool(self, token_embeds, attention_mask):
        """حساب متوسط تضمينات الرموز مع تجاهل رموز الحشو."""
        mask = attention_mask.unsqueeze(-1).float()       # (B, T, 1)
        summed = (token_embeds * mask).sum(dim=1)         # (B, d)
        counts = mask.sum(dim=1).clamp(min=1e-9)          # (B, 1)
        return summed / counts                            # (B, d)

    def encode(self, input_ids, attention_mask):
        """ترميز جملة واحدة → تضمين ثابت الحجم."""
        output = self.bert(input_ids, attention_mask=attention_mask)
        return self.mean_pool(output.last_hidden_state, attention_mask)

    def forward(self, ids_a, mask_a, ids_b, mask_b):
        """تمرير أمامي سيامي: ترميز الجملتين ثم التصنيف."""
        u = self.encode(ids_a, mask_a)   # تضمين الجملة أ
        v = self.encode(ids_b, mask_b)   # تضمين الجملة ب

        # الدمج: [u; v; |u - v|] — الفرق المطلق هو الإشارة الأهمّ
        combined = torch.cat([u, v, (u - v).abs()], dim=-1)
        logits = self.classifier(combined)
        return logits

# عند الاستدلال: رمِّز مرة واحدة ثم قارن بتشابه جيب التمام
# emb_a = model.encode(sentence_a)
# emb_b = model.encode(sentence_b)
# similarity = cosine_similarity(emb_a, emb_b)

النتائج: تضمينات أسرع وأجود

حقّق SBERT-NLI-large متوسط ارتباط سبيرمان بلغ 76.55 عبر سبعة معايير للتشابه الدلالي — متفوّقاً على InferSent (65.01) بفارق 11.5 نقطة وعلى Universal Sentence Encoder (71.22) بفارق 5.3 نقطة. وفي مهام على SentEval تحسّن SBERT بأكثر من نقطتين عن كلا الأساسين محققاً أفضل نتيجة في 5 من أصل 7 مهام.

عند تدريبه على مرحلتين — أولاً على الاستدلال اللغوي ثم على بيانات التشابه الدلالي النصي — بلغ SBERT-NLI-STSb-large ارتباط سبيرمان 86.10 على مجموعة الاختبار. المُرمِّز التقاطعي BERT سجّل 88.77 — أعلى بـ 2.7 نقطة فقط، لكن بتكلفة حسابية تربيعية O(n²).

وعلى معيار Argument Facet Similarity جاء أداء SBERT قريباً جداً من المُرمِّز التقاطعي في التقييم داخل الموضوع الواحد. أمّا في مهمة Wikipedia Sections فقد بلغت دقة SBERT 80.42% مقابل 74% لأفضل منهج BiLSTM سابق.

افتح في المختبر
قارن أداء SBERT بطرق التضمين الأساسية عبر معايير التشابه الدلالي. انقر على أي طريقة لإبراز نتائجها.
تستيقظ التجربة عند وصولك…

الكفاءة الحسابية: من 65 ساعة إلى 5 ثوانٍ

التسريع الحسابي هو أبرز ما في الورقة. لإيجاد أقرب زوج من 10,000 جملة:

  • المُرمِّز التقاطعي (BERT): نحو 50 مليون مقارنة زوجية ← 65 ساعة
  • (SBERT): حساب 10,000 تضمين (نحو 5 ثوانٍ) + مصفوفة تشابه جيب التمام (نحو 0.01 ثانية) ← نحو 5 ثوانٍ إجمالاً

أي تسريع بمقدار 47,000 ضعف. ومع هياكل فهرسة مُحسَّنة مثل FAISS ينخفض البحث في 40 مليون سؤال على Quora من 50 ساعة إلى أجزاء من الملّي ثانية.

من حيث الإنتاجية على المعالج الرسومي، يُعالج SBERT مع التجميع الذكي — أي تجميع الجمل المتقاربة في الطول لتقليل الحشو — ما يقارب 2,042 جملة في الثانية، وهو أسرع من InferSent بنسبة 9% ومن Universal Sentence Encoder بنسبة 55%. على المعالج المركزي تكون بنية المُحوِّل أبطأ من طبقة BiLSTM الوحيدة في InferSent، لكن الموازنة بين الجودة والسرعة تصبّ بوضوح في صالح SBERT.

افتح في المختبر
اسحب المنزلق لتغيير عدد الجمل وراقب كيف يتغيّر الزمن بين المرمِّز التقاطعي BERT وSBERT.
تستيقظ التجربة عند وصولك…

أبرز نتائج دراسة الاستئصال

تكشف دراسة الاستئصال أيّ قرارات التصميم لها الأثر الأكبر:

طريقة الربط أهمّ من طريقة التجميع. مع هدف التصنيف على بيانات الاستدلال اللغوي، الانتقال من التجميع بالمتوسط (80.78) إلى CLS (79.80) لا يُكلّف سوى نقطة واحدة. لكنّ حذف |u−v| من الربط يُسقط الأداء بأكثر من 10 نقاط. أي أنّ الفرق المطلق هو إشارة التدريب التي تُعلّم التضمينات أن تحمل دلالة هندسية حقيقية.

التجميع بالمتوسط هو الخيار الأكثر أماناً. يتصدّر المتوسط مع هدف التصنيف ويُنافس مع الانحدار. في المقابل يتراجع التجميع بالحد الأقصى بشدّة مع الانحدار (69.92 مقابل 87.44 للمتوسط) — على الأرجح لأنّ أخذ القيمة الأعلى يُضيّع معلومات كثيرة يحتاجها تقييم التشابه الدقيق.

التدريب على مرحلتين يُحسّن النتائج. البدء بالاستدلال اللغوي ثم الانتقال إلى بيانات التشابه الدلالي النصي يرفع الأداء بنقطة أو نقطتين لـ SBERT وبـ 3–4 نقاط لـ المُرمِّز التقاطعي. التدريب المسبق على الاستدلال اللغوي يمنح النموذج بنية هندسية أوّلية قوية يُهذِّبها الضبط الدقيق على التشابه الدلالي لاحقاً.

ما الذي فتحه SBERT

  1. 2019

    Sentence-BERT

    BERT سيامي مع تجميع بالمتوسط وتدريب على الاستدلال اللغوي. اختصر البحث الزوجي من 65 ساعة إلى 5 ثوانٍ. ومعه وُلدت مكتبة sentence-transformers.

  2. 2020

    DPR — الاسترجاع الكثيف للفقرات

    أخذ نموذج المرمِّز الثنائي من SBERT وطبّقه على الإجابة عن الأسئلة في المجال المفتوح. مرمِّزان منفصلان من BERT: واحد للأسئلة وآخر للفقرات، مع عيّنات سلبية من داخل الدُّفعة.

  3. 2020

    SBERT متعدد اللغات

    وسّع نطاق SBERT ليشمل أكثر من 50 لغة عبر تقطير المعرفة من النسخة الإنجليزية إلى نماذج طلابية متعددة اللغات.

  4. 2022

    Contriever

    تدريب مسبق تبايُني بدون إشراف للاسترجاع الكثيف. وسّع فكرة المرمِّز الثنائي لتعمل دون بيانات مُعنونة، وذلك ببناء أزواج إيجابية عبر اقتصاص أجزاء من النص ذاته.

  5. 2022

    منظومة Sentence Transformers

    تستضيف المكتبة اليوم أكثر من 5,000 نموذج على Hugging Face، وتُشغِّل قواعد بيانات المتجهات وأنابيب التوليد المعزَّز بالاسترجاع والبحث الدلالي في كبرى شركات التقنية.

الإسهام الأعمق لـ SBERT ليس في الأرقام وحدها بل في البنية المعمارية نفسها. فقد أرسى المُرمِّز الثنائي معياراً لأنظمة التضمين الإنتاجية. قبل SBERT كانت الخيارات المتاحة إمّا مُرمِّزات تقاطعية بطيئة أو طرق حساب متوسط ضعيفة الأداء. ما أثبته SBERT هو إمكانية الجمع بين الاثنين: فهم بمستوى BERT مع مقارنة فورية. هذا النموذج يقف اليوم خلف DPR وContriever وColBERT وE5 وعملياً كل نموذج تضمين جمل حديث.

المرجعReimers, Gurevych. Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks. EMNLP-IJCNLP, 2019.

مصطلحات هذه الورقة