Skip to content

Recurrent Neural Network kullanımı ile farklı yazılı sanat alanlarında doğal dil üretimi gerçekleştiren bir çalışma.

License

Notifications You must be signed in to change notification settings

ardauzunoglu/sanatkar.ai

Repository files navigation

sanatkar.ai

sanatkar.ai, çeşitli yazılı sanat dallarında (şu anlık şarkı, şiir ve tiyatro) doğal dil üretmek amacıyla karakter tabanlı tahmin işlemleri gerçekleştiren çok katmanlı LSTM bazlı RNN modelleri kullanan bir Türkçe doğal dil işleme uygulamasıdır.

sanatkarai.com

README.md İçeriği

RNN Modelleri
Kullanılan Veri Setleri
Gereklilikler
Web Sitesi
Örnek Çıktılar
Geliştirmeye Yönelik Öneriler
Katkıda Bulunmak

RNN Modelleri

Doğal dil üretimi gerçekleştiren çok katmanlı LSTM bazlı RNN modelleri çıktıyı oluştururken 'Bir karakter veya bir karakter dizisi verildiğinde, onları takip edecek en olası karakter nedir?' sorusuna yanıt bulmak amacıyla karakter temelli tahmin işlemleri gerçekleştirmektedir.

char-based-prediction

Modellerin Geliştirilmesi*

Detaylı bilgi için creating_text_generators.ipynb dosyasına göz atabilirsiniz.

Modellerin Değerlendirilmesi

Model Eğitim Veri Seti Epoch Doğruluk Oranı Loss Değeri
Kadın Karakter Tirad kadin_tirad_veri_seti.txt 125 0.9846 0.0478
Garip Şiiri garip-siiri-veri-seti.txt 75 0.9839 0.0572
Erkek Karakter Tirad erkek_tirad_veri_seti.txt 125 0.9834 0.0531
Cumhuriyet Dönemi Saf Şiir cumhuriyet-donemi-saf-siir-veri-seti.txt 100 0.9800 0.0591
Milli Edebiyat milli_edebiyat_veri-seti.txt 60 0.9780 0.0732
Rock rock_veri_seti.txt 30 0.9666 0.1403
Pop pop_veri_seti.txt 30 0.8330 0.5169
Rap rap_veri_seti.txt 15 0.5801 1.3477

Kullanılan Veri Setleri*

sanatkar.ai üç farklı sanat dalının sekiz farklı alt dalında doğal dil üretmektedir. Her bir alt dala ait kapsamlı ana veri seti bulunmaktayken ana veri setini oluşturan tekil veri setleri de mevcuttur.

Veri Seti Büyüklükleri

1 - Şarkı Sözü Veri Setleri

  • Rap Veri Seti --> 270703 satır, 8.99 mb.
  • Pop Veri Seti --> 78161 satır, 2.01 mb.
  • Rock Veri Seti --> 23326 satır, 604 kb.

2 - Şiir Veri Setleri

  • Milli Edebiyat Veri Seti --> 14366 satır, 640 kb.
  • Cumhuriyet Dönemi Saf Şiir Veri Seti --> 9007 satır, 312 kb.
  • Garip Şiiri Veri Seti --> 3712 satır, 116 kb.

3 - Tiyatro Tiradı Veri Setleri

  • Erkek Karakterlerin Tiradları Veri Seti --> 112 kb.
  • Kadın Karakterlerin Tiradları Veri Seti --> 96 kb.

Veri Setlerinin Oluşturulması - Web Scraping

Şarkı Sözü Veri Setlerinin Oluşturulması*

Şarkı sözü veri setleri Genius API ile lyricsgenius kütüphanesi kullanılarak elde edilmiş, devamında data_cleaning_for_songs.ipynb dosyasındaki işlemler ile veri seti temizliği gerçekleştirilmiştir.

Şiir Veri Setlerinin Oluşturulması*

Şiir veri setleri selenium kütüphanesi ile antoloji.com'da ilgili şairlerin şiirlerinin kazınmasıyla ve farklı şairlerin şiirlerinin manuel olarak aynı metin dosyasına taşınmasıyla elde edilmiştir.

Tiyatro Tiradı Veri Setlerinin Oluşturulması

Tiyatro tiradı veri setleri Ankara Akademi Sanat'ın açık arşivindeki tiradların manuel olarak aynı metin dosyasına taşınmasıyla elde edilmiştir.

Gereklilikler

'pip install -r requirements_for_model_creation.txt' ve 'pip install -r requirements_for_website.txt' komutları ile yerel cihazınıza gerekli kütüphanelerin kurulumunu gerçekleştirebilirsiniz.

Model Oluşturmak İçin Gereklilikler*

tensorflow==2.6.0
nltk==3.6.2
urllib3==1.26.6
numpy==1.21.2

Web Sitesi İçin Gereklilikler*

tensorflow==2.6.0
numpy==1.21.2
Flask==2.0.1
Flask-SQLAlchemy==2.5.1

Web Sitesi*

Doğal dil üretimi gerçekleştiren modellerin kullanıcı kullanımına açıldığı web sitesi backend'de Python yazılım dilinin Flask kütüphanesini; frontend'de HTML, CSS işaretleme dilleri ile JavaScript'in Jquery kütüphanesini kullanmaktadır.

Frontend

