1. ก่อนเริ่มต้น
ใน Codelab นี้ คุณจะได้เรียนรู้วิธีอัปเดตโมเดลการแยกประเภทข้อความที่สร้างจากชุดข้อมูลความคิดเห็นสแปมในบล็อกต้นฉบับ แต่ได้รับการปรับปรุงด้วยความคิดเห็นของคุณเองเพื่อให้คุณมีโมเดลที่ทำงานกับข้อมูลของคุณได้
ข้อกำหนดเบื้องต้น
Codelab นี้เป็นส่วนหนึ่งของเส้นทางการเริ่มต้นใช้งานการแยกประเภทข้อความในแอป Flutter Codelab ในเส้นทางนี้จะเรียงตามลำดับ แอปและโมเดลที่คุณจะใช้ควรสร้างไว้ก่อนหน้านี้แล้วขณะที่คุณทำตาม Codelab หากยังไม่ได้ทำกิจกรรมก่อนหน้าให้เสร็จ โปรดหยุดและทำกิจกรรมให้เสร็จตอนนี้
- ฝึกโมเดลตรวจจับสแปมความคิดเห็นด้วย Codelab ของ TensorFlow Lite Model Maker
- Codelab สร้างแอป Flutter เพื่อตรวจหาสแปมความคิดเห็น
สิ่งที่คุณจะได้เรียนรู้
- วิธีอัปเดตรูปแบบการจัดประเภทข้อความที่คุณสร้างใน Codelab การฝึกรูปแบบการตรวจหาความคิดเห็นที่เป็นสแปมด้วย TensorFlow Lite Model Maker
- วิธีปรับแต่งโมเดลเพื่อบล็อกสแปมที่พบมากที่สุดในแอป
สิ่งที่คุณต้องมี
- แอป Flutter และโมเดลตัวกรองสแปมที่คุณสังเกตและสร้างขึ้นในกิจกรรมก่อนหน้า
2. ปรับปรุงการจัดประเภทข้อความ
- คุณรับรหัสสำหรับโค้ดนี้ได้โดยการโคลนที่เก็บนี้และโหลดแอปจากโฟลเดอร์
tfserving-flutter/codelab2/finished
- หลังจากเริ่มอิมเมจ Docker ของ TensorFlow Serving แล้ว ให้ป้อน
buy my book to learn online trading
ในแอปที่คุณสร้างขึ้น แล้วคลิก gRPC > จัดประเภท
แอปสร้างคะแนนสแปมต่ำเนื่องจากไม่มีคำว่าการซื้อขายออนไลน์ในชุดข้อมูลเดิมมากนัก และโมเดลยังไม่ได้เรียนรู้ว่าคำดังกล่าวเป็นสแปม ในโค้ดแล็บนี้ คุณจะอัปเดตโมเดลด้วยข้อมูลใหม่เพื่อให้โมเดลระบุประโยคเดียวกันเป็นจดหมายขยะ
3. แก้ไขไฟล์ CSV
ในการฝึกโมเดลต้นฉบับ เราได้สร้างชุดข้อมูลเป็น CSV (lmblog_comments.csv
) ซึ่งมีเกือบ 1, 000 ความคิดเห็นที่ติดป้ายกำกับว่าเป็นสแปมหรือไม่ใช่สแปม (เปิด CSV ในเครื่องมือแก้ไขข้อความใดก็ได้หากต้องการตรวจสอบ)
โครงสร้างของไฟล์ CSV คือให้แถวแรกอธิบายคอลัมน์ ซึ่งมีป้ายกำกับเป็น commenttext
และ spam
แถวต่อๆ ไปทั้งหมดจะเป็นไปตามรูปแบบนี้
ป้ายกำกับทางด้านขวามีกำหนดค่า true
สำหรับจดหมายขยะและค่า false
สำหรับไม่ใช่จดหมายขยะ เช่น บรรทัดที่ 3 ถือเป็นสแปม
หากมีผู้ส่งข้อความเกี่ยวกับการซื้อขายออนไลน์ไปยังเว็บไซต์ของคุณเป็นจำนวนมาก คุณสามารถเพิ่มตัวอย่างความคิดเห็นที่เป็นสแปมที่ด้านล่างของเว็บไซต์ เช่น
online trading can be highly highly effective,true online trading can be highly effective,true online trading now,true online trading here,true online trading for the win,true
- บันทึกไฟล์โดยใช้ชื่อใหม่ เช่น
lmblog_comments.csv
เพื่อให้คุณใช้ไฟล์นี้ฝึกโมเดลใหม่ได้
สำหรับส่วนที่เหลือของโค้ดแล็บนี้ คุณจะใช้ตัวอย่างที่ให้ไว้ ซึ่งแก้ไขและโฮสต์ใน Cloud Storage พร้อมข้อมูลอัปเดตการซื้อขายออนไลน์ หากต้องการใช้ชุดข้อมูลของคุณเอง คุณสามารถเปลี่ยน URL ในโค้ดได้
4. ฝึกโมเดลอีกครั้งด้วยข้อมูลใหม่
หากต้องการฝึกโมเดลอีกครั้ง คุณเพียงแค่ใช้โค้ดจาก (SpamCommentsModelMaker.ipynb
) ซ้ำ แต่ชี้ไปที่ชุดข้อมูล CSV ใหม่ซึ่งเรียกว่า lmblog_comments_extras.csv
หากต้องการสมุดบันทึกฉบับเต็มพร้อมเนื้อหาที่อัปเดตแล้ว คุณจะดูได้ที่ SpamCommentsUpdateModelMaker.ipynb.
หากมีสิทธิ์เข้าถึง Colaboratory คุณจะเปิดใช้ได้โดยตรง หรือรับโค้ดจากที่เก็บ แล้วเรียกใช้ในสภาพแวดล้อม Notebook ที่คุณเลือก
โค้ดที่อัปเดตแล้วจะมีลักษณะดังข้อมูลโค้ดนี้
training_data = tf.keras.utils.get_file(fname='comments-spam-extras.csv',
origin='https://storage.googleapis.com/laurencemoroney-blog.appspot.com/
lmblog_comments_extras.csv',
extract=False)
เมื่อฝึก คุณควรเห็นว่าโมเดลยังคงฝึกจนมีความแม่นยำสูง
บีบอัดโฟลเดอร์ทั้งหมดของ /mm_update_spam_savedmodel
และดาวน์โหลดไฟล์ mm_update_spam_savedmodel.zip
ที่สร้างขึ้น
# Rename the SavedModel subfolder to a version number
!mv /mm_update_spam_savedmodel/saved_model /mm_update_spam_savedmodel/123
!zip -r mm_update_spam_savedmodel.zip /mm_update_spam_savedmodel/
5. เริ่ม Docker และอัปเดตแอป Flutter
- แตกไฟล์
mm_update_spam_savedmodel.zip
ที่ดาวน์โหลดลงในโฟลเดอร์ จากนั้นหยุดอินสแตนซ์คอนเทนเนอร์ Docker จากโค้ดแล็บก่อนหน้า แล้วเริ่มอีกครั้ง แต่แทนที่ตัวยึดตำแหน่งPATH/TO/UPDATE/SAVEDMODEL
ด้วยเส้นทางแบบสัมบูรณ์ของโฟลเดอร์ที่โฮสต์ไฟล์ที่ดาวน์โหลด
docker run -it --rm -p 8500:8500 -p 8501:8501 -v "PATH/TO/UPDATE/SAVEDMODEL:/models/spam-detection" -e MODEL_NAME=spam-detection tensorflow/serving
- เปิดไฟล์
lib/main.dart
ด้วยตัวแก้ไขโค้ดที่คุณชื่นชอบ แล้วค้นหาส่วนที่กำหนดตัวแปรinputTensorName
และoutTensorName
const inputTensorName = 'input_3';
const outputTensorName = 'dense_5';
- กำหนดตัวแปร
inputTensorName
ใหม่เป็นค่า "input_1'
" และกำหนดตัวแปรoutputTensorName
ใหม่เป็นค่า'dense_1'
โดยทำดังนี้
const inputTensorName = 'input_1';
const outputTensorName = 'dense_1';
- คัดลอก
vocab.txt
ไฟล์ที่ดาวน์โหลดไปยังโฟลเดอร์lib/assets/
เพื่อแทนที่ไฟล์ที่มีอยู่ - นำแอป Flutter การแยกประเภทข้อความออกจากโปรแกรมจำลอง Android ด้วยตนเอง
- เรียกใช้คำสั่ง
'flutter run'
ในเทอร์มินัลเพื่อเปิดแอป - ในแอป ให้ป้อน
buy my book to learn online trading
แล้วคลิก gRPC > Classify
ตอนนี้โมเดลได้รับการปรับปรุงให้ตรวจพบซื้อหนังสือของฉันเพื่อการซื้อขายออนไลน์ว่าเป็นสแปม
6. ขอแสดงความยินดี
คุณฝึกโมเดลใหม่ด้วยข้อมูลใหม่ ผสานรวมกับแอป Flutter และอัปเดตฟังก์ชันการทำงานเพื่อตรวจหาประโยคสแปมใหม่