🌍 English Documentation | 🇹🇷 Türkçe Dokümantasyon
Makine Öğrenmesi Dönem Projesi Türkçe e-ticaret yorumlarını analiz ederek spam tespiti ve duygu analizi yapan, uçtan uca geliştirilmiş yapay zeka destekli karar destek sistemi.
| Öğrenci No | İsim | Rol |
|---|---|---|
| -- | Mustafa Arda Düşova | Ekip Lideri & Developer |
| -- | Fatih Çoban | Veri Araştırması & Analiz |
| -- | Efe Ata | Model Belirleme & Optimizasyon |
Bu projenin temel amacı, TRSAv1 (Turkish Sentiment Analysis) veri seti kullanılarak Türkçe e-ticaret yorumlarını analiz eden ve iki ana görevi yerine getiren bir makine öğrenmesi sistemi geliştirmektir:
- 🚫 Spam/Bot Tespiti: Sahte, reklam amaçlı veya bot tarafından yazılmış yorumları tespit etmek
- 💭 Duygu Analizi (Sentiment Analysis): Yorumların olumlu, olumsuz veya nötr olduğunu belirlemek
Proje, sadece akademik bir çalışma olmanın ötesinde; Gradio ile geliştirilmiş modern web arayüzü ve manuel olarak kodlanmış veri işleme boru hatları (pipelines) ile profesyonel bir ürün niteliği taşımaktadır.
| Özellik | Açıklama |
|---|---|
| 🔧 Manuel Veri İşleme | Hazır kütüphaneler yerine, eğitim amaçlı olarak manuel kodlanmış Türkçe Stemming ve Metin Normalizasyonu |
| 🎯 Yüksek Performanslı Model | TF-IDF + Logistic Regression ile optimize edilmiş tahminleme motoru |
| 🔀 Hibrit Spam Tespiti | Kural tabanlı + IsolationForest anomali tespiti birleşimi |
| 📊 Aspekt Analizi | Kargo, fiyat, kalite gibi konularda ayrı ayrı duygu analizi |
| 🖥️ Web Arayüzü | Gradio ile geliştirilen kullanıcı dostu demo arayüzü |
| 📈 Detaylı Görselleştirme | Confusion Matrix, PR Curve, metrik grafikleri |
┌─────────────────────────────────────────────────────────────────────────────┐
│ TÜRKÇE E-TİCARET YORUM ANALİZ SİSTEMİ │
└─────────────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ 1️⃣ VERİ TOPLAMA │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ HuggingFace │ OR │ GitHub │ OR │ Yerel CSV │ │
│ │ TRSAv1 Dataset │ │ Download │ │ Dosyası │ │
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ 2️⃣ VERİ ÖN İŞLEME │
│ ┌─────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Akıllı CSV │→ │ Unicode │→ │ Türkçe │→ │ URL/Email │ │
│ │ Okuma │ │ Normalizasyon│ │ Stemming │ │ Temizleme │ │
│ └─────────────┘ └──────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
│
┌───────────┴───────────┐
▼ ▼
┌────────────────────────────────┐ ┌────────────────────────────────────────┐
│ 3️⃣ DUYGU ANALİZİ │ │ 4️⃣ SPAM TESPİTİ │
│ ┌──────────────────────────┐ │ │ ┌──────────────────────────────────┐ │
│ │ TF-IDF Vektörizasyon │ │ │ │ Kural Tabanlı Tespit │ │
│ │ (1-2 gram, 2000 feat) │ │ │ │ (URL, tekrar, jenerik ifade) │ │
│ └──────────────────────────┘ │ │ └──────────────────────────────────┘ │
│ │ │ │ │ │
│ ▼ │ │ ▼ │
│ ┌──────────────────────────┐ │ │ ┌──────────────────────────────────┐ │
│ │ Logistic Regression │ │ │ │ IsolationForest │ │
│ │ (3 sınıf: neg/neu/pos) │ │ │ │ (Anomali Tespiti) │ │
│ └──────────────────────────┘ │ │ └──────────────────────────────────┘ │
└────────────────────────────────┘ └────────────────────────────────────────┘
│ │
└───────────┬───────────┘
▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ 5️⃣ UYGULAMA KATMANI │
│ ┌──────────────────┐ ┌──────────────────┐ ┌───────────────────────────┐ │
│ │ Aspekt Analizi │ │ Gradio Demo │ │ BERT Fine-tuning (Ops.) │ │
│ │ (Kargo/Fiyat/vs) │ │ Web Arayüzü │ │ (dbmdz/bert-turkish) │ │
│ └──────────────────┘ └──────────────────┘ └───────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
| Özellik | Değer |
|---|---|
| Veri Seti | TRSAv1 (Turkish Sentiment Analysis v1) |
| Kaynak | HuggingFace / GitHub |
| Kapsam | Türkçe e-ticaret yorumları |
| Sınıflar | Negatif (0), Nötr (1), Pozitif (2) |
-
Veri Temizliği (
src/preprocessing.py):- Unicode normalizasyonu
- URL, e-posta, telefon temizliği
- Türkçe stemming (TurkishStemmer)
- Tekrar eden karakter azaltma
-
Modelleme (
src/model.py):- Veri %80 Eğitim, %10 Validation, %10 Test olarak ayrıldı
- TF-IDF (1-2 gram) + Logistic Regression
- Hibrit spam tespiti (Kural + IsolationForest)
| Model | Accuracy | F1-Score (Macro) | Precision | Recall |
|---|---|---|---|---|
| TF-IDF + Logistic Regression | ~0.85 | ~0.78 | ~0.79 | ~0.77 |
| BERT Fine-tuning (Opsiyonel) | ~0.88 | ~0.82 | ~0.83 | ~0.81 |
| Model | Accuracy | F1-Score | Precision | Recall |
|---|---|---|---|---|
| Hibrit (Kural + IsolationForest) | ~0.92 | ~0.75 | ~0.80 | ~0.70 |
Not: Değerler yaklaşık olup, veri setine göre değişebilir.
Geliştirdiğimiz modern web arayüzünden örnekler:
| Çıktı | Açıklama |
|---|---|
| Spam Olasılığı | 0-1 arası, 1'e yakın = muhtemel spam |
| Genel Duygu | Negatif / Nötr / Pozitif |
| Aspekt Analizi | Kargo, fiyat, kalite vs. için ayrı duygu |
Turkish-ECommerce-Sentiment-Spam-Analyzer/
│
├── 📂 data/ # Veri setleri
│ └── TRSAv1.csv # Ana veri seti (otomatik indirilir)
│
├── 📂 docs/ # Dökümanlar
│ ├── en/
│ │ └── README.md # English documentation
│ └── images/ # Ekran görüntüleri
│
├── 📂 models/ # Eğitilmiş modeller
│ ├── sentiment_model.pkl # Duygu analizi modeli
│ └── spam_model.pkl # Spam tespiti modeli
│
├── 📂 src/ # Kaynak kodlar
│ ├── __init__.py
│ ├── app.py # Gradio web arayüzü
│ ├── preprocessing.py # Veri ön işleme
│ ├── model.py # Model eğitim & tahmin
│ ├── spam_detector.py # Spam tespiti modülü
│ └── utils.py # Yardımcı fonksiyonlar
│
├── 📂 notebooks/ # Jupyter Notebooks
│ └── Turkish-ECommerce-Sentiment-Spam-Analyzer.ipynb
│
├── 📄 .gitignore # Git ignore dosyası
├── 📄 requirements.txt # Python bağımlılıkları
├── 📄 config.py # Konfigürasyon ayarları
├── 📄 LICENSE # MIT Lisansı
└── 📄 README.md # Bu dosya
git clone https://github.com/kullanici/Turkish-ECommerce-Sentiment-Spam-Analyzer.git
cd Turkish-ECommerce-Sentiment-Spam-Analyzerpip install -r requirements.txt
⚠️ ÖNEMLİ: GitHub deposundamodel.pkldosyaları (boyut sınırı nedeniyle) bulunmamaktadır. Uygulamayı çalıştırmadan önce aşağıdaki komutları çalıştırarak modelleri eğitmeniz ZORUNLUDUR.
# Veriyi indir ve ön işle
python src/preprocessing.py
# Modelleri eğit ve kaydet
python src/model.py# Gradio web arayüzünü başlat
python src/app.pyTarayıcınızda http://localhost:7860 adresine gidin.
jupyter notebook notebooks/Turkish-ECommerce-Sentiment-Spam-Analyzer.ipynb# Docker image oluştur
docker build -t sentiment-analyzer .
# Container'ı çalıştır
docker run -p 7860:7860 sentiment-analyzerKullanılan veri setinde gerçek "spam" etiketi bulunmamaktadır.
- Sebep: TRSAv1 veri seti sadece duygu etiketleri içerir
- Çözüm: Kural tabanlı + IsolationForest ile "gümüş etiket" oluşturduk
TF-IDF tabanlı model ironi/alaycılık içeren yorumları anlamakta zorlanır.
- Çözüm: BERT gibi bağlamsal modeller daha iyi performans gösterir
Veri setinde pozitif yorumlar çoğunluktadır.
- Çözüm: Stratified sampling ve class_weight kullanıldı
| Öncelik | Geliştirme | Açıklama |
|---|---|---|
| 🔴 Yüksek | SMOTE | Sınıf dengesizliğini gidermek için synthetic oversampling |
| 🔴 Yüksek | SHAP | Model açıklanabilirliği için SHAP grafikleri |
| 🟡 Orta | BERT Fine-tuning | dbmdz/bert-base-turkish-cased ile daha yüksek performans |
| 🟡 Orta | Gerçek Spam Verisi | Manuel etiketlenmiş spam veri seti toplama |
| 🟢 Düşük | API Servisi | FastAPI ile REST API oluşturma |
| 🟢 Düşük | Dockerizasyon | Production-ready container yapısı |
| Kaynak | Link | Açıklama |
|---|---|---|
| TRSAv1 Dataset | HuggingFace | Türkçe duygu analizi veri seti |
| TurkishStemmer | PyPI | Türkçe kök bulma kütüphanesi |
| Scikit-learn | Docs | Makine öğrenmesi kütüphanesi |
| Gradio | Docs | Web arayüzü kütüphanesi |
| BERT Turkish | HuggingFace | Türkçe BERT modeli |
Bu proje MIT Lisansı altında lisanslanmıştır. Detaylar için LICENSE dosyasına bakın.
Katkılarınızı bekliyoruz! Detaylı bilgi için CONTRIBUTING.md dosyasına bakın.
- Fork yapın
- Feature branch oluşturun (
git checkout -b feature/AmazingFeature) - Commit yapın (
git commit -m 'Add some AmazingFeature') - Push yapın (
git push origin feature/AmazingFeature) - Pull Request açın
| Dokümantasyon | Açıklama |
|---|---|
| 📖 Türkçe Detaylı Dokümantasyon | Tam Türkçe rehber |
| 📖 English Documentation | Full English guide |
| 📚 API Referansı | Tüm fonksiyonlar ve sınıflar |
| 🤝 Katkıda Bulunma | Katkıda bulunma rehberi |
| 📝 Değişiklik Günlüğü | Sürüm geçmişi |