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

1. Sebelum memulai

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

Dalam codelab terakhir, Anda telah membuat halaman web yang berfungsi sepenuhnya untuk blog video fiktif. Anda dapat memfilter komentar untuk mendeteksi spam sebelum dikirim ke server untuk disimpan, atau ke klien lain yang terhubung, menggunakan model deteksi spam komentar yang telah dilatih sebelumnya dan didukung oleh TensorFlow.js di browser.

Hasil akhir codelab tersebut ditampilkan di bawah ini:

a4511e5d445706b1.gif

Meskipun ini bekerja sangat baik, ada kasus ekstrem untuk dijelajahi yang tidak dapat dideteksi. Anda dapat melatih ulang model untuk memperhitungkan situasi yang tidak dapat ditangani.

Codelab ini berfokus pada penggunaan natural language processing (seni memahami bahasa manusia dengan komputer) dan menunjukkan cara memodifikasi aplikasi web yang sudah ada (sangat disarankan bagi Anda untuk mengikuti codelab secara berurutan), untuk mengatasi masalah spam komentar yang sebenarnya, yang pasti akan dijumpai banyak developer web ketika mereka mengerjakan salah satu aplikasi web populer yang jumlahnya terus bertambah saat ini.

Dalam codelab ini, Anda akan melatih ulang model ML Anda untuk memperhitungkan perubahan konten pesan spam yang dapat berkembang dari waktu ke waktu, berdasarkan tren saat ini atau topik diskusi populer yang memungkinkan Anda untuk 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 model deteksi spam versi terlatih menggunakan TensorFlow.js, sehingga performanya lebih baik dalam kasus ekstrem yang sebelumnya gagal. Tentu saja, sebagai developer dan engineer web, Anda dapat mengubah UX fiktif ini untuk digunakan kembali di situs mana pun yang mungkin Anda kerjakan sehari-hari dan menyesuaikan solusinya agar sesuai dengan kasus penggunaan klien apa pun - mungkin berupa blog, forum, atau beberapa bentuk CMS, seperti Drupal misalnya.

Ayo meretas...

Yang akan Anda pelajari

Anda akan:

  • Mengidentifikasi kasus ekstrem yang terjadi pada model terlatih
  • Latih kembali 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

Pemahaman tentang HTML5, CSS, dan JavaScript dianggap untuk lab ini. Anda juga akan menjalankan beberapa kode Python melalui "co lab" untuk melatih ulang model yang dibuat menggunakan Model Maker, tetapi Anda tidak perlu menguasai Python untuk melakukannya.

2. Melakukan persiapan untuk membuat kode

Sekali lagi, Anda akan menggunakan Glitch.com untuk menghosting dan memodifikasi aplikasi web. Jika belum menyelesaikan codelab prasyarat, Anda dapat meng-clone hasil akhir di sini sebagai titik awal. Jika ada pertanyaan tentang cara kerja kode, sangat disarankan agar Anda menyelesaikan codelab sebelumnya yang menjelaskan cara membuat aplikasi web ini berfungsi sebelum melanjutkan.

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

3. Menemukan kasus ekstrem pada solusi sebelumnya

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

Namun, jika Anda pandai dan mencoba berbagai hal untuk merusak model, nantinya Anda mungkin akan berhasil. Dengan sedikit coba-coba, Anda dapat membuat contoh secara manual seperti yang ditunjukkan di bawah ini. Coba tempelkan ini ke aplikasi web yang ada, periksa konsol, dan lihat probabilitas yang kembali jika komentar tersebut adalah spam:

Komentar sah yang diposting tanpa masalah (negatif benar):

  1. "Wow, saya suka video itu, hasil karya yang luar biasa." Spam Probabilitas: 47.91854%
  2. "Sangat suka dengan demo ini! Ada detail selengkapnya?" Spam Probabilitas: 47,15898%
  3. "Situs apa yang dapat saya buka untuk mempelajari lebih lanjut?" Spam Probabilitas: 15,32495%

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

Sekarang mari kita coba menulis beberapa komentar aneh yang ditandai sebagai spam meskipun bukan...

Komentar sah yang ditandai sebagai spam (positif palsu):

  1. "Bisakah seseorang menautkan situs untuk masker yang dia pakai?" Probabilitas Spam: 98.46466%
  2. "Bisakah saya membeli lagu ini di Spotify? Seseorang, tolong beri tahu saya." Spam Probabilitas: 94,40953%
  3. "Bisakah seseorang menghubungi saya untuk memberikan detail tentang cara mendownload TensorFlow.js?" Spam Probabilitas: 83.20084%

