veri madenciliği, doğal dil işleme | Harun Reşit Zafer Bir veri madenciliği ve doğal dil işleme uygulaması – Harun Reşit Zafer
10 Kasım 2010 / Harun Reşit Zafer / 7 yorum
Güncelleme: Bu yazıda bahsedilen çalışma şu yazıda anlatıldığı gibi güncellenmiştir.
Bir köşe yazısının mevcut 10 yazardan hangisine ait olduğunu bulan bir uygulama yazdım. Örneğin ilgili gazetenin web sitesinden Engin Ardıç‘ın bir köşe yazısını kopyalayıp uygulamaya yapıştırıyor ve “Tahmin Et” butonuna basıyorsunuz, uygulama yazının hangi yazara ait olduğunu %95 başarı ile buluyor. Uygulamayı buradan (bu bağlantı artık çalışmamaktadır ve yeni bağlantıya bu sayfanın sonundaki bağlantı ile erişebilirsiniz) deneyebilirsiniz.
Aslında proje bir metin sınıflandırma (text classification) uygulaması. Yani köşe yazıları yazarlarına göre sınıflandırılıyor. Aynı şekilde bir yazıyı türüne (politika, spor, magazin) göre hatta yazarın cinsiyetine göre de sınıflandırabilirdik. Peki uygulama bunu nasıl yapıyor? Öncelikle her yazarın belirli sayıda köşe yazısı uygulamaya veriliyor. Uygulama bu yazılarla (train data) kendini eğitiyor. Bir başka deyişle yazarları tanıyor. Daha sonra yeni gelen yazının (test data) yazarını bu eğitim ışığında tahmin etmeye çalışıyor. Bunu da bilinen bir takım sınıflandırma algoritmaları kullanarak yapıyor. Uygulamanın yukarıda bağlantısı verilen versiyonu Naive Bayes metodunu kullanıyor. Ancak SMO ve multilayer perceptron metodları da aynı başarı ile çalışyor. İleride uygulamayı türe, yazar cinsiyetine hatta yazının ait olduğu gazeteye göre de metinleri sınıflandıracak şekilde geliştirmeyi düşünüyorum. Sonuç olarak düşünceleriniz paylaşmanızı bekliyorum.
Gelelim projenin hikayesine ve veri madenciliği (data mining) ve doğal dil işleme (natural language processing) konuları ile ilgisine:
Geçen yıl yüksek lisans’ın güz döneminde doğal dil işleme dersinde “Yazar tahmini” konulu bir proje almıştım. Proje hazır bir veri madenciliği kütüphanesi olan WEKA kullanılarak yapılacaktı. Her hangi bir kullanıcı arayüzü söz konusu değildi. Daha çok verilerin toplanması ve WEKA ile yapılan testlerin rapor haline getirilmesinden ibaretti. Proje raporunu buradan indirerek ayrıntıları okuyabilirsiniz.
Aynı yılın bahar döneminde ise Yapay Sinir Ağları (Artificial Neural Networks) dersinde projeye kaldığım yerden devam etmek istedim. Tabi projenin ders ile alakalı olması için sınıflandırma metodu olarak yapay sinir ağlarını (Multilayer perceptron) kullandım. Projenin bu versiyonuna görsel bir kullanıcı arayüzü de ekledim. Bu aşamanın detaylarını da burada öğrenebilirsiniz.
Son olarak “uygulamayı web’e atarsam herkes erişebilir ve güzel bir paylaşım” olur diye düşünerek JSP ile web arayüzünü hazırladım. Neden JSP? Çünkü uygulamanın kendisi de geri planda kullandığı WEKA kütüphanesi de Java ile yazıl(dı)mış. Ancak ne yazık ki okulda uygulamayı barıdıracak sunucu bulamadım. Sonunda Google App Engine imdadıma yetişti. Google App Engine web uygulamaları için bir kümesel işlem (cloud computing) hizmeti. Yani uygulamayı sağolsun Google host ediyor.
10 Aralık 2010 at 07:01
Harika bir kütüphaneymiş gerçekten, nasıl bir algoritma var arkasında çok merak uyandırdı bende.
10 Aralık 2010 at 07:05
Hocam cinsiyeti nasıl belirlemeyi düşünüyorsun , cümle içersinde geçen örneğin “yahu” kelimesinin metin içersinde ki tekrar sayısıyla felan mı değerlendiriyor yazılım.
10 Aralık 2010 at 07:57
Yazılım 13-14 kadar ölçüt kullanıyor. Bunlar kelime uzunluğu, cümle uzunluğu vb. özellikler. Burada detayları var:http://hrzafer-mss.appspot.com/about.jsp
Öncelikle sorulması gereken soru şu: Gerçekten yazarın cinsiyeti yazı üzerinde bir fark oluşturuyor mu? Örneğin gerçekten 5 bayan köşe yazarının makalelerinde “bayan olmalarından kaynaklanan” ortak noktalar mevcut mu? Cevap: Evet 🙂 -yapılmış çalışmalar bunu açıkca gösteriyor-
O halde yukarıdaki 13-14 ölçüt bu ayrımı yapabilmek için yeterli mi? Öncelikle bunu deneyeceğim. Eğer yeterli olmazlarsa, yeni ölçütler bulmamız gerekecek.
15 Şubat 2011 at 17:19
Uygulamanız bir lisans projesi için çok çok güzel. Ancak aslında sizin yaptığınız iş metin sınıflandırmanın özel bir kolu olan “author attribution”.
Benim merak ettiğim konu weka ile java kodlarını nasıl buluşturdunuz? bildiğim kadarıyla weka’nın bir arayüzü var. Ancak bunun kullanımını gösteren örnek kodlar yollamanız yada paylaşmanız mümkün mü? Java ile weka arayüzünü çağırdığınız prosedürün kodlarının esas can alıcı yerinden bir paylaşım yaparsanız sevinirim.
Bu arada uygulamayı beğendim. Her ne kadar ben tüm metni seçmeyerek sizin ölçüt/niteliklerinizden birini ihlal eden denemeler yaparak başarılı bulgular elde edemesem de uygulama için tebrikler.
16 Şubat 2011 at 03:46
Weka aslında bir Java kütüphanesi. Weka’yı kullanmanın 3 yolu var. Bunlar GUI, komut satırı ve doğrudan kod ile erişim. Birincisi en rahat ama en kısıtlı yöntem. Komut satırı biraz zahmetli olsa da çok daha esnek. Kodda kullanmak için ise tek yapmanız gereken weka.jar dosyasını projenize library olarak eklemek. Örnekler için bkz: http://weka.wikispaces.com/Use+WEKA+in+your+Java+code
Bunun dışında iletişim bölümünden irtibata geçerseniz yardımcı olmak isterim.
21 Ekim 2012 at 17:07
Ben weka’daki data mining algoritmalarına C# ile ulaşmak icin çalışıyorum. Daha yeniyim bu konuda. Yardımlarınızı bekliyorum teşekkürler 🙂
22 Ekim 2012 at 02:22
Şurada gerekli açıklamalar var: http://weka.wikispaces.com/Use+WEKA+with+the+Microsoft+.NET+Framework