استراتيجيات التجزئة لمعالجة النصوص بكفاءة
تعرف على استراتيجيات التقسيم الفعالة لمعالجة النصوص.
سنغطي ما يلي...
يستكشف هذا الدرس كيفية تقسيم المستندات الكبيرة إلى أجزاء أصغر وأكثر قابلية للإدارة لمهام مثل استرجاع المعلومات وتحليل النصوص.
لماذا التقسيم مهم؟
تخيل أنك تحاول فهم نص ضخم. إنه أمرٌ مُرهق! يساعدنا تقسيم النصوص إلى أجزاء صغيرة سهلة الهضم، كما نفعل مع البيتزا قبل تناولها. بتقسيم المستندات، يُمكننا:
ميزات الاستخراج: تصبح كل قطعة وحدة للتحليل، مما يسمح لنا بتحديد الجوانب مفتاح مثل الكلمات الرئيسية أو الكيانات أو المشاعر.
معالجة أسرع: تقسيم النص إلى أجزاء أصغر يسمح بمعالجة المعلومات بشكل أسرع وأكثر كفاءة.
تضمين الدلالات: يمكننا تحويل الأجزاء إلى تمثيلات رقمية تلتقط معناها، مما يتيح مهام مثل مقارنات التشابه.
تحسين الدقة والملاءمة: يضمن حجم الكتلة المناسب التقاط سياق كافٍ مع تجنب التحميل الزائد للمعلومات للمعالجة.
اختيار استراتيجية التقسيم الصحيحة
لا توجد استراتيجية واحدة تناسب الجميع في عملية التقسيم. تعتمد أفضل استراتيجية على عدة عوامل:
نوع المحتوى: تؤثر طبيعة المحتوى الذي نتعامل معه بشكل كبير على استراتيجية التجزئة. على سبيل المثال، قد تستفيد المقالات الإخبارية من التجزئة على مستوى الفقرات، بينما قد تتطلب الأوراق العلمية تجزئة على مستوى الأقسام (مثل الملخص والأساليب والنتائج). على العكس من ذلك، غالبًا ما تحتاج الأكواد إلى التجزئة باستخدام كتل منطقية أو دوال للحفاظ على السياق.
نموذج التضمين: لكل نموذج من نماذج التضمين قيود على حجم الكتلة. على سبيل المثال، يبلغ الحد الأقصى رمز في نماذج مثل BERT 512 رمزًا، ويتطلب تجاوز هذا الحد تقسيم النص إلى أجزاء أصغر وأكثر أهمية. أما GPT-4، فيستطيع التعامل مع أجزاء نصية أكبر (تصل إلى 4096 رمزًا). تتيح هذه الإمكانية سياقًا أوسع ضمن الكتلة الواحدة، ولكنها تتطلب تقسيمًا دقيقًا للحفاظ على التماسك والأهمية.
استعلامات المستخدم: يلعب طول وتعقيد استعلامات المستخدم المتوقعة دورًا أيضًا. إذا كان من المرجح أن يطرح المستخدمون أسئلة مفصلة ومحددة، فإن تقسيم النص إلى أجزاء أصغر وأكثر دقة يمكن أن يساعد في استرجاع المعلومات الأكثر صلة. على العكس، بالنسبة للاستعلامات العامة، قد تكفي الأجزاء الأكبر لتوفير سياق مناسب.
غرض التطبيق: فكّر في كيفية استخدام المعلومات المُسترجَعة. إذا تطلّب التطبيق إجابات دقيقة ومُحدّدة (كما هو الحال في نظام ضمان الجودة)، يُفضّل استخدام أجزاء أصغر وأكثر ثراءً بالسياق. مع ذلك، بالنسبة لتطبيقات مثل تلخيص المحتوى أو نمذجة المواضيع، قد تكون الأجزاء الأكبر أكثر ملاءمةً لتوضيح الموضوع والسياق العام.
استراتيجيات التجزئة
فيما يلي تفصيل لاستراتيجيات التجزئة الشائعة مع أمثلة التعليمات البرمجية (باستخدام مكتبة Python LangChain):
نافذة منزلقة متداخلة ذات حجم ثابت (حرف)
تقسيم متكرر مع مراعاة البنية
التقسيم حسب البنية (بالجملة أو الفقرة)
تقسيم المحتوى
التجزئة من خلال
NLTKTextSplitter
من LangChainالتقسيم الدلالي
تقسيم الوكالة
نافذة منزلقة متداخلة ذات حجم ثابت (حرف)
تُقسّم هذه الطريقة النص إلى أجزاء متساوية الحجم بناءً على عدد الأحرف. تضمن الأجزاء المتداخلة عدم تقسيم الجمل إلى نصفين. يُطبّق الكود التالي تقنية تقسيم النصوص المتداخلة ذات الحجم الثابت (الأحرف) باستخدام نافذة منزلقة:
from langchain.text_splitter import CharacterTextSplitterpage_content = """The quick brown fox jumps over the lazy dog. In computing, a text fileis a computer file that stores characters in a format that is readable by humans.Text files are created using a text editor. There are two main types of textfiles: plain text files and formatted text files. Plain text files containonly printable characters, such as letters, numbers, and symbols. Formattedtext files may contain additional characters, such as control characters,that are used to format the text. These control characters may not bedisplayed when the text file is viewed in a text editor.Common file extensions for plain text files include .txt, .text, and .asc.Common file extensions for formatted text files include .doc, .docx, .odt,and .rtf."""sentences = page_content.split("\n")chunk_size = 256chunk_overlap = 20text_splitter = CharacterTextSplitter(chunk_size=chunk_size, chunk_overlap=chunk_overlap)# Split each sentence/paragraph into chunksall_chunks = []for sentence in sentences:chunks = text_splitter.create_documents([sentence])all_chunks.extend(chunks) # Add chunks from each sentence to a single listfor doc in all_chunks:print(doc)
شرح الكود
السطر ١: استورد فئة
CharacterTextSplitter
من وحدةlangchain.text_splitter
. تُستخدم هذه الفئة لتقسيم النص إلى أجزاء أصغر بناءً على طول الحرف.الأسطر 3–14 : قم بتعريف سلسلة
page_content
متعددة الأسطر تحتوي على نص حول ملفات النصوص وأنواعها وملحقات الملفات الشائعة.السطر 16 : قم بتقسيم سلسلة
page_content
إلى قائمة من الجمل/الفقرات باستخدام حرف السطر الجديد\n
كفاصل....