TensorFlow.js: Latih ulang model deteksi spam komentar untuk menangani kasus ekstrem

1. Sebelum memulai

Codelab ini dirancang untuk melanjutkan hasil akhir codelab sebelumnya dalam seri ini untuk deteksi spam komentar menggunakan TensorFlow.js.

Di codelab terakhir, Anda telah membuat halaman web yang berfungsi penuh untuk blog video fiktif. Anda dapat memfilter komentar untuk spam sebelum dikirim ke server untuk disimpan, atau ke klien terhubung lainnya, menggunakan model deteksi spam komentar terlatih yang didukung oleh TensorFlow.js di browser.

Hasil akhir codelab tersebut ditunjukkan di bawah:

a4511e5d445706b1.gif

Meskipun berfungsi dengan sangat baik, ada kasus ekstrem yang tidak dapat dideteksi. Anda dapat melatih ulang model untuk memperhitungkan situasi yang tidak dapat ditanganinya.

Codelab ini berfokus pada penggunaan pemrosesan bahasa alami (seni memahami bahasa manusia dengan komputer) dan menunjukkan cara mengubah aplikasi web yang sudah ada yang Anda buat (sebaiknya ikuti codelab secara berurutan), untuk mengatasi masalah spam komentar yang sangat nyata, yang pasti akan dihadapi banyak developer web saat mereka mengerjakan salah satu dari sekian banyak aplikasi web populer yang terus bertambah jumlahnya saat ini.

Dalam codelab ini, Anda akan melangkah lebih jauh dengan melatih ulang model ML untuk memperhitungkan perubahan pada konten pesan spam yang dapat berkembang seiring waktu, berdasarkan tren saat ini atau topik diskusi populer sehingga Anda dapat terus memperbarui model dan memperhitungkan perubahan tersebut.

Prasyarat

  • Menyelesaikan codelab pertama dalam seri ini.
  • Pengetahuan dasar tentang teknologi web termasuk HTML, CSS, dan JavaScript.

Yang akan Anda bangun

Anda akan menggunakan kembali situs yang dibuat sebelumnya untuk blog video fiktif dengan bagian komentar real-time dan mengupgradenya untuk memuat versi model deteksi spam yang dilatih kustom menggunakan TensorFlow.js, sehingga performanya lebih baik dalam kasus ekstrem yang sebelumnya akan gagal. Tentu saja sebagai developer dan engineer web, Anda dapat mengubah UX hipotetis ini untuk digunakan kembali di situs mana pun yang mungkin sedang Anda kerjakan dalam peran sehari-hari dan menyesuaikan solusi agar sesuai dengan kasus penggunaan klien mana pun, mungkin berupa blog, forum, atau beberapa bentuk CMS, seperti Drupal misalnya.

Mari kita mulai peretasan...

Yang akan Anda pelajari

Anda akan:

  • Mengidentifikasi kasus ekstrem yang menyebabkan model terlatih gagal
  • Latih ulang Model Klasifikasi Spam yang dibuat menggunakan Model Maker.
  • Ekspor model berbasis Python ini ke format TensorFlow.js untuk digunakan di browser.
  • Perbarui model yang dihosting dan kamusnya dengan model yang baru dilatih dan periksa hasilnya

Lab ini mengasumsikan bahwa Anda sudah memahami HTML5, CSS, dan JavaScript. Anda juga akan menjalankan beberapa kode Python melalui notebook "co lab" untuk melatih ulang model yang dibuat menggunakan Model Maker, tetapi tidak diperlukan pemahaman tentang Python untuk melakukannya.

2. Menyiapkan kode

Sekali lagi, Anda akan menggunakan Glitch.com untuk menghosting dan mengubah aplikasi web. Jika Anda belum menyelesaikan codelab prasyarat, Anda dapat meng-clone hasil akhir di sini sebagai titik awal. Jika Anda memiliki pertanyaan tentang cara kerja kode, sebaiknya selesaikan codelab sebelumnya yang membahas cara membuat aplikasi web yang berfungsi ini sebelum melanjutkan.

Di Glitch, cukup klik tombol remix this untuk membuat fork dan membuat kumpulan file baru yang dapat Anda edit.

