Thêm tính năng Phân loại văn bản trên thiết bị vào ứng dụng bằng TensorFlow Lite và Firebase – Lớp học lập trình về iOS

1. Tổng quan

phân loại_result_screen.png

Chào mừng bạn đến với lớp học lập trình Phân loại văn bản bằng TensorFlow Lite và Firebase. Trong lớp học lập trình này, bạn sẽ tìm hiểu cách sử dụng TensorFlow Lite và Firebase để huấn luyện và triển khai mô hình phân loại văn bản cho ứng dụng của mình. Lớp học lập trình này dựa trên ví dụ này về TensorFlow Lite.

Phân loại văn bản là quá trình gán thẻ hoặc danh mục cho văn bản theo nội dung của văn bản. Đây là một trong những nhiệm vụ cơ bản trong lĩnh vực Xử lý ngôn ngữ tự nhiên (NLP) với nhiều ứng dụng đa dạng như phân tích quan điểm, gắn nhãn chủ đề, phát hiện nội dung rác và phát hiện ý định.

Phân tích tình cảm là việc diễn giải và phân loại cảm xúc (tích cực, tiêu cực và trung lập) trong dữ liệu văn bản bằng cách sử dụng kỹ thuật phân tích văn bản. Phân tích tâm lý cho phép các doanh nghiệp xác định tình cảm của khách hàng đối với sản phẩm, thương hiệu hoặc dịch vụ thông qua các cuộc trò chuyện và phản hồi trực tuyến.

Phần hướng dẫn này trình bày cách xây dựng một mô hình học máy để phân tích quan điểm, cụ thể là phân loại văn bản là tích cực hay tiêu cực. Đây là một ví dụ về phân loại nhị phân (hai lớp), một loại bài toán học máy quan trọng và có thể áp dụng rộng rãi.

Kiến thức bạn sẽ học được

  • Đào tạo mô hình phân tích quan điểm TF Lite bằng Trình tạo mô hình TF Lite
  • Triển khai các mô hình TF Lite cho công nghệ học máy của Firebase và truy cập các mô hình đó từ ứng dụng của bạn
  • Theo dõi ý kiến phản hồi của người dùng để đo lường độ chính xác của mô hình bằng Firebase Analytics
  • Phân tích hiệu suất của mô hình thông qua tính năng Giám sát hiệu suất Firebase
  • Chọn một trong nhiều mô hình đã triển khai sẽ được tải thông qua Cấu hình từ xa
  • Thử nghiệm nhiều mô hình thông qua tính năng Thử nghiệm A/B trong Firebase

Bạn cần có

  • Xcode 11 (trở lên)
  • CocoaPods 1.9.1 (trở lên)

Bạn sẽ sử dụng hướng dẫn này như thế nào?

Chỉ có thể đọc Đọc và hoàn thành bài tập

Bạn đánh giá thế nào về trải nghiệm xây dựng ứng dụng Android?

Người mới tập Trung cấp Thành thạo

2. Tạo dự án trên bảng điều khiển Firebase

Thêm Firebase vào dự án

  1. Truy cập vào bảng điều khiển của Firebase.
  2. Chọn Tạo dự án mới rồi đặt tên cho dự án là "Lớp học lập trình iOS ML học máy Firebase".

3. Nhận dự án mẫu

Tải mã nguồn xuống

Bắt đầu bằng cách sao chép dự án mẫu và chạy pod update trong thư mục dự án:

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

Nếu chưa cài đặt git, bạn cũng có thể tải dự án mẫu xuống từ trang GitHub hoặc bằng cách nhấp vào đường liên kết này. Sau khi bạn đã tải dự án xuống, hãy chạy dự án trong Xcode và thử phân loại văn bản để cảm nhận cách hoạt động của dự án.

Thiết lập Firebase

Hãy làm theo tài liệu này để tạo một dự án Firebase mới. Sau khi bạn đã có dự án, hãy tải tệp GoogleService-Info.plist của dự án xuống từ bảng điều khiển của Firebase rồi kéo tệp đó vào thư mục gốc của dự án Xcode.

9efb62a92f27e939.pngS

Thêm Firebase vào Podfile và chạy pod install.

pod 'FirebaseMLModelDownloader', '9.3.0-beta'

Trong phương thức didFinishLaunchingWithOptions của AppDelegate, hãy nhập Firebase ở phần đầu tệp

import FirebaseCore

Và thêm một lệnh gọi để định cấu hình Firebase.

FirebaseApp.configure()

Chạy lại dự án để đảm bảo ứng dụng được định cấu hình chính xác và không gặp sự cố khi khởi chạy.

4. Huấn luyện mô hình phân tích quan điểm

Chúng tôi sẽ sử dụng Trình tạo mô hình TensorFlow Lite để huấn luyện một mô hình phân loại văn bản nhằm dự đoán ý kiến của một văn bản nhất định.

Bước này được trình bày dưới dạng một sổ tay Python mà bạn có thể mở trong Google Colab.

Mở trong Colab

Sau khi hoàn tất bước này, bạn sẽ có một mô hình phân tích cảm xúc TensorFlow Lite sẵn sàng triển khai cho ứng dụng di động.

5. Triển khai mô hình cho công nghệ học máy của Firebase

Việc triển khai mô hình cho công nghệ học máy của Firebase sẽ hữu ích vì 2 lý do chính:

  1. Chúng ta có thể duy trì kích thước cài đặt ứng dụng nhỏ và chỉ tải mô hình xuống khi cần
  2. Mô hình có thể được cập nhật thường xuyên và với chu kỳ phát hành khác với toàn bộ ứng dụng

Bạn có thể triển khai mô hình này thông qua bảng điều khiển hoặc theo phương thức lập trình bằng SDK dành cho quản trị viên của Firebase. Ở bước này, chúng ta sẽ triển khai qua bảng điều khiển.

Trước tiên, hãy mở Bảng điều khiển của Firebase rồi nhấp vào Học máy trong bảng điều hướng bên trái. Nhấp vào "Bắt đầu" nếu bạn mở lần đầu tiên. Sau đó, chuyển đến mục "Tuỳ chỉnh" và nhấp vào nút "Thêm mô hình" .

Khi được nhắc, hãy đặt tên cho mô hình là sentiment_analysis rồi tải tệp mà bạn đã tải xuống từ Colab ở bước trước lên.

3c3c50e6ef12b3b.png.

6. Tải mô hình xuống từ Firebase ML

Bạn có thể gặp khó khăn khi chọn thời điểm tải mô hình từ xa xuống từ Firebase vào ứng dụng của mình vì các mô hình TFLite có thể phát triển tương đối lớn. Tốt nhất là chúng ta nên tránh tải mô hình ngay khi ứng dụng khởi chạy, vì nếu mô hình của chúng ta chỉ được sử dụng cho một tính năng và người dùng không bao giờ sử dụng tính năng đó, thì chúng ta sẽ tải một lượng dữ liệu đáng kể xuống mà không có lý do. Chúng tôi cũng có thể thiết lập các tuỳ chọn tải xuống, chẳng hạn như chỉ tìm nạp mô hình khi kết nối với Wi-Fi. Nếu muốn đảm bảo rằng mô hình vẫn dùng được ngay cả khi không có kết nối mạng, thì bạn cũng phải gói mô hình đó mà không có ứng dụng làm dự phòng.

Để đơn giản, chúng tôi sẽ xoá mô hình đi kèm mặc định và luôn tải một mô hình xuống từ Firebase khi ứng dụng khởi động lần đầu tiên. Bằng cách này, khi chạy bản phân tích quan điểm, bạn có thể chắc chắn rằng dự đoán đang chạy bằng mô hình do Firebase cung cấp.

Ở đầu trang ModelLoader.swift, hãy nhập mô-đun Firebase.

import FirebaseCore
import FirebaseMLModelDownloader

Sau đó, hãy triển khai các phương thức sau.

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))
          }
  }
}

Trong viewDidLoad của ViewController.swift, hãy thay thế lệnh gọi đến loadModel() bằng phương thức tải mô hình mới xuống.

// 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
}

Chạy lại ứng dụng của bạn. Sau vài giây, bạn sẽ thấy nhật ký trong Xcode, cho biết mô hình từ xa đã được tải xuống thành công. Hãy thử nhập một số văn bản và xác nhận hành vi của ứng dụng không thay đổi.

7. Tích hợp mô hình trong ứng dụng của bạn

Thư viện tác vụ Tensorflow Lite giúp bạn tích hợp các mô hình TensorFlow Lite vào ứng dụng của mình chỉ bằng một vài dòng mã. Chúng ta sẽ khởi tạo một thực thể TFLNLClassifier bằng cách sử dụng mô hình TensorFlow Lite được tải xuống từ Firebase. Sau đó, chúng ta sẽ sử dụng dữ liệu này để phân loại văn bản mà người dùng nhập vào và hiện kết quả trên giao diện người dùng.

Thêm phần phụ thuộc

Chuyển đến Podfile của ứng dụng rồi thêm Thư viện tác vụ (Văn bản) TensorFlow Lite vào các phần phụ thuộc của ứng dụng. Hãy nhớ thêm phần phụ thuộc trong phần khai báo target 'TextClassification'.

pod 'TensorFlowLiteTaskText', '~> 0.2.0'

Chạy pod install để cài đặt phần phụ thuộc mới.

Khởi chạy thuật toán phân loại văn bản

Sau đó, chúng ta sẽ tải mô hình phân tích ý kiến mà hệ thống đã tải xuống từ Firebase bằng cách sử dụng NLClassifier của Thư viện tác vụ.

ViewController.swift

Hãy khai báo một biến thực thể TFLNLClassifier. Ở đầu tệp, hãy nhập phần phụ thuộc mới:

import TensorFlowLiteTaskText

Tìm nhận xét này phía trên phương pháp chúng ta đã sửa đổi ở bước cuối cùng:

// TODO: Add a TFLNLClassifier property.

Thay thế TODO bằng mã sau:

private var classifier: TFLNLClassifier?

Khởi động biến textClassifier bằng mô hình phân tích ý kiến đã tải xuống từ Firebase. Tìm nhận xét này mà chúng tôi đã thêm ở bước cuối cùng:

// TODO: Initialize an NLClassifier from the downloaded model

Thay thế TODO bằng mã sau:

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

Phân loại văn bản

Sau khi thiết lập thực thể classifier, bạn có thể chạy phân tích quan điểm bằng một lệnh gọi phương thức duy nhất.

ViewController.swift

Trong phương thức classify(text:), hãy tìm nhận xét TODO:

// TODO: Run sentiment analysis on the input text

Thay thế nhận xét bằng đoạn mã sau:

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. Chạy ứng dụng hoàn thiện

Bạn đã tích hợp mô hình phân tích quan điểm vào ứng dụng, vì vậy hãy thử nghiệm mô hình đó. Kết nối thiết bị iOS của bạn rồi nhấp vào Run (Chạy) (thực thi.png) trên thanh công cụ Xcode.

Ứng dụng phải có thể dự đoán chính xác ý kiến của bài đánh giá về phim mà bạn nhập.

phân loại_result_screen.png

9. Tăng sức mạnh cho ứng dụng bằng các tính năng khác của Firebase

Ngoài việc lưu trữ các mô hình TFLite, Firebase còn cung cấp một số tính năng khác để hỗ trợ các trường hợp sử dụng của công nghệ học máy:

  • Giám sát hiệu suất Firebase để đo lường tốc độ suy luận của mô hình chạy trên thiết bị.
  • Firebase Analytics để đo lường hiệu suất của mô hình trong phiên bản chính thức bằng cách đo lường phản ứng của người dùng.
  • Thử nghiệm A/B trong Firebase để thử nghiệm nhiều phiên bản của mô hình
  • Bạn có nhớ lúc trước chúng ta đã huấn luyện hai phiên bản mô hình TFLite không? Thử nghiệm A/B là một cách hiệu quả để tìm ra phiên bản nào hoạt động hiệu quả hơn khi phát hành công khai!

Để tìm hiểu thêm về cách tận dụng các tính năng này trong ứng dụng của bạn, hãy xem các lớp học lập trình dưới đây:

10. Xin chúc mừng!

Trong lớp học lập trình này, bạn đã tìm hiểu cách huấn luyện một mô hình TFLite phân tích quan điểm và triển khai mô hình đó cho ứng dụng di động bằng Firebase. Để tìm hiểu thêm về TFLite và Firebase, hãy xem các mẫu TFLite khác và hướng dẫn bắt đầu sử dụng Firebase.

Nội dung đã đề cập

  • TensorFlow Lite
  • Firebase ML

Các bước tiếp theo

  • Đo lường tốc độ suy luận của mô hình bằng tính năng Giám sát hiệu suất Firebase.
  • Triển khai trực tiếp mô hình từ Colab với Firebase thông qua API Quản lý mô hình học máy của Firebase.
  • Thêm cơ chế cho phép người dùng phản hồi về kết quả dự đoán và sử dụng Firebase Analytics để theo dõi phản hồi của người dùng.
  • Tiến hành thử nghiệm A/B cho mô hình Vectơ từ trung bình và mô hình MobileBERT thông qua tính năng thử nghiệm A/B trong Firebase.

Tìm hiểu thêm

Bạn có câu hỏi?

Báo cáo sự cố