AI Engineering Academy · درس

لماذا يضر التقسيم الساذج بالاسترجاع

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

الدرس 1 من 413 خطوة

لماذا يضر التقسيم الساذج بالاسترجاع درس مجاني في AI Engineering Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في AI Engineering Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة AI Engineering Academy 4 دروس في المجموع.

تكلفة التقسيم السيئ

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

إجابات موزعة على الحدود

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

فقدان السياق بسبب العناوين

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

مزالق التقسيم ذي الحجم الثابت

يقسّم التقسيم ذو الحجم الثابت النص كل N حرفًا أو رمزًا، بغض النظر عن حدود الجمل. وهذه الطريقة سريعة وبسيطة، لكنها كثيرًا ما تقطع الجملة في منتصفها. فالجزء الذي ينتهي بـ 'The model was trained on' والجزء التالي الذي يبدأ بـ 'a dataset of 500 billion tokens' لا معنى لأي منهما بمفرده.

from langchain.text_splitter import CharacterTextSplitter

# Naive fixed-size: may break mid-sentence
splitter = CharacterTextSplitter(chunk_size=200, chunk_overlap=0)
chunks = splitter.split_text(document_text)
print(f'Created {len(chunks)} chunks')
print('First chunk:', chunks[0])

التداخل لا يساعد دائمًا

من الحلول الشائعة إضافة تداخل بين الأجزاء — أي تكرار آخر N رمزًا من جزء في بداية الجزء التالي. يساعد ذلك في التعامل مع الجمل المقسّمة، لكنه يضيف تكرارًا وقد يربك أنظمة الاسترجاع عندما يُسترجع جزءان متشابهان جدًا. التداخل حل مؤقت، وليس علاجًا لمشكلات التقسيم البنيوية.

# Overlap helps partially but adds redundancy
splitter = CharacterTextSplitter(
    chunk_size=500,
    chunk_overlap=50  # last 50 chars repeated in next chunk
)
chunks = splitter.split_text(document_text)

قياس معدل فشل الاسترجاع

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

def hit_rate(queries_and_answers, retriever, k=5):
    hits = 0
    for query, expected_text in queries_and_answers:
        results = retriever.retrieve(query, k=k)
        retrieved_texts = [r.page_content for r in results]
        if any(expected_text in text for text in retrieved_texts):
            hits += 1
    return hits / len(queries_and_answers)

مشكلات التعليمات البرمجية والبيانات المهيكلة

تحتوي ملفات التعليمات البرمجية وJSON والجداول على وحدات منطقية — مثل الدوال والكائنات وصفوف الجداول — ينبغي ألا تُقسّم. فتقسيم تعريف دالة Python بين جزأين يعني أن أيًا منهما لن يكون مفهومًا بمفرده. وعندما يعثر نظام الاسترجاع على الجزء الثاني، سيرى تعليمات برمجية بلا وسائط ولا سياق.

# Bad: splits code arbitrarily
bad_chunk_1 = 'def calculate_price(item, qty'  # incomplete!
bad_chunk_2 = ', discount):\n    return item.price * qty * (1 - discount)'

# Good: keep the full function together
good_chunk = 'def calculate_price(item, qty, discount):\n    return item.price * qty * (1 - discount)'

المستندات الطويلة وفقدان المحتوى الأوسط

تُظهر الأبحاث على LLMs ظاهرة 'الفقدان في المنتصف': فعندما يُسترجع عدد كبير من الأجزاء ويُحشر في prompt، ينتبه النموذج إلى المحتوى القريب من البداية والنهاية، لكنه يميل إلى تجاهل المحتوى الموجود في المنتصف. ويزيد التقسيم السيئ الذي ينتج أجزاء صغيرة كثيرة ومنخفضة الجودة هذه المشكلة، لأنه يخفف الإشارة ذات الصلة.

تشخيص الأجزاء السيئة يدويًا

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

import random

def audit_chunks(chunks, sample_size=10):
    sample = random.sample(chunks, min(sample_size, len(chunks)))
    for i, chunk in enumerate(sample):
        print(f'--- Chunk {i+1} ({len(chunk)} chars) ---')
        print(chunk[:300])
        print()

عندما يكون حجم الجزء كبيرًا جدًا

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

استراتيجيات لإصلاح هذه المشكلات

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

تحقق سريع

اختبر مدى فهمك لأنماط فشل تقسيم النصوص التي تناولها هذا الدرس.

مراجعة الدرس

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

البدء مجانًا

تعلم Python مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
30
الدروس
120

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

هل درس «لماذا يضر التقسيم الساذج بالاسترجاع» مجاني؟

نعم — نص درس «لماذا يضر التقسيم الساذج بالاسترجاع» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة AI Engineering Academy، انتقل إلى CoddyKit PRO. تتضمن دورة AI Engineering Academy 4 دروس في المجموع.

ماذا ستتعلم في «لماذا يضر التقسيم الساذج بالاسترجاع»؟

حلّلوا إخفاقات استرجاع حقيقية تسبب فيها التقسيم السيئ، بما في ذلك انقسام الإجابات بين حدود المقاطع وفقدان السياق الناتج عن العناوين وعناوين الأقسام. تتمرن على AI Engineering Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ AI Engineering Academy؟

لا تُشترط خبرة سابقة. AI Engineering Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «لماذا يضر التقسيم الساذج بالاسترجاع»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس AI Engineering Academy هذا؟

نعم. كل درس في AI Engineering Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. لماذا يضر التقسيم الساذج بالاسترجاع
  2. التقسيم الدلالي باستخدام تشابه التضمينات
  3. الاسترجاع من الأبناء إلى الآباء ومن الصغير إلى الكبير
  4. استراتيجيات خاصة بالمستندات للبرمجيات البرمجية وHTML
← العودة إلى AI Engineering Academy