3. Menemukan kasus ekstrem dalam solusi sebelumnya

Jika Anda membuka situs yang baru saja Anda clone dan mencoba mengetik beberapa komentar, Anda akan melihat bahwa sebagian besar waktu situs tersebut berfungsi sebagaimana mestinya, memblokir komentar yang terdengar seperti spam seperti yang diharapkan, dan mengizinkan respons yang sah.

Namun, jika Anda mencoba menyusun kata-kata untuk mengacaukan model, Anda mungkin akan berhasil pada suatu saat. Dengan sedikit uji coba, Anda dapat membuat contoh secara manual seperti yang ditunjukkan di bawah. Coba tempelkan kode ini ke aplikasi web yang ada, periksa konsol, dan lihat probabilitas yang muncul untuk mengetahui apakah komentar tersebut adalah spam:

Komentar yang sah diposting tanpa masalah (negatif sebenarnya):

  1. "Wow, saya suka video itu, kerja bagus." Probabilitas Spam: 47,91854%
  2. "Sangat menyukai demo ini! Ada detail lainnya?" Kemungkinan Spam: 47,15898%
  3. "Situs mana yang dapat saya buka untuk mempelajari lebih lanjut?" Probabilitas Spam: 15,32495%

Bagus, probabilitas untuk semua hal di atas cukup rendah dan berhasil melewati SPAM_THRESHOLD default dengan probabilitas minimum 75% sebelum tindakan diambil (ditentukan dalam kode script.js dari codelab sebelumnya).

Sekarang, mari kita coba tulis beberapa komentar yang lebih kontroversial yang ditandai sebagai spam meskipun sebenarnya bukan...

Komentar sah ditandai sebagai spam (positif palsu):

  1. "Bisakah seseorang menautkan situs untuk masker yang dia kenakan?" Kemungkinan Spam: 98,46466%
  2. "Can I buy this song on Spotify? (Bisakah saya membeli lagu ini di Spotify?) Seseorang tolong beri tahu saya!" Kemungkinan Spam: 94,40953%
  3. "Bisakah seseorang menghubungi saya untuk memberikan detail tentang cara mendownload TensorFlow.js?" Kemungkinan Spam: 83.20084%

Maaf. Sepertinya komentar yang sah ini ditandai sebagai spam padahal seharusnya diizinkan. Bagaimana cara memperbaikinya?

Salah satu opsi mudahnya adalah meningkatkan SPAM_THRESHOLD hingga lebih dari 98,5% keyakinan. Jika demikian, komentar yang salah diklasifikasikan ini akan diposting. Dengan mengingat hal itu, mari kita lanjutkan dengan kemungkinan hasil lainnya di bawah...

Komentar spam yang ditandai sebagai spam (positif benar):

  1. "Ini keren, tapi lihat link download di situs saya yang lebih baik!" Kemungkinan Spam: 99,77873%
  2. "Saya kenal beberapa orang yang bisa mendapatkan obat untukmu, lihat saja pr0fil saya untuk mengetahui detailnya" Kemungkinan Spam: 98,46955%
  3. "Lihat profil saya untuk mendownload lebih banyak video menarik yang lebih bagus lagi! http://example.com" Kemungkinan Spam: 96.26383%

Oke, jadi ini berfungsi seperti yang diharapkan dengan nilai minimum 75% awal kita, tetapi mengingat pada langkah sebelumnya Anda mengubah SPAM_THRESHOLD menjadi lebih dari 98,5% yakin, ini berarti 2 contoh di sini akan lolos, jadi mungkin nilai minimumnya terlalu tinggi. Mungkin 96% lebih baik? Namun, jika Anda melakukannya, salah satu komentar di bagian sebelumnya (positif palsu) akan ditandai sebagai spam padahal komentar tersebut sah karena diberi rating 98,46466%.

Dalam hal ini, sebaiknya ambil semua komentar spam asli ini dan cukup latih ulang untuk kegagalan di atas. Dengan menetapkan nilai minimum ke 96%, semua positif benar masih tercatat dan Anda menghilangkan 2 positif palsu di atas. Tidak terlalu buruk hanya dengan mengubah satu angka.

Mari kita lanjutkan...

