pyk / rojak

Project Rojak, Yuk gabung diskusi di Slack nya Rojak: http://team.rojak.id/
Other
98 stars 46 forks source link

[rojak-analyzer] Sentiment Classification Approach #128

Open pyk opened 7 years ago

pyk commented 7 years ago

About

Follow up untuk #75 #96. Terimakasih untuk feedback dari teman-teman, semoga issue ini memperjelas dan membuat pemahaman kita menjadi sama.

Oke di issue ini akan lebih di jelaskan lagi tentang approach apa sih yang bisa kita gunain untuk membuat rojak-analyzer . Issue ini dibuat dengan asumsi pembaca sudah mempunyai pemahaman tentang dasar-dasar sentiment analysis (SA).

Kan ada beberapa macam SA:

Untuk rojak ini kita fokus untuk solve "document-level sentiment" dan/atau "entity-level sentiment".

Sentiment Classification

Di issue ini kita akan fokus untuk solve "document-level sentiment", jadi kita pandang satu dokumen keseluruhan sentimentnya untuk siapa.

Sentiment classification ini lebih gampang dari pada aspect/feature based sentiment analysis yg untuk solve "entity-level sentiment".

Untuk MVP, kita udah membuat classifier based on SVM #127

Salah satu hasil evaluasinya:

confusion_matrix_without_normalization_classifier_ahok_djarot

Untuk refrensinya:

girikuncoro commented 7 years ago

wew paper yang pertama bikinan dosenku lillian lee :))

pyk commented 7 years ago

Update 03/11/16

Untuk sentiment classification, kita pake baseline SVM dan untuk handle multiclass nya kita pake strategi One-Vs-Rest. Ini sudah di implementasi di #164.

Label data

Untuk datanya, di awal kita memakai label perorangan:

'pos_ahok'
'pos_djarot'
'pos_anies'
'pos_sandi'
'pos_agus'
'pos_sylvi'
'neg_ahok'
'neg_djarot'
'neg_anies'
'neg_sandi'
'neg_agus'
'neg_sylvi'
'oot'

Berdasarkan hasil diskusi di #tim-data kita menstransform label ini ke pasangan:

pos_agus_sylvi
neg_agus_sylvi
pos_ahok_djarot
neg_ahok_djarot
pos_anies_sandi
neg_anies_sandi
oot

Alasannya orang2 hanya fokus untuk melihat ke pasangan aja misal seperti trump vs hillary dan sentiment ke ahok pasti efek ke ahok-djarot juga. Hal ini juga mempermudah classifier kita untuk menggeneralisasi.

Satu berita bisa punya lebih dari satu label ini:

pos_agus_sylvi
neg_agus_sylvi
pos_ahok_djarot
neg_ahok_djarot
pos_anies_sandi
neg_anies_sandi

satu berita hanya punya satu label ini:

oot

Untuk datanya bisa di donwload di data_training_7_labels_latest.csv.zip

Catatan

Karena jumlah sample datanya belum balance:

neg_agus_sylvi: 19
neg_ahok_djarot: 108
neg_anies_sandi: 18
oot: 417
pos_agus_sylvi: 184
pos_ahok_djarot: 208
pos_anies_sandi: 172

kita akan menerapkan semi-supervised training, jadi data training nya nanti akan bertambah terus sampai balance, untuk mempercepat proses pelabelan kita suruh Rojak untuk predict labelnya, kalau ada yg salah kita koreksi dan nanti akan menjadi data tambahan untuk training.

Classifier

Untuk classifiernya, kita membuat 4 classifier:

* classifier_agus_sylvi => to predict pos/neg/not about agus-sylvi
* classifier_ahok_djarot => to predict pos/neg/not about ahok-djarot
* classifier_anies_sandi => to predict pos/neg/not about anies-sandi
* classifier_oot => to predict oot or not

Dari 4 classifier tersebut, kita terapkan infering rule seperti ini:

- Given news, Is it oot or not?
    - If oot => label news as oot
    - If not:
        - For each classifier classifier_agus_sylvi, 
          classifier_ahok_djarot, classifier_anies_sandi take the 
          label that have confident score larger than given threshold
          otherwise we don't label the news

Contoh:

