Melatih model deteksi spam komentar dengan TensorFlow Lite Model Maker

1. Sebelum memulai

Dalam codelab ini, Anda akan meninjau kode yang dibuat dengan TensorFlow dan TensorFlow Lite Model Maker untuk membuat model dengan set data berdasarkan spam komentar. Data asli tersedia di Kaggle. Data tersebut telah dikumpulkan menjadi satu file CSV, dan dibersihkan dengan menghapus teks yang rusak, markup, kata berulang, dan lainnya. Hal ini akan memudahkan Anda berfokus pada model, bukan teks.

Kode yang Anda tinjau akan diberikan di sini, tetapi sebaiknya Anda mengikuti kode di Colaboratory.

Prasyarat

Yang akan Anda pelajari

  • Cara menginstal TensorFlow Lite Model Maker dengan Colab.
  • Cara mendownload data dari server Colab ke perangkat Anda.
  • Cara menggunakan loader data.
  • Cara mem-build model.

Yang Anda butuhkan

2. Menginstal TensorFlow Lite Model Maker

  • Buka Colab. Sel pertama di notebook akan menginstal TensorFLow Lite Model Maker untuk Anda:
!pip install -q tflite-model-maker

Setelah selesai, lanjutkan ke sel berikutnya.

3 Mengimpor kode

Sel berikutnya memiliki sejumlah impor yang harus digunakan oleh kode di notebook:

import numpy as np
import os
from tflite_model_maker import configs
from tflite_model_maker import ExportFormat
from tflite_model_maker import model_spec
from tflite_model_maker import text_classifier
from tflite_model_maker.text_classifier import DataLoader

import tensorflow as tf
assert tf.__version__.startswith('2')
tf.get_logger().setLevel('ERROR')

Tindakan ini juga akan memeriksa apakah Anda menjalankan TensorFlow 2.x atau tidak, yang merupakan persyaratan untuk menggunakan Model Maker.

4. Mendownload data

Selanjutnya, Anda akan mendownload data dari server Colab ke perangkat dan menetapkan variabel data_file untuk diarahkan ke file lokal:

data_file = tf.keras.utils.get_file(fname='comment-spam.csv',
  origin='https://storage.googleapis.com/laurencemoroney-blog.appspot.com/lmblog_comments.csv',
  extract=False)

Model Maker dapat melatih model dari file CSV sederhana seperti ini. Anda hanya perlu menentukan kolom mana yang menyimpan teks dan mana yang memiliki label, yang akan Anda pelajari caranya nanti di codelab ini.

5. Embeddings terlatih

Umumnya, saat Anda menggunakan Model Maker, Anda tidak mem-build model dari awal. Anda menggunakan model yang ada yang disesuaikan dengan kebutuhan Anda.

Model bahasa, seperti yang digunakan di sini, melibatkan penggunaan embeddings terlatih. Dalam embeddings, kata dikonversi menjadi angka dengan memberikan angka pada setiap kata dalam keseluruhan korpus Anda. Embedding adalah vektor yang digunakan untuk menentukan sentimen kata dengan menetapkan "arah" untuk kata tersebut. Misalnya, kata-kata yang sering digunakan dalam pesan spam komentar memiliki vektor yang mengarah ke titik yang sama dan vektor kata-kata selain itu mengarah ke titik yang berlawanan.

Saat menggunakan embeddings terlatih, Anda akan memulai dengan korpus atau kumpulan kata yang telah mempelajari sentimen dari kumpulan teks dalam jumlah besar, sehingga Anda akan mendapatkan solusi yang jauh lebih cepat daripada jika memulai dari nol.

Anda dapat menggunakan beberapa embeddings terlatih yang disediakan oleh Model Maker. Namun, average_word_vec merupakan opsi yang paling sederhana dan cepat.

Berikut kodenya:

spec = model_spec.get('average_word_vec')
spec.num_words = 2000
spec.seq_len = 20
spec.wordvec_dim = 7

Parameter num_words

Anda juga menentukan jumlah kata yang ingin Anda gunakan untuk model Anda.

Anda mungkin berpikir "semakin banyak, semakin bagus". Namun, umumnya ada jumlah yang tepat berdasarkan frekuensi penggunaan setiap kata. Jika Anda menggunakan setiap kata di seluruh korpus, model dapat mencoba untuk mempelajari dan menentukan arah kata yang hanya digunakan sekali. Dalam korpus teks, banyak kata yang digunakan hanya sekali atau dua kali, sehingga penyertaannya dalam model Anda tidak efektif karena dampaknya sangat minim untuk keseluruhan sentimen.

Anda dapat menggunakan parameter num_words untuk menyesuaikan model berdasarkan jumlah kata yang diinginkan. Jumlah kata yang lebih sedikit dapat menghasilkan model yang lebih kecil dan lebih cepat, tetapi bisa jadi kurang akurat karena jumlah kata yang dikenali lebih sedikit. Di sisi lain, jumlah yang lebih besar dapat menghasilkan model yang lebih besar dan lebih lambat. Pastikan untuk menentukan jumlah yang tepat.

Parameter wordvec_dim

Parameter wordved_dim adalah jumlah dimensi yang ingin Anda gunakan untuk vektor setiap kata. Menurut prinsip umum berdasarkan penelitian, jumlah dimensi adalah akar pangkat empat dari jumlah kata. Misalnya, jika Anda menggunakan 2.000 kata, jumlah dimensinya adalah 7. Jika Anda mengubah jumlah kata yang digunakan, Anda juga dapat mengubah jumlah dimensinya.