Komentar spam yang diizinkan untuk diposting (negatif palsu):

  1. "Lihat profil saya untuk mendownload lebih banyak video luar biasa yang bahkan lebih baik!" Probabilitas Spam: 7,54926%
  2. "Dapatkan diskon untuk kelas pelatihan gym kami, lihat profilnya!" Kemungkinan Spam: 17.49849%
  3. "OMG, saham GOOG baru saja naik! Dapatkan sebelum terlambat!" Probabilitas Spam: 20,42894%

Untuk komentar ini, tidak ada yang dapat Anda lakukan hanya dengan mengubah nilai SPAM_THRESHOLD lebih lanjut. Menurunkan nilai minimum untuk spam dari 96% menjadi ~9% akan menyebabkan komentar asli ditandai sebagai spam - salah satunya memiliki rating 58% meskipun sah. Satu-satunya cara untuk menangani komentar seperti ini adalah dengan melatih ulang model dengan menyertakan kasus ekstrem tersebut dalam data pelatihan sehingga model belajar menyesuaikan pandangannya tentang apa yang termasuk spam atau tidak.

Meskipun satu-satunya opsi yang tersisa saat ini adalah melatih ulang model, Anda juga melihat cara menyempurnakan nilai minimum saat Anda memutuskan untuk menandai sesuatu sebagai spam guna meningkatkan performa. Sebagai manusia, 75% tampak cukup yakin, tetapi untuk model ini, Anda perlu meningkatkan hingga mendekati 81,5% agar lebih efektif dengan input contoh.

Tidak ada satu nilai ajaib yang berfungsi dengan baik di berbagai model, dan nilai minimum ini perlu ditetapkan per model setelah bereksperimen dengan data dunia nyata untuk mengetahui nilai yang berfungsi dengan baik.

Mungkin ada beberapa situasi ketika memiliki positif (atau negatif) palsu dapat menimbulkan konsekuensi serius (misalnya, dalam industri medis), sehingga Anda dapat menyesuaikan nilai minimum agar sangat tinggi dan meminta lebih banyak peninjauan manual untuk kasus yang tidak memenuhi nilai minimum tersebut. Ini adalah pilihan Anda sebagai developer dan memerlukan beberapa eksperimen.

4. Melatih ulang model deteksi spam komentar

Di bagian sebelumnya, Anda mengidentifikasi sejumlah kasus ekstrem yang gagal untuk model yang satu-satunya opsi adalah melatih ulang model untuk memperhitungkan situasi ini. Dalam sistem produksi, Anda dapat menemukan komentar ini seiring waktu saat orang menandai komentar sebagai spam secara manual yang lolos atau moderator yang meninjau komentar yang ditandai menyadari bahwa beberapa komentar sebenarnya bukan spam dan dapat menandai komentar tersebut untuk pelatihan ulang. Dengan asumsi Anda telah mengumpulkan banyak data baru untuk kasus ekstrem ini (untuk hasil terbaik, Anda harus memiliki beberapa variasi kalimat baru ini jika memungkinkan), kita akan melanjutkan dengan menunjukkan cara melatih ulang model dengan mempertimbangkan kasus ekstrem tersebut.

Rangkuman model buatan Google

Model siap pakai yang Anda gunakan adalah model yang dibuat oleh pihak ketiga melalui Model Maker yang menggunakan model "embedding kata rata-rata" agar berfungsi.

Karena model dibuat dengan Model Maker, Anda harus beralih sebentar ke Python untuk melatih ulang model, lalu mengekspor model yang dibuat ke format TensorFlow.js agar dapat menggunakannya di browser. Untungnya, Model Maker memudahkan penggunaan model mereka, jadi Anda akan mudah mengikuti prosesnya dan kami akan memandu Anda melalui proses tersebut. Jadi, jangan khawatir jika Anda belum pernah menggunakan Python sebelumnya.

Colabs

