Hướng dẫn phân loại văn bản cho iOS

Nhiệm vụ của Trình phân loại văn bản cho phép bạn phân loại văn bản thành một nhóm danh mục xác định, chẳng hạn như cảm xúc tích cực hoặc tiêu cực. Các danh mục được xác định dựa trên mô hình mà bạn sử dụng và cách mô hình đó được huấn luyện. Những hướng dẫn này chỉ cho bạn cách sử dụng Trình phân loại văn bản trong các ứng dụng iOS. Mã mẫu được mô tả trong các hướng dẫn này hiện có trên GitHub.

Bạn có thể xem cách hoạt động của công việc này bằng cách xem Bản minh hoạ web này. Để biết thêm thông tin về các tính năng, mô hình và lựa chọn cấu hình của nhiệm vụ này, hãy xem phần Tổng quan.

Ví dụ về mã

Mã ví dụ về MediaPipe Tasks là một cách triển khai cơ bản của ứng dụng Trình phân loại văn bản trên iOS.

Bạn có thể dùng ứng dụng làm điểm xuất phát cho ứng dụng iOS của mình hoặc tham khảo ứng dụng này khi sửa đổi một ứng dụng hiện có. Bạn có thể tham khảo mã ví dụ của Trình phân loại văn bản trên GitHub.

Tải mã xuống

Hướng dẫn sau đây chỉ cho bạn cách tạo bản sao cục bộ của mã ví dụ bằng công cụ dòng lệnh git.

Cách tải mã ví dụ xuống:

  1. Sao chép kho lưu trữ git bằng lệnh sau:

    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. Bạn có thể tuỳ ý định cấu hình thực thể git để sử dụng quy trình thanh toán thưa thớt, vì vậy, bạn chỉ có các tệp cho ứng dụng mẫu của Trình phân loại văn bản:

    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/text_classification/ios/
    

Sau khi tạo phiên bản cục bộ của mã ví dụ, bạn có thể cài đặt thư viện tác vụ MediaPipe, mở dự án bằng Xcode và chạy ứng dụng. Để biết hướng dẫn, hãy xem Hướng dẫn thiết lập dành cho iOS.

Thành phần chính

Các tệp sau đây chứa mã quan trọng cho ứng dụng mẫu của Trình phân loại văn bản:

Thiết lập

Phần này mô tả các bước chính để thiết lập môi trường phát triển và dự án mã để sử dụng Công cụ phân loại văn bản. Để biết thông tin chung về cách thiết lập môi trường phát triển nhằm sử dụng các tác vụ MediaPipe, bao gồm cả các yêu cầu về phiên bản nền tảng, hãy xem Hướng dẫn thiết lập dành cho iOS.

Phần phụ thuộc

Trình phân loại văn bản sử dụng thư viện MediaPipeTasksText. Bạn phải cài đặt thư viện này bằng CocoaPods. Thư viện này tương thích với cả ứng dụng Swift và Objective-C, đồng thời không yêu cầu thiết lập thêm tuỳ theo ngôn ngữ.

Để biết hướng dẫn cài đặt CocoaPods trên macOS, hãy tham khảo Hướng dẫn cài đặt CocoaPods. Để biết hướng dẫn về cách tạo Podfile với các nhóm cần thiết cho ứng dụng của bạn, hãy tham khảo bài viết Sử dụng CocoaPods.

Thêm nhóm MediaPipeTasksText trong Podfile bằng mã sau:

target 'MyTextClassifierApp' do
  use_frameworks!
  pod 'MediaPipeTasksText'
end

Nếu ứng dụng của bạn có các mục tiêu kiểm thử đơn vị, hãy tham khảo Hướng dẫn thiết lập dành cho iOS để biết thêm thông tin về cách thiết lập Podfile.

Mẫu

Tác vụ của Trình phân loại văn bản MediaPipe cần có một mô hình đã huấn luyện tương thích với tác vụ này. Để biết thêm thông tin về các mô hình được huấn luyện hiện có cho Công cụ phân loại văn bản, hãy xem phần Mô hình tổng quan về tác vụ.

Chọn và tải một mô hình xuống, sau đó thêm mô hình đó vào thư mục dự án của bạn bằng Xcode. Để biết hướng dẫn về cách thêm tệp vào dự án Xcode, hãy tham khảo bài viết Quản lý tệp và thư mục trong dự án Xcode.

Sử dụng thuộc tính BaseOptions.modelAssetPath để chỉ định đường dẫn đến mô hình trong gói ứng dụng của bạn. Để biết ví dụ về mã, hãy xem phần tiếp theo.

Tạo việc cần làm

Bạn có thể tạo tác vụ Text Classifier (Trình phân loại văn bản) bằng cách gọi một trong các trình khởi tạo. Trình khởi tạo TextClassifier(options:) đặt giá trị cho các tuỳ chọn cấu hình.

Nếu không cần Trình phân loại văn bản được khởi chạy bằng các lựa chọn cấu hình tuỳ chỉnh, bạn có thể sử dụng trình khởi chạy TextClassifier(modelPath:) để tạo Trình phân loại văn bản với các tuỳ chọn mặc định. Để biết thêm thông tin về các lựa chọn cấu hình, hãy xem phần Tổng quan về cấu hình.

