Menerapkan pengklasifikasi teks

Pengklasifikasi teks menggunakan teknik machine learning untuk membantu developer mengklasifikasikan teks.

Pengklasifikasi teks rilis Android 11

Android 11 memperkenalkan default yang dapat diperbarui implementasi layanan pengklasifikasi teks dalam Modul ExtServices. Di perangkat yang menjalankan Android 11 atau lebih tinggi, getTextClassifier() menampilkan implementasi default ini dalam modul ExtServices. Produsen perangkat disarankan untuk menggunakan implementasi TextClassifierService karena dapat diupdate melalui OTA Mainline pembaruan.

Android 11 juga menghapus pengklasifikasi teks lokal dan implementasi default yang sebelumnya diperkenalkan pada Android 8.1. Hasilnya, getLocalTextClassifier() menampilkan pengklasifikasi teks NO_OP. Alih-alih lokal Anda harus menggunakan getDefaultTextClassifierImplementation() .

Untuk produsen perangkat yang mungkin ingin menggunakan klasifikasi teks mereka sendiri mereka dapat menerapkan layanan pengklasifikasi teks kustom dengan menentukan config_defaultTextClassifierPackage dalam config.xml . Jika konfigurasi ini tidak ditentukan, implementasi sistem default digunakan. Implementasi kustom bisa mendapatkan instance default implementasi dengan memanggil TextClassifierService.getDefaultTextClassifierImplementation(Context). Untuk informasi selengkapnya, lihat Menerapkan layanan pengklasifikasi teks kustom.

Pengujian

Untuk memvalidasi penerapan layanan pengklasifikasi teks, gunakan metode Pengujian Compatibility Test Suite (CTS) di platform/cts/tests/tests/textclassifier/.

Peningkatan pengklasifikasi teks rilis Android 10

Android 10 memperkenalkan dua metode TextClassifier API: suggestConversationActions dan detectLanguage. Metode suggestConversationActions menghasilkan balasan yang disarankan tindakan dari percakapan tertentu serta metode detectLanguage mendeteksi bahasa teks.

File model untuk metode ini ditampilkan di bawah ini dan dapat ditemukan di external/libtextclassifier/models/.

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

Untuk merilis perangkat dengan file model terbaru di setelan pabrik, lakukan hal berikut:

  1. Ambil file model terbaru.

    external/libtextclassifier/models/update.sh
    
  2. Ganti nama file yang didownload untuk mengganti nama file yang sudah ada.
  3. Verifikasi penyiapan.
    adb shell dumpsys textclassification
    

    Ini adalah contoh output dari perintah tersebut.

    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 }
    

Peningkatan pengklasifikasi teks rilis Android 9

Android 9 memperluas teks framework klasifikasi yang diperkenalkan di Android 8.1 dengan teks baru layanan pengklasifikasi Anda. Layanan pengklasifikasi teks adalah cara yang direkomendasikan untuk OEM untuk menyediakan dukungan sistem klasifikasi teks. Layanan pengklasifikasi teks dapat menjadi bagian dari APK sistem apa pun dan dapat diperbarui bila diperlukan.

Android 9 menyertakan pengklasifikasi teks default implementasi layanan ( TextClassifierImpl) yang digunakan kecuali jika Anda menggantinya dengan layanan pengklasifikasi teks kustom terlepas dari implementasi layanan.

Mengimplementasikan layanan pengklasifikasi teks kustom

Bagian berikut menjelaskan cara menerapkan pengklasifikasi teks kustom layanan yang dikembangkan.

Memperluas 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) {
        ...
    }
    ...
}

Menentukan layanan dalam manifes 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>

Perhatikan bahwa layanan harus memerlukan android.permission.BIND_TEXTCLASSIFIER_SERVICE dan harus menentukan Intent android.service.textclassifier.TextClassifierService tindakan.

Menyetel layanan pengklasifikasi teks default sistem di overlay konfigurasi

[config.xml]

<string name="config_defaultTextClassifierPackage" translatable="false">com.example.textclassifierservice</string>

Membangun layanan pengklasifikasi teks ke dalam image sistem

Layanan pengklasifikasi teks kustom Anda dapat berupa APK mandiri yang dibuat ke dalam image sistem atau bagian dari APK sistem lain. Sistem menggunakan PackageManager.MATCH_SYSTEM_ONLY untuk menyelesaikan layanan.

Pengujian

Jalankan pengujian di android.view.textclassifier.cts.

Perubahan klasifikasi teks lainnya di Android 9

Rujuk Memeriksa modul bahasa yang terinstal.

File model Android 9 tidak kompatibel dengan File model Android 8.x.

File model Android 9 memiliki pola penamaan: texclassifier.[language-code].model (misalnya, textclassifier.en.model) bukan textclassifier.smartselection.en.model di Android 8.x.

Mendapatkan file model klasifikasi teks terbaru

Untuk mendapatkan model terbaru, skrip berikut dapat dijalankan, yang memperbarui model TextClassifier di hierarki sumber:

external/libtextclassifier/native/models/update.sh

Pengklasifikasi teks rilis Android 8.1

Android 8.1 memperkenalkan TextClassfier API untuk mengimplementasikan teks Klasifikasi kalimat tunggal,

TextClassificationManager tcm =
    context.getSystemService(TextClassificationManager.class);
TextClassifier classifier = tcm.getTextClassifier();
TextSelection selection = classifier.suggestSelection(...);
TextClassification classification = classifier.classifyText(...);

Developer dapat menetapkan pengklasifikasi teks kustom:

tcm.setTextClassifier(customTextClassifier);

Namun, jika developer aplikasi menetapkan pengklasifikasi teks ke null, pengklasifikasi teks default ditampilkan untuk getTextClassifier().

Lihat android.view.textclassifier.TextClassifierImpl.

TextView dan WebView menggunakan TextClassifier untuk pemilihan cerdas dan teks cerdas berbagi fitur.

Penggunaan pengklasifikasi teks

Gambar 1. Penggunaan TextClassifier

Model neural-net TextClassifier

Proyek Open Source Android (AOSP) memiliki sejumlah fitur jaringan neural untuk mengklasifikasikan teks. Setiap file model dilatih untuk satu bahasa. Anda dapat menginstal kombinasi model apa pun. Model didefinisikan dalam:

external/libtextclassifier/Android.mk

Bahasa pra-penginstalan model di perangkat

Anda dapat menentukan paket model bahasa dan menginstalnya di perangkat:

# -----------------------
# 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)

Misalnya, dalam device/google/marlin/device-common.mk.

# TextClassifier smart selection model files
PRODUCT_PACKAGES += \
    textclassifier.smartselection.bundle1

Periksa bahasa yang terinstal modul

Gunakan ADB untuk menampilkan daftar file dalam direktori:

$ 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

Update model

Model dapat diperbarui dengan menyertakan model baru sebagai bagian dari sistem update image, atau secara dinamis dengan memiliki komponen sistem yang memicu update melalui sistem API ACTION_UPDATE_SMART_SELECTION intent. Dengan menyiarkan intent API sistem ini, framework dapat memperbarui model bahasa dari bahasa yang saat ini disetel. Model itu sendiri berisi bahasa yang didukung dan nomor versi sehingga informasi model digunakan.

Jadi, Anda tidak perlu melakukan pramuat model untuk semua bahasa karena mereka dapat ditambahkan nanti. Jika tidak ada file model yang ditemukan untuk bahasa yang ditentukan, klasifikasi teks mengembalikan nilai tanpa pengoperasian.

Pengujian Compatibility Test Suite

Pengujian Compatibility Test Suite (CTS) Android terkait dapat ditemukan di:

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