1. Sebelum memulai
Dalam codelab ini, Anda akan meninjau kode yang dibuat menggunakan TensorFlow dan TensorFlow Lite Model Maker untuk membuat model menggunakan set data berdasarkan spam komentar. Data asli tersedia di kaggle. Data tersebut telah dikumpulkan menjadi satu 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 akan Anda tinjau telah diberikan di sini, tetapi sebaiknya Anda mengikuti kode di Google Colab.
Prasyarat
- Codelab ini ditulis untuk developer berpengalaman yang baru menggunakan machine learning.
- Codelab ini adalah bagian dari jalur pembelajaran Memulai Klasifikasi Teks untuk Seluler. Jika Anda belum menyelesaikan aktivitas sebelumnya, berhenti mengikuti codelab ini dan selesaikan aktivitas tersebut sekarang.
Yang akan Anda pelajari
- Cara menginstal TensorFlow Lite Model Maker menggunakan Google Colab
- Cara mendownload data dari server Cloud ke perangkat Anda
- Cara menggunakan loader data
- Cara membangun model
Yang Anda butuhkan
- Akses ke Google Colab
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 Cloud ke perangkat dan menetapkan 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. Anda akan melihat cara melakukannya nanti di codelab.
5. Embeddings terlatih
Umumnya, saat menggunakan Model Maker, Anda tidak mem-build model dari awal. Anda menggunakan model yang ada yang disesuaikan dengan kebutuhan Anda.
Untuk model bahasa, seperti yang digunakan di sini, hal ini melibatkan penggunaan embedding 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 akan memiliki vektor yang mengarah ke arah yang sama, dan kata-kata yang tidak sering digunakan akan mengarah ke arah yang berlawanan.
Dengan menggunakan embeddings terlatih, Anda akan memulai dengan korpus atau kumpulan kata yang telah mempelajari sentimen dari kumpulan teks dalam jumlah besar. Cara ini akan membawa Anda ke solusi jauh lebih cepat daripada memulai dari nol.
Anda dapat menggunakan beberapa embedding 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 akan 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, Anda dapat membuat model mencoba mempelajari dan menentukan arah kata yang hanya digunakan sekali. Anda akan menemukan dalam korpus teks bahwa banyak kata hanya digunakan sekali atau dua kali, dan umumnya tidak layak untuk digunakan dalam model Anda karena dampaknya sangat minim untuk keseluruhan sentimen. Anda dapat menyesuaikan model berdasarkan jumlah kata yang diinginkan menggunakan parameter num_words.
Jumlah yang lebih kecil di sini dapat menghasilkan model yang lebih kecil dan lebih cepat, tetapi bisa jadi kurang akurat karena jumlah kata yang dikenali lebih sedikit. Angka yang lebih besar di sini akan menghasilkan model yang lebih besar dan lebih lambat. Menemukan titik yang tepat adalah kuncinya.
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 dimensi yang baik untuk memulai 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. Jadi, model Anda akan dilatih (dalam kasus ini) untuk mengklasifikasikan dan mengenali kalimat yang memiliki 20 token. Jika lebih panjang, kalimat tersebut akan dipotong. Jika lebih pendek, kalimat tersebut akan diberi padding. Anda akan melihat token <PAD> khusus di korpus yang akan 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 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)
Tindakan ini akan membuat model pengklasifikasi teks dengan Model Maker, dan Anda menentukan data pelatihan yang ingin digunakan (seperti yang disiapkan di langkah 4), spesifikasi model (seperti yang disiapkan di langkah 4), dan sejumlah iterasi pelatihan, dalam kasus ini 50.
Prinsip dasar Machine Learning adalah untuk membuat bentuk pencocokan pola. Awalnya, ML akan 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, hasilnya mungkin mendekati 50:50, karena model baru saja memulai.

Model kemudian akan mengukur hasilnya, 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.

Pada saat Anda mencapai iterasi pelatihan ke-50, model tersebut akan melaporkan tingkat akurasi yang jauh lebih tinggi. Dalam hal ini, 99% ditampilkan.
Di sisi kanan, Anda akan melihat angka akurasi validasi. Nilai ini biasanya sedikit lebih rendah daripada akurasi pelatihan, karena menunjukkan cara model mengklasifikasikan data yang belum pernah'dilihat' sebelumnya. Model ini menggunakan 10% data pengujian yang kita siapkan sebelumnya.

8. Mengekspor model
Setelah pelatihan selesai, Anda dapat mengekspor model.
TensorFlow melatih model dalam formatnya sendiri, dan model ini perlu dikonversi ke format TFLITE agar dapat digunakan dalam aplikasi seluler. Model Maker menangani kompleksitas ini untuk Anda.
Cukup ekspor model, dengan menentukan direktori:
model.export(export_dir='/mm_spam')
Di dalam direktori tersebut, Anda akan melihat file model.tflite. Download. Anda akan memerlukannya dalam codelab berikutnya, tempat Anda menambahkannya ke Aplikasi Android Anda.
Pertimbangan iOS
Model .tflite yang baru saja Anda ekspor berfungsi dengan baik untuk Android, karena metadata tentang model disematkan di dalamnya, dan Android Studio dapat membaca metadata tersebut.
Metadata ini sangat penting karena mencakup kamus token yang merepresentasikan kata-kata sebagaimana yang dikenali oleh model. Ingat sebelumnya ketika Anda mempelajari bahwa kata-kata menjadi token, dan token ini kemudian diberi vektor untuk sentimennya? Aplikasi seluler Anda harus mengetahui token ini. Sebagai contoh, jika "dog" dipecah menjadi token 42, dan pengguna Anda mengetik "dog" ke dalam sebuah kalimat, aplikasi Anda kemudian perlu mengkonversi "dog" menjadi 42 agar model dapat memahaminya. Sebagai developer Android, Anda akan memiliki ‘TensorFlow Lite Task Library' yang mempermudah penggunaan ini, tetapi di iOS, Anda harus memproses kosakata, jadi Anda harus menyediakannya. Model Maker dapat mengekspornya untuk Anda dengan menentukan parameter export_format. Jadi, untuk mendapatkan label dan kosakata untuk model Anda, Anda dapat menggunakan kode ini:
model.export(export_dir='/mm_spam/',
export_format=[ExportFormat.LABEL, ExportFormat.VOCAB])
9. Selamat
Codelab ini telah memandu Anda memahami Kode Python untuk membuat dan mengekspor model. Anda akan memiliki file .tflite di akhir proses.
Dalam codelab berikutnya, Anda akan melihat cara mengedit Aplikasi Android untuk menggunakan model ini sehingga Anda dapat mulai mengklasifikasikan komentar spam.