Triển khai thuật toán phân loại văn bản

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.

Thuật toán phân loại văn bản của bản phát hành Android 11

Android 11 ra mắt một chế độ mặc định có thể cập nhật và việc triển khai dịch vụ thuật toán phân loại văn bản trong Mô-đun ExtServices. Trên các thiết bị chạy Android 11 hoặc cao hơn, getTextClassifier() trả về phương thức triển khai mặc định này trong mô-đun ExtServices. Nhà sản xuất thiết bị nên sử dụng cách triển khai này của TextClassifierService vì có thể được cập nhật qua Mainline OTA bản cập nhật.

Android 11 cũng xoá thuật toán phân loại văn bản cục bộ phương thức triển khai mặc định được giới thiệu trước đó trong Android 8.1. Do đó, getLocalTextClassifier() sẽ trả về một thuật toán phân loại văn bản NO_OP. Thay vì quảng cáo địa phương , bạn nên sử dụng getDefaultTextClassifierImplementation() .

Dành cho các nhà sản xuất thiết bị có thể muốn sử dụng tính năng phân loại văn bản của riêng họ các thuật toán này có thể triển khai dịch vụ thuật toán phân loại văn bản tuỳ chỉnh bằng cách chỉ định config_defaultTextClassifierPackage trong config.xml . Nếu cấu hình này không được chỉ định, thì phương thức triển khai hệ thống theo mặc định sẽ được sử dụng. Các phương pháp triển khai tuỳ chỉnh có thể nhận được phiên bản của giá trị 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ụ 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 kiểm tra Bộ kiểm tra tính tương thích (CTS) trong platform/cts/tests/tests/textclassifier/.

Các tính năng nâng cao cho thuật toán phân loại văn bản trong bản phát hành Android 10

Android 10 giới thiệu 2 phương thức để API TextClassifier: suggestConversationActions detectLanguage. Phương thức suggestConversationActions tạo các câu trả lời đề xuất và hành động từ một cuộc trò chuyện cụ thể và phương thức detectLanguage phát hiện ngôn ngữ của văn bản.

Tệp mô hình cho các phương pháp này được hiển thị 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 một thiết bị có tệp mẫu mới nhất ở dạng hình ảnh gốc, hãy thực hiện như sau:

  1. Tìm nạp các tệp 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. Hãy 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 cho thuật toán phân loại văn bản trong bản phát hành Android 9

Android 9 đã mở rộng văn bản khung phân loại ra mắt trong Android 8.1 cùng với văn bản mới dịch vụ phân loại. Nhà sản xuất thiết bị gốc nên sử dụng dịch vụ phân loại văn bản để cung cấp hỗ trợ cho 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 mọi APK hệ thống và có thể được cập nhật khi cần.

Android 9 có một thuật toán phân loại văn bản mặc định triển khai dịch vụ ( TextClassifierImpl) được sử dụng trừ phi bạn thay thế bằng dịch vụ phân loại văn bản tuỳ chỉnh trong quá trình triển khai.

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 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ụ này phải yêu cầu Quyền android.permission.BIND_TEXTCLASSIFIER_SERVICE và phải chỉ định Ý định android.service.textclassifier.TextClassifierService hành động.

Đặ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ụ thuật toán phân loại văn bản tuỳ chỉnh có thể là một APK độc lập được tạo vào ả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ụ.

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 Kiểm tra các mô-đun ngôn ngữ đã cài đặt.

Các 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ó 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

Để có được các mô hình cập nhật nhất, bạn 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 phát hành trên Android 8.1

Android 8.1 ra mắt TextClassfier API để triển khai văn bản của 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 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à văn bản thông minh các tính năng chia sẻ.

Cách sử dụng thuật toán phân loại văn bản

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

Mô hình mạng nơron TextClassifier

Dự án nguồn mở Android (AOSP) có một số 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ữ duy nhất. Bạn có thể cài đặt theo bất kỳ tổ hợp mô hình nào. Các mô hình này được xác định trong:

external/libtextclassifier/Android.mk

Cài đặt trước ngôn ngữ mẫu thiết bị 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 ngôn ngữ đã cài đặt mô-đun

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

Cập nhật mô hình

Các mô hình có thể được cập nhật bằng cách thêm mô hình mới vào hệ thống cập nhật hình ảnh hoặc 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 hệ thống API ACTION_UPDATE_SMART_SELECTION ý định. 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. Chính các mô hình chứa ngôn ngữ được hỗ trợ và số phiên bản để phiên bản mới nhất phù hợp mô hình được sử dụng.

Vì vậy, bạn không cần phải tải trước mô hình cho tất cả ngôn ngữ vì chúng có thể được thêm sau. Nếu không tìm thấy tệp mô hình cho ngôn ngữ đã chỉ định, hãy phân loại văn bản trả về 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ể xem các bài kiểm tra Bộ kiểm tra tính tương thích (CTS) với Android được liên kết 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