Triển khai trình phân loại văn bản

Trình phân loại văn bản sử dụng kỹ thuật máy học để giúp nhà phát triển phân loại văn bản.

Trình phân loại văn bản phát hành Android 11

Android 11 giới thiệu cách 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() trả về cách 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 các bản cập nhật OTA chính tuyến.

Android 11 cũng loại bỏ cách triển khai mặc định của trình phân loại văn bản cục bộ được giới thiệu trước đây trong Android 8.1 . Kết quả là getLocalTextClassifier() trả về 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ị muốn sử dụng 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 tùy chỉnh bằng cách chỉ định config_defaultTextClassifierPackage trong tệp config.xml . Nếu cấu hình này không được chỉ định thì việc triển khai hệ thống mặc định sẽ được sử dụng. Việc triển khai tùy chỉnh có thể lấy phiên bản 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 Triển khai dịch vụ phân loại văn bản tùy chỉnh .

Kiểm tra

Để xác thực việc triển khai dịch vụ phân loại văn bản của bạn, hãy sử dụng các bài kiểm tra Bộ kiểm tra tương thích (CTS) trong platform/cts/tests/tests/textclassifier/ .

Cải tiến trình phân loại văn bản phát hành Android 10

Android 10 giới thiệu hai phương thức cho API TextClassifier: suggestConversationActionsdetectLanguage . Phương thức suggestConversationActions tạo ra các câu trả lời và hành động được đề xuất từ ​​một cuộc hội thoại nhất định và phương thức detectLanguage sẽ phát hiện ngôn ngữ của văn bản.

Các tệp mô hình cho các phương thức này được hiển thị bên dưới và có thể được tìm thấy trong external/libtextclassifier/models/ .

  • suggestionConversationActions : actions_suggestions.universal.model
  • detectLanguage : lang_id.model

Để phát hành một thiết bị có tệp mẫu mới nhất trong ảnh gốc của bạn, hãy làm như sau:

  1. Tìm nạp các tập tin mô hình mới nhất.

    external/libtextclassifier/models/update.sh
    
  2. Đổi tên các tệp đã tải xuống để thay thế các tệp hiện có.
  3. Xác minh thiết lập.
    adb shell dumpsys textclassification
    

    Đây là mẫu đầu ra 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ải tiến trình phân loại văn bản phát hành Android 9

Android 9 đã mở rộng khung phân loại văn bản được giới thiệu trong Android 8.1 với 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 để các OEM cung cấp 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 bất kỳ APK hệ thống nào và có thể được cập nhật khi cần thiết.

Android 9 bao gồm triển khai dịch vụ phân loại văn bản mặc định ( TextClassifierImpl ) được sử dụng trừ khi bạn thay thế nó bằng triển khai dịch vụ phân loại văn bản tùy chỉnh.

Triển khai dịch vụ phân loại văn bản tùy chỉnh

Các phần sau đây mô tả cách triển khai dịch vụ phân loại văn bản tùy 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 bảng 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>

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 có ý định android.service.textclassifier.TextClassifierService .

Đặ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>

Xây dựng dịch vụ phân loại văn bản vào image hệ thống

Dịch vụ phân loại văn bản tùy chỉnh của bạn có thể là một 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 APK hệ thống khác. Hệ thống sử dụng PackageManager.MATCH_SYSTEM_ONLY để giải quyết dịch vụ.

Kiểm tra

Chạy thử nghiệm trong android.view.textclassifier.cts .

Những thay đổi phân loại văn bản khác trong Android 9

Tham khảo 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.

Các tệp mô hình Android 9 có kiể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 các tệp mô hình phân loại văn bản mới nhất

Để có được các mô hình cập nhật nhất, có thể chạy tập lệnh sau để 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 phiên bản Android 8.1

Android 8.1 đã giới thiệu API TextClassfier để triển khai 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 trình phân loại văn bản tùy chỉnh:

tcm.setTextClassifier(customTextClassifier);

Nhưng nếu nhà phát triển ứng dụng đặt trình phân loại văn bản thành null thì trình phân loại văn bản mặc định của hệ thống sẽ được trả về cho getTextClassifier() .

Xem android.view.textclassifier.TextClassifierImpl .

TextView và WebView sử dụng TextClassifier để có các tính năng lựa chọn thông minh và chia sẻ văn bản thông minh.

Cách sử dụng trình phân loại văn bản

Hình 1. Cách sử dụng TextClassifier

Mô hình mạng lưới thần kinh TextClassifier

Dự án mã nguồn mở Android (AOSP) có một số mô hình mạng thần kinh để phân loại văn bản. Mỗi tệp mô hình được đào tạo cho một ngôn ngữ duy nhất. Bạn có thể cài đặt bất kỳ sự kết hợp của các mô hình. Các mô hình được xác định trong:

external/libtextclassifier/Android.mk

Cài đặt sẵn mô hình ngôn ngữ trên thiết bị

Bạn có thể chỉ định một nhóm mô hình ngôn ngữ và cài đặt chúng 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 tin 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

Cập nhật mẫu

Bạn có thể cập nhật mô hình bằng cách đưa mô hình mới vào như một phần của bản cập nhật hình ảnh hệ thống hoặc cập nhật động bằng cách có một thành phần hệ thống kích hoạt bản cập nhật thông qua mục đích API ACTION_UPDATE_SMART_SELECTION hệ thống. Bằng cách truyền phát mục đích API 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 để sử dụng mô hình phù hợp mới nhất.

Vì vậy, bạn không cần tải trước các mô hình cho tất cả các ngôn ngữ vì chúng có thể được thêm vào sau. Nếu không tìm thấy tệp mô hình cho ngôn ngữ đã chỉ định, phân loại văn bản sẽ trả về giá trị không hoạt động.

Kiểm tra bộ kiểm tra khả năng tương thích

Bạn có thể tìm thấy các bài kiểm tra Bộ kiểm tra khả năng tương thích Android (CTS) liên quan trong:

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