...

/

استراتيجيات التجزئة لمعالجة النصوص بكفاءة

استراتيجيات التجزئة لمعالجة النصوص بكفاءة

تعرف على استراتيجيات التقسيم الفعالة لمعالجة النصوص.

سنغطي ما يلي...

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

Press + to interact
Chunking
Chunking

لماذا التقسيم مهم؟

تخيل أنك تحاول فهم نص ضخم. إنه أمرٌ مُرهق! يساعدنا تقسيم النصوص إلى أجزاء صغيرة سهلة الهضم، كما نفعل مع البيتزا قبل تناولها. بتقسيم المستندات، يُمكننا:

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

  • معالجة أسرع: تقسيم النص إلى أجزاء أصغر يسمح بمعالجة المعلومات بشكل أسرع وأكثر كفاءة.

  • تضمين الدلالات: يمكننا تحويل الأجزاء إلى تمثيلات رقمية تلتقط معناها، مما يتيح مهام مثل مقارنات التشابه.

  • تحسين الدقة والملاءمة: يضمن حجم الكتلة المناسب التقاط سياق كافٍ مع تجنب التحميل الزائد للمعلومات للمعالجة.

اختيار استراتيجية التقسيم الصحيحة

لا توجد استراتيجية واحدة تناسب الجميع في عملية التقسيم. تعتمد أفضل استراتيجية على عدة عوامل:

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

  • نموذج التضمين: لكل نموذج من نماذج التضمين قيود على حجم الكتلة. على سبيل المثال، يبلغ الحد الأقصى رمز في نماذج مثل BERT 512 رمزًا، ويتطلب تجاوز هذا الحد تقسيم النص إلى أجزاء أصغر وأكثر أهمية. أما GPT-4، فيستطيع التعامل مع أجزاء نصية أكبر (تصل إلى 4096 رمزًا). تتيح هذه الإمكانية سياقًا أوسع ضمن الكتلة الواحدة، ولكنها تتطلب تقسيمًا دقيقًا للحفاظ على التماسك والأهمية.

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

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

استراتيجيات التجزئة

فيما يلي تفصيل لاستراتيجيات التجزئة الشائعة مع أمثلة التعليمات البرمجية (باستخدام مكتبة Python LangChain):

  • نافذة منزلقة متداخلة ذات حجم ثابت (حرف)

  • تقسيم متكرر مع مراعاة البنية

  • التقسيم حسب البنية (بالجملة أو الفقرة)

  • تقسيم المحتوى

  • التجزئة من خلال NLTKTextSplitter من LangChain

  • التقسيم الدلالي

  • تقسيم الوكالة

نافذة منزلقة متداخلة ذات حجم ثابت (حرف)

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

Press + to interact
from langchain.text_splitter import CharacterTextSplitter
page_content = """The quick brown fox jumps over the lazy dog. In computing, a text file
is 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 text
files: plain text files and formatted text files. Plain text files contain
only printable characters, such as letters, numbers, and symbols. Formatted
text files may contain additional characters, such as control characters,
that are used to format the text. These control characters may not be
displayed 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 = 256
chunk_overlap = 20
text_splitter = CharacterTextSplitter(chunk_size=chunk_size, chunk_overlap=chunk_overlap)
# Split each sentence/paragraph into chunks
all_chunks = []
for sentence in sentences:
chunks = text_splitter.create_documents([sentence])
all_chunks.extend(chunks) # Add chunks from each sentence to a single list
for doc in all_chunks:
print(doc)

شرح الكود

  • السطر ١: استورد فئة CharacterTextSplitter من وحدة langchain.text_splitter . تُستخدم هذه الفئة لتقسيم النص إلى أجزاء أصغر بناءً على طول الحرف.

  • الأسطر 3–14 : قم بتعريف سلسلة page_content متعددة الأسطر تحتوي على نص حول ملفات النصوص وأنواعها وملحقات الملفات الشائعة.

  • السطر 16 : قم بتقسيم سلسلة page_content إلى قائمة من الجمل/الفقرات باستخدام حرف السطر الجديد \n كفاصل.

  • ...