Mã sau đây minh hoạ cách tạo và định cấu hình tác vụ này.

Swift

import MediaPipeTasksText

let modelPath = Bundle.main.path(forResource: "model",
                                      ofType: "tflite")

let options = TextClassifierOptions()
options.baseOptions.modelAssetPath = modelPath
options.scoreThreshold = 0.6

let textClassifier = try TextClassifier(options: options)

Objective-C

@import MediaPipeTasksText;

NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"model"
                                                      ofType:@"tflite"];

MPPTextClassifierOptions *options = [[MPPTextClassifierOptions alloc] init];
options.baseOptions.modelAssetPath = modelPath;
options.scoreThreshold = 0.6;

MPPTextClassifier *textClassifier =
      [[MPPTextClassifier alloc] initWithOptions:options error:nil];

Các lựa chọn về cấu hình

Tác vụ này có các lựa chọn cấu hình sau đây đối với ứng dụng iOS:

Tên lựa chọn Nội dung mô tả Khoảng giá trị Giá trị mặc định
displayNamesLocale Đặt ngôn ngữ của nhãn để sử dụng cho tên hiển thị được cung cấp trong siêu dữ liệu của mô hình của tác vụ, nếu có. Giá trị mặc định là en đối với tiếng Anh. Bạn có thể thêm nhãn đã bản địa hoá vào siêu dữ liệu của mô hình tuỳ chỉnh bằng cách sử dụng API Trình viết siêu dữ liệu TensorFlow Lite Mã ngôn ngữ vi
maxResults Đặt số lượng kết quả phân loại được tính điểm cao nhất (không bắt buộc) để trả về. Nếu < 0, hàm sẽ trả về tất cả kết quả hiện có. Số dương bất kỳ -1
scoreThreshold Đặt ngưỡng điểm dự đoán để ghi đè ngưỡng được cung cấp trong siêu dữ liệu mô hình (nếu có). Những kết quả bên dưới giá trị này sẽ bị từ chối. Số thực bất kỳ Không đặt
categoryAllowlist Đặt danh sách các tên danh mục được phép (không bắt buộc). Nếu không để trống, kết quả phân loại có tên danh mục không có tên trong tập hợp này sẽ bị lọc ra. Tên danh mục trùng lặp hoặc không xác định sẽ bị bỏ qua. Tuỳ chọn này loại trừ lẫn nhau với categoryDenylist và việc sử dụng cả hai sẽ dẫn đến lỗi. Chuỗi bất kỳ Không đặt
categoryDenylist Đặt danh sách các tên danh mục không được phép (không bắt buộc). Nếu không để trống, kết quả phân loại có tên danh mục nằm trong tập hợp này sẽ bị lọc ra. Tên danh mục trùng lặp hoặc không xác định sẽ bị bỏ qua. Tuỳ chọn này loại trừ lẫn nhau với categoryAllowlist và việc sử dụng cả hai sẽ gây ra lỗi. Chuỗi bất kỳ Không đặt

Chuẩn bị dữ liệu

Tính năng Phân loại văn bản hoạt động với dữ liệu văn bản. Tác vụ này sẽ xử lý tiền xử lý đầu vào dữ liệu, bao gồm cả việc mã hoá và tiền xử lý tensor.

Mọi quá trình xử lý trước đều được xử lý trong hàm classify(text:). Bạn không cần phải xử lý thêm văn bản nhập trước.

Swift

let text = "The input text to be classified."

Objective-C

NSString *text = @"The input text to be classified.";

Chạy tác vụ

Để chạy Trình phân loại văn bản, hãy sử dụng phương thức classify(text:). Trình phân loại văn bản sẽ trả về các danh mục có thể có cho văn bản đầu vào.

Swift

let result = try textClassifier.classify(text: text)

Objective-C

MPPTextClassifierResult *result = [textClassifier classifyText:text
                                                          error:nil];

Lưu ý: Tác vụ sẽ chặn luồng hiện tại cho đến khi hoàn tất việc chạy dự đoán trên văn bản. Để tránh chặn luồng hiện tại, hãy thực thi quá trình xử lý trong một luồng ở chế độ nền bằng cách sử dụng khung Dispatch của iOS hoặc NSOperation.

Xử lý và hiển thị kết quả

Khi chạy suy luận, tác vụ của Trình phân loại văn bản sẽ trả về đối tượng TextClassifierResult chứa danh sách các danh mục có thể có cho văn bản đầu vào. Các danh mục được xác định theo mô hình mà bạn sử dụng. Vì vậy, nếu bạn muốn có các danh mục khác nhau, hãy chọn một mô hình khác hoặc đào tạo lại một mô hình hiện có.

Sau đây là ví dụ về dữ liệu đầu ra của nhiệm vụ này:

TextClassificationResult:
  Classification #0 (single classification head):
    ClassificationEntry #0:
      Category #0:
        category name: "positive"
        score: 0.8904
        index: 0
      Category #1:
        category name: "negative"
        score: 0.1096
        index: 1

Kết quả này đã thu được bằng cách chạy trình phân loại BERT trên văn bản nhập: "an imperfect but overall entertaining mystery".

Tệp ViewController.swift trong mã ví dụ minh hoạ cách hiển thị kết quả phát hiện được trả về từ tác vụ.