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 lain-lain. 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 Mulai Menggunakan 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')
Ini juga akan memeriksa apakah Anda menjalankan TensorFlow 2.x, yang merupakan persyaratan untuk menggunakan Model Maker.
4. Mendownload data
Berikutnya, download data dari server Cloud ke perangkat Anda, dan setel data_file
agar mengarah 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 yang menyimpan label. Anda akan melihat cara melakukannya nanti di codelab.
5. Embeddings terlatih
Umumnya, saat menggunakan Model Maker, Anda tidak membuat model dari awal. Anda menggunakan model yang ada yang disesuaikan dengan kebutuhan Anda.
Untuk model bahasa, seperti yang satu ini, diperlukan penggunaan penyematan yang telah dipelajari sebelumnya. Ide di balik embedding adalah kata-kata dikonversi menjadi angka, dengan setiap kata di korpus Anda diberi angka. Embedding adalah vektor yang digunakan untuk menentukan sentimen kata dengan menetapkan "arah" untuk kata tersebut. Misalnya, kata yang sering digunakan dalam pesan spam komentar pada akhirnya vektor akan mengarah ke arah yang sama, dan kata yang tidak arahnya akan menunjuk ke arah yang berlawanan.
Dengan menggunakan embeddings yang telah dipelajari sebelumnya, Anda akan mulai dengan korpus, atau kumpulan, kata-kata yang telah memiliki sentimen yang dipelajari dari sekumpulan besar teks. Hal ini akan membawa Anda ke solusi yang jauh lebih cepat daripada memulai dari nol.
Model Maker menyediakan beberapa embeddings terlatih yang dapat Anda gunakan, tetapi yang paling sederhana dan tercepat untuk memulai adalah average_word_vec
.
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 digunakan model Anda.
Anda mungkin berpikir "semakin baik, semakin baik," tetapi umumnya ada angka yang tepat
berdasarkan frekuensi penggunaan setiap kata. Jika Anda menggunakan setiap kata di seluruh korpus, model Anda mungkin akan mencoba mempelajari dan menentukan arah kata yang hanya digunakan satu kali. Anda akan menemukan di korpus teks bahwa banyak kata yang hanya pernah digunakan satu atau dua kali, dan umumnya tidak ada gunanya untuk menggunakannya dalam model Anda karena mereka memiliki dampak yang sangat kecil terhadap keseluruhan sentimen. Anda dapat menyesuaikan model pada jumlah kata yang diinginkan menggunakan parameter num_words
.
Jumlah kata yang lebih kecil di sini dapat menghasilkan model yang lebih kecil dan lebih cepat, tetapi mungkin kurang akurat, karena model ini mengenali lebih sedikit kata. Angka yang lebih besar di sini akan memiliki 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. Aturan praktis yang ditentukan dari penelitian adalah bahwa akar pangkat empat dari jumlah kata. Misalnya, jika Anda menggunakan 2.000 kata, titik awal yang baik adalah 7. Jika Anda mengubah jumlah kata yang digunakan, Anda juga dapat mengubah ini.
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 tertentu yang statis. Hal tersebut ditentukan oleh parameter seq_len
, atau panjang urutan.
Saat Anda mengonversi kata menjadi angka (atau token), kalimat akan menjadi urutan token tersebut. Jadi model Anda akan dilatih (dalam hal ini) untuk mengklasifikasikan dan mengenali kalimat yang memiliki 20 token. Jika kalimat lebih panjang dari ini, kalimat tersebut akan dipotong. Jika lebih pendek, akan ada 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, bersama dengan karakter pembatas, yang dalam hal ini adalah 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 epoch, dalam hal ini adalah 50.
Prinsip dasar Machine Learning adalah bahwa ini merupakan bentuk pencocokan pola. Awalnya, aplikasi akan memuat bobot terlatih untuk kata tersebut, dan mencoba mengelompokkannya dengan prediksi kata mana, jika dikelompokkan, mengindikasikan spam, dan mana yang tidak. Pertama kali, mendekati 50:50, karena model baru saja memulai.
Kemudian, alat tersebut 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 epoch ke-50, model ini akan melaporkan tingkat akurasi yang jauh lebih tinggi. Dalam hal ini, menunjukkan 99%.
Di sisi kanan, Anda akan melihat angka akurasi validasi. Ini biasanya akan sedikit lebih rendah daripada akurasi pelatihan, karena menunjukkan cara model mengklasifikasikan data yang belum 'terlihat' sebelumnya. Model ini menggunakan 10% data pengujian yang telah kita sisihkan sebelumnya.
8. Mengekspor model
Setelah pelatihan selesai, Anda dapat mengekspor model.
TensorFlow melatih model dalam formatnya sendiri, dan 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')
Dalam direktori tersebut, Anda akan melihat file model.tflite
. Download. Anda akan membutuhkannya di codelab berikutnya, tempat Anda menambahkannya ke Aplikasi Android.
Pertimbangan iOS
Model .tflite yang baru saja Anda ekspor berfungsi dengan baik untuk Android, karena metadata tentang model tersemat di dalamnya, dan Android Studio dapat membaca metadata tersebut.
Metadata ini sangat penting karena mencakup kamus token yang mewakili kata-kata saat model mengenalinya. Ingat sebelumnya ketika Anda belajar bahwa kata-kata menjadi token, dan token ini kemudian diberikan vektor untuk sentimen mereka? Aplikasi seluler Anda harus mengetahui token ini. Misalnya, jika "dog" ditokenkan menjadi 42, dan pengguna mengetik "dog" menjadi kalimat, aplikasi Anda harus
mengonversi "dog" hingga 42 agar model dapat memahaminya. Sebagai developer Android, Anda akan memiliki 'Library Tugas TensorFlow Lite' yang mempermudah penggunaan ini, tetapi di iOS Anda perlu memproses kosakata, jadi Anda harus menyediakannya. Model Maker dapat mengekspor ini untuk Anda dengan menentukan parameter export_format
. Jadi, untuk mendapatkan label dan kosakata pada model, Anda bisa menggunakan ini:
model.export(export_dir='/mm_spam/',
export_format=[ExportFormat.LABEL, ExportFormat.VOCAB])
9. Selamat
Codelab ini telah memandu Anda mempelajari Kode Python untuk membuat dan mengekspor model. Anda akan memiliki file .tflite di akhir file.
Pada codelab berikutnya, Anda akan melihat cara mengedit Aplikasi Android untuk menggunakan model ini agar dapat mulai mengklasifikasikan komentar spam.