Skip to content

cerrn/YZM304_Odev1

Repository files navigation

YZM304 Derin Öğrenme — Proje Ödevi 1

AI vs Human Metin Sınıflandırması


Introduction (Giriş)

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.


Methods (Yöntemler)

Veri Seti

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)

Veri Ön İşleme

  1. Metin Temizleme: Küçük harf dönüşümü, sayı ve noktalama kaldırma, fazla boşluk temizleme.
  2. TF-IDF Özellik Çıkarımı: max_features=500, ngram_range=(1,2), sublinear_tf=True.
  3. 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).
  4. Standardizasyon: StandardScaler ile özellikler standardize edildi (μ=0, σ=1).

Veri Bölme

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).

Hiperparametreler (Tam Tekrarlanabilirlik İçin)

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 Mimarileri

Numpy Sinir Ağı Modelleri (Sıfırdan Implementasyon)

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

Scikit-learn MLPClassifier Modelleri

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

PyTorch Modelleri (src/pytorch_model.py)

Aynı mimari PyTorch nn.Module ile de yazılmıştır. PyTorch kurulumu (pip install torch) sonrasında çalışır.

Model Seçim Kriteri

  • %90 accuracy eşiğini geçen modeller arasında en düşük n_steps olan seçilir.
  • Eşik geçilmediyse en yüksek accuracy'li model seçilir.

Overfitting/Underfitting Analizi

  • 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.

Results (Sonuçlar)

Sonuçlar outputs/ klasöründe görselleştirmeler halinde mevcuttur:

  • confusion_matrix_*.png — Her model için karmaşıklık matrisi
  • training_history_*.png — Train/Dev loss ve accuracy eğrileri
  • model_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ı

Discussion (Tartışma ve Sonuç)

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.

Proje Yapısı

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

Kurulum ve Çalıştırma

# Gerekli kütüphaneler
pip install numpy pandas scikit-learn matplotlib

# PyTorch (opsiyonel)
pip install torch

# Projeyi çalıştır
python main.py

Ankara Üniversitesi — YZM304 Derin Öğrenme — 2025-2026 Bahar Dönemi

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages