اذهب إلى المحتوى
  • 0

إنشاء شات بوت

محمد العامر3

السؤال

اريد انشاء شات بوت يجيب على اسئلة  من ملف وكتب كبيرة لكن اواجه مشكلة في تقسيم  الى فقرات حيث يكون التقسيم غبي رغم اني حاولت استخدام تقسيم دلالي 

اريد افضل طريقة لتقسم الملفات بحيث لا يضيع السياقات حيث عن التقسيم اقسام صغيرة يؤدي الى فقدان اصل الفقرة في حال كانت تابعة لشيئ مرتبط بها يسبقها او كانت تحت عنوان معين
واذا تم التقسم لاقسام كبيرة لا يجلبه تابع حساب التشابه بسبب كبر القسم وصغر السؤال بنسبة له كيف احل هذه المشكلة

علمتا اني استخدم langchain

تم التعديل في بواسطة محمد العامر3
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

من المهم  فهم الفرق بين "الصلة"(relevance) و"التشابه"(similarity).  أن التشابه يتعلق بالتشابه في مطابقة الكلمات ، الا ان الصلة تتعلق بترابط الأفكار. يمكنك تحديد المحتوى القريب لغويا باستخدام الاستعلام على قاعدة بيانات متجهة(vector database)، ولكن تحديد المحتوى ذي الصلة واسترداده يتطلب أدوات أكثر تطورا.

حيث البنية العامة لنظام الاسترجاع من الشكل التالي حيث يوجد فيه قاعدة بيانات متجهة يتم الاستعلام (query)عليها بواسطة حساب التشابه بين الاستعلام والمتجهات داخل قاعدة البيانات :

0_Y3VUFeJOyS--HRrN.webp.a180b75be10b2276d99d16a45a645460.webp

 

فان من الاستراتيجيات المتبعة هي تقسيم  الملفات الى اجزاء اصغر 

يمكن لنظام RAG تحديد التشابه بسرعة ودقة أكبر في أجزاء نصية أصغر منه في المستندات الكبيرة.

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

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

يمكن التغلب على هذه القيود عن طريق اتباع احد الاستراتيجيتان

  1. ادخال أجزاء المتداخلة : هي طريقة لتحقيق التوازن بين كل من هذه القيود. من خلال تداخل الأجزاء ، من المحتمل أن يسترد الاستعلام بيانات كافية ذات صلة عبر متجهات متعددة من أجل إنشاء استجابة سياقية بشكل صحيح.لكن أحد القيود هو أن هذه الاستراتيجية تفترض أن جميع المعلومات التي يجب عليك استردادها يمكن العثور عليها في مستند واحد. إذا تم تقسيم السياق المطلوب عبر مستندات مختلفة متعددة، فقد تفشل وسوف تفكر في الاستفادة من الحلول مثل التسلسلات الهرمية للمستندات وهي الاستراتيجية الثانية.
  2. التدرجات الهرمية للمستندات: يعد التسلسل الهرمي للمستندات طريقة فعالة لتنظيم بياناتك لتحسين استرجاع المعلومات وتاخذ الشكل التالي.

0_On97_C9Qi3jem0ZE.webp.165285567d8e6f691ba2c1c29cf87e36.webp

تربط التدرجات الهرمية للمستندات الأجزاء بالعقد، وتنظم العقد في العلاقات بين الأصل والابن. وتحتوي كل عقدة على ملخص للمعلومات الواردة فيها، مما يسرع نظام RAG  ويعرفه بالأجزاء التي يجب استخراجها.

مثال :

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

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

 

 

ملاحظة الاستراتيجية الثانية تتطلب خبرة اكثر في بنائها. وتتطلب  خبرة خاصة بالمجال أو مشكلة محددة للإنشاء لضمان أن تكون الملخصات ذات صلة كاملة بالمهمة المطروحة.

يمكن انشاء الملخصات يدويا او بواسطة ادوات ونماذج قد تساعد في عملية التلخيص

تم التعديل في بواسطة Ali Ibrahim12
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

تقسيم النصوص باستخدام LangChain يمكن أن يتم من خلال عدة طرق سأحاول شرحها لك:

يمكن أن نستخدم التقسيم الدلالي أو ما يعرف ب Semantic Segmentation وهذه العملية تتم من خلال تحسين تقسيم الملفات باستخدام تقسيم دلالي يعتمد على المعنى والسياق بدلا من القسمة العشوائية حيث في هذا السياق سيمكن تحديد نقاط محددة في النص تعبر عن بداية ونهاية كل فقرة بحيث يتم الاحتفاظ بالسياق الصحيح.

