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ề Android

1. Tổng quan

text-classification-result.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ột 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 của 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 Xử lý ngôn ngữ tự nhiên (NLP) với nhiều ứng dụng như phân tích tình cảm, gắn nhãn chủ đề, phát hiện thư rác và phát hiện ý định.

Phân tích tình cảm là quá trình 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 các kỹ thuật phân tích văn bản. Phân tích tình cảm giúp 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ụ trong các cuộc trò chuyện và ý kiến phản hồi trực tuyến.

Hướng dẫn này cho biết cách tạo một mô hình học máy để phân tích tình cả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 (hoặc phân loại hai lớp), một loại vấn đề quan trọng và có phạm vi áp dụng rộng rãi trong học máy.

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

  • Đào tạo mô hình phân tích tình cảm TF Lite bằng TF Lite Model Maker
  • Triển khai các mô hình TF Lite cho Firebase ML và truy cập vào các mô hình đó từ ứng dụng của bạn
  • Tích hợp các mô hình phân tích tình cảm TF Lite vào ứng dụng của bạn bằng cách sử dụng Thư viện tác vụ TF Lite

Bạn cần

  • Phiên bản Android Studio mới nhất.
  • Mã mẫu.
  • Một thiết bị kiểm thử chạy Android 5.0 trở lên và Dịch vụ Google Play phiên bản 9.8 trở lên, hoặc một Trình mô phỏng chạy Dịch vụ Google Play phiên bản 9.8 trở lên
  • Nếu sử dụng thiết bị, hãy dùng cáp kết nối.

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

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

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

Người mới bắt đầu Trung cấp Thành thạo

2. Nhận mã mẫu

Sao chép kho lưu trữ GitHub từ dòng lệnh.

$ git clone https://github.com/FirebaseExtended/codelab-textclassification-android.git

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 của dự án hoặc bằng cách nhấp vào đường liên kết này.

3. Nhập ứng dụng khởi đầu

Trong Android Studio, hãy chọn thư mục codelab-textclassification-android-master (android_studio_folder.png) trong tệp tải xuống mã mẫu (File (Tệp) > Open (Mở) > .../codelab-textclassification-android-master/start).

Giờ đây, bạn sẽ mở dự án bắt đầu trong Android Studio.

4. Chạy ứng dụng khởi đầu

Giờ đây, sau khi nhập dự án vào Android Studio, bạn đã sẵn sàng chạy ứng dụng lần đầu tiên. Kết nối thiết bị Android rồi nhấp vào Chạy ( execute.png) trong thanh công cụ của Android Studio.

Ứng dụng sẽ chạy trên thiết bị của bạn. Ứng dụng này chỉ chứa một giao diện người dùng đơn giản, giúp bạn dễ dàng tích hợp và kiểm thử các mô hình phân loại văn bản trong các bước tiếp theo. Tại thời điểm này, nếu bạn cố gắng dự đoán tình cảm, ứng dụng sẽ chỉ trả về một số kết quả giả.

2fb4e69fafb2e3ed.png

5. Tạo dự án trên bảng điều khiển của 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 Thêm dự án.
  3. Chọn hoặc nhập tên Dự án.
  4. Làm theo các bước thiết lập còn lại trong bảng điều khiển của Firebase, sau đó nhấp vào Tạo dự án (hoặc Thêm Firebase nếu bạn đang sử dụng một dự án hiện có trên Google).

6. Thêm Firebase vào ứng dụng

  1. Trên màn hình tổng quan của dự án mới, hãy nhấp vào biểu tượng Android để chạy quy trình thiết lập.
  2. Nhập tên gói của lớp học lập trình: org.tensorflow.lite.codelabs.textclassification

Thêm tệp google-services.json vào ứng dụng

Sau khi thêm tên gói và chọn Đăng ký**, hãy nhấp vào Tải google-services.json xuống** để lấy tệp cấu hình Firebase Android, sau đó sao chép tệp google-services.json vào thư mục *app* trong dự án của bạn.

Thêm trình bổ trợ google-services vào ứng dụng của bạn

Làm theo hướng dẫn trên Bảng điều khiển Firebase để cập nhật các tệp build.gradle.kts nhằm thêm Firebase vào ứng dụng của bạn.

Trình bổ trợ google-services sử dụng tệp google-services.json để định cấu hình ứng dụng của bạn sử dụng Firebase.

Đồng bộ hoá dự án với các tệp Gradle

