استرجاع المعلومات2020متوسط11 دقيقة قراءة
ColBERT: البحث الفعّال والكفوء في المقاطع النصية عبر التفاعل المتأخر السياقي فوق BERT
ColBERT: Efficient and Effective Passage Search via Contextualized Late Interaction over BERT
Khattab, O. · Zaharia, M. — SIGIR
المشكلة
بحلول عام 2020، كانت نماذج الترتيب العصبية المبنية على BERT قد حققت نتائج مبهرة في عبر تمرير كل زوج استعلام–مستند معاً في محوِّل ضخم لحساب درجة الصلة. لكن هذا المنهج — المرمِّز المتقاطع — كان بطيئاً بصورة كارثية: كل مستند مرشّح يستلزم تمريرة أمامية كاملة عبر BERT بالاشتراك مع الاستعلام، ما يرفع التكلفة بمراتب مقارنةً بأساليب الاسترجاع التقليدية. نماذج المرمِّز الثنائي (مثل DPR) حلّت مشكلة السرعة بترميز الاستعلامات والمستندات بشكل مستقل إلى متجهات مفردة، لكنها ضحّت بالتفاعل الدقيق على مستوى الرموز — وهو بالضبط ما جعل المرمِّزات المتقاطعة بتلك الفعالية. الميدان كان بحاجة إلى نموذج يجمع بين السرعة والدقة في آنٍ واحد.
الإسهام
قدّم ColBERT نموذج استرجاع قائماً على ، يُرمِّز الاستعلامات والمستندات بشكل مستقل عبر BERT، وينتج تضمينات مستقلة لكل رمز بدلاً من واحد يمثّل النص كاملاً. عند الاستعلام، تُحسب درجة الصلة بعملية : لكل رمز في الاستعلام، يُؤخذ أعلى تشابه جيب تمام مع أي رمز في المستند، ثم تُجمع هذه القيم عبر جميع رموز الاستعلام. هذا التصميم يتيح حساب تمثيلات المستندات مسبقاً وتخزينها، مع الاحتفاظ بالمطابقة الدقيقة على مستوى الرموز. على معيار MS MARCO، حقق ColBERT MRR@10 بقيمة 36.0 في الاسترجاع الشامل، بأداء ينافس المرمِّزات المتقاطعة المبنية على BERT، لكنه أسرع بأكثر من 170 مرة ويحتاج عمليات حسابية أقل بـ 13,900 مرة لكل استعلام.
الأثر
رسّخ ColBERT التفاعل المتأخر بوصفه نموذجاً أساسياً في استرجاع المعلومات العصبي، فجاء في منتصف الطيف بين المرمِّزات الثنائية والمرمِّزات المتقاطعة. منه وُلد ColBERTv2 (بضغط المتبقيات) وPLAID (للفهرسة الكفوءة)، وألهم أنظمة الاسترجاع متعددة المتجهات عبر أنماط مختلفة، منها ColPali لاسترجاع المستندات البصرية. أصبحت عملية MaxSim لبنة معيارية في أنظمة الاسترجاع، وفلسفة ColBERT التصميمية — افصل الترميز عن المطابقة — أثّرت عملياً في كل بنية استرجاع حديثة.
تخيّل أنك تبحث عن أفضل مطعم يناسب ذوقك وكلّفت شخصاً بهذه المهمة. يشبه ناقد طعام يذهب معك شخصياً إلى كل مطعم، يتذوق الأطباق بجانبك ويناقشك في كل لقمة — نتيجة دقيقة جداً، لكنكما لن تستطيعا زيارة أكثر من ثلاثة مطاعم في اليوم. أما فيشبه قراءة ملخص من سطر واحد على تطبيق تقييمات — سريع كالبرق، لكنك تفقد تفاصيل كل طبق وتميّزه.
ColBERT هو كشّاف طعام: يزور كل مطعم مسبقاً ويسجّل ملاحظات تفصيلية عن كل طبق على حدة. حين تصل أنت بقائمة رغباتك، يتصفح الكشّاف ملاحظاته ويطابق كل رغبة مع طبق بعينه — النتيجة تقارب الزيارة الشخصية من حيث الدقة، لكن بسرعة أكبر بآلاف المرات.
المشكلة: السرعة مقابل الجودة في الاسترجاع العصبي
بحلول عام 2020، كانت نماذج الترتيب المبنية على BERT قد أحدثت نقلة نوعية في مجال استرجاع المعلومات. الفكرة كانت مباشرة: ادمج مع في مُدخَل واحد، مرِّرهما معاً عبر BERT، واستخدم الخرج للتنبؤ بمدى الصلة بينهما. هذا المنهج — المرمِّز المتقاطع — حقّق دقة مذهلة، لأن كل في الاستعلام يستطيع الانتباه لكل رمز في المستند عبر طبقات العميقة.
لكن أين المشكلة؟ تخيّل مجموعة من 8.8 مليون مقطع نصي كمعيار MS MARCO: ستحتاج تشغيل BERT ثمانية ملايين وثمانمئة ألف مرة — مرة لكل زوج استعلام–مستند. حتى لو اكتفيت بإعادة ترتيب أفضل 1000 مستند قادمة من مسترجع أولي، فأنت تحتاج 1000 عبر BERT لكل استعلام واحد. النتيجة أن يقفز إلى عشرات الثواني للاستعلام الواحد.
البديل كان المرمِّزات الثنائية مثل DPR، وفكرتها أن يُرمَّز الاستعلام والمستند كلٌّ على حدة في متجه واحد، ثم يُحسب بينهما للمطابقة السريعة. الميزة هنا أن المستندات تُرمَّز مسبقاً مرة واحدة وتُخزَّن، والبحث بـ يجعل الاسترجاع شبه لحظي. لكن الثمن باهظ: ضغط مستند كامل في متجه واحد يُضيّع التفاصيل الدقيقة على مستوى الرموز — أي الكلمات تحديداً في الاستعلام تتطابق مع أي كلمات في المستند — وهذه التفاصيل بالذات هي ما جعل المرمِّزات المتقاطعة قوية.
الفكرة: التفاعل المتأخر عبر MaxSim
بنية ColBERT تقوم على ثلاث مراحل واضحة: رمِّز، ثم خزِّن، ثم طابِق. الفكرة المحورية هي تأخير التفاعل بين الاستعلام والمستند إلى ما بعد انتهاء ترميز كلٍّ منهما بشكل مستقل عبر BERT — ومن هنا جاءت تسمية «التفاعل المتأخر».
المرحلة الأولى — الترميز المستقل: كلٌّ من الاستعلام والمستند يمرّ عبر BERT منفصل. الفرق الجوهري عن المرمِّزات الثنائية أن ColBERT لا يُجمِّع الرموز في متجه واحد، بل يحتفظ بـ كل رمز على حدة. بعد ذلك يُسقَط كل تضمين عبر طبقة خطية إلى بُعد أصغر (عادةً 128) لتقليل المساحة. النتيجة: الاستعلام يتحوّل إلى مجموعة من تضمينات الرموز، وكذلك المستند.
المرحلة الثانية — التخزين المسبق: جميع تضمينات رموز المستندات تُحسب مرة واحدة وتُحفظ في فهرس. هذه تكلفة تُدفع مرة واحدة فقط. عند وصول استعلام جديد، الاستعلام وحده يحتاج تمريرة عبر BERT.
المرحلة الثالثة — المطابقة عبر MaxSim: لكل رمز في الاستعلام، نبحث عن الرمز في المستند الذي يحقق أعلى معه — وهذا هو «الأقصى» في MaxSim. ثم نجمع هذه القيم القصوى عبر جميع رموز الاستعلام للحصول على درجة الصلة النهائية. هذا هو جوهر التفاعل المتأخر: المطابقة على مستوى الرموز تحدث بعد الترميز، لا أثناءه.
تعزيز الاستعلام برموز [MASK]
في الغالب، الاستعلامات أقصر بكثير من المستندات — بضع كلمات فقط في كثير من الأحيان. ColBERT يتعامل مع هذا التفاوت بحيلة ذكية: تعزيز الاستعلام. الفكرة أن يُضاف إلى الاستعلام قبل ترميزه مجموعة من رموز [MASK] حتى يصل إلى طول ثابت (32 رمزاً افتراضياً).
لماذا [MASK] بالتحديد؟ السبب يعود إلى طريقة لـ BERT: النموذج تعلّم أن يتنبأ بالرموز المخفية اعتماداً على السياق المحيط. فحين يُبطَّن استعلام مثل «عيد استقلال أمريكا» برموز [MASK]، فإن تمثيلات BERT السياقية لتلك المواضع تنتبه تلقائياً لكلمات الاستعلام الحقيقية وتُطوّر تضمينات تمثّل مفاهيم ذات صلة لم تُذكر صراحة — مثل «الرابع من يوليو» أو «عطلة وطنية». النتيجة أن التغطية الدلالية للاستعلام تتوسّع من تلقاء نفسها دون حاجة لتوسيع صريح.
أما المستندات فلا تحتاج أي حشو. تُقطَّع ببساطة إلى رموز وتُرمَّز، وينتج كل رمز تضمينه الخاص. ثم يُحذف تضمين رموز علامات الترقيم لتقليل حجم التخزين.
الفهرسة المسبقة: احسب مرة واحدة، وابحث بلا حدود
القوة الحقيقية في بنية ColBERT تكمن فيما يمكن إنجازه مسبقاً قبل وصول أي استعلام. بما أن الاستعلامات والمستندات تُرمَّز كلٌّ على حدة، فيمكن حساب تمثيلات جميع المستندات وتخزينها مقدَّماً. هذه هي مرحلة الفهرسة.
كل مستند يمرّ عبر BERT مرة واحدة فقط، فينتج من تضمينات الرموز — متجه واحد بأبعاد 128 لكل رمز. تُخزَّن هذه المصفوفات في فهرس مضغوط. لمقاطع MS MARCO البالغ عددها 8.8 مليون مقطع، أتمّ ColBERT فهرسة المجموعة بأكملها في نحو ثلاث ساعات باستخدام أربع وحدات .
وقت الاستعلام، الاستعلام فقط يحتاج ترميزاً عبر BERT — تمريرة أمامية واحدة لتسلسل قصير. بعدها، حساب MaxSim يعمل بالكامل على متجهات مخزّنة سلفاً: ضرب مصفوفات ثم أخذ القيمة القصوى ثم جمع. هذا أرخص بفارق هائل من تشغيل BERT على كل زوج استعلام–مستند.
يدعم ColBERT أيضاً الاسترجاع الشامل من المجموعة الكاملة مباشرةً باستخدام فهارس تشابه المتجهات مثل . بدلاً من الاعتماد على لجلب مرشحين أوليين ثم إعادة ترتيبهم، يستطيع ColBERT الاستعلام في FAISS بتضمين كل رمز من رموز الاستعلام، وتجميع المستندات المرشحة، وحساب درجات MaxSim الكاملة — كل ذلك في أقل من 500 مللي ثانية.
الفكرة في الكود
مبسَّط لإظهار الفكرة — ليس التنفيذ الحقيقي.
import numpy as np
def encode_query(model, query_tokens, pad_to=32, mask_id=103):
"""رمِّز الاستعلام مع حشو [MASK] إلى طول ثابت."""
# بطِّن الاستعلامات القصيرة برموز [MASK]
padded = query_tokens + [mask_id] * (pad_to - len(query_tokens))
# BERT يُرمِّز بشكل مستقل — لا مستند في الأفق!
hidden = model.encode(padded) # (32, 768)
# أسقِط إلى بُعد أقل لتحسين الكفاءة
return model.query_proj(hidden) # (32, 128)
def encode_document(model, doc_tokens):
"""رمِّز المستند — كل رمز يحصل على تضمينه الخاص."""
hidden = model.encode(doc_tokens) # (طول_المستند, 768)
# نفس الإسقاط، لكن بمصفوفة أوزان مختلفة
embs = model.doc_proj(hidden) # (طول_المستند, 128)
# احذف رموز علامات الترقيم لتوفير المساحة
return filter_punctuation(embs, doc_tokens)
def maxsim_score(Q, D):
"""احسب درجة التفاعل المتأخر في ColBERT.
Q: (عدد_رموز_الاستعلام, 128) — تضمينات رموز الاستعلام
D: (عدد_رموز_المستند, 128) — تضمينات رموز المستند
"""
# مصفوفة التشابه: كل رمز استعلام مقابل كل رمز مستند
sim_matrix = Q @ D.T # (N_q, N_d)
# MaxSim: لكل رمز استعلام، أبقِ أفضل تطابق له في المستند
max_sims = sim_matrix.max(axis=1) # (N_q,)
# اجمع عبر جميع رموز الاستعلام ← درجة الصلة النهائية
return max_sims.sum()
# الرؤية الجوهرية: D تُحسب مسبقاً لجميع المستندات وتُخزَّن.
# وقت الاستعلام، Q فقط يحتاج تمريرة BERT واحدة.
# ضرب المصفوفات + الأقصى + الجمع ← عمليات رخيصة جداً.النتائج: السرعة والجودة معاً
قُيِّم ColBERT على معيارين رئيسيين في : MS MARCO (8.8 مليون مقطع) وTREC CAR (29 مليون مقطع). النتائج أثبتت أن التفاعل المتأخر قادر على تحقيق ما بدا مستحيلاً: جودة تقارب المرمِّز المتقاطع بتكلفة أقل بكثير.
(لأفضل 1000 نتيجة من BM25): حقق ColBERT MRR@10 بقيمة 34.9 على MS MARCO، وهي نتيجة تنافس مرمِّزات BERT-base المتقاطعة (MRR@10 نحو 34.7) ولا تقل عن BERT-large (نحو 35.6) إلا بفارق طفيف. لكن ColBERT كان أسرع بـ 170 مرة في زمن الاستجابة، واحتاج عمليات حسابية أقل بـ 13,900 مرة لكل استعلام.
الاسترجاع الشامل: عند الاسترجاع المباشر من المجموعة الكاملة البالغة 8.8 مليون مقطع، حقق ColBERT MRR@10 بقيمة 36.0 مع عند 1000 بنسبة 96.8% — متفوقاً على جميع خطوط الأساس غير المبنية على BERT بفارق كبير. الاسترجاع الشامل استغرق نحو 458 مللي ثانية لكل استعلام، شاملاً ترميز BERT والبحث في FAISS.
على TREC CAR (29 مليون مقطع)، حقق ColBERT درجات MAP تنافسية مع نماذج المرمِّز المتقاطع مع الحفاظ على تفوّقه الكبير في السرعة، وتجاوز جميع خطوط الأساس غير العصبية.
لماذا ينجح: أفضل ما في العالَمين
سرّ فعالية ColBERT أنه يحتفظ بـ** على مستوى الرموز**. المرمِّزات الثنائية حين تُجمِّع كل الرموز في متجه واحد تفقد المعاني الفردية لكل كلمة، بينما ColBERT يحافظ على التعبيرية الكاملة لتضمينات BERT السياقية.
لنأخذ مثالاً عملياً: استعلام مثل «متى صدر مسلسل Transformers الكرتوني؟» — المرمِّز الثنائي مجبر على ضغط هذا كله في متجه واحد، فتختلط «Transformers» و«الكرتوني» و«صدر» في نقطة واحدة. ColBERT في المقابل يُبقي تضمين كل كلمة منفصلاً. عند حساب MaxSim، كلمة «Transformers» تتطابق تحديداً مع عبارة «The Transformers» في المستند، بينما «صدر» تتطابق مع جملة تحتوي تاريخ الإصدار. كل كلمة في الاستعلام تبحث عن أقوى دليل يدعمها في المستند بشكل مستقل عن بقية الكلمات.
هذه المطابقة على مستوى الرموز تمنح ColBERT ميزة إضافية: قابلية التفسير. في المرمِّزات الثنائية تحصل على درجة تشابه واحدة كصندوق أسود، وفي المرمِّزات المتقاطعة تتوزع أنماط الانتباه عبر طبقات كثيرة ويصعب تتبّعها. أما MaxSim في ColBERT فتكشف بوضوح: أيّ كلمة في المستند طابقت كل كلمة في الاستعلام، وبأي درجة.
ماذا فتح ColBERT من أبواب
2020
ColBERT
تفاعل متأخر بعملية MaxSim. ترميز مستقل مع مطابقة على مستوى الرموز. أسرع بـ 170 مرة من المرمِّزات المتقاطعة بجودة منافسة.
2021
ColBERTv2 — تفاعل متأخر خفيف الوزن
أضاف ضغط المتبقيات وتدريباً قائماً على التقطير. قلّص التخزين 6–10 مرات مع رفع MRR@10 إلى 39.7 على MS MARCO. جعل ColBERT جاهزاً للاستخدام الإنتاجي.
2022
PLAID — فهرسة كفوءة لـ ColBERT
توليد مرشحين قائم على المراكز مع تسجيل بالمتبقيات. جعل الاسترجاع الشامل بـ ColBERT عملياً على مجموعات ضخمة.
2023
ColPali — تفاعل متأخر للمستندات البصرية
وسّع فكرة التفاعل المتأخر إلى استرجاع المستندات البصرية عبر نماذج الرؤية واللغة. تضمينات الرقع حلّت محل تضمينات الرموز، لكن MaxSim بقيت كما هي.
2024
RAGatouille وتكامل DSPy
أصبح ColBERT مسترجعاً من الدرجة الأولى في أنظمة التوليد المعزز بالاسترجاع وأطر العمل البرمجية، مُرسِّخاً التفاعل المتأخر كخيار مفضّل للاسترجاع الذي يتطلب جودة عالية.
المساهمة الأعمق لـ ColBERT هي مساهمة معمارية بامتياز: أن توقيت التفاعل لا يقل أهمية عن كمّ التفاعل. حين نقل ColBERT التفاعل من داخل المرمِّز (كما في المرمِّزات المتقاطعة) إلى ما بعده (عبر التفاعل المتأخر)، أثبت أنه يمكن الاستفادة من قوة نماذج اللغة العميقة دون دفع ثمنها الحسابي عند كل استعلام. هذا المبدأ — احسب الجزء المكلف مرة واحدة مسبقاً، واجعل التفاعل خفيفاً — أصبح اليوم الركيزة التي تقوم عليها بنية أنظمة الاسترجاع الحديثة.
المرجعKhattab, Zaharia. ColBERT: Efficient and Effective Passage Search via Contextualized Late Interaction over BERT. SIGIR, 2020.
مصطلحات هذه الورقة
- التفاعل المتأخرLate Interaction
- MaxSimMaxSim
- المُرمِّز الثنائيBi-Encoder
- المُرمِّز التقاطعيCross-Encoder
- الاسترجاع الكثيفDense Retrieval
- استرجاع الفقراتPassage Retrieval
- مُرمِّز الاستعلامQuery Encoder
- فهرس المستنداتDocument Index
- تشابه جيب التمامCosine Similarity
- الضرب النقطيDot Product
- فايس (FAISS)FAISS
- الجار الأقرب التقريبيApproximate Nearest Neighbor
- استرجاع المعلوماتInformation Retrieval
- التضمينEmbedding
- التضمين السياقيContextual Embedding