This semantic analysis of IMDB movie commentary project on data mining subject was developed by:
Ahmet Sergen Boncuk and Murat Mert Yurdakul.
Veri madenciliği konusu üzerine IMDB film yorumlarının anlamsal analizinin yapıldığı bu proje:
Ahmet Sergen Boncuk ve Murat Mert Yurdakul tarafından geliştirilmiştir.
Projenin amacı, IMDB filmlerine yapılan yorumların olumlu veya olumsuz olduğunu tahmin etmeye yarayan algoritmanın oluşturulmasıdır. Yapılan yorumun olumlu veya olumsuz olmasının tespit edilip sayılması, bir filme gelen tepkilerin hangi yönde olduğunu anlamamıza yardımcı olabilir.
Projede kullanılan verinin işlenmemiş hali, kullanılacak algoritmalar için anlam çıkartılmayacak yapıdadır.
Sınıf sayısı bu projede "olumlu" ve "olumsuz" olmak üzere 2 tanedir.
Obje sayısı 12500 pozitif yorum ve 12500 negatif yorum olmak üzere toplam 25000 adettir. Her bir yorum bir obje olarak sayılır.
Öznitelik sayısı tüm yorumlarda bulunan birbirinden farklı olan tüm kelimelerin toplam sayısı kadardır.
Bu projede amaç, bu veri setini kullanarak en iyi tutarlılığa sahip analiz modelini oluşturmaktır.
- Ön işleme (Preprocessing)
- HyperText etiketleri
- Büyük harfler
- Özel karakterler
- Yazım ve Heceleme Yanlışları (Typos-SpellCheck)
- Kökleştirme (Stemming)
- Etkisiz Kelimeler (Stopwords)
- Öznitelik Temsili (Feature Representation)
- Raw Term-Frequency
- N-Gram
- Öğrenme Algoritmaları (Learning Algorithms)
- Decision Tree (Karar Ağacı)
- Support Vector Machine (SVM)
- Naive Bayes (Basit Bayes)
- K-Nearest Neighbor
- Random Forest
- K-Means
- Performans Değerlendirmesi (Performance Parameters)
- Confusion Matrix
- Accuracy
- Precision
- Recall
- F-Measure
Veri önişleme, model için kullanılacak verinin, ham veriden anlaşılabilir veriye dönüştürülme tekniğine denir.
Öznitelik işlemlerinden önce kullanılacak olan verinin daha uygun, sade ve az karmaşık hale getirilmesi amaçlanır.
İnternet ortamında yapılan, geneli amatör olan yorumlarda veri modeli için performans düşüklüğüne yol açacak unsurların olması kaçınılmazdır.
Önişleme ile ham veri seti amacına daha uygun bir şekle getirilir.
İnternet kaynaklarından alınan metinlerde, web programlamada kullanılan etiketler bulunabilir.
Örneğin : <h1>Hello</h1>
Bu etiketlerin model oluşturmada bir değeri yoktur ve bu yüzden ayıklanması gereklidir.
Metinlerde kullanılan özel karakterler (noktalama işaretleri…) ve bu projede olmaması gereken Türkçe karakterler metin içerisinden çıkarılmıştır.
Modelin geliştirmesinde, bir harfin büyük veya küçük olmasının bir anlamı olmadığı için, büyük küçük harf farkının yeni niteliklerin oluşmasına yol açmasını önlemek için tüm karakterler küçük harfe çevrilir.
Belirtilmek istenen ifadenin yazımı sırasında yapılan tuşlama hatalarıdır.
Örneğin: "Awesome" yerine "Awsome" yazılması.
Yazım hataları sebebiyle, işlenecek olan veri seti olması gerektiğinden fazla büyür ve gereksiz bir şekilde büyür.
Örneğin: "Awesome" ve "Awsome" adında iki farklı nitelik ( feature ) oluşur. Fakat bunların iki ayrı nitelik olması bize bir kazanç sağlamaz.
Bu durumu düzeltmeye yarayan hazır kütüphaneler bulunur.
Örneğin: "Someting is hapening here" kelimesi pySpellChecker ile düzeltildiğinde "Something is happening here" şeklini alır.
Yalın kelimeler cümle içerisinde kullanılırken gerekli ekler alabilir.
Örneğin: "Enjoy" ve "Enjoyed"
Fakat bu durum aynı anlama gelen kelimelerin farklı nitelikler ile değerlendirilmesine yol açar.
Nitelik değerlendirmesi sırasında, bu projede önemli olan kelime kökleri olduğu için, tüm kelimelerin yalnızca köklerini ayıklanıp incelenir.
Ortak köke sahip olan tüm kelimeler tek bir nitelik olarak değerlendirilir.
Örneğin: "Love", "Loved", "Loves" = "Love"
Metinlerde anlatılmak istenen duruma vurgu yapan önemli kelimeler dışında, bolca kullanılan ama modelin etiketine hiçbir şekilde etkisi olmayan kelimeler bulunmaktadır.
Örneğin: "The", "is", "a", "i", "am" …
Bu kelimeler bize bir kazanç sağlamamakla beraber modelin performansını büyük oranda düşürecektir.
Bu etkisiz kelimeler, modelin performansını iyileştirmek adına önişleme safhasında ayıklanır.
Her veri seti, algoritmanın işleyebileceği şekilde verilmeyebilir.
Sayısal bir değer yerine alfabe karakterlerinden oluşabilir.
Algoritmanın veriyi anlamlandırabilmesi için veri modeline uygulanan işlemler öznitelik temsili olarak adlandırılır.
IMDB veri seti 25000 farklı, algoritma için anlam taşımayan yorumdan oluştuğundan bu verileri sayısal bir değere çevirmek gereklidir.
TF = f(t,d)
TF değeri, t teriminin d dökümanında kaç kez geçtiğidir.
Bu algoritmada, önişlemden geçmiş niteliklerin her iki sınıfta da (pozitif negatif) kaç kez geçtiği bulunmuştur. Bu değerler bir tablo haline getirilmiştir.
Sonrasında, kullanım sayıları iki sınıf arasında belirli bir oranda yakınlık gösteren nitelikler elenmiştir. Çünkü her iki sınıfta da yakın oranda bulunan nitelikler, birbiri ile aynı etkiye sahip olacağından, modelin geliştirilmesinde bir yardımı olmayacaktır.
N-Gram, n sayıda kelimenin birleştirilerek tek bir nitelik olarak sayılmasıdır.
Bir kelimenin olumlu ile olumsuz hali tamamen farklı nitelikler olarak sayılmalıdır. İngilizcede olumsuzlaştırma durumu genelde iki kelime ile belirtilir.
Örneğin : "Good" ile "Not good" tamamen farklı nitelikler olarak değerlendirilir.
Olumsuzlaştırma kelimeleri ile bundan sonra gelen kelime birleştirilerek tek bir nitelik olarak sayılmıştır.
İşlenen verinin sonucunda oluşmuş olan modele anlam yüklemeye yarayan yöntemlerdir.
Kullanılan öğrenme algoritmaları:
- Decision Tree (Karar
- Support Vector Machine (SVM)
- Naive Bayes (Basit Bayes
- K-Nearest Neighbor
- Random Forest
- K-Means
12500 olumlu ve 12500 olumsuz yorum ile eğitilen algoritma üzerinde uygulanan bir örnekte Doğruluk (Accuracy) değerleri şu şekildedir:
- Decision Tree : 0.72
- SVM : 0.93
- Naive Bayes : 0.98
- KNN : 0.61
- Random Forest : 0.61
- K-Means : 0.18