مستندات پروژه: Advanced FAISS Index Creator V4

این پروژه یک ابزار پیشرفته برای ایندکس‌سازی اسناد متنی (به‌ویژه اسناد حقوقی و فارسی) با استفاده از FAISS (Facebook AI Similarity Search) و مدل‌های embedding چندزبانه است. هدف این ابزار، آماده‌سازی اسناد برای استفاده در سیستم‌های RAG (Retrieval-Augmented Generation) است که در آن‌ها اطلاعات از اسناد استخراج و به مدل‌های زبانی ارائه می‌شود.

🎯 ویژگی‌های کلیدی این نسخه

1. قطعه‌بندی هوشمند پیشرفته

2. متادیتای غنی

3. بهینه‌سازی‌های پیشرفته

4. تحلیل و گزارش‌دهی

مقدمه

این ابزار برای پردازش اسناد متنی (مانند فایل‌های .txt و .md) طراحی شده است و قابلیت‌های زیر را ارائه می‌دهد:

پیش‌نیازها

برای اجرای این کد، نیاز به نصب کتابخانه‌های زیر دارید:

pip install sentence-transformers faiss-cpu scikit-learn tqdm numpy

اختیاری (برای دانلود سریع‌تر مدل‌ها):

pip install hf_xet

محیط پیشنهادی

ساختار پروژه

فایل‌های اصلی

فایل‌های خروجی

نحوه کار ابزار

این ابزار در چند مرحله اسناد را پردازش و ایندکس می‌کند:

  1. بارگذاری اسناد:
    • اسناد متنی (.txt, .md) از پوشه documents/ خوانده می‌شوند.
    • پشتیبانی از اسناد فارسی با استفاده از کدگذاری UTF-8.
  2. قطعه‌بندی هوشمند:
    • اسناد به قطعات کوچک‌تر (حداکثر 800 کاراکتر) تقسیم می‌شوند.
    • ساختار اسناد (مانند مواد قانونی، تبصره‌ها، جداول) شناسایی می‌شود.
    • قطعات با امتیاز کیفیت پایین (مثلاً خیلی کوتاه) فیلتر می‌شوند.
  3. ایجاد Embedding:
    • از مدل intfloat/multilingual-e5-large برای تبدیل قطعات به بردارهای عددی استفاده می‌شود.
    • Embedding‌ها نرمال‌سازی می‌شوند برای جستجوی مبتنی بر شباهت کسینوسی.
  4. ایندکس‌سازی با FAISS:
    • برای داده‌های کوچک (مثل 117 قطعه)، از IndexHNSWFlat یا IndexFlatL2 استفاده می‌شود.
    • برای داده‌های بزرگ‌تر، از IndexIVFPQ با تنظیمات پویا (تعداد خوشه‌ها، بیت‌ها) استفاده می‌شود.
  5. ذخیره متادیتا و خلاصه:
    • اطلاعات متادیتا (مانند نوع قطعه، کلمات کلیدی) در فایل JSON ذخیره می‌شود.
    • خلاصه آماری (تعداد قطعات، کلمات، توزیع انواع قطعات) تولید می‌شود.

🚀 نحوه اجرا

1. آماده‌سازی اسناد

2. ساختار دایرکتوری

mkdir -p documents
# قرار دادن فایل‌های متنی در پوشه documents

3. اجرای اسکریپت

4. بررسی خروجی‌ها

5. استفاده در RAG

تغییرات و ارتقاهای اعمال شده

پشتیبانی بهتر از زبان فارسی و اسناد قانونی

بهینه‌سازی قطعه‌بندی (Chunking)

بهینه‌سازی embedding و ایندکس FAISS

پردازش موازی و کارایی

متادیتا و خلاصه غنی‌تر

تنظیمات قابل تغییر

در بخش main() اسکریپت، می‌توانید تنظیمات را تغییر دهید:

config = {
    "documents_dir": "./documents",
    "index_dir": "./index_v4_upgraded",
    "embedding_model": "intfloat/multilingual-e5-large",  # یا "paraphrase-multilingual-mpnet-base-v2" برای سرعت بیشتر
    "max_chunk_size": 800,  # حداکثر اندازه قطعه
    "min_chunk_size": 150,  # حداقل اندازه قطعه
    "overlap_size": 50,     # همپوشانی بین قطعات
    "max_workers": 8,       # تعداد نخ‌های پردازش موازی
    "compression_dim": 16   # برای فشرده‌سازی PQ
}

رفع مشکلات رایج

1. خطای NameError: name 'self' is not defined

2. خطای FAISS: nx >= k

4. کندی پردازش

مثال خروجی

برای 11 سند با 117 قطعه:

================================================================================
🚀 FAISS Index Creator V4 - Upgraded RAG Optimized
================================================================================
پردازش اسناد: 100%|███████████████████████████| 11/11 [00:00<00:00, 22.34it/s]
2025-10-15 23:25:28,636 - INFO - ✅ تعداد قطعات استخراج‌شده: 117
ایجاد embeddingها: 100%|████████████████████████| 4/4 [01:59<00:00, 29.92s/it]
2025-10-15 23:25:28,636 - INFO - ✅ embeddingها با موفقیت ایجاد شدند
2025-10-15 23:25:30,313 - INFO - ✅ ایندکس FAISS با موفقیت ایجاد و ذخیره شد
2025-10-15 23:25:30,315 - INFO - ✅ متادیتا ذخیره شد در: index_v4_upgraded/enhanced_metadata.json
2025-10-15 23:25:30,315 - INFO - ✅ خلاصه جامع ذخیره شد در: index_v4_upgraded/comprehensive_summary.json

================================================================================
✅ ایجاد ایندکس با موفقیت کامل شد!
================================================================================
📊 خلاصه نهایی:
   📄 اسناد پردازش شده: 11
   ✂️  کل قطعات: 117
   📝 کل کلمات: 12,345
   🔤 کل کاراکترها: 78,901
   📏 اندازه متوسط قطعات: 674 کاراکتر
   ⭐ میانگین امتیاز کیفیت: 0.82
   🤖 مدل embedding: intfloat/multilingual-e5-large
   📁 دایرکتوری ایندکس: index_v4_upgraded

توزیع انواع قطعات:
   - article: 45
   - table: 20
   - general: 30
   - regulation: 15
   - note: 7

📁 فایل‌های ایجاد شده:
   📄 faiss_index_upgraded.index (0.15 MB)
   📄 enhanced_metadata.json (0.03 MB)
   📄 comprehensive_summary.json (0.01 MB)

نکات پیشرفته

محدودیت‌ها

توسعه‌دهندگان

این پروژه توسط تیم xAI و با الهام از نیازهای پروژه‌های RAG توسعه یافته است. برای سؤالات یا پیشنهادات، با ما در تماس باشید.

منابع اضافی


آخرین به‌روزرسانی: مهر 1404 (اکتبر 2025)