## ? AI vs Human Text Classifier
### اكتشاف ما إذا كان النص من إنتاج بشري أو ذكاء اصطناعي
**AI-Human-Text-Classifier** هو نموذج خفيف مبني على **DistilBERT** قادر على تصنيف ما إذا كان النص مكتوبًا بواسطة إنسان أو تم إنشاؤه بواسطة الذكاء الاصطناعي. تم تدريب النموذج على عينة متوازنة من بيانات `AI_Human.csv`، وحقق دقة تصل إلى **99%** على مجموعة الاختبار.
---
### نظرة عامة على البيانات
* **المصدر:** [Kaggle - AI vs Human Text Dataset](https://www.kaggle.com/da...)
* **عدد العينات الأصلية:** 487,235
* **الأعمدة:**
* `text`: النص المدخل.
* `generated`: الوسم (0 = بشري، 1 = ذكاء اصطناعي).
### ? استراتيجية أخذ العينة
تم اختيار **10,000** عينة عشوائية من كل فئة للحصول على مجموعة بيانات متوازنة تحتوي على **20,000** سجل فقط، وذلك لتحقيق تدريب فعال دون التأثير على أداء النموذج.
---
### ️ خطوات العمل
#### 1. **التحميل والمعالجة المسبقة**
* تحميل البيانات وإزالة القيم المفقودة.
* حفظ البيانات المعالجة في `sampled_preprocessed_data.csv`.
#### 2. **تقسيم البيانات**
* تدريب: 80% (16,000)
* تحقق: 10% (2,000)
* اختبار: 10% (2,000)
* باستخدام **Stratified Split** للحفاظ على التوازن بين الفئات.
#### 3. **التحويل إلى رموز (Tokenization)**
* باستخدام `DistilBertTokenizer` مع:
* الطول الأقصى: 512
* التوسيط والاقتطاع لتوحيد حجم الإدخال.
#### 4. **التدريب**
* النموذج: `DistilBertForSequenceClassification` (تصنيف ثنائي).
* إعدادات التدريب:
* عدد الدورات: 3
* حجم الدفعة: 16
* Weight Decay: 0.01
* Warmup Steps: 200
* الأداء على التحقق: **99.25%**
#### 5. **التقييم**
* الدقة على مجموعة الاختبار: **99%**
* المقاييس:
* Precision: 0.99
* Recall: 0.99
* F1-score: 0.99
| الفئة | Precision | Recall | F1-Score | Support |
| ----- | --------- | ------ | -------- | ------- |
| Human | 1.00 | 0.98 | 0.99 | 1000 |
| AI | 0.98 | 1.00 | 0.99 | 1000 |
---
### **الاستخدام**
#### تثبيت المتطلبات:
```bash
pip install transformers torch pandas datasets scikit-learn
```
#### ? تدريب أو تقييم النموذج:
افتح الملف `distilbert.ipynb` لتدريب النموذج أو تقييمه.
#### استخدام النموذج للتنبؤ:
```python
from transformers import DistilBertTokenizer, DistilBertForSequenceClassification
tokenizer = DistilBertTokenizer.from_pretrained("best_distilbert_model")
model = DistilBertForSequenceClassification.from_pretrained("best_distilbert_model")
```
#### ? مثال على التنبؤ:
```plaintext
النص: "هذا نص تمت كتابته بدقة عالية واحترافية."
→ النتيجة: بشري
→ الثقة: 98.59%
(بشري: 98.59%, ذكاء صناعي: 1.41%)
```
---
### نتائج التدريب
| الدورة | Training Loss | Validation Loss | Accuracy |
| ------ | ------------- | --------------- | ---------- |
| 1 | 0.0456 | 0.0955 | 98.05% |
| 2 | 0.0002 | 0.0478 | 99.10% |
| 3 | 0.0002 | 0.0445 | **99.25%** |