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

1. ข้อควรทราบก่อนที่จะเริ่มต้น

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

สิ่งที่ต้องมีก่อน

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

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

สิ่งที่ต้องมี

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

2. เพิ่มประสิทธิภาพการจัดประเภทข้อความ

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

8f1e1974522f274d.png

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

ไฟล์ 2bd68691a26aa3da.png

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

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

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

62025273971c9a7f.png

ป้ายกํากับทางด้านขวาจะกําหนดค่า true ให้กับจดหมายขยะ และค่า false สําหรับจดหมายขยะ ตัวอย่างเช่น บรรทัดที่สามถือเป็นสแปม

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

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 เพื่อให้คุณใช้ในการฝึกโมเดลใหม่ได้

สําหรับ Codelab นี้ทั้งหมด คุณสามารถใช้ตัวอย่างที่ให้ไว้ แก้ไข และโฮสต์บน Cloud Storage ที่มีการอัปเดตการซื้อขายออนไลน์ หากต้องการใช้ชุดข้อมูลของคุณเอง คุณสามารถเปลี่ยน URL ในโค้ดได้

4. ฝึกโมเดลใหม่ด้วยข้อมูลใหม่

หากต้องการฝึกโมเดลใหม่ คุณก็เพียงแค่นําโค้ดจาก (SpamCommentsModelMaker.ipynb) มาใช้ซ้ํา แต่ชี้ที่ชุดข้อมูล CSV ใหม่ซึ่งเรียกว่า lmblog_comments_extras.csv หากคุณต้องการสมุดบันทึกฉบับเต็มที่มีเนื้อหาที่อัปเดตแล้ว คุณจะดูได้ใน SpamCommentsUpdateModelMaker.ipynb.

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

โค้ดที่อัปเดตมีลักษณะเหมือนข้อมูลโค้ดนี้

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 และอัปเดตแอป Flwer

  1. แตกไฟล์ mm_update_spam_savedmodel.zip ที่ดาวน์โหลดลงในโฟลเดอร์ จากนั้นหยุดอินสแตนซ์คอนเทนเนอร์ของ Docker จาก Codelab ก่อนหน้า แล้วเริ่มอีกครั้ง แต่แทนที่ตัวยึดตําแหน่ง 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. นําแอปการจัดประเภทข้อความด้วยตนเองออกจากโปรแกรมจําลอง Android
  3. เรียกใช้คําสั่ง 'flutter run' ในเทอร์มินัลเพื่อเปิดแอป
  4. ป้อน buy my book to learn online trading แล้วคลิก gRPC > Classify ในแอป

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

6. ยินดีด้วย

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

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