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

Birol Kuyumcu
4 min readAug 30, 2019

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ğ üsttekiPlay tuşu ile eğitimi başlatabiliyorsunuz. En sağdaki Dur işaretide durdurmak için
AlttaLearning 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

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.

Originally published at http://derindelimavi.blogspot.com.

--

--