Sentiment Analysis Bahasa Indonesia Dengan Logistic Regression

Yasir Abdur Rohman
9 min readJul 28, 2021

--

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.

Alur proses training dan prediction

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.

Contoh dokumen tweet dengan sentiment negative

Dengan menggunakan visualisasi wordcloud, hasilnya untuk dokumen tweet bersentimen positive dan negative seperti berikut.

Wordcloud dokumen bersentimen positive
Wordcloud dokumen bersentimen negative

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.

Cleaning text dan lowercase
  • Remove stopwords

Tahap ini menghapus kata-kata yang tidak memiliki makna atau arti ketika berdiri sendiri.

Remove stopwords
  • Stemming and Lemmatization

Tahap ini menghapus imbuhan pada tiap kata dan mengubah tiap kata menjadi kata dasar.

Stemming and lemmatization
  • Tokenization

Tahap terakhir mengubah tweet menjadi token kata.

Tokenization

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.

Pembentukan vocabulary kata

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.

Feature Extraction

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.

Logistic regression flow

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.

Source: Deeplearning.ai with some necessary edit

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.

Sigmoid function

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.

training process
  • 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.
cost vs iteration (source: deeplearning.ai)

Pertanyaan, apakah yang dimaksud cost mencapai konvergen?

Gradient Descent

Source image

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.

cost function
  • 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.

experimentation table

Kasus pertama,

first case

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,

second case

Hasil perhitungan loss juga 0, model sudah berhasil memprediksi dengan benar.

Kasus ketiga,

third case

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,

fourth case

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 𝜃.

prediction

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.

accuracy

dimana m adalah jumlah data test.

Misalkan kita memiliki data test berjumlah 5, maka dapat dihitung accuracy sebagai berikut.

calculating accuracy

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.

Google Colab

Referensi

--

--