Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Menerapkan Pengklasifikasi Teks

Pengklasifikasi teks menggunakan teknik pembelajaran mesin untuk membantu pengembang mengklasifikasikan teks.

Pengklasifikasi teks rilis Android 11

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

Android 11 juga menghapus implementasi default pengklasifikasi teks lokal yang sebelumnya diperkenalkan di Android 8.1 . Akibatnya, getLocalTextClassifier() mengembalikan NO_OP teks NO_OP . Sebagai getDefaultTextClassifierImplementation() implementasi lokal, Anda harus menggunakan metode getDefaultTextClassifierImplementation() .

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

Menguji

Untuk memvalidasi implementasi layanan pengklasifikasi teks Anda, gunakan pengujian Compatibility Test Suite (CTS) di platform/cts/tests/tests/textclassifier/ .

Penyempurnaan pengklasifikasi teks rilis Android 10

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

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

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

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

  1. Ambil file model terbaru.

    external/libtextclassifier/models/update.sh
    
  2. Ubah nama file yang diunduh untuk menggantikan yang sudah ada.
  3. Verifikasi penyiapan.
    adb shell dumpsys textclassification
    

    Ini adalah contoh keluaran dari perintah itu.

    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 }
    

Penyempurnaan pengklasifikasi teks rilis Android 9

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

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

Menerapkan layanan pengklasifikasi teks kustom

Bagian berikut menjelaskan cara mengimplementasikan layanan pengklasifikasi teks kustom yang Anda kembangkan.

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

Tentukan layanan di 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 izin android.permission.BIND_TEXTCLASSIFIER_SERVICE dan harus menentukan tindakan maksud android.service.textclassifier.TextClassifierService .

Setel layanan pengklasifikasi teks default sistem di overlay konfigurasi

[ config.xml ]

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

Buat layanan pengklasifikasi teks ke dalam image sistem

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

Menguji

Jalankan pengujian di android.view.textclassifier.cts .

Perubahan klasifikasi teks lainnya di Android 9

Lihat Memeriksa modul bahasa yang diinstal .

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.

Memperoleh file model klasifikasi teks terbaru

Untuk mendapatkan model paling mutakhir, skrip berikut dapat dijalankan, yang memperbarui model TextClassifier di pohon sumber:

external/libtextclassifier/native/models/update.sh

Pengklasifikasi teks rilis Android 8.1

Android 8.1 memperkenalkan TextClassfier API untuk mengimplementasikan klasifikasi teks.

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

Pengembang dapat menyetel pengklasifikasi teks khusus:

tcm.setTextClassifier(customTextClassifier);

Tetapi jika pengembang aplikasi menyetel pengklasifikasi teks ke null , pengklasifikasi teks default sistem dikembalikan untuk getTextClassifier() .

Lihat android.view.textclassifier.TextClassifierImpl .

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

Penggunaan pengklasifikasi teks

Gambar 1. Penggunaan TextClassifier

Model jaringan saraf TextClassifier

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

external/libtextclassifier/Android.mk

Melakukan prainstal model bahasa pada 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, di device/google/marlin/device-common.mk .

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

Memeriksa modul bahasa yang terpasang

Gunakan ADB untuk mencantumkan file di 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

Pembaruan model

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

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

Tes Kompatibilitas Test Suite

Tes Android Compatibility Test Suite (CTS) 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