Skip to content

[rojak-analyzer] RojakSVM for Sentiment Classification#127

Merged
pyk merged 2 commits intomasterfrom
feature/rojak-analyzer/add-svm
Oct 23, 2016
Merged

[rojak-analyzer] RojakSVM for Sentiment Classification#127
pyk merged 2 commits intomasterfrom
feature/rojak-analyzer/add-svm

Conversation

@pyk
Copy link
Owner

@pyk pyk commented Oct 23, 2016

rojak menggunakan SVM based sentiment classifier.

Step pertama, kita transform general problem multi-label nya jadi multi-class sih. Intuisinya seperti ini:

kan kita punya data yang udah di label {pos,neg}_cagub dll kan. Dari label itu labelnya kita ubah menjadi lebih sederhana dengan menggunakan label pasangan cagub-cawagub saja. Misal

neg_ahok, pos_agus, pos_silvy => neg_ahok_djarot, pos_agus_silvy

Step kedua, pembuatan classifier. Disini kita buat classifier yang tugasnya:

  1. Cari tau apakah suatu berita bersentimen positif ke pasangan calon
  2. Cari tau apakah suatu berita bersentimen negatif ke pasangan calon
  3. Cari tau apakah suatu berita tidak membahas pasangan calon

Contoh classifier untuk pasangan cagub-cawagub anies-sandi, tugas classifier ini membedakan 3 class: pos_anies_sandi, neg_anies_sandi dan oot.

Eksekusi

Dari data ini sentiment_classification_data.csv.zip

Hasil dari dumb evaluation-nya make sense sih. Jadi kita train dan eval dengan dataset yang sama hasilnya seperti ini:

