Semantic Chunking
يقسّم التجزئة الدلالية المستندات عند تغيّر الموضوع، ويقيس ذلك بتشابه التضمينات بين الجمل المتجاورة، بحيث تحتوي كل قطعة على فكرة واحدة.
يقسّم التجزئة الدلالية المستندات إلى مقاطع لأغراض التوليد المعزز بالاسترجاع (RAG) والبحث عند نقاط تغير الموضوع، التي تُكتشف بمقارنة تضمينات الجمل المتجاورة بدلًا من التقسيم بعد عدد ثابت من الأحرف أو الرموز. يغطي كل مقطع فكرة واحدة، لذا يمثّل متجهه الوحيد في قاعدة بيانات المتجهات تلك الفكرة جيدًا، ويتيح المقطع المسترجع لـنموذج اللغة الكبير (LLM) فكرة مكتملة بدلًا من نهاية قسم وبداية القسم التالي.
آلية عمل التجزئة الدلالية#
تتألف الخوارزمية الشائعة، التي روجت لها دروس Greg Kamradt حول تقسيم النصوص ونُفذت باسم SemanticChunker في LangChain، من أربع خطوات. يُقسّم النص إلى جمل، ثم تُضمّن كل جملة، وغالبًا ما تُجمع مع الجمل المجاورة لتقليل الضوضاء. ويُحوّل التشابه الجيبي بين كل زوج من الجمل المتتالية إلى مسافة. ويحدد حد فاصل نقاط التقسيم حيث تكون المسافة كبيرة على نحو غير معتاد: يستخدم LangChain افتراضيًا المئين الخامس والتسعين لجميع المسافات في المستند، كما يتيح حدود الانحراف المعياري والمدى الربيعي والتدرج. وتشكّل الجمل الواقعة بين نقاط التقسيم مقطعًا. ويستخدم المقسّم الدلالي في LlamaIndex نقطة التقسيم المئينية نفسها.
import numpy as np
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
sentences = [
"The XR-12 coolant pump circulates water through the press line.",
"Inspect the XR-12 pump seals for leaks every week.",
"A worn pump bearing grinds loudly before it fails.",
"The staff cafeteria now opens for breakfast at 7:00.",
"The cafeteria menu adds vegetarian lunches in May.",
]
# المسافة الجيبية بين كل جملة والجملة التي تليها
embeddings = model.encode(sentences, normalize_embeddings=True)
distances = 1 - np.sum(embeddings[:-1] * embeddings[1:], axis=1)
# ابدأ مقطعًا جديدًا عندما تتجاوز المسافة المئين الخامس والتسعين
threshold = np.percentile(distances, 95)
chunks = [[sentences[0]]]
for sentence, distance in zip(sentences[1:], distances):
if distance > threshold:
chunks.append([])
chunks[-1].append(sentence)
print(np.round(distances, 2))
print(*[" ".join(chunk) for chunk in chunks], sep="\n")تبلغ المسافات بين الجمل المتجاورة 0.56 و0.64 و0.98 و0.62، لذا تقع نقطة التقسيم الوحيدة عند القفزة إلى 0.98 من محمل المضخة إلى الكافتيريا، ويكون الناتج مقطعًا من ثلاث جمل عن المضخة XR-12 ومقطعًا من جملتين عن الكافتيريا.
مقارنة استراتيجيات التجزئة#
- التجزئة بحجم ثابت: تقسّم النص كل N رمزًا، مع بعض التداخل عادةً بين المقاطع المتجاورة. وهي سريعة وقابلة للتوقع، لكنها تتجاهل حدود الموضوعات.
- التقسيم التكراري: يقسم النص عند فواصل الفقرات، ثم فواصل الأسطر، ثم الجمل، إلى أن يلائم كل جزء حدًا معينًا للحجم. ويوصي LangChain بمقسّم الأحرف التكراري للنصوص العامة.
- التقسيم المراعي للبنية: يتبع العناوين وأقسام Markdown وعناصر HTML أو تخطيط صفحات PDF.
- التجزئة الدلالية: تتبع تغيرات المعنى، على حساب تضمين كل جملة أثناء الفهرسة وتفاوت أحجام المقاطع كثيرًا؛ ولهذا تضيف التطبيقات أطوالًا دنيا وعليا.
- التجزئة المتأخرة والاسترجاع السياقي: تعالجان افتقار المقطع إلى سياق بقية المستند، مثل ضمير يعود على مرجع في مقطع سابق، ويمكن دمجهما مع أي من أساليب تحديد الحدود المذكورة أعلاه.
لا تشترك تجزئة الأفعال في الروبوتات إلا في الاسم؛ إذ تتنبأ السياسة هناك بتسلسل من أوامر الحركة المستقبلية بوصفه وحدة واحدة.
التجزئة الدلالية خارج نطاق النصوص#
لا تتضمن نصوص أنظمة تحويل الكلام إلى نص فواصل فقرات، لذا تُعد نقاط التقسيم القائمة على التضمينات طريقة شائعة لتحديد مواضع تغير موضوع الاجتماع أو البودكاست. ويمكن أيضًا تقسيم الفيديو بحسب المحتوى، بحيث يعرض كل مقطع حدثًا واحدًا من أجل فهم الفيديو أو RAG متعدد الوسائط، بدلًا من قص مقاطع اعتباطية مدتها 10 ثوانٍ. ويوفر Ultralytics YOLO26 هذه الحدود للمشاهد التي تضم أشخاصًا ومركبات: إذ يمنح وضع التتبع كل جسم مكتشف معرّفًا ثابتًا عبر الإطارات، ما يتيح لمسار المعالجة بدء مقطع عند دخول معرّف جديد إلى المشهد وإنهاءه عند مغادرة جميع المعرّفات المتعقبة.
هل تحسن التجزئة الدلالية الاسترجاع؟#
تكتسب الحدود المستندة إلى الموضوع أهمية أكبر عندما تتجاور موضوعات غير مترابطة من دون عناوين، كما في النصوص المفرغة وصفحات الويب المجمعة والملاحظات المتسلسلة. وتعتمد المقاطع الدلالية أيضًا على نموذج التضمين والحد الفاصل، لذا يتغير تقسيم المستند نفسه عند تغيير أي منهما، وينبغي ضبط كليهما بالاستناد إلى الاستدعاء في استعلامات حقيقية. وقارنت دراسة هل تستحق التجزئة الدلالية كلفتها الحسابية؟ (2024) بين التجزئة الدلالية والتجزئة ذات الحجم الثابت في استرجاع المستندات واسترجاع الأدلة وتوليد الإجابات المستند إلى الاسترجاع، ووجدت أن الحساب الإضافي للتجزئة الدلالية لم يحقق مكاسب ثابتة مقارنة بالمقاطع ذات الحجم الثابت.










