เพิ่มการจัดประเภทข้อความบนอุปกรณ์ให้กับแอปของคุณด้วย TensorFlow Lite และ Firebase - iOS Codelab

1. ภาพรวม

การจำแนกประเภท_result_screen.png

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

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

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

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

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

  • ฝึกฝนโมเดลการวิเคราะห์ความรู้สึกของ TF Lite ด้วย TF Lite Model Maker
  • ปรับใช้โมเดล TF Lite กับ Firebase ML และเข้าถึงได้จากแอปของคุณ
  • ติดตามความคิดเห็นของผู้ใช้เพื่อวัดความแม่นยำของโมเดลด้วย Firebase Analytics
  • ประสิทธิภาพของโมเดลโปรไฟล์ผ่านการตรวจสอบประสิทธิภาพ Firebase
  • เลือกว่าโมเดลใดที่ปรับใช้หลายโมเดลจะถูกโหลดผ่าน Remote Config
  • ทดลองใช้โมเดลต่างๆ ผ่านการทดสอบ Firebase A/B

สิ่งที่คุณต้องการ

  • Xcode 11 (หรือสูงกว่า)
  • CocoaPods 1.9.1 (หรือสูงกว่า)

คุณจะใช้บทช่วยสอนนี้อย่างไร?

อ่านผ่านๆ เท่านั้น อ่านแล้วทำแบบฝึกหัดให้สมบูรณ์

คุณจะให้คะแนนประสบการณ์ของคุณในการสร้างแอป Android อย่างไร

สามเณร ระดับกลาง เชี่ยวชาญ

2. สร้างโครงการคอนโซล Firebase

เพิ่ม Firebase ให้กับโปรเจ็กต์

  1. ไปที่ คอนโซล Firebase
  2. เลือก สร้างโปรเจ็กต์ใหม่ แล้วตั้งชื่อโปรเจ็กต์ของคุณ "Firebase ML iOS Codelab"

3. รับโครงการตัวอย่าง

ดาวน์โหลดรหัส

เริ่มต้นด้วยการโคลนโปรเจ็กต์ตัวอย่างและรัน pod update ในไดเร็กทอรีโปรเจ็กต์:

git clone https://github.com/FirebaseExtended/codelab-textclassification-ios.git
cd codelab-textclassification-ios
pod install --repo-update

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

ตั้งค่า Firebase

ทำตาม เอกสารประกอบ เพื่อสร้างโปรเจ็กต์ Firebase ใหม่ เมื่อคุณมีโปรเจ็กต์แล้ว ให้ดาวน์โหลดไฟล์ GoogleService-Info.plist ของโปรเจ็กต์จาก คอนโซล Firebase แล้วลากไปที่รูทของโปรเจ็กต์ Xcode

9efb62a92f27e939.png

เพิ่ม Firebase ลงใน Podfile ของคุณและรันการติดตั้ง pod

pod 'FirebaseMLModelDownloader', '9.3.0-beta'

ในเมธอด didFinishLaunchingWithOptions ของ AppDelegate ให้นำเข้า Firebase ที่ด้านบนของไฟล์

import FirebaseCore

และเพิ่มการเรียกเพื่อกำหนดค่า Firebase

FirebaseApp.configure()

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

4. ฝึกอบรมแบบจำลองการวิเคราะห์ความรู้สึก

เราจะใช้ TensorFlow Lite Model Maker เพื่อฝึกโมเดลการจัดหมวดหมู่ข้อความเพื่อทำนายความรู้สึกของข้อความที่กำหนด

ขั้นตอนนี้จะแสดงเป็นสมุดบันทึก Python ที่คุณสามารถเปิดใน Google Colab ได้

เปิดใน Colab

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

5. ปรับใช้โมเดลกับ Firebase ML

การปรับใช้โมเดลกับ Firebase ML มีประโยชน์ด้วยเหตุผลสองประการ:

  1. เราสามารถทำให้ขนาดการติดตั้งแอปมีขนาดเล็ก และดาวน์โหลดโมเดลเฉพาะเมื่อจำเป็นเท่านั้น
  2. โมเดลสามารถอัปเดตได้เป็นประจำและมีรอบการเผยแพร่ที่แตกต่างจากทั้งแอป