=== start DEBUG
Bawaslu DKI: Timses Kerap Abaikan Aturan Pilkada
label: ['oot']
confident_score: {'neg_anies_sandi': -1.0671682578425243, 'pos_ahok_djarot': -0.81042434262450336, 'not_anies_sandi': 0.76268179455861151, 'neg_ahok_djarot': -0.63756135053350294, 'pos_anies_sandi': -0.77171809626483645, 'pos_agus_sylvi': -0.7827062526851396, 'not_agus_sylvi': 0.86203408656440983, 'not_ahok_djarot': 0.36186144827728906, 'neg_agus_sylvi': -1.1119618324548517}
=== end DEBUG
=== start DEBUG
Agus Yudhoyono Ingin Tingkatkan Prestasi Olahraga DKI Jakarta
label: ['pos_agus_sylvi']
confident_score: {'neg_anies_sandi': -0.99141095785462163, 'pos_ahok_djarot': -0.62911732003754761, 'not_anies_sandi': 0.80863227713659958, 'neg_ahok_djarot': -0.99598498612391317, 'pos_anies_sandi': -0.87259113497380691, 'pos_agus_sylvi': 0.76271220887252711, 'not_agus_sylvi': -1.038161533251275, 'not_ahok_djarot': 0.53975597161164002, 'neg_agus_sylvi': -0.77680729066235643}
=== end DEBUG
=== start DEBUG
Djarot Disambut Tepuk Tangan Anggota Baitul Muslimah Indonesia
label: ['pos_ahok_djarot']
confident_score: {'neg_anies_sandi': -1.1684881898510737, 'pos_ahok_djarot': 0.62168500076349853, 'not_anies_sandi': 1.0849894875463117, 'neg_ahok_djarot': -1.2319646572268113, 'pos_anies_sandi': -0.98888602551858151, 'pos_agus_sylvi': -1.1601937486394134, 'not_agus_sylvi': 1.2535383989605675, 'not_ahok_djarot': -0.48919774132146288, 'neg_agus_sylvi': -1.2033293919191395}
=== end DEBUG
=== start DEBUG
Anies Ingin Berikan Pelatihan Pengolahan Sampah kepada PPSU
label: ['pos_anies_sandi']
confident_score: {'neg_anies_sandi': -0.77537869823838546, 'pos_ahok_djarot': -0.91969201451981375, 'not_anies_sandi': -1.3202411920509793, 'neg_ahok_djarot': -0.99551699891345469, 'pos_anies_sandi': 1.0906873327977351, 'pos_agus_sylvi': -1.0633945438839816, 'not_agus_sylvi': 0.97295272712155267, 'not_ahok_djarot': 0.80466706429855794, 'neg_agus_sylvi': -0.93803350211385239}
=== end DEBUG

Dari contoh diatas bisa kita lihat kalau berita:

adalah berita positif tentang ahok-djarot, disini Rojak yakin dengan score: 0.62168500076349853

Catatan

Karena kita tambahin artificial label not_{agus_sylvi,ahok_djarot,anies_sandi} classifier kita punya notion untuk bedain sentiment ini untuk pasangan mana. Untuk saat ini Rojak masih bingung bedain berita tentang Djarot & OOT, karena samplenya masih dikit.

At least dia gak ngaco sih, maksutku ngaco seperti berita oot malah d kasih label negatif ke kandidat tertentu atau berita positif malah di label negatif.

Jadi menurutku udah aman kalo run di prod yg Rojak OvR Pair.

Langkah selanjutnya

rawgni commented 7 years ago

:pray:

pyk commented 7 years ago

Ini udah jalan di prod ya, untuk datanya bisa dilihat di table news_sentiment. Contohnya:

select n.title, s.name, ns.confident_score_raw, ns.confident_score_scaled from news_sentiment as ns
    left join news as n on n.id=ns.news_id
    left join sentiment as s on s.id=ns.sentiment_id;

Result:

