Fokus utama artikel ini adalah menyediakan metode untuk memfilter SMS yang mengganggu dari kotak masuk kita. Kita akan mempelajari cara mengelompokkan pesan SMS berdasarkan tujuan pengirimannya.

Artikel ini awalnya diterbitkan di blog neurotech Afrika.

Ketika Anda mendengar “ding” Anda hampir terjatuh dan berlari ke ponsel Anda dengan harapan melihat SMS yang telah lama ditunggu-tunggu dan kemudian dengan sedih mengetahui bahwa itu adalah pesan promosi dari XYZ. Ini benar-benar menjengkelkan, banyak dari SMS promosi dan spam ini terus menyumbat kotak masuk kita dan menjadi lebih buruk seiring berjalannya waktu, mencuri waktu dan perhatian kita yang berharga.

Apa yang bisa kita pelajari dari Gmail?

Masalahnya bukanlah hal baru, masalah ini juga terjadi pada sisi email dan satu hal yang diadopsi dan dilakukan dengan sangat baik oleh penyedia email seperti GMAIL adalah mengelompokkan email ke dalam beberapa kategori tergantung pada maksud dari email tersebut, yang dapat berupa promosi, sosial, utama dan juga mampu memfilter email penipuan (spam).

Bisakah kita meniru Pendekatan Gmail pada SMS? Jika ya Bagaimana?

Inti dari artikel ini berpusat pada menjawab pertanyaan tersebut, kita akan belajar bagaimana kita dapat mengklasifikasikan pesan SMS ke dalam kategori sesuai dengan maksud dari pesan tersebut, maka sekarang Anda mungkin bertanya pada diri sendiri bagaimana caranya mengetahui dan mengklasifikasikan maksud SMS? Kami akan melatih model pembelajaran mesin yang akan mempelajari persamaan setiap kategori dan kemudian menggunakan model pembelajaran umum untuk mengelompokkan SMS baru ke dalam kategori.

Pengumpulan Data dan Anotasi

Langkah pertama adalah mencari, mengumpulkan, dan membuat anotasi data SMS yang kemudian akan digunakan untuk melatih model pembelajaran mesin kami, pengumpulan data dilakukan menggunakan aplikasi SMS backup dari beberapa kontributor individu, dan keluaran data aplikasi diperoleh dengan baik. mengatur data SMS JSON dan detailnya seperti yang ditunjukkan pada contoh cuplikan di bawah ini.

Kami kemudian menganotasi data kami ke dalam kategori berbeda berdasarkan konteks dan maksud dari pesan teks tersebut, ini adalah kategori yang kami gunakan;

  1. Promosi
  2. Pemberitahuan
  3. Transaksi
  4. Taruhan Olahraga
  5. Michezo ya Bahati Nasibu (SMS perjudian umum)
  6. Survei
  7. Verifikasi
  8. Informasional
  9. Pribadi
  10. SPAM

Kami kemudian mengekspor data kami ke format CSV yang siap diproses, Di mana Datanya? Kami tidak dapat membagikannya untuk saat ini karena beberapa SMS berisi informasi pribadi yang dapat diidentifikasi toleh karena itu kami sedang berupaya membersihkan dan memastikan data berkualitas baik dan kemudian akan dibagikan melalui kami Repositori GitHub.

Ini dia

Sekarang setelah Anda memiliki sedikit latar belakang tentang data yang akan kita gunakan untuk melatih model kita, sekarang mari kita mulai, mari kita bagi tugas kita menjadi tiga langkah: pemrosesan awal data ,pelatihan model pembelajaran mesin, dan evaluasi model.

Pemrosesan Awal Data

Pemrosesan awal data adalah cara mengonversi data mentah menjadi format yang dapat diurai dengan mudah oleh model pembelajaran mesin. Kita perlu melakukan praproses pada kumpulan data untuk melatih model kita dengan mudah. Tapi pertama-tama, mari kita baca dan lihat struktur kumpulan data kita dengan bantuan Perpustakaan Pandas

Seperti yang bisa kita lihat, kita memiliki beberapa kolom dalam kumpulan data kita, mari kita mulai dengan menjelajahi messageDirection yang dimiliki data kita;

