สร้างโมเดลการจัดประเภทข้อความแบบกำหนดเองและอัปเดตแอปโดยใช้โมเดลดังกล่าว

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

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

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

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

  • สร้างแอปที่มีสไตล์การรับส่งข้อความพื้นฐาน
  • สร้างโมเดลแมชชีนเลิร์นนิงสำหรับสแปมในความคิดเห็น
  • อัปเดตแอปเพื่อใช้โมเดลแมชชีนเลิร์นนิงสำหรับการกรองสแปม

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

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

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

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

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

คุณดูโค้ดสำหรับฟีเจอร์นี้ได้โดยการโคลนที่เก็บ นี้และโหลดแอปจาก TextClassificationStep2 คุณดูได้ในเส้นทาง TextClassificationOnMobile->Android

คุณยังสามารถดูโค้ดที่เสร็จสมบูรณ์ได้ที่ TextClassificationStep3

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

f111e21903d6fd1f.png

การสะกดคำผิดเช่นนี้เป็นวิธีที่พบได้ทั่วไปในการหลีกเลี่ยงตัวกรองจดหมายขยะ แม้ว่าข้อความจะไม่มีพิษมีภัย แต่ผู้ส่งสแปมมักจะเพิ่มลิงก์ในรหัสผู้ใช้ (แทนที่จะเพิ่มในข้อความเอง ซึ่งการมีลิงก์อาจทําให้ตัวกรองทํางาน)

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

c96613a0a4d1fef0.png

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

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

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

แถวต่อๆ ไปทั้งหมดจะเป็นไปตามรูปแบบนี้

64c0128548e1d082.png

ป้ายกำกับทางด้านขวาเป็นจริงสำหรับจดหมายขยะ และเป็นเท็จสำหรับอีเมลที่ไม่ใช่จดหมายขยะ ในกรณีนี้ บรรทัดที่ 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) แล้วคุณจะใช้ไฟล์นี้เพื่อฝึกโมเดลใหม่ได้

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

4. ฝึกโมเดลอีกครั้งด้วยข้อมูลใหม่

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

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

โค้ดที่อัปเดตแล้วมีดังนี้

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)

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

8886033d1f8161c.png

เรียกดู Notebook เพื่อดาวน์โหลดไฟล์โมเดล vocab และป้ายกำกับ ในขั้นตอนถัดไป คุณจะผสานรวมใน Android

5. อัปเดตแอป Android

  1. เปิดแอปใน Android Studio และตรวจสอบว่าได้เลือก Android ที่ด้านบนของโปรเจ็กต์ Explorer แล้ว
  2. ค้นหาไฟล์ assets ที่มีป้ายกำกับ โมเดล และคำศัพท์จากไฟล์โมเดลเวอร์ชันเก่า

91116524e9016ed4.png

  1. คลิกขวาที่โฟลเดอร์เนื้อหา
  2. ในเมนู ให้เลือกตัวเลือกเพื่อเปิดโฟลเดอร์ด้วยโปรแกรมจัดการไฟล์ของระบบปฏิบัติการ (แสดงใน Finder บน Mac ดังที่แสดง โดยจะเป็นแสดงใน Explorer ใน Windows และเปิดใน Files หรือคล้ายกันใน Linux)

25f63f9629657e85.png

  1. การดำเนินการนี้จะเปิดไดเรกทอรีที่มีโมเดล คำศัพท์ และป้ายกำกับในเครื่องมือจัดการไฟล์ของระบบปฏิบัติการ คัดลอกใหม่ที่คุณสร้างไว้ในขั้นตอนก่อนหน้าทับไฟล์เหล่านี้

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

โค้ดเวอร์ชันที่เสร็จสมบูรณ์จะอยู่ในที่เก็บเป็น TextClassificationStep3

6. อัปเดตแอป iOS

คุณดูโค้ดสำหรับฟีเจอร์นี้ได้โดยการโคลนที่เก็บ นี้และโหลดแอปจาก TextClassificationStep2 คุณดูได้ในเส้นทาง TextClassificationOnMobile->Android

คุณยังสามารถดูโค้ดที่เสร็จสมบูรณ์ได้ที่ TextClassificationStep3

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

553b845565b5b822.png

การอัปเดตแอปเพื่อใช้โมเดลใหม่นั้นทำได้ง่ายมาก วิธีที่ง่ายที่สุดคือไปที่ File Explorer แล้วดาวน์โหลด model.tflite, vocab และ labels.txt เวอร์ชันใหม่ จากนั้นคัดลอกไปยังไดเรกทอรีโปรเจ็กต์

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

9031ec260b1857a3.png

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

เท่านี้ก็เรียบร้อย การฝึกโมเดลอีกครั้งด้วยข้อมูลใหม่และเพิ่มลงในแอป Android และ iOS ช่วยให้คุณอัปเดตฟังก์ชันการทำงานของแอปได้โดยไม่ต้องเขียนโค้ดใหม่

ขั้นตอนถัดไป

โมเดลนี้เป็นเพียงโมเดลทดลองที่ได้รับการฝึกโดยใช้ข้อมูลเพียง 1, 000 รายการ

ขณะสำรวจการประมวลผลภาษาธรรมชาติ คุณอาจต้องการทำงานกับชุดข้อมูลขนาดใหญ่ขึ้น นอกจากนี้ คุณยังตั้งค่าไปป์ไลน์การฝึกอย่างต่อเนื่องได้ด้วย เพื่อให้เมื่อมีข้อมูลใหม่เข้ามาและได้รับการแจ้งว่าเป็นการสแปม ระบบจะฝึกโมเดลใหม่ในแบ็กเอนด์โดยอัตโนมัติ จากนั้นจึงจะนําโมเดลนั้นไปใช้งานโดยใช้โฮสติ้งโมเดลของ Firebase

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

ซึ่งมีตัวเลือกมากมาย และเราจะมาดูตัวเลือกเหล่านี้ใน Codelab ในอนาคตของหลักสูตรนี้