استراتيجيات تقسيم النصوص الطويلة
أساليب التقسيم إلى أحجام ثابتة أو عند حدود الجمل أو وفق الدلالة
استراتيجيات تقسيم النصوص الطويلة درس مجاني في AI Prompt Engineering على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في AI Prompt Engineering، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة AI Prompt Engineering 4 دروس في المجموع.
لماذا تمثل المستندات الطويلة تحديًا
تمتلك نماذج LLMs نافذة سياق — وهي الحد الأقصى لعدد الرموز التي يمكنها معالجتها في الوقت نفسه. يدعم GPT-4 عددًا يصل إلى 128k من الرموز، ويدعم Claude عددًا يصل إلى 200k، لكن العديد من المستندات يتجاوز هذه الحدود أيضًا. والأهم من ذلك أن الأبحاث تُظهر أن دقة النموذج غالبًا ما تتدهور في السياقات الطويلة جدًا. ويُعد التقسيم إلى مقاطع عملية تقسيم المستندات إلى أجزاء أصغر قبل معالجتها.
التقسيم إلى مقاطع ذات حجم ثابت
يقسم التقسيم إلى مقاطع ذات حجم ثابت النص كل N من الرموز (أو الأحرف) بغض النظر عن حدود المحتوى. وهذه أبسط استراتيجية ولا تتطلب فهمًا دلاليًا.
حجم المقطع المعتاد: 500–1000 رمز. يسهل فهرسة المقاطع واستردادها، لكنها قد تقطع الجمل في منتصفها، مما يؤدي إلى فقدان المعنى عند الحدود.
import tiktoken
def fixed_chunk(text, max_tokens=1000):
enc = tiktoken.get_encoding('cl100k_base')
tokens = enc.encode(text)
chunks = []
for i in range(0, len(tokens), max_tokens):
chunk_tokens = tokens[i:i + max_tokens]
chunks.append(enc.decode(chunk_tokens))
return chunks
chunks = fixed_chunk(long_document)
print(f'Total chunks: {len(chunks)}')موازنة مزايا التقسيم ثابت الحجم وعيوبه
المزايا:
- سهل التنفيذ — لا حاجة إلى NLP
- أحجام مقاطع متوقعة — مما يسهّل إدارة تكاليف API
- معالجة سريعة
العيوب:
- يقطع النص عبر حدود الجمل والفقرات
- تفقد الجملة المقسمة بين مقطعين سياقها عند الاسترداد
- غير مناسب للتلخيص — فقد ينتهي المقطع في منتصف حجة
التقسيم عند حدود الجمل
يقسم التقسيم عند حدود الجمل النص عند فواصل الجمل أو الفقرات الطبيعية. وينتهي كل مقطع عند نقطة كاملة، مما يضمن عدم قطع أي جملة إلى نصفين. وينتج عن ذلك مقاطع أكثر قابلية للقراءة واتساقًا.
استخدم أداة لتقسيم الجمل (spaCy أو NLTK) لاكتشاف الحدود، ثم اجمع الجمل حتى يصل المقطع إلى الحجم المستهدف.
import spacy
nlp = spacy.load('en_core_web_sm')
def sentence_chunk(text, max_tokens=1000):
doc = nlp(text)
sentences = [sent.text.strip() for sent in doc.sents]
chunks, current, count = [], [], 0
for sent in sentences:
word_count = len(sent.split())
if count + word_count > max_tokens and current:
chunks.append(' '.join(current))
current, count = [], 0
current.append(sent)
count += word_count
if current:
chunks.append(' '.join(current))
return chunksالتقسيم الدلالي إلى مقاطع
يذهب التقسيم الدلالي إلى مقاطع إلى أبعد من ذلك — فهو يقسم النص عندما يتغير الموضوع. ومن خلال إنشاء تضمينات للجمل المتجاورة وقياس التشابه الجيبي بينها، يمكننا اكتشاف انتقال النقاش إلى موضوع جديد.
عندما ينخفض التشابه عن حد معين، أدرج حدًا للمقطع. وينتج عن ذلك مقاطع متماسكة موضوعيًا، وهي مثالية للتوليد المعزز بالاسترداد (RAG).
from sentence_transformers import SentenceTransformer
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
model = SentenceTransformer('all-MiniLM-L6-v2')
def semantic_chunk(sentences, threshold=0.75):
embeddings = model.encode(sentences)
chunks, current = [], [sentences[0]]
for i in range(1, len(sentences)):
sim = cosine_similarity(
[embeddings[i-1]], [embeddings[i]]
)[0][0]
if sim < threshold:
chunks.append(' '.join(current))
current = []
current.append(sentences[i])
if current:
chunks.append(' '.join(current))
return chunksمقارنة الاستراتيجيات الثلاث
إليك مقارنة جنبًا إلى جنب لمساعدتك على الاختيار:
- الحجم الثابت: الأسرع، لكنه الأقل دقة عند تحديد الحدود — استخدمه لمسارات المعالجة البسيطة
- حدود الجمل: يحافظ على سلامة الجمل — استخدمه عندما يكون الاتساق مهمًا
- الدلالي: يحقق أفضل تماسك موضوعي — استخدمه مع RAG عندما يكون استرداد النتائج بدقة أمرًا بالغ الأهمية
عمليًا، يضيف التقسيم الدلالي زمن انتقال بسبب حساب التضمينات. اختر الاستراتيجية بناءً على متطلبات دقة الاسترداد.
التقسيم إلى مقاطع لمهام الاسترداد
في التوليد المعزز بالاسترداد (RAG)، تصبح المقاطع وحدة البحث. ويُنشأ تضمين لاستعلام المستخدم، ثم تُسترد المقاطع الأكثر تشابهًا وتُدرج في المطالبة.
تحسن المقاطع الأصغر (200–400 رمز) دقة الاسترداد — إذ يحتوي كل مقطع على فكرة مركزة واحدة. أما المقاطع الأكبر (800–1000 رمز) فتوفر سياقًا أوسع، لكنها قد تتضمن محتوى غير ذي صلة إلى جانب المقطع المطلوب.
import openai
import numpy as np
client = openai.OpenAI(api_key='sk-...')
def embed(text):
resp = client.embeddings.create(
model='text-embedding-3-small',
input=text
)
return np.array(resp.data[0].embedding)
def retrieve(query, chunks, top_k=3):
q_emb = embed(query)
scores = [(i, np.dot(q_emb, embed(c))) for i, c in enumerate(chunks)]
scores.sort(key=lambda x: x[1], reverse=True)
return [chunks[i] for i, _ in scores[:top_k]]التقسيم إلى مقاطع لمهام التلخيص
بالنسبة إلى التلخيص، يجب أن تكون المقاطع كبيرة بما يكفي لتتضمن حجة أو قسمًا كاملًا. وتعمل المقاطع ذات حدود الجمل، التي يتراوح حجمها بين 600 و800 رمز، بشكل جيد.
يُلخّص كل مقطع بصورة مستقلة (خطوة map)، ثم تُجمع الملخصات في ملخص نهائي (خطوة reduce). وهذا هو نمط map-reduce الكلاسيكي الذي سيجري تناوله في الدرس التالي.
التداخل: ربط حدود المقاطع
إحدى التقنيات العملية لتقليل أخطاء الحدود هي إضافة تداخل بين المقاطع. إذ تُكرر آخر 100–200 رمز من المقطع N في بداية المقطع N+1.
يضمن التداخل ظهور الجملة الممتدة عبر حد ما كاملةً في مقطع واحد على الأقل. وهذا مهم بصفة خاصة للاسترداد — إذ سيطابق الاستعلام المتعلق بموضوع يمتد عبر حد ما المقطع المتداخل.
def fixed_chunk_with_overlap(text, max_tokens=1000, overlap=200):
enc = tiktoken.get_encoding('cl100k_base')
tokens = enc.encode(text)
chunks = []
step = max_tokens - overlap
for i in range(0, len(tokens), step):
chunk_tokens = tokens[i:i + max_tokens]
chunks.append(enc.decode(chunk_tokens))
if i + max_tokens >= len(tokens):
break
return chunksإثراء البيانات الوصفية لكل مقطع
يجب أن يحمل كل مقطع بيانات وصفية حتى تتمكن الخطوات اللاحقة من الرجوع إلى مصدره:
source: اسم الملف أو عنوان URLpage: رقم الصفحةchunk_index: موضع المقطع في المستندsection: الفصل أو العنوان
تُخزّن هذه البيانات الوصفية إلى جانب التضمين في قاعدة بيانات متجهية (Pinecone أو Chroma أو Weaviate)، وتُعاد مع المقاطع المستردة حتى يتمكن نموذج LLM من الاستشهاد بالمصادر.
def chunk_with_metadata(text, source='doc.pdf', page=1):
chunks = fixed_chunk_with_overlap(text)
return [
{
'text': chunk,
'metadata': {
'source': source,
'page': page,
'chunk_index': i
}
}
for i, chunk in enumerate(chunks)
]اختيار الاستراتيجية المناسبة
دليل سريع لاتخاذ القرار:
- الأولوية للسرعة والمحتوى نثري: التقسيم عند حدود الجمل
- دقة الاسترداد بالغة الأهمية: التقسيم الدلالي إلى مقاطع صغيرة (300 رمز)
- تلخيص كتاب أو تقرير: التقسيم عند حدود الجمل، مع مقاطع أكبر (800 رمز)، واستخدام map-reduce
- المستندات القانونية/التقنية: التقسيم الدلالي إلى مقاطع للحفاظ على العبارات مترابطة
احرص دائمًا على قياس معدل استرجاع النتائج باستخدام مجموعة استعلامات تمثيلية قبل اعتماد استراتيجية معينة.
اختبار المعرفة
ما استراتيجية تقسيم النص التي تفصل النص عندما ينخفض التشابه الكوني بين تضمينات الجمل المتجاورة عن عتبة معينة؟
مراجعة: استراتيجيات تقسيم النص إلى مقاطع
لقد تعلّمتم ثلاث استراتيجيات أساسية لتقسيم النص إلى مقاطع:
- الحجم الثابت: تقسيم النص كل N من الرموز — سريع وبسيط ولا يراعي الحدود
- حدود الجمل: التقسيم عند نهايات الجمل الطبيعية — متماسك ومتوسط التعقيد
- دلالي: التقسيم عند تغيّر الموضوعات باستخدام تشابه التضمينات — الأدق والأعلى تكلفة
أضيفوا تداخلاً بين المقاطع لتقليل أخطاء الحدود، وأرفقوا دائماً بيانات وصفية (المصدر، والصفحة، والفهرس) لتمكين الاستشهاد وقابلية التتبع. يتناول الدرس التالي نمط تلخيص Map-Reduce.
تعلم AI Prompt Engineering مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 53
- الدروس
- 199
الأسئلة الشائعة
هل درس «استراتيجيات تقسيم النصوص الطويلة» مجاني؟
نعم — نص درس «استراتيجيات تقسيم النصوص الطويلة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة AI Prompt Engineering، انتقل إلى CoddyKit PRO. تتضمن دورة AI Prompt Engineering 4 دروس في المجموع.
ماذا ستتعلم في «استراتيجيات تقسيم النصوص الطويلة»؟
أساليب التقسيم إلى أحجام ثابتة أو عند حدود الجمل أو وفق الدلالة تتمرن على AI Prompt Engineering مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ AI Prompt Engineering؟
لا تُشترط خبرة سابقة. AI Prompt Engineering على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «استراتيجيات تقسيم النصوص الطويلة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس AI Prompt Engineering هذا؟
نعم. كل درس في AI Prompt Engineering يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- استراتيجيات تقسيم النصوص الطويلة
- نمط تلخيص Map-Reduce
- التلخيص الهرمي
- الحفاظ على السياق عبر الأجزاء