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

Nhiệm vụ 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 tập hợp các 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 này được xác định dựa trên mô hình bạn sử dụng và cách mô hình đó được huấn luyện. Những hướng dẫn này cho bạn biết cách sử dụng Trình phân loại văn bản trong ứng dụng iOS. Mã mẫu được mô tả trong có hướng dẫn trên GitHub.

Bạn có thể xem công việc này trong thực tế bằng cách xem trang Web này bản minh hoạ. Cho thông tin khác về tính năng, kiểu máy và tuỳ chọn cấu hình của công việc này, hãy xem Tổng quan.

Ví dụ về mã

Mã ví dụ MediaPipe Tasks là cách triển khai cơ bản của Trình phân loại văn bản dành cho iOS.

Bạn có thể sử dụng ứng dụng này làm điểm khởi đầu cho ứng dụng iOS của riêng mình hoặc tham chiếu đến ứng dụng đó khi sửa đổi ứ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 về GitHub.

Tải mã xuống

Các hướng dẫn sau đây chỉ cho bạn cách tạo bản sao trên máy của 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ể định cấu hình phiên bản git để sử dụng quy trình thanh toán thưa thớt, vì vậy, bạn có chỉ 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 nhiệm vụ MediaPipe, mở dự án bằng Xcode rồi chạy ứng dụng. Cho hãy xem Hướng dẫn thiết lập cho iOS.

Thành phần chính

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

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à mã dự án để sử dụng Text Classifier (Trình 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 để sử dụng các tác vụ MediaPipe, bao gồm cả phiên bản nền tảng hãy xem Hướng dẫn thiết lập 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 cách sử dụng CocoaPods. Thư viện này tương thích với cả ứng dụng Swift và GOAL-C và không yêu cầu thiết lập theo ngôn ngữ cụ thể nào khác.

Để biết hướng dẫn cài đặt CocoaPods trên macOS, hãy tham khảo CocoaPods hướng dẫn cài đặt. Để xem hướng dẫn về cách tạo Podfile với các nhóm cần thiết cho ứng dụng, hãy tham khảo Việc 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ó 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 của bạn.

Mẫu

Nhiệm vụ 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 nhiệm 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 Trình phân loại văn bản, hãy xem phần Mô hình tổng quan về nhiệm vụ .

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

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. Để xem 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ụ 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 tương ứng. Chiến lược phát hành đĩa đơn Trình khởi tạo TextClassifier(options:) đặt các giá trị cho cấu hình .

Nếu bạn không cần khởi chạy Trình phân loại văn bản bằng cấu hình tuỳ chỉnh , bạn có thể sử dụng trình khởi tạo TextClassifier(modelPath:) để tạo một Trình phân loại văn bản với các chế độ mặc định. Để biết thêm thông tin về cấu hình hãy xem phần Configuration Overview (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

Nhiệm vụ này có các lựa chọn cấu hình sau đây cho ứng dụng iOS:

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

Chuẩn bị dữ liệu

Trình 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ý việc nhập dữ liệu xử lý trước, bao gồm cả mã hoá và xử lý trước tensor.

Mọi quy trình xử lý trước đều được xử lý trong hàm classify(text:). Không có cần xử lý trước 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 nhập.

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 kết thú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 chuỗi trong nền bằng iOS Điều phối hoặc NSOperation khung.

Xử lý và hiện kết quả

Sau khi chạy dự đoán, tác vụ Trình phân loại văn bản sẽ trả về một TextClassifierResult đối tượng chứa danh sách các danh mục có thể sử dụng cho văn bản đầu vào. Chiến lược phát hành đĩa đơn đượ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 danh mục khác nhau danh mục, chọn mô hình khác hoặc đào tạo lại mô hình hiện có.

Sau đây là ví dụ về dữ liệu đầu ra của tác 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 nhận được bằng cách chạy trình phân loại BERT trên văn bản đầu vào: "an imperfect but overall entertaining mystery".

Chiến lược phát hành đĩa đơn 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ụ.