في هذا البرنامج التعليمي، ستجرّب عدة استراتيجيات للتقسيم باستخدام LangChain وأحدث نموذج من IBM Granite المتوفر الآن على watsonx.ai. الهدف العام هو إجراء التوليد المعزز بالاسترجاع (RAG).
يشير التقسيم إلى عملية تقسيم أجزاء كبيرة من النص إلى مقاطع أو أجزاء نصية أصغر. وللتأكيد على أهمية التقسيم، من المفيد فهم RAG. يُعَد RAG تقنية في معالجة اللغة الطبيعية (NLP) تجمع بين استرجاع المعلومات والنماذج اللغوية الكبيرة لاسترداد المعلومات ذات الصلة من مجموعات البيانات التكميلية لتحسين جودة مخرجات النموذج اللغوي الكبير. لإدارة المستندات الكبيرة، يمكننا استخدام تقسيم النصوص لتقسيم المحتوى إلى مقاطع أصغر ذات معنى. يمكن بعد ذلك تضمين هذه الأجزاء النصية وتخزينها في قاعدة بيانات متجهات من خلال استخدام نموذج التضمين. أخيرًا، يمكن لنظام RAG بعد ذلك استخدام البحث الدلالي لاسترداد المقاطع الأكثر صلة فقط. تميل المقاطع الأصغر إلى التفوق على المقاطع الأكبر لأنها تُعَد أجزاءً أكثر قابلية للإدارة لنماذج ذات حجم نافذة سياق أصغر.
تتضمن بعض العناصر الرئيسية للتقسيم ما يلي:
هناك عدة استراتيجيات مختلفة لتقسيم المقاطع يمكن الاختيار من بينها. من المهم اختيار تقنية التقييم الأنسب لحالة الاستخدام الخاصة بتطبيق النموذج اللغوي الكبير الخاص بك. بعض أساليب تقسيم النصوص المستخدمة بشكل شائع تشمل ما يلي:
رغم توفُّر عدة أدوات للاختيار منها، يُرشدك هذا الدليل خلال خطوات إعداد حساب IBM لاستخدام Jupyter Notebook.
سجِّل الدخول إلى watsonx.ai باستخدام حساب IBM Cloud الخاص بك.
أنشئ مشروع watsonx.ai.
يمكنك الحصول على معرِّف المشروع من داخل مشروعك. انقر فوق علامة التبويب الإدارة (Manage) ، ثم انسخ معرِّف المشروع من قسم التفاصيل (Details) في صفحة عام (General). ستحتاج إلى هذا المعرِّف في هذا البرنامج التعليمي.
أنشئ Jupyter Notebook.
ستؤدي هذه الخطوة إلى فتح بيئة دفتر ملاحظات حيث يمكنك نسخ التعليمات البرمجية من هذا البرنامج التعليمي. أو يمكنك تنزيل هذا الدفتر إلى نظامك المحلي وتحميله إلى مشروع watsonx.ai كأصل. لمشاهدة المزيد من البرامج التعليمية حول Granite، تفضَّل بزيارة مجتمع IBM Granite. يمكن العثور على Jupyter Notebook هذا مع مجموعات البيانات المستخدمة على GitHub.
أنشئ مثيل خدمة watsonx.ai Runtime (اختَر المنطقة المناسبة لك، واختَر خطة Lite، وهي مثيل مجاني).
اربط مثيل خدمة watsonx.ai Runtime بالمشروع الذي أنشأته في watsonx.ai.
لتعيين بيانات الاعتماد الخاصة بنا، نحتاج إلى WATSONX_APIKEY وWATSONX_PROJECT_ID التي أنشأتها في الخطوة 1. سنقوم أيضًا بتعيين عنوان URL الذي يعمل كنقطة نهاية لواجهة برمجة التطبيقات.
سنستخدم Granite 3.1 كنموذج لغوي كبير في هذا البرنامج التعليمي. لتهيئة النموذج اللغوي الكبير، نحتاج إلى تعيين مَعلمات النموذج. لمعرفة المزيد حول مَعلمات النموذج هذه، مثل الحد الأدنى والحد الأقصى للرموز المميزة، راجِع الوثائق.
السياق الذي نستخدمه لمسار RAG الخاص بنا هو إعلان IBM الرسمي لإصدار Granite 3.1. يمكننا تحميل المدونة إلى مستند مباشرةً من صفحة الويب باستخدام WebBaseLoader من LangChain.
لنقدِّم مثالًا برمجيًا لكيفية تطبيق كل استراتيجية من استراتيجيات التقسيم التي ناقشناها سابقًا في هذا البرنامج التعليمي والمتاحة عبر LangChain.
لتنفيذ التقسيم ثابت الحجم، يمكننا استخدام CharacterTextSplitter من LangChain وتعيين chunk_size بالإضافة إلى chunk_overlap. يتم قياس chunk_size بعدد الأحرف. لا تتردد في تجربة قيم مختلفة. سنعيِّن أيضًا الفاصل ليكون حرف السطر الجديد حتى نتمكن من التمييز بين الفقرات. بالنسبة إلى الترميز، يمكننا استخدام برنامج الترميز granite-3.1-8b-instruct . يعمل برنامج الترميز على تفكيك النص إلى رموز يمكن للنموذج اللغوي معالجتها.
يمكننا طباعة أحد المقاطع للحصول على فهم أفضل لهيكلها.
الإخراج: (مقتطع)
يمكننا أيضًا استخدام برنامج الترميز للتحقق من العملية ولمراجعة عدد الرموز المميزة في كل مقطع. هذه الخطوة اختيارية ولأغراض توضيحية.
المخرجات:
رائع! يبدو أن أحجام المقاطع لدينا قد تم تنفيذها بشكل مناسب.
بالنسبة إلى التقسيم التكراري، يمكننا استخدام RecursiveCharacterTextSplitter من LangChain. مثل مثال التقسيم ثابت الحجم، يمكننا تجربة أحجام مختلفة للمقاطع ودرجة التداخل بينها.
المخرجات:
نجح الفاصل في تقسيم النص باستخدام الفواصل الافتراضية: ["\n\n"، و"\n"، و" "، و""].
يتطلب التقسيم الدلالي نموذج تضمين أو تشفير. نستخدم نموذج granite-embedding-30m-english كنموذج التضمين الخاص بنا. يمكننا أيضًا طباعة أحد المقاطع لفهم هيكلها بشكل أفضل.
الإخراج: (مقتطع)
تتوافق المستندات بمختلف أنواع الملفات مع فواصل النصوص القائمة على المستندات في LangChain. لأغراض هذا البرنامج التعليمي، سنستخدم ملف Markdown. للحصول على أمثلة على تقسيم JSON التكراري وتقسيم التعليمات البرمجية وتقسيم HTML، راجِع وثائق LangChain.
من الأمثلة على ملف Markdown الذي يمكننا تحميله ملف README لنموذج Granite 3.1 على GitHub من IBM.
المخرجات:
الآن، يمكننا استخدام MarkdownHeaderTextSplitter من LangChain لتقسيم الملف حسب نوع العنوان، الذي نحدده في قائمة headers_to_split_on. سنطبع أيضًا أحد المقاطع كمثال.
المخرجات:
كما ترى في الناتج، نجح التقسيم في فصل النصوص حسب نوع العنوان.
والآن بعد أن جربنا استراتيجيات التقسيم المختلفة، دعنا ننتقل إلى تطبيق RAG. في هذا البرنامج التعليمي، سنختار المقاطع الناتجة عن التقسيم الدلالي ونحوِّلها إلى تضمينات متجهية. مخزن المتجهات مفتوح المصدر الذي يمكننا استخدامه هو Chroma DB. يمكننا الوصول بسهولة إلى وظائف Chroma من خلال حزمة langchain_chroma.
لنبدأ بتهيئة قاعدة بيانات المتجهات Chroma، وتزويدها بنموذج التمثيلات المضمَّنة، ثم إضافة المستندات الناتجة عن التقسيم الدلالي.
المخرجات:
بعد ذلك، يمكننا الانتقال إلى إنشاء قالب طلب مطالبة لتطبيق النموذج اللغوي الكبير الخاص بنا. يُتيح لنا قالب المطالبة هذا طرح أسئلة متعددة دون تغيير هيكل المطالبة الأولية. يمكننا أيضًا تقديم مخزن المتجهات الخاص بنا كأداة استرجاع. بهذه الخطوة، يتم الانتهاء من إعداد هيكل RAG.
باستخدام سير عمل RAG المكتمل لدينا، دعنا نستدعي استعلام المستخدم. أولًا، يمكننا توجيه النموذج بطريقة استراتيجية دون أي سياق إضافي من مخزن المتجهات الذي أنشأناه؛ لاختبار إذا ما كان النموذج يستخدم معرفته المدمجة أم يعتمد فعليًا على سياق RAG. تُشير مدونة الإعلان عن Granite 3.1 إلى Docling، أداة IBM المخصصة لتحليل أنواع متعددة من المستندات وتحويلها إلى Markdown أو JSON. دعنا نسأل النموذج اللغوي الكبير عن Docling.
المخرجات:
من الواضح أن النموذج لم يتم تدريبه على أي معلومات حول Docling، ودون أدوات أو مصادر خارجية لا يمكنه تزويدنا بهذه المعلومات. الآن، دعنا نحاول تقديم الاستعلام نفسه لسلسلة RAG التي أنشأناها.
المخرجات:
رائع! استخدَم نموذج Granite سياق RAG بشكل صحيح لتزويدنا بمعلومات دقيقة حول Docling مع الحفاظ على الاتساق الدلالي. لقد أثبتنا أن النتيجة نفسها لم تكن ممكنة دون استخدام RAG.
في هذا البرنامج التعليمي، أنشأتَ مسار RAG وجرّبت العديد من استراتيجيات التقسيم لتحسين دقة استرجاع النظام. باستخدام نموذج Granite 3.1، نجحنا في توليد استجابات دقيقة وملائمة لاستفسار المستخدم اعتمادًا على المستندات المقدَّمة كسياق. تم تحميل النص المستخدم في تطبيق RAG هذا من مدونة على موقع ibm.com تُعلن عن إصدار Granite 3.1. قدَّم لنا النموذج معلومات لا يمكن الوصول إليها إلا من خلال السياق المقدَّم، لأنها لم تكن ضمن قاعدة معارفه الأساسية.
للذين يريدون التعمّق أكثر، يمكن الاطِّلاع على نتائج مشروع يقارن أداء النماذج اللغوية الكبيرة باستخدام تقسيم HTML المنظم مقارنةً بتقسيم watsonx.
تدريب الذكاء الاصطناعي التوليدي والتحقق من صحته وضبطه ونشره، وكذلك قدرات نماذج الأساس والتعلم الآلي باستخدام IBM watsonx.ai، وهو استوديو الجيل التالي من المؤسسات لمنشئي الذكاء الاصطناعي. أنشئ تطبيقات الذكاء الاصطناعي بسرعة أكبر وببيانات أقل.
استفد من الذكاء الاصطناعي في عملك بالاستعانة بخبرة IBM الرائدة في مجال الذكاء الاصطناعي ومحفظة حلولها المتوفرة لك.
أعدّ ابتكار عمليات ومهام سير العمل الحساسة بإضافة الذكاء الاصطناعي لتعزيز التجارب وصنع القرارات في الوقت الفعلي والقيمة التجارية.