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

1. ภาพรวม

การจำแนกประเภท_ผลลัพธ์_หน้าจอ.png

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

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

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

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

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

  • ฝึกโมเดลการวิเคราะห์ความเห็นของ TF Lite ด้วยโมเดลโมเดล TF Lite
  • ทำให้โมเดล TF Lite ใช้งานได้ใน Firebase ML และเข้าถึงได้จากแอปของคุณ
  • ติดตามความคิดเห็นของผู้ใช้เพื่อวัดความแม่นยำของโมเดลด้วย Firebase Analytics
  • ประสิทธิภาพของโมเดลโปรไฟล์ผ่านการตรวจสอบประสิทธิภาพของ Firebase
  • เลือกโมเดลที่ทำให้ใช้งานได้แล้วซึ่งโหลดผ่านการกำหนดค่าระยะไกล
  • ทดลองใช้รูปแบบต่างๆ ผ่าน 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 'FirebaseMLModelDownloader', '9.3.0-beta'

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

import FirebaseCore

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

FirebaseApp.configure()

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

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

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

ขั้นตอนนี้แสดงเป็นสมุดบันทึก 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))
          }
  }
}

ใน 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. ผสานรวมโมเดลในแอปของคุณ

Task Library ของ Tensorflow Lite ช่วยให้คุณผสานรวมโมเดล 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 ของไลบรารีงาน

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

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

การจำแนกประเภท_ผลลัพธ์_หน้าจอ.png

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

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

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

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

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

รายงานปัญหา