Công cụ phân loại văn bản dùng kỹ thuật học máy để giúp nhà phát triển phân loại văn bản.
Phát hành công cụ phân loại văn bản cho Android 11
Android 11 giới thiệu một phương thức triển khai mặc định có thể cập nhật của dịch vụ phân loại văn bản trong
mô-đun ExtServices. Trên các thiết bị chạy Android 11
trở lên, phương thức
getTextClassifier()
sẽ trả về phương thức triển khai mặc định này trong mô-đun ExtServices.
Các nhà sản xuất thiết bị nên sử dụng cách triển khai TextClassifierService
này vì nó có thể được cập nhật thông qua bản cập nhật Mainline OTA.
Android 11 cũng xoá phương thức triển khai mặc định của thuật toán phân loại văn bản cục bộ đã giới thiệu trước đó trong
Android 8.1. Do đó, getLocalTextClassifier()
sẽ trả về một trình phân loại văn bản NO_OP
. Thay vì triển khai cục bộ, bạn nên sử dụng phương thức
getDefaultTextClassifierImplementation()
.
Đối với các nhà sản xuất thiết bị có thể muốn sử dụng các thuật toán phân loại văn bản của riêng mình, họ có thể triển khai dịch vụ phân loại văn bản tuỳ chỉnh bằng cách chỉ định config_defaultTextClassifierPackage
trong tệp config.xml
. Nếu bạn không chỉ định cấu hình này, hệ thống sẽ sử dụng phương thức triển khai mặc định. Các phương thức triển khai tuỳ chỉnh có thể lấy một thực thể của phương thức triển khai mặc định bằng cách gọi TextClassifierService.getDefaultTextClassifierImplementation(Context)
.
Để biết thêm thông tin, hãy xem phần
Triển khai dịch vụ thuật toán phân loại văn bản tuỳ chỉnh.
Thử nghiệm
Để xác thực việc triển khai dịch vụ phân loại văn bản, hãy sử dụng các chương trình kiểm thử Bộ kiểm thử tính tương thích (CTS) trong platform/cts/tests/tests/textclassifier/
.
Cải tiến công cụ phân loại văn bản trong bản phát hành Android 10
Android 10 giới thiệu hai phương thức cho TextClassifier API: suggestConversationActions
và detectLanguage
.
Phương thức suggestConversationActions
tạo các câu trả lời và hành động đề xuất trong một cuộc trò chuyện nhất định, còn phương thức detectLanguage
sẽ phát hiện ngôn ngữ của văn bản.
Tệp mô hình cho các phương thức này được trình bày bên dưới và bạn có thể tìm thấy trong
external/libtextclassifier/models/
.
suggestionConversationActions
:actions_suggestions.universal.model
detectLanguage
:lang_id.model
Để phát hành thiết bị có các tệp mô hình mới nhất trong hình ảnh ban đầu, hãy làm như sau:
Tìm nạp các tệp mô hình mới nhất.
external/libtextclassifier/models/update.sh
- Đổi tên các tệp đã tải xuống để thay thế các tệp hiện có.
- Xác minh chế độ thiết lập.
adb shell dumpsys textclassification
Đây là mẫu kết quả của lệnh đó.
TextClassifierImpl: Annotator model file(s): ModelFile { path=/etc/textclassifier/textclassifier.universal.model name=textclassifier.universal.model version=608 locales=und } ModelFile { path=/etc/textclassifier/textclassifier.en.model name=textclassifier.en.model version=608 locales=en } LangID model file(s): ModelFile { path=/etc/textclassifier/lang_id.model name=lang_id.model version=0 locales=und } Actions model file(s): ModelFile { path=/etc/textclassifier/actions_suggestions.universal.model name=actions_suggestions.universal.model version=0 locales=und }
Các tính năng nâng cao của công cụ phân loại văn bản trong bản phát hành Android 9
Android 9 đã mở rộng khung phân loại văn bản được ra mắt trong Android 8.1 bằng dịch vụ phân loại văn bản mới. Dịch vụ phân loại văn bản là cách được đề xuất để OEM hỗ trợ hệ thống phân loại văn bản. Dịch vụ phân loại văn bản có thể là một phần của tệp APK hệ thống bất kỳ và có thể được cập nhật khi cần.
Android 9 bao gồm một phương thức triển khai dịch vụ phân loại văn bản mặc định (TextClassifierImpl
) được sử dụng trừ phi bạn thay thế phương thức này bằng một phương thức triển khai dịch vụ phân loại văn bản tuỳ chỉnh.
Triển khai dịch vụ phân loại văn bản tuỳ chỉnh
Các phần sau đây mô tả cách triển khai dịch vụ thuật toán phân loại văn bản tuỳ chỉnh mà bạn phát triển.
Mở rộng android.service.textclassifier.TextClassifierService
public final class TextClassifierServiceImpl extends TextClassifierService { // Returns TextClassifierImpl. private final TextClassifier tc = getLocalTextClassifier(); @Override public void onSuggestSelection( @Nullable TextClassificationSessionId sessionId, @NonNull TextSelection.Request request, @NonNull CancellationSignal cancellationSignal, @NonNull Callback<TextSelection> callback) { CompletableFuture.supplyAsync( () -> tc.suggestSelection(request)) .thenAccept(r -> callback.onSuccess(r)); } @Override public void onClassifyText( @Nullable TextClassificationSessionId sessionId, @NonNull TextClassification.Request request, @NonNull CancellationSignal cancellationSignal, @NonNull Callback<TextClassification> callback) { ... } @Override public void onGenerateLinks( @Nullable TextClassificationSessionId sessionId, @NonNull TextLinks.Request request, @NonNull CancellationSignal cancellationSignal, @NonNull Callback<TextLinks> callback) { ... } ... }
Xác định dịch vụ trong tệp kê khai Android
[AndroidManifest.xml]
<service android:name=".TextClassifierServiceImpl" android:permission="android.permission.BIND_TEXTCLASSIFIER_SERVICE"> <intent-filter> <action android:name= "android.service.textclassifier.TextClassifierService"/> </intent-filter> </service>
Xin lưu ý rằng dịch vụ phải yêu cầu quyền android.permission.BIND_TEXTCLASSIFIER_SERVICE
và phải chỉ định hành động theo ý định android.service.textclassifier.TextClassifierService
.
Đặt một dịch vụ phân loại văn bản mặc định của hệ thống trong lớp phủ cấu hình
[config.xml]
<string name="config_defaultTextClassifierPackage" translatable="false">com.example.textclassifierservice</string>
Tích hợp dịch vụ thuật toán phân loại văn bản vào hình ảnh hệ thống
Dịch vụ phân loại văn bản tuỳ chỉnh của bạn có thể là một tệp APK độc lập được tích hợp vào hình ảnh hệ thống hoặc một phần của tệp APK hệ thống khác. Hệ thống sử dụng PackageManager.MATCH_SYSTEM_ONLY
để phân giải dịch vụ.
Thử nghiệm
Chạy kiểm thử trong android.view.textclassifier.cts
.
Các thay đổi khác về cách phân loại văn bản trong Android 9
Tham khảo phần Kiểm tra các mô-đun ngôn ngữ đã cài đặt.
Tệp mô hình Android 9 không tương thích với tệp mô hình Android 8.x.
Tệp mô hình Android 9 có mẫu đặt tên: texclassifier.[language-code].model
(ví dụ: textclassifier.en.model
) thay vì textclassifier.smartselection.en.model
trong Android 8.x.
Nhận tệp mô hình phân loại văn bản mới nhất
Để lấy các mô hình mới nhất, bạn có thể chạy tập lệnh sau đây để cập nhật các mô hình TextClassifier trong cây nguồn:
external/libtextclassifier/native/models/update.sh
Trình phân loại văn bản phát hành trên Android 8.1
Android 8.1 đã ra mắt API TextClassifier để triển khai tính năng phân loại văn bản.
TextClassificationManager tcm = context.getSystemService(TextClassificationManager.class); TextClassifier classifier = tcm.getTextClassifier(); TextSelection selection = classifier.suggestSelection(...); TextClassification classification = classifier.classifyText(...);
Nhà phát triển có thể đặt một thuật toán phân loại văn bản tuỳ chỉnh:
tcm.setTextClassifier(customTextClassifier);
Tuy nhiên, nếu một nhà phát triển ứng dụng đặt thuật toán phân loại văn bản thành null
, thì thuật toán phân loại văn bản mặc định của hệ thống sẽ được trả về cho getTextClassifier()
.
Hãy xem android.view.textclassifier.TextClassifierImpl
.
TextView và WebView sử dụng TextClassifier cho lựa chọn thông minh và các tính năng chia sẻ văn bản thông minh.
Mô hình mạng nơron TextClassifier
Dự án nguồn mở Android (AOSP) có một số mô hình mạng nơron để phân loại văn bản. Mỗi tệp mô hình được huấn luyện cho một ngôn ngữ. Bạn có thể cài đặt bất kỳ tổ hợp mô hình nào. Các mô hình được xác định trong:
external/libtextclassifier/Android.mk
Cài đặt trước các mô hình ngôn ngữ trên thiết bị
Bạn có thể chỉ định một gói mô hình ngôn ngữ và cài đặt các mô hình đó trên thiết bị:
# ----------------------- # Smart Selection bundles # ----------------------- include $(CLEAR_VARS) LOCAL_MODULE := textclassifier.smartselection.bundle1 LOCAL_REQUIRED_MODULES := textclassifier.smartselection.en.model LOCAL_REQUIRED_MODULES += textclassifier.smartselection.es.model LOCAL_REQUIRED_MODULES += textclassifier.smartselection.de.model LOCAL_REQUIRED_MODULES += textclassifier.smartselection.fr.model include $(BUILD_STATIC_LIBRARY)
Ví dụ: trong device/google/marlin/device-common.mk
.
# TextClassifier smart selection model files
PRODUCT_PACKAGES += \
textclassifier.smartselection.bundle1
Kiểm tra các mô-đun ngôn ngữ đã cài đặt
Sử dụng ADB để liệt kê các tệp trong thư mục:
$ adb shell ls -l /etc/textclassifier -rw-r--r-- 1 root root ... textclassifier.smartselection.de.model -rw-r--r-- 1 root root ... textclassifier.smartselection.en.model -rw-r--r-- 1 root root ... textclassifier.smartselection.es.model -rw-r--r-- 1 root root ... textclassifier.smartselection.fr.model
Nội dung cập nhật về mô hình
Bạn có thể cập nhật mô hình bằng cách đưa một mô hình mới vào bản cập nhật hình ảnh hệ thống hoặc cập nhật một cách linh động bằng cách đưa một thành phần hệ thống kích hoạt bản cập nhật thông qua ý định API ACTION_UPDATE_SMART_SELECTION
của hệ thống. Bằng cách truyền phát ý định API của hệ thống này, khung có thể cập nhật mô hình ngôn ngữ của ngôn ngữ hiện được đặt. Bản thân các mô hình chứa ngôn ngữ được hỗ trợ và số phiên bản để mô hình phù hợp mới nhất sẽ được sử dụng.
Vì vậy, bạn không cần tải trước mô hình cho mọi ngôn ngữ vì các mô hình đó có thể được thêm vào sau này. Nếu không tìm thấy tệp mô hình cho ngôn ngữ đã chỉ định, thì tính năng phân loại văn bản sẽ trả về các giá trị không hoạt động.
Các bài kiểm tra Bộ kiểm tra tính tương thích
Bạn có thể tìm thấy các kiểm thử liên quan trong Bộ kiểm thử tính tương thích với Android (CTS) tại:
cts/tests/tests/view/src/android/view/textclassifier/cts/TextClassificationManagerTest.java
cts/tests/tests/widget/src/android/widget/cts/TextViewTest.java
testSmartSelection
testSmartSelection_dragSelection
testSmartSelection_resetSelection