Sayfalar

Cuma, Ağustos 30, 2019

FastText ile hızlı metin sınıflandırma - 2

Metin sınıflandırma için öncelikle bir veri seti bulmamız gerekiyor biz bu yazımız için dbpedia veri kümesini kullanacağız. Sizde uygulama istiyorsanız aşağıdaki linkden indirebilirsiniz


Veri Kümesinin açıklamasını okuyoruz.
...
The DBpedia ontology classification dataset is constructed by picking 14 non-overlapping classes from DBpedia 2014. They are listed in classes.txt. From each of thse 14 ontology classes, we randomly choose 40,000 training samples and 5,000 testing samples. Therefore, the total size of the training dataset is 560,000 and testing dataset 70,000.
...
Yani DBpedia 2014 den çekilmiş  14 değişik sınıfa ait yazılar başlık + içerik olarak toplanmış.  Her sınıf için eğitimde 40 bin  test veri seti için 5 bin örnek kaydedilmiş. DBpedia  wikipedia da üretilmiş içeriklerin yapısal bir şekilde derlenip torpalanmış halidir diyelim. DBpedia hakkında daha fazla bilgi için sitesine gidebilirsiniz. Belkide size lazım olan veri kümesini bu şekilde temin edebilirsiniz...


Açıklamanın tamamını veri kümesini indirip açtığınızda "readme" belgesinden okuyabilirsiniz

veri kümemiz sıkıştırılmış dosya olarak geliyor bulunduğumuz dizine açınca  "dbpedia_csv" isimli bir dizine açılıyor

Sınıf isimlerimizi okuyoruz



Şirket , eğitim kurumu, vs diye başlayan 14 başlık var. Başlıkları ayrı yazmışlar çünkü veri kümelerinde  yani "dbpedia_csv/train.csv" ve "dbpedia_csv/test.csv" de sınıf isimleri 1 den başlayan sayı olarak yazılmış



FastText eğitim için veri kümesinin bir metin dosyası halinde verilmesini istiyor. İstediği Format ise  her satırda bir veri birimi  başta  "__label__" a hangi sınıf sa onu yazıyoruz sonrasında boşluk ve  virgül  ile ayrıp satırın devamında  o sınıfa ait bir metin yazıyoruz.  Bizim metin kısmı başlık ve açıklamda olarak iki parçalı geldiğinden birleştiriyoruz.  Etiket olarak yukarıda okuduğumuz sınıf isimlerini kullanıyoruz. Metin verisinde yaptığımız tek işlem ise küçük harfe çevirmek. Veriler sıralı şekilde verilmiş, bizde karışmadan aynı şekilde FastTextin istediği formata çevirip yazıyoruz



aynı işlemi test verisi içinde yapıyoruz.


Evet artık 'dbpedia.train' ve 'dbpedia.test' diye 2 dosyamız oldu içine bakıyoruz



Bu aşamadan sonra sıra geliyor FastText'e.  İki şekilde kullanmak mümkün FastText'i derleyip komut satırından çağırmak , yada Python paketi olarak kurup onu kullanmak. FastText ilk çıktığında python paketi yoktu ve bizde bu eğitim işinde parametere ayarlarını kolay yapabilmek için bir GUI yazdık. Ve halende kullanıyoruz. Fakat malesef kod python2 de kaldı python3 e taşımaya fırsat ve gerek bulamadık daha kullanmak için python2 , pyside , pygal, paketleri gerekiyor. 
Görünümü şu şekilde ;



FastText i kullandığından kelime vektörü  hesabı içinde kullanılabilir elbette ama bizim şu anki önreğimiz metin sınıflandırma olduğundan command kısmında "supervised" seçeneğine ayarlıyoruz. TextFile kısmına eğitim veri kümemiz için hazırladığımız dosyayı seçiyoruz.   
Model File kısmında Eğitim sonrası eğitilen modelin ismini belirliyorsunuz. 
Sağ üstteki Play tuşu ile eğitimi başlatabiliyorsunuz. En sağdaki Dur işaretide durdurmak için
Altta Learning Rate  ile başlangıç öğrenme hızını belirliyorsunuz
Epoch Diğer makina öğrenme metodlarından bildiğiniz gibi eğitim kaç adım yapılacağı
En az kaç defa geçen kelimenin alınacağı, karekter ngramlarında hangi aralığın kullanılacağı, kelime ngramı kaçlık kullanılacağı vs gibi pek çok seçenek var. Ayarlı seçenekler ile başlayıp denemeler yapmak gerekiyor.

Eğitim bitince eğitim veri kümesinin ismi aynı uzantısı .test olan bir dosya varsa eğitilmiş model ile bu test dosyası çalıştırılıp sonuçda veriyor







Resimden de göreceğiniz üzere
  • precision: kesinlik    0.983
  • recall: duyarlılık   0.983
değerlerine ulaşttık ki gayet güzel sonuçlar

Eğitim sonunda  Loss  değerinin düşüşünüde grafik olarak alabiliyorsunuz.




Eğitim sonucunda uzantısı bizim belirlediğimiz isimde
uzantısı .bin  olarak model dosyası
uzantısı .vec  olarak kelime vektörelrinin tutulduğu dosya oluşturulur
FastTextGUI de bunlara ilaveten
uzantısı .log olan eğitim serencamını tutan dosya
uzantısı .svg olan  loss düşüş grafiğinin dosyasını oluşturur.


Eğittiğimiz modeli kullanmak için sadce uzantısı .bin olan dosya yeterli olmaktadır.

Eğittiğimiz modelin kullanımını bir sonraki yazımıza bırakıyoruz.  Yazı dizimiz bittiğinde bütün kodlar yayınlanacaktır.

Her türlü görüş ve önerilerinizi bekleriz.

Hiç yorum yok: