تخطَّ إلى المحتوى
إسنادISNAD
الاسترجاع المعزّز (RAG)

تقطيع المستندات العربية دون كسر المعنى

لماذا يفشل التقطيع بطول ثابت مع الجداول وملفات PDF والنصّ العربي، وأربع استراتيجيات بديلة، وما الذي يضيفه سياق المستند إلى كل مقطع بحسب تجارب الاسترجاع السياقي.

نُشر حُدّث 5 دقائق قراءة

في كل نظام استرجاع رأيته يفشل، كان التقطيع متّهمًا في نصف الحالات على الأقل. السبب أنه يبدو تفصيلًا تافهًا — «قسّم النصّ كل ٥٠٠ حرف» — بينما هو القرار الذي يحدّد ما الذي يستطيع نظامك أن يعرفه أصلًا. المقطع الذي لا يحوي السؤال وجوابه معًا لن ينقذه أي نموذج تضمين.

المشكلة: الحرف ليس وحدة معنى

خذ صفحة سياسة إجازات فيها جدول: نوع الإجازة، وعدد الأيام، والشروط. التقطيع بطول ثابت يقصّ الجدول في منتصفه، فتحصل على مقطع فيه أسماء بلا أعداد، ومقطع فيه أرقام بلا معنى. سؤال «كم يوم إجازة الأبوّة؟» لن يجد مقطعًا واحدًا يجمعهما.

والعربية تضيف طبقتين:

  • الكثافة الرمزية أعلى: مجزّئات الرموز الشائعة تُنتج للعربية رموزًا أكثر مما تنتجه للنصّ الإنجليزي المكافئ، فحدّ «٥٠٠ رمز» يعني نصًّا عربيًّا أقصر مما تتوقّع.
  • الترقيم أقلّ انضباطًا: كثير من المستندات العربية تستخدم الفاصلة والنقطة بحرّية، فالتقطيع على النقطة وحدها يعطي فوضى.

أربع استراتيجيات

١) طول ثابت مع تراكب

مقاطع بطول ثابت وتراكب ١٠–١٥٪. مقبول لنصّ سردي متجانس (مقالات، محاضر)، وسيّئ لكل ما فيه بنية.

٢) تقطيع بنيوي متدرّج

يقطع على أكبر حدّ متاح أولًا: عنوان ## ← فقرة ← سطر ← جملة ← حرف. هذا هو الافتراضي المعقول لأغلب الحالات، ويحفظ الفقرات سليمة ما لم تتجاوز الحدّ.

SEPARATORS = ["\n## ", "\n### ", "\n\n", "\n", "۔ ", ". ", "، ", " "]

def split(text: str, limit: int, seps: list[str]) -> list[str]:
    if len(text) <= limit or not seps:
        return [text]
    head, *rest = seps
    parts, buffer = [], ""
    for piece in text.split(head):
        candidate = f"{buffer}{head}{piece}" if buffer else piece
        if len(candidate) <= limit:
            buffer = candidate
        else:
            if buffer:
                parts.append(buffer)
            # القطعة نفسها ما تزال أطول من الحدّ: انزل إلى فاصل أدقّ
            parts.extend(split(piece, limit, rest) if len(piece) > limit else [piece])
            buffer = ""
    if buffer:
        parts.append(buffer)
    return parts

٣) تقطيع واعٍ بالمستند

لكل نوع محتوى قاعدته: الجدول وحدة واحدة لا تُقسَّم (وإن طال، يُكرَّر صف الرؤوس في كل جزء)، وكتلة الكود وحدة، والقائمة المرقّمة وحدة. هذا ما يرفع الاستدعاء في التوثيق التقني أكثر من أي تحسين آخر في تجربتي.

٤) التقطيع الدلالي

يُضمَّن كل جملة، ويُقطع عند هبوط حادّ في التشابه بين جملة وتاليتها — أي عند تغيّر الموضوع. جودته أعلى نظريًّا وتكلفته الحسابية أعلى، ومكسبه على مستندات منظّمة غالبًا لا يبرّر التعقيد. جرّبه بعد أن تستنفد ما قبله.

سياق المقطع: التفصيل الذي يغيّر النتيجة

المقطع المعزول يفقد موقعه من المستند، فيصير «حتى ١٤ يومًا» بلا دلالة. الحلّ رخيص: اسبق نصّ كل مقطع بترويسة قصيرة من بياناته الوصفية.

[سياسة الموارد البشرية · القسم ٤: الإجازات · نسخة 2026-03 · سارية]

نصّ المقطع…

