สร้างโมเดลการจัดประเภทข้อความที่กำหนดเองด้วย TensorFlow Lite Model Maker

1. ก่อนเริ่มต้น

ใน Codelab นี้ คุณจะได้เรียนรู้วิธีอัปเดตโมเดลการแยกประเภทข้อความที่สร้างจากชุดข้อมูลความคิดเห็นสแปมในบล็อกต้นฉบับ แต่ได้รับการปรับปรุงด้วยความคิดเห็นของคุณเองเพื่อให้คุณมีโมเดลที่ทำงานกับข้อมูลของคุณได้

ข้อกำหนดเบื้องต้น

Codelab นี้เป็นส่วนหนึ่งของเส้นทางการเริ่มต้นใช้งานการแยกประเภทข้อความในแอป Flutter Codelab ในเส้นทางนี้จะเรียงตามลำดับ แอปและโมเดลที่คุณจะใช้ควรสร้างไว้ก่อนหน้านี้แล้วขณะที่คุณทำตาม Codelab หากยังไม่ได้ทำกิจกรรมก่อนหน้าให้เสร็จ โปรดหยุดและทำกิจกรรมให้เสร็จตอนนี้

สิ่งที่คุณจะได้เรียนรู้

สิ่งที่คุณต้องมี

  • แอป Flutter และโมเดลตัวกรองสแปมที่คุณสังเกตและสร้างขึ้นในกิจกรรมก่อนหน้า

2. ปรับปรุงการจัดประเภทข้อความ

  1. คุณรับรหัสสำหรับโค้ดนี้ได้โดยการโคลนที่เก็บนี้และโหลดแอปจากโฟลเดอร์ tfserving-flutter/codelab2/finished
  2. หลังจากเริ่มอิมเมจ Docker ของ TensorFlow Serving แล้ว ให้ป้อน buy my book to learn online trading ในแอปที่คุณสร้างขึ้น แล้วคลิก gRPC > จัดประเภท

8f1e1974522f274d.png

แอปสร้างคะแนนสแปมต่ำเนื่องจากไม่มีคำว่าการซื้อขายออนไลน์ในชุดข้อมูลเดิมมากนัก และโมเดลยังไม่ได้เรียนรู้ว่าคำดังกล่าวเป็นสแปม ในโค้ดแล็บนี้ คุณจะอัปเดตโมเดลด้วยข้อมูลใหม่เพื่อให้โมเดลระบุประโยคเดียวกันเป็นจดหมายขยะ

2bd68691a26aa3da.png

3. แก้ไขไฟล์ CSV

ในการฝึกโมเดลต้นฉบับ เราได้สร้างชุดข้อมูลเป็น CSV (lmblog_comments.csv) ซึ่งมีเกือบ 1, 000 ความคิดเห็นที่ติดป้ายกำกับว่าเป็นสแปมหรือไม่ใช่สแปม (เปิด CSV ในเครื่องมือแก้ไขข้อความใดก็ได้หากต้องการตรวจสอบ)

โครงสร้างของไฟล์ CSV คือให้แถวแรกอธิบายคอลัมน์ ซึ่งมีป้ายกำกับเป็น commenttext และ spam แถวต่อๆ ไปทั้งหมดจะเป็นไปตามรูปแบบนี้

62025273971c9a7f.png

ป้ายกำกับทางด้านขวามีกำหนดค่า 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)

เมื่อฝึก คุณควรเห็นว่าโมเดลยังคงฝึกจนมีความแม่นยำสูง

96a1547ddb6edf5b.png

บีบอัดโฟลเดอร์ทั้งหมดของ /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

  1. แตกไฟล์ 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
  1. เปิดไฟล์ lib/main.dart ด้วยตัวแก้ไขโค้ดที่คุณชื่นชอบ แล้วค้นหาส่วนที่กำหนดตัวแปร inputTensorName และ outTensorName
const inputTensorName = 'input_3';
const outputTensorName = 'dense_5';
  1. กำหนดตัวแปร inputTensorName ใหม่เป็นค่า "input_1'" และกำหนดตัวแปร outputTensorName ใหม่เป็นค่า 'dense_1' โดยทำดังนี้
const inputTensorName = 'input_1';
const outputTensorName = 'dense_1';
  1. คัดลอกvocab.txtไฟล์ที่ดาวน์โหลดไปยังโฟลเดอร์ lib/assets/ เพื่อแทนที่ไฟล์ที่มีอยู่
  2. นำแอป Flutter การแยกประเภทข้อความออกจากโปรแกรมจำลอง Android ด้วยตนเอง
  3. เรียกใช้คำสั่ง 'flutter run' ในเทอร์มินัลเพื่อเปิดแอป
  4. ในแอป ให้ป้อน buy my book to learn online trading แล้วคลิก gRPC > Classify

ตอนนี้โมเดลได้รับการปรับปรุงให้ตรวจพบซื้อหนังสือของฉันเพื่อการซื้อขายออนไลน์ว่าเป็นสแปม

6. ขอแสดงความยินดี

คุณฝึกโมเดลใหม่ด้วยข้อมูลใหม่ ผสานรวมกับแอป Flutter และอัปเดตฟังก์ชันการทำงานเพื่อตรวจหาประโยคสแปมใหม่

ดูข้อมูลเพิ่มเติม