BERT ile Duygu Analizi: Transformatörün Kalbi, Metnin Ruhu
Bidirectional Encoder’dan BERTurk’e, MLM’den Fine-tuning’e: Duygu analizinin mühendislik anatomisi ve gerçek dünya uygulamaları.
BERT ile Duygu Analizi: Transformatörün Kalbi, Metnin Ruhu
Bidirectional Encoder’dan BERTurk’e, MLM’den Fine-tuning’e: Duygu analizinin mühendislik anatomisi ve gerçek dünya uygulamaları.

1. Giriş: Makine Metni Nasıl “Hisseder”?
Bir müşteri yorumu düşünün: “Ürün fena değil ama kargo rezaletti.”
Bu cümleyi bir insan okuduğunda ikisini birden anlar: Ürüne nötr yaklaşım, kargoya öfke. Peki bir makine bunu nasıl anlayabilir? Kelime kelime saydığınızda “fena” olumsuz, “değil” olumsuzluğu tersine çeviriyor. “Rezalet” kesinlikle olumsuz ama kargo için. Bu iki farklı duygu aynı cümlede bir arada.
İşte bu soruyu çözmek için onlarca yıl boyunca kural tabanlı sistemler, kelime frekans sayaçları ve makine öğrenmesi modelleri denendi. Hepsinin ortak sorunu şuydu: Bağlamı anlayamıyorlardı.
1.1. Duygu Analizinin Kısa Tarihi: Kural Tabanlıdan Transformer’a
- 1990'lar — Kural Tabanlı Sistemler: “İyi”, “güzel”, “mükemmel” = pozitif. “Kötü”, “berbat”, “rezalet” = negatif. Basit ama sığ. Bağlamı, ironiyi ve karmaşık cümleleri anlayamıyordu.
- 2000'ler — İstatistiksel Modeller: Naive Bayes, SVM ve TF-IDF ile kelime frekansları analiz edildi. Performans arttı ama hâlâ “banka kıyısı” ile “banka hesabı”nı ayırt edemiyordu.
- 2013 — Word2Vec: Kelimeler vektörlere dönüştü. “Kral — Erkek + Kadın = Kraliçe” hesaplanabilir hale geldi. Anlam yakalanmaya başlandı ama bağlam hâlâ statikti.
- 2018 — BERT: Google’ın yayınladığı bu model, tüm dengeleri değiştirdi. Kelimeler artık içinde bulundukları bağlama göre farklı vektörler alıyordu. “Banka” kelimesi finansal bağlamda farklı, doğal bağlamda farklı temsil ediliyordu.
1.2. Neden BERT? “Attention Is All You Need” Mirasının Meyveleri
2017'de Vaswani ve ekibinin yayınladığı “Attention Is All You Need” makalesi, derin öğrenme tarihinin en etkili çalışmalarından biri oldu. Bu makale Transformer mimarisini tanıttı.
BERT (Bidirectional Encoder Representations from Transformers), bu mimarinin yalnızca encoder kısmını alıp, onu iki yönlü bağlam anlayışıyla donattı. 2018'de Google tarafından yayınlanan BERT, yayınlandığı günün üzerinden çok geçmeden 11 farklı NLP görevinde o güne kadarki en iyi sonuçları kırdı.
1.3. Bu Yazıda Neler Öğreneceksiniz?
- BERT neden “iki yönlü” çalışır ve bu ne anlama gelir?
- Maskeleme yöntemiyle nasıl öğrenir?
- Duygu analizi için nasıl uyarlanır?
- RoBERTa, DistilBERT, FinBERT… Hangi BERT türevi ne işe yarar?
- Türkçe metinler için BERTurk nasıl kullanılır?
- HuggingFace ile 5 satırda duygu analizi nasıl yapılır?
2. BERT’in DNA’sı: Mimari Anatomisi
BERT’i anlamak için önce şu soruyu yanıtlamak gerekir: GPT de Transformer kullanıyor, BERT de. İkisi arasındaki fark ne?
Cevap tek kelimede: Yön.
2.1. Encoder-Only Mimari: GPT’den Farkı Nedir?
Orijinal Transformer mimarisi iki bloktan oluşur: Encoder (girdiyi anlar) ve Decoder (çıktı üretir).
- GPT ailesi sadece Decoder kullanır. Soldan sağa, tek yönlü okur. “Bu kelimeden sonra ne gelir?” sorusunu yanıtlar. Bu yüzden metin üretimde güçlüdür.
- BERT sadece Encoder kullanır. Cümlenin tamamına aynı anda bakar, hem soldan hem sağdan bağlamı değerlendirir. “Bu kelimenin etrafındaki tüm kelimeler ne anlam taşıyor?” sorusunu yanıtlar. Bu yüzden sınıflandırma ve anlam çıkarma görevlerinde güçlüdür.
Bunu şöyle düşünebilirsiniz: GPT bir cümleyi okurken elini metni kapatarak soldan sağa ilerler. BERT ise sayfanın tamamını aynı anda görür.
2.2. Üç Katmanlı Embedding Sistemi
BERT’e bir kelime vermeden önce, o kelimeyi üç farklı temsil katmanından geçirirsiniz. Bu üç katman toplanarak modelin asıl girdisini oluşturur.
Token Embeddings: Kelimenin Kimliği
Her kelime (ya da alt kelime parçası) sabit boyutlu bir vektöre dönüştürülür. BERT, WordPiece adlı bir tokenizer kullanır. “Oynamıyordu” kelimesini “Oyna”, “##mıyor”, “##du” gibi parçalara böler. Bu sayede kelime dağarcığı dışındaki kelimeleri de temsil edebilir.
Segment Embeddings: Cümle Ayrımı
Özellikle iki cümle içeren görevlerde hangi tokenın hangi cümleye ait olduğunu bilmek gerekir. A cümlesindeki tokenlara 0, B cümlesindeki tokenlara 1 atanır. Model bu bilgiyi cümleler arası ilişkiyi öğrenmek için kullanır.
Positional Embeddings: Sıranın Önemi
BERT tüm kelimeleri aynı anda işler, sıralı okumaz. Ama kelime sırası anlam için kritiktir. “Ali Ayşe’yi seviyor” ile “Ayşe Ali’yi seviyor” farklı anlamlara gelir. Positional Embedding, her token’a konumunu temsil eden bir vektör ekler.
Bu üç temsil toplanarak modele verilir:
Girdi = Token Embedding + Segment Embedding + Positional Embedding
2.3. Multi-Head Self-Attention: Her Kelime Diğerini Dinliyor
BERT’in gücünün özü burada yatar.
Self-Attention, bir cümledeki her kelimenin diğer tüm kelimelerle ilişkisini hesaplar. “Banka” kelimesinin “nehir” ile mi yoksa “para” ile mi birlikte geçtiğine bakarak anlamını belirler.
Multi-Head, bu dikkat mekanizmasının aynı anda birden fazla “perspektiften” çalışması demektir. Bir kafa (head) sözdizimsel ilişkilere bakarken, başka bir kafa anlamsal ilişkilere odaklanabilir. BERT-Base’de 12 dikkat kafası vardır.
Her dikkat kafası üç matris üretir:
- Query (Q): “Ben ne arıyorum?”
- Key (K): “Ben neyi temsil ediyorum?”
- Value (V): “Benim gerçek içeriğim nedir?”
Attention skoru şu formülle hesaplanır:
Attention(Q, K, V) = softmax(QKᵀ / √d_k) × V
Burada √d_k, büyük boyutlarda gradient'lerin küçülmesini önlemek için uygulanan ölçekleme terimidir.
2.4. BERT-Base vs BERT-Large: 12 Katman mı, 24 Katman mı?
Google, BERT’i iki farklı boyutta yayınladı:
BERT-Base:
- 12 Transformer katmanı
- 12 dikkat kafası
- 768 boyutlu gizli katman
- 110 milyon parametre
- Çoğu üretim uygulaması için yeterli
BERT-Large:
- 24 Transformer katmanı
- 16 dikkat kafası
- 1024 boyutlu gizli katman
- 340 milyon parametre
- Daha yüksek doğruluk, daha yüksek hesaplama maliyeti
- Prototip ve üretim → BERT-Base
- Maksimum doğruluk, kaynak kısıtı yok → BERT-Large
3. BERT Nasıl Öğrenir? Pre-training Süreci
BERT’in gücü sadece mimarisinden değil, nasıl eğitildiğinden gelir. Model, dışarıdan etiket verilmeden kendi kendine öğrenir. Buna Self-Supervised Learning diyoruz. 7. makalemizde bu paradigmayı genel olarak ele almıştık; şimdi BERT özelinde derinleşiyoruz.
Google, BERT’i eğitmek için iki devasa kaynak kullandı:
- Wikipedia (İngilizce): 2.5 milyar kelime
- BookCorpus: 800 milyon kelime
Bu 3.3 milyar kelimelik corpus üzerinde iki farklı görev tanımlandı.
3.1. Masked Language Modeling (MLM): Boşluk Doldurmaca Oyunu
İlk görev basit ama son derece güçlü bir fikre dayanıyor: Cümledeki bazı kelimeleri gizle, modelden tahmin etmesini iste.
Nasıl çalışır?
Her eğitim örneğindeki tokenlerin rastgele %15'i seçilir. Seçilen bu tokenler üç farklı şekilde işlenir:
- %80'i gerçekten
[MASK]tokeniyle değiştirilir - %10'u rastgele başka bir kelimeyle değiştirilir
- %10'u olduğu gibi bırakılır
Bu karışıklık kasıtlıdır. Model her zaman hangi tokenin değiştirildiğini bilemez, bu yüzden tüm tokenlere dikkat etmek zorunda kalır.
Örnek:
Orijinal : "Ankara Türkiye'nin başkentidir."
Maskelenmiş: "Ankara Türkiye'nin [MASK]'dir."
Model tahmini: "başkent" → Doğru!
MLM’nin kritik farkı şudur: Model kelimeyi tahmin etmek için hem sol hem sağ bağlamı kullanır. Bu, gerçek anlamda çift yönlü (bidirectional) öğrenmeyi sağlar. GPT gibi modeller soldan sağa tahmin yaparken BERT her iki yönde bağlamı aynı anda değerlendirir.
3.2. Next Sentence Prediction (NSP): Cümle İlişkisini Kavramak
İkinci görev, cümleler arası ilişkileri anlamayı hedefler. Model iki cümle alır ve şunu sorar: “Bu iki cümle gerçekten birbirini takip ediyor mu?”
Eğitim örnekleri şöyle oluşturulur:
- %50 pozitif örnek: Corpus’tan gerçekten ard arda gelen iki cümle. Etiket:
IsNext - %50 negatif örnek: Corpus’un farklı yerlerinden rastgele seçilmiş iki cümle. Etiket:
NotNext
Örnek:
Cümle A: "Kedi evin köşesine saklandı."
Cümle B: "Birkaç dakika sonra fare göründü."
Etiket: IsNext ✅
Cümle A: "Kedi evin köşesine saklandı."
Cümle B: "İstanbul'un nüfusu 15 milyonu geçti."
Etiket: NotNext ❌
- Not: Sonraki nesil modeller olan RoBERTa ve ALBERT, NSP görevinin performansa çok katkı sağlamadığını keşfetti ve kaldırdı. Ama BERT’in orijinal mimarisinde hâlâ yer alır.
3.3. Pre-training → Fine-tuning: İki Aşamalı Öğrenme Felsefesi
BERT’in öğrenme felsefesini şöyle özetleyebiliriz:
Aşama 1: Pre-training (Genel Dil Anlayışı)
Model, devasa corpus üzerinde MLM ve NSP görevleriyle genel dil bilgisi edinir. Bu aşama muazzam hesaplama gücü gerektirir ve Google tarafından gerçekleştirildi. Sonuç: Dili derin bağlamsal düzeyde anlayan bir model.
Aşama 2: Fine-tuning (Göreve Özelleşme)
Bu hazır model, küçük ama etiketli bir veri setiyle belirli bir göreve uyarlanır. Duygu analizi, soru cevaplama, varlık tanıma gibi onlarca farklı görev için aynı BERT modeli temel alınır.
Bu yaklaşımın gücü şuradan gelir: Siz sıfırdan bir model eğitmek zorunda değilsiniz. Google’ın yıllar içinde oluşturduğu dil anlayışını, kendi görevinize uyarlamak için sadece birkaç saat ve küçük bir veri seti yeterli.
“BERT, dili okula giderek öğrenen ama her işte çalışmaya hazır bir mezun gibidir. Fine-tuning ise onu belirli bir departmana yerleştirmektir.”
4. Fine-tuning: BERT’i Duygu Analizine Uyarlamak
Pre-training ile genel dil anlayışını kazanan BERT, artık duygu analizi görevine hazır. Ama bu uyarlamayı doğru yapmak, sonuçlar arasında büyük farklar yaratır. Bu bölümde hem teknik detayları hem de üretimde karşılaşılan gerçek sorunları ele alacağız.
4.1. [CLS] Token’ının Sihri: Cümlenin Özeti
BERT’e bir metin gönderdiğinizde, girdi dizisinin en başına otomatik olarak özel bir token eklenir: [CLS] (Classification).
Bu token başlangıçta anlamsızdır. Ama fine-tuning sürecinde BERT, tüm cümlenin anlamsal özetini bu token’ın vektörüne sıkıştırmayı öğrenir. Eğitim sonunda [CLS] token’ının son katmandaki gizli durumu (hidden state), cümlenin tamamını temsil eden 768 boyutlu bir vektör haline gelir.
Duygu analizi için bu vektör alınır ve üzerine bir sınıflandırma katmanı eklenir.
- Senior Notu: Araştırmalar, bazı durumlarda [CLS] token yerine tüm token çıktılarının ortalamasının alındığı Mean Pooling yönteminin daha güçlü cümle temsilleri ürettiğini gösteriyor. Eğer modeliniz yetersiz kalıyorsa bu alternatifi denemeye değer.
4.2. Classification Head Eklemek
[CLS] vektörünün üzerine eklenen yapı genellikle çok basittir:
# 768 boyutlu CLS vektörü → Dropout → Linear → Softmax
output = self.dropout(cls_output) # Overfitting önleme
logits = self.linear(output) # 768 → num_labels
probabilities = self.softmax(logits) # Olasılık dağılımı
Örneğin 3 sınıflı (pozitif / negatif / nötr) bir görev için:
- Girdi: 768 boyutlu [CLS] vektörü
- Çıktı: 3 boyutlu olasılık vektörü
- En yüksek olasılıklı sınıf → Tahmin
4.3. Fine-tuning Süreci: Adım Adım
Fine-tuning sırasında hem eklenen sınıflandırma katmanı hem de BERT’in tüm ağırlıkları güncellenir. Ama dikkatli olunmazsa model, önceden öğrendiği dil bilgisini unutabilir.
Adım 1: Veri Hazırlama
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
encoding = tokenizer(
"Bu ürün gerçekten harikaydı!",
max_length=128,
padding="max_length",
truncation=True,
return_tensors="pt"
)
# input_ids, attention_mask, token_type_ids
Adım 2: Model Yükleme
from transformers import AutoModelForSequenceClassification
model = AutoModelForSequenceClassification.from_pretrained(
"bert-base-uncased",
num_labels=3 # pozitif, negatif, nötr
)Adım 3: Eğitim
from transformers import TrainingArguments, Trainer
training_args = TrainingArguments(
output_dir="./results",
num_train_epochs=3,
per_device_train_batch_size=16,
learning_rate=2e-5,
warmup_steps=500,
weight_decay=0.01,
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=train_dataset,
eval_dataset=eval_dataset,
)
trainer.train()
4.4. Hyperparameter Seçimi
Fine-tuning’de en kritik parametre learning rate’dir. Çok büyük seçilirse model, önceden öğrendiği bilgiyi anında siler. Çok küçük seçilirse yeni göreve uyum sağlayamaz.
BERT fine-tuning için önerilen değerler:
- Learning Rate: 2e-5 ile 5e-5 arası (standart)
- Epoch: 2–4 (fazlası overfitting’e yol açar)
- Batch Size: 16 veya 32
- Warmup Steps: Toplam adımların %10'u kadar
Warmup neden önemli?
Eğitimin başında model ağırlıkları henüz adapte olmamıştır. Warmup fazında learning rate sıfırdan başlayıp hedef değere yavaşça yükselir. Bu, erken aşamada büyük gradient güncellemelerinin BERT’in önceden öğrendiği bilgiyi bozmasını önler.
4.5. Senior Notu: Catastrophic Forgetting ve Nasıl Önlenir?
Catastrophic Forgetting (Yıkıcı Unutma), modelin yeni bir görev öğrenirken önceki genel dil bilgisini silmesi sorunudur. BERT fine-tuning’de en sık karşılaşılan tuzaklardan biridir.
3 etkili çözüm yöntemi:
- Layer Freezing (Katman Dondurma): BERT’in alt katmanları dondurulur, sadece üst katmanlar ve sınıflandırma başlığı güncellenir. Alt katmanlar genel sözdizimsel bilgiyi, üst katmanlar ise göreve özgü semantik bilgiyi taşır.
- Differential Learning Rate (Katmana Özel Öğrenme Hızı): Alt katmanlara çok küçük, üst katmanlara biraz daha büyük, sınıflandırma başlığına en büyük learning rate atanır. Bu, temel dil bilgisini korurken göreve özgü uyumu maksimize eder.
- LoRA (Low-Rank Adaptation): 2025 itibarıyla en yaygın PEFT (Parameter-Efficient Fine-Tuning) yöntemi. BERT’in orijinal ağırlıkları tamamen dondurulur. Bunun yerine her katmana küçük, düşük ranklı matrisler eklenir ve sadece bunlar eğitilir. Sonuç: Hesaplama maliyeti dramatik şekilde düşer, catastrophic forgetting riski neredeyse ortadan kalkar.
from peft import get_peft_model, LoraConfig, TaskType
lora_config = LoraConfig(
task_type=TaskType.SEQ_CLS,
r=8, # Rank
lora_alpha=32,
lora_dropout=0.1,
)
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
# Sadece ~1-2% parametre eğitilir!
“Fine-tuning, bir uzmanı yeniden eğitmek gibidir. Çok sert eğitirseniz eski bilgisini unutur. Çok yumuşak eğitirseniz yeni beceriler kazanamaz. Denge her şeydir.”
5. BERT Ailesi: Hangisini Ne Zaman Kullanmalısınız?
BERT’in yayınlanmasının ardından araştırmacılar onu her yönden sorguladı: Daha az parayla daha iyi eğitilebilir mi? Daha küçük yapılabilir mi? Belirli bir alana odaklanabilir mi? Bu sorular, bugün “BERT ailesi” dediğimiz zengin bir model ekosistemi doğurdu.
5.1. RoBERTa: Daha Güçlü, Daha Uzun Eğitilmiş BERT
Facebook AI (Meta) tarafından 2019'da yayınlanan RoBERTa (Robustly Optimized BERT Pretraining Approach), BERT’in aynı mimarisini alıp eğitim sürecini yeniden tasarladı.
BERT’ten farkları:
- NSP görevi kaldırıldı: Araştırmacılar NSP’nin performansa anlamlı katkı sağlamadığını kanıtladı
- Dinamik maskeleme: Her epoch’ta farklı tokenler maskeleniyor, model her seferinde farklı bir zorlukla karşılaşıyor
- 10x daha fazla veri: 160GB metin (BERT’in 16GB’ına karşı)
- Daha uzun eğitim: Daha büyük batch size ve daha fazla iterasyon
- ✅ İnformal metin, sosyal medya ve nüanslı duygu analizi için BERT’ten üstün
- ✅ Karmaşık sınıflandırma görevlerinde çoğunlukla en iyi encoder seçimi
- ❌ BERT’ten belirgin şekilde daha ağır hesaplama maliyeti
5.2. DistilBERT: Üretim İçin %60 Daha Hızlı
Hugging Face tarafından geliştirilen DistilBERT, BERT’in bilgisini çok daha küçük bir modele aktarmak için Knowledge Distillation tekniğini kullandı.
Büyük model (teacher: BERT) küçük modeli (student: DistilBERT) eğitir. Küçük model, büyük modelin çıktı dağılımlarını taklit etmeyi öğrenir.
Sonuçlar:
- BERT’in parametrelerinin %40'ı azaltıldı (110M → 66M)
- %60 daha hızlı inference
- BERT performansının %97'sini koruyor
- ✅ Gerçek zamanlı uygulamalar, mobil ve edge cihazlar için ideal
- ✅ Düşük gecikme (latency) gerektiren üretim ortamlarında standart tercih
- ❌ Çok nüanslı veya alan-spesifik görevlerde BERT’in gerisinde kalabilir
5.3. ALBERT: Parametre Paylaşımıyla Hafifleyen Dev
Google’ın ALBERT (A Lite BERT)’i iki önemli teknikle parametreleri dramatik şekilde azalttı:
- Cross-layer parameter sharing: Tüm katmanlar aynı ağırlıkları paylaşır
- Factorized embedding parametrization: Embedding boyutu ile gizli katman boyutu birbirinden ayrıştırıldı
ALBERT-large, BERT-large’ın parametrelerinin yalnızca %18'ini kullanarak benzer performans elde eder.
- ✅ Hafıza kısıtlı ortamlarda büyük model kapasitesine ihtiyaç varsa
- ❌ Parametre paylaşımı nedeniyle eğitim süresi DistilBERT’ten uzun olabilir
5.4. FinBERT: Finans Dünyasının BERT’i
FinBERT, finansal haber makaleleri, kazanç raporları ve analist yorumları üzerinde ön eğitim yapılmış bir BERT türevidir.
Genel BERT modelleri “pozitif büyüme” gibi finansal terimler yerine günlük dil kalıplarını öğrenir. FinBERT ise “bull market”, “bearish sentiment”, “earnings beat” gibi alan-spesifik ifadeleri doğru bağlamda kavrar.
- ✅ Finansal metin sınıflandırma ve haber duygu analizi için açık ara en iyi seçim
- ✅ HuggingFace’te hazır fine-tuned versiyonları mevcut:
ProsusAI/finbert
5.5. LegalBERT: Hukuk Metinleri İçin Özelleşmiş
Mahkeme kararları, sözleşmeler ve yasal belgeler kendine özgü bir dil kullanır. LegalBERT, bu metinler üzerinde eğitilmiş ve hukuki duygu analizi, madde sınıflandırma ve risk tespiti gibi görevlerde standart BERT’i geride bırakır.
5.6. BERTurk: Türkçe NLP’nin Güçlü Silahı
Türkçe, dünya dillerinin içinde özellikle zorlu bir yapıya sahiptir: Çekimli (agglutinative) morfoloji. “Gidememek” kelimesi “git + eme + mek” parçalarından oluşur ve tek başına bir cümle kadar anlam taşıyabilir. Bu durum, kelime dağarcığı açısından muazzam bir çeşitlilik yaratır.
BERTurk, Boğaziçi Üniversitesi’nin öncülüğünde geliştirilen ve Türkçe corpus üzerinde sıfırdan eğitilen bir BERT modelidir.
Neden çok dilli modellerden (mBERT) üstün?
Çok dilli modeller 104 dili aynı anda öğrenir. Bu durum Türkçe’ye ayrılan kapasiteyi sınırlar. BERTurk ise tüm parametrelerini sadece Türkçe’ye ayırır. Bu fark performansta belirgin şekilde görünür.
Güncel Benchmark Sonuçları (2024–2025):
- TRSAv1 veri setinde (150.000 Türkçe e-ticaret yorumu) fine-tuned BERTurk: F1 skoru %83–86
- BounTi (Türkçe tweet dataseti) üzerinde de benzer üstünlük gözlemleniyor
- HuggingFace’te erişim:
dbmdz/bert-base-turkish-cased
5.7. Senior Notu: Hangi Görev İçin Hangi Model?
- Genel Türkçe duygu analizi → BERTurk
- Genel İngilizce duygu analizi, yüksek doğruluk → RoBERTa
- Gerçek zamanlı uygulama, düşük gecikme → DistilBERT
- Finansal metin analizi → FinBERT
- Hafıza kısıtlı büyük model → ALBERT
- Hukuki belge analizi → LegalBERT
- Başlangıç noktası, genel görev → BERT-Base
“BERT bir temel değil, bir felsefedir. ‘Bağlamı her iki yönden anla’ ilkesi, ailenin her üyesinde farklı bir formda hayat bulmaktadır.”
6. Duygu Analizinin Gerçek Dünya Anatomisi
Duygu analizi sanıldığından çok daha karmaşık bir problemdir. “Pozitif mi, negatif mi?” sorusu başlangıç noktasıdır; gerçek dünya uygulamaları çok daha derin sorular sorar.
6.1. Basit Sınıflandırma: Pozitif / Negatif / Nötr
En temel formudur. Bir metin parçası üç sınıftan birine atanır.
- Pozitif: “Bu ürün beklentilerimin çok üzerindeydi.”
- Negatif: “Kargo geç geldi ve ürün hasarlıydı.”
- Nötr: “Ürün standart bir kutuyla geldi.”
Bu seviye; müşteri memnuniyeti takibi, marka itibar ölçümü ve toplu geri bildirim analizi için yeterlidir. Çoğu kurumsal sentiment analiz sistemi buradan başlar.
Sınırlılıkları:
- İroniyi ve sarkastik ifadeleri genellikle yanlış sınıflandırır. “Evet, tabii ki çok ‘hızlı’ geldi, sadece 3 hafta sürdü.” cümlesi pozitif kelimelere rağmen güçlü bir şikayettir.
- Karma duyguları tek bir etikete sıkıştırır.
6.2. Aspect-Based Sentiment Analysis (ABSA): “Fiyat Kötü ama Kargo Hızlı”
Bu seviye, duygu analizinin en güçlü ve en kullanışlı formudur. Tek bir metnin içindeki farklı konular (aspect) için ayrı ayrı duygu çıkarır.
Örnek:
Metin: "Telefonun kamerası muhteşem ama batarya ömrü felaket.
Fiyatı da biraz yüksek ama tasarım çok şık."
ABSA Çıktısı:
→ Kamera : POZİTİF ✅
→ Batarya : NEGATİF ❌
→ Fiyat : NEGATİF ❌
→ Tasarım : POZİTİF ✅
Bu analiz, bir e-ticaret şirketine hangi ürün özelliğini geliştirmesi gerektiğini söyler. “Genel memnuniyet skoru 3.2/5” bilgisinden çok daha değerlidir.
BERT ile ABSA nasıl yapılır?
Görev şu formatta tanımlanır: Hem aspect hem metin modele birlikte verilir.
# Aspect + Metin birlikte encode edilir
input_text = f"Aspect: kamera | Metin: {yorum_metni}"
Model bu formattan, “kamera” aspectine yönelik duyguyu öğrenir. Uzun metinler için PyABSA kütüphanesi bu pipeline’ı otomatikleştirir.
6.3. Emotion AI: Sarcasm, Frustration ve İnce Duygular
Üçüncü ve en zorlu seviye, insan duygularını yedi temel kategoride tespit etmeyi hedefler: öfke, korku, sevinç, üzüntü, şaşkınlık, iğrenme ve beklenti.
Sarcasm (İroni) Tespiti bu alandaki en kritik açık problemdir. “Harika, bir saattir bekliyorum” cümlesi kelime düzeyinde pozitif görünür ama anlam tam tersidir.
BERT bu konuda standart modellerden belirgin şekilde iyi performans gösterir çünkü ironi bağlama derinden bağlıdır. “Harika” kelimesi farklı bağlamlarda gerçekten pozitif ya da kesinlikle negatif anlam taşır. BERT’in çift yönlü dikkat mekanizması bu bağlamsal farkı yakalayabilir.
Frustration (Hayal Kırıklığı) Tespiti ise özellikle müşteri hizmetleri sistemleri için kritiktir. Hayal kırıklığı yaşayan bir müşteri tespiti, konuşmayı otomatik olarak insan temsilciye yönlendirmeyi tetikleyebilir.
6.4. Real-Time Streaming: Sosyal Medyada Anlık Analiz
Özellikle kriz yönetimi ve marka takibi açısından duygu analizinin değeri, anlık ve sürekli veri akışı üzerinde çalışabilmesinden gelir.
Bir ürün lansmanı, siyasi bir açıklama veya beklenmedik bir olay anında sosyal medyada milyonlarca mesaj üretir. Bu mesajların duygu dağılımının dakika bazında izlenmesi şunları sağlar:
- Negatif dalganın yükselmesi öncesinde erken uyarı
- Kriz iletişiminin zamanlanması
- Kampanya etkisinin anlık ölçümü
Bu sistemlerde DistilBERT tercih edilir çünkü milisaniye gecikmeleriyle yüksek hacimli akışları işleyebilir. Tam BERT veya RoBERTa bu hızda çalışmak için çok ağırdır.
“Basit duygu analizi modele ‘bu metin iyi mi kötü mü?’ diye sorar. Gerçek mühendislik ise ‘ne hakkında, ne kadar, neden ve şimdi ne yapmalıyız?’ diye sorar.”
7. Sektörel Uygulamalar: BERT Nerede Çalışıyor?
Duygu analizi artık akademik bir egzersiz değil; milyarlarca dolarlık kararları şekillendiren operasyonel bir araç. Farklı sektörlerin bu teknolojiyi nasıl kullandığına bakalım.
7.1. E-Ticaret: Ürün Yorumlarından İçgörü Üretmek
E-ticaret, duygu analizinin en yoğun kullanıldığı alandır. Büyük platformlarda günde milyonlarca yorum yazılır ve bunların manuel okunması imkansızdır.
Kullanım Senaryoları:
- Ürün Kalite Takibi: Belirli bir ürünün yorumlarındaki negatif trend erken tespit edilip tedarik zinciri veya ürün tasarımı ekibine otomatik uyarı gönderilir.
- Kategori Bazlı ABSA: “Bu kulaklık ses kalitesi açısından 10/10 ama kulak konforu berbat” yorumu, ürün geliştirme ekibine somut bir aksiyon noktası verir.
- Sahte Yorum Tespiti: Gerçek bir müşteri deneyimi ile üretilmiş veya motive edilmiş sahte yorumlar arasındaki dil kalıpları farklıdır. BERT bu farkı istatistiksel olarak öğrenebilir.
Kullanılan Model: Genel görevler için BERT-Base veya RoBERTa; Türkçe platformlar (Trendyol, Hepsiburada) için BERTurk.
7.2. Finans: Haber Başlıklarından Piyasa Sinyali Okumak
Finansal piyasalar haberlere son derece duyarlıdır. “Merkez Bankası faizi artırdı” haberinin piyasa üzerindeki etkisi, haberin içeriğinden çok yatırımcıların bu haberi nasıl yorumladığına bağlıdır.
Kullanım Senaryoları:
- Haber Duygu Skoru: Finansal haber başlıkları ve raporlar FinBERT ile analiz edilir. Üretilen duygu skoru, algoritmik trading sistemlerine girdi olarak verilir.
- Kazanç Çağrısı Analizi (Earnings Call Analysis): Bir şirketin CEO’su üç aylık performansı anlatırken kullandığı dilin tonu, resmi rakamların yanına ek bir sinyal ekler. “Zorlu bir çeyrek” ile “rekor kıran bir çeyrek” ifadesinin tonu farklı sonuçlar doğurur.
- Risk ve Uyum İzleme: Düzenleyici belgeler ve müşteri şikayetleri FinBERT ile sürekli taranarak potansiyel uyum ihlalleri önceden tespit edilir.
Kullanılan Model: FinBERT (ProsusAI/finbert) → Finansal metinler üzerinde özelleşmiş fine-tuning ile standart BERT'ten belirgin şekilde üstün.
7.3. Sağlık: Hasta Geri Bildirimlerini Anlamak
Sağlık sektörü, duygu analizinin en hızlı büyüyen uygulama alanlarından biridir. Hasta deneyimi, tedavi kalitesi kadar önemli bir sağlık göstergesi haline geliyor.
Kullanım Senaryoları:
- Hasta Memnuniyeti Analizi: Hastane değerlendirme formlarındaki serbest metin yanıtları BERT ile analiz edilir. “Doktor çok ilgiliydi ama bekleme süresi çok uzundu” yorumu ABSA ile iki ayrı aksiyona dönüşür.
- Klinik Not Analizi: Hasta notlarındaki duygu tonu, hasta iyileşme sürecinin tamamlayıcı bir göstergesi olarak araştırılıyor.
- Kriz Tespiti: Sosyal medyada duygusal sıkıntı sinyalleri veren paylaşımları tespit ederek doğru kişileri uygun kaynaklara yönlendirme. RoBERTa bu görevde tercih ediliyor çünkü nüanslı dili yakalamak kritik.
Önemli Not: Sağlık verisi son derece hassastır. Bu uygulamalarda açık kaynak modellerin yerel (on-premise) çalıştırılması, KVKK ve GDPR uyumu açısından zorunludur. Bu da BERT ailesini proprietary API’lardan daha uygun kılar.
7.4. Sosyal Medya: Marka Kriz Yönetimi
Sosyal medyadaki bir kriz saatler içinde büyüyebilir. Şirketin tepki hızı, zararın boyutunu doğrudan belirler.
Gerçek Dünya Senaryosu:
Bir havayolu şirketi düşünün. Sabah 6'da birkaç geciken uçuşla başlayan süreç, saat 10'da Twitter’da viral olan bir şikayet videosuna dönüşebilir. Bu aşamaların her birinde duygu analizi sistemi şunları yapar:
- Şikayet hacminin artışını dakika bazında izler
- Negatif tweet’lerin yayılma hızını ölçer
- “Rezalet”, “mahkeme”, “şikayet” gibi yüksek riskli kelimelerin öbekleşmesini tespit eder
- Kriz eşiğini aştığında iletişim ekibini otomatik uyarır
Kullanılan Model: Hız kritik olduğundan DistilBERT veya DistilRoBERTa. Türkçe platformlar için BERTurk’ün distile versiyonları araştırılıyor.
7.5. Türkiye Perspektifi: BERTurk ile Türkçe Duygu Analizi
Türkçe duygu analizi, dilin yapısal özellikleri nedeniyle özel dikkat gerektiriyor.
Türkçe’nin Zorlukları:
- Eklemeli Yapı (Agglutination): “Gidememişlerdenmiş” gibi tek kelimeler başlı başına cümleler oluşturabilir. Kelime dağarcığı bu yüzden muazzam büyür.
- Söz Dizimi Esnekliği: “Ali Ayşe’yi seviyor” ve “Ayşe’yi Ali seviyor” aynı anlama gelir ama kelime sırası değişik. Bu, pozisyonel bilginin yorumlanmasını zorlaştırır.
- İnformal Yazım: Sosyal medyada imla kuralları göz ardı edilir, kelimeler kısaltılır, argo kullanılır.
Güncel Benchmark:
- TRSAv1 Veri Seti: 150.000 Türkçe e-ticaret yorumu (50K pozitif, 50K negatif, 50K nötr). Fine-tuned BERTurk bu veri setinde F1 %83–86 başarı oranına ulaşıyor.
- BounTi Veri Seti: Üniversiteler hakkında Türkçe tweetlerden oluşan benchmark. Hedefli duygu analizi çalışmalarında standart referans noktası.
Başlangıç için:
from transformers import pipeline
# BERTurk ile hazır sentiment pipeline
classifier = pipeline(
"text-classification",
model="dbmdz/bert-base-turkish-cased"
)
result = classifier("Bu ürün gerçekten harika, kesinlikle tavsiye ederim!")
print(result)
“Duygu analizi bir teknoloji değil, bir stratejidir. Doğru modeli doğru sektörde doğru veriyle kullananlar rekabet avantajı elde eder; diğerleri sadece haber okur.”
8. HuggingFace ile Uygulamalı BERT
Teoriden pratiğe geçme zamanı. HuggingFace transformers kütüphanesi, BERT ve türevlerini birkaç satır kodla kullanmanızı sağlar. Bu bölümde soyutlama seviyesini yüksekten düşüğe doğru inceleyeceğiz.
8.1. AutoTokenizer: Metni Token’a Dönüştürmek
Her şey tokenizasyonla başlar. Ham metin BERT’e doğrudan verilemez; önce sayısal temsile dönüştürülmesi gerekir.
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
metin = "Bu ürün beklentilerimin çok üzerindeydi!"
encoding = tokenizer(
metin,
max_length=128, # Maksimum token sayısı
padding="max_length", # Kısa metinleri [PAD] ile doldur
truncation=True, # Uzun metinleri kırp
return_tensors="pt" # PyTorch tensörü döndür
)
print(encoding["input_ids"])
# [CLS] Bu ürün beklenti ##lerin ##in çok üzerindeydi ! [SEP] [PAD]...
print(encoding["attention_mask"])
# 1 1 1 1 1 1 1 1 1 1 0 0 0...
# 1 = gerçek token, 0 = padding
attention_mask kritik bir bileşendir. Model hangi tokenlerin gerçek, hangilerinin padding olduğunu bu maske sayesinde ayırt eder ve padding tokenlerine dikkat harcamaz.
8.2. AutoModelForSequenceClassification: Sınıflandırma Başlığı
Sınıflandırma görevi için özel olarak yapılandırılmış model:
from transformers import AutoModelForSequenceClassification
import torch
model = AutoModelForSequenceClassification.from_pretrained(
"bert-base-uncased",
num_labels=3 # pozitif=0, negatif=1, nötr=2
)
# Forward pass
outputs = model(
input_ids=encoding["input_ids"],
attention_mask=encoding["attention_mask"]
)
logits = outputs.logits
tahmin = torch.argmax(logits, dim=1)
print(tahmin) # 0 → pozitif
8.3. Trainer API: Eğitim Döngüsünü Otomatikleştirmek
HuggingFace’in Trainer sınıfı; gradient hesaplama, kayıp fonksiyonu, değerlendirme ve checkpoint kaydetme işlemlerini tek bir arayüzde toplar.
from transformers import TrainingArguments, Trainer
import numpy as np
from sklearn.metrics import f1_score, accuracy_score
def compute_metrics(pred):
labels = pred.label_ids
preds = np.argmax(pred.predictions, axis=1)
return {
"accuracy": accuracy_score(labels, preds),
"f1": f1_score(labels, preds, average="weighted")
}
training_args = TrainingArguments(
output_dir="./bert-sentiment",
num_train_epochs=3,
per_device_train_batch_size=16,
per_device_eval_batch_size=32,
learning_rate=2e-5,
warmup_steps=500,
weight_decay=0.01,
evaluation_strategy="epoch",
save_strategy="epoch",
load_best_model_at_end=True,
logging_dir="./logs",
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=train_dataset,
eval_dataset=eval_dataset,
compute_metrics=compute_metrics,
)
trainer.train()
8.4. Pipeline API: 3 Satırda Duygu Analizi
En hızlı başlangıç yöntemi. Eğer fine-tuned hazır bir model kullanıyorsanız, 3 satırda çalışır:
from transformers import pipeline
# Genel İngilizce duygu analizi
classifier = pipeline(
"sentiment-analysis",
model="distilbert-base-uncased-finetuned-sst-2-english"
)
sonuclar = classifier([
"This product exceeded all my expectations!",
"Terrible experience, would not recommend.",
"It's okay, nothing special."
])
for sonuc in sonuclar:
print(f"Etiket: {sonuc['label']}, Skor: {sonuc['score']:.4f}")
# Etiket: POSITIVE, Skor: 0.9998
# Etiket: NEGATIVE, Skor: 0.9991
# Etiket: NEGATIVE, Skor: 0.6823
Türkçe için:
# BERTurk tabanlı Türkçe sınıflandırma
tr_classifier = pipeline(
"text-classification",
model="dbmdz/bert-base-turkish-cased",
tokenizer="dbmdz/bert-base-turkish-cased"
)
sonuc = tr_classifier("Kargo çok hızlıydı, ürün mükemmel geldi!")
print(sonuc)
8.5. Senior Notu: Model Hub’dan Hazır Fine-Tuned Model Kullanmak
HuggingFace Model Hub’da binlerce fine-tuned BERT modeli hazır duruyor. Sıfırdan eğitmek yerine bu modelleri doğrudan kullanmak veya kendi verinizle ek fine-tuning yapmak çoğu zaman çok daha verimlidir.
Arama stratejisi:
bert sentiment turkish→ Türkçe duygu analizi için fine-tuned modellerfinbert→ Finansal metinler içinbert-base-multilingual-cased→ Çok dilli uygulamalar için
Model seçim kriterleri:
- Downloads sayısı (popülerlik güvenilirliğin işareti)
- Model kartındaki (model card) dataset ve metrik bilgileri
- Son güncelleme tarihi (aktif bakım önemli)
Kendi verinizle ek fine-tuning:
# Hub'dan hazır modeli yükle
model = AutoModelForSequenceClassification.from_pretrained(
"ProsusAI/finbert" # Finansal alanda pre-fine-tuned
)
# Kendi domain verinizle ek eğitim yap
trainer = Trainer(model=model, ...)
trainer.train()
# Sonucu Hub'a veya lokale kaydet
model.save_pretrained("./my-domain-finbert")
tokenizer.save_pretrained("./my-domain-finbert")
Bu yaklaşım “transfer learning üstüne transfer learning” olarak düşünülebilir. Genel dil bilgisi → domain bilgisi → görev bilgisi şeklinde katmanlı bir öğrenme sağlar.
“HuggingFace, yapay zekanın demokratikleşmesidir. Google’ın yıllarca eğittiği modeli, bir öğrenci birkaç satır kodla kendi problemine uygulayabilir. Bu, tarihte eşi görülmemiş bir bilgi erişim eşitliğidir.”
9. BERT’in Sınırları ve Gelecek
Her güçlü aracın sınırları vardır. BERT’i iyi bilmek, onu ne zaman kullanmamak gerektiğini bilmekten de geçer.
9.1. 512 Token Limiti: Uzun Metinlerde BERT’in Zayıf Noktası
BERT’in en bilinen kısıtlaması maksimum 512 token işleyebilmesidir. Bu sınır rastgele seçilmemiştir; Self-Attention mekanizmasının bellek karmaşıklığı O(n²) ile büyür. Yani token sayısı ikiye katlandığında bellek ihtiyacı dört katına çıkar.
512 token yaklaşık 380–400 kelimeye karşılık gelir. Kısa yorumlar, tweetler ve haber başlıkları için yeterlidir. Ama hukuki sözleşmeler, akademik makaleler veya uzun müşteri raporları bu sınırı aşar.
Çözüm Yöntemleri:
- Truncation (Kırpma): En basit yöntem. İlk 512 token alınır, gerisi atılır. Kritik bilgi metnin sonunda ise kaybolur.
- Sliding Window (Kayan Pencere): Metin örtüşen parçalara bölünür, her parça ayrı ayrı işlenir, sonuçlar birleştirilir.
- Longformer: Allen AI tarafından geliştirilen bu model, sliding window attention kullanarak 4096 tokena kadar metinleri işler. Bellek karmaşıklığı lineer (O(n)) olarak ölçeklenir.
- BigBird: Google’ın geliştirdiği ve sparse attention mekanizmasıyla çalışan bu model de 4096 token destekler. Özellikle ABSA görevlerinde uzun belgeler için tercih edilir.
9.2. Hesaplama Maliyeti: BERT’i Küçültmenin Yolları
BERT-Base’in 110 milyon parametresi, mobil cihazlar ve edge sistemler için ağırdır. Bunu aşmanın iki ana yolu vardır:
Knowledge Distillation:
DistilBERT örneğinde gördüğümüz gibi büyük modelin bilgisi küçük bir modele aktarılır. Bu yöntem %40 boyut küçültme ve %60 hız artışı sağlarken performansın %97'sini korur.
Quantization:
Model ağırlıkları 32-bit yerine 8-bit veya 4-bit sayılarla temsil edilir. Bu, model boyutunu 2–4x küçültür ve inference hızını artırır. HuggingFace, bitsandbytes kütüphanesiyle BERT modellerini kolayca quantize etmeyi destekler:
from transformers import AutoModelForSequenceClassification
import bitsandbytes
model = AutoModelForSequenceClassification.from_pretrained(
"bert-base-uncased",
load_in_8bit=True, # 8-bit quantization
device_map="auto"
)
9.3. LLM’ler BERT’in Yerini Alabilir mi?
Bu soruyu 2025'in gerçekliğiyle yanıtlayalım: Kısmen, ama tamamen değil.
LLM’lerin üstün olduğu durumlar:
- Zero-shot sınıflandırma: “Bu tweet pozitif mi?” sorusunu etiketli veri olmadan yanıtlamak
- Karmaşık ve nüanslı duygu açıklaması üretmek
- Çok adımlı akıl yürütme gerektiren analiz
BERT’in hâlâ üstün olduğu durumlar:
- Düşük gecikme gerektiren üretim sistemleri (DistilBERT, GPT-4'ten 100x daha hızlı)
- Kısıtlı hesaplama bütçesi olan uygulamalar
- Sınıflandırma görevlerinde fine-tuned BERT hâlâ GPT-4'e yakın veya üstün performans gösterebilir
- Veri gizliliğinin kritik olduğu on-premise sistemler
Gerçek dünyada bu iki yaklaşım rakip değil, tamamlayıcıdır. BERT hızlı birinci hat filtrelemesi yaparken, LLM karmaşık durumları derinlemesine analiz eder.
9.4. 2025'te Sentiment Analysis: Generative AI Entegrasyonu
2025 itibarıyla duygu analizi alanındaki en önemli trend, encoder ve decoder mimarilerinin hibrit kullanımıdır.
- Emotion AI: Pozitif / negatif / nötr üçlüsünün ötesinde öfke, korku, sevinç, şaşkınlık gibi ince duygu kategorileri gerçek zamanlı olarak tespit ediliyor.
- Generative Sentiment Explanation: Sadece “Bu negatif” demek yetmiyor. Sistem artık “Bu yorum negatif çünkü müşteri kargo süresinden şikayetçi ve bu üçüncü kez yaşadığı sorun” gibi açıklamalar üretiyor. Bu açıklamalar BERT sınıflandırması + LLM üretiminin kombinasyonuyla oluşturuluyor.
- Multi-modal Sentiment: Metin, ses tonu ve yüz ifadesini birleştirerek çok katmanlı duygu analizi yapan sistemler endüstriyel uygulamalara giriyor.
“BERT’in sınırları, onu gereksiz kılmaz. Bir çekiç vida vidalayamaz ama bu çekicin kullanışsız olduğu anlamına gelmez. Doğru aracı doğru iş için seçmek, mühendislik bilgeliğinin ta kendisidir.”
10. Epilog: Kelimeler Sayılara, Sayılar Duygulara Dönüşüyor
Bu yazıda “makine metni nasıl hisseder?” sorusunu birlikte yanıtladık.
Bir müşteri yorumu yazdığında, o metin önce tokenlere ayrılır. Her token üç farklı embedding katmanında sayısal bir kimlik kazanır. Multi-head self-attention mekanizması her kelimenin diğer tüm kelimelerle ilişkisini hesaplar. [CLS] tokenı tüm bu bilgiyi özetler. Ve en sonunda bir sınıflandırma katmanı “bu metin pozitif” kararını verir.
Ama bu teknik yolculuğun ardında daha büyük bir fikir yatıyor: Dil, istatistiksel örüntülerle modellenebilir ve bu örüntüler anlam taşıyan bilgiye dönüştürülebilir.
BERT bunu 2018'de kanıtladı. RoBERTa, DistilBERT ve BERTurk bu kanıtı genişletti. Fine-tuning bu gücü herkesin ulaşabileceği bir araca dönüştürdü.
Bir öğrenci olarak bu tablodan çıkan sonuç şudur:
Derin öğrenme artık sadece büyük teknoloji şirketlerinin oyunu değil. HuggingFace Model Hub’ı açıp üç satır kodla Google’ın yıllarca eğittiği modeli kendi problemine uygulayabilirsiniz. Bu, tarihin hiçbir döneminde olmadığı kadar güçlü bir erişim eşitliğidir.
Yapılacak iş basit: İyi veri bulmak, doğru modeli seçmek, dikkatli fine-tuning yapmak ve sonuçları dürüstçe değerlendirmek.
📌 Teknik Detaylar ve GitHub
Bu yazıda bahsedilen kavramların uygulamalarına, TÜBİTAK 2209-A proje kodlarına ve diğer AI mühendisliği projelerime aşağıdan ulaşabilirsiniz:
메타데이터
- post_id
- 7e1178ae14ea
- slug
- bert-ile-duygu-analizi-transformatörün-kalbi-metnin-ruhu-7e1178ae14ea
- url
- https://medium.com/@umitsencer.21/bert-ile-duygu-analizi-transformat%C3%B6r%C3%BCn-kalbi-metnin-ruhu-7e1178ae14ea
- canonical_url
- https://medium.com/@umitsencer.21/bert-ile-duygu-analizi-transformat%C3%B6r%C3%BCn-kalbi-metnin-ruhu-7e1178ae14ea
- author_url
- https://medium.com/@umitsencer.21
- status
- ok
- fetched_at
- 2026-06-09 14:34:10