كما يمكن اعتماد تقنيات تعلم الآلة مثل تعلم النصوص (NLP) للمساعدة في عملية تحديد الفقرات وتقسيم الملفات بناء على سياق النصوص.

أو إن أردت فتوجد طريقة تعتمد استخدام وظائف التجزئة أو ما يعرف  بال Chunking Functions التي تساعد في تقسيم النص إلى أجزاء أصغر بناء على عناصر محددة مثل الجمل أو الفقرات دون فقدان السياق.

وآخر نقطة هي تقسيم النص بناء على العناصر الهيكلية فإذا كانت الملفات تحتوي على تنظيم هيكلي محدد مثل عناوين رئيسية وفرعية، يمكن استخدام هذه العناصر لتحديد نقاط التقسيم المناسبة.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ On 7‏/5‏/2024 at 01:20 قال محمد العامر3:

كيف يمكن استخراج الهيكلية للملف PDF وكيف لي ان اخزن الشكل على ماذا اعتمد في هذه الحالة ؟؟

تلك العملية تسمى RAG، والتي تعني تحويل النصول إلى أجزاء Chunks ثم تحويل ذلك إلى صيغ رقمية Vectors حيث تخزن في قاعدة البيانات مع الجزء النصي ثم يتم عمل بحث دلالي semantic search.

والفكرة هو استخراج أجزاء من النصوص المتشابهة عند كتابة شيء ما، أي يتم مقارنة ما تم كتابته مع النص الموجود في الملف كما لو أنك بحثت في جوجل، ثم بعد ذلك ترسل للـ Model الخاص بـ LLM ليفهمها ويضمنها في الـ Context، أي أنّ الفهم لم يتم عن طريق الـ LLM لكامل النصوص الموجودة في قاعدة البيانات إنما فقط لما اختاره البحث الدلالي.

وهناك إمكانية لحل تلك المشكلة نسبيًا وتحسين الـ RAG من خلال استخدام مكتبة إو إطار عمل مثل DSPY. 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 7 ساعة قال Mustafa Suleiman:

تلك العملية تسمى RAG، والتي تعني تحويل النصول إلى أجزاء Chunks ثم تحويل ذلك إلى صيغ رقمية Vectors حيث تخزن في قاعدة البيانات مع الجزء النصي ثم يتم عمل بحث دلالي semantic search.

والفكرة هو استخراج أجزاء من النصوص المتشابهة عند كتابة شيء ما، أي يتم مقارنة ما تم كتابته مع النص الموجود في الملف كما لو أنك بحثت في جوجل، ثم بعد ذلك ترسل للـ Model الخاص بـ LLM ليفهمها ويضمنها في الـ Context، أي أنّ الفهم لم يتم عن طريق الـ LLM لكامل النصوص الموجودة في قاعدة البيانات إنما فقط لما اختاره البحث الدلالي.

وهناك إمكانية لحل تلك المشكلة نسبيًا وتحسين الـ RAG من خلال استخدام مكتبة إو إطار عمل مثل DSPY. 

انا اعرف هذه المعلومة واستخدم اطار العملlangchain لكن الادوات الخاصة بالتقسيم لا تعطي نتائج مرضية وخاصة اي عند وجود فقرة مادة من قانون معين 

مثلا مادة 43: تنص على حقوق العامل

1.يحق للعامل 15 يوم اجازة من كل سنة خدمة

2.يحق للعمال تعويض نهاية الخدمة في حال كان قد اتم 30 سنة خدمة اوتوقف العمل من جهة مشغلي العمل ولم يرتكب جرم

3............

4..............

5................. 6..........................................20
لنفرض انها فقرة طويلة فاذا قسمت تقسيم دلالي يقوم بالنقسيم 

تعداد تعداد اي القسم الاول :

مثلا مادة 43: تنص على حقوق العامل

1.يحق للعامل 15 يوم اجازة من كل سنة خدمة

 

القسم الثاني 

2.يحق للعمال تعويض نهاية الخدمة في حال كان قد اتم 30 سنة خدمة اوتوقف العمل من جهة مشغلي العمل ولم يرتكب جرم

 

وهكذا 

فاذا سالت على ماذا تنص المادة 43  لن يعيد سوا القسم الاول وستكون الاجابة ناقصة 

واذا قمت بتقسيم مل مادة تعبر قسم 

فعند السئؤال عن متى يستحق العامل تعويض نهاية الخدمة لا يجلب المدة 43 كاولوية وذلك بسبب كبر القسم الخاص بها مقارنة بالاستعلام فما حل هذه المشكلة او يوجد اداة تساعد على تحليل الملف بشكل افضل من انواع المقسمات 

 

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...