Astaga! Sepertinya komentar yang sah ini ditandai sebagai spam padahal seharusnya diizinkan. Bagaimana cara mengatasinya?

Salah satu opsi sederhana adalah meningkatkan SPAM_THRESHOLD menjadi lebih dari 98,5% yakin. Dalam hal ini, komentar yang salah diklasifikasikan ini kemudian akan diposting. Dengan mengingat hal itu, mari kita lanjutkan dengan kemungkinan hasil lainnya di bawah ini...

Komentar spam yang ditandai sebagai spam (positif benar):

  1. "Bagus, tetapi coba lihat link download di situs saya yang lebih bagus!" Spam Probabilitas: 99,77873%
  2. "Saya kenal beberapa orang yang dapat membelikan obat-obatan untuk Anda, cukup lihat file pr0file saya untuk mengetahui detailnya" Probabilitas Spam: 98,46955%
  3. "Lihat profil saya untuk mendownload video yang lebih keren lagi! http://example.com" Spam Probabilitas: 96,26383%

Oke, jadi hal ini sudah sesuai dengan yang diharapkan dengan nilai minimum 75% awal kami.Namun, mengingat pada langkah sebelumnya Anda telah mengubah SPAM_THRESHOLD menjadi di atas 98,5% yakin, artinya 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 valid dengan rating 98,46466%.

Dalam kasus ini, sebaiknya Anda menangkap semua komentar spam yang sebenarnya dan melatih ulang untuk menghadapi kegagalan di atas. Dengan menetapkan nilai minimum ke 96%, semua positif benar masih ditangkap dan Anda menghilangkan 2 positif palsu di atas. Tidak terlalu buruk untuk hanya mengubah satu angka.

Mari kita lanjutkan...

Komentar spam yang diizinkan untuk diposting (negatif palsu):

  1. "Lihat profil saya untuk mendownload video yang lebih keren lagi!" Spam Probabilitas: 7,54926%
  2. "Dapatkan diskon di kelas pelatihan gym kami, lihat pr0file!" Probabilitas Spam: 17.49849%
  3. "astaga, saham GOOG baru saja melesat! 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 batas spam dari 96% menjadi ~9% akan membuat komentar asli ditandai sebagai spam. Salah satunya memiliki rating 58% meskipun komentar tersebut sah. Satu-satunya cara untuk menangani komentar seperti ini adalah dengan melatih kembali model dengan kasus ekstrem yang disertakan dalam data pelatihan sehingga ia belajar menyesuaikan pandangannya terhadap dunia untuk mengetahui spam atau bukan.

Meskipun satu-satunya opsi yang tersisa saat ini adalah melatih ulang model, Anda juga melihat bagaimana Anda dapat menyaring batas ketika Anda memutuskan untuk memanggil sesuatu sebagai spam untuk meningkatkan performa. Sebagai manusia, 75% tampaknya cukup percaya diri, tetapi untuk model ini, Anda perlu meningkatkannya mendekati 81,5% agar lebih efektif dengan input contoh.

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

Mungkin ada beberapa situasi di mana positif palsu (atau negatif) dapat memiliki konsekuensi serius (misalnya dalam industri medis) sehingga Anda dapat menyesuaikan ambang batas menjadi sangat tinggi dan meminta lebih banyak peninjauan manual bagi mereka yang tidak memenuhi ambang batas. Ini adalah pilihan Anda sebagai developer dan memerlukan beberapa eksperimen.

4. Latih ulang model deteksi spam komentar

Di bagian sebelumnya, Anda telah mengidentifikasi sejumlah kasus ekstrem yang gagal untuk model, yang satu-satunya pilihannya adalah melatih ulang model untuk memperhitungkan situasi ini. Dalam sistem produksi, Anda dapat menemukan komentar ini dari waktu ke waktu saat orang menandai komentar sebagai spam secara manual, lalu setelah itu 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 dari kalimat baru ini jika memungkinkan), kami sekarang akan melanjutkan dengan menunjukkan cara melatih ulang model dengan mempertimbangkan kasus ekstrem tersebut.

Rekap model siap pakai

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

