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 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.
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.
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.
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}")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])- 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
- 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
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.