Bir karşılama sayfası ve dört ek sayfadan oluşan web sitesinin olabildiğince sade ve kullanıcı dostu tasarlanması hedeflenmiştir. Renk paleti olarak sanatkar.ai logosunda yer alan üç temel renk (eflatuni mavi #5e17eb, koyu nane yeşili #39c466 ve dönüşümlü olarak siyah ve beyaz) kullanılmıştır.

Backend

RNN modellerinin doğal dil üretim işlemlerini ve veritabanı iletişimlerini gerçekleştiren backend bu işlemler için TensorFlow ve SQLAlchemy kütüphanelerinden faydalanmaktadır.

Örnek Çıktılar

Elde Edilen Bulgular

  • RNN modellerinin eğitiminde kullanılan veri setlerinin boyutları ile eğitilen modelin doğruluk oranı arasında ters, loss değeri arasında doğru orantı gözlemlenmiştir.
  • Şarkı veri setlerinde bulunan yabancı dildeki sözler veri setinin çok küçük bir yüzdesini oluştursa bile nadir de olsa üretilen çıktılarda yabancı dillerden sözcüklere denk gelinebilmektedir.
  • Doğruluk oranı geliştirilen modeller arasında en yüksek olan kadın karakter tiradı üreten modelin ürettiği çıktılarda dil bilgisi hataları ve anlamsal kopukluklar gözlemlenirken doğruluk oranı geliştirilen modeller arasında en düşük olan rap şarkı sözü üreten modelin ürettiği çıktılarda dil bilgisi hataları ve anlamsal kopukluklar çok daha nadir gözlemlenmiştir. Bu nedenle doğruluk oranı modelin başarısını değerlendirmek için birincil kriter olarak görülmemektedir.
  • Birinci ve üçüncü bulgular göz önüne alındığında kullanılan veri setinin boyutu arttıkça modelin doğruluk oranı azalsa da ürettiği metin tutarlı ve hatasız olmaktadır.

Geliştirmeye Yönelik Öneriler

  • Yeni Modellerin Geliştirilmesine Dair Öneriler

    • Oluşturulacak yeni veri setleri ile bir tiyatro senaryosu içerisinde yer alan kurgu ve diyalog gibi elementlerin üretimini sağlayan yeni modeller geliştirilebilir. Geliştirilen bu modeller tirad üretimi gerçekleştiren model ile birlikte kullanılarak bütüncül tiyatro oyunları oluşturulabilir.
  • Veri Setlerine Dair Öneriler

    • Kullanılan veri setleri genişletilebilir.
      • Şarkı sözü veri setleri Genius API aracılığı ile güncel veri setlerinde yer almayan sanatçıların eserleri çekilerek genişletilebilir.
      • Tiyatro tiradı veri setlerinin genişletilebilmesi için şehir belediyeleri ile iletişime geçilip paylaşıma uygun görülen tiyatro oyunlarındaki tiradlar veri setine eklenebilir.
    • Şarkı sözü veri setlerinde kullanılan API'dan dolayı oluşan, şarkı sözü dışında kalan açıklama metinleri (örneğin Nakarat, Giriş, Chorus bilgileri) temizlenebilir.
    • Şarkı sözü veri setlerinde Türkçe hariç dillerin (Pop ve Rock veri setlerinde ağırlıklı olarak İngilizce; Rap veri setinde ağırlıklı olarak Almanca ve İngilizce) kullanıldığı dizeler temizlenebilir.
    • Şiir veri setlerinde nadiren de olsa karşılaşılan Türkçe karakter bozuklukları düzeltilebilir.
    • Tirad veri setlerinde sıklıkla kullanılan noktalama işaretleri arasında var olan hatalar (örneğin noktalama işaretinden önce boşluk bırakılması) düzeltilebilir.
  • RNN Modellerine Dair Öneriler

    • Modellerin her biri özelleştirilmiş eğitimden geçirilebilir. Bu aşamada kullanılan eğitim, gerçekleşen kötü tahminlerin modellere geri gitmesini engellemekte dolayısıyla modellerin hatalarından öğrenmesine engel olmaktadır.
    • Modellerin açık döngü çıktısını stabilize etmek için curriculum learning uygulanabilir.
  • Web Sitesine Dair Öneriler

    • Modelin veri setine ne derece yakınlıkta çıktı vereceğini belirleyen temperature parametresi kullanıcıdan girdi olarak alınabilir.
    • Modellerin ürettiği çıktıların kaydedildiği arşiv sayfasına çeşitli filtreleme özellikleri (örneğin sanat dalı, sanat alt dalı, çıktı uzunluğu) getirilebilir.
    • Kullanıcıların beğenisi göz önünde bulundurulacak şekilde çıktıları beğenme ve beğenmeme opsiyonları getirilebilir ve bu opsiyonlar filtreleme özellikleri arasında yer alabilir.

Karşılaşılan Hatalar

  • Örnek Çıktılar başlığında bulunan çıktılara ek olarak elde edilen çıktılarda üretilen tiradların, şarkı sözlerine ve şiirlere kıyasla daha fazla anlamsız ve kopuk cümle barındırdığı gözlemlenmiştir. Bu nedenle tirad veri setleri, metin işleme işlemlerine ve temizliğe ihtiyaç duymaktadır.

Katkıda Bulunmak

Çalışmayı denerken karşılaştığınız bir sorunu issue açarak anlatabilir, yavaş çalışacağını düşündüğünüz bir kod parçacığını optimize edip pull request atabilir, çalışmayı iyileştireceğini ve ileri taşıyacağını düşündüğünüz değişikliklerde bulunabilirsiniz. Teşekkürler 😊

Katkıda Bulunanlar

Katkıda Bulunma Rehberi

Katkıda bulunmak istiyorsanız CONTRIBUTING.md dosyasını inceleyip kolları sıvayabilirsiniz!