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

1. ภาพรวม

classification_result_screen.png

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

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

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

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

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

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

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

  • 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 install

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 มีประโยชน์หลักๆ 2 ประการ

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

คุณทำให้โมเดลใช้งานได้ผ่านคอนโซลหรือโดยอัตโนมัติโดยใช้ Firebase Admin SDK ในขั้นตอนนี้ เราจะทำให้ใช้งานได้ผ่านคอนโซล

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

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

3c3c50e6ef12b3b.png

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

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

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

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

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
}

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

7. ผสานรวมโมเดลในแอป

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

เพิ่มทรัพยากร Dependency

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

pod 'TensorFlowLiteTaskText', '~> 0.2.0'

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

เริ่มต้นตัวจัดประเภทข้อความ

จากนั้นเราจะโหลดโมเดลการวิเคราะห์ความเห็นที่ดาวน์โหลดจาก Firebase โดยใช้ NLClassifier ของ Task Library

ViewController.swift

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

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 แล้วคลิกเรียกใช้ ( execute.png) ในแถบเครื่องมือ Xcode

แอปควรคาดการณ์ความพึงพอใจของรีวิวภาพยนตร์ที่คุณป้อนได้อย่างถูกต้อง

classification_result_screen.png

9. เพิ่มประสิทธิภาพแอปด้วยฟีเจอร์ Firebase เพิ่มเติม

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

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

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

10. ยินดีด้วย

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

สิ่งที่เราได้พูดถึงไปแล้ว

  • TensorFlow Lite
  • Firebase ML

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

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

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

หากมีข้อสงสัย

รายงานปัญหา