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

1. ภาพรวม

classification_result_screen.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 install

pod 'FirebaseMLModelDownloader', '9.3.0-beta'

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

import FirebaseCore

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

FirebaseApp.configure()

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

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

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

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

ที่ด้านบนของ 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. ผสานรวมโมเดลในแอป

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

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

ไปที่ Podfile ของแอปและเพิ่ม TensorFlow Lite Task Library (Text) ในทรัพยากร Dependency ของแอป ตรวจสอบว่าคุณได้เพิ่มข้อกำหนดไว้ในประกาศ 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

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

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 กับรูปแบบค่าเฉลี่ยของ Word Vector และโมเดล MobileBERT ด้วย Firebase A/B Testing

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

หากมีคำถาม

รายงานปัญหา