Tensorflow ile Türkçe Metin Sınıflandırma Nasıl Yapılır - Eksi Sozluk Örneği

Bu yazımızda Tensorflow ile nasıl metin sınıflandırma yapılır, ona bakacağız. Öncelikle metin sınıflandırma nedir ile başlayalım.


Metin Sınıflandırma kısaca verilen metinleri istenilen kategorilere ayırmaktır. Metin sınıflandırmanın birden fazla örneği vardır. 

  • İkili Metin Sınıflandırma (Binary)
    • Bu tür metin sınıflandırmada verilen metinler iki ayrı kategoriye ayrılır. Örnek olarak, tweetlerin pozitif ya da negatif bir söylem içerdiğini bulmak. 
  • Çoklu Metin Sınıflandırma (Multi-Class) 
    • Bu tür metin sınıflandırmada ise istenilen kategoriler birden fazladır. Bu yazıda da verilen metinleri 5 ayrı sınıfa ayıracağız.

Bu işlemleri yapabilmek için öncelikle elimizde etiketlenmiş bir veri olması gerekiyor. Ben "Web Scraping" metodu ile Ekşi Sözlükten 8000 adet veri çıkardım. Kaggle Sayfasından veriyi görebilirsiniz. Buradan ise veriyi nasıl çektiğimi görebilirsiniz. 

Şimdi kısaca yapmamız gerekenler
  • Veriyi okumak ve temizlemek
  • Tensorflow ile model oluşturmak
  • Oluşturduğumuz modeli eğitmek
Gerekli olan kütüphaneleri ekledikten sonra yapmamız gereken elimizde veriyi okumak ve temizlemek

Bu kod parçasında gerçekleşen işlemler sırayla
  • 1.satırda yapılan işlem dosyayı okumak
  • 4. ile 9. satırlar arasında olan işlem ise metindeki gereksiz boşlukları silmek
  • 11. ile 14. satırlar arasında ise noktalama işaretleri siliniyor.
  • 16. ile 18. satırlar arasında ise stop wordsler siliniyor. (çokça kullanılan ancak anlamı olmayan kelimeler (bir, ama, vs))
Şimdi dosyamızı okuyup temizlediğimize göre yapmamız gereken verimizi model için hazırlamak. 
Öncelikle kategorimizi sayıya çevirmemiz gerekiyor

Bu kodda sırayla yapılanlar:
  • 2. satırda kategorimizi numaraya çeviriyoruz.
  • 4. ile 7.satırlar arasında ise verimizi train ve test olarak ayırıyoruz.
  • 9.ile 10.satırlar arasında ise kategorimizi One-Hot-Encoding ile 5 boyutlu yapıyoruz. Bunu yapmamızın sebebi ise modelimizi train ederken kullanacağımız "categorical_cross_entropy" loss(kayıp) fonksiyonu.
Bu işlemlerden sonra metin (text) verimizi işlememiz gerekiyor. Bunun için
Bu kodda gerçekleşenler ise 
  • 1. ile 6.satırlar arasında Tokenizer için gerekli olan değişkenleri tanımlıyoruz.
    • vocab_size = kelime sayısı 
    • embedding_dim = embedding vektörlerinin boyutu
    • max_length = bir metin için almamız gereken maximum uzunluk
    • trunc_type = cümleyi nereden kesmemiz gerektiği
    • Bunların hepsine Tensorflow-Tokenizer bağlantısından bakabilirsiniz.
  • 8.satırda ise Tokenizerı bizim metin üzerinde işliyoruz.
  • 12. ile 16. satırlar arasında ise önceden ayırdığımız x_train ile x_test üzerinde bu tokenizerın işlem yapmasını sağlıyoruz.
Bu işlemlerden train_padded ve word_index'e örnek verirsek daha anlaşılır olacak.

Örnek olarak "Bu yazı çok bilgili" cümlesini ele alalım. Tokenizer bu yazıdaki her kelimeyi alıp onlara bir sayı ekler.
"Bu yazı çok bilgili" ---> 1 2 3 4 gibi olur.
Word index'de hangi kelimenin hangi sayıyı aldığını tutan bir dictionarydir.
word_index= {"Bu": 1, "Yazı": 2, "Çok": 3 , "Bilgili": 4}

Kısaca bu şekilde, kod üstünde denerseniz daha iyi anlarsınız.

Şimdi verilerimizi kurduktan sonra yapmamız gereken ise modelimiz oluşturmak ve bu modeli eğitmek.

Burada gerçekleşen olaylar ise
  • 1.satır ile 6.satır arasında modelimizi oluşturuyoruz.
    • Burada en önemli olan Embedding Layer. Bütün bu numaralandırılmış verilerden bir anlam çıkaracak olan layer bu
  • 7 ile 10. satır arasında ise modelimizi eğitiyoruz.
Modeli 20 epoch eğittikten sonra çıkan sonuçlar böyle
Accuracy: 0.80

Bence hiç kötü değil. Bütün bu kodların olduğu notebook'a bakmayı unutmayın. Varsa bir upvote alırım :)

Sağlıkla ve bilgiyle kalın. Bir sonraki yazımızda görüşmek üzere.

Yorumlar

Bu blogdaki popüler yayınlar

Decision Tree (Karar Ağacı) Nedir ve Nasıl Çalışır

Cross Validation Nedir, Nasıl Çalışır ve Mantığı Nedir

Lineer Regresyon Metodu (Linear Regression) Nedir, Nasıl Çalışır | Matematiksel Anlatımı