| köpek midir? | hangi etkit ? | hangi etiketler? |
|---|---|---|
| Evet/Hayır ikili |
köpek/doğa/çimen çok sınıflı |
köpek,doğa,çimen çoklu etiket |
İkili sınıflandırma durumunda, sadece evet / hayır şeklinde bir soru sorarız. Birden fazla olası cevap varsa ve yalnızca bir tane seçilecekse, bu çok sınıflı bir sınıflandırmadır. Örneğimizde gerçekten yalnızca bir etiket seçemiyoruz, hepsinin fotoğrafla eşleştiğini söyleyebiliriz. Çoklu etiket sınıflandırmasının amacı, tek bir örnek için bir dizi ilgili etiket atamaktır. Bununla birlikte, yaygın olarak bilinen algoritmaların çoğu tek sınıflı sınıflandırma problemleri için tasarlanmıştır. Bu makalede, scikit-multilearn kütüphanesinde bulunan çoklu etiket sınıflandırması ve keras kütüphanesi kullanılarak bu problem hem makine öğrenmesi hem de derin öğrenme ile anlatılacak.
Çoklu etiket sınıflandırma problemini çözmek için birden fazla yaklaşım bulunmakta:
- Problem dönüştürme yöntemleri (problem transformation methods), çoklu etiket problemini bir veya daha fazla geleneksel tekli etiket problemine böler.
- Problem uyarlama yöntemleri (problem adaptation methods), çoklu etiketli verilerle doğrudan başa çıkmak için tekli etiketli sınıflandırma algoritmalarını genelleştirir.
- Topluluk yöntemleri (ensemble methods), önceki iki yaklaşımdan da faydalanarak bir çözüm üretir.
Bu eğitim blogunda problem dönüştürme yöntemleri altında Etiket Gücü Kümesi, her kombinasyonu benzersiz bir kombinasyon numarasıyla eşler ve sınıflandırıcıyı çok sınıflı sınıflandırıcı ve kombinasyon numaralarını da sınıf olarak kullanarak çok sınıflı sınıflandırma gerçekleştirir.
Etiket Gücü Kümesi kullanma
Avantajları
- etiket korelasyonları dikkate alınır
Dezavantajları
- yüksek hesaplama karmaşıklığına sebep olur
- birkaç örnekle ilişkili birden fazla sınıfla dengesiz veri kümesine yol açabilir
Şu ana kadar en son teknoloji (state-of-the-art) çözümlerin pabucunu dama atacak olan derin öğrenme yöntemlerinin boy göstermesi ile doğaş dil işleme (NLP) algoritmaları altın çağına girmiştir.
Derin öğrenme, doğal dilin çoklu temsil seviyelerini öğrenmenin birçok faydasını getirir.
NLP problemleri için derin öğrenmeyi kullanmanın birçok faydası vardır:
-
Verilerden veya problemden doğrudan sınıflandırıcı türetilebildiği gibi, el yapımı bir özelliğin eksikliğini veya aşırı spesifikasyonunu da iyileştirir.
-
Özelliklerin elle çıkartılması genellikle çok zaman alır ve her görev veya etki alanına özgü sorun için tekrar tekrar çıkartılması gerekebilir. Bir alandan öğrenilen özellikler genellikle diğer alanlara veya etki alanlarına karşı çok az genelleme yeteneği gösterir. Aksine, derin öğrenme verilerden gelen bilgileri ve bir çok seviyede temsili öğrenir, burada alt seviye, doğrudan veya ince ayardan sonra diğer alanlar tarafından kullanılabilen daha genel bilgilere karşılık gelir.
Sınıfların özelliklerine tamamen ayrık gibi davranmayan modeller ile öğrenmek, en yakın komşu veya kümeleme benzeri modellere göre çok daha verimli olabilir. Kelimeler bağımsız olarak ele alındığında, NLP sistemleri inanılmaz derecede kırılgan olabilir. Bu benzerlikleri sonlu bir vektör uzayında yakalayan dağılımsal temsil, bu yazıda anlatılacak NLP sistemine daha karmaşık akıl yürütme ve bilgi türetme fırsatı sağlar.
Öğrenme güdümsüz yapılabilir. Mevcut veri ölçeği göz önüne alındığında, güdümsüz öğrenmeye büyük bir ihtiyaç vardır. Birçok pratik durumda etiket elde etmek genellikle gerçekçi değildir. Derin öğrenme çoklu temsil seviyelerini öğrenir.
Bu derin öğrenmenin en önemli avantajlarından biridir, öğrenilen bilgiler kompozisyon yoluyla seviye bazında inşa edilir. Daha düşük temsil düzeyi genellikle görevler arasında paylaşılabilir. İnsan dilinin özyinelemesini doğal olarak ele alır. İnsan cümleleri belirli bir yapıya sahip kelimelerden ve ifadelerden oluşur. Derin öğrenme, özellikle tekrarlayan sinir ağları, dizi bilgisini çok daha iyi bir şekilde yakalayabilir.
Dikkat mekanizmaları ile birlikte hangi kelimelerin sonucun üretilmesinde daha etkili olduğuna karar verip ona göre o kelimelerin ağırlıklarını günceler. Ayrıca görselleştirmeye izin vererek modelin kararlarının daha anlaşılır olmasını sağlayan bir tekniktir.
Bunu okuyabilirsiniz https://www.aclweb.org/anthology/P16-2034.pdf
Ürettiğimiz modelin mimarisi aşağıdaki gibidir:
Kullanılan matrix boyutları:
Bu eğitici blogda, kodları kendi verimizi kullanarak tasarladık, siz de kodları denemek/geliştirmek için kendi kodlarınızı veya aşağıda paylaştığımız açık kaynak veri setlerini kullanabilirisiniz:
-
[CMU Film Özeti Corpus açık veri kümesi] (http://www.cs.cmu.edu/~ark/personas/data/MovieSummaries.tar.gz)
-
[Youtube Tocsix Veri Kümesi] (https://www.kaggle.com/c/jigsaw-toxic-comment-classification-challenge/data)
Müşteri geri bildirimlerinden toplanan verilerimiz 17979 içerik ve 5 etiketten oluşmaktadır, etiketler aşağıdaki gibidir.
- kalite
- tavır ve davranış
- geri bildirim
- kullanım
- fiyat
| text | Fiyat | Geri Bildirim | Kullanım | Tavır ve davranış | Kalite | |
|---|---|---|---|---|---|---|
| 1 | aracımdaki problemlerin çözülmesinde yadsınmayacak büyüklükte emeği ve ilgisi olan Çorlu bayi satış elemanı | 0 | 0 | 0 | 1 | 0 |
| 2 | çok elektronik arıza Borusan dışındaki servislerin köhne işten anlamaz yetersiz sanayii dükkanları olması | 0 | 0 | 0 | 0 | 1 |
| 3 | [MARKA] kullanicisiyim hi̇ç bi̇r problem yaşamadim kendi̇mi̇ güvende ve cok rahat hi̇setti̇gi̇m i̇çi̇n. | 0 | 0 | 0 | 0 | 1 |
| 4 | servis ücretleri biraz daha makul seviyelere çekilebilirse daha iyi olacaktır. | 1 | 0 | 0 | 0 | 0 |
| 5 | kaliteli hizmet ve güleryüzlü ilgili personel | 0 | 0 | 1 | 0 | 1 |
| 6 | [MARKA] aracımdan memnun olduğum için. | 0 | 1 | 0 | 0 | 0 |
| 7 | çok guzel araclar cok seviyorum | 0 | 1 | 0 | 0 | 0 |
| 8 | konfor guven bunlar yeterli. | 0 | 0 | 1 | 0 | 1 |
veriyi iki kısma bölelim, eğitim ve test:
- eğitim verisi: modele beslenecek olan veri
- test verisi: modelin doğruluğunu ölçmek için kullanılacak veri
from sklearn.model_selection import train_test_split
train, test = train_test_split(data, random_state=42, test_size=0.30, shuffle=True)
train_text = train['text'].values.astype('U')
test_text = test['text'].values.astype('U')
kelimeleri vektörlere dönüştürelim
from sklearn.feature_extraction.text import vectorizer = TfidfVectorizer(strip_accents='unicode', analyzer='word', ngram_range=(1,3), norm='l2', max_features = 10000)
vectorizer.fit(train_text)
vectorizer.fit(test_text)
X_train = vectorizer.transform(train_text)
x_test = vectorizer.transform(test_text)
etkitleri de ayrı alalım
y_train=train.drop(["text","label"],axis=1)
y_test=test.drop(["text","label"],axis=1)
Etiket Gücü Kümesi yaklaşımıyla Logistic Regression modülünü eğitelim
!pip install scikit-multilearn
!pip install scikit-learn
from sklearn.linear_model import LogisticRegression
from skmultilearn.problem_transform import LabelPowerset
from sklearn.metrics import f1_score,accuracy_score
lp_classifier = LabelPowerset(LogisticRegression())
lp_classifier.fit(X_train, y_train)
lp_predictions = lp_classifier.predict(x_test)
print("Accuracy = ",accuracy_score(y_test,lp_predictions))
print("F1 score = ",f1_score(y_test,lp_predictions, average="micro"))
modelimizi eğittiken sonra deneyebiliriz
def predict(text):
print("text -> ",text)
X=vectorizer.transform([text])
X_pred=lp_classifier.predict(X).toarray()
return [data.columns[i] for i,x in enumerate(X_pred[0]) if x==1]
text="araçım servise son getirmediğimde düzgün tamir edilmedi memnun değil"
predict(test_txt)
#text -> Araç servis son getir+Neg düzgü tamir et+Neg memnu değ
#['Ürün Kalitesi']
Daha once bahsi geçen mimariyi kullandığımızda ve dikkat mekanizması ile renklendirdiğimizde aşağıdaki gibi bir çıktı almaktayız.:
- Ayarlarını kendiniz belirleyebileceğiniz modüller oluşturabilirsiniz.
- Oluşturduğunuz modül üzerinde:
- Skorlama yönteminizi (terim frekansına göre, var olup olmama durumuna göre vs)
- Veri dağılımını hangi yöntemle ölçeceğinizi (ki kare, karşılıklı bilgi vs)
- Verileri bir metin için tek sınıfa mı birden çok sınıf atamasına mı izin vereceğinizi belirleyebilirsiniz.
- Modüle verilerinizi dosya olarak veya api üzerinden istediğiniz sınıflandırma bilgisi ve ek bilgilerle beraber yükleyebilirsiniz.
- Arayüz üzerinden verilerinizi eğittikten sonra genel veya kategori bazında
- Doğruluk, kesinlik, anma
- Anahtar kelimeler
- Karışıklık matrisi gibi istatistiksel bilgileri görüntüleyebilirsiniz.
- Test sekmesinden eğittiğiniz modüle metin yollayarak oluşan kategorileri ve hangi kategorilerin hangi oranlarla tahmin edildiğini gözlemleyebilirsiniz.
- Bunlara ek olarak veri analizi, kural ekleme, kategori düzenleme gibi pek çok manipülasyonu da arayüz üzerinden kolaylıkla yapabilirsiniz.