โมเดลสามารถติดตั้งใช้งานได้ผ่านคอนโซลหรือโดยทางโปรแกรมโดยใช้ Firebase Admin SDK ในขั้นตอนนี้ เราจะปรับใช้ผ่านคอนโซล

ขั้นแรก เปิด คอนโซล Firebase แล้วคลิก Machine Learning ในแผงการนำทางด้านซ้าย คลิก 'เริ่มต้น' หากคุณเปิดเป็นครั้งแรก จากนั้นไปที่ "กำหนดเอง" และคลิกที่ปุ่ม "เพิ่มโมเดล"

เมื่อได้รับแจ้ง ให้ตั้งชื่อโมเดล sentiment_analysis และอัปโหลดไฟล์ที่คุณดาวน์โหลดจาก Colab ในขั้นตอนก่อนหน้า

3c3c50e6ef12b3b.png

6. ดาวน์โหลดโมเดลจาก Firebase ML

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

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

ที่ด้านบนของ ModelLoader.swift ให้นำเข้าโมดูล Firebase

import FirebaseCore
import FirebaseMLModelDownloader

จากนั้นจึงนำวิธีการต่อไปนี้ไปใช้

static func downloadModel(named name: String,
                          completion: @escaping (CustomModel?, DownloadError?) -> Void) {
  guard FirebaseApp.app() != nil else {
    completion(nil, .firebaseNotInitialized)
    return
  }
  guard success == nil && failure == nil else {
    completion(nil, .downloadInProgress)
    return
  }
  let conditions = ModelDownloadConditions(allowsCellularAccess: false)
  ModelDownloader.modelDownloader().getModel(name: name, downloadType: .localModelUpdateInBackground, conditions: conditions) { result in
          switch (result) {
          case .success(let customModel):
                  // Download complete.
                  // The CustomModel object contains the local path of the model file,
                  // which you can use to instantiate a TensorFlow Lite classifier.
                  return completion(customModel, nil)
          case .failure(let error):
              // Download was unsuccessful. Notify error message.
            completion(nil, .downloadFailed(underlyingError: error))
          }
  }
}

ใน viewDidLoad ของ ViewController.swift ให้แทนที่การเรียกไปที่ loadModel() ด้วยวิธีการดาวน์โหลดโมเดลใหม่ของเรา

// Download the model from Firebase
print("Fetching model...")
ModelLoader.downloadModel(named: "sentiment_analysis") { (customModel, error) in
  guard let customModel = customModel else {
    if let error = error {
      print(error)
    }
    return
  }

  print("Model download complete")

  // TODO: Initialize an NLClassifier from the downloaded model
}

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

7. ผสานรวมโมเดลในแอปของคุณ

ไลบรารีงาน Tensorflow Lite ช่วยให้คุณผสานรวมโมเดล TensorFlow Lite เข้ากับแอปของคุณด้วยโค้ดเพียงไม่กี่บรรทัด เราจะเริ่มต้นอินสแตนซ์ TFLNLClassifier โดยใช้โมเดล TensorFlow Lite ที่ดาวน์โหลดจาก Firebase จากนั้นเราจะใช้มันเพื่อจัดประเภทการป้อนข้อความจากผู้ใช้แอปและแสดงผลบน UI

เพิ่มการพึ่งพา

ไปที่ Podfile ของแอปและเพิ่ม TensorFlow Lite Task Library (ข้อความ) ในการขึ้นต่อกันของแอป ตรวจสอบให้แน่ใจว่าคุณเพิ่มการพึ่งพาภายใต้การประกาศ target 'TextClassification'

pod 'TensorFlowLiteTaskText', '~> 0.2.0'

เรียกใช้ pod install เพื่อติดตั้งการพึ่งพาใหม่

เริ่มต้นตัวแยกประเภทข้อความ

จากนั้นเราจะโหลดโมเดลการวิเคราะห์ความรู้สึกที่ดาวน์โหลดจาก Firebase โดยใช้ NLClassifier ของไลบรารีงาน

ViewController.swift

มาประกาศตัวแปรอินสแตนซ์ TFLNLClassifier กัน ที่ด้านบนของไฟล์ ให้นำเข้าการอ้างอิงใหม่:

import TensorFlowLiteTaskText

