Gelecegi yazanlar logo

Bloga geri dön

Yapay Zeka/Makine Öğrenmesi

Denetimli Öğrenme ile Talep Önceliklendirme | Geleceği Yazanlar

Müşteri taleplerini yönetmek için denetimli öğrenmeden nasıl yararlanabileceğini keşfet! Doğal dil işleme ile veri hazırlama ve modelleme adımlarını incele!
Blog image

Bir şirkette destek ekibinde çalıştığınızı hayal edin.. her gün önünüze onlarca, hatta yüzlerce müşteri talebi, hata bildirimi isteği geliyor. Bunlardan bazıları (örneğin 

sunucunun çökmesi gibi) acil öneme sahipken ya da ödeme sisteminde yaşanan büyük aksaklıklar olabiliyorken bazısı ise daha çok görsel ya da deneyimle ilgili küçük öneriler. 


Örneğin şu üç mesajı ele alalım; 


"Eyvah, sunucu çöktü! Sistem tamamen durmuş durumda, hemen müdahale etmeliyiz."


"Rapor ekranındaki tarih filtresi çalışmıyor, bazı kullanıcılar doğru veri alamıyor."


"Menü rengini biraz daha pastel yapabilir miyiz, kullanıcılar için daha yumuşak olur." 


Aslında bu mesajların hepsi farklı öncelik değerlerine sahip. İlk mesajda acilen çözülmesi gereken kritik bir durum varken; üçüncü mesaj daha az önceliğe sahip bir mesaj olarak görünüyor. 


Destek ekibi olarak bu kadar çok sayıda gelen mesajları teker teker okuyup analiz etmek ve önceliklendirme yapabilmek hem olağanüstü bir hız gerektiriyor hem de hata yapmadan doğru önceliklendirme sırasına göre geri dönütlerin verilemsi gerekiyor, aksi halde kritik bir sorun gözden kaçabilir ve bu da müşteri memnuniyetnin düşmesine sebebiyet verebilir. 


İş yoğunluğu arttıkça insan faktörüne bağlı hatalar da kaçınılmaz hale gelir, bazı acil mesajlar gözden kaçabilir, bazı mesajlarsa gereksiz yere “acil” olarak önceliklendirilir, bu da hem zaman kaybına hem de kaynakların yanlış kullanılmasına yol açabiliyor. 


İşte tam bu noktada Doğal Dil İşleme (NLP) ve Denetimli Öğrenme yöntemleri ile destek mesajlarını otomatik analiz edip, önceliklendirecek bir sistem devreye giriyor. 


Burada amacımız destek ekibinin iş yükünü azaltarak hem iş süreçlerini hızlandırmak ve hata riskini minimuma indirmek. 



Problem Tanımı: 


Destek mesajlarının metin içeriğine bakarak aciliyet derecesinin sınıflandırılması. Önceliklendirme için gerekli etiket bildirimleri: 


  • Low: Estetik geri bildirimler, menü renkleri, küçük iyileştirme istekleri. 
  • Medium: Uygulama içi hatalar, kullanıcı deneyimini etkileyen ama sistemsel risk yaratmayan problemler. 
  • High: Sistem çökmesi, ödeme hataları, kullanıcıların işlemlerini engelleyen kritik sorunlar. Bu tarz problemler daha çok, klasik çok sınıflı (multi-class) sınıflandırma problemidir. 


Kullanılacak Bazı Araçlar ve Teknolojiler: 


  • Python 3.x 
  • Pandas (veri işleme) 
  • Scikit-learn (modelleme ve metrikler) 
  • NLTK (doğal dil işleme) 
  • Matplotlib / Seaborn (veri görselleştirme) 


Simüle Edilmiş Veri Seti 


Gerçek müşteri mesajları gizli olabileceği için kendi örnek veri setimizi oluşturuyoruz. 


Önce kütüphane kurulumunu yapalım; 

pip install nltk 


Daha sonra;


Şimdi prototipini geliştirip modelimizi test edeceğiz. 


Veri Önişleme ve Temizleme 


Metnimiz doğal dil içeriyor, bu sebeple model kullanımı için çok karmaşık ve gürültülü, öncelikle metinleri temizlememiz gerek. 


Yapılacak işlemler: 


-Küçük harfe çevirme (case normalization) 

-Noktalama işaretlerini temizleme 

