Doğal Dil İşleme (NLP) Yazı Dizisi — Bölüm 3: NLP Görevleri
Dilin Yapı Taşlarını ÇözmekBu görsel, Gemini ile üretilmiştir.“Dilin sınırları, dünyamın sınırlarıdır.” — Ludwig Wittgenstein, Tractatus Logico-Philosophicus (1921)Bu Seri…

Dilin Yapı Taşlarını Çözmek
“Dilin sınırları, dünyamın sınırlarıdır.” — Ludwig Wittgenstein, Tractatus Logico-Philosophicus (1921)
Bu Seri Hakkında
Bu yazı, Doğal Dil İşleme (NLP) alanını temellerden ileri tekniklere kadar ele alan beş bölümlük bir yazı dizisinin üçüncü parçasıdır.
Bölüm 1 — Metin Ön İşleme: Tokenizasyon, durak kelime temizleme, stemming vs. lemmatizasyon, Türkçe morfolojik analiz.
Bölüm 2 — Metin Temsili: Kelimelerden Vektörlere: Bag of Words, TF-IDF, Word2Vec, GloVe, FastText ve statik embedding’lerin evrimi.
Bölüm 3 — NLP Görevleri (bu yazı): POS tagging, NER, duygu analizi, metin sınıflandırma ve Türkçe NLP uygulamaları.
Bölüm 4 — Transformer Mimarisi: Attention mekanizması, Multi-Head Attention, BERT ve bağlamsal embedding’ler.
Bölüm 5 — Pratik NLP Pipeline’ı: Uçtan uca proje: Türkçe iş ilanı-CV eşleştirme sistemi.
İlk iki bölümde metni parçalamayı ve sayısal temsillere dönüştürmeyi öğrendik. Şimdi asıl soruya geliyoruz: bu temsillerle ne yapabiliriz? Bu bölümde, NLP’nin temel görevlerini — dili anlama, yapısını çözme ve anlamını çıkarma eylemlerini — kavramsal derinlik ve kod örnekleriyle ele alacağız.
Giriş: Dili Anlamak Ne Demektir?
Wittgenstein, dilin sınırlarının dünyamızın sınırları olduğunu söylerken, dilin yalnızca bir iletişim aracı değil, düşüncenin kendisi olduğunu ima ediyordu. Dil, dünyayı kavramamızın aracı olduğu kadar sınırıdır da — ifade edemediğimiz şeyi düşünemeyiz.
Makineye dili anlatmak da benzer bir felsefi meydan okuma taşır. Bir cümlede hangi kelimenin isim, hangisinin fiil olduğunu bilmek yetmez. Kimin, nerede, ne zaman, neyi yaptığını çıkarmak gerekir. Metnin ardındaki duyguyu hissetmek, niyeti kavramak, konuyu sınıflandırmak gerekir. Her bir katman, dilin farklı bir derinliğine inmeyi gerektirir.
NLP görevlerini bir arkeolojik kazıya benzetebiliriz. Bir kazı alanında yüzey buluntuları — çanak çömlek kırıkları — hemen görülür. Daha aşağı kazıldığında yapılar — duvar temelleri, mezarlar — ortaya çıkar. En derinde ise o medeniyetin inançları, sosyal yapısı, dünya görüşü gibi soyut katmanlar çözümlenir.
NLP’de de benzer bir katmanlılık vardır:
Yüzey katmanı — Sözdizim: Kelimelerin dilbilgisel rolleri (POS tagging), cümle yapısı, bağımlılık ilişkileri.
Orta katman — Varlıklar: Metindeki somut referanslar — kişiler, yerler, kurumlar, tarihler (NER).
Derin katman — Anlam: Metnin duygusal tonu (duygu analizi), konusu (metin sınıflandırma), niyeti, çıkarımları.
Her katman bir öncekinin üzerine inşa edilir. POS tagging olmadan NER zorlaşır; NER olmadan bilgi çıkarımı eksik kalır; duygu analizi olmadan müşteri deneyimi ölçülemez. Bu bölümde yüzeyden derine, her katmanı tek tek kazacağız.
1. POS Tagging: Kelimelerin Dilbilgisel Kimliği
POS tagging (Part-of-Speech tagging), bir cümledeki her kelimeye dilbilgisel rolünü — isim, fiil, sıfat, zarf, edat vb. — atama görevidir. Bu, NLP’nin “temel anatomisi”dir: tıpkı bir biyoloğun hücre türlerini ayırt etmesi gibi, POS tagger kelimelerin türlerini ayırt eder.
İnsan için sezgisel görünen bu görev, makineler için hiç de öyle değildir. “Güzel yüz” ve “yüz metre” ifadelerinde “yüz” kelimesi farklı sözcük türlerine aittir — birinde sıfat (ya da isim), diğerinde sayı. “Koşan çocuk” ve “çocuk koşan” ifadelerinde kelimeler aynı olsa da sözdizimsel roller farklıdır. POS tagging, bu belirsizlikleri bağlamdan çözer.
En yaygın kullanılan tag seti Universal POS (UPOS) standardıdır ve 17 evrensel etiket tanımlar: NOUN (isim), VERB (fiil), ADJ (sıfat), ADV (zarf), PROPN (özel isim), DET (belirteç), ADP (edat), PRON (zamir), NUM (sayı), CONJ (bağlaç), PUNCT (noktalama) ve diğerleri. Bu evrensellik, farklı dillerdeki modellerin karşılaştırılabilir olmasını sağlar.
import spacy
nlp = spacy.load("en_core_web_sm")
doc = nlp("Apple is planning to open a new office in San Francisco next year")
print(f"{'Kelime':<15} {'POS':<8} {'Bağımlılık':<12} {'Baş Kelime'}")
print("-" * 50)
for token in doc:
print(f"{token.text:<15} {token.pos_:<8} {token.dep_:<12} {token.head.text}")
spaCy burada sadece POS tagging değil, aynı anda bağımlılık ayrıştırma (dependency parsing) da yapar. Her kelimenin diğer kelimelerle olan sözdizimsel ilişkisi — özne, nesne, belirteç — bir ağaç yapısında temsil edilir. Bu ağaç, “kim neyi yapıyor” sorusunun cevabını verir: “Apple” (özne) “planning” (yüklem), “office” (nesne), “San Francisco” (yer).
POS Tagging Neden Önemli?
POS tagging, daha karmaşık NLP görevlerinin sessiz kahramanıdır. Çoğu zaman görünmez ama her yerdedir:
Lemmatizasyon için: Bölüm 1'de gördüğümüz gibi, “running” kelimesinin lemması fiil olarak “run”, isim olarak “running”dir. Doğru POS tag’ı olmadan doğru lemma bulunamaz.
Sözdizimsel belirsizlik çözümü: “I saw her duck” cümlesinde “duck” fiil mi (eğilmek) yoksa isim mi (ördek)? POS tagger bağlamdan doğru etiketi atar. Bu belirsizlik çözümü, makine çevirisinden soru cevaplamaya kadar birçok görevin ön koşuludur.
Bilgi çıkarımı ve NER için: “Ankara Üniversitesi Rektörü Prof. Dr. Ahmet Yılmaz” ifadesinde POS bilgisi, özel isimleri (PROPN) genel isimlerden (NOUN) ayırmaya yardımcı olur.
Metin üretimi için: Dilbilgisel olarak doğru cümleler üretmek — chatbot’lardan otomatik özetlemeye — sözcük türlerinin doğru sıralanmasını gerektirir.
2. Named Entity Recognition (NER): Metindeki Varlıkları Keşfetmek
NER (Named Entity Recognition), metindeki adlandırılmış varlıkları — kişiler, kurumlar, yerler, tarihler, parasal değerler — tanımlayan ve sınıflandıran bir bilgi çıkarımı görevidir. NER terimi ilk olarak 1996'da MUC-6 (Message Understanding Conference) konferansında resmi olarak tanımlanmıştır ve o günden bu yana NLP’nin en temel ve en yaygın kullanılan görevlerinden biri olmaya devam etmektedir.
NER’i bir dedektifin iş yapma biçimine benzetebiliriz. Bir metin okuyorsunuz — bir haber makalesi, bir sözleşme, bir müşteri şikâyeti. Dedektif gibi sorular soruyorsunuz: Kim? (PERSON) Nerede? (LOCATION) Hangi kurum? (ORGANIZATION) Ne zaman? (DATE) Ne kadar? (MONEY). NER, bu soruların otomatik yanıtıdır.
NER’in zorluğu, basit kalıp eşleştirmesinin ötesindedir. Aynı kelime farklı bağlamlarda farklı varlık türlerini temsil edebilir: “Apple announced new products” cümlesinde Apple bir organizasyondur. “I ate an apple for lunch” cümlesinde ise bir varlık bile değildir, sadece genel bir isimdir. “Apple Street is closed for repairs” cümlesinde ise bir konum adıdır. Bu belirsizliği çözmek, bağlamsal anlama gerektirir.
spaCy ve Transformer Tabanlı NER
import spacy
nlp = spacy.load("en_core_web_sm")
text = """Elon Musk announced that Tesla will invest $10 billion in a new
Gigafactory near Berlin, Germany. The project will begin in March 2025."""
doc = nlp(text)
for ent in doc.ents:
print(f" {ent.text:<25} {ent.label_:<10} {spacy.explain(ent.label_)}")
spaCy’nin modelleri hızlıdır ancak karmaşık bağlamlarda yanılabilir. Transformer tabanlı NER modelleri — BERT’in bağlamsal anlama gücünü NER’e taşıyarak — çok daha yüksek doğruluk sağlar:
from transformers import pipeline
ner = pipeline("ner", model="dslim/bert-base-NER", aggregation_strategy="simple")
results = ner("Barack Obama visited Microsoft headquarters in Seattle")
for entity in results:
print(f" {entity['word']:<20} → {entity['entity_group']} ({entity['score']:.3f})")
Türkçe NER: Morfolojik Zorluklar
Türkçe NER, dilin morfolojik zenginliği nedeniyle ek zorluklar taşır. “İstanbul’daki” ifadesinde yer adı “İstanbul”u eklerinden ayırmak, İngilizce’deki “in Istanbul” çözümlemesinden daha karmaşıktır. Ekler varlık adının sınırlarını bulanıklaştırır. “Ankara Üniversitesi’nden” ifadesinde organizasyon adı nerede bitiyor? “Ankara Üniversitesi” mi, “Ankara Üniversitesi’nden” mi?
BERTurk tabanlı NER modelleri bu zorlukları büyük ölçüde aşar. savasy/bert-base-turkish-ner-cased modeli, Türkçe metinlerde kişi, kuruluş ve yer varlıklarını yüksek doğrulukla tanıyabilir:
from transformers import pipeline
tr_ner = pipeline("ner", model="savasy/bert-base-turkish-ner-cased",
aggregation_strategy="simple")
texts = [
"Kariyer.net İstanbul'daki merkezinde yapay zeka projeleri geliştiriyor",
"Mustafa Kemal Atatürk 29 Ekim 1923'te Cumhuriyeti ilan etti",
]
for text in texts:
print(f"\n\"{text[:60]}...\"")
for ent in tr_ner(text):
print(f" {ent['word']:<30} → {ent['entity_group']}")
NER’in Pratik Değeri
NER’in gücü, ham metni yapılandırılmış bilgiye dönüştürmesindedir. Bu dönüşüm, sayısız uygulamanın temelini oluşturur:
Bilgi çıkarımı: Sözleşmelerden taraf isimlerini, tarihlerini ve tutarlarını otomatik çıkarma. Bir hukuk firması yılda binlerce sözleşmeyi NER ile tarar.
Arama motorları: Google’ın “Ankara hava durumu” sorgusunda “Ankara”yı bir konum olarak tanıması NER sayesindedir. Sorgunun niyetini anlamak, varlık tanımadan geçer.
Soru cevaplama: “Tesla’nın CEO’su kim?” sorusunda “Tesla” → ORG, beklenen cevap → PER olduğu bilgisi, yanıt arama uzayını daraltır.
Bilgi grafikleri: Semantik arama yazımda bahsettiğim Google Knowledge Graph’ın 800 milyarı aşkın gerçeği, temelde NER çıktılarının yapılandırılmış halidir. NER varlıkları düğümleri, ilişki çıkarımı (relation extraction) ise kenarları oluşturur.
3. Duygu Analizi: Metnin Duygusal Tonu
Duygu analizi, bir metnin duygusal yönelimini — olumlu, olumsuz, nötr — belirleme görevidir. NLP görevleri arasında belki de en doğrudan iş değeri yaratan uygulamadır: sosyal medya izleme, müşteri geri bildirimi analizi, marka algısı ölçümü, pazar araştırması, politik analiz — hepsi duygu analizine dayanır.
Görünüşte basit bir sınıflandırma problemi gibi durur: metin olumlu mu, olumsuz mu? Ancak dilin nüansları işi bir hayli zorlaştırır. İnsan dili, duyguları doğrudan ifade etmekle kalmaz; ima eder, gizler, tersine çevirir. Bu nüanslar, duygu analizinin gerçek meydan okumalarıdır:
Sarkazm: “Harika, yine geç kaldı kargo. Bravo.” — Kelimeler olumlu, niyet tam tersi. Sarkazm, duygu analizinin en zorlu düşmanıdır çünkü kelime düzeyinde sinyal tam tersini gösterir.
Negasyon: “Bu ürün hiç de kötü değil.” — İki olumsuz, sonuç olumlu. Negasyon zincirleri, özellikle Türkçe’de (çoklu negasyon yapıları) karmaşık hale gelir.
Karma duygular: “Kamera mükemmel ama pil ömrü felaket.” — Aynı metinde zıt duygular bir arada. Aspect-based sentiment analysis, bu nüansı yakalar.
Bağlam bağımlılığı: “Pil ömrü kısa” — Bir telefon incelemesinde olumsuz, tek kullanımlık pil ürünü için beklenen bir özellik.
3.1 Sözlük Tabanlı Yaklaşım: VADER
VADER (Valence Aware Dictionary and sEntiment Reasoner), sosyal medya metinleri için tasarlanmış kural tabanlı bir araçtır. Bir sözlük ve kurallar kümesine dayanır — eğitim gerektirmez. Büyük harf (“FANTASTIC”), ünlem işaretleri, emoji’ler ve yoğunluk belirteçlerini (“very”, “extremely”) algılayarak duygu skoru hesaplar.
import nltk
nltk.download('vader_lexicon')
from nltk.sentiment import SentimentIntensityAnalyzer
sia = SentimentIntensityAnalyzer()
texts = [
"This movie was absolutely fantastic! Best film of the year.",
"Terrible service. The food was cold and the waiter was rude.",
"The product is okay. Nothing special but gets the job done.",
"Not bad at all! I was pleasantly surprised.",
"Great, another delayed delivery. Thanks for nothing." # Sarkastik
]
for text in texts:
scores = sia.polarity_scores(text)
label = "POS" if scores['compound'] > 0.05 else ("NEG" if scores['compound'] < -0.05 else "NEU")
print(f" [{label:3}] ({scores['compound']:+.3f}) {text[:55]}")
VADER’ın güçlü yanları — hız, eğitimsiz çalışma, sosyal medya uyumluluğu — yanında zayıf yanları da belirgindir: sarkazmı algılayamaz, alan özgü anlamları kaçırır ve Türkçe desteği yoktur. Bu sınırlamalar, transformer tabanlı modellerin sahasıdır.
3.2 Transformer Tabanlı Duygu Analizi ve Türkçe
Modern duygu analizi, BERT gibi transformer modellerin ince ayarlanmasıyla çok daha yüksek doğruluk elde eder. Model, milyonlarca metin üzerinde ön eğitimle dilin yapısını öğrenmiştir; küçük bir etiketli veri setiyle ince ayar yapılarak duygu tanıma görevine özelleştirilir.
Türkçe duygu analizi, son yıllarda BERTurk tabanlı modeller sayesinde ciddi bir sıçrama yaşadı. savasy/bert-base-turkish-sentiment-cased modeli, Türkçe metinlerde olumlu/olumsuz sınıflandırmayı yüksek güvenle gerçekleştirir:
from transformers import pipeline
tr_sentiment = pipeline("sentiment-analysis",
model="savasy/bert-base-turkish-sentiment-cased")
reviews = [
"Bu ürün gerçekten harika, çok memnun kaldım!",
"Kargo çok geç geldi ve ürün hasarlıydı. Berbat.",
"Fiyatına göre idare eder, beklentimi karşıladı.",
"Müşteri hizmetleri çok ilgisiz, sorunumu çözemediler.",
"Tam aradığım şeydi, hızlı kargo için de teşekkürler!",
]
for review in reviews:
result = tr_sentiment(review)[0]
emoji = "✅" if result['label'] == 'positive' else "❌"
print(f" {emoji} [{result['label']:8} {result['score']:.3f}] {review[:55]}")
3.3 Türkçe Duygu Analizinin Kendine Has Zorlukları
Türkçe’nin yapısal özellikleri, duygu analizini İngilizce’ye kıyasla daha zorlu kılar:
Morfolojik gömülme: Duygu bilgisi eklerin içine gömülüdür. “Sevmedim”, “sevilmemiş”, “sevilemeyecek” — her biri farklı bir duygusal yoğunluk taşır ve bu fark eklerde saklıdır. Modelin bu morfolojik yapıyı çözümlemesi, yüzeysel kelime eşleştirmesinin ötesinde bir anlama gerektirir.
Çoklu negasyon: “Hiç de kötü değildi” cümlesinde iki negasyon birbirini nötralize eder. Türkçe’de bu tür yapılar İngilizce’den daha yaygın ve daha karmaşık olabilir.
İnformal dil: Sosyal medyada “çok ii”, “harikaa”, “baya iyi”, “mükemmeeel” gibi standart dışı yazımlar yaygındır. Bölüm 1'de ele aldığımız metin normalizasyonu burada kritik hale gelir — “çoooook güzeeeel” ifadesini normalize etmeden modele vermek, yanlış sonuçlara yol açar.
Veri kıtlığı: Türkçe duygu analizi veri setleri İngilizce’ye kıyasla sınırlıdır. Bu kısıtlamayı aşmanın en etkili yolu, BERTurk gibi büyük Türkçe corpus’larda ön eğitimden geçmiş modelleri küçük etiketli veri setleriyle ince ayar yapmaktır — transfer öğrenmenin gücü burada devreye girer.
3.4 Duygu Analizinin Ötesinde: Duygu Tespiti
Klasik duygu analizi olumlu/olumsuz/nötr üçlüsüyle sınırlıdır. Ancak daha ince taneli bir analiz, spesifik duyguları — sevinç, öfke, korku, üzüntü, şaşkınlık, tiksinti — ayırt edebilir. Bu, müşteri deneyimi analizinde çok daha zengin içgörüler sunar: bir müşteri sadece “olumsuz” değil, “öfkeli” veya “hayal kırıklığına uğramış” olabilir — ve bu ikisine verilecek yanıt farklıdır.
from transformers import pipeline
emotion = pipeline("text-classification",
model="j-hartmann/emotion-english-distilroberta-base", top_k=3)
texts = [
"I just got promoted! This is the best day of my life!",
"I can't believe they cancelled the event without notice.",
]
for text in texts:
print(f"\n\"{text[:55]}...\"")
for r in emotion(text):
bar = "█" * int(r['score'] * 20)
print(f" {r['label']:12} {r['score']:.3f} {bar}")
4. Metin Sınıflandırma: Belgeleri Kategorilere Ayırmak
Metin sınıflandırma, bir metin belgesini önceden tanımlanmış kategorilerden birine (veya birkaçına) atama görevidir. NLP’nin en geniş uygulama alanına sahip görevidir: spam filtreleme, haber kategorilendirme, konu tespiti, niyet sınıflandırma, içerik moderasyonu, destek bilet yönlendirme.
Duygu analizi de teknik olarak bir metin sınıflandırma görevidir — etiketleri duygusal yönelimlere özgüdür. Bu bölümde daha genel sınıflandırma senaryolarını ele alacağız.
4.1 Klasik Yaklaşım: TF-IDF + Makine Öğrenmesi
Bölüm 2'de ele aldığımız TF-IDF temsili, basit sınıflandırıcılarla birleştirildiğinde şaşırtıcı derecede güçlüdür. Bu kombinasyon, hâlâ birçok endüstriyel uygulamada “ilk denenmesi gereken” baseline’dır. Nedeni basit: hızlıdır, yorumlanabilirdir, küçük veri setlerinde iyi çalışır ve transformer modellerin performansını ölçmek için sağlam bir karşılaştırma noktası sunar.
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.svm import LinearSVC
from sklearn.pipeline import Pipeline
from sklearn.model_selection import cross_val_score
texts = [
"Galatasaray deplasmanda 3-1 galip geldi",
"Fenerbahçe yeni transferini açıkladı",
"A Milli Takım şampiyonaya hazırlanıyor",
"Borsa İstanbul güne yükselişle başladı",
"Merkez Bankası faiz kararını açıklayacak",
"Dolar kuru yeni rekor kırdı",
"Yapay zeka sağlık sektöründe devrim yaratıyor",
"Yeni çip teknolojisi enerji tüketimini düşürüyor",
"Robot cerrah ile ilk beyin ameliyatı gerçekleştirildi",
]
labels = ["spor"]*3 + ["ekonomi"]*3 + ["teknoloji"]*3
pipe = Pipeline([('tfidf', TfidfVectorizer()), ('clf', LinearSVC())])
pipe.fit(texts, labels)
# Yeni metinler üzerinde tahmin
test = ["Milli futbolcu yurt dışına transfer oldu",
"Kripto para piyasasında sert düşüş yaşandı",
"Otonom araçlar trafikte test sürüşüne başladı"]
for text, pred in zip(test, pipe.predict(test)):
print(f" [{pred:10}] {text}")
4.2 Zero-Shot Sınıflandırma: Etiketli Veri Olmadan
Transformer çağının en heyecan verici yeteneklerinden biri zero-shot sınıflandırmadır. Klasik yaklaşımda her yeni görev için etiketli veri toplama ve model eğitme gerekir — bu, haftalar süren zahmetli bir süreçtir. Zero-shot sınıflandırma, modele sadece olası etiketlerin isimlerini vererek, hiç etiketli örnek görmeden sınıflandırma yapmasını sağlar.
Bu nasıl mümkün? Model, doğal dil çıkarımı (NLI — Natural Language Inference) üzerinde eğitilmiştir. Her etiket için “Bu metin [etiket] hakkında mı?” sorusunu dolaylı olarak sorarak bir olasılık üretir. Eğitim verisinde hiç “Türkçe teknoloji haberi” görmemiş olsa bile, “teknoloji” kavramının anlamını biliyor ve bağlamdan çıkarım yapabiliyor.
from transformers import pipeline
classifier = pipeline("zero-shot-classification", model="facebook/bart-large-mnli")
text = "Yapay zeka destekli sağlık uygulaması 50 milyon dolar yatırım aldı"
labels = ["teknoloji", "sağlık", "ekonomi", "spor", "eğitim"]
# multi_label=True: bir metin birden fazla kategoriye ait olabilir
result = classifier(text, labels, multi_label=True)
print(f"\"{text}\"")
for label, score in zip(result['labels'], result['scores']):
flag = "✓" if score > 0.5 else " "
print(f" {flag} {label:12} {score:.3f}")
# Bu metin hem teknoloji, hem sağlık, hem ekonomi - ve model bunu yakalar
Zero-shot sınıflandırma, yeni alanlar ve dillere hızlı adaptasyon için büyük bir avantajdır. Ancak performansı görev özelinde eğitilmiş modellerden genellikle düşüktür — veri toplayabildiğiniz durumlarda fine-tuning hâlâ en iyi sonucu verir.
4.3 Metin Sınıflandırmanın Endüstriyel Uygulamaları
Metin sınıflandırması, NLP’nin endüstriyel uygulamalarının belkemiğidir:
Spam filtreleme: E-posta sınıflandırmanın en klasik uygulaması. TF-IDF + Naive Bayes kombinasyonu, Gmail’in ilk spam filtresinin temeliydi ve hâlâ etkilidir.
Müşteri destek bilet yönlendirme: Gelen destek taleplerini otomatik olarak ilgili departmana atama. “Siparişim nerede?” → sipariş takibi, “İade etmek istiyorum” → iade departmanı. Kariyer.net’te geliştirdiğimiz BOSTT sistemi de bu alanda çalışır — 435K destek bileti üzerinde 5 sınıflı bir taksonomide yüksek doğruluk elde ettik.
İçerik moderasyonu: Sosyal medya platformlarında nefret söylemi, şiddet içeriği, spam tespiti. Milyonlarca gönderinin insanlar tarafından incelenmesi imkânsızdır; metin sınıflandırma bu ölçeği mümkün kılar.
Niyet sınıflandırma (Intent Classification): Chatbot’larda kullanıcının niyetini belirleme. Aynı anlam farklı kelimelerle ifade edilebilir: “hesabımı kapatmak istiyorum”, “üyelikten çıkış nasıl yapılır”, “artık kullanmak istemiyorum” — hepsi aynı niyet. Modelin bu çeşitliliği yakalaması gerekir.
5. İlişki Çıkarımı ve Metin Özetleme
NER varlıkları bulur, ancak varlıklar arasındaki ilişkileri açıklamaz. İlişki çıkarımı (Relation Extraction), bu boşluğu doldurur. “Elon Musk founded SpaceX in 2002” cümlesinden üç ilişki çıkarılabilir: (Elon Musk, kurucu, SpaceX), (SpaceX, kuruluş_yılı, 2002). Bu ilişkiler, bilgi grafiklerinin kenarlarını oluşturur — NER’in bulduğu varlıklar (düğümler) arasında bağlantılar kurar.
Metin özetleme ise uzun bir metni kısa ve öz biçimde ifade etme görevidir. İki temel yaklaşım vardır: çıkarımsal özetleme (extractive) orijinal metinden en önemli cümleleri seçer; soyutlamalı özetleme (abstractive) metni anlayarak kendi kelimeleriyle yeni bir özet üretir.
Çıkarımsal özetleme, aslında Bölüm 2'de öğrendiğimiz TF-IDF ile basitçe yapılabilir: her cümlenin TF-IDF skorlarının ortalamasını alın, en yüksek skorlu cümleleri seçin. Soyutlamalı özetleme ise BART, T5 gibi encoder-decoder transformer modellerinin güçlü olduğu alandır.
from transformers import pipeline
summarizer = pipeline("summarization", model="facebook/bart-large-cnn")
article = """Artificial intelligence is transforming healthcare in unprecedented
ways. Machine learning algorithms can now detect diseases from medical images
with accuracy matching human radiologists. NLP extracts valuable information
from electronic health records. Drug discovery is being accelerated through
AI-powered molecular simulation. However, challenges remain in data privacy,
algorithmic bias, and regulatory frameworks."""
summary = summarizer(article, max_length=60, min_length=20, do_sample=False)
print(f"Özet: {summary[0]['summary_text']}")
6. Görevler Arası Bağlantılar: NLP Pipeline Mimarisi
Bu bölümde ele aldığımız görevler birbirinden bağımsız değildir. Gerçek dünya uygulamalarında, bu görevler ardışık veya paralel olarak bir pipeline içinde çalışır. Bir müşteri destek sistemi şu akışı kullanabilir:
Gelen Mesaj
│
▼
[Metin Ön İşleme] ── Bölüm 1: Normalizasyon, tokenizasyon
│
├──▶ [Duygu Analizi] ──▶ Aciliyet skoru (kızgın müşteri → öncelikli)
│
├──▶ [NER] ──────────▶ Ürün adı, sipariş no, tarih çıkarımı
│
├──▶ [Niyet Sınıflandırma] ──▶ İade? Şikâyet? Bilgi talebi?
│
└──▶ [Yönlendirme] ──▶ Duygu + niyet + varlık → doğru departman
Bu pipeline’ın her katmanı, önceki bölümlerde öğrendiğimiz teknikler üzerine inşa edilmiştir. Ön işleme (Bölüm 1) metni temizler, TF-IDF veya embedding’ler (Bölüm 2) sayısal temsil oluşturur, NLP görevleri (Bölüm 3) anlam çıkarır. Bölüm 4'te göreceğimiz transformer mimarisi ise tüm bu katmanları tek bir modelde birleştirme imkânı sunar.
7. Değerlendirme Metrikleri: Modellerin Performansını Ölçmek
Bir NLP modelinin “iyi” olup olmadığını nasıl ölçeriz? Doğru metrikleri seçmek, doğru modeli seçmek kadar önemlidir. Yanlış metrik, yanlış kararlara yol açar.
Accuracy (Doğruluk) en sezgisel metriktir: tüm tahminler içinde doğru olanların oranı. Ama büyük bir tuzak barındırır. %95 spam olan bir veri setinde, her şeyi “spam” olarak etiketleyen bir model %95 accuracy elde eder — ama hiçbir gerçek e-postayı tanımamıştır. Bu, sınıf dengesizliği probleminin en bilinen tezahürüdür.
Bu tuzaktan kaçınmak için daha rafine metrikler kullanılır:
Precision (Kesinlik): “Modelim pozitif dediğinde ne kadar güvenebilirim?” — Pozitif olarak tahmin edilenler içinde gerçekten pozitif olanların oranı.
Recall (Duyarlılık): “Gerçek pozitiflerin kaçını yakalıyorum?” — Gerçek pozitifler içinde modelin doğru bulduklarının oranı.
F1-Score: Precision ve Recall’un harmonik ortalaması. İkisi arasında denge kurar. Dengesiz veri setlerinde accuracy’den çok daha güvenilir bir göstergedir.
from sklearn.metrics import classification_report
y_true = ["pos", "neg", "pos", "neg", "pos", "neu", "neg", "pos", "neu", "neg"]
y_pred = ["pos", "neg", "pos", "pos", "pos", "neu", "neg", "neg", "pos", "neg"]
print(classification_report(y_true, y_pred))
Hangi metriğin önceliklendirileceği görevin doğasına bağlıdır. Spam filtrelemede yüksek precision istenir — gerçek bir e-postanın spam olarak işaretlenmesi kabul edilemez. Tıbbi teşhiste yüksek recall istenir — bir hastalığın gözden kaçması hayati risk taşır. NER görevlerinde ise entity-level F1 kullanılır — bir varlığın tüm token’larının doğru etiketlenmesi gerekir; “San Francisco” için sadece “San”ı doğru etiketlemek yeterli değildir.
Sonuç: Yüzeyden Derinlere
Wittgenstein dilin sınırlarının dünyamızın sınırları olduğunu söyledi. Bu bölümde, makinelerin bu sınırları genişletme çabalarını izledik: kelimelerin dilbilgisel rollerini çözmekten (POS tagging), metindeki somut varlıkları keşfetmeye (NER), duygusal tonları algılamaya (duygu analizi) ve belgeleri kategorilere ayırmaya (metin sınıflandırma) uzanan bir yolculuk.
Her görev, dilin farklı bir katmanını ele alır. Ve her katmanı anlamak, bir sonraki katmanı çözmek için zemin hazırlar — tıpkı arkeolojik kazıda her tabaka bir öncekinin bağlamını aydınlattığı gibi. POS tagging olmadan NER zorlaşır; NER olmadan bilgi grafikleri kurulamaz; duygu analizi olmadan müşteri deneyimi ölçülemez; metin sınıflandırma olmadan bilgi kaosunda kayboluruz.
Ancak tüm bu görevlerin ortak bir sınırlaması var: bağlamsal anlama derinliği. Kural tabanlı ve istatistiksel modellerin yakalayamadığı nüanslar — sarkazm, örtük anlam, uzun mesafeli bağımlılıklar — bir paradigma değişikliği gerektirir. Bir sonraki bölümde, bu değişikliği getiren mimariyi — Transformer — ve onun NLP’yi nasıl dönüştürdüğünü ele alacağız. Attention mekanizmasından BERT’e, bağlamsal embedding’lerden fine-tuning stratejilerine uzanan bu yolculuk, serinin teknik doruk noktası olacak.
Kaynaklar
- Jurafsky, D. & Martin, J.H. (2025). Speech and Language Processing (3rd ed.) — Bölüm 8: Sequence Labeling, Bölüm 17: Information Extraction.
- Devlin, J., Chang, M., Lee, K. & Toutanova, K. (2018). “BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding.”
- Hutto, C.J. & Gilbert, E.E. (2014). “VADER: A Parsimonious Rule-based Model for Sentiment Analysis of Social Media Text.” ICWSM.
- Schweter, S. (2020). “BERTurk — BERT Models for Turkish.”
- Küçük, D. & Steinberger, R. (2014). “Experiments on Turkish NER.” LREC.
- Yin, W., Hay, J. & Roth, D. (2019). “Benchmarking Zero-shot Text Classification.” EMNLP.
- Wittgenstein, L. (1921). Tractatus Logico-Philosophicus.
Sonraki yazı: Bölüm 4 — Transformer Mimarisi — Attention mekanizması, Multi-Head Attention, BERT ve bağlamsal embedding’ler.
Doğal Dil İşleme (NLP) Yazı Dizisi — Bölüm 3: NLP Görevleri was originally published in Kariyer.net Tech on Medium, where people are continuing the conversation by highlighting and responding to this story.
Bu yazı ilk olarak Medium'da yayımlandı.
- ner
- nlp
- sentiment-analysis
- machine-learning
- text-classification
Devamı