Karena model ini dibuat dengan Model Maker, Anda perlu beralih sebentar ke Python untuk melatih ulang model, lalu mengekspor model yang dibuat ke format TensorFlow.js sehingga Anda dapat menggunakannya di browser. Untungnya, Model Maker memudahkan penggunaan model mereka, jadi Anda cukup mudah untuk mengikutinya. Kami akan memandu Anda melalui prosesnya, jadi jangan khawatir jika Anda belum pernah menggunakan Python sebelumnya.

Kolaborasi

Karena Anda tidak terlalu berfokus pada codelab ini untuk menyiapkan server Linux dengan semua utilitas Python yang terinstal, Anda cukup mengeksekusi kode melalui browser web menggunakan "Colab Notebook". Notebook ini dapat terhubung ke "backend" - artinya server dengan beberapa fitur yang telah diinstal lebih dulu, yang kemudian dapat Anda gunakan untuk mengeksekusi kode arbitrer dalam browser web dan melihat hasilnya. Ini sangat berguna untuk pembuatan prototipe cepat atau untuk digunakan dalam tutorial seperti ini.

Cukup buka colab.research.google.com dan layar sambutan akan ditampilkan seperti berikut:

6b82258445885c50.pngS

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

2d52c8f7afa88564.pngS

Bagus! Langkah selanjutnya adalah menghubungkan colab frontend ke beberapa server backend sehingga Anda dapat mengeksekusi kode Python yang akan ditulis. Lakukan dengan mengklik Connect di kanan atas dan memilih Connect to host runtime.

fa5f578a1a3d352b.png

Setelah terhubung, Anda akan melihat ikon RAM dan {i>Disk <i}muncul di tempatnya, seperti ini:

541c9894fb39d4cb.pngS

Bagus! Sekarang Anda dapat memulai coding 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. Aplikasi 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, kode ditempelkan ke dalam sel, tetapi tidak akan menjalankannya. Selanjutnya, arahkan mouse ke sel abu-abu tempat Anda menempelkan kode di atas, dan ikon "mainkan" kecil akan muncul di sebelah kiri sel seperti yang disorot di bawah ini:

7ac5e3516bed6335.pngS Klik tombol putar untuk mengeksekusi kode yang baru saja diketik di sel.

Sekarang Anda akan melihat pembuat model sedang diinstal:

651f21b04fb648cc.pngS

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

Langkah 2

Selanjutnya, tambahkan sel kode baru seperti yang ditunjukkan sehingga Anda dapat menempelkan beberapa kode lagi setelah sel pertama dan menjalankannya secara terpisah:

869904a9d774c455.png

Sel berikutnya yang dieksekusi akan memiliki sejumlah impor yang perlu digunakan oleh kode di bagian {i>notebook<i} lainnya. Salin dan tempel teks di bawah ini ke 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-hal yang cukup standar, bahkan jika 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 yang merupakan persyaratan untuk menggunakan Model Maker.

Terakhir, seperti sebelumnya, jalankan sel dengan menekan tombol "play" ikon tersebut saat Anda mengarahkan kursor ke sel, lalu menambahkan sel kode baru untuk langkah berikutnya.

Langkah 3

Selanjutnya, Anda akan mendownload data dari server jarak jauh ke perangkat, dan menetapkan variabel training_data menjadi jalur file lokal hasil 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 yang menyimpan label. Anda akan melihat cara melakukannya di Langkah 5. Anda dapat langsung mendownload file CSV sendiri untuk melihat isinya.

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

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

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

Langkah 4

Saat menggunakan Model Maker, Anda tidak membuat model dari awal. Anda biasanya menggunakan model yang sudah ada yang kemudian akan Anda sesuaikan dengan kebutuhan Anda.

Model Maker menyediakan beberapa embedding model pra-pelajari yang dapat Anda gunakan, tetapi yang paling sederhana dan tercepat untuk memulai adalah average_word_vec yang Anda gunakan pada codelab sebelumnya untuk membangun situs. 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 Anda inginkan untuk digunakan model. Anda mungkin berpikir bahwa semakin banyak semakin baik, tetapi umumnya ada {i>sweet spot<i} yang bagus berdasarkan frekuensi setiap kata digunakan. Jika Anda menggunakan setiap kata di seluruh korpus, model dapat mencoba mempelajari dan menyeimbangkan bobot kata-kata yang hanya digunakan satu kali - hal ini tidak terlalu berguna. 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. Jadi, Anda dapat menyesuaikan model dengan jumlah kata yang diinginkan menggunakan parameter num_words. Angka yang lebih kecil di sini akan memiliki model yang lebih kecil dan lebih cepat, tetapi mungkin kurang akurat, karena mengenali lebih sedikit kata. Jumlah yang lebih besar di sini akan memiliki model yang lebih besar dan berpotensi lebih lambat. Menemukan titik yang tepat adalah kuncinya, dan sebagai engineer machine learning, Anda harus mencari tahu apa yang terbaik 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 karakteristik yang berbeda (dibuat oleh algoritma machine learning saat pelatihan) yang dapat diukur oleh kata tertentu yang akan digunakan program untuk mencoba mengaitkan kata-kata yang mirip dan bermakna serupa.