Karena Anda tidak terlalu khawatir dalam codelab ini untuk menyiapkan server Linux dengan semua utilitas Python yang diinstal, Anda dapat menjalankan kode melalui browser web menggunakan "Notebook Colab". Notebook ini dapat terhubung ke "backend" - yang hanyalah server dengan beberapa hal yang telah diinstal sebelumnya, yang kemudian dapat Anda gunakan untuk menjalankan kode arbitrer dalam browser web dan melihat hasilnya. Hal ini sangat berguna untuk pembuatan prototipe cepat atau untuk digunakan dalam tutorial seperti ini.

Cukup buka colab.research.google.com dan Anda akan melihat layar selamat datang seperti yang ditunjukkan:

6b82258445885c50.png

Sekarang klik tombol New Notebook di kanan bawah jendela pop-up dan Anda akan melihat colab kosong seperti ini:

2d52c8f7afa88564.png

Bagus! Langkah selanjutnya adalah menghubungkan colab frontend ke beberapa server backend sehingga Anda dapat mengeksekusi kode Python yang akan Anda tulis. Lakukan dengan mengklik Hubungkan di kanan atas, lalu pilih Hubungkan ke runtime yang dihosting.

fa5f578a1a3d352b.png

Setelah terhubung, Anda akan melihat ikon RAM dan Disk muncul di tempatnya, seperti ini:

541c9894fb39d4cb.png

Bagus! Sekarang Anda dapat mulai membuat kode di Python untuk melatih ulang model Model Maker. Cukup ikuti langkah-langkah di bawah.

Langkah 1

Di sel pertama yang saat ini kosong, salin kode di bawah. Perintah ini akan menginstal TensorFlow Lite Model Maker untuk Anda menggunakan pengelola paket Python yang disebut "pip" (mirip dengan npm yang mungkin lebih dikenal oleh sebagian besar pembaca codelab ini dari ekosistem JS):

!apt-get install libasound-dev portaudio19-dev libportaudio2 libportaudiocpp0
!pip install -q tflite-model-maker

Namun, menempelkan kode ke dalam sel tidak akan menjalankannya. Selanjutnya, arahkan kursor ke sel abu-abu tempat Anda menempelkan kode di atas, dan ikon "putar" kecil akan muncul di sebelah kiri sel seperti yang ditandai di bawah:

7ac5e3516bed6335.png Klik tombol putar untuk menjalankan kode yang baru saja diketik di sel.

Sekarang Anda akan melihat penginstal pembuat model:

651f21b04fb648cc.png

Setelah eksekusi sel ini selesai seperti yang ditunjukkan, lanjutkan ke langkah berikutnya di bawah.

Langkah 2

Selanjutnya, tambahkan sel kode baru seperti yang ditunjukkan agar Anda dapat menempelkan lebih banyak kode setelah sel pertama dan mengeksekusinya secara terpisah:

869904a9d774c455.png

Sel berikutnya yang dieksekusi akan memiliki sejumlah impor yang harus digunakan oleh kode di seluruh notebook. Salin dan tempel kode di bawah ke dalam sel baru yang dibuat:

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')

Hal yang cukup standar, meskipun Anda tidak terbiasa dengan Python. Anda hanya mengimpor beberapa utilitas dan fungsi Model Maker yang diperlukan untuk pengklasifikasi spam. Tindakan ini juga akan memeriksa apakah Anda menjalankan TensorFlow 2.x atau tidak, yang merupakan persyaratan untuk menggunakan Model Maker.

Terakhir, seperti sebelumnya, jalankan sel dengan menekan ikon "putar" saat Anda mengarahkan kursor ke sel, lalu tambahkan sel kode baru untuk langkah berikutnya.

Langkah 3

Selanjutnya, Anda akan mendownload data dari server jarak jauh ke perangkat, dan menetapkan variabel training_data sebagai jalur file lokal yang didownload:

data_file = tf.keras.utils.get_file(fname='comment-spam-extras.csv', origin='https://storage.googleapis.com/jmstore/TensorFlowJS/EdX/code/6.5/jm_blog_comments_extras.csv', extract=False)

Model Maker dapat melatih model dari file CSV sederhana seperti yang didownload. Anda hanya perlu menentukan kolom mana yang menyimpan teks dan mana yang memiliki label. Anda akan melihat cara melakukannya di Langkah 5. Anda dapat langsung mendownload file CSV sendiri untuk melihat isinya jika Anda mau.

