Nhiệm vụ của Trình phân loại văn bản MediaPipe 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 được xác định bạn sử dụng cũng như 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 với ứng dụng Android.
Bạn có thể xem công việc này trong thực tế bằng cách xem bản minh hoạ. Để biết thêm thông tin về các tính năng, mô hình và các tuỳ chọn cấu hình của tác vụ này, xem Tổng quan.
Ví dụ về mã
Mã ví dụ cho Trình phân loại văn bản cung cấp cách triển khai đơn giản cho để bạn tham khảo. Mã này giúp bạn kiểm thử nhiệm vụ này và bắt đầu tạo ứng dụng phân loại văn bản của riêng mình. Bạn có thể duyệt qua Mã ví dụ cho Trình phân loại văn bản trên 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 quản lý phiên bản git.
Cách tải mã ví dụ xuống:
- Sao chép kho lưu trữ git bằng lệnh sau:
git clone https://github.com/google-ai-edge/mediapipe-samples
- Bạn có thể đị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/android
Để biết hướng dẫn về cách thiết lập và chạy một ví dụ bằng Android Studio, hãy xem hướng dẫn thiết lập mã ví dụ trong Hướng dẫn thiết lập dành cho Android.
Thành phần chính
Các tệp sau chứa mã quan trọng cho việc phân loại văn bản ứng dụng ví dụ:
- TextClassifierHelper.kt – Khởi chạy thuật toán phân loại văn bản và xử lý việc lựa chọn mô hình.
- MainActivity.kt –
Triển khai ứng dụng, bao gồm cả việc gọi
TextClassifierHelper
vàResultsAdapter
. - ResultsAdapter.kt – Xử lý và định dạng kết quả.
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à lập trình các dự án cụ thể để sử dụng Text Classifier (Phân loại văn bản). Để biết thông tin chung về thiết lập môi trường phát triển để sử dụng MediaPipe Tasks, bao gồm yêu cầu về phiên bản nền tảng, hãy xem Hướng dẫn thiết lập cho Android.
Phần phụ thuộc
Trình phân loại văn bản sử dụng thư viện com.google.mediapipe:tasks-text
. Thêm nội dung này
phần phụ thuộc vào tệp build.gradle
của dự án phát triển ứng dụng Android.
Bạn có thể nhập các phần phụ thuộc bắt buộc bằng đoạn mã sau:
dependencies {
implementation 'com.google.mediapipe:tasks-text:latest.release'
}
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 công việc. Để biết thêm thông tin về các mô hình đã huấn luyện hiện có cho Trình phân loại văn bản, hãy xem tổng quan về nhiệm vụ phần Mô hình.
Chọn và tải một mô hình xuống, sau đó lưu trữ mô hình đó trong dự án assets
thư mục:
<dev-project-root>/src/main/assets
Sử dụng phương thức BaseOptions.Builder.setModelAssetPath()
để chỉ định đường dẫn
của mô hình để sử dụng. Để xem ví dụ về mã, hãy xem phần tiếp theo.
Tạo việc cần làm
Dùng một trong các hàm TextClassifier.createFrom...()
của Trình phân loại văn bản để
chuẩn bị tác vụ để chạy các dự đoán. Bạn có thể dùng createFromFile()
có đường dẫn tương đối hoặc tuyệt đối đến tệp mô hình đã huấn luyện. Đoạn mã
ví dụ bên dưới minh hoạ cách sử dụng TextClassifier.createFromOptions()
. Để biết thêm thông tin về các lựa chọn cấu hình hiện có, hãy xem
Tuỳ chọn cấu hình.
Mã sau đây minh hoạ cách tạo và định cấu hình tác vụ này.
// no directory path required if model file is in src/main/assets:
String currentModel = "text_classifier_model.tflite";
fun initClassifier() {
val baseOptionsBuilder = BaseOptions.builder()
.setModelAssetPath(currentModel)
try {
val baseOptions = baseOptionsBuilder.build()
val optionsBuilder = TextClassifier.TextClassifierOptions.builder()
.setBaseOptions(baseOptions)
val options = optionsBuilder.build()
textClassifier = TextClassifier.createFromOptions(context, options)
} catch (e: IllegalStateException) { // exception handling
}
}
Bạn có thể xem ví dụ về cách tạo một công việc trong đoạn mã ví dụ
TextClassifierHelper
lớp initClassifier()
.
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 Android:
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 (String
) của 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()
. Không cần
để xử lý trước thêm văn bản đầu vào.
String inputText = "The input text to be classified.";
Chạy tác vụ
Trình phân loại văn bản sử dụng hàm TextClassifier.classify()
để chạy
suy luận. Sử dụng một luồng thực thi riêng biệt để thực thi quá trình phân loại
để tránh chặn luồng giao diện người dùng Android với ứng dụng của bạn.
Mã sau đây minh hoạ cách thực thi quá trình xử lý bằng tác vụ bằng cách sử dụng luồng thực thi riêng biệt.
fun classify(text: String) {
executor = ScheduledThreadPoolExecutor(1)
executor.execute {
val results = textClassifier.classify(text)
listener.onResult(results)
}
}
Bạn có thể xem ví dụ về cách chạy một tác vụ trong phần mã ví dụ
TextClassifierHelper
lớp classify()
.
Xử lý và hiện kết quả
Trình phân loại văn bản xuất ra TextClassifierResult
chứa danh sách
danh mục có thể sử dụng cho văn bản đầu vào. Các danh mục này đượ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, hãy chọn một mô hình khác,
hoặc huấn luyện lại một chiến dịch hiện tại.
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"
.
Bạn có thể xem ví dụ về cách hiển thị kết quả trong đoạn mã ví dụ
ResultsAdapter
và ViewHolder
lớp bên trong.