Lei Feng Net Not: Bu makale, Lei Feng'in altyazı grubu tarafından derlenen teknik bir blogdur, orijinal başlık Scikit-Learn ile Çok Sınıflı Metin Sınıflandırmasıdır ve yazar Susan Li'dir.
Tercüme | Zhu Yin Bitti | Yuhang MY
İş alanında birçok metin sınıflandırma uygulaması vardır.Örneğin, haberler genellikle konulara göre sınıflandırılır; içerik veya ürünler genellikle etiketlenir; kullanıcılar, çevrimiçi olarak ürünler veya markalar hakkında nasıl konuşulacağına göre destekçilere ayrılır.
Bununla birlikte, çoğu metin sınıflandırma makalesi ve çevrimiçi öğretici, spam filtreleme (spam'e karşı ham), duyarlılık analizi (pozitif ve negatif) gibi ikili metin sınıflandırmasıdır. Çok sayıda durumda, gerçek dünyadaki sorunlarımız bunlardan çok daha karmaşıktır. Bu nedenle, bugün yapacağımız şey bu: tüketici mali şikayetlerini önceden tanımlanmış 12 kategoriye ayırın. Bu veriler data.gov adresinden indirilebilir.
Bir makine öğrenimi bileşeni olarak Scikit-Learn'e güvenerek sistemimizi geliştirmek için Python ve Jupyter Notebook'u kullanıyoruz. PySpark'ta uygulamayı görmek istiyorsanız, lütfen sonraki makaleyi okuyun.
Problem oluşumu
Sorunumuz denetimli bir metin sınıflandırma problemidir. Amaç, sorunu çözmek için hangi denetimli makine öğrenimi yönteminin en uygun olduğunu araştırmaktır.
Yeni bir şikayetin gelmesi göz önüne alındığında, bunu 12 kategoriye ayırmak istiyoruz. Sınıflandırıcı, her yeni şikayetin bir ve yalnızca bir kategori olarak sınıflandırılmasına izin verir. Bu çok sınıflı bir metin sınıflandırma problemidir. Ne yaptığımızı görmek için sabırsızlanıyorum.
Veri tarama
Makine öğrenimi modellerini eğitmeye yatırım yapmadan önce, öncelikle bazı örneklere ve her kategorideki şikayetlerin sayısına bakmalıyız:
Şekil 1
Bu proje için sadece 2 sütuna ihtiyacımız var: "Ürün" ve "Tüketici Şikayet Beyanı".
giriş : Consumer_complaint_narrative
Örnek: "Kredi raporumda güncel olmayan bilgiler var. Kredi raporuyla ilgili bir ihtilafım var. Bu bilgi kaydı silinmeli. Bilgiler 7 yıldan daha önce ve kredi raporunun gerekliliklerini karşılamıyor."
Çıktı :ürün
Örnek: Kredi raporu
Tüketici şikayeti bildirimi sütunundaki atanmamış olanları sileceğiz ve ürünü bir tamsayı değeri olarak derlemek için bir sütun ekleyeceğiz, çünkü sınıflandırma özniteliği değişkeni için bir tamsayı kullanmak genellikle bir dizeden daha iyidir.
Ayrıca ileride kullanılmak üzere birkaç sözlük oluşturduk.
Temizledikten sonra, kullanmak istediğimiz ilk 5 veri satırı:
şekil 2
Dengesiz sınıflandırma
Her ürün için şikayet değerlerinin dengeli olmadığını görüyoruz. Tüketici şikayetleri çoğunlukla borç tahsilatı, kredi raporları ve ipotekler hakkındadır.
resim 3
Problemlerle karşılaştığımızda, bunları çözmek için standart algoritmalar kullanırız. Geleneksel algoritmalar genellikle sınıflandırmaların çoğuna eğilimlidir ve veri dağılımını dikkate almaz. En kötü durumda, birkaç kategori aykırı olarak kabul edilir ve göz ardı edilir. Dolandırıcılık tespiti ve kanser tahmini gibi bazı örneklerde, modelimizi dikkatlice kurarız veya her bir sınıfın altını çizerek ve yüksek hızda örnekleyerek veri setini manuel olarak dengeleriz.
Ancak, dengesiz öğrenme verisi durumumuzda, azınlık kategorilerine odaklanacağız. Çoğu sınıflandırmada yüksek doğruluğa sahip bir sınıflandırıcı tatmin edicidir. Bununla birlikte, azınlık sınıflandırmaları için de makul doğruluk korunmalıdır. Öyle olsun.
Metinsel ifade
Sınıflandırıcılar ve öğrenme algoritmaları, metin dosyalarını orijinal biçimlerinde doğrudan işleyemezler.Bunların çoğu, değişken uzunluklara sahip orijinal metin dosyaları yerine sabit boyutlu dijital özellik vektörleri gerektirir. Bu nedenle, ön işleme aşamasında metin daha iyi işlenen bir ifadeye dönüştürülecektir.
Metinden özellikleri çıkarmanın yaygın bir yöntemi, bir kelime dağarcığı modeli çantası kullanmaktır: bizim durumumuzda her belge için şikayet beyanı, kelime haznesinin sunumu (genellikle sıklık) dikkate alınacak, ancak bu kelime dağarcığının göründüğü sıra Görmezden gelinir.
Özellikle veri setimizdeki her bir terim için terim frekansı adı verilen bir ölçüm yöntemi hesaplayacağız. Ters belge frekansı, tf-idf olarak kısaltılır. Her tüketici şikayeti ifadesi için bir tf-idf vektörü hesaplamak için sklearn.feature_extraction.text.TfidfVectorizer kullanacağız:
Frekans için bir algoritma biçimi kullanmak için sublinear_df öğesini True olarak ayarlayın.
min_df, saklanması gereken bir kelimenin bulunması gereken minimum belge sayısıdır.
Norm, özellik vektörümüzün Öklid standardı 1'e sahip olmasını sağlamak için l2 olarak ayarlanmıştır.
ngram_range, hem tekli hem de ikili gramerleri dikkate aldığımızı belirtmek için) (1,2) olarak ayarlanmıştır.
Parazit özelliklerinin sayısını azaltmak için aynı zamirleri ("a", "the", ...) kaldırmak için stop_words'ü "english" olarak ayarlayın.
(4569, 12633)
Şimdi, her 4,569 tüketici şikayeti ifadesi, farklı tekli ve ikili dilbilgisi tf-idf puanlarını temsil eden 12.633 özellik ile temsil edilmektedir.
Her ürün için en alakalı terimleri bulmak için sklearn.feature_selection.chi2'yi kullanabiliriz:
# "Banka hesabı veya hizmeti":
. En alakalı tek dil grameri:
. Banka
. Kredili mevduat
En alakalı ikili dilbilgisi:
. Kredili mevduat ücretleri
. hesap kontrol ediliyor
# 'Tüketici kredisi':
.: En alakalı tek dilbilgisi:
. Araba
Araç
En alakalı ikili dilbilgisi:
. Araç xxxx
Toyota Otomobil Finansmanı
# 'kredi kartı':
. En alakalı tek dil grameri:
Citibank
. Kart
En alakalı ikili dilbilgisi:
. yıllık ücret
. kredi kartı
# 'Kredi raporu':
. En alakalı tek dil grameri:
. Experian
Aquifax
En alakalı ikili dilbilgisi:
. Trans Alliance
. Kredi raporu
# "Borcu geri isteyin":
. En alakalı tek dil grameri:
. Toplamak
Borç
En alakalı ikili dilbilgisi:
. Borç talep edin
. Talep ajansı
# 'Aktar':
. En alakalı tek dil grameri:
Batı Birliği
.paypal
. Aktar
# 'ev ipotek kredisi':
. En alakalı tek dil grameri:
. Değiştir
. ev ipotek kredisi
En alakalı ikili dilbilgisi:
. İpotek şirketi
. Kredi Değişikliği
# "Diğer finansal hizmetler":
. En alakalı tek dil grameri:
. Oral
Pasaport
En alakalı ikili dilbilgisi:
Ödemeye yardımcı olun
. Ödeme gerekli
# 'Kredi ödeme günü':
. En alakalı tek dil grameri:
. Borç para
. Ödeme günü
En alakalı ikili dilbilgisi:
. Ana bölüm
. Kredi ödeme günü
# 'Ön ödemeli kart':
. En alakalı tek dil grameri:
. Hizmet
. Ön ödemeli
En alakalı ikili dilbilgisi:
. Kazanılan para
. Ön ödemeli kart
# 'Öğrenci kredisi':
. En alakalı tek dil grameri:
Öğrenci
. navient
En alakalı ikili dilbilgisi:
. Öğrenci kredileri
. Öğrenci kredileri
# 'Sanal para birimi':
. En alakalı tek dil grameri:
. uğraşmak
. https
En alakalı ikili dilbilgisi:
. xxxx sağlayıcı
Para ihtiyacı
Bunların hepsi mantıklı, değil mi?
Çok seviyeli kategori sınıflandırıcı: özellikler ve tasarım
Denetimli bir sınıflandırıcıyı eğitmek için önce "tüketici şikayeti bildirimini" dijital bir vektöre dönüştürüyoruz. TF-IDF ağırlık vektörüne benzer bir vektör gösterimi geliştirdik.
Metnin vektör temsilini aldıktan sonra, görünmez "tüketici şikayeti beyanı" nı eğitmek ve "ürünün" hangi kategoriye gireceğini tahmin etmek için denetimli bir sınıflandırıcı eğitebiliriz.
Yukarıdaki tüm veriler dönüştürüldükten sonra, şimdi tüm özelliklere ve etiketlere sahibiz, sınıflandırıcıyı eğitmenin zamanı geldi. Bu tür problemler için kullanabileceğimiz birçok algoritma mevcuttur.
Naive Bayes sınıflandırıcı: En uygun kelime hesaplaması polinom değişkenleridir:
Eğitim ayarlarını yapılandırdıktan sonra bazı tahminler yapalım.
Şekil 4
Şekil 5
Fena değil!
Model seçimi
Artık test etmek, doğruluğunu değerlendirmek ve olası sorunların kaynağını bulmak için farklı makine öğrenimi modellerini kullanabiliriz.
Test için aşağıdaki dört modeli kullanacağız:
Lojistik regresyon
(Çoklu) Naif Bayes
Doğrusal destek vektör makinesi
Rastgele orman
Şekil 6
model adı
DoğrusalSVC: 0.822890
LogisticRegression: 0.792927
Çok terimli NB: 0.688519
RandomForestClassifier: 0.443826
İsim: doğruluk, dtype: float64
Doğrusal destek vektör makinesi ve lojistik regresyon diğer iki sınıflandırıcıdan daha iyi performans gösterir.Doğrusal destek vektör makinesinin küçük bir avantajı vardır, yaklaşık% 82 doğruluk oranına sahiptir.
Model değerlendirmesi
En iyi modelimizle (doğrusal destek vektör makinesi) devam ederek, tahmin edilen ve gerçek etiketler arasındaki farkı göstermek için kafa karışıklığı matrisine bakıyoruz.
Şekil 7
Çoğu tahmin çapraz çizgilerle sonuçlanır (tahmin edilen etiketler = gerçek etiketler), ki bu tam olarak istediğimiz şeydir. Ancak yine de birçok yanlış sınıflandırma var. Bunlara neyin sebep olduğunu görmek ilginç olabilir:
Figür 8
Resim 9
Gördüğünüz gibi, bazı yanlış sınıflandırılmış şikayetler birden fazla konuyla ilgilidir (örneğin, kredi kartları ve kredi raporlarıyla ilgili şikayetler). Bu tür bir hata her zaman olacaktır.
Ardından, her kategori için en alakalı terimleri bulmak için ki-kare testini kullanırız:
# "Banka Hesap Numarası ve Hizmetler":
. En yüksek tek dil dilbilgisi:
. Banka
. Hesap
. En yüksek ikili semantik:
. banka kartı
. Kredili mevduat ücretleri
# 'Tüketici kredisi':
. En yüksek tek terimli semantik:
Araç
. küçük bir araba
. En yüksek ikili semantik:
. bireysel kredi
. Geçmiş xxxx
Bul
Keşif Kartı
# "Kredi":
. xxxx hesabı
. Trans Alliance
# "Borcunuzu Geri Alın":
. Kredi hesabı
. zaman sınırı
Çevirin.
. Para göndermek
. alıkoyma
Ev İpotek Şirketi
. Kredi
# 'Ön ödemeli kart':
. Kartı Kullan
. denizcilik kredisi şirketi
Salima-Öğrenci Kredi Piyasası Derneği
# 'Sanal para birimi':
. Tek terimli semantiğe kadar:
. https
. tx
. En yüksek ikili semantik:
Para ihtiyacı
. xxxx sağlayıcı
Bunlar beklentilerimiz doğrultusunda.
Son olarak, her kategori için bir sınıflandırma raporu yazdırıyoruz:
Resim 9
Kaynak kodu Github'da bulunabilir ve geri bildirimlerinizi ve sorularınızı dört gözle bekliyoruz.
Orijinal bağlantı: https://towardsdatascience.com/multi-class-text-classification-with-scikit-learn-12f1e60e0a9
Lei Feng Ağı Lei Feng Ağı