Anda yang jeli akan melihat bahwa nama file ini adalah jm_blog_comments_extras.csv - file ini hanyalah data pelatihan asli yang kami gunakan untuk membuat model spam komentar pertama yang digabungkan dengan data kasus ekstrem baru yang Anda temukan sehingga semuanya ada dalam satu file. Anda juga memerlukan data pelatihan asli yang digunakan untuk melatih model selain kalimat baru yang ingin dipelajari.

Opsional: Jika Anda mendownload file CSV ini dan memeriksa beberapa baris terakhir, Anda akan melihat contoh untuk kasus ekstrem yang sebelumnya tidak berfungsi dengan benar. Data tersebut baru saja ditambahkan ke akhir data pelatihan yang ada yang digunakan model buatan Google untuk melatih dirinya sendiri.

Jalankan sel ini, lalu setelah selesai dijalankan, tambahkan sel baru, dan lanjutkan ke langkah 4.

Langkah 4

Saat menggunakan Model Maker, Anda tidak mem-build model dari awal. Anda biasanya menggunakan model yang ada, lalu menyesuaikannya dengan kebutuhan Anda.

Model Maker menyediakan beberapa embedding model terlatih yang dapat Anda gunakan, tetapi yang paling sederhana dan cepat untuk memulai adalah average_word_vec yang Anda gunakan di codelab sebelumnya untuk membangun situs Anda. Berikut kodenya:

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

Lanjutkan dan jalankan setelah Anda menempelkannya ke sel baru.

Memahami

num_words

parameter

Ini adalah jumlah kata yang ingin Anda gunakan untuk model. Anda mungkin berpikir bahwa semakin banyak semakin bagus, tetapi umumnya ada titik ideal berdasarkan frekuensi penggunaan setiap kata. Jika Anda menggunakan setiap kata di seluruh korpus, Anda dapat membuat model mencoba mempelajari dan menyeimbangkan bobot kata yang hanya digunakan sekali - hal ini tidak terlalu berguna. 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. Jadi, Anda dapat menyesuaikan model berdasarkan jumlah kata yang diinginkan menggunakan parameter num_words. Jumlah yang lebih kecil di sini akan menghasilkan model yang lebih kecil dan lebih cepat, tetapi bisa jadi kurang akurat karena jumlah kata yang dikenali lebih sedikit. Jumlah yang lebih besar di sini akan menghasilkan model yang lebih besar dan berpotensi lebih lambat. Menemukan titik ideal adalah kunci dan bergantung pada Anda sebagai engineer machine learning untuk mencari tahu apa yang paling cocok untuk kasus penggunaan Anda.

Memahami

wordvec_dim

parameter

Parameter wordvec_dim adalah jumlah dimensi yang ingin Anda gunakan untuk vektor setiap kata. Dimensi ini pada dasarnya adalah berbagai karakteristik (dibuat oleh algoritma machine learning saat pelatihan) yang dapat digunakan untuk mengukur kata tertentu yang akan digunakan oleh program untuk mencoba dan mengaitkan kata-kata yang serupa dengan cara yang bermakna.

Misalnya, jika Anda memiliki dimensi untuk seberapa "medis" suatu kata, kata seperti "pil" mungkin mendapatkan skor tinggi dalam dimensi ini, dan dikaitkan dengan kata-kata lain yang mendapatkan skor tinggi seperti "rontgen", tetapi "kucing" akan mendapatkan skor rendah dalam dimensi ini. Ternyata "dimensi medis" berguna untuk menentukan spam jika dikombinasikan dengan dimensi potensial lain yang mungkin diputuskan untuk digunakan dan signifikan.

Dalam kasus kata-kata yang memiliki skor tinggi dalam "dimensi medis", mungkin akan berguna jika ada dimensi ke-2 yang mengorelasikan kata-kata dengan tubuh manusia. Kata-kata seperti "kaki", "lengan", "leher" dapat memperoleh skor tinggi di sini dan juga cukup tinggi dalam dimensi medis.

Model dapat menggunakan dimensi ini untuk mendeteksi kata-kata yang lebih mungkin terkait dengan spam. Mungkin email spam lebih cenderung berisi kata-kata yang berkaitan dengan medis dan bagian tubuh manusia.