الترويسة تُضمَّن مع المقطع فترفع استدعاء الأسئلة التي تذكر اسم القسم أو المستند، وتعطي النموذج ما يستشهد به. والمبدأ نفسه — إغناء المقطع بسياقه قبل التضمين — هو ما بنت عليه Anthropic تقريرها عن «الاسترجاع السياقي» [1]، حيث خفّض معدّل فشل الاسترجاع في أعلى ٢٠ نتيجة بنحو ٣٥٪. اقرأ الرقم كإشارة اتجاه على بيانات غير بياناتك، لا كوعد.

القياس: أيّها أنسب لبياناتك؟

  1. اجمع ٥٠ سؤالًا حقيقيًّا، وحدّد يدويًّا المقطع أو الصفحة التي تحوي الجواب.
  2. ابنِ فهرسًا بكل استراتيجية على حدة.
  3. احسب Recall@5 وMRR لكل واحد.
  4. اختر الأعلى، ثم اضبط الطول والتراكب داخل الاستراتيجية الفائزة.
الاستراتيجية الترتيب النسبي على توثيق تقني الملاحظة
طول ثابت ٨٠٠ حرف الأضعف يمزّق الجداول
بنيوي متدرّج جيد الافتراضي المعقول
واعٍ بالمستند الأعلى يحتاج معالجة لكل نوع محتوى
دلالي جيد بتكلفة أعلى مكسبه محدود على نصّ منظّم

الترتيب أعلاه من تجربة على مجموعة توثيق داخلية؛ لا تنقله كأرقام مطلقة — النتيجة تتغيّر بتغيّر نوع المستندات.

متى لا يهمّ التقطيع كثيرًا

إن كانت مستنداتك قصيرة ومستقلة — بطاقات منتجات، أسئلة شائعة، تذاكر دعم — فكل وثيقة مقطع واحد وانتهى الأمر. التعقيد يبدأ مع المستندات الطويلة المتعدّدة الأقسام.

الأخطاء الشائعة

  1. ضبط الطول قبل اختيار الاستراتيجية — ترتيب معكوس يهدر الوقت.
  2. تجاهل رداءة استخراج PDF: نصّ مشوّه قبل التقطيع يعني فهرسًا مشوّهًا مهما أحسنت القطع.
  3. تراكب مبالغ فيه (٥٠٪) يضخّم الفهرس ويكرّر النتائج بلا مكسب.
  4. عدم تخزين النصّ الأصلي مع المتجه، فتعجز عن عرض المصدر للمستخدم.

الأسئلة الشائعة

ما الطول المثالي للمقطع بالعربية؟

لا يوجد ثابت. ابدأ بحدود ٤٠٠–٦٠٠ رمزًا — أقصر مما تعتاده في الإنجليزية لأن العربية تُنتج رموزًا أكثر للنصّ المكافئ — ثم اضبط بالقياس. الأهمّ أن يبقى المقطع وحدة معنى مكتملة.

هل التراكب ضروري دائمًا؟

لا. مع التقطيع البنيوي أو الواعي بالمستند تكون الحدود دلالية أصلًا، فيكفي تراكب صغير أو صفر. التراكب علاج لعيب التقطيع الأعمى لا فضيلة بذاته.

كيف أتعامل مع الجداول في PDF؟

استخرجها كجداول لا كنصّ متدفّق، وحوّل كل جدول إلى Markdown، واحفظه مقطعًا واحدًا مع ترويسة مصدره. وإن اضطُررت لتقسيمه، كرّر صف الرؤوس في كل جزء.

هل أعيد بناء الفهرس كاملًا عند تعديل مستند؟

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

المراجع

  1. Anthropic. Introducing Contextual Retrieval. anthropic.com
  2. Lewis, P. et al. Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks. arXiv:2005.11401
  3. Gao, Y. et al. Retrieval-Augmented Generation for Large Language Models: A Survey. arXiv:2312.10997
  4. Thakur, N. et al. BEIR: A Heterogeneous Benchmark for Zero-shot Evaluation of IR Models. arXiv:2104.08663

أدوات مذكورة في هذا المقال

اقرأ بعده

غلاف مقال: دليل RAG الكامل: من المستند إلى إجابة موثوقة
RAG8 دقائق قراءة

دليل RAG الكامل: من المستند إلى إجابة موثوقة

خط أنابيب الاسترجاع المعزّز بمراحله الست، وأين ينكسر فعلًا في الإنتاج، وما تقوله أوراق BEIR وDPR و«الضياع في المنتصف» عن كل قرار تتخذه فيه.

اقرأ المقال

نشرة إسناد الأسبوعية

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

النشرة البريدية لم تُفتَح بعد. حتى ذلك الحين، تصلك المقالات كاملةً عبر تغذية RSS.