ค้นหาความคิดเห็นนี้เหนือวิธีที่เราแก้ไขในขั้นตอนสุดท้าย:

// TODO: Add a TFLNLClassifier property.

แทนที่ TODO ด้วยรหัสต่อไปนี้:

private var classifier: TFLNLClassifier?

เริ่มต้นตัวแปร textClassifier ด้วยโมเดลการวิเคราะห์ความรู้สึกที่ดาวน์โหลดจาก Firebase ค้นหาความคิดเห็นนี้ที่เราเพิ่มไว้ในขั้นตอนสุดท้าย:

// TODO: Initialize an NLClassifier from the downloaded model

แทนที่ TODO ด้วยรหัสต่อไปนี้:

let options = TFLNLClassifierOptions()
self.classifier = TFLNLClassifier.nlClassifier(modelPath: customModel.path, options: options)

จำแนกข้อความ

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

ViewController.swift

ในเมธอด classify(text:) ให้ค้นหาความคิดเห็น TODO:

// TODO: Run sentiment analysis on the input text

แทนที่ความคิดเห็นด้วยรหัสต่อไปนี้:

guard let classifier = self.classifier else { return }

// Classify the text
let classifierResults = classifier.classify(text: text)

// Append the results to the list of results
let result = ClassificationResult(text: text, results: classifierResults)
results.append(result)

8. เรียกใช้แอปสุดท้าย

คุณได้รวมแบบจำลองการวิเคราะห์ความคิดเห็นเข้ากับแอปแล้ว ดังนั้นมาทดสอบกันดีกว่า เชื่อมต่ออุปกรณ์ iOS ของคุณแล้วคลิก เรียกใช้ ( ดำเนินการ.png ) ในแถบเครื่องมือ Xcode

แอปควรจะสามารถคาดการณ์ความคิดเห็นของบทวิจารณ์ภาพยนตร์ที่คุณป้อนได้อย่างถูกต้อง

การจำแนกประเภท_result_screen.png

9. เพิ่มพลังให้กับแอปด้วยฟีเจอร์ Firebase ที่มากขึ้น

นอกจากการโฮสต์โมเดล TFLite แล้ว Firebase ยังมีฟีเจอร์อื่นๆ อีกหลายรายการเพื่อเพิ่มประสิทธิภาพกรณีการใช้งานแมชชีนเลิร์นนิงของคุณ:

  • การตรวจสอบประสิทธิภาพ Firebase เพื่อวัดความเร็วในการอนุมานโมเดลของคุณที่ทำงานบนอุปกรณ์ของผู้ใช้
  • Firebase Analytics เพื่อวัดว่าโมเดลของคุณทำงานได้ดีเพียงใดในการผลิตโดยการวัดปฏิกิริยาของผู้ใช้
  • การทดสอบ Firebase A/B เพื่อทดสอบโมเดลของคุณหลายเวอร์ชัน
  • คุณจำได้ไหมว่าเราฝึกโมเดล TFLite สองเวอร์ชันก่อนหน้านี้ การทดสอบ A/B เป็นวิธีที่ดีในการค้นหาว่าเวอร์ชันใดมีประสิทธิภาพดีกว่าในการใช้งานจริง!

หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับวิธีใช้ประโยชน์จากฟีเจอร์เหล่านี้ในแอปของคุณ โปรดดู Codelab ด้านล่าง:

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

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

สิ่งที่เราได้กล่าวถึง

  • TensorFlow Lite
  • Firebase ML

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

  • วัดความเร็วอนุมานโมเดลของคุณด้วยการตรวจสอบประสิทธิภาพ Firebase
  • ทำให้โมเดลจาก Colab ใช้งานได้โดยตรงกับ Firebase ผ่าน Firebase ML Model Management API
  • เพิ่มกลไกเพื่อให้ผู้ใช้สามารถแสดงความคิดเห็นเกี่ยวกับผลการคาดการณ์ และใช้ Firebase Analytics เพื่อติดตามความคิดเห็นของผู้ใช้
  • ทดสอบ A/B โมเดล Average Word Vector และโมเดล MobileBERT ด้วยการทดสอบ Firebase A/B

เรียนรู้เพิ่มเติม

มีคำถาม?

รายงานปัญหา