เพิ่มการจัดประเภทข้อความในอุปกรณ์ลงในแอปด้วย 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
  • เลือกโมเดลที่ติดตั้งใช้งานหลายรายการซึ่งจะโหลดผ่านการกำหนดค่าระยะไกล
  • ทดลองใช้โมเดลต่างๆ ผ่าน Firebase A/B Testing

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

  • Xcode 11 (ขึ้นไป)
  • CocoaPods 1.9.1 (หรือสูงกว่า)

คุณจะใช้บทแนะนำนี้อย่างไร

อ่านอย่างเดียว อ่านและทำแบบฝึกหัด

คุณจะให้คะแนนประสบการณ์ในการสร้างแอป Android เท่าใด

ผู้เริ่มต้น ระดับกลาง ผู้ชำนาญ

2. สร้างโปรเจ็กต์คอนโซล Firebase

เพิ่ม Firebase ลงในโปรเจ็กต์

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

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'

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

import FirebaseCore

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

FirebaseApp.configure()

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

4. ฝึกโมเดลการวิเคราะห์ความเห็น

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

ขั้นตอนนี้จะแสดงเป็น Notebook ของ Python ที่คุณเปิดได้ใน Google Colab

เปิดใน Colab

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

5. ทําให้โมเดลใช้งานได้ใน Firebase ML

การทําให้โมเดลใช้งานได้ใน Firebase ML มีประโยชน์ด้วยเหตุผลหลัก 2 ประการ ดังนี้

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

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

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

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

3c3c50e6ef12b3b.png

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

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

เพื่อความสะดวก เราจะนำโมเดลเริ่มต้นที่รวมไว้และดาวน์โหลดโมเดลจาก 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))
          }
  }
}

ใน ViewController.swift ของ viewDidLoad ให้แทนที่การเรียกใช้ 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 ช่วยให้คุณผสานรวมโมเดล TensorFlow Lite เข้ากับแอปได้โดยใช้โค้ดเพียงไม่กี่บรรทัด เราจะเริ่มต้นอินสแตนซ์ TFLNLClassifier โดยใช้โมเดล TensorFlow Lite ที่ดาวน์โหลดจาก Firebase จากนั้นเราจะใช้ข้อมูลดังกล่าวเพื่อจัดประเภทข้อความที่ผู้ใช้แอปป้อนและแสดงผลลัพธ์ใน UI

เพิ่มการอ้างอิง

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

pod 'TensorFlowLiteTaskText', '~> 0.2.0'

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

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

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

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

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

classification_result_screen.png

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

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

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

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

10. ยินดีด้วย

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

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

  • TensorFlow Lite
  • Firebase ML

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

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

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

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

รายงานปัญหา