Menurut prinsip umum berdasarkan penelitian, akar pangkat empat dari jumlah kata berfungsi dengan baik untuk parameter ini. Jadi, jika saya menggunakan 2.000 kata, titik awal yang baik untuk hal ini adalah 7 dimensi. Jika Anda mengubah jumlah kata yang digunakan, Anda juga dapat mengubah jumlah dimensinya.

Memahami

seq_len

parameter

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, yang merupakan'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 - seperti pada codelab pertama dalam seri ini.

Langkah 5 - muat data pelatihan

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 spesifikasi model yang Anda buat di langkah 4, beserta karakter pembatas, yang dalam hal ini merupakan koma karena file dipisahkan koma. Anda juga menetapkan parameter pengacakan untuk mengatur ulang data pelatihan secara acak sehingga hal-hal yang mungkin serupa atau dikumpulkan bersama disebar secara acak di seluruh set data.

Kemudian, Anda akan menggunakan data.split() untuk membagi data menjadi data pelatihan dan pengujian. .9 menunjukkan bahwa 90% set data akan digunakan untuk pelatihan, dan sisanya untuk pengujian.

Langkah 6 - Bangun model

Tambahkan sel lain tempat kita akan menambahkan kode untuk membangun model:

model = text_classifier.create(train_data, model_spec=spec, epochs=50)

Tindakan ini akan membuat model pengklasifikasi teks dengan Model Maker, dan Anda menentukan data pelatihan yang ingin digunakan (yang ditentukan di langkah 4), spesifikasi model (yang juga disiapkan di langkah 4), dan sejumlah iterasi pelatihan, dalam hal 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 seperti yang ditunjukkan di bawah:

bbe4b896d8060bc4.png

Model kemudian akan mengukur hasilnya, dan mengubah bobot model untuk menyesuaikan prediksinya, lalu mencoba lagi. Inilah yang disebut iterasi pelatihan. Jadi, dengan menentukan iterasi pelatihan sebanyak 50, model akan melalui ‘loop' sebanyak 50 kali seperti yang ditunjukkan:

4ed286d114960ca.png

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

Langkah 7 - Mengekspor Model

Setelah pelatihan selesai, Anda dapat mengekspor model. TensorFlow melatih model dalam formatnya sendiri, dan model ini perlu dikonversi ke format TensorFlow.js untuk digunakan di halaman web. Cukup tempelkan kode berikut di sel baru dan jalankan:

model.export(export_dir="/js_export/", export_format=[ExportFormat.TFJS, ExportFormat.LABEL, ExportFormat.VOCAB])
!zip -r /js_export/ModelFiles.zip /js_export/

Setelah menjalankan kode ini, jika Anda mengklik ikon folder kecil di sebelah kiri Colab, Anda dapat membuka folder yang Anda ekspor di atas (di direktori root - Anda mungkin perlu naik satu level) dan menemukan paket zip dari file yang diekspor yang ada di ModelFiles.zip.

Download file zip ini ke komputer Anda sekarang karena Anda akan menggunakan file tersebut seperti di codelab pertama:

cda3c681ebf144b4.png

Bagus! Bagian Python sudah selesai, Anda kini dapat kembali ke JavaScript yang Anda kenal dan sukai. Fiuh!

5. Menyajikan model machine learning baru

Sekarang Anda hampir siap memuat model. Namun, sebelum dapat melakukannya, Anda harus mengupload file model baru yang didownload sebelumnya di codelab agar dihosting dan dapat digunakan dalam kode Anda.

Pertama, jika Anda belum melakukannya, buka zip file untuk model yang baru saja didownload dari notebook Colab Model Maker yang baru saja Anda jalankan. Anda akan melihat file berikut yang ada di dalam berbagai foldernya:

3ace87c57b98cfbc.png