+----------------------------------------------------------------------------+-----------------+---------------------+------------------------+
| title                                                                      | name            | confident_score_raw | confident_score_scaled |
+----------------------------------------------------------------------------+-----------------+---------------------+------------------------+
| KPU Jamin Dinamika PPP Tak Pengaruhi Keabsahan Dukungan Calon Pilgub DKI   | oot             |      0.785105045026 |         0.785105045026 |
| Djarot dan Relawan Pendukung Beraksi Benahi Taman Depan Balai Kota Jakarta | pos_ahok_djarot |      0.586551023336 |         0.586551023336 |
| Soal Buka-Bukaan Dana, Sandiaga: Susah Kalau Ahok Mau Menang Sendiri       | pos_anies_sandi |        1.0774539629 |                      1 |
| Anies Baswedan Ingin Anak Muda Lestarikan Budaya Betawi                    | pos_anies_sandi |       1.11617392301 |                      1 |
| Geliat Sophia Latjuba, Olla Ramlan, dan Anissa Pohan di Pusaran Pilgub DKI | oot             |      0.359635388687 |         0.359635388687 |
| Kapolri: Ada Hoax Sebut Saya Perintahkan Pemeriksaan Amien Rais            | oot             |      0.710277964073 |         0.710277964073 |
| Pikir-pikir Jadi Timses, Olla Ramlan: Saya Anggap Sandiaga Kakak Saya      | pos_anies_sandi |      0.756479716289 |         0.756479716289 |
| Sophia, Olla Sampai Annisa Ikut 'Kampanye' Pilgub DKI, Seberapa Efektif?   | oot             |      0.595404422882 |         0.595404422882 |
| Peneliti LSI: Tak Ada yang Dominan, Pilgub DKI Bisa Dua Putaran            | oot             |      0.570319943995 |         0.570319943995 |
| Setara Institute: MUI Jangan Berpolitik Kekuasaan                          | oot             |      0.620676787229 |         0.620676787229 |
| Anies Baswedan Pertanyakan Perubahan Sikap Golkar Akhir-akhir Ini          | pos_anies_sandi |      0.611854007785 |         0.611854007785 |
| Anies Baswedan: Bila Anak Muda Muncul Jadi Calon Pemimpin, Perlu Didukung  | pos_anies_sandi |      0.856921104393 |         0.856921104393 |
| Kecewa ke Ahok, Lieus Sungkharisma Dukung Agus-Sylvi                       | pos_agus_sylvi  |       0.68483020559 |          0.68483020559 |
| Anies: Saya Tak Pernah Tawarkan Diri Maju Pilgub, Tapi Ada Aspirasi        | pos_anies_sandi |      0.668114200482 |         0.668114200482 |
| Dukung Anies-Sandi, Adnan Pandu: Lawan Korupsi Tak Harus Galak             | pos_anies_sandi |      0.838925928343 |         0.838925928343 |
| Eks Pimpinan KPK Jadi Timses Anies-Sandi, PKS: Ini Bukti Bersihkan Korupsi | pos_anies_sandi |      0.767910991814 |         0.767910991814 |
| Sandiaga: Jangan Caci Ahok, Cukup Jangan Pilih Dia di Bilik Suara          | pos_anies_sandi |      0.817823185457 |         0.817823185457 |
| Agus Yudhoyono: Saya Tak Terlalu Terpengaruh Perpecahan Internal PPP       | pos_agus_sylvi  |      0.571641865148 |         0.571641865148 |
| Sylviana Main Opera, Perankan Orang Betawi yang Sambut Baik Tionghoa       | pos_agus_sylvi  |      0.754519232895 |         0.754519232895 |
| PPP Djan Faridz Gembosi Agus-Sylvi, PD: Enggak Ngaruh                      | oot             |      0.569134454289 |         0.569134454289 |
| Dicurhati Ibu-ibu Bantargebang, Anies: Saya Calon di Jakarta Bukan Bekasi  | pos_anies_sandi |      0.904658756758 |         0.904658756758 |
| Doa Annisa Pohan untuk Agus Yudhoyono yang Hanya Bisa Tidur 3 Jam          | pos_agus_sylvi  |      0.681065204828 |         0.681065204828 |
| Impian Anies Baswedan tentang Bantargebang dan Pengelolaan Sampah Jakarta  | pos_anies_sandi |       0.59986164835 |          0.59986164835 |
| Didatangi Anies Baswedan, Warga Bantargebang Minta Zona Pendidikan         | pos_anies_sandi |        1.4470789208 |                      1 |
| Makan Siang Bareng, Sophia Latjuba Ingin Lebih Sehati dengan Ahok          | pos_ahok_djarot |       1.15247042131 |                      1 |
| Serangan ke Agus-Sylvi, Blunder Buat Ahok                                  | neg_ahok_djarot |      0.520220100866 |         0.520220100866 |
| Ingin Jakarta Ramah Anak, Cak Imin: Ganti Ahok dengan Agus-Sylvi           | pos_agus_sylvi  |      0.816706391086 |         0.816706391086 |
| Deklarasi Laskar Asli di Condet, PD: Mpok Sylvi Punya Pengalaman Hebat     | pos_agus_sylvi  |      0.937059553914 |         0.937059553914 |
| Digembosi PPP Djan Faridz, Sylviana Murni: Kita Optimis Saja               | pos_agus_sylvi  |      0.504200316195 |         0.504200316195 |
| Khotbah di Masjid Al-Azhar, Adhyaksa: Saya Pilih Agus Yudhoyono            | pos_agus_sylvi  |      0.838673043303 |         0.838673043303 |
| Ahok Tanya ke Djan Faridz: Lulung Enggak Dukung Gue Nih?                   | pos_ahok_djarot |      0.797674121904 |         0.797674121904 |
| Agus Yudhoyono Salat Jumat di Al-Azhar, Adhyaksa Dault Jadi Khatib         | pos_agus_sylvi  |      0.937807422562 |         0.937807422562 |
| Pengesahan PPP Djan Faridz Bisa Ganjal Agus Sylvi? KPU: Tak ada Aturannya  | oot             |      0.549998963504 |         0.549998963504 |
| Djan Mendukung untuk Cari Perhatian Jokowi, ini Kata Ahok                  | oot             |      0.416864243429 |         0.416864243429 |
| Ditantang Sandiaga Buka Dana Sosialisasi, Ahok: Aku Kan Petahana           | pos_ahok_djarot |      0.760305047543 |         0.760305047543 |
| Ditantang Sandiaga Buka Dana Sosialisasi, Ahok: Aku Kan Petahana           | pos_anies_sandi |       0.65940360805 |          0.65940360805 |
| Jadi Jubir, Sophia Latjuba Bakal Suarakan Program Pendidikan Ahok-Djarot   | pos_ahok_djarot |       0.75100267983 |          0.75100267983 |
| Sophia Latjuba Temui Ahok di Balai Kota: Mau Ngobrol Soal Pilkada          | pos_ahok_djarot |      0.834380055369 |         0.834380055369 |

🙇