Parameter seq_len

Model umumnya bersifat sangat kaku untuk nilai input. Untuk model bahasa, hal ini berarti bahwa model bahasa dapat mengklasifikasikan kalimat dengan panjang statis tertentu. Hal tersebut ditentukan oleh parameter seq_len atau panjang urutan.

Jika Anda mengonversi kata menjadi angka atau token, kalimat akan menjadi urutan token tersebut. Untuk kasus ini, model Anda dilatih untuk mengklasifikasikan dan mengenali kalimat dengan 20 token. Jika lebih panjang, kalimat tersebut akan dipotong. Jika lebih pendek, kalimat tersebut akan diberi padding. Anda dapat melihat token <PAD> khusus di korpus yang digunakan untuk ini.

6. Menggunakan loader data

Sebelumnya, Anda telah mendownload file CSV. Sekarang saatnya menggunakan loader data untuk mengubahnya menjadi data pelatihan yang dapat dikenali model:

data = DataLoader.from_csv(
    filename=data_file,
    text_column='commenttext',
    label_column='spam',
    model_spec=spec,
    delimiter=',',
    shuffle=True,
    is_training=True)

train_data, test_data = data.split(0.9)

Jika Anda membuka file CSV di editor, Anda akan melihat bahwa setiap baris hanya memiliki dua nilai dan nilai tersebut memiliki deskripsi teks di baris pertama file. Biasanya, setiap entri akan dianggap sebagai kolom.

Anda akan melihat bahwa deskripsi untuk kolom pertama adalah commenttext dan entri pertama di setiap baris adalah teks komentar. Demikian pula, deskripsi untuk kolom kedua adalah spam. Anda juga akan melihat bahwa entri kedua di setiap baris adalah True atau False, untuk menunjukkan apakah teks tersebut dianggap sebagai spam komentar atau tidak. Properti lainnya menetapkan variabel model_spec yang Anda buat sebelumnya, beserta karakter pembatas, yang dalam hal ini merupakan koma karena file dipisahkan koma. Anda akan menggunakan data ini untuk melatih model, sehingga is_Training ditetapkan ke True.

Anda perlu mempertahankan sebagian data untuk menguji model. Bagi data tersebut menjadi 90% untuk pelatihan dan 10% sisanya untuk pengujian/evaluasi. Karena kita ingin memastikan bahwa data pengujian dipilih secara acak dan tidak menggunakan 10% ‘terbawah' dari set data, jadi Anda menggunakan shuffle=True saat memuat data untuk mengacaknya.

7. Mem-build model

Sel berikutnya akan mem-build model dan berupa satu baris kode:

# Build the model
model = text_classifier.create(train_data, model_spec=spec, epochs=50,
                               validation_data=test_data)

Kode ini membuat model pengklasifikasi teks dengan Model Maker dan Anda menentukan data pelatihan yang ingin digunakan (seperti yang disiapkan di langkah keempat), spesifikasi model seperti yang disiapkan di langkah keempat, dan sejumlah iterasi pelatihan, yaitu 50 dalam kasus ini.

Prinsip dasar ML adalah untuk membuat bentuk pencocokan pola. Awalnya, ML memuat bobot terlatih untuk kata-kata yang diprosesnya dan mencoba mengelompokkannya dengan prediksi yang menunjukkan mana kata yang spam dan mana yang tidak ketika dikelompokkan bersama. Pada percobaan awal, hasil pengelompokkan mungkin memiliki jumlah sama karena model baru saja memulai.

c42755151d511ce.png

Model kemudian akan mengukur hasil dari iterasi pelatihan ini dan menjalankan kode pengoptimalan untuk mengubah prediksinya, lalu mencoba lagi. Inilah yang disebut iterasi pelatihan. Jadi, dengan menentukan iterasi pelatihan sebanyak 50, model akan melalui "loop" sebanyak 50 kali.

7d0ee06a5246b58d.png

Pada saat Anda mencapai iterasi pelatihan ke-50, model tersebut akan melaporkan tingkat akurasi yang jauh lebih tinggi. Dalam hal ini, halaman menampilkan 99%.

Nilai akurasi validasi biasanya sedikit lebih rendah dibandingkan akurasi pelatihan karena menunjukkan cara model mengklasifikasikan data yang belum pernah dilihat sebelumnya. Model ini menggunakan 10% data pengujian yang Anda siapkan sebelumnya.

f063ff6e1d2add67.png

8 Mengekspor model

  1. Jalankan sel ini untuk menentukan direktori dan mengekspor model:
model.export(export_dire='/mm_spam_savedmodel', export_format=[ExportFormat.LABEL, ExportFormat.VOCAB, ExportFormat.SAVED_MODEL])
  1. Kompresi seluruh folder /mm_spam_savedmodel dan download file mm_spam_savedmodel.zip yang dihasilkan, yang Anda perlukan di codelab berikutnya.
# Rename the SavedModel subfolder to a version number
!mv /mm_spam_savedmodel/saved_model /mm_spam_savedmodel/123
!zip -r mm_spam_savedmodel.zip /mm_spam_savedmodel/

9. Selamat

Codelab ini telah memandu Anda memahami kode Python untuk membuat dan mengekspor model. Sekarang Anda memiliki SaveModel beserta label dan kosakata di bagian akhir model. Dalam codelab berikutnya, Anda akan melihat cara menggunakan model ini untuk mulai mengklasifikasikan komentar spam.

Pelajari lebih lanjut