Kini kami mengetahui bahwa data yang dikumpulkan terdiri dari SMSKELUAR dan MASUK namun berdasarkan sifat tugas kami , kepentingan utama kita terletak pada pesan masuk saja, oleh karena itu kita perlu memfilter hanya data yang messageDirectionnyaMASUK.

Memeriksa distribusi Label

Memeriksa distribusi label sangatlah penting karena dapat mengungkapkan informasi tentang seberapa baik model Anda akan bekerja dengan label tertentu.

Seperti yang Anda lihat, sebagian besar pesan kami diberi label “PEMBERITAHUAN”. Pesan “SPAM” paling sedikit yang berarti dataset kami tidak seimbang.

Mari kita hapus juga duplikat di kumpulan data kita.

Data kami telah dikurangi dari 3384 menjadi 1920 yang berarti hampir 43% kumpulan data kami merupakan duplikat, namun ini merupakan jumlah data yang 'baik-baik saja' untuk melatih model kita.

Sekarang mari kita lihat data kita dengan memvisualisasikannya di wordcloud. Namun sebelum itu, kita perlu menghapus beberapa stopwords. Kemudian, kita dapat melihat seberapa sering beberapa kata digunakan dalam teks menurut kategorinya.

cleaned_incoming_sms.loc[4:9]

Hasil sms masuk-bersihkami di atas tidak terlalu bersih. Kami perlu melakukan upaya ekstra.

  1. Buat semuanya menjadi huruf kecil.
  2. Hapus semua karakter non-alfanumerik seperti “,”, “+”, “%”, “!”, “:”
  3. Hapus semua nomor dalam pesan teks.

Teks kita sudah bersih sekarang, jadi kita bisa mulai melatih model kita.

Model Pembelajaran Mesin Pelatihan

Kami akan menggunakan perpustakaan Scikit-learn untuk memberi kami semua alat yang berguna untuk melatih model kami. Mari impor alat yang diperlukan dan latih model kita.

Karena kumpulan data kita tidak terlalu besar, model akan menyelesaikan pelatihan dalam waktu yang sangat singkat. Setelah selesai latihan, baru kita bisa mengecek skornya.

pipeline.score(x_test, y_test)
# Output: 0.9380530973451328

Seperti yang Anda lihat, model kami memiliki skor 94% bila dievaluasi dengan data pengujian yang cukup baik.

Menguji model kami

Mari simpan model kita untuk digunakan nanti dan kemudian kita akan mengimpornya lagi ke file lain untuk mengujinya dengan beberapa pesan lain.

import joblib
joblib.dump(pipeline, './pipeline.pkl')

CATATAN: Sebelum kita menguji model kita dengan beberapa pesan, kita harus ingat untuk meneruskannya ke fungsi clean_text untuk memproses teks kita terlebih dahulu (menghapus karakter non-alfanumerik, menghapus angka, dll. di teks kita akan masukan ke model kami).

Hasil

Kami menguji model kami dengan 14 pesan yang belum pernah dilihat sebelumnya. Seperti yang Anda lihat dari hasil di atas, sebagian besar pesan dalam data pengujian adalah pesan “SPAM”. Namun model tersebut tidak dapat menangkap sebagian besar pesan tersebut karena hanya ada sedikit pesan spam untuk melatih model kami.

Selain itu, model tersebut tidak berkinerja baik pada label “PROMOTIONAL”, karena setelah menghapus pesan duplikat di kumpulan data kami, distribusi label telah banyak berubah.

Kesimpulan

Performa model apa pun sangat dipengaruhi oleh kuantitas dan ukuran kumpulan data. Kami tidak dapat mengakses kumpulan data yang besar, namun dengan meluangkan lebih banyak waktu untuk membersihkan data pelatihan secara menyeluruh, kami dapat berupaya meningkatkan keakuratan model kami. Selain itu, kita dapat mengubah beberapa parameter sebelum melatih model kita atau kita dapat bereksperimen dengan Pengklasifikasi Pembelajaran Mesin alternatif seperti Decision Tree, SVM, dll. untuk mencapai hasil terbaik dan meningkatkan performa model kita.

Terima kasih.