Apa yang Anda miliki di sini?

  • model.json - Ini adalah salah satu file yang membentuk model TensorFlow.js terlatih. Anda akan mereferensikan file tertentu ini dalam kode JS.
  • group1-shard1of1.bin - Ini adalah file biner yang berisi sebagian besar data tersimpan untuk model TensorFlow.js yang diekspor dan harus dihosting di suatu tempat di server Anda untuk didownload di direktori yang sama dengan model.json di atas.
  • vocab - File aneh tanpa ekstensi ini berasal dari Model Maker yang menunjukkan cara mengenkode kata dalam kalimat sehingga model memahami cara menggunakannya. Anda akan mempelajari hal ini lebih lanjut di bagian berikutnya.
  • labels.txt - Ini hanya berisi nama class yang dihasilkan yang akan diprediksi oleh model. Untuk model ini, jika Anda membuka file ini di editor teks, file tersebut hanya mencantumkan "false" dan "true" yang menunjukkan "bukan spam" atau "spam" sebagai output prediksinya.

Menghosting file model TensorFlow.js

Pertama, tempatkan file model.json dan *.bin yang dihasilkan di server web sehingga Anda dapat mengaksesnya melalui halaman web.

Menghapus file model yang ada

Karena Anda akan membangun hasil akhir codelab pertama dalam seri ini, Anda harus menghapus file model yang sudah diupload terlebih dahulu. Jika Anda menggunakan Glitch.com, cukup periksa panel file di sebelah kiri untuk melihat model.json dan group1-shard1of1.bin, klik dropdown menu 3 titik untuk setiap file, lalu pilih delete seperti yang ditunjukkan:

c72bfdc5a0db4d0d.png

Mengupload file baru ke Glitch

Bagus! Sekarang upload yang baru:

  1. Buka folder assets di panel kiri project Glitch Anda dan hapus aset lama yang diupload jika memiliki nama yang sama.
  2. Klik upload aset, lalu pilih group1-shard1of1.bin untuk diupload ke folder ini. Setelah diupload, tampilannya akan terlihat seperti ini:

c6739dd30e6df977.png

  1. Bagus! Sekarang lakukan hal yang sama untuk file model.json sehingga 2 file akan berada di folder aset Anda seperti ini:

b7858eb08bea9ac3.png

  1. Jika Anda mengklik file group1-shard1of1.bin yang baru saja diupload, Anda akan dapat menyalin URL ke lokasinya. Salin jalur ini sekarang seperti yang ditunjukkan:

19999f6644f61153.png

  1. Sekarang di kiri bawah layar, klik Tools > Terminal. Tunggu hingga jendela terminal dimuat.
  2. Setelah dimuat, ketik perintah berikut, lalu tekan enter untuk mengubah direktori ke folder www:

terminal:

cd www
  1. Selanjutnya, gunakan wget untuk mendownload 2 file yang baru saja diupload dengan mengganti URL di bawah dengan URL yang Anda buat untuk file di folder aset di Glitch (periksa folder aset untuk URL kustom setiap file).

Perhatikan spasi di antara dua URL dan bahwa URL yang perlu Anda gunakan akan berbeda dengan yang ditampilkan, tetapi akan terlihat serupa:

terminal

wget https://cdn.glitch.com/1cb82939-a5dd-42a2-9db9-0c42cab7e407%2Fmodel.json?v=1616111344958 https://cdn.glitch.com/1cb82939-a5dd-42a2-9db9-0c42cab7e407%2Fgroup1-shard1of1.bin?v=1616017964562

Keren! Sekarang Anda telah membuat salinan file yang diupload ke folder www.

Namun, saat ini file tersebut akan didownload dengan nama yang aneh. Jika Anda mengetik ls di terminal dan menekan enter, Anda akan melihat sesuatu seperti ini:

6c417fdfc64762f1.png

  1. Ganti nama file menggunakan perintah mv. Ketik perintah berikut ke dalam konsol dan tekan enter setelah setiap baris:

terminal:

mv *group1-shard1of1.bin* group1-shard1of1.bin
mv *model.json* model.json
  1. Terakhir, muat ulang project Glitch dengan mengetik refresh di terminal, lalu tekan enter:

terminal:

refresh

Setelah memuat ulang, Anda akan melihat model.json dan group1-shard1of1.bin di folder www pada antarmuka pengguna:

530bb651f4dbac64.png