Misalnya, jika Anda memiliki dimensi terkait bagaimana "medis" kata adalah, kata seperti "pil" dapat memperoleh skor tinggi dalam dimensi ini, dan dikaitkan dengan kata dengan skor tertinggi lainnya seperti "xray", tetapi "kucing" akan memberikan skor rendah untuk dimensi ini. Mungkin ternyata "dimensi medis" berguna untuk menentukan spam bila digabungkan dengan dimensi lain yang mungkin signifikan dalam penerapannya.

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

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

Aturan praktis yang ditentukan dari penelitian adalah bahwa akar keempat dari jumlah kata berfungsi dengan baik untuk parameter ini. Jadi, jika saya menggunakan 2.000 kata, titik awal yang baik untuk ini adalah 7 dimensi. Jika Anda mengubah jumlah kata yang digunakan, Anda juga dapat mengubah ini.

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 tertentu yang statis. Hal tersebut ditentukan oleh parameter seq_len, yang merupakan singkatan dari '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, maka akan diberi padding - seperti di 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 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, dan Anda 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, bersama dengan karakter pembatas, yang dalam hal ini adalah koma karena file dipisahkan koma. Anda juga menetapkan parameter acak untuk mengatur ulang data pelatihan secara acak sehingga hal-hal yang mungkin serupa atau dikumpulkan bersama tersebar secara acak di seluruh set data.

