این پروژه یک ابزار پیشرفته برای ایندکسسازی اسناد متنی (بهویژه اسناد حقوقی و فارسی) با استفاده از FAISS (Facebook AI Similarity Search) و مدلهای embedding چندزبانه است. هدف این ابزار، آمادهسازی اسناد برای استفاده در سیستمهای RAG (Retrieval-Augmented Generation) است که در آنها اطلاعات از اسناد استخراج و به مدلهای زبانی ارائه میشود.
این ابزار برای پردازش اسناد متنی (مانند فایلهای .txt
و .md
) طراحی شده است و قابلیتهای زیر را ارائه میدهد:
intfloat/multilingual-e5-large
) برای پشتیبانی بهینه از اسناد فارسی.برای اجرای این کد، نیاز به نصب کتابخانههای زیر دارید:
pip install sentence-transformers faiss-cpu scikit-learn tqdm numpy
اختیاری (برای دانلود سریعتر مدلها):
pip install hf_xet
python -m venv rag_env
source rag_env/bin/activate # لینوکس/مک
rag_env\Scripts\activate # ویندوز
advanced_faiss_indexer1.py
: اسکریپت اصلی برای ایندکسسازی اسناد.documents/
: جایی که فایلهای ورودی (مانند taarefe1404.txt
, power_factor_final.txt
) قرار میگیرند.index_v4_upgraded/
: جایی که فایلهای خروجی (ایندکس FAISS، متادیتا، و خلاصه) ذخیره میشوند.faiss_index_upgraded.index
: فایل ایندکس FAISS برای جستجوی برداری.enhanced_metadata.json
: متادیتای قطعات (مانند نوع، کلمات کلیدی، امتیاز کیفیت).comprehensive_summary.json
: خلاصه آماری از فرآیند ایندکسسازی.این ابزار در چند مرحله اسناد را پردازش و ایندکس میکند:
.txt
, .md
) از پوشه documents/
خوانده میشوند.intfloat/multilingual-e5-large
برای تبدیل قطعات به بردارهای عددی استفاده میشود.IndexHNSWFlat
یا IndexFlatL2
استفاده میشود.IndexIVFPQ
با تنظیمات پویا (تعداد خوشهها، بیتها) استفاده میشود.documents/
قرار دهید.taarefe1404.txt
, siasatekolli.txt
.mkdir -p documents
# قرار دادن فایلهای متنی در پوشه documents
advanced_faiss_indexer1.py
ذخیره کنید.cd H:\HadiSadoghiYazdi\hadisadoghiyazdi1971.github.io\hadisadoghiyazdi1971.github.io\smart-power-mashhad
python advanced_faiss_indexer1.py
index_v4_upgraded/
:
faiss_index_upgraded.index
: ایندکس FAISS برای جستجو.enhanced_metadata.json
: اطلاعات قطعات (برای فیلتر در RAG).comprehensive_summary.json
: آمار فرآیند (مثل تعداد قطعات، میانگین امتیاز کیفیت).article
, table
).from langchain.vectorstores import FAISS
index = FAISS.load_local("./index_v4_upgraded", embeddings)
در بخش 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
}
max_chunk_size
را به 400 کاهش دهید تا قطعات بیشتری تولید شود.paraphrase-multilingual-mpnet-base-v2
) را امتحان کنید.NameError: name 'self' is not defined
create_optimized_faiss_index
) درست در کلاس AdvancedFAISSIndexCreator
قرار دارند.nx >= k
bits=4
(16 خوشه) برای دادههای کوچک استفاده میکند یا به IndexHNSWFlat
برمیگردد.set HF_HUB_DISABLE_SYMLINKS_WARNING=1
pip install hf_xet
intfloat/multilingual-e5-large
روی CPU کند است.faiss-gpu
) استفاده کنید.paraphrase-multilingual-mpnet-base-v2
) را امتحان کنید.max_workers
) را افزایش دهید اگر CPU قوی دارید.برای 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)
from langchain.vectorstores import FAISS
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("intfloat/multilingual-e5-large")
vector_store = FAISS.load_local("./index_v4_upgraded", model)
results = vector_store.similarity_search("ماده قانونی درباره تعرفه", k=5)
enhanced_metadata.json
برای فیلتر کردن نتایج (مثلاً فقط قطعات article
یا table
) استفاده کنید.compression_dim
را به 64 یا 96 افزایش دهید.faiss-gpu
برای سرعت بالاتر استفاده کنید.IndexHNSWFlat
برمیگردد.multilingual-e5-large
) روی CPU کند هستند. برای تولید سریعتر، از GPU یا مدل سبکتر استفاده کنید..txt
و .md
پشتیبانی میشود. برای PDF، ابتدا متن را استخراج کنید.این پروژه توسط تیم xAI و با الهام از نیازهای پروژههای RAG توسعه یافته است. برای سؤالات یا پیشنهادات، با ما در تماس باشید.
آخرین بهروزرسانی: مهر 1404 (اکتبر 2025)