Eka Prakarsa Mandyartha, S.T, M.Kom
Dengan maraknya media sosial ditambah dengan pandemi Covid-19, cyberbullying telah mencapai titik tertinggi sepanjang masa. Kita dapat memerangi ini dengan membuat model yang secara otomatis menandai tweet yang berpotensi berbahaya serta memecah pola kebencian. Pada kesempatan ini, kita mencoba mempelajari bagaimana melakukan text processing untuk mengidentifikasi jenis-jenis cyberbullying – age, ethnicity, gender, religion, atau not cyberbullying – dari data tweet media sosial tweeter. Dataset yang digunakan diperoleh dari Kaggle. Kita memanfaatkan library-library pada python terutama yang terkait dengan data frame, natural language processing (NLP), text processor, serta tools untuk predictive data analysis. Tahapannya dimulai dari data preparation, preprocessing atau segmentasi data, ekstraksi fitur teks ke dalam angka, dan klasifikasi menggunakan algoritma Naive Bayes. Klasifikasi diawali oleh pelatihan data (training data), kemudian algoritma klasifikasi dievaluasi melalui pengujian data (testing data) menggunakan metriks pengukuran performa yaitu precision, recall, f1-score dan akurasi.
Pada tanggal 15 April 2020, UNICEF mengeluarkan peringatan sebagai tanggapan atas peningkatan risiko cyberbullying selama pandemi COVID-19 karena penutupan sekolah yang meluas, peningkatan screen time, dan penurunan interaksi sosial tatap muka. Statistik cyberbullying benar-benar mengkhawatirkan: 36,5% siswa sekolah menengah pertama dan menengah atas telah merasakan cyberbullying dan 87% telah mengamati cyberbullying, dengan efek mulai dari penurunan kinerja akademik hingga depresi hingga pikiran untuk bunuh diri.
Pada kesempatan ini, kita melakukan data analisis terhadap data tweet yang diperoleh dari Kaggle untuk klasifikasi cyberbullying*. Dataset ini berisi lebih dari 47000 tweet yang diberi label sesuai dengan kelas cyberbullying: Age; Ethnicity; Gender; Religion; Other type of cyberbullying; Not cyberbullying. Data telah diseimbangkan untuk menampung ~8000 dari setiap kelas. *https://www.kaggle.com/datasets/andrewmvd/cyberbullying-classification
Tahapan klasifikasi cyberbullying menggunakan algoritma Naive Bayes dengan Python dan Google Colabs secara umum sebagai berikut:
Lebih detil, tahapannya sebagai berikut:
Source code ditulis dan dijalankan (compile and run) menggunakan Google Colabs. Taruh dataset (input) dan source code di dalam folder MyDrive > Colab Notebooks > cyberbullying
Install Library python yang akan digunakan
Import Library
Khusus ketika kita menggunakan google colabs, bila file dataset/input diletakkan pada google drive, maka kita harus melakukan mounting drive dengan perintah drive.mount(‘content/drive’). Kemudian taruh dataset pada path yang diinginkan, misalnya “drive/MyDrive/Colab Notebooks/cyberbullying/input/cyberbullying_tweets.csv”.
Load dataset menggunakan library pandas.
Karena tidak terjadi kondisi imbalance data antara jenis cyberbulling yang berbeda, maka kelas "other_cyberbulling" akan dihapus karena dapat membingungkan model dengan kelas cyberbullying lainnya.
Melakukan Dataset Preparing dengan menamakan ulang (rename) atribut dataset ”tweet-text” dengan ”text”, kemudian atribut ”cyberbullying_type” dengan ”sentiment”. Selanjutnya mengkonversi kategori ”sentiment” ke dalam bentuk angka.
Preprocessing atau Segmentasi Data Teks. Pada tahap ini dilakukan Clean emoji from text, Tokenize sentences, Change to lower case, Correct spelling, Remove numbers, Remove punctuation, Remove stopwords, Normalize (Lemmatize or Lemmatization)
Hasil dari Preprocessing / Segmentasi data teks:
Melakukan drop / menghapus duplikasi tweet
Memeriksa Panjang Tweet
Tweet yang kurang dari 4 kata dan lebih dari 100 kata dihapus karena dapat menjadi outlier.
Data Visualization dalam bentuk WordCloud
Ekstraksi fitur teks: Mengubah teks menjadi angka menggunakan fungsi fit_transform() pada CountVectorizer, kemudian menghitung bobot setiap kata yang umum digunakan untuk mengetahui seberapa sering suatu kata muncul di dalam kalimat/dokumen. Algoritma yang digunakan untuk menghitung bobot tersebut adalah TF-IDF (Term Frequency – Inverse Document Frequency).
Hasilnya: dimana (index kalimat/dokumen, indeks kata) bobot.
Membagi data training dan testing. Untuk membaginya digunakan fungsi train_test_split() pada library sklearn. Pengaturan pembagian data training dan testing yaitu sebagai berikut: data training 80%, data testing 20%. (test_size = 0.20).
SMOTE. Setelah dilakukan pengecekan terhadap training set,terdapat ketidakseimbangan data (imbalance data) dan dapat menyebabkan bias dalam melatih model. Oversampling menggunakan SMOTE akan digunakan untuk menyeimbangkan dataset training.
Sekarang data training telah seimbang (balance) dan siap untuk dimasukkan ke dalam model Machine Learning.
Model Training: Naïve Bayes. Kita lakukan training menggunakan algoritma Naive Bayes dengan memanfaatkan fungsi MultinomialNB() pada library sklearn.
Model Evaluation: Classification Report. Untuk mengetahui performa dari algoritma klasifikasi Naive Bayes, kita lakukan prediksi terhadap data testing melalui fungsi predict(). Performa dapat diikur melalui metriks precision, recall, f1-score dan support. Kita bisa memanfaatkan fungsi classification_report() dalam library sklearn untuk menghitung performa tersebut.
Model Evaluation: Confusion Matrix
Model Evaluation: Cross Validation. Metode lain untuk melakukan evaluasi model klasifikasi adalah dengan K-Fold Cross Validation. Cross validation bertujuan untuk membagi data training dengan data testing. Kemudian dalam hal ini kita mengukur performanya menggunakan metrics rata-rata Akurasi (scoring=’accuracy’) beserta dengan standar deviasi akurasinya untuk memastikan bahwa akurasi yang dicapai adalah standar dalam setiap Fold-nya (ditunjukkan oleh nilai standar deviasi yang kecil yaitu 2.e^-2). Kita menggunakan k=10 (cv=10) untuk jumlah fold-nya. Untuk mengimplementasikan k-fold cross validation bisa memanfaatkan cross_val_score() pada library sklearn.