Anda kemudian akan menggunakan data.split() untuk membagi data menjadi data pelatihan dan pengujian. .9 menunjukkan bahwa 90% dari {i>dataset<i} akan digunakan untuk pelatihan, 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 didefinisikan di langkah 4), spesifikasi model (yang juga 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-kata tersebut, dan mencoba mengelompokkannya dengan sebuah 'prediksi' satu grup yang ketika dikelompokkan menjadi spam, dan mana yang tidak. Pertama kali, kemungkinan mendekati 50:50, karena model baru memulai seperti yang ditunjukkan di bawah ini:

bbe4b896d8060bc4.png

Kemudian, metode ini akan mengukur hasilnya, dan mengubah bobot model untuk mengubah prediksinya, serta model akan mencoba lagi. Inilah yang disebut iterasi pelatihan. Jadi, dengan menentukan epochs=50, model akan melewati ‘loop’ tersebut 50 kali seperti yang ditunjukkan:

4ed286d114960ca.pngS

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

Langkah 7 - Ekspor Model

Setelah pelatihan selesai, Anda dapat mengekspor model. TensorFlow melatih model dalam formatnya sendiri, dan ini perlu dikonversi ke format TensorFlow.js untuk digunakan di halaman web. Cukup tempelkan kode berikut ke dalam 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 tujuan ekspor di atas (di direktori root - Anda mungkin perlu naik satu level) dan menemukan paket zip file yang diekspor yang terdapat 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. Sekarang Anda dapat kembali ke pembahasan JavaScript yang Anda ketahui dan sukai. Fiuh!

5. Menyajikan model machine learning baru

Anda sekarang hampir siap untuk memuat model. Sebelum dapat melakukannya, Anda harus mengupload file model baru yang didownload sebelumnya di codelab sehingga dihosting dan dapat digunakan dalam kode Anda.

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

3ace87c57b98cfbc.png

Apa yang ada 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 - File ini adalah file biner yang berisi banyak data yang disimpan untuk model TensorFlow.js yang diekspor dan perlu dihosting di suatu tempat di server Anda agar dapat didownload dalam direktori yang sama seperti model.json di atas.
  • vocab - File aneh tanpa ekstensi ini adalah file dari Model Maker yang menunjukkan cara mengenkode kata dalam kalimat sehingga model memahami cara menggunakannya. Anda akan membahasnya lebih lanjut di bagian berikutnya.
  • labels.txt - Ini hanya berisi nama class yang dihasilkan yang akan diprediksi model. Untuk model ini, yang akan ditampilkan adalah "false" jika Anda membuka file ini di editor teks. dan "true" tercantum yang menunjukkan "bukan spam" atau "spam" sebagai output prediksinya.

Menghosting file model TensorFlow.js

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

Menghapus file model yang ada

Saat 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 model.json dan group1-shard1of1.bin di panel file di sebelah kiri, 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 aset di panel sebelah kiri project Glitch, lalu hapus aset lama yang diupload jika aset tersebut memiliki nama yang sama.
  2. Klik upload an asset, lalu pilih group1-shard1of1.bin untuk diupload ke folder ini. Setelah diupload:

c6739dd30e6df977.png

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

b7858eb08bea9ac3.png

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

19999f6644f61153.pngS

  1. Sekarang, di kiri bawah layar, klik Tools > Terminal. Tunggu 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 dalam folder aset di Glitch (periksa folder aset untuk URL kustom setiap file).

Perhatikan spasi di antara kedua 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! Anda sekarang telah membuat salinan file yang diupload ke folder www.

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

6c417fdfc64762f1.pngS

  1. Menggunakan perintah mv untuk mengganti nama file. Ketik kode 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 sekarang seharusnya melihat model.json dan group1-shard1of1.bin di folder www antarmuka pengguna:

530bb651f4dbac64.pngS

Bagus! Langkah terakhir adalah mengupdate file dictionary.js.

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

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

64e5cf6f6e158d6c.gif

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

Mari kita coba beberapa variasi juga untuk melihat apakah hasil analisisnya dapat digeneralisasi dengan baik. Awalnya ada kalimat yang gagal, seperti:

"astaga, saham GOOG baru saja melesat! Dapatkan informasi sebelum terlambat!"

Tindakan ini kini diklasifikasikan dengan benar sebagai spam, tetapi apa yang terjadi jika Anda mengubahnya menjadi:

"Jadi saham XYZ baru saja naik nilainya! Beli segera sebelum terlambat!"

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

Tentu saja jika Anda benar-benar mencoba merusak model baru ini, Anda akan mampu melakukannya, dan ini akan bermuara pada pengumpulan lebih banyak data pelatihan agar memiliki peluang terbaik untuk menangkap variasi yang lebih unik untuk situasi umum yang mungkin Anda temui secara {i>online<i}. Pada codelab mendatang, kami akan menunjukkan cara meningkatkan kualitas model Anda dengan data langsung saat ditandai.

6. Selamat!

Selamat, Anda telah berhasil melatih ulang model machine learning yang ada untuk mengupdate dirinya sendiri agar berfungsi untuk kasus ekstrem yang Anda temukan dan men-deploy perubahan tersebut ke browser dengan TensorFlow.js untuk aplikasi di 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 mempertimbangkan kasus ekstrem yang Anda temukan
  3. Mengekspor model terlatih baru ke format TensorFlow.js
  4. Mengupdate aplikasi web untuk menggunakan file baru

Apa selanjutnya?

Jadi update ini berfungsi dengan baik, tetapi seperti halnya aplikasi web apa pun, perubahan akan terjadi seiring waktu. Akan jauh lebih baik jika aplikasi terus ditingkatkan kualitasnya dari waktu ke waktu daripada kita harus melakukannya secara manual setiap saat. Dapatkah Anda memikirkan cara mengotomatiskan langkah-langkah ini untuk melatih ulang model secara otomatis setelah Anda mendapatkan, misalnya, 100 komentar baru yang ditandai sebagai salah diklasifikasikan? Jadi, Anda akan bekerja biasa sebagai teknisi web dan mungkin bisa mencari tahu cara membuat pipeline untuk melakukannya secara otomatis. Jika tidak, jangan khawatir, nantikan codelab berikutnya dalam seri yang akan menunjukkan caranya.

Bagikan hal yang Anda buat dengan kami

Anda juga dapat dengan mudah memperluas apa yang Anda buat hari ini untuk kasus penggunaan kreatif lainnya dan kami mendorong Anda untuk berpikir kreatif dan terus meretas.

Jangan lupa untuk memberi tag pada kami di media sosial menggunakan hashtag #MadeWithTFJS agar project Anda berpeluang ditampilkan di blog TensorFlow atau bahkan acara mendatang. Kami ingin melihat apa yang Anda buat.

Codelab TensorFlow.js lainnya untuk mempelajari lebih dalam

Situs yang bisa dilihat