الاستيعاب هو عملية تحليل المعلومات من المستندات المصدر بحيث يمكن تضمينها في مساحة بحث لاسترجاعها لاحقًا. رغم أن هذه العملية تكون مباشرةً مع النصوص العادية، فإن التعقيدات تظهر عندما تكون المستندات المصدر بصيغ غير نصية، مثل: مثل مستندات Microsoft Word أو ملفات PDF، وعندما تتضمن تنسيقات معقدة مثل الرؤوس والتذييلات المتكررة، أو نصًا في أعمدة متعددة، أو جداول.
يتضمن هذا القسم نصائح وتقنيات ومسرِّعات وإشارات إلى أصول تساعد في التغلب على هذه التحديات.
إذا كنت مستخدمًا غير تقني وكانت مستنداتك بسيطة نسبيًا وتحتاج إلى حل دون كود، فاستخدِم Watsonx Orchestrate.
إذا كنت مستخدمًا تقنيًا وكانت مستنداتك بسيطة نسبيًا ولديك وصول إلى Watson Discovery، فابدأ من هناك. يوفر Watson Discovery واجهة مستخدم جيدة يمكن استخدامها مع حاجة محدودة إلى البرمجة. بالنسبة إلى المستندات المعقدة، يمكنك استخدام Watson Discovery لإضافة تعليقات توضيحية واستخراج أجزاء محددة من مستنداتك، سواء لاستخدامها في مسار المعالجة الخلفي للتوليد المعزز بالاسترجاع (RAG) أم في الواجهة الأمامية مع تمييز النصوص عبر تحديد الموضع الدقيق للفقرة داخل المستندات.
ومع ذلك، لدى Watson Discovery بعض القيود. إذا كانت مستنداتك أكبر من 50 ميجابايت، فلن تتمكن من تحميلها إلى Watson Discovery. إذا كان المستند معقدًا جدًا (مثل احتوائه على جداول متداخلة أو تنسيقات جداول غير منتظمة)، فقد لا يتمكن Watson Discovery من التقاط البنية الكاملة للمستند. في مثل هذه الحالات، قد تحتاج إلى تنفيذ مسار مخصص لاستيعاب البيانات باستخدام مكتبات مفتوحة المصدر.
فيما يتعلق بالمكتبات مفتوحة المصدر، يتشابه LangChain وLlamaIndex بدرجة كبيرة من حيث قدرات استيعاب البيانات. ومع ذلك، يُعَد LangChain أسهل استخدامًا من LlamaIndex من حيث التوثيق والتكامل مع قواعد بيانات المتجهات والتطبيقات الأخرى. يوفر كلٌّ من LangChain وLlamaIndex وظائف مساعدة لتحويل كائن Document من أحدهما إلى الآخر، ما يُتيح التبديل بينهما في أي مرحلة من مسار المعالجة.
تتضمن الملاحظات التالية عددًا من الدروس المستفادة حول استيعاب المستندات التي تحتوي على جداول معقدة، إضافةً إلى أساليب مختلفة تم اختبارها خلال أحد المشروعات. يُرجى ملاحظة أن بعض الملاحظات قد تختلف من مشروع إلى آخر، إلا إن معظم الاستنتاجات تكون متشابهة في المشروعات التي تتضمن مستندات تحتوي على جداول متداخلة ومعقدة.
لا يدعم Watson Discovery المستندات التي يزيد حجمها عن 50 ميجابايت. في الحالات التي يكون فيها الحجم الكبير ناتجًا عن كون المستندات الأصلية بصيغة Word، يجب تحويلها إلى PDF لاستخدام Watson Discovery. ومع ذلك، عند استخدام هذا الأسلوب قد لا يتمكن Watson Discovery أحيانًا من التقاط تنسيقات الجداول بشكل صحيح، خاصةً في حالات الجداول المعقدة أو المتداخلة.
لإجراء عملية الاستيعاب باستخدام Watson Discovery، يمكن اختبار نهجين مختلفين: نموذج مدرَّب مسبقًا، ونموذج مستخدم يتم تدريبه عبر إضافة تعليقات توضيحية يدويًا لعدد من الصفحات من خلال Smart Document Understanding في Discovery. يناقش ما يلي الدروس المستفادة من هذين الأسلوبين في أحد المشروعات التي تضمَّنت جداول متداخلة ومعقدة.
على الرغم من أن نتائج Watson Discovery لم تكن بنفس دقة بعض المكتبات المخصصة المذكورة أدناه عند التعامل مع الجداول المعقدة والمتداخلة، فإن النتائج تضمَّنت قدرًا كبيرًا من البيانات الوصفية مثل أرقام الصفحات وإحداثيات النصوص، وهو ما يساعد على عرض التمييزات في واجهة المستخدم. يمكن أن تكون هذه البيانات الوصفية مفيدة جدًا لإضافة عوامل تصفية إضافية أثناء الاسترجاع، أو حتى لتقسيم المستندات استنادًا إلى أقسام محددة في HTML.
تُعَد مكتبة PyMuPDF أسرع بكثير وتحقِّق نتائج أكثر دقة، خاصةً عند التعامل مع بيانات كبيرة الحجم. عند استخدام الدالتين التاليتين على مجموعة بيانات بحجم 50.6 ميجابايت، استغرقت PyMuPDF 0.131 ثانية مقابل 0.366 ثانية لـ PypdfLoader من LangChain. لذلك، عند التعامل مع ملفات كبيرة وإذا لم تكن بحاجة إلى استخراج أقسام المستند كأجزاء منفصلة، يُنصح باستخدام مكتبة PyMuPDF.
def pdf_to_text(path: str,في محاولة للحفاظ على بنية الجداول، نعمل على إدخال عناصر الجداول من HTML المستخرج (باستخدام مكتبة Unstructured) إلى أحد النماذج اللغوية الكبيرة (يُعَد Mixtral خيارًا مناسبًا للجداول الطويلة نظرًا لحجم السياق الذي يدعمه)، ثم يمكن إنشاء مطالبة لتلخيص الجداول أو لاستخدام "التعلم بأمثلة قليلة" لتحويل الجداول إلى صيغة نعتقد أنها قد تكون أكثر قابلية للفهم من قِبل النماذج اللغوية الكبيرة.
تم أيضًا اختبار مكتبات أخرى لقراءة الجداول مثل Camelot وTabula، إلا إنها لم تكن بنفس دقة مكتبة Unstructured عند التعامل مع الجداول المعقدة، وبما أنها تكتشف الجداول فقط داخل المستند فقد تكون هناك حاجة إلى مزيد من المعالجة المسبقة لإنشاء مقاطع ذات معنى لتمريرها إلى النماذج اللغوية الكبيرة.
خلاصة القول، بينما يوفر Watson Discovery طريقة سهلة وسريعة لاستيعاب المستندات والتقاط قدر كبير من البيانات الوصفية الإضافية التي قد تكون مفيدة في بناء واجهة المستخدم (مثل تمييز المقاطع على سبيل المثال)، فإن مكتبة Unstructured (التي تتوفر لها Wrappers في كل من LlamaIndex وLangChain) تستطيع التقاط الجداول المعقدة داخل المستندات بدقة أكبر مقارنةً بـ Discovery. لذلك يمكن أن يكون الجمع بين النهجين مفيدًا للمشروعات التي تتضمن جداول معقدة داخل مستنداتها.
قد تكون عملية الاستيعاب دون واجهة مستخدم رسومية صعبة على مستخدمي الأعمال؛ لأنها تتطلب خبرة ومعرفة تقنية. يقضي Watsonx Orchestrate على هذا التحدي لدى مستخدمي الأعمال من خلال تطبيق واجهة مستخدم بالسحب والإفلات (UI). من خلال النقر على زر التحميل الأزرق، نفعِّل إمكانية تحميل المستندات وتخزينها مباشرةً في watsonx Discovery (المعروف أيضًا باسم Elasticsearch).
يُتيح ذلك للمستخدم تحميل مستنداته مباشرةً إلى Elasticsearch؛ لإنشاء قاعدة معرفة مخصصة خاصة به.
بدلًا من إدخال المستندات مباشرةً إلى watsonx Discovery، يمكنك أيضًا اختيار الاتصال بـ Watson Discovery عبر watsonx Orchestrate. يمكنك الاطِّلاع أدناه على مزيد من التفاصيل حول كيفية إدخال البيانات عبر Watson Discovery.
إحدى الأدوات الداخلية الأخرى التي يمكن استخدامها لإدخال البيانات هي Watson Discovery. لا تُعَد Watson Discovery أداة لإدخال البيانات فقط، إذ تُتيح إدخال البيانات غير المنظمة وتوحيدها وإثراءها والبحث فيها. توضِّح الصورة أدناه العناصر والقدرات الأساسية لـ Watson Discovery.
كما ترى أعلاه، تتمثَّل إحدى القدرات الأساسية لـ Watson Discovery في إدخال البيانات المنظمة وغير المنظمة بصيغ مختلفة مثل JSON وHTML وPDF وWord وغيرها، إضافةً إلى Smart Document Understanding.
إذا كان Watson Discovery مهيأً في بيئتك، يمكنك إدخال المستندات بسهولة من خلال إنشاء مشروع أولًا ثم إنشاء مجموعة يمكنك فيها تحميل بياناتك من التخزين المحلي أو من موقع سحابي مثل حاوية تخزين كائنات.
بعد إنشاء المجموعة، يمكنك الانتقال إلى تبويب Manage Collections من قائمة الهامبرغر، ثم ضمن Identity Fields اختيار الطريقة التي تريد استخدامها لمعالجة المستندات.
هناك ثلاثة خيارات:
قد يستغرق الأمر بعض الوقت حتى تتم معالجة جميع مستنداتك. بعد ذلك يمكنك استخدام واجهة برمجة تطبيقات Watson Discovery لقراءة بياناتك واستخدامها في الكود الخاص بك.
يوضِّح نموذج الكود أدناه كيفية استخدام واجهة برمجة التطبيقات لقراءة البيانات من مجموعتك:
from langchain.docstore.document import Documentعند إنشاء مشروع في Watson Discovery يمكنك جدولة Web Crawl لجلب المعلومات من عنوان URL محدد. كل ما عليك فعله هو اختيار Web Crawl عند تحديد مصدر البيانات، ثم تحديد عنوان URL وجدول الزحف.
بعد ذلك يمكنك تنفيذ الخطوات المذكورة أعلاه لإدارة مجموعتك واستخدام واجهة برمجة التطبيقات لقراءة البيانات منها. للاطِّلاع على المزيد من التفاصيل حول كيفية إعداد Web Crawl في Watson Discovery يمكنك مشاهدة هذا الفيديو.
للمزيد من المعلومات والميزات، يمكنك الرجوع إلى صفحة مطوِّري Watson Discovery.
يُعَد Deep Search مجموعة أدوات مفتوحة المصدر من IBM Research لإدخال البيانات. يستفيد Deep Search من أساليب الذكاء الاصطناعي المتقدمة لجمع وتحويل وإثراء وربط مجموعات كبيرة من المستندات بشكل مستمر. يمكنك استخدامه لكل من المستندات العامة والمستندات الخاصة بصيغة PDF.
تعمل Deep Search على تحويل مستندات PDF غير المنظمة إلى ملفات JSON منظمة بدقة وسهولة. يُتيح لك ذلك أتمتة استخراج المعرفة وكذلك تحسين نماذج الأساس والنماذج اللغوية الكبيرة الخاصة بك.
يمكنك العثور على المزيد من المعلومات حول Deep Search هنا.
يمكن أن يكون Deep Search أداة داخلية جيدة لقراءة المستندات المعقدة بدلًا من مكتبة Unstructured أو غيرها من المكتبات مفتوحة المصدر. يمكنك أيضًا العثور على توثيق ممتاز في المستودع يتضمن أمثلة مختلفة على شكل Python Notebooks:
نماذج Notebooks لمكتبة Deep Search
يقدِّم Deep Search نتائج جيدة عند استخراج الجداول من ملفات PDF بصيغة JSON.
لأغراض الاختبار، استخدمنا مستند PDF جزئيًا من CIPP يتضمن ثلاث صفحات، تعرض كل صفحة منها بيانات في شكل جداول. تم تحقيق أفضل أداء للتوليد المعزز بالاسترجاع (RAG) في هذه الحالة باستخدام Deep Search لاستخراج الجداول بصيغة JSON، ثم تحويلها إلى HTML لاستخدامها في Watson Discovery / watsonx Discovery بدلًا من استخدام ملفات PDF مباشرة، أو تحويل PDF إلى HTML دون Deep Search، أو استخدام JSON الناتج من Deep Search فقط في Watson Discovery / watsonx Discovery. وجدنا أن Watson Discovery قد يختار في بعض الحالات إجابة غير صحيحة من خلية خطأ في الجدول ولكنه يكون أسرع، وفي الحالة نفسها يمكنه أيضًا تحديد الإجابة الدقيقة داخل شبكة الجدول.
يُعَد IBM Datacap حلًا متكاملًا لالتقاط المستندات والبيانات، ويوفر إمكانات المسح والتصنيف والتعرُّف والتحقق وتصدير البيانات وصور المستندات بسرعة ودقة وكفاءة من حيث التكلفة. ويعمل على التقاط المستندات واستخراج البيانات ذات الصلة ودمجها في عمليات الأعمال اللاحقة.
يعمل Datacap على التقاط المستندات الورقية عبر الماسحات الضوئية أو الطابعات متعددة الوظائف أو الأجهزة المحمولة، كما يستورد المستندات الإلكترونية من أنظمة الملفات أو الفاكس أو خوادم البريد الإلكتروني. يعمل على تحسين استخراج البيانات بميزات معالجة الصور مثل تصحيح مَيلان الصورة وإزالة الخطوط واللطخات والحدود.
يستخدم Datacap تقنية التعرُّف البصري على الأحرف (OCR)، وتقنية التعرُّف الذكي على الأحرف (ICR) للكتابة اليدوية، وتقنية التعرُّف البصري على العلامات (OMR) للعلامات، إضافةً إلى قراءة الرموز الشريطية لاستخراج البيانات بكفاءة.
للحصول على إرشادات تفصيلية حول التثبيت والاستخدام، راجِع وثائق IBM Datacap.
يدعم LangChain أنواعًا مختلفة من أدوات تحميل المستندات التي تعمل على تحميل البيانات من مصدر ما على هيئة كائن مستند (Document) في LangChain. كائن Document هو جزء من النص مع البيانات الوصفية المرتبطة به، ويمكن استخدامه بسهولة في تقسيم المحتوى والاسترجاع لاحقًا في مسار المعالجة.
يدعم LangChain حاليًا أدوات تحميل لتحميل دليل كامل أو أنواع مختلفة من الملفات مثل:
يمكنك استخدام أدوات التحميل هذه ببضعة أسطر فقط في Python. على سبيل المثال، لتحميل ملف PDF يمكنك استخدام الكود التالي:
from langchain_community.document_loaders import PyPDFLoader
loader = PyPDFLoader("example_data/layout-parser-paper.pdf")
pages = loader.load_and_split()
يُرجى الرجوع إلى وثائق LangChain لمعرفة كيفية استخدام أدوات التحميل هذه.
إلى جانب أدوات التحميل المذكورة في الرابط أعلاه، يمكنك العثور على أدوات تحميل إضافية قادرة على تحميل البيانات مباشرةً من تطبيقات محددة مثل البريد الإلكتروني وGithub وGoogle Drive وغيرها. يمكنك الاطِّلاع على قائمة بجميع أدوات التحميل المختلفة هنا.
في الحالات التي تحتوي فيها المستندات على هياكل وصيغ وجداول معقدة، يمكنك استخدام أدوات تحميل Unstructured في LangChain. تعتمد أدوات التحميل هذه في عملها داخليًا على مكتبة Unstructured، وهي من أفضل المكتبات للتعامل مع المستندات المعقدة (بصيغ مختلفة مثل PDF وMSWord وPower Point وغيرها)، وكذلك لتقسيم المستندات إلى عناصر مختلفة: LangChain UnstructuredLoader.
كما هو في LangChain، يدعم LlamaIndex أيضًا أنواعًا مختلفة من أدوات التحميل. إحدى أبسط الطرق لتحميل البيانات باستخدام LlamaIndex هي استخدام SimpleDirectoryReader. يدعم SimpleDirectoryReader الأنواع التالية:
يمكنك استخدام SimpleDirectoryLoader باستخدام مقطع الكود التالي:
from llama_index.core import SimpleDirectoryReader reader = SimpleDirectoryReader(input_dir="path/to/directory") documents = reader.load_data()
يمكنك أيضًا إضافة امتدادات محددة لقراءة هذه الامتدادات فقط من الدليل:
SimpleDirectoryReader( input_dir="path/to/directory", required_exts=[".pdf", ".docx"] )
للمزيد من التفاصيل حول كيفية استخدام أدوات التحميل في LlamaIndex، يُرجى الرجوع إلى الوثائق الخاصة بها.
وبالمثل مع Huggingface، يمكنك إنشاء أدوات تحميل مخصصة خاصة بك أو استخدام أدوات تحميل مخصصة أنشأها آخرون على llamahub.ai.
إلا إن أحد عيوب LlamaIndex مقارنةً بـ LangChain هو أن التوثيق ودعم المجتمع ليسا بالمستوى نفسه، ما قد يجعل تصحيح الأخطاء في الكود أكثر صعوبة.
في الحالات التي تقوم فيها بتحميل مستندات معقدة، يمكنك أيضًا استخدام مكتبة Unstructured مباشرةً. تتميز مكتبة Unstructured بكفاءة عالية في قراءة الجداول وتحليلها.
كما تدعم كل من LangChain وLlamaIndex مكتبة Unstructured من خلال wrappers، وقد يكون ذلك أسهل لاستخدامها في خطوط معالجة RAG لاحقًا؛ لأنها تُنشئ كائنات Document وتُعيدها تلقائيًا. ومع ذلك، إذا كان مشروعك يتطلب قدرًا أكبر من التخصيص وتريد استخدام مكتبة Unstructured مباشرةً، يمكنك الرجوع إلى Unstructured.
Sara Golestaneh، وVicky Kuo، Fahad Bhutta، وLuke Major، وDean Sacoransky، وChris Kirby
تاريخ التحديث: 15 نوفمبر 2024