-Gereksiz kelimeler (stopwords) çıkarma 

-Kelimelerin kök veya temel haline (lemmatize) getirme



Terminal Çıktısı:



Bu işlemi yapma sebebimiz, ham metinde çok fazla gereksiz kelime, noktalama işaretleri ve farklı biçimlerde yazılmış kelimelerin bulunmasıydı. Bu durum modelin öğrenmesini zorlaştırır çünkü model gereksiz bilgiyle karışık veriyle karşılaşır ve asıl önemli kelimeleri ayırt etmekte zorlanır. Ayrıca; aynı kelimenin farklı şekillerde yazılması (örneğin çoğul, çekimli ya da farklı eklerle) modelin kelimeyi doğru şekilde öğrenmesini engeller. Bu yüzden temizleme işlemi, modelin daha hızlı ve doğru öğrenmesini sağlar. 


TF-IDF ile Özellik Çıkarımı 


Model doğrudan metin üzerinde çalışmaz önce sayısal verilere ihtiyaç duyar. 


TF-IDF (Term Frequency - Inverse Document Frequency), her kelimenin o dokümandaki önemi ile tüm belgelerdeki yaygınlığı arasındaki dengeyi hesaplayarak, kelime bazlı sayısal vektörler oluşturur. 



Burada fit_transform() fonksiyonu, hem kelimelerin tüm dokümanda hangi sıklıkta geçtiğini öğrenir (fit) hem de metinlerimizi TF-IDF vektörlerine dönüştürür (transform) 


Sonuç olarak, X matrisi her satırı bir müşteri mesajını, sütunları ise kelimeleri temsil eden sayısal bir matris olur ve her hücrede o kelimenin o mesajdaki TF-IDF değeri bulunur. 


Model Seçimi ve Eğitimi 


Bu aşamada kullan kolaylığı olan etkili bir model seçiyoruz: Logistic Regression. Bu modeli seçme nedenimiz hem hızlı çalışabilir olması hem de bize yorumlanabilir sonuçlar sunması, üstelik Logistic Regression; çoğu metin sınfılandırma probleminde de oldukça başarılı olmuş bir modeldir. 



Burada classification_report, precision, recall, f1-score gibi detaylı metrikler sunar. confusion_matrix ise hangi sınıfların birbirine karıştığını gösterir. 



Sonuçları Yorumlama 

Logistic Regression, kelimelere verdiği ağırlıklarla modelin hangi kelimeleri öncelikli gördüğünü açığa çıkarır.


Ekran çıktısı şu şekilde; 



Modelimizin hangi kelimeleri hangi sınıflar için önemli gördüğüne baktığımızda bazı anlamlı örüntüler ortaya çıkıyor: 


Low sınıfı için öncelikli kelimeler genellikle tasarım ve kullanıcı deneyimiyle ilgili kelimeler: animasyonlar, yumuşatılmalı, ikonlar, rehber, mobil, bilgilendirici gibi kelimeler bulunuyır. Bu da modelin, düşük öncelikli mesajları tasarım/arayüzle ilgili şikayetler olarak algıladığını gösteriyor. 


Medium sınıfı için önemli kelimeler biraz daha teknik sorunlara işaret ediyor: fotoğraf, bildirimler, gecikmeli, yanlış, tarih, ekran, hesap, profil gibi ifadeler, işlevsel ama kritik olmayan hata ve gecikmelerle ilişkili konular, bu da modelin orta öncelikli mesajları fonksiyonel aksaklıklar olarak tanımladığını doğruluyor. 


High sınıfı için ise kritik ve acil durumları belirten kelimeler öne çıkıyor: kilitleniyor, kullanıcılar, hesaplar, hata, performans, sistem, kritik. Bunlar sistemin çökmesi, performans

düşüklüğü ve kritik hatalar gibi yüksek öncelik gerektiren durumlar için modelin kelime ağırlığı verdiğini gösteriyor. 


LSTM ile Derin Öğrenme 


LSTM (Long Short-Term Memory) modelleri, kelimelerin sırasını ve bağlamını dikkate alan özel RNN (Recurrent Neural Network) yapılarıdır, bu sayede metinlerdeki anlamsal ilişkileri çok daha iyi yakalayabilir ve daha başarılı sınıflandırma sonuçları elde edebiliriz. 


Neden LSTM?

 

