11 Nisan 2009 Cumartesi

SVMLight yazılımını kullanmak

http://svmlight.joachims.org/ adresinden elde edebileceğiniz SVMLight yazılımı Support Vector Machine(Destek Vektör Makinesi) denilen makine öğrenmesi(machine learning) yaklaşımını kullanmayı amaçlıyor.

SVM yaklaşımı birçok alanda kullanabiliyor. Burada amaç bir sınıflandırma yaratmak.

Örnek olarak şöyle bir durumu göz önüne alabiliriz:

Bir metindeki kelimeleri isim, sıfat, zamir diye etiketlemek istediğimizi düşünelim. Bu işleme Part-of-Speech Tagging deniyor (maalesef Türkçesini öğrenemedim). Yani metindeki kelimeleri belli sınıflara ayırmak istiyoruz. Bu sınıflara ayırma işlemini de SVM yaklaşımıyla yapabiliyoruz.

Elimizde ek, kök ve en önemlisi tip(isim, zamir) gibi bilgilerin de yazılı olduğu bir kelime dosyası olduğunu düşünelim. Bu dosyayı ikiye ayıralım; bir kısmını öğrenmek, bir kısmını da test etmek için kullanacağız.

Şimdi SVMLight'ın nasıl çalıştığını görelim:

Yazılım iki komuttan oluşuyor: svm_learn ve svm_classify.
İlk komut tek şeye ihtiyaç duyuyor çalışmak için: Girdi dosyası (featureValues.txt)

Üzerinde çalışılacak metinden, yani öğrenme için ayrılmış metinden hazırlanan bu dosyanın nasıl hazırlandığına geçmeden önce SVMLight'ın kurulumundan biraz bahsedeyim. En başta verdiğim adreste görülebileceği gibi Linux ve Windows için sürümleri var yazılımın. İkisi için de kurulum basit. Kurulumdan sonra sitede bulunabilecek bir örnek(http://download.joachims.org/svm_light/examples/example1.tar.gz) indirilip şu şekilde denenebilir:

Dos ekranı/terminal açılıp gerekli dizine gidildikten sonra şu komutu çalıştırıyoruz:

svm_learn featureValues.txt model.txt

Bu şekilde bizim verdiğimiz featureValues.txt dosyasını alıyor ve bundan bir model oluşturuyor.
Bu modeli model.txt dosyasına kaydediyor.
Daha sonra da bu modeli şu şekilde kullanarak sınıflandırmak istediğimiz kelimeleri sınıflara ayırmış oluyoruz:

svm_classify test.txt model.txt output.txt

Burada test.txt denilen dosya sınıflandırmak istediğimiz kelimeler üzerinde, yani test yapmak istediğimiz kelimelerden hesaplayarak oluşturduğumuz bir dosya.

Biraz dosya formatlarına bakalım:







Burada sınıf bir sayıdan oluşuyor(isim için 0, sıfat için 1 gibi).
Görüleceği gibi bu örnekte iki tane sınıf yeterli gelmeyebilir. Çünkü fiil, zamir gibi daha birçok tür var. O zaman SVMLight multiclass'ı indirip kullanabiliriz. Onun da kullanımı aynı şekilde yalnızca sınıf değerleri 0 ve 1'den başka değerler de alabilir.

Özellikten kastedilen nedir peki? Mesela Türkçe'de g ile biten kelimeler genelde(belki de her zaman) isimdir. O zaman her kelime için g ile bitip bitmeme bir özellik olabilir.

Şöyle iki kelimeden oluştuğunu düşünelim öğrenme dosyamızın:

filolog İsim
yalnız Sıfat

Bu dosyadan şöyle bir featureValues.txt dosyası oluşturabiliriz:

1 1:1
3 1:0

Burada 1 isim türüne, 3 sıfat türüne denk geliyor. Hemen yandaki 1, 1.özelliği gösteriyor. 1 ve 0 ise kelimenin g harfiyle bitmesi durumu. Eğer g ile bitiyorsa 1, bitmiyorsa 0 yazıyoruz.

Tabii gerçekte iki kelimeden ve tek özellikten alabileceğimiz özellikler çok az, bu nedenle oldukça fazla kelime sayısı olan öğrenme dosyaları kullanılıyor. Tabii bir özellik yerine de birçok özellik kullanılıyor.

Böyle bir dosya bir de test edilmesi istenen dosya üzerinde oluşturuluyor(test.txt). Daha sonra da yukarıda anlatıldığı gibi svm_classify komutu çalıştırılıyor.

Peki yazılımın çıktıları neler?

predictions.txt adlı bir dosya oluşturuyor öncelikle. Burada test ettiğimiz kelimeler üzerinde her kelime için tahmin ettiği sınıfların ne olduğuna dair bilgi bulabiliyoruz. Daha sonra DOS/terminal ekranında da ne kadar doğru etiketlediğimizi gösteriyor. Test edilen kelimelerin gerçek tiplerini biliyor oluşu bunu mümkün kılıyor.

Kısaca, SVMLight oldukça kullanışlı bir yazılım.
İlk başta biraz kafa karışıklığı yaratabilecek olsa da, sonuçta kullanımı kolay ve anlaşılır bir yazılım.



Hiç yorum yok: