في مجال الزحف إلى الويب وفهرسة المستندات، تُعَد منهجيات التقسيم الفعَّالة ضرورية؛ لتحسين أداء البحث ومدى صلته. عند التعامل مع صفحات الويب بصيغة HTML أو ملفات PDF، يمكن للاستراتيجية التي تعتمدها أن تؤثِّر بشكل كبير في كفاءة تطبيق البحث ودقته. فيما يلي دليل شامل لمنهجيات التقسيم الفعَّالة في ظروف مختلفة، خاصةً عند استخدام Elasticsearch كمخزن للمتجهات.
تختلف صفحات الويب بشكل كبير من حيث الحجم والبنية. للمعالجة الفعَّالة:
عندما يتضمَّن الزحف إلى الويب كود HTML قديمًا، قد يؤثِّر ذلك بشكل كبير في جودة المقاطع المستخرجة لفهرستها في Elasticsearch. فيما يلي بعض التحديات الرئيسية واستراتيجيات التخفيف منها:
العلامات والسمات غير القياسية:
العناصر المتداخلة والمهجورة:
التنسيق والتصميم المضمَّن داخل السطر:
بنية مستند غير متسقة:
مشكلات الترميز والحروف:
النص البرمجي والمحتوى الديناميكي:
لتقليل تأثير كود HTML القديم في جودة المقاطع عند الزحف إلى الويب للفهرسة في Elasticsearch، يمكن اتِّباع الاستراتيجيات التالية:
من خلال التعامل مع هذه التحديات بشكل استباقي، يمكنك تحسين جودة المقاطع المستخرجة من صفحات HTML القديمة، وبالتالي تعزيز فاعلية وصلة تطبيقات البحث المبنية على Elasticsearch.
باختصار، أفضل استراتيجية لتقسيم المحتوى عند استخدام Elasticsearch مع الزحف على الويب أو فهرسة ملفات PDF تتمثل في تفكيك المحتوى إلى وحدات قابلة للإدارة (مثل المستندات والصفحات، والأقسام) بحيث تحقِّق توازنًا بين الدقة والكفاءة في الفهرسة والاستعلام. يجب تعديل الاستراتيجية بناءً على طبيعة مصدر المحتوى (مثل صفحات الويب مقابل ملفات PDF) والمتطلبات المحددة لتطبيق البحث الخاص بك. ومن خلال تطبيق هذه المنهجيات، يمكنك تحسين أداء ودقة محرك البحث، ما يوفر للمستخدمين نتائج أكثر صلة ودقة.
حالات الاستخدام:
تعمل منصة IBM watsonx على تمكين وتسريع تنفيذ أنماط التوليد المعزز بالاسترجاع (RAG)، وتسمح بتقسيم المستندات وفهمها. يُتيح watsonx Orchestrate بالتعاون مع Watsonx Discovery تقسيم المستندات بدءًا من حلول منخفضة الكود/دون كود ووصولًا إلى عمليات تنفيذ مخصصة أكثر.
الطرق المذكورة تمثِّل اعتبارات شائعة لتقنيات تقسيم المستندات يمكن تنفيذها في حالات استخدام RAG. تتوفر التقنية الهجينة في watsonx لتوفير دقة وسرعة أفضل. تعمل العملية الشاملة على تقسيم المستند إلى جمل منفردة لضمان دقة تقسيم ذات معنى. ثم يتم تجميع الجمل في شرائح باستخدام نموذج لغوي كبير (LLM). يعمل النموذج اللغوي الكبير على تقييم إذا ما كان سياق الجملة يتناسب مع الشريحة، وإذا لم يكن كذلك، يتم بدء مقطع جديد. وباستخدام هذا المقطع، يتم استخراج بيانات وصفية ذات معنى باستخدام النموذج اللغوي الكبير؛ ويشمل ذلك العنوان، والمعرِّف، والملخص.
للمزيد من المعلومات حول هذه الطريقة، يُرجى الرجوع إلى مدونة IBM هذه: https://developer.ibm.com/articles/awb-enhancing-llm-performance-document-chunking-with-watsonx/.
يستخدم التقسيم النحوي نهجًا موجهًا بالبنية لفصل النص بناءً على تنسيق المستند. غالبًا وبشكل طبيعي، يتم استخدام عناوين الأقسام كفواصل. ومع ذلك، في حالات المستندات التي لا تحتوي على معلومات مشفرة (مثل PDF)، يمكن استخدام أحجام الخطوط كعلامة لفصل المقاطع.
نقاط القوة:
القيود:
يمكن أن يكون التقسيم النحوي مفيدًا في الحالات التي تكون فيها البنية الطوبولوجية للمستند قابلة للتنبؤ ومهيأة بوضوح للتقسيم.
في التقسيم بأحجام ثابتة، يتم تقسيم بيانات الإدخال إلى شرائح متساوية الحجم. تعتمد هذه الطريقة غالبًا على تقسيم النص إلى أحجام محددة مسبقًا استنادًا إلى عدد الرموز المميزة. تُعَد هذه الطريقة سهلة التنفيذ والفهم، ما يجعلها مناسبة للمهام التي تكون فيها بيانات الإدخال ذات حجم متسق ويمكن التنبؤ به.
نقاط القوة:
القيود:
يُعَد التقسيم بأحجام ثابتة الأنسب في الحالات التي تكون فيها بيانات الإدخال قابلة للتنبؤ ولا تتطلب سياقًا معمقًا.
from langchain.text_splitter import CharacterTextSplitter # Example text text = "The quick brown fox jumps over the lazy dog." # Create a splitter for fixed size chunks splitter = CharacterTextSplitter(chunk_size=10, chunk_overlap=0) # Split the text chunks = splitter.split(text) # Print the chunks for chunk in chunks: print(chunk)
يعمل التقسيم الدلالي على فصل النص بناءً على السياق، ويجمع العناصر ذات المعنى باستخدام تقنيات خوارزمية. يكون التقسيم الدلالي مهمًا عندما يكون معنى المحتوى أساسيًا لتكوين الاستجابة، مثل الوثائق القانونية.
نقاط القوة:
القيود:
مثال:
from langchain.text_splitter import RecursiveCharacterTextSplitter # Example text text = "Steve Jobs was born in California. He co-founded Apple in 1976." # Create a splitter for semantic chunking splitter = RecursiveCharacterTextSplitter(chunk_size=50, chunk_overlap=10) # Split the text chunks = splitter.split(text) # Print the chunks for chunk in chunks: print(chunk)
يستخدم التقسيم الهجين كلًا من المعلومات السياقية والبنائية للاستفادة من المزايا المشتركة لكلٍّ من التقسيم بأحجام ثابتة والتقسيم الدلالي. تكون هذه الطريقة هي الأنسب في الحالات التي يتوفر فيها حجم كبير من البيانات عبر حالات استخدام متعددة، مع تنسيقات ومواد متنوعة، مثل قاعدة المعرفة المؤسسية.
نقاط القوة:
القيود:
مثال:
from langchain.text_splitter import CharacterTextSplitter, RecursiveCharacterTextSplitter
# Example text
text = "Steve Jobs was born in California. He co-founded Apple in 1976."
# Fixed-size splitter
fixed_size_splitter = CharacterTextSplitter(chunk_size=50, chunk_overlap=10)
fixed_size_chunks = fixed_size_splitter.split(text)
# Semantic splitter
semantic_splitter = RecursiveCharacterTextSplitter(chunk_size=100, chunk_overlap=20)
semantic_chunks = semantic_splitter.split(text)
# Print the fixed-size chunks
print("Fixed-size chunks:")
for chunk in fixed_size_chunks:
print(chunk)
# Print the semantic chunks
print("\nSemantic chunks:")
for chunk in semantic_chunks:
print(chunk)
تعتمد استراتيجية التقسيم هذه على استخدام النماذج اللغوية الكبيرة (LLMs) لتحديد الطول والمحتوى المناسبين لمقاطع النص بناءً على السياق الذي سيتم استخدامها فيه. تستند هذه الاستراتيجية إلى مفهوم المقترحات، والذي يتضمن استخراج عبارات مستقلة من جزء خام من النص.
لتنفيذ هذا النهج، تستخدم الاستراتيجية قالب استرجاع المقترحات الذي توفِّره LangChain لاستخراج المقترحات من النص. بعد ذلك يتم تمرير هذه المقترحات إلى وكيل يعتمد على النماذج اللغوية الكبيرة، والذي يحدد إذا ما كان ينبغي تضمين كل مقترح ضمن مقطع موجود أو إنشاء مقطع جديد.
يعتمد الوكيل القائم على النماذج اللغوية الكبيرة على مجموعة من العوامل لاتخاذ هذا القرار، بما في ذلك مدى صلة المقترح بالمقطع الحالي، والترابط العام للمقطع، وأهداف النموذج ونواياه. ومن خلال استخدام النماذج اللغوية الكبيرة بهذه الطريقة، تهدف الاستراتيجية إلى إنشاء مقاطع نصية ليست فقط مترابطة وملائمة للسياق، بل ومتوافقة أيضًا مع أهداف النموذج ونواياه.
نقاط القوة:
القيود:
الآن، كيف يمكننا تنفيذ بعض هذه التقنيات لتقسيم الوثائق؟ توجد العديد من المكتبات مفتوحة المصدر التي تُتيح تشغيل هذه الخوارزميات وتقنيات التقسيم. ومن الجيد البدء باستخدام أدوات تقسيم النصوص في LangChain؛ يُرجى الرجوع إلى الوثائق التالية للاطِّلاع على أدوات تقسيم النصوص المتاحة. https://python.langchain.com/v0.1/docs/modules/data_connection/document_transformers/
تاريخ التحديث: 15 نوفمبر 2024