Để đảm bảo rằng tất cả các phần phụ thuộc đều có sẵn cho ứng dụng của bạn, bạn nên đồng bộ hoá dự án với các tệp gradle tại thời điểm này. Chọn File > Sync Project with Gradle Files (Tệp > Đồng bộ hoá dự án với các tệp Gradle) trên thanh công cụ của Android Studio.

7. Chạy ứng dụng bằng Firebase

Giờ đây, khi đã định cấu hình trình bổ trợ google-services bằng tệp JSON, bạn đã sẵn sàng chạy ứng dụng bằng Firebase. Kết nối thiết bị Android rồi nhấp vào Chạy ( execute.png) trong thanh công cụ của Android Studio.

Ứng dụng sẽ chạy trên thiết bị của bạn. Tại thời điểm này, ứng dụng của bạn vẫn sẽ được tạo thành công.

8. Huấn luyện mô hình phân tích tình cảm

Chúng ta sẽ sử dụng TensorFlow Lite Model Maker để huấn luyện một mô hình phân loại văn bản nhằm dự đoán cảm xúc 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. Bạn có thể chọn Runtime > Run all (Thời gian chạy > Chạy tất cả) để thực thi tất cả sổ tay cùng một lúc.

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 một ứng dụng di động.

9. Triển khai một mô hình cho Firebase ML

Việc triển khai một mô hình cho Firebase ML mang lại lợi ích cho 2 lý do chính:

  1. Chúng ta có thể giảm kích thước cài đặt ứng dụng và chỉ tải mô hình xuống nếu cần
  2. Bạn có thể cập nhật mô hình thường xuyên và có 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 pháp lập trình bằng cách sử dụng Firebase Admin SDK. Trong bước này, chúng ta sẽ triển khai thông qua bảng điều khiển.

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

Khi được nhắc, hãy đặt tên cho mô hình 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

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

Việc chọn thời điểm tải mô hình từ xa xuống từ Firebase vào ứng dụng của bạn có thể khó khăn vì các mô hình TFLite có thể tăng kích thước 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 dùng cho một tính năng và người dùng không bao giờ dùng tính năng đó, thì chúng ta sẽ tải xuống một lượng dữ liệu đáng kể mà không có lý do. Chúng ta cũng có thể đặt các lựa chọn tải xuống, chẳng hạn như chỉ tìm nạp các mô hình khi có kết nối Wi-Fi. Nếu muốn đảm bảo rằng mô hình này vẫn có sẵn ngay cả khi không có kết nối mạng, bạn cũng cần phải gói mô hình này mà không có ứng dụng làm bản sao lưu.

Để đơn giản hoá, chúng ta 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 tính năng phân tích tình cảm, bạn có thể chắc chắn rằng quá trình suy luận đang chạy với mô hình do Firebase cung cấp.

Trong tệp app/build.gradle.kts, hãy thêm phần phụ thuộc Firebase Machine Learning.

app/build.gradle.kts

Tìm bình luận này:

// TODO 1: Add Firebase ML dependency

Sau đó, hãy thêm:

implementation(platform("com.google.firebase:firebase-bom:32.0.0"))
implementation("com.google.firebase:firebase-ml-modeldownloader:24.1.2")

Khi Android Studio yêu cầu bạn đồng bộ hoá dự án, hãy chọn Đồng bộ hoá ngay.

Sau đó, hãy thêm một số mã để tải mô hình xuống từ Firebase.

MainActivity.java

Tìm bình luận này:

// TODO 2: Implement a method to download TFLite model from Firebase

Sau đó, hãy thêm:

  /** Download model from Firebase ML. */
  private synchronized void downloadModel(String modelName) {
      CustomModelDownloadConditions conditions = new CustomModelDownloadConditions.Builder()
            .requireWifi()
            .build();
      FirebaseModelDownloader.getInstance()
              .getModel("sentiment_analysis", DownloadType.LOCAL_MODEL, conditions)
              .addOnSuccessListener(model -> {
                  try {
                      // TODO 6: Initialize a TextClassifier with the downloaded model

                      predictButton.setEnabled(true);
                  } catch (IOException e) {
                      Log.e(TAG, "Failed to initialize the model. ", e);
                      Toast.makeText(
                              MainActivity.this,
                              "Model initialization failed.",
                              Toast.LENGTH_LONG)
                              .show();
                      predictButton.setEnabled(false);
                  }
              })
              .addOnFailureListener(e -> {
                      Log.e(TAG, "Failed to download the model. ", e);
                      Toast.makeText(
                              MainActivity.this,
                              "Model download failed, please check your connection.",
                              Toast.LENGTH_LONG)
                              .show();

                      }
              );

}