rojak) % python rojak_svm.py
classifier: classifier_anies_sandi
precision: 0.996551724138
recall: 0.996551724138
f1: 0.996551724138
classifier: classifier_agus_sylvi
precision: 1.0
recall: 1.0
f1: 1.0
classifier: classifier_ahok_djarot
precision: 0.99674267101
recall: 0.99674267101
f1: 0.99674267101
== Test
Text news:
['\n    Ogah Ikut \'Perang\' Statement di Pilgub DKI, Agus: Menghabiskan Energi\n    <strong>Jakarta </strong> - Pasangan incumbent DKI Basuki T Purnama (\n    Ahok) dan Djarot Saiful Hidayat beberapa kali tampak adu statement \n    dengan pasangan bakal calon Anies Baswedan dan Sandiaga Uno. Kandidat \n    bakal Cagub DKI Agus Harimurti mengaku tak mau ikut-ikutan terlebih \n    dahulu. <br> <br> ""Pertama masa kampanye baru dimulai 28 Oktober. \n    Artinya itu berdasarkan UU itulah yang akan saya gunakan langsung \n    official untuk menyebarluaskan menyampaikan gagasan visi misi program \n    kerja dan sebagainya,"" ungkap Agus. <br> <br> Hal tersebut \n    disampaikannya saat berbincang di redaksi detikcom, Jalan Warung Jati \n    Barat Raya, Jakarta Selatan, Kamis (6/10/2016). Agus mengaku saat ini \n    lebih ingin memanfaatkan waktu untuk mensosialisasikan diri sesuai \n    tahapan KPUD. <br> <br> ""Pada akhirnya tentu saya akan lakukan itu. \n    Saya menghindari konflik karena hati saya mengatakan buat apa saya \n    mencari dari kesalahan orang atau terlibat dalam konflik karena \n    menghabiskan energi,"" ucapnya. <br> <br> Apalagi menurut Agus, ia \n    berhubungan baik dengan para pasangan calon tersebut. Mantan Danyon 203/\n    Arya Kemuning itu mengaku ingin fokus menyapa masyarakat bersama dengan \n    pasangan cawagubnya, Sylvia Murni. <br> <br> ""Saatnya nanti kita akan \n    langsung ke masyarakat. (Untuk mensosialisasikan) yang saya miliki, \n    mengapa anda harus memahami dan mengapa ada kepentingan Anda untuk \n    memilih saya,"" kata Agus. <br> <br> Kehadiran putra sulung Presiden \n    ke-6 RI Susilo Bambang Yudhoyono (SBY) itu seperti antitesa seorang Ahok \n    yang dikenal keras. Agus dinilai sebagai sosok yang santun dan membumi. <\n    br> <br> ""Insya Allah yang saya tampilkan sehari-hari itu apa adanya \n    saya. Karena saya tidak setuju kalau mengubah karakter yang sudah \n    dibentuk selama puluhan tahun kemudian dibentuk hanya untuk memenuhi \n    permintaan pasar atau permintaan media,"" terang dia. <br> <br> \n    ""Artinya saya menjadi sesuatu yang artificial, saya di CFD berlari \n    menyapa masyarakat itu juga yang sebetulnya saya biasa lakukan dulu \n    ataupun sebelum saya punya kesibukan di kota lain,"" imbuh Agus. <br> <\n    br> Mantan perwira berpangkat Mayor itu memastikan penampilan atau sikap \n    sehari-harinya bukan sebagai sesuatu yang palsu. Agus juga menyatakan \n    ada banyak aspirasi masyarakat yang ia dapati ketika turun menyapa ke \n    lapangan. <br> <br> ""Mereka mengekpresikan banyak hal. Yang paling (\n    saya) senang ya tentu mendoakan \'Pak, semoga sukses\'. Tetapi saya tidak \n    ingin hanya disenangi tapi untuk mencari tahu apa yang menjadi keluhan \n    dan kebutuhan masyakarat,"" urainya. <br> <br> Lantas apa yang paling \n    banyak didapat Agus ketika menyapa warga? <br> <br> ""Mereka ingin \n    kehidupan ekonominya menjadi baik, lingkungan lebih baik, nggak terlalu \n    macet, bisa memiliki akses kesehatan yang lebih baik. Tapi banyak juga \n    yang mereka (mengatakan) \'Pak kami ingin dihargai, ingin diayomi,\'. As \n    simpel as that,"" jawab Agus. <br> <br> Pernyataan itu tampaknya seperti \n    menyindir Ahok yang beberapa kali beradu mulut dengan warga. Ini terkait \n    dengan kebijakan Ahok yang tidak diterima warga. Tak jarang petahana itu \n    mengeluarkan kata-kata makian. <br> <br> ""(Warga juga bilang) \'kami \n    punya harga diri pak. Kami nggak butuh itu, tidak perlu yang \n    berlebihan-lebihan asalkan kami dihargai sebagai warga masyarakat\'. \n    Sebagai human being yang memiliki hak dan kewajiban yang juga untuk \n    memajukan daerahnya. Jadi kadang ada yang begitu juga,"" cerita Agus. <\n    br> <br> Seperti diketahui, Ahok beberapa kali memberi pernyataan \n    \'serangan\' kepada pasangan Anies-Sandiaga. Ahok sempat terlibat argumen \n    lewat media tentang kebersihan sungai di Jakarta. Kemudian Ahok dan \n    Sandiaga juga \'perang\' pernyataan tentang pembuktian harta terbalik. \n    Terakhir Ahok menyerang dengan mengatakan Sandiaga adalah pengemplang \n    pajak karena ikut program Tax Amnesty. <br> <br>   <iframe src=""http://\n    tv.detik.com/20detik/embed/161007018/"" frameborder=""0"" \n    scrolling=""no"" width=""420"" height=""236"" \n    allowfullscreen=""allowfullscreen""></iframe>   <br> <br>   <strong>(ear/\n    imk)</strong>"\n    ']
True label: pos_agus_sylvi
Prediction: [('neg_anies_sandi', -0.69648296391020026), ('oot', -0.41393661571395612), ('pos_anies_sandi', 0.076530196425380337), ('neg_agus_sylvi', -0.96101673308393898), ('oot', -0.73584266227434303), ('pos_agus_sylvi', 0.68691644436736077), ('neg_ahok_djarot', -0.61057091121491713), ('oot', -0.4155895547923934), ('pos_ahok_djarot', 0.002089753333495703)]
(rojak) % python rojak.py train --input sentiment_classification_data.csv --output rojak_svm_model.bin 
(rojak) % python rojak.py eval --test-data sentiment_classification_data.csv --model rojak_svm_model.bin 
classifier: classifier_anies_sandi
precision: 0.996551724138
recall: 0.996551724138
f1: 0.996551724138
classifier: classifier_agus_sylvi
precision: 1.0
recall: 1.0
f1: 1.0
classifier: classifier_ahok_djarot
precision: 0.99674267101
recall: 0.99674267101
f1: 0.99674267101

confusion_matrix_without_normalization_classifier_ahok_djarot
confusion_matrix_without_normalization_classifier_anies_sandi
confusion_matrix_without_normalization_classifier_agus_sylvi

Kalau kita perhatikan dari testnya itu:

True label: pos_agus_sylvi
Prediction: [('neg_anies_sandi', -0.69648296391020026), ('oot', -0.41393661571395612), ('pos_anies_sandi', 0.076530196425380337), ('neg_agus_sylvi', -0.96101673308393898), ('oot', -0.73584266227434303), ('pos_agus_sylvi', 0.68691644436736077), ('neg_ahok_djarot', -0.61057091121491713), ('oot', -0.4155895547923934), ('pos_ahok_djarot', 0.002089753333495703)]

dia punya confident score diatas 0.65 untuk memprediksi berita http://m.detik.com/news/berita/d-3315862/ogah-ikut-perang-statement-di-pilgub-dki-agus-menghabiskan-energi

('pos_agus_sylvi', 0.68691644436736077)

@pyk pyk added the tim-data label Oct 23, 2016
@pyk pyk added this to the Rojak v1.0.0 milestone Oct 23, 2016
@pyk pyk merged commit 91ede02 into master Oct 23, 2016
@pyk pyk deleted the feature/rojak-analyzer/add-svm branch October 23, 2016 20:12
imrenagi pushed a commit to imrenagi/rojak that referenced this pull request Sep 13, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant