Content uploaded by Caner Ozcan
Author content
All content in this area was uploaded by Caner Ozcan on Dec 06, 2017
Content may be subject to copyright.
Spark Destek Vektör Makinesi ile Metin
Sınıflandırma
Text Classification with Spark Support Vector
Machine
İskender Ülgen Oğul1 , Caner Özcan1, Özlem Hakdağlı1
1Bilgisayar Mühendisliği Bölümü, Karabük Üniversitesi, Karabük, Türkiye
iskenderogul@gmail.com, canerozcan@karabuk.edu.tr, ozlemhakdagli@gmail.com
Özetçe— Teknolojinin son yıllardaki gelişiminden sağlanan
birikimler ile günümüzde ulaştığı noktada günlük ortaya çıkarılan
veri miktarı son kırk yılda ortaya çıkan toplam veriden oldukça
fazladır. Ortaya çıkan bu yüklü verinin temizlenmesi,
anlamlandırılması, sınıflandırılması ve kullanılabilir bir analiz
raporu haline getirilmesi çağımızda oldukça hayati bir önem
taşımaktadır. Ortaya çıkan bu önemli alanda hız faktörü bilgiye
ulaşım için anahtar bir faktör olmaktadır. Apache Spark bu
soruna yenilikçi ve dayanıklı bir çözüm sunmaktadır. Geleneksel
analiz yöntemlerinde analiz süresince veri okuma yazma işlemleri
disk üzerinden gerçekleştirilirken, Spark analizde hız kazanmak
için verileri bellek içinde depolamaktadır. Spark bellek içi veri
okuma-depolama, analiz gerçekleştirme ve sonuçlandırma
işlemleri ile hızını neredeyse gerçek zamanlıya ulaştırmaktadır.
Bu çalışmada denetimli (eğitimli) öğrenme yöntemi olan Destek
Vektör Makinesi (DVM) ile sosyal eğlence sitesi olan Reddit
yorumları üzerinden sınıflandırma analizi gerçekleştirilmiştir.
Sonuçlar tablolar ve grafikler halinde sunulmuştur.
Anahtar Kelimeler —Apache Spark, Makine Öğrenmesi, DVM,
Sınıflandırma, Büyük Veri, Metin Analizi
Abstract— With the accumulation of technology from the
recent years of development, the total amount of data that has been
revealed daily at the point reached today are quite excessive in the
last forty years. It is of vital importance in our day to clean,
understand, classify and make a usable analysis report of this
emerging data. Speed is a key factor for information retrieval in
this important area. Apache Spark offers an innovative and robust
solution to this problem. Unlike the previously used analysis
methods, this solution stores data in the memory in order to gain
speed in analysis, rather than performing data read/write
operations through the disk during analysis. Spark provides near
real-time speed with in-memory data read/write, analysis and
resulting operations. In this study, a classification analysis was
conducted on Reddit social entertainment site comments using
Support Vector Machine (SVM) which is the supervised
(educated) learning method. The results are presented in tables
and graphics.
Keywords —Apache Spark, Machine Learning, SVM,
Classificiation, Big Data, Text Mining
I. GİRİŞ
Veri madenciliği büyük veri setleri içindeki anlamlı sık
düzenleri (Frequent Pattern – büyük bir veri içindeki
değişkenler arasında bulunan ilişkiler) istatistik, makine
öğrenmesi ve veri tabanı sistemleri kullanılarak bilgisayar
yardımı ile ortaya çıkaran oldukça güçlü bir çalışma alanıdır.
Veri madenciliğinin temel amacı büyük veri setleri içerisinden,
ilişkili örüntüler, küme analizleri, anomali tespitleri ve veri
bağımlılık ilişkileri ile anlamlı bilgiyi otomatik ya da yarı
otomatik analiziler yardımıyla keşfetmek ve bu bilgiyi gelecek
kullanımlar için anlaşılabilir bir yapı içerisinde (grafikler ve
analiz modelleri) görüntülemektir [1]. Veri madenciliği süreci
analiz aşamasının yanı sıra, veri tabanı ve veri yönetimi yönleri,
veri ön işleme, model ve çıkarım konuları, karmaşıklık
konuları, görselleştirme ve çevrimiçi güncelleme alanlarını da
içinde barındırmaktadır. Veri işleme çalışmaları çok yeni
olmamakla birlikte uzun yıllar boyunca klasik yöntemlerle
gerçekleştirilmiştir. Düzen keşfinin ilk yöntemleri Bayes
teoremi ve regresyon modellerine dayanmaktaydı [2].
Bilgisayar teknolojilerinin gelişmesi veri toplama, düzenleme
ve analiz metotlarının yaygınlaşmasında oldukça büyük bir rol
oynamıştır. Verilerin üstel olarak büyümesi ile birlikte veri ile
doğrudan etkileşim yerine sinir ağları, küme analizi, genetik
algoritmalar, karar ağaçları, destek vektör makinesi (DVM) ve
makine öğrenmesi gibi yeni bilgisayar teknikleri ile büyük
verilerin işlenmesi otomatik olarak gerçekleştirilmeye
başlanmıştır [3]. Geliştirilen bu teknikler, istatistik ve
matematik temellerinden geliştirilen yapay zekâ ile veri
yönetimi (düzenleme, saklama, indeksleme) arasındaki boşluğu
doldurmaktadır. Veriden bilgi edinimi veri seçimi, ön işleme,
dönüştürme, bilgi çıkarımı (madencilik), değerlendirme ve
sunum olarak beş temel aşama ile gerçekleşmektedir. Veri
seçimi hangi türde verinin işleneceğinin belirlendiği (metin
verisi, market analizi, tavsiye motorları vb.) aşamadır [4].
Verinin türüne göre analiz yöntemleri de farklılık göstermekte
ve alana özel olarak seçilmektedir. Ön işleme içerisinde
verilerin analiz aşamasında süre ve masraf (kod yazımında
geçen süre) kazancı sağlamak için veri tabanı içinde gürültü
(eksik ya da yanlış veri) temizliğinin gerçekleştirildiği oldukça
önemli ve ilerleyen süreçte işlemler üzerinde kazanç sağlayan
bir aşamadır. Dönüştürme işleminde veri tabanı formatından
veri ambarı formatına dönüştürülme ve depolanma aşaması
gerçekleştirilir [5]. Veri ambarına dönüştürülürken satır ve
sütunlar üzerinde birleştirme ve eksik verilerin ortalama
alınarak doldurulması ya da satırın silinmesi söz konusudur.
Bilgi çıkarımı yani madencilik aşamasında verilerin tipine ve
uygulama alanına göre seçilen algoritmalar ile bilgi çıkarımı
için gerekli modeller oluşturulmaktadır. Oluşturulan bu
modeller ile veri içerisinden arzu edilen bilgilerin çıkarımı için
model üzerinden gerekli sorgulamalar yapılmaktadır.
Değerlendirme aşamasında bilgi çıkarımından elde edilen
verilerin tutarlılığı kontrol edilmektedir [6]. Sunum bölümünde
elde edilen ve doğruluğu test edilmiş veriler grafikler şeklinde
ilgili birimlere sunulur. Günümüzde veri analizi daha kısa bir
sıralama biçimi olan ön işleme, veri madenciliği ve sonuç
doğrulama olarak üç başlık altına alınmaktadır. Belirtilen tüm
aşamaların sağlıklı bir şekilde gerçekleştirilebilmesi ve veri
içindeki kalıpların ortaya çıkarılabilmesi için hedef veri setinin
yeteri kadar büyük olması gerekmektedir.
Metin verilerinden, istatistiksel metotlara dayalı modeller
yardımı ile desenlerin, eğilimlerin ve yüksek kalitede amaca
yönelik bilgi çıkarımına metin madenciliği bilimi denmektedir.
Genel metin verisi incelemesi metin verilerinin
sınıflandırılması, metin kümelenmesi, kavram-varlık çıkarımı,
duygu analizi, belge özetleme ve varlık ilişkisi ihtiyaçlarını
karşılama amacıyla geliştirilmiştir [7]. Analiz ihtiyaçlarının
kararlılıkla karşılanabilmesi için bilgi alımı, sözcük frekans
dağılımı, kalıp tanıma, etiketleme, tahminsel analitik ve doğal
dil işleme teknikleri kullanılmaktadır. Metin analizi
temellerinin dayandığı metin analitiği iş zekâsı, keşifsel veri
analizi, araştırma ve inceleme için metin kaynaklarının bilgi
içeriğini modelleyen ve yapılandıran istatistik ve makine
öğrenmesini bilimlerini tanımlamaktadır [8].
Bu çalışmada metin madenciliği teknikleri kullanılarak açık
kaynaklı sosyal topluluk sitesi reddit.com üzerinden halka
açılan veri seti üzerinden sınıflandırma yapılmıştır.
Sınıflandırma için json formatında bulunan veri dosyaları
üzerinden öncelikle alakasız veriler çıkarılmış daha sonra
gürültü temizliği yapılarak ham veri analize uygun hale
getirilerek analiz işlemleri uygulanmıştır. Analiz için yorum
yazarlarının kadın-erkek olma olasılıkları, spam analizi ve kötü
sözcük (küfür) analizi yapılmıştır. Analiz sonuçlarının daha
tutarlı olması için analizler yorum bazına indirgenerek her
yorum içerisinde tek tek analiz yapılarak dönen etiket üzerinden
yüzdelendirmesi yapılmıştır.
DVM algoritmasının tutarlılığının karşılaştırılması için kadın-
erkek analiz ortamı Naive Bayes algoritması üzerinden de
gerçekleştirilmiştir. Analiz sistemi için bilgisayar
teknolojilerinin son dönemlerde oldukça işlevli olduğunu ispat
eden Apache organizasyonu desteğinde bulunan Spark
çerçevesi kullanılmıştır. Geleneksel analiz sistemlerinden farklı
olarak bir kere oku bir kere yaz mantığını benimsemeyen Spark,
analiz edilecek verileri okuduktan sonra depolama için
bilgisayar belleği üzerinde saklamaktadır. Bellek üzerinde
saklanan veriler sabit diskten bağımsız olarak işlem
gördüğünden bellek-işlemci arasındaki veri akışının çok hızlı
olması sayesinde neredeyse gerçek zamanlı veri analizi
gerçekleştirilmektedir.
II. APACHE SPARK
Orijinal olarak Kaliforniya Üniversitesi, Berkeley’s AMPLab
bünyesinde geliştirilen açık kaynaklı bir küme bilgisayar
hesaplama çerçevesi olan Spark sonradan Apache
organizasyonuna bağışlanmıştır. Apache Spark çekirdeği küme
yönetimi ve dağıtılmış veri depolama sistemine ihtiyaç
duymaktadır. Küme yönetim ihtiyacını karşılamak için Spark
tek başına çalıştırılabilir (standalone) modül sunarken dağıtık
veri birimi için Hadoop dağıtık dosya sistemi (HDFS),
Cassandra, Amazon S3 gibi çoklu platformları
desteklemektedir. Küme tabanlı hesaplama birimi için örtük
paralelleştirme ve hata toleransıyla programlamak için arabirim
sağlayan Spark, programcılar için makineler üzerinde
dağıtılmış veri kümelerinin hataya dayanıklı bir şekilde
muhafaza edildiği esnek dağıtılmış veri kümesi (RDD) olarak
adlandırılan bir yapı sağlamaktadır [9]. Şekil 1 üzerinde Spark
çerçevesi mimarisi ailesinin yapıları katmanlı bir şekilde
gösterilmektedir.
Esnek dağıtılmış veri kümesi, doğrusal veri akışını zorlayan
MapReduce küme bilgi işlem yöntemini kullanmaktadır. Spark
MapReduce, disk üzerinden ilgili veri kümelerini okuduktan
sonra özyinelemeli olarak verileri işlemden geçirerek veri
haritalandırma sonuçlarını düşürür ve azaltma sonuçlarını genel
veri madenciliği yöntemlerinden farklı olarak disk yerine
paylaşılan bellek üzerinde saklar. Verilerin bellek üzerinde
taşma durumunda ise Spark haritalandırdığı kümeleri HDFS
dosya sistemi olarak disk üzerinde geçici dosya olarak
saklamaktadır.
Spark çekirdeği tüm projenin temelini oluşturmaktadır.
Çekirdek temel giriş çıkış işlemleri, görev zamanlaması, paralel
bilgisayarlarda dağıtık işlem gönderme gibi işlemleri RDD
çerçevesinde programlama dili bağımlılığı olmadan Java,
Python, R, Scala dillerine arayüz sağlamaktadır ve Java sanal
makinasının bulunduğu her bilgisayarda çalışmaktadır [10].
Şekil 1. Spark çerçevesinin bileşenlerinin katmanlı gösterimi
Şekil 2. Lojistik regresyon algoritması üzerinde Apache Spark ve Hadoop süre
karşılaştırması (Spark resmi sitesinden alınmıştır)
Spark SQL, yapılandırılmış ve yarı yapılandırılmış verilere
destek sağlayan DataFrame yapısını uygulayan bir modüldür.
Spark DataFrame yapısı RDD tarafından sağlanan derleme
zamanının biraz gerisinde kalmış olmasından dolayı 2.0
sürümünden itibaren güçlü temeller üzerine oturtulan ve
tamamen Spark SQL desteğini içinde barındıran DataSet
yapısına geçmiştir. DataSet veriler okunduktan sonra bir SQL
derleyicisinde olduğu gibi verileri satır ve sütunlar içerisinde
barındırmaktadır. Ayrıca verileri bellek üzerinde dağıtık
depolaması sayesinde SQL tabanlı işlem süreleri oldukça kısa
olmaktadır [11]. Şekil 2’de Apache Spark’ın resmi sitesinde
bulunan grafikten alıntı yapılan Spark ve Hadoop mimarileri
üzerinde lojistik regresyon uygulaması ile elde edilen çalışma
süreleri gösterilmektedir. Bu çalışmadan alınan sonuçlara göre
spark bellek içi depolama yapısı sayesinde yüz kata kadar süre
kazancı sağlamaktadır.
Spark makine öğrenmesi (MLlib) kütüphanesi, dağıtılmış
bellek tabanlı Spark mimarisi çekirdeğinin en önemli
yapılarından biridir. Apache Mahout tarafından kullanılan disk
temelli makine öğrenmesi kütüphanesi bünyesinde olan en
küçük kareler (ALS) algoritması üzerinden yapılan testlerde
dokuz kata kadar hız elde edildiği bildirilmektedir. Spark MLlib
kütüphanesi altında sınıflandırma, kümeleme analizi, özellik
çıkarımı gibi birçok yaygın makine öğrenmesi ve istatistiksel
yaklaşım algoritmaları bulunmaktadır [12].
III. KULLANIM ALANI VE YENİLİKLER
Bir bütün olarak ele alındığı zaman Apache Spark açık kaynak
kodlu olarak sunulan Spark SQL, Spark Streaming, GraphX ve
makine öğrenmesi temellerine dayanan ve genel madencilik
yöntemlerinden farklı olarak disk üzerinde işlem
gerçekleştirmek yerine verileri bir kere okuyarak bellek
üzerinde depolama yaklaşımı sayesinde yüz kata kadar hız
sağlamaktadır. Bünyesinde barındırdığı makine öğrenmesi
kütüphanesinden aldığı güç ile çok yaklaşımlı analiz olanağı da
sunmaktadır.
Spark çekirdeğinde barındırdığı yöntem çeşitliliği ile geniş bir
kullanım alanına sahiptir. Akan veri üzerinde anlık olarak işlem
yapabilmesi, sosyal medya verileri üzerinde GraphX
kütüphanesi ile analiz ortamı sunması, Spark SQL ve MLlib
kütüphaneleri ile sınıflandırma, kümeleme ve anlam çıkarımı
konularında geliştirme olanağı sunmaktadır. Spark’ın genel
kullanım alanları yukarıda verilmektedir.
IV. DESTEK VEKTÖR MAKİNESİ (DVM) YÖNTEMİ
Sınıflandırma problemi makine öğrenmesi alanında sıklıkla ele
alınan bir konudur. Yapılan bu çalışma, herhangi iki sınıftan
birine ait olan veri noktalarının hangi sınıfa ait olduğunu
belirleme amacı ile geliştirilen bir çalışmadır. Doğrusal
sınıflandırma olarak bilinen, p vektör içindeki verilerin p-1
alana ayırmak amacıyla kullanılan bir hiperçizgi ile veriler iki
sınıfa ayırılmaktadır. İki sınıf arasında en çok sınıflandırma
yapabilen çizgiye maksimum marjin hiperçizgi adı verilir.
Yüksek ya da sonsuz uzay içerisindeki hiperçizgilere dayanan
DVM, makine öğrenmesinde denetimli (eğitimli) öğrenme
alanında bulunarak, sınıflandırma regresyon ve birçok amaç
için kullanılan bir modeldir [13]. Her iki kategoriden birine
etiketlenen eğitim verilerinin bir model haline getirilerek analiz
edilecek veri seti içinde işleme alınarak belirli bir alanın altında
ve üstüne kalan kısımlar olarak veriler ayrılır. DVM binominal
ya da dinominal olarak analiz gerçekleştirmektedir. Eğitilecek
olan veriler sıfır ya da bir etiketi ile etiketlenerek bir DVM
modeli oluşturulur. Oluşturulan model üzerinden analiz gerekli
veri seti içerisinde gerçekleştirilir. Veri etiketleme yapılmadığı
takdirde denetimli öğrenme mümkün değildir. DVM metin
sınıflandırma, resim sınıflandırma ve biyoinformatik
alanlarında kullanılmaktadır [14]. DVM ve doğrusal DVM
algoritmasının matematiksel formülü şu şekildedir:
()≔ ()+ 1
�(; , )
=1
(1)
Birçok makine öğrenmesi algoritması konveks optimizasyon
problemi olarak formülize edilmektedir. Amaç veri girdisinde
ağırlığına sahip vektöre dayanan konveks fonsiyonunu
bulmaktır. ∈ vektörü analiz ortamındaki eğitim
verilerinin uzayını temsil etmektedir. 1 ile arasındaki tüm
değerler için ∈ ise bunlara karşılık olan etiketleridir. Eğer
(;,) yapısı , ve olarak ifade edilirse lineer method
olarak adlandırabiliriz. fonksiyonu iki bölümden oluşur,
modelin karmaşıklığını kontrol eden düzenleyici kısmı ve
eğitim verisi modeli üzerinde hatayı kontrol eden kayıp
kısmıdır. (; . ) yapısı içindeki kaybın konveks
fonksiyondur. Düzenleyici ≥ 0 parametresi ise kaybı
minimize etmeyi ve model karmaşıklığının minimize edilişini
belirtir. Düzenleyiciler model içindeki aşırı sıkıştırmayı
0
20
40
60
80
100
Spark ve Hadoop
Çalışma Süresi
Spark Hadoop
Spark Kullanım ve Uygulama Alanları
•Kurumsal iş zekası
•Görüntü verisi üzerinde sınıflandırma
•Bilimsel metin işleme ve sınıflandırma
•Doğal dil işleme
•Akan veri üzerinde anlık analiz
önlemek için kullanılır. DVM, L1 ve L2 düzenleyicilerini
kullanır. L2 düzenleyicisi L1’e göre performansı daha iyidir
ancak L1 düzenleyicisi daha küçük ve yorumlanabilir
modellerde oluşan ağırlıklarda seyrekliği arttırmaya yardımcı
olabilir [14].
(;,)= {0,1 − }
(2)
Geniş ölçekli sınıflandırma problemleri için doğrusal DVM
algoritması birinci denklemde verilmiştir. İkinci denklemde
dayanak kaybı ile formüle edilmiş doğrusal denklemi
verilmiştir. SparkDVM modeli varsayılan olarak L2
düzenleyicisi ve = 1 olarak eğitilmektedir. Lineer DVM
algoritması tarafından gösterilen veri noktalarından bir model
oluşturmakta ve ’e dayanan verilerden tahminler
yapmaktadır. Eğer ≥0 ise sonuç pozitif olmaktadır.
V. PROBLEM TANIMI VE YAKLAŞIMLAR
Sınıflandırma projesi için açık kaynak olarak sunulan sosyal
medya internet sitesi olan reddit.com’a ait veri seti
kullanılmıştır. 2010 yılına ait haziran ayı veri seti seçilmiştir.
Veri seti sıkıştırılmış olarak 303Mb boyutunda iken
sıkıştırılmış formattan çıkarıldığında json dosyalama
formatında 2GB olarak ölçülmüştür. Analiz aşamasının en
yaygın sorunlarından biri olan gürültü (alakasız veri) temizliği
yapılması gerekmektedir. Gürültü verisi analiz sonucunu
etkileyeceği gibi veri seti içindeki varlığı analiz süresini de
uzatmaktadır. Yanlış yapılan bir analiz çıktısı bu çıktıya
dayanarak alınabilecek kararları da oldukça kötü şekilde
etkileyebilmektedir. Spark SQL kullanılarak gürültü temizliği
gerçekleştirilmesi gerekmektedir. Ana veri setinde araştırılacak
olan analizler, yazılan yorumların yüzde kaçının kadın, yüzde
kaçının erkek olduğu, yorumlar içinde kaç yorumun spam
olarak tespit edildiği ve yüzdesi, son olarak da yorumlar
üzerinde kötü sözcük filtresi yapılarak elde edilen sonuçların
yüzdesi verilecektir. Kadın ve erkek sonuçlarında DVM
algoritmasının tutarlılığını göstermek için aynı veri ve anahtar
kelime setleri Naive Bayes algoritması üzerinden de
uygulanarak Naive Bayes modeli oluşturulup, bu model reddit
yorumları üzerinde sorgulanacak ve çıkan sonuçlar
karşılaştırılacaktır. Yorum satırlarından bilgi çıkarımı
yapılabilmesi için anahtar kelime koleksiyonu oluşturulmalı ve
benzersiz bir şekilde etiketlendirilip analiz ortamına dahil
edilmelidir.
VI. YÖNTEM TASARIMI
Oluşturulan analiz sisteminde makine öğrenmesinin denetimli
öğrenme alanına ait DVM algoritması kullanılmıştır. Analiz
edilecek veri üzerinde anlam çıkarımı yapabilmek için kadın ve
erkekleri ayıran belirleyici anahtar kelimeler bulunarak csv
dosyası haline kaydedilmiştir. Kaydedilen anahtar kelimelerin
analiz ortamına aktarılabilmesi için SparkContext nesnesi
oluşturularak csv dosyası olarak okunmuş ve
JavaRDD<String> nesnesi içine alınarak depolanmıştır.
Denetimli öğrenmenin gerçekleştirilebilmesi için analiz
ortamına alınan anahtar kelimelerin ondalık sayı biçiminde 1.0
Şekil 3. SparkDVM çalışma mantığı akış şeması
ile etiketleme işlemi gerçekleştirilmiştir. DVM algoritması
yapısı gereği veriyi iki sınıfa ayırdığı için veri seti içinde
aramak istenilen anahtar kelimeler 1.0 ile etiketlenir, analiz
esnasında eşleşme gerçekleşmediği zaman model 0.0 etiketini
geri döndürmektedir.
Şekil 3’de SparkDVM çalışma mantığı adımları akış şeması
verilmektedir. DVM yapısında model oluştururken kullanıcının
belirlediği bir tekrarlama (iterasyon) sayısı belirlenerek
etiketlenmiş veriler tekrarlama sayısı üzerinden makine
öğrenmesi algoritması olan DVM ile eğitilerek DVMModel
oluşturulmuştur. Modelin lambda değeri = 1 ve regülasyon
modeli ise L2’dir. Analizin gerçekleştirileceği reddit veri seti,
SparkSession nesnesi üzerinden json formatında okunarak
Dataset nesnesi içinde depolanmıştır. SparkSQL yapısı ile veri
setindeki ilgisiz sütunlar düşürülerek sadece yorum sütunu
bırakılmış ve veri büyük oranda temizlenmiştir. Gürültü azalımı
yapmak için site üzerinde silinmiş yorumların belirtildiği ve
Latin karakter barındırmayan veri satırları da silinerek 268.535
satır gürültü, veri setinden çıkarılmıştır. Dataset nesnesi içinde
bulunan veri setinden yorumlar satır satır okunarak DVM
algoritması üzerinden analiz yapılmış ve her iki kategori için
geri dönen etiket verisi üzerinden sonuç sayısı saklanarak
yüzdelendirme gerçekleştirilmiştir. Aynı işlemler spam analizi
ve kötü sözcük filtresinde sadece anahtar kelimelerde
güncelleme uygulanıp veri seti sabit tutularak
gerçekleştirilmiştir. DVM sonuçlarının tutarlılığını kontrol
edebilmek için kadın erkek analizi Naive Bayes algoritması
üzerinden de gerçekleştirilmiş ve sonuçlar karşılaştırılmıştır.
DVM analiz modelinin başarısını kontrol etmek için eğitim seti
%60-%40 oranında bölünerek kendi içinde analiz edilmiş ve
sonuçları verilmiştir. Spark’ın veri yoğunluğuna göre verdiği
performansın incelenebilmesi için seçilen veri bloklarına göre
süre performansları ve analiz sonuçları verilmiştir. Tüm
sonuçlar tablo ve grafikler halinde verilmiştir. Geliştirilen
yöntemin sözde kodu ise şu şekildedir:
KE YW O RDS
REDDİT
YORUM
VERİ
SET İ
KELİ ME
VEKT ÖRLERİ
ETİ KETLEN MESİ
SPARK SQL VERİ
TEMİZ LEM ESİ
DES TEK
VEKTÖR
MOD ELİ
EĞİ TİM İ
NAİVE-BAYES
MOD ELİ
FOREACH
FO NK S İYO NU
VERİ ÇEKME
DES TEK VEK TÖR
M AKİ NAS I
MOD ELİ
YORUMLARIN
HASH TF İLE
VEKT ÖRLEŞ ME Sİ
ANALİZ
NAİVE-
BAYES
MOD ELİ
EĞİ TİM İ
SINIFLANDIRILMIŞ
VERİ SONUÇLARI
VII. DENEYSEL ÇIKTILAR
Deneysel çalışmalarda Ryzen7 12 çekirdek 24 thread 3.4 Ghz
CPU kullanılmıştır. Sistem üzerinde 32GB belleğin 20GB’lık
kısmı JVM üzerinden Spark çalışmasına ayrılmıştır. SSD disk
kullanılarak veri okumada hız artışı sağlanmıştır. Analiz için
Reddit 2010 Haziran ayı veri seti kullanılarak 3.532.867 satırlık
yorum analiz edilmiştir. SparkSQL üzerinden Latin harf
içermeyen ve [deleted] (site içerisinde silinmiş yorumların veri
tabanındaki karşılığı) olarak girilmiş satırlar silinerek gürültü
temizliği yapılmıştır. Dataset içindeki veri satırları 3.264.332
satıra indirgenerek 268.535 veri satırı temizlenmiştir. Veri seti
ilk kez okunduğunda Spark Dataset fonksiyonu olan count() ile
veri seti içindeki tüm satırların sayısı döndürülmüştür. Gürültü
temizliği yapıldıktan sonra aynı fonksiyon tekrar çalıştırılarak
veri setinde kalan satırların sayıları, ilk sayımda elde edilen
değerden çıkarılarak gürültü temizliğinde indirgenen satırların
sayısı doğrulanmıştır.
Yapılan analiz sonuçlarında elde edilen veri seti içinde 3 ayrı
kapsamda 4 farklı kategori üzerinden analiz gerçekleştirilmiştir.
Kadın ve erkeklerin yapısal özellikleri baz alınarak en çok
kullanılan kelimeler üzerinden birer anahtar kelime grubu
hazırlanmış, etiketlendirilerek eğitilmiştir. Eğitilen model %60-
%40 yüzdelerinde rastgele ayrılarak kendi içinde DVM
algoritması üzerinden analize sokulmuştur. Modelin doğruluk
yüzdesi, ROC (Receiver Operating Characteristic) alıcı işlem
karakteristiği eğrisinin üstünde kalan (TP – True Positive)
yüzde oranına göre belirlenmiş ve tabloda sunulmuştur.
TABLO I. KADIN ERKEK ANALIZ SONUÇLARI
Cinsiyet
Eşleşme Sayısı
Yüzde
Erkek
2449266
%75,03
Kadın
1631914
%49,90
TABLO II. SPAM VE KÖTÜ SÖZ ANALIZ SONUÇLARI
Analiz Tipi
Eşleşme Sayısı
Yüzde
Spam İçerik Analizi
2775486
%85,02
Kötü Söz İçerik Analizi
1957503
%59,96
TABLO III. DVM MODEL DOĞRULUK YÜZDELERİ
Destek Vektör Makinesi Model Doğruluk Yüzdesi
Kadın
Erkek
Spam
Kötü söz
%61
%69
%72
%64
TABLO IV. DVM VE NAIVE BAYES ALGORITMASI KARŞILAŞTIRMASI
Algoritma
Cinsiyet
Eşleşme
Yüzde
Süre(ms)
Naive Bayes
Erkek
2283710
%69,95
36428
Kadın
980622
%30,04
DVM
Erkek
2449266
%75,03
37271
Kadın
1631914
%49,90
Doğruluk oranı belirlenen model reddit veri seti üzerinde satır
satır çekilen yorumlar ile analize sokulmuştur. Veri seti sabit
tutularak, spam ve kötü söz için anahtar kelimeler elde edilip
bir model haline getirilerek model doğrulukları sorgulanmış ve
aynı analize sokulmuştur. Sonuçlar tablolar halinde aşağıda
verilmektedir
Tablo I içerisinde DVM algoritması ile Spark üzerinden yapılan
kadın erkek analiz sonuçları, eşleşme miktarları ve yüzdelik
oranlar verilmektedir. Elde edilen sonuçlara göre erkek eşleşme
sayısı 2.449.266 iken oranı %75,03, kadın eşleşme sayısı
1.631.914 ve oranı %49,90 dur Burada analiz
gerçekleştirilirken kadın ve erkek anahtar kelimeleri ayrı ayrı
1.0 ondalık değeri ile etiketlenerek ayrı modeller oluşturulmuş
ve sırası ile reddit verisi üzerinde analize sokulmuştur.
SparkDVM algoritması eşleşme olmaması durumunda 0.0
etiketini geri döndürmektedir. Bu yüzden etiketleme yaparken
0.0 kullanılmaması gerekmekte, kullanıldığı takdirde dönen
sonuçlar içinde hiçbir kategoriye girmemiş veriler de
gelmektedir. Bu durum analiz sonuçlarının hassasiyetini
olumsuz yönde etkileyecektir. Sonuçlardan da anlaşılacağı
üzere sonuç sayıları ve yüzdelerinin toplamları veri setinden
fazla olmaktadır bunun sebebi her seferinde bir model analize
sokulduğu için %20’lik bir veri modelin hassasiyetinin dışında
kalarak hem kadın hem de erkek sınıfına girmektedir. Oluşan
bu durum metin madenciliğin iki kategoriye birden ait olma
durumu olarak adlandırılır ve sıkça görülmektedir. Naive-
Bayes yönteminde de bu görülmemektedir Bayes algoritması
tek seferde çoklu etiket modeli eğitebilir ancak Bayes’in
olumsuz yanı model içerisinde kelime frekanslarından dolayı
tek bir etikete yoğunluk verme eğilimi olabilmektedir. Bu iki
durumun önüne geçebilmek için amaca yönelik ayrımı daha net
yapacak bir hiperçizgi oluşturan anahtar kelimeler kullanmak
Input: Raw Data
Output: Classification Category Ratios
1: read: keywords
2: function LabeledPoint(key, String)
3: for all keyword data
4: union: LabeledPointd
5: train model: TrainingData, Iteration
6: read: Dataset
7: sparkSQL: CleanData
8: foreach: CleanedDataset
9: predict = (pos prob > neg prob) ? pos : neg
10: if Predict: true
11: counter++
12: read: SpamKeywords
13: function LabeledPoint(key, String)
14: for all keyword data
15: train model: TrainingData, Iteration
16: foreach: CleanedDataset
17: predict = (pos prob > neg prob) ? pos : neg
18: if Predict: true
19: counter++
20: read: BadWordKeywords
21: function LabeledPoint(key, String)
22: for all keyword data
23: train model: TrainingData, Iteration
24: foreach: CleanedDataset
25: predict = (pos prob > neg prob)? pos : neg
26: if Predict: true
27: counter++
28: else
29: return
30: end function
gerekmektedir. Bu kelimeleri belirlemek ayrı bir alanda geniş
ve ciddi bir akademik çalışma gerektirmektedir.
Tablo 2 içerisinde ise ilk satırda DVM algoritması ile Spark
üzerinden yapılan spam filtresi analiz sonuçları, eşleşme
miktarları ve yüzdelik oranlar verilmiştir. Bu sonuçlara göre
spam kelime barındıran yorum eşleşme sayısı 2.775.486 iken
oranı %85,02’dir. İkinci satırda ise kötü söz filtresi analiz
sonuçları, eşleşme miktarları ve yüzdelik oranlar verilmiştir. Bu
sonuçlara göre kötü söz içeren yorum eşleşme sayısı 1.957.503
iken oranı %59,96’dur. Spark üzerinden gerçekleştirilen DVM
algoritması ile sınıflandırma analiz sonuçlarının tutarlılığının
kontrol edilebilmesi için veri seti ve anahtar kelimeler sabit
tutularak aynı analiz Naive Bayes algoritması ile
gerçekleştirilmiş ve sonuçları Tablo 3’te verilmiştir.
Tablo 3 üzerinde DVM algoritmasın kullanılan her bir modelin
%60-%40 rastgele oranla bölünmesi ve kendi içinde analiz
gerçekleştirmesi ile elde edilen ROC eğrisinin üstünde kalan
oranların göre model doğruluk yüzdeleri verilmiştir.
Tablo 4 üzerinde verilen bilgilere dayanarak Naive Bayes ve
DVM algoritmaları aynı veri seti ve anahtar kelimeler ile aynı
sonuçları vermektedir. Süre bazında Naive Bayes 843 ms gibi
bir kazanç sağlamaktadır. Bunu sebebi Bayes adından da
anlaşılabileceği gibi naif yani lineer bir sınıflandırma
kullanmasıdır ve L1 düzenlemesini (regülasyon) kullanır, DVM
ise L2 düzenlemesi kullanarak logaritmik bir regülasyon
gerçekleştirdiği için süre bazında küçük bir artış gerçekleşir.
Karşılaştırma analizi 3,2 milyon satırlık veri seti üzerinde
gerçekleştirilmiş ve tüm analiz süresi (SparkSQL ile veri
temizleme dahil) üzerinden sonuçlar gösterilmiştir
Şekil 4’de Spark’ın seçilen veri kümeleri üzerinden yapılan
analiz esnasında veri kümeleri ve analiz başına harcanan süreler
milisaniye cinsinden grafik halinde verilmiştir. Grafik
gösterimi yapılırken sadece algoritmanın sınıflandırma
aşamasında harcadığı zaman verilmiştir. SparkSQL üzerinden
veri temizlenmesi dahil edilmemiştir.
Şekil 4. Seçilen veri setleri üzerinden SPAM geçen sürelerin milisaniye
cinsinden ifadesi
VIII. SONUÇLAR
Bu çalışmada veri madenciliği alanında yeni bir yaklaşımla
ortaya çıkan verileri diskten bir kere okuyup RAM üzerinde
depolama mimarisi ile geliştirilen Apache Spark kullanılmıştır.
Spark çerçevesi ile geliştirilen analiz ortamında metin
sınıflandırması ve bilgi çıkarımı probleminde istatistik
temellerine dayanan makine öğrenmesi bilimi kullanılmıştır.
Makine öğrenmesi bünyesinde bulunan Destek Vektör
Makinesi yöntemi ile üç farklı alanda dört kategoride analiz
gerçekleştirilmiştir. Veri setlerinde doğru ve güvenilir analiz
gerçekleştirmek için terminolojide bulunan hedefe yönelik
anahtar kelimeler belirlenmiş ve set haline getirilmiştir. Set
haline getirilen anahtar kelimeler etiketlendikten sonra destek
vektör makinesine göre eğitilmiş ve model haline getirilip veri
seti üzerinden analiz gerçekleştirilmiştir. Elde edilen sonuçlar
süre, analiz eşleşmesi, yüzdelendirme, seçilen belirli
büyüklükteki veri setleri şeklinde bölümlendirilerek detaylı
tablo ve grafiklerle sunulmuştur.
KAYNAKLAR
[1] C. Clifton, “Encyclopædia Britannica: Definition of Data Mining”,
Retrieved 2010-12-09.
[2] T. Hastie, R Tibshirani, and J. Friedman, “The Elements of Statistical
Learning: Data Mining, Inference, and Prediction”, Second Edition,
Springer, 2009.
[3] I. H. Witten, E. Frank, and M. A. Hall, “Data Mining: Practical Machine
Learning Tools and Techniques”, Third Edition, Elsevier, 2011.
[4] M. Kantardzic, “Data Mining: Concepts, Models, Methods, and
Algorithms”, John Wiley & Sons, 2003.
[5] S. Kotsiantis, D. Kanellopoulos, and P. Pintelas, “Data Preprocessing for
Supervised Learning”, International Journal of Computer Science, Vol.
1, Number 1 , 2006.
[6] J. Han, M. Kamber, “Data mining: concepts and techniques”, Second
Edition Morgan Kaufmann, 2001.
[7] K. B. Cohen, L. Hunter, “Getting Started in Text Mining”, PLoS
Computational Biology, 4(1), 2008.
[8] B. Pang, L. Lee, and S. Vaithyanathan, “Thumbs up? Sentiment
Classification using Machine Learning Techniques”, Proceedings of the
ACL-02 conference on Empirical methods in natural language processing,
Vol. 10, 2002.
[9] M. Zaharia, M. Chowdhury, M. J. Franklin, S. Shenker, and I. Stoica,
“Spark: Cluster Computing with Working Sets”, Proceedings of the 2nd
USENIX conference on Hot topics in cloud computing 2010.
[10] M. Zaharia, M. Chowdhury, T. Das, A. Dave, J. Ma, M. McCauley, M. J.
Franklin, S. Shenker, and I. Stoica, “Resilient Distributed Datasets: A
Fault-Tolerant Abstraction for In-Memory Cluster Computing”, Proc. of
the 9th USENIX conference on Networked Systems Design and
Implementation 2012.
[11] R. Xin, J. Rosen, M. Zaharia, M. Franklin, S. Shenker, I. Stoica, “Shark:
SQL and Rich Analytics at Scale”, AMPLab, EECS, UC Berkeley, 2013.
[12] “MLlib | Apache Spark”, spark.apache.org, Retrieved 2017-05-04.
[13] W. H. Press, S.A. Teukolsky, W. T. Vetterling, and B. P. Flannery,
“Section 16.5. Support Vector Machines”, Numerical Recipes: The Art of
Scientific Computing (3rd ed.), 2007.
[14] T. Joachims, “Transductive Inference for Text Classification using
Support Vector Machines”, Proc. of the Sixteenth International
Conference on Machine Learning, 1999.
0
5000
10000
15000
20000
25000
30000
Süreler (ms) Linear (Süreler (ms))