Bagus! Langkah terakhir adalah memperbarui file dictionary.js.

  1. Konversi file vocab yang baru didownload ke format JS yang benar secara manual melalui editor teks atau menggunakan alat ini dan simpan output yang dihasilkan sebagai dictionary.js dalam folder www Anda. Jika sudah memiliki file dictionary.js, Anda cukup menyalin dan menempelkan konten baru ke dalamnya, lalu menyimpan file.

Hore! Anda telah berhasil memperbarui semua file yang diubah dan jika Anda mencoba menggunakan situs sekarang, Anda akan melihat bagaimana model yang dilatih ulang dapat memperhitungkan kasus ekstrem yang ditemukan dan dipelajari seperti yang ditunjukkan:

64e5cf6f6e158d6c.gif

Seperti yang Anda lihat, 6 pesan pertama kini diklasifikasikan dengan benar sebagai bukan spam, dan 6 pesan kedua semuanya diidentifikasi sebagai spam. Sempurna!

Mari kita coba beberapa variasi juga untuk melihat apakah hasilnya sudah cukup umum. Awalnya ada kalimat yang salah seperti:

"OMG, saham GOOG baru saja naik! Dapatkan sebelum terlambat!"

Sekarang diklasifikasikan dengan benar sebagai spam, tetapi apa yang terjadi jika Anda mengubahnya menjadi:

"Jadi, nilai saham XYZ baru saja meningkat! Beli beberapa sebelum terlambat!"

Di sini Anda mendapatkan prediksi 98% kemungkinan spam yang benar meskipun Anda mengubah simbol saham dan sedikit mengubah kata-katanya.

Tentu saja, jika Anda benar-benar mencoba merusak model baru ini, Anda akan dapat melakukannya, dan hal ini akan bergantung pada pengumpulan lebih banyak data pelatihan untuk memiliki peluang terbaik dalam menangkap lebih banyak variasi unik untuk situasi umum yang mungkin Anda temui secara online. Dalam codelab mendatang, kami akan menunjukkan cara terus meningkatkan kualitas model Anda dengan data aktif saat ditandai.

6. Selamat!

Selamat, Anda telah berhasil melatih ulang model machine learning yang ada untuk memperbarui dirinya sendiri agar berfungsi untuk kasus ekstrem yang Anda temukan dan men-deploy perubahan tersebut ke browser dengan TensorFlow.js untuk aplikasi dunia nyata.

Rangkuman

Dalam codelab ini, Anda telah:

  1. Menemukan kasus ekstrem yang tidak berfungsi saat menggunakan model spam komentar siap pakai
  2. Melatih ulang model Model Maker untuk memperhitungkan kasus ekstrem yang Anda temukan
  3. Mengekspor model terlatih baru ke format TensorFlow.js
  4. Memperbarui aplikasi web Anda untuk menggunakan file baru

Apa selanjutnya?

Jadi, update ini berfungsi dengan baik, tetapi seperti aplikasi web lainnya, perubahan akan terjadi seiring waktu. Akan jauh lebih baik jika aplikasi terus meningkatkan dirinya dari waktu ke waktu, alih-alih kami harus melakukannya secara manual setiap saat. Dapatkah Anda memikirkan cara mengotomatiskan langkah-langkah ini untuk melatih ulang model secara otomatis setelah Anda, misalnya, memiliki 100 komentar baru yang ditandai sebagai salah diklasifikasikan? Dengan kemampuan teknik web yang Anda miliki, Anda mungkin dapat mengetahui cara membuat pipeline untuk melakukan hal ini secara otomatis. Jika belum, jangan khawatir, nantikan codelab berikutnya dalam seri ini yang akan menunjukkan caranya.

Bagikan hal yang Anda buat dengan kami

Anda dapat dengan mudah memperluas kreasi Anda hari ini untuk kasus penggunaan kreatif lainnya juga dan kami mendorong Anda untuk berpikir di luar kebiasaan dan terus berkreasi.

Jangan lupa untuk men-tag kami di media sosial menggunakan hashtag #MadeWithTFJS agar project Anda berpeluang ditampilkan di blog TensorFlow atau bahkan di acara mendatang. Kami ingin sekali melihat hasil kreasi Anda.

Codelab TensorFlow.js lainnya untuk memperdalam pemahaman

Situs untuk dipelajari