Bu çalışma, Ankara Üniversitesi Yapay Zeka ve Veri Mühendisliği bölümü YZM304 Derin Öğrenme dersi kapsamında hazırlanmıştır. Çalışmanın amacı, 13.03.2026 tarihinde laboratuvar ortamında uygulanan 1 gizli katmanlı sinir ağı modelini gerçek bir veri seti üzerinde eğitmek, test etmek ve çeşitli optimizasyon teknikleri ile iyileştirmektir.
Kullanılan veri seti, akademik metinlerin AI (yapay zeka) veya Human (insan) tarafından yazılıp yazılmadığını sınıflandırmaya yönelik ikili bir sınıflandırma problemi içermektedir. Toplam 6069 metinden oluşan veri setinde 3069 AI yazısı ve 3000 insan yazısı bulunmaktadır. Sınıflar dengeli dağılım gösterdiğinden (yaklaşık %50-%50) accuracy birincil değerlendirme metriği olarak kullanılmıştır.
Çalışmanın önemi: Yapay zeka tarafından üretilen içeriklerin tespiti, akademik dürüstlük, dijital güvenlik ve bilgi güvenilirliği açısından giderek artan bir önem taşımaktadır. Bu proje, derin öğrenme yöntemlerinin bu alandaki etkinliğini araştırmaktadır.
| Parametre | Değer |
|---|---|
| Veri dosyası | data/data_for_preprocessing.csv |
| Toplam örnek | 6069 |
| Sınıflar | AI (0), Human (1) |
| AI örnek sayısı | 3069 |
| Human örnek sayısı | 3000 |
| Özellik türü | Metin (Text kolonu) |
- Metin Temizleme: Küçük harf dönüşümü, sayı ve noktalama kaldırma, fazla boşluk temizleme.
- TF-IDF Özellik Çıkarımı:
max_features=500,ngram_range=(1,2),sublinear_tf=True. - Manuel Özellik Mühendisliği: Metin uzunluğu, kelime sayısı, ortalama kelime uzunluğu, noktalama sayısı, büyük harf oranı, cümle sayısı, ortalama cümle uzunluğu (7 özellik).
- Standardizasyon:
StandardScalerile özellikler standardize edildi (μ=0, σ=1).
| Set | Oran | Örnek Sayısı (yaklaşık) |
|---|---|---|
| Train seti | %70 | ~4248 |
| Dev seti | %15 | ~910 |
| Test seti | %15 | ~911 |
Bölme stratified split ile yapıldı (sınıf oranları korundu).
random_state = 42
max_features = 500 # TF-IDF max özellik
test_size = 0.15
dev_size = 0.15
learning_rate = 0.01
batch_size = 32
activation = relu
optimizer = SGD (mini-batch)
loss_function = Binary Cross Entropy
lambda_reg (L2) = 0.01
n_steps_model1 = 1000
n_steps_model2 = 1500
n_steps_model3 = 2000
| Model | Mimari | Katman Sayısı | Regularizasyon |
|---|---|---|---|
| Model 1 | [507→64→1] relu, sigmoid | 2 (1 gizli) | Yok |
| Model 2 | [507→128→64→1] relu, sigmoid | 3 (2 gizli) | Yok |
| Model 3 | [507→256→128→64→1] relu, sigmoid | 4 (3 gizli) | L2 (λ=0.01) |
- Ağırlık başlatma: He başlatma (√(2/n_in))
- Optimizasyon: Mini-batch SGD
- Kayıp fonksiyonu: Binary Cross Entropy Loss
| Model | hidden_layer_sizes | solver | alpha |
|---|---|---|---|
| SKLearn Model 1 | (64,) | sgd | 0.0001 |
| SKLearn Model 2 | (128, 64) | sgd | 0.0001 |
| SKLearn Model 3 | (256, 128, 64) | sgd | 0.0001 |
Aynı mimari PyTorch nn.Module ile de yazılmıştır. PyTorch kurulumu (pip install torch) sonrasında çalışır.
- %90 accuracy eşiğini geçen modeller arasında en düşük
n_stepsolan seçilir. - Eşik geçilmediyse en yüksek accuracy'li model seçilir.
- Train ve Dev loss/accuracy eğrileri karşılaştırıldı.
- Train loss << Dev loss → Overfitting → L2 regularizasyon uygulandı.
- Train ve Dev loss birlikte yüksek → Underfitting → Daha derin model / daha fazla adım.
Sonuçlar outputs/ klasöründe görselleştirmeler halinde mevcuttur:
confusion_matrix_*.png— Her model için karmaşıklık matrisitraining_history_*.png— Train/Dev loss ve accuracy eğrilerimodel_comparison.png— Tüm modellerin accuracy ve F1 karşılaştırması
Tüm modeller için raporlanan metrikler:
- Accuracy: Doğru sınıflandırılan örneklerin oranı
- Precision: Pozitif tahminler içinde gerçek pozitiflerin oranı
- Recall: Gerçek positifler içinde doğru yakalananların oranı
- F1-Score: Precision ve Recall'un harmonik ortalaması
- Specificity: Gerçek negatifleri doğru yakalama oranı
Bu çalışmada AI vs Human metin sınıflandırması için çok katmanlı sinir ağları başarıyla uygulanmıştır. TF-IDF özellik çıkarımı ve manuel özellik mühendisliğinin kombinasyonu, modelin metin stilini ayırt etmesine yardımcı olmaktadır.
Bulgular:
- Derin modeller (daha fazla gizli katman) genel olarak daha iyi performans sergilemiştir ancak eğitim süresi artmıştır.
- L2 regularizasyon, derin modellerde overfitting'i azaltmada etkili olmuştur.
- Scikit-learn MLPClassifier ile Numpy implementasyonu benzer sonuçlar vermiştir; bu durum sıfırdan yazılan modelin doğruluğunu teyit etmektedir.
Gelecek Çalışmalar:
- Transformer tabanlı modeller (BERT, RoBERTa) ile karşılaştırma yapılabilir.
- Daha büyük veri setleri ile eğitim yapılabilir.
- Attention mekanizması eklenebilir.
- Veri artırma (data augmentation) teknikleri denenebilir.
- Batch normalizasyon ile daha hızlı eğitim sağlanabilir.
YZM304_Project/
├── main.py # Ana çalıştırma dosyası
├── src/
│ ├── data_preprocessing.py # Veri ön işleme sınıfı
│ ├── neural_network.py # Numpy sinir ağı (sıfırdan)
│ ├── sklearn_model.py # Scikit-learn MLPClassifier sarmalayıcı
│ ├── pytorch_model.py # PyTorch implementasyonu
│ └── evaluator.py # Metrik ve görselleştirme sınıfı
├── data/
│ └── data_for_preprocessing.csv
├── models/ # Kaydedilen model ağırlıkları
├── outputs/ # Görseller ve sonuçlar
└── README.md
# Gerekli kütüphaneler
pip install numpy pandas scikit-learn matplotlib
# PyTorch (opsiyonel)
pip install torch
# Projeyi çalıştır
python main.pyAnkara Üniversitesi — YZM304 Derin Öğrenme — 2025-2026 Bahar Dönemi