AI Atlas
Başlangıç· ~3 dk okuma#sentiment-analysis#nlp#text-classification

Duygu Analizi

Sentiment Analysis

Bir metnin duygusal tonunu (olumlu, olumsuz, nötr) otomatik belirleyen NLP uygulaması — müşteri yorumları, sosyal medya, geri bildirim analizinin temeli.

DUYGU ANALİZİ"Ürün harika, kargo çok hızlı geldi."Olumlu86%Nötr10%Olumsuz4%Metnin duygusal tonunu olasılık olarak çıkarır.
Tanım

Duygu analizi, bir metnin yazarının tutumunu sayısallaştırır. En basit hâlde üç sınıflı (olumlu / olumsuz / nötr) bir sınıflandırma problemidir; daha gelişmiş hâllerinde duygusal yoğunluğu (-1 ile +1 arası), birden fazla duygu boyutunu (sevinç, kızgınlık, şaşkınlık), hatta cümle içinde hangi konuya olumlu/olumsuz olduğunu (aspect-based sentiment) ayırt eder.

Yaklaşımlar zamanla evrildi:

- Sözlük tabanlı (VADER, AFINN): her kelimenin önceden atanmış bir duygu skoru var; cümle skorları kelimelerin toplamı/ortalaması. Hızlı, açıklanabilir, ama olumsuzluk, ironi, bağlam zayıf. - Klasik ML (Naive Bayes, lojistik regresyon + TF-IDF): etiketli yorum verisinde eğitilen sınıflandırıcı. Basit, iyi baseline. - Derin öğrenme öncesi (LSTM, CNN): bağlam yakalar; veri ister. - Transformer tabanlı (BERT, RoBERTa, multilingual modeller): bugünün standardı. Pre-trained model alıp 1000-10000 etiketli örnekle fine-tune ederek sınıf üstü doğruluğa ulaşırsın.

Türkçe için açık modeller (BERTurk, multilingual BERT) zaten var; etiketli veri toplamak iş kalitesini belirler. Dilin morfolojisi, ironi, argo, bölgesel kullanım — duygu analizinin her zaman zorlu cepheleridir.

Benzetme

Bir restoran sahibi gibi. Akşam servis bittikten sonra masaları geziyor; müşteri yüzlerinden, masada bırakılan yemek miktarından, garsonların kulağına gelen yorumlardan, hatta o akşamın bahşişlerinden "bu akşam nasıl gitti" çıkarır. Hiç kimse ona "iyiydi/kötüydü" diye doğrudan söylemez ama ipuçlarından bütünsel bir duygu durumu okur. Duygu analizi metnin yapraklarındaki bu ipuçlarını sayısallaştırır.

Gerçek dünyadan örnek

Bir e-ticaret sitesi günlük 50.000 müşteri yorumunu işliyor; hangi ürünlerin gerçekten beğenildiğini, hangilerinin sorunlu olduğunu manuel okumak imkansız. Üç model kıyaslanıyor:

| Model | Doğruluk | İşlem süresi (1000 yorum) | Notlar | |-------|----------|---------------------------|--------| | VADER (sözlük) | %72 | <1 sn | İronik yorumlarda yanılıyor | | Lojistik + TF-IDF | %81 | 2 sn | Eğitim verisi yeterli | | Türkçe BERT fine-tune | %91 | 30 sn | Bağlamı ve olumsuzluğu yakalıyor |

Karar: ürün ekibi günlük dashboard için BERT, gerçek zamanlı müşteri hizmetleri tooltip için VADER kullanır — hızı kalite için takas ediyorlar. Yıldız sayısı yorumla çelişen incelemeler (3 yıldız ama metin %95 olumlu) elle inceleme kuyruğuna gider; veri kalitesi araçtan çok daha kıymetli.

Kod örnekleri
Hugging Face · pre-trained Türkçe BERTPython
from transformers import pipeline

# Türkçe için hazır model
clf = pipeline(
    "sentiment-analysis",
    model="savasy/bert-base-turkish-sentiment-cased",
)

yorumlar = [
    "Ürün harika, kargo da çok hızlı geldi.",
    "Berbat, hiç tavsiye etmiyorum.",
    "Fena değil ama beklediğim kadar değildi.",
]

for yorum in yorumlar:
    sonuc = clf(yorum)[0]
    print(f"{sonuc['label']:8s} ({sonuc['score']:.2f})  →  {yorum}")
Lojistik regresyon ile özel veri üzerinde eğitimPython
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
from sklearn.metrics import classification_report

pipe = Pipeline([
    ("tfidf", TfidfVectorizer(
        ngram_range=(1, 2),
        min_df=2,
        max_features=50000,
    )),
    ("clf", LogisticRegression(max_iter=1000, C=1.0)),
])

pipe.fit(texts_train, labels_train)
preds = pipe.predict(texts_test)
print(classification_report(labels_test, preds))

# Hangi kelimeler en olumlu?
feats = pipe.named_steps["tfidf"].get_feature_names_out()
coefs = pipe.named_steps["clf"].coef_[0]
top_pos = coefs.argsort()[-15:][::-1]
print("En olumlu kelimeler:", [feats[i] for i in top_pos])
Ne zaman kullan
  • Müşteri yorumları, sosyal medya, geri bildirim ölçeklendirme
  • Marka takibi, kriz erken uyarı
  • İçerik moderasyonu (toksik vs nötr)
  • A/B test kalitesi ölçümünde — yeni özelliğe duygusal tepki
Ne zaman kullanma
  • Tek seferlik, az sayıda metin — el ile okumak daha hızlı
  • İronik / sarkastik içeriklerde — gelişmiş model bile zorlanır
  • Çok teknik dil (hukuk, tıp) — özel domain modeli gerekir
Sık yapılan hatalar

Olumsuzluk işaretini kaybetmek

'kötü değil' aslında olumlu; 'iyi değil' olumsuz. Sözlük tabanlı yöntemler bunu çoğu zaman ıskalar. Modern transformer modelleri çok daha iyi yakalar ama küçük etiketli veriyle fine-tune ederken yine kontrol et.

Etiket kalitesi düşük

İronik yorum 'olumlu' olarak etiketlenmişse model ironiyi olumlu sanır. Etiketleyenler arası anlaşma (inter-annotator agreement) ölç; düşükse yönerge yenile.

Tek sayıda özetlemek

Ürünün ortalama duygu skoru %78 olumlu olabilir ama belirli bir özellik (örn. kargo) %30 olumlu, %50 olumsuz. Aspect-based analiz ürün ekibine çok daha değerli.