Sentiment Analysis Bahasa Indonesia Dengan Logistic Regression
Introduction
Sentiment analysis digunakan untuk mengetahui sentiment atau polarity sebuah teks apakah positive, neutral, atau negative. Biasanya sentiment analysis diterapkan pada data teks opini masyarakat terhadap suatu objek, misalkan review dari suatu produk e-commerce, review sebuah film, dan komentar yang terdapat pada sosial media.
Sentiment analysis termasuk yang banyak dipelajari ketika belajar natural language processing, karena ketersediaan data yang melimpah dan mudah didapatkan berdasarkan dari sumbernya (misal: sosial media). Selain itu, berbagai metode machine learning juga sudah banyak dilakukan eksperimentasi oleh para peneliti, sehingga banyaknya resources untuk belajar semakin memberi kemudahan.
Dalam tulisan ini, kita akan belajar langkah-langkah melakukan sentiment analysis menggunakan algoritma machine learning Logistic Regression. Tutorial ini juga dilengkapi dengan source code Google Colab yang terdapat di bawah.
Mengapa Sentiment Analysis Penting?
Dalam satu hari, unstructured data berupa teks yang dihasilkan oleh sosial media, review produk, artikel, dokumen, chat antar pengguna, dan yang lain berjumlah sangat besar dan banyak. Unstructured data seperti itu dapat diolah untuk mendapatkan pola, insight, dan knowledge. Beberapa contoh pemanfaatan sentiment analysis seperti:
- Analisis sentimen customer secara real-time dari review, percakapan, atau komentar sosial media. Hal ini berguna untuk mencegah terjadi churn pada customer.
- Unstructured data yang berjumlah sangat banyak dapat dikelompokkan berdasarkan sentiment atau polarity. Hal ini lebih memudahkan pengolahan data yang sudah dikelompokkan.
Mengapa Logistic Regression?
Ketika menerapkan metode machine learning pada kasus yang dihadapi, seringkali kita langsung memilih metode machine learning yang populer dan memiliki performa yang bagus, sebut saja metode neural network khususnya deep learning. Kenyataannya seringkali data yang kita miliki jumlahnya sedikit sedangkan metode deep learning adalah metode yang hungry data, maksudnya butuh data yang banyak dalam pelatihan. Seharusnya kita perlu melakukan eksperimentasi dengan metode machine learning yang sederhana terlebih dahulu baru kemudian ke metode yang lebih advance, karena bisa jadi hasil performa dengan metode sederhana lebih baik. Selain itu metode seperti deep learning seringkali juga membutuhkan alat komputasi yang mahal.
Proses pada Sentiment Analysis
Proses secara keseluruhan untuk training dan prediction terdapat pada gambar di bawah.
Terdapat dua skema proses yang dilakukan yaitu (1) training dan (2) prediction. Skema (1) training dilakukan untuk melatih algorima machine learning Logistic Regression menggunakan corpus data menghasilkan classifier model. Model ini digunakan pada skema (2) prediction untuk melakukan prediksi tag sentiment dokumen.
Pada skema (1) training, dibutuhkan corpus yang berisi kumpulan dokumen dan tag-nya (positive atau negative). Dokumen-dokumen tersebut kemudian masuk tahap preprocessing untuk pembersihan teks dan persiapan sebelum feature extraction. Setelah itu dilakukan feature extraction berdasarkan frekuensi kemunculan kata-kata positive dan negative. Tahap training terakhir dengan menggunakan masukan hasil feature extraction beserta tag-nya dilatihkan pada algoritma Logistic Regression. Hasil training adalah sebuah classifier model yang dapat digunakan untuk memprediksi tag sentiment dari teks.
Proses skema (2) prediction sama dengan skema (1) training untuk proses preprocessing dan feature extraction pada corpus. Kemudian menggunakan classifier model dengan masukan hasil feature extraction dilakukan prediksi label pada dokumen.
Berikut ini adalah penjelasan untuk masing-masing langkah yang dilakukan.
Corpus Dataset
Corpus dataset yang digunakan adalah opini film dari Twitter yang dikumpulkan oleh Antinasari, et al. (2017) dengan jurnal Analisis Sentimen Tentang Opini Film Pada Dokumen Twitter Berbahasa Indonesia Menggunakan Naive Bayes Dengan Perbaikan Kata Tidak Baku. Dataset ini berisi 200 tweet dengan 100 tweet bersentimen positive dan 100 tweet bersentimen negative. Dataset opini film dapat diakses pada link GitHub ini.
Berikut ini adalah contoh dokumen tweet yang terdapat pada dataset.
Dengan menggunakan visualisasi wordcloud, hasilnya untuk dokumen tweet bersentimen positive dan negative seperti berikut.
Dokumen bersentimen positive memunculkan kata-kata yang termasuk sentimen positive seperti ‘bagus’, ‘keren’, dan ‘bangga’. Sedangkan dokumen bersentimen negative memunculkan kata-kata yang termasuk sentimen negative seperti ‘kecewa’, ‘jelek’, ‘kurang’, dan ‘hambar’. Wordcloud keduanya masih terdapat stopwords yang bisa dihilangkan. Stopwords adalah kata-kata yang tidak memiliki arti seperti kata-kata ‘ini’, ‘yang’, dan ‘dengan’.
Preprocessing
Tahap ini melakukan persiapan dokumen teks supaya proses feature extraction dapat menghasilkan hasil fitur yang bagus. Terdapat beberapa langkah yang dilakukan pada preprocessing beserta contohnya, yaitu:
- Cleaning text dan lowercase
Tahap ini membersihkan teks dari punctuation, URL, ekstra space, dan merubah huruf menjadi huruf kecil.
- Remove stopwords
Tahap ini menghapus kata-kata yang tidak memiliki makna atau arti ketika berdiri sendiri.
- Stemming and Lemmatization
Tahap ini menghapus imbuhan pada tiap kata dan mengubah tiap kata menjadi kata dasar.
- Tokenization
Tahap terakhir mengubah tweet menjadi token kata.
Feature Extraction
Setiap melakukan training menggunakan algoritma machine learning kita harus mengubah data yang berupa teks menjadi representasi angka. Hal ini harus dilakukan karena proses training melakukan operasi hitungan matematika, sehingga mustahil melakukan operasi hitungan matematika menggunakan data teks. Proses mengubah data teks menjadi representasi angka disebut dengan feature extraction. Terdapat berbagai cara untuk merepresentasikan teks menjadi angka. Salah satu cara yang sederhana yang akan dijelaskan pada tulisan ini adalah dengan mengubah teks menjadi representasi angka berdasarkan frequency tiap kata pada masing-masing sentiment.
Sebelum melakukan feature extraction, terlebih dahulu kita membentuk Vocabulary, yaitu kumpulan kata-kata unik yang terdapat pada corpus tweet dokumen. Dalam studi kasus sentiment analysis ini, kita membentuk vocabulary dari keseluruhan corpus tweet dokumen termasuk yang bersentimen positive dan negative. Berikut ini ilustrasi pembentukan vocabulary.
Setelah terbentuk vocabulary, kita akan melakukan feature extraction berdasarkan frequency tiap kata pada masing-masing sentiment. Pertama, kita hitung terlebih dahulu jumlah kemunculan tiap kata pada sentiment positive dan negative. Kemudian dari tiap dokumen dilakukan feature extraction membentuk vector dimensi 3 yang merepresentasikan bias, posfreq, dan negfreq.
Hasil feature extraction untuk keseluruhan corpus dokumen akan membentuk matriks berdimensi (n, 3), dimana n adalah jumlah dokumen yaitu 200, sehingga membentuk hasil akhir matriks berdimensi (200, 3).
Logistic Regression
Logistic regression adalah model statistik yang digunakan untuk menentukan apakah sebuah independent variable memiliki pengaruh terhadap sebuah binary dependent variable. Dengan menggunakan sigmoid function, logistic regression menghasilkan output sebuah probability antara angka 0 dan 1.
Alur proses untuk Logistic Regression ketika proses training terdapat beberapa tahap. Pertama, input yang dibutuhkan adalah hasil feature extraction X dan label Y. Kemudian features X dan parameter weight theta (𝜃) yang diinisialisasi dengan angka 0 digunakan sebagai masukan sigmoid function menghasilkan output Y hat dengan nilai antara 0 dan 1. Dengan decision boundary pada angka 0.5, maka jika Y hat lebih dari sama dengan 0.5 masuk kategori label 1 (positive) sebaliknya masuk kategori label 0 (negative).
Selanjutnya hasil Y hat yang merupakan label hasil prediksi dibandingkan dengan label asli Y. Lalu Y hat dan Y dihitung cost dengan cost function untuk menentukan apakah hasil prediksi dari logistic regression sudah sesuai. Jika nilai cost masih tinggi atau di atas threshold, maka weight 𝜃 dilakukan update nilainya. Proses ini dilakukan perulangan hingga cost bernilai kecil. Hasil dari training adalah weight 𝜃 yang sudah teroptimasi nilainya yang nantinya digunakan untuk prediksi pada proses testing.
Sigmoid Function
Sigmoid function dengan parameter weight 𝜃 dan input x(i) dapat didefinisikan sebagai berikut.
Sesuai dengan penjelasan di atas, angka 0.5 pada sumbu y yang merupakan hasil sigmoid function adalah decision boundary. Decision boundary digunakan sebagai batas hasil sigmoid function untuk dikategorikan sebagai label positive (1) pada area hijau atau label negative (0) pada area merah. Untuk lebih jelas perhatikan ilustrasi berikut.
Pertanyaannya, bagaimana cara melakukan update parameter weight 𝜃? Akan dijelaskan pada proses yang terjadi ketika melakukan training.
Training
Tahapan proses yang terjadi ketika training diilustrasikan sebagai berikut.
- Pertama, lakukan inisialisasi weight 𝜃 dengan vector ukuran (3,1) berisi 0.
- Kedua, lakukan perhitungan nilai sigmoid dengan masukan features X dan weight 𝜃 menghasilkan output angka antara 0 dan 1.
- Ketiga, hitung nilai gradient menggunakan gradient descent dengan parameter X transpose, nilai sigmoid, dan label (0 atau 1).
- Keempat, lakukan update weight 𝜃 dengan mengurangkannya dengan hasil perhitungan gradient dikalikan parameter learning rate (alpha).
- Kelima, hasil weight 𝜃 yang sudah ter-update dihitung loss atau cost-nya
- Keenam, jika hasil loss/cost belum konvergen atau cukup bagus atau iterasi belum selesai dilakukan perulangan proses ke langkah tiga. Semakin kecil nilai loss/cost maka semakin bagus model logistic regression.
Pertanyaan, apakah yang dimaksud cost mencapai konvergen?
Gradient Descent
Gradient descent digunakan untuk mencari nilai local minimum dari cost. Berdasarkan gambar di atas, kita terlebih dahulu menentukan random value dan learning rate. Kemudian dengan iterasi perulangan dilakukan learning hingga cost mencapai minimum dan weight menjadi optimum, inilah yang dimaksud sudah mencapai konvergen.
Pertanyaan berikutnya, bagaimana hasil perhitungan cost function jika hasil klasifikasi menggunakan sigmoid function berbeda dengan true label y? Akan dijelaskan pada proses yang terjadi ketika menghitung cost.
Cost Function
Persamaan cost function dapat didefinisikan sebagai berikut.
- Terdapat angka -1 pada cost function, dikarenakan hasil dari sigmoid function adalah angka antara 0 dan 1, sehingga hasil log akan menjadi negatif. Maka perlu ditambahkan pengali bilangan negatif.
Sekarang kita akan eksperimentasi jika true label dan predicted label sesuai atau tidak sesuai.
Kasus pertama,
Hasil dari perhitungan loss adalah 0 karena true label dan predicted label sesuai. Nilai loss bernilai 0 artinya sangat kecil, semakin kecil nilai loss maka semakin bagus performa model.
Kasus kedua,
Hasil perhitungan loss juga 0, model sudah berhasil memprediksi dengan benar.
Kasus ketiga,
Hasilnya nilai loss sangatlah besar, hal ini dikarenakan true label yang bernilai 0 tetapi model melakukan prediksi mendekati nilai 1 yaitu 0.9999. Artinya performa model masih belum cukup bagus dan perlu iterasi training lagi.
Kasus keempat,
Hasilnya sama dengan kasus ketiga, nilai loss sangat besar. Nilai true label yang bernilai 1 tetapi model melakukan prediksi mendekati 0 yaitu 0.0001. Performa model masih belum cukup bagus.
Testing
Tahapan terakhir dalam melakukan sentiment analysis dengan algoritma machine learning logistic regression adalah dengan menguji model. Pengujian model penting dilakukan untuk mengetahui performa model pada data yang berbeda dari yang digunakan pada proses training. Proses training menghasilkan sebuah model machine learning yang dapat digunakan untuk memprediksi sentimen sebuah teks.
Sesuai penjelasan training di atas, dengan menggunakan logistic function hasil akhir dari proses training adalah parameter weight 𝜃 yang sudah teroptimasi. Berikut adalah ilustrasi proses testing menggunakan optimum weight 𝜃.
Kita membutuhkan metric untuk mengukur performa sebuah model machine learning. Salah satu metric yang sering dipakai pada kasus sentiment analysis adalah metric accuracy. Accuracy menghitung berapa banyak jumlah hasil prediksi yang benar dibagi dengan jumlah data. Artinya, semakin banyak hasil prediksi yang benar maka akan semakin tinggi nilai accuracy. Persamaan accuracy dapat dituliskan sebagai berikut.
dimana m adalah jumlah data test.
Misalkan kita memiliki data test berjumlah 5, maka dapat dihitung accuracy sebagai berikut.
Penutup
Sentiment analysis mendeteksi sentimen atau polarity pada suatu teks apakah termasuk positive, negative, atau neutral. Sentiment analysis sudah banyak dapat diterapkan pada data teks opini masyarakat bersumber dari sosial media, review, dan artikel. Salah satu metode yang machine learning yang diterapkan untuk mendeteksi sentimen adalah logistic regression. Logistic regression menghasilkan output berupa binary, 1 (positive) atau 0 (negative), menggunakan sigmoid function. Hasil training dengan logistic regression adalah classifier model yang bisa digunakan untuk mengklasifikasi sentimen suatu teks. Classifier model dilakukan testing dengan data test dan digunakan metric accuracy untuk mengetahui performa model.