-TF-IDF kelimeler arasındaki bağlamları dikkate almaz fakat sadece kelimelerin sıklığını ve önemini sayısal olarak verir 


-LSTM, kelime dizilerini işlemeye uygundur ve anlam ilişkilerini öğrenebilir. 


Bu sayede, "ödeme hatası" ve "hatalı ödeme" gibi benzer anlamlı ifadeleri daha iyi kavrayabilir.

 

Ancak, LSTM modelleri büyük veri gerektirir, genellikle binlerce, on binlerce örnekle etkili olur. 


Hesaplama kaynakları (GPU) kullanılması gerekir, eğitim süresi uzundur. Model kurulumu, parametre ayarları ve optimizasyon daha karmaşıktır. Gelin örnek bir Tensorflow/Keras kodu üzerinden bir LSTM modeli kurup eğitebiliriz: 


Öncelikle gerekli kütüphane kurulumuyla başlayalım; 


pip install tensorflow 


import tensorflow as tf 

from tensorflow.keras.preprocessing.text import Tokenizer from tensorflow.keras.preprocessing.sequence import pad_sequences from tensorflow.keras.models import Sequential 

from tensorflow.keras.layers import Embedding, LSTM, Dense 


# Metinlerin tokenize edilmesi 

tokenizer = Tokenizer(num_words=5000

tokenizer.fit_on_texts(veri['temiz_metin']) 

sequences = tokenizer.texts_to_sequences(veri['temiz_metin']) X = pad_sequences(sequences, maxlen=100


# Etiketlerin hazırlanması

y_map = {'low': 0, 'medium': 1, 'high': 2

y = veri['etiket'].map(y_map).values 


# LSTM modeli 

model = Sequential([ 

 Embedding(input_dim=5000, output_dim=64, input_length=100),  LSTM(64), 

 Dense(3, activation='softmax'

]) 


model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy']) 

model.summary() 


# Model eğitimi 

model.fit(X, y, epochs=10, batch_size=32, validation_split=0.2


Epoch 1/10 

- loss: 1.05 - accuracy: 0.50 - val_loss: 0.90 - val_accuracy: 0.60 

Epoch 2/10 

- loss: 0.85 - accuracy: 0.65 - val_loss: 0.75 - val_accuracy: 0.65 

... 

Epoch 10/10 

- loss: 0.30 - accuracy: 0.90 - val_loss: 0.35 - val_accuracy: 0.85 


Bu çıktılar, modelin zamanla hata oranını azaltıp doğruluğunu artırdığını gösterir.

Validation metrikleri ise modelin yeni verilere ne kadar iyi genelleme yaptığını anlamamızı sağlar. 


-model.fit(X, y, epochs=10, batch_size=32, validation_split=0.2): 


Modelin eğitimi sırasında her epoch sonunda şu metrikleri görürüz: 


loss: modelin hata oranı, ne kadar küçük olursa o kadar iyi. 


accuracy: eğitim verisi üzerindeki doğruluk oranıdır 


val_loss: Doğrulama (validation) verisi üzerindeki hata oranı. 


val_accuracy: Doğrulama verisi üzerindeki doğruluk oranı.


Bu yazımızda müşteri destek mesajlarının önceliklendirilmesi problemini, doğal dil işleme ve denetimli öğrenme teknikleriyle ele aldık. 


Veri ön işleme aşamasından başlayarak, TF-IDF tabanlı özellik çıkarımı ve Logistic Regression modeliyle hızlı ve yorumlanabilir bir sınıflandırma gerçekleştirdik. Modelimizin hangi kelimelere ağırlık verdiğini analiz ederek, sınıflar arasındaki anlamlı ayrımları gözlemledik. 


Ve ayrıca, kelime sırasını ve bağlamını yakalayabilen LSTM gibi derin öğrenme modellerinin bu problemde daha etkili olabileceğini ancak bunun daha fazla veri ve hesaplama kaynağı gerektirdiğini detaylı şekilde incelemiş olduk. 


Gerçek dünyada bu tür sistemler, destek ekiplerinin iş yükünü azaltmak, süreçleri hızlandırmak ve müşteri memnuniyetini artırmak için önemli araçlardır. 


Gelecekte daha büyük ve dengeli veri setleriyle, gelişmiş modeller ve model optimizasyonlarıyla bu alandaki çözümler daha da güçlenecektir.


Sevgi TARGAY

|

31 Mart 2026