Semantic-Search / README.md
Shahd Altamimi
Update README.md
82fa909 unverified
|
Raw
History Blame Contribute Delete
6.71 kB
---
title: 'البحث الدلالي '
emoji: 🔍
colorFrom: green
colorTo: gray
sdk: streamlit
sdk_version: 1.58.0
app_file: reverse-dictionary/frontend/streamlit_app.py
pinned: false
---
# 🔍 تقييم البحث الدلالي
تطبيق **Streamlit** لتقييم ومقارنة **4 نماذج Embedding** على بيانات معجمية عربية:
تُدخل تعريفًا، فيعرض لك كل نموذج أقرب الكلمات، ويقيّمها المُقيّمون (صح/خطأ لكل
كلمة)، وتُجمَّع التقييمات في قاعدة بيانات **MongoDB** سحابية مركزية.
🔗 **التطبيق المنشور:** <https://huggingface.co/spaces/shahdAI/Semantic-Search>
---
## 🗂️ هيكل المشروع
```
reverse-dictionary/
├── frontend/
│ └── streamlit_app.py # 🎨 الواجهة (Streamlit) — التطبيق بالكامل
├── backend/ # 🧠 المنطق (وحدات يستوردها التطبيق مباشرة)
│ ├── config.py # ⚙️ الإعدادات + تعريف النماذج (ابدأ من هنا)
│ ├── requirements.txt # مكتبات بايثون (للتطوير المحلي)
│ ├── .env.example # نموذج متغيّرات البيئة
│ │
│ ├── app/
│ │ ├── models_loader.py # تحميل النماذج والـ embeddings (مرة واحدة، كسولًا)
│ │ ├── search.py # 🔎 منطق البحث الدلالي (cosine)
│ │ ├── database.py # 🗄️ حفظ التقييمات (SQLite Cloud / Supabase / SQLite محلي)
│ │ └── assets.py # 📥 تنزيل الملفات الكبيرة من Hugging Face Hub
│ │
│ └── scripts/ # سكربتات تُشغّل مرة واحدة
│ ├── prepare_data.py # تنظيف البيانات الخام
│ ├── build_embeddings.py # بناء الـ embeddings
│ └── upload_assets.py # رفع الملفات الكبيرة إلى HF Hub
├── data/ # 📦 البيانات (لا تُرفع على Git — تُبنى/تُنزَّل)
└── models/ # النموذج الثالث المحلي (لا يُرفع على Git)
```
---
## 🤖 النماذج الثلاثة
| الاسم الظاهر | المصدر |
|---|---|
| **النموذج الأول** | `intfloat/multilingual-e5-large` |
| **النموذج الثاني** | `Omartificial-Intelligence-Space/Arabic-Triplet-Matryoshka-V2` |
| **النموذج الثالث** | نموذج محلي (مساره في `.env` عبر `MODEL_3_PATH`) |
> النموذج الأول فقط محدود بـ 10 نتائج، والباقي بدون حد. أي تعديل على النماذج
> أو أسمائها أو إعداداتها يكون في
> [`reverse-dictionary/backend/config.py`](reverse-dictionary/backend/config.py) فقط.
---
## 🔄 كيف يعمل؟
```
الواجهة (streamlit_app.py)
└─ cached_search() → search.py: search_one_model()
├─ models_loader.get_model() # تحميل النموذج (كسولًا)
└─ model.encode(query) + cosine مع الـ embeddings
└─ db.save_evaluation() → database.py → SQLite Cloud
```
- **التسجيل:** كل مُقيّم يُدخل اسمه وإيميله قبل التقييم.
- **التقييم:** لكل نموذج تظهر أفضل 5 كلمات، ويؤشّر المُقيّم ✓ على الصحيحة.
- **التخزين:** التقييمات تُحفظ في جدول `ratings` (والمقيّمون في `evaluators`).
---
## 🗄️ التخزين (قاعدة التقييمات)
يُقرأ رابط القاعدة من `DATABASE_URL` (في الأسرار أو متغيّرات البيئة)، والكود
يتعرّف على النوع تلقائيًا:
| الرابط | القاعدة |
|---|---|
| `sqlitecloud://...` | **SQLite Cloud** (المستخدم حاليًا) |
| `postgresql://...` | Supabase (Postgres) |
| غير مضبوط | SQLite محلية (`data/eval_local.db`) للتجربة |
الجداول تُنشأ تلقائيًا عند أول تشغيل. كل مُقيّم يرى **تقييماته فقط** في الواجهة،
بينما تتجمّع كل التقييمات مركزيًا لدى صاحب المشروع.
---
## ⚙️ التشغيل محليًا
```bash
cd reverse-dictionary
# بيئة افتراضية + المكتبات
python -m venv backend/.venv
source backend/.venv/bin/activate
pip install -r backend/requirements.txt
# (اختياري) إعداد المسار المحلي للنموذج الثالث
cp backend/.env.example backend/.env # عدّل MODEL_3_PATH
# تشغيل التطبيق
streamlit run frontend/streamlit_app.py
```
ثم افتح: <http://localhost:8501>
> بدون `DATABASE_URL` يستخدم التطبيق قاعدة SQLite محلية للتجربة. لربط SQLite Cloud
> محليًا، ضع الرابط في `.streamlit/secrets.toml` أو كمتغيّر بيئة.
---
## 🛠️ الإعداد لمرة واحدة (بناء البيانات والنماذج)
```bash
cd reverse-dictionary/backend
python scripts/prepare_data.py # تنظيف → data/processed/data.csv
python scripts/build_embeddings.py # بناء → data/embeddings/*.npy
```
لرفع الملفات الكبيرة إلى Hugging Face Hub (عشان التطبيق المنشور ينزّلها):
```bash
export HF_TOKEN=hf_xxx
export HF_DATA_REPO="USERNAME/reverse-dictionary-assets"
python scripts/upload_assets.py
```
---
## 🚀 النشر (Hugging Face Spaces)
التطبيق منشور على HF Spaces. التفاصيل خطوة بخطوة في
[README_STREAMLIT_CLOUD.md](reverse-dictionary/DEPLOY.md).
**الأسرار المطلوبة في الـ Space:**
- `HF_DATA_REPO` — مستودع HF الذي يحوي النماذج والـ embeddings (تُنزَّل تلقائيًا).
- `DATABASE_URL` — رابط قاعدة التقييمات (SQLite Cloud `sqlitecloud://...`).
---
## 🧭 من أين أبدأ القراءة؟
1. [`backend/config.py`](reverse-dictionary/backend/config.py) — الإعدادات وتعريف النماذج.
2. [`backend/app/search.py`](reverse-dictionary/backend/app/search.py) — قلب المشروع (منطق البحث).
3. [`backend/app/database.py`](reverse-dictionary/backend/app/database.py) — حفظ التقييمات.
4. [`frontend/streamlit_app.py`](reverse-dictionary/frontend/streamlit_app.py) — الواجهة كاملة.