Tiếp theo, hãy gọi phương thức downloadModel trong phương thức onCreate của hoạt động.

MainActivity.java

Tìm bình luận này:

// TODO 3: Call the method to download TFLite model

Sau đó, hãy thêm:

downloadModel("sentiment_analysis");

11. Tích hợp mô hình này vào ứ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 chỉ bằng một vài dòng mã. Chúng ta sẽ khởi tạo một thực thể NLClassifier bằng mô hình TensorFlow Lite được tải xuống từ Firebase. Sau đó, chúng ta sẽ dùng mô hình này để phân loại văn bản đầu vào của người dùng ứng dụng và cho thấy kết quả trên giao diện người dùng.

Thêm phần phụ thuộc

Chuyển đến tệp Gradle của ứng dụng rồi thêm Thư viện tác vụ TensorFlow Lite (Văn bản) vào các phần phụ thuộc của ứng dụng.

app/build.gradle

Tìm bình luận này:

// TODO 4: Add TFLite Task API (Text) dependency

Sau đó, hãy thêm:

implementation("org.tensorflow:tensorflow-lite-task-text:0.3.0")

Khi Android Studio yêu cầu bạn đồng bộ hoá dự án, hãy chọn Đồng bộ hoá ngay.

Khởi động một trình phân loại văn bản

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

MainActivity.java

Hãy khai báo một biến thực thể NLClassifier. Tìm bình luận này:

// TODO 5: Define a NLClassifier variable

Sau đó, hãy thêm:

private NLClassifier textClassifier;

Khởi động biến textClassifier bằng mô hình phân tích tình cảm được tải xuống từ Firebase. Tìm bình luận này:

// TODO 6: Initialize a TextClassifier with the downloaded model

Sau đó, hãy thêm:

textClassifier = NLClassifier.createFromFile(model.getFile());

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

Sau khi thiết lập phiên bản textClassifier, bạn có thể chạy tính năng phân tích tình cảm chỉ bằng một lệnh gọi phương thức.

MainActivity.java

Tìm bình luận này:

// TODO 7: Run sentiment analysis on the input text

Sau đó, hãy thêm:

List<Category> results = textClassifier.classify(text);

Triển khai quy trình hậu xử lý

Cuối cùng, chúng ta sẽ chuyển đổi đầu ra của mô hình thành một văn bản mô tả để hiển thị trên màn hình.

MainActivity.java

Tìm bình luận này:

// TODO 8: Convert the result to a human-readable text

Xoá mã tạo văn bản kết quả giả:

String textToShow = "Dummy classification result.\n";

Sau đó, hãy thêm:

String textToShow = "Input: " + text + "\nOutput:\n";
for (int i = 0; i < results.size(); i++) {
  Category result = results.get(i);
  textToShow += String.format("    %s: %s\n", result.getLabel(),
                              result.getScore());
}
textToShow += "---------\n";

12. Chạy ứng dụng cuối cùng

Bạn đã tích hợp mô hình phân tích tình cảm vào ứng dụng, vì vậy, hãy kiểm thử mô hình này. Kết nối thiết bị Android rồi nhấp vào Chạy ( execute.png) trong thanh công cụ của Android Studio.

Ứng dụng phải có khả năng dự đoán chính xác cảm xúc của bài đánh giá phim mà bạn nhập.

img/text-classification-result.png

13. Tăng cường sức mạnh cho ứng dụng bằng nhiều 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 học máy:

  • Firebase Performance Monitoring để đo lường tốc độ suy luận mô hình chạy trên thiết bị của người dùng.
  • Firebase Analytics để đo lường hiệu suất của mô hình trong thực tế bằng cách đo lường phản ứng của người dùng.
  • Thử nghiệm A/B trong Firebase để kiểm thử nhiều phiên bản của mô hình
  • Bạn có nhớ rằng trước đó chúng ta đã huấn luyện 2 phiên bản của mô hình TFLite không? Thử nghiệm A/B là một cách hay để tìm ra phiên bản hoạt động hiệu quả hơn trong quá trình 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 bên dưới:

14. 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 phân tích tình cảm TFLite và triển khai mô hình đó vào ứng dụng di động của mình 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 mô hình bằng tính năng Giám sát hiệu suất của Firebase.
  • Triển khai mô hình từ Colab trực tiếp đến Firebase thông qua Firebase ML Model Management API.
  • Thêm một 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 ý kiến phản hồi của người dùng.
  • Tiến hành thử nghiệm A/B cho mô hình Trung bình của vectơ từ và mô hình MobileBERT bằng 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 vấn đề