crx4 , 12 Aralık, 2016
Bu süreç boyunca elde bulunan eğitim kümesinden veri ambarı tasarımı yapılması hedeflenir. Kelime bazlı frekans hesabı yapılır, kelime kümesi seçilir, seçilen küme ayrı bir tabloda saklanır ve kaynak olarak kullanılır. Veri ambarı söz konusu 2 tablo yardımıyla meydana getirilir ve süreç sonucunda artık veri algoritma girdisi olarak hazır hale gelmiş olur.
Duygu ağırlığı olan kelimeler seçme aşamasına ulaşabilmek için eğitim kümemizde bulunan girdilerin içeriklerindeki her bir kelimenin frekans hesabının yapılması gerekir. Bu frekans hesabı sonunda elde edilen yeni veri tabanı tablosundan kelimeler seçerek veri ambarı tasarlanır.
Bu adımı gerçekleştirmek üzere bir frekans tablosu yaratılır ve bu tabloya PHP çatımız yardımıyla oluşturulan fonksiyonlar sayesinde kelimeler eklenir. Fonksiyon her bir girdi metnini alıp boşluklara göre kelimelere böler, girdinin her bir kelimesini frekans tablosunda arar, varsa sayısını güncelleyerek bir arttırır yoksa tabloya ekleyerek bir sonraki kelimeye geçer. Kelime seçimi yaparken karar verme açısından yardımcı olsun diye her bir kelime için hangi analizde kaç tane geçtiği bilgisi de tutulur. Bu işlevler yönetim paneline kazandırılır.
CREATE TABLE `words_frequency` ( `id` int(11) NOT NULL, `word` varchar(50) NOT NULL, `count` int(11) NOT NULL DEFAULT '0', `count_n` int(11) NOT NULL DEFAULT '0', `count_h` int(11) NOT NULL DEFAULT '0', `count_u` int(11) NOT NULL DEFAULT '0' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
public function update_frequencies() { $data['chosen_entries'] = $this->Entry_Model->get_chosen_entries(); foreach ($data['chosen_entries'] as $row){ $entry_words = explode(' ', $row->content_text); $entry_words = array_unique($entry_words); foreach ($entry_words as $word) { if($this->Word_Model->is_adready_inserted($word)) $this->Word_Model->count_up_word_f($word, $row->analysis); else $this->Word_Model->insert_word_f($word, $row->analysis); } } redirect(''); }
ID | WORD | COUNT | COUNT_N | COUNT_H | COUNT_U |
78 | adam | 830 | 406 | 207 | 217 |
236 | iyi | 689 | 342 | 178 | 169 |
1341 | lan | 662 | 300 | 209 | 153 |
1196 | son | 572 | 305 | 134 | 133 |
620 | insan | 555 | 252 | 131 | 172 |
175 | guzel | 537 | 264 | 166 | 107 |
2056 | yeni | 340 | 169 | 94 | 77 |
518 | para | 332 | 162 | 64 | 106 |
… |
Çizelge: Frekans tablosundaki bazı kayıtlar.
Bu çalışmada 8 çekirdekli bir bilgisayarda saatlerce frekans hesabı yapıldıktan sonra frekans tablosunda yaklaşık 100.000 kelime yer almış ve bunların arasından yaklaşık 63.000’i sadece bir kez geçmiş olduğu saptanmıştır.
Veri ambarı tasarımı hedefine adım adım yaklaşırken duygu ağırlıklı kelimeleri seçmek için bir kaynak oluşturuldu. Bu kaynaktan yararlanarak kelimeler seçilir ve yeni bir seçilmiş kelime tablosu oluşturulur.
Frekans tablosu “COUNT” kolonunun değeriyle büyükten küçüğe doğru sıralanır ve Mysql Workbench yardımıyla Excel CSV dosyası olarak çıktı alınır. Alınan bu çıktı içerisindeki kelimelerden, araştırmacı ve sözlüğü kullanan kişilerden oluşan bir takım mutlu veya mutsuz gibi polar ağırlıkları olan kelimeleri tartışarak seçerler. Bu kelimeler çok sayıda girdi içerisinde geçen kelimeler, sayısı baskın olmasa da keskin bir şekilde duyguyu hissettiren kelimeler ve eğitim kümesinde kendini ifade etme şansı bulamamış, kullanımı sonucunda duygu ağırlığını ciddi şekilde etkileyen kelimeler olabilirler. Seçimi tamamlanmış kelimeler seçilen kelime tablosuna aktarılırlar.
Bu çalışmada bu şekilde yaklaşık 200 kelime seçilmiştir. Seçimlere karar verirken daha önce bu konuda çalışmalara imza atmış olan proje danışmanının yardımlarından yararlanılmıştır.
WORD | CNT | WORD | CNT | WORD | CNT | WORD | CNT |
bile | 1005 | dedim | 188 | chp | 106 | dibine | 36 |
ya | 907 | arasinda | 187 | takip | 105 | orgut | 34 |
iyi | 689 | turkiyede | 185 | ilan | 103 | tecavuze | 33 |
zaten | 669 | SMILEEMOTICON | 175 | arkadasim | 101 | kuran | 33 |
lan | 662 | amina | 174 | kan | 99 | vicdan | 30 |
insan | 555 | bizi | 172 | hava | 99 | muhalefet | 29 |
guzel | 537 | gol | 168 | nefret | 99 | fiziksel | 28 |
artik | 535 | calisan | 167 | adamlarin | 98 | polise | 27 |
ilk | 526 | cevap | 162 | saygi | 97 | mutsuz | 27 |
oyle | 488 | bok | 160 | aciklama | 96 | patlama | 25 |
neden | 412 | el | 160 | galatasaray | 96 | pislik | 24 |
bunun | 402 | sozluk | 160 | besiktas | 95 | bozuk | 24 |
olsa | 387 | maci | 152 | teror | 94 | suriyeli | 24 |
fazla | 376 | yoktur | 152 | sikeyim | 79 | gencecik | 24 |
insanlar | 359 | kendisine | 146 | adalet | 79 | osmanli | 24 |
beni | 342 | hak | 145 | anasini | 78 | islami | 23 |
yeni | 340 | cocugu | 145 | islam | 78 | muslumanlar | 21 |
kisi | 337 | sabah | 141 | sozlukte | 77 | nobel | 21 |
hicbir | 337 | orospu | 141 | canim | 77 | irkci | 20 |
ulan | 336 | gelecek | 140 | terorist | 76 | yasta | 20 |
para | 332 | entry | 140 | aci | 75 | kizla | 18 |
burada | 325 | cikip | 138 | tecavuz | 74 | pezevenk | 18 |
eden | 303 | kendine | 136 | efendim | 74 | polisler | 18 |
an | 302 | futbol | 135 | pkk | 73 | bal | 18 |
olmayan | 302 | kardesim | 134 | film | 73 | vur | 18 |
sizin | 289 | bunlarin | 134 | sehit | 67 | sabir | 17 |
tarafindan | 271 | insanlari | 132 | futbolcu | 66 | karanlik | 17 |
kotu | 260 | parti | 132 | soguk | 64 | kahkaha | 17 |
allah | 254 | a | 129 | bomba | 64 | sikik | 16 |
ulkede | 253 | milli | 128 | isid | 63 | gotunuze | 16 |
gerek | 250 | yalniz | 128 | sicak | 62 | saniyorsunuz | 16 |
adamlar | 249 | baslik | 127 | dizi | 61 | bombayi | 15 |
oy | 247 | kendimi | 127 | sampiyon | 57 | burs | 15 |
tabi | 244 | sacma | 127 | SADEMOTICON | 51 | cocukluk | 14 |
olabilir | 238 | yazik | 125 | euro | 48 | multeci | 14 |
yaptigi | 237 | ciddi | 124 | cay | 46 | hmm | 14 |
onemli | 237 | evde | 123 | sert | 45 | dondurma | 14 |
cocuk | 235 | polis | 120 | katil | 45 | cocugunun | 14 |
bence | 234 | mutlu | 119 | genis | 45 | siddetli | 13 |
akp | 234 | yahu | 116 | birinci | 44 | irkcilik | 12 |
diyor | 230 | mal | 116 | saldiri | 44 | icmeye | 11 |
hemen | 229 | eksi | 113 | lanet | 43 | jest | 11 |
mesela | 214 | gordum | 110 | tatli | 41 | hastane | 11 |
ulkenin | 210 | hdp | 110 | siddet | 39 | polisten | 10 |
insanlarin | 209 | ev | 110 | serefsiz | 38 | yerim | 10 |
kiz | 205 | takimi | 109 | evin | 37 | yaratiklar | 9 |
sanirim | 196 | oglum | 108 | hirsiz | 36 | mina | 8 |
devlet | 196 | kadinin | 107 | ataturk | 36 | iftira | 7 |
takim | 195 | devletin | 107 | aksine | 36 | dumur | 7 |
ulke | 194 | fenerbahce | 107 |
Çizelge: Duygu ağırlığı olan seçilmiş sözcükler.
Veri madenciliği algoritmalarının girdisi olarak kabul ettiğimiz veri matrisinin oluşturulması için atılan adımlar tamamlandığında veri tabanı tablosu bu kez farklı bir biçimde tasarlanır. Adım adım oluşturulan süreçlerin işaret ettiği tablodur veri ambarı. Her bir satırı bir girdiyi temsil eder ve her bir sütunu seçilmiş olan kelimelerden meydana gelir. Girdi içerisinde geçen kelimeler ilgili sütunda 1 değerini alırken içermeyenler 0 değerlerini alırlar. Kelime sütunlarının sonunda girdinin analizini tutan kolon bulunur.
ID | ENTRY_ID | WORD_23 | … | WORD_63741 | ANALYSIS |
1 | 2 | 1 | … | 0 | n |
2 | 5 | 1 | 0 | h | |
3 | 8 | 0 | 0 | u | |
… | … |
Çizelge: Veri ambarı tablosunun yapısı.
Yönetim panelinin duygu analizi sürecindeki fonksiyonlardan sonuncusu olan veri ambarının oluşturulması birkaç adımdan oluşur. İlk olarak tablo yapısına seçilen kelimelerin benzersiz sütunları “WORD_” kelimesinin sonuna bir alttan tire sonrasında eklenerek kolonlar oluşturulur. Böylece veri ambarının genişliği dinamik olarak kurulmuş olur. Sonrasında her bir girdi tekrar kelimelerine ayrıştırılıp, sırasıyla her girdi kelimesi seçilen kelime tablosundaki bütün kelimeler ile karşılaştırılır. Eğer eşleşme gerçekleşirse girdi veri ambarına ilgili kelime için 1 değerini alarak kaydedilir.
Duygu analizi sırasında projenin planladığı bir diğer başarım metodu ise veri ambarını 3 farklı biçimde tasarlamaktır. Bu tasarım sayesinde veriler 2 boyutlu olarak duygu analizinden geçebileceklerdir. 1. boyutta girdiler nötr yada polar, 2. boyutta ise mutlu yada mutsuz olarak işaretlenebilir hale geleceklerdir. Bunu gerçekleştirmek için yönetim paneline seçenek eklenir.
CREATE TABLE `words` ( `id` int(11) NOT NULL, `entry_id` int(11) NOT NULL, `length` bigint(20) NOT NULL, `analysis` varchar(1) DEFAULT 'n' ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
public function build() { $fields = array(); $results = array(); $data['chosen_words'] = $this->Word_Model->get_chosen_words(); foreach ($data['chosen_words'] as $row) $results[] = array( 'id' => $row->id ); foreach ($results as $value) $fields[ 'word_'.$value['id'] ] = array('type' => 'INT', 'constraint' => 1, 'default' => 0); if($this->Word_Model->add_column_to_cws($fields)) redirect(''); } public function drop_columns() { $results = array(); $data['chosen_words'] = $this->Word_Model->get_chosen_words(); foreach ($data['chosen_words'] as $row) $results[] = array( 'id' => $row->id ); foreach ($results as $value) $this->Word_Model->drop_column_from_cws( 'word_'.$value['id'] ); redirect(''); } function truncate() { if($this->Word_Model->truncate_table()) redirect(''); } public function update() { $result = $this->Word_Model->get_chosen_words(); $this->Entry_Model->update_whole_table($result); redirect(''); } public function clear() { $this->Entry_Model->clear_notr_entries(); redirect(''); } public function clear_weaks() { $data['chosen_words'] = $this->Word_Model->get_chosen_words(); foreach ($data['chosen_words'] as $row) $results[] = array( 'id' => $row->id ); $data['words'] = $this->Word_Model->get_words(); foreach ($data['words'] as $row) if( $this->Entry_Model->clear_weak_entry($row->id, $results) ) $this->Entry_Model->delete_word_by_id($row->id); redirect(''); }
Yukarıdaki şekildeki aşamalardan geçerek oluşan veri ambarı artık veri madenciliği işlemine hazırdır. Projede karar kılınan veri ambarı yapısı aşağıdaki çizelgede gösterilen testler sonucunda yaklaşık 200 seçilmiş kelime kolonundan oluşan ve içerisinde en az 3 seçilmiş kelime geçen girdilerden meydana gelir. Bu bağlamda uygulama kolaylığı ve verdiği başarı göz önüne alınarak SMO algoritması veri madenciliği yöntemi olarak seçilmiştir.
Bütün olarak sürecin son adımı olan bu adımda veri madenciliği uygulamaları test edilerek oluşturulan veri ambarından amacına uygun, en verimli olanını seçmek hedeflenir. Bu seçim 2 boyutta oluşturulan verilerin başarı oranlarıyla yapılır. Birinci boyutta verinin polaritesine göre, ikinci boyutta ise verinin duygu türüne göre ölçümler yapılır.
Veri ambarı Workbench yardımı ile CSV formatında dışa aktarılır. WEKA’nın Explorer penceresinden dışa aktardığımız dosya seçilir ve ilk iki sütun bir karara etkisi olmadığı için devre dışı bırakılır. Sınıflandırma sekmesinden bir algoritma seçilir ve Cross-Validation seçeneği ile sonuç elde edilir. Bu yöntem veriyi yanındaki kutuda belirtilen yüzdeye göre bölerek her defasında farklı bir parçasından olmak üzere test ederek sonuç ürettiği için daha verimli sonuçlar elde edilebilir.
ALG. | YÖNTEM | N H U | N P | H U |
NaiveBayes | 100 Kelime (6323) | 46.0699 % | 54.2464 % | 62.4927 % |
‘’ Min 3 kel. içeren(2309) | 48.246 % | 56.9511 % | 68.9984 % | |
150 Kelime (6323) | 45.0894 % | 55.9545 % | 62.9597 % | |
‘’ Min 3 kel. içeren(3043) | 48.4719 % | 59.4151 % | 68.6732 % | |
200 Kelime (6323) | 45.3582 % | 56.0177 % | 63.1349 % | |
‘’ Min 3 kel.içeren(3239) | 48.3483 % | 58.9071 % | 68.8005 % | |
SMO | 100 Kelime (6323) | 47.6198 % | 55.6856 % | 63.8646 % |
‘’ Min 3 kel. içeren(2309) | 49.5453 % | 56.9078 % | 68.9984 % | |
150 Kelime (6323) | 48.1575 % | 57.789 % | 65.2948 % | |
‘’ Min 3 kel. içeren(3043) | 50.838 % | 58.6592 % | 68.1204 % | |
200 Kelime (6323) | 48.6636 % | 57.9155 % | 65.5867 % | |
‘’ Min 3 kel.içeren(3239) | 51.59 % | 58.2587 % | 69.6078 % | |
lazyIBk | 100 Kelime (6323) | 44.0614 % | 52.5384 % | 58.9901 % |
‘’ Min 3 kel. içeren(2309) | 41.1 % | 51.3209 % | 56.8362 % | |
150 Kelime (6323) | 43.9348 % | 53.3449 % | 58.7274 % | |
‘’ Min 3 kel. içeren(3043) | 43.2468 % | 51.6595 % | 58.3538 % | |
200 Kelime (6323) | 44.4251 % | 53.3133 % | 58.202 % | |
‘’ Min 3 kel.içeren(3239) | 43.5011 % | 51.0034 % | 58.5352 % | |
J48 | 100 Kelime (6323) | 44.346 % | 54.6734 % | 61.7046 % |
‘’ Min 3 kel. içeren(2309) | 41.0134 % | 52.9233 % | 61.3672 % | |
150 Kelime (6323) | 44.2828 % | 55.3693 % | 61.9089 % | |
‘’ Min 3 kel. içeren(3043) | 43.1811 % | 55.2744 % | 61.4251 % | |
200 Kelime (6323) | 44.0297 % | 55.5907 % | 60.3327 % | |
‘’ Min 3 kel.içeren(3239) | 44.3347 % | 55.2331 % | 60.6113 % | |
Random Forest | 100 Kelime (6323) | 44.346 % | 54.3413 % | 62.4051 % |
‘’ Min 3 kel. içeren(2309) | 47.2066 % | 56.2148 % | 67.0906 % | |
150 Kelime (6323) | 45.121 % | 55.907 % | 62.843 % | |
‘’ Min 3 kel. içeren(3043) | 47.6503 % | 57.3447 % | 66.0934 % | |
200 Kelime (6323) | 46.1964 % | 56.8559 % | 63.7186 % | |
‘’ Min 3 kel.içeren(3239) | 49.3053 % | 57.3016 % | 68.3391 % | |
SimpleCart | 100 Kelime (6323) | 46.9872 % | 55.5274 % | 60.7706 % |
‘’ Min 3 kel. içeren(2309) | 46.9034 % | 55.6951 % | 62.8776 % | |
150 Kelime (6323) | 47.0505 % | 56.6661 % | 60.7414 % | |
‘’ Min 3 kel. içeren(3043) | 47.5846 % | 57.0818 % | 61.3022 % | |
200 Kelime (6323) | 47.0346 % | 56.761 % | 61.0625 % | |
‘’ Min 3 kel.içeren(3239) | 47.5764 % | 57.0238 % | 61.4764 % |
Çizelge: Sınıflandırma algoritmalarının WEKA’da veri ambarı başarım tablosu.
Bu projede yapılan testler sonucunda karşılaştırmalar ve fikir yürütmeler yapılmış, SMO algoritması seçilmiştir. Böylece veri madenciliği çalışması burada sona ermiş ve artık projeyi gerçekleştirme adımına geçmek için bir engel kalmamıştır. WEKA çıktıları SMO fonksiyonel algoritmasının ürettiği değerleri bünyesinde tuttuğu için bu veriler kaydedilerek gerçekleştirim aşamasında kullanılmak üzere saklanır.
duygu analizi adımları duygu analizi aşamaları text de duygu analizi veri madenciliği ile duygu analizi
Bir cevap yazın