Metin sınıflandırıcıyı uygulama

Metin sınıflandırıcı, geliştiricilerin metni sınıflandırmasına yardımcı olmak için makine öğrenimi tekniklerini kullanır.

Android 11 sürüm metni sınıflandırıcısı

Android 11, ExtServices modülünde metin sınıflandırıcı hizmetinin güncellenebilir bir varsayılan uygulamasını sunar. Android 11 veya üstünü çalıştıran cihazlarda getTextClassifier() yöntemi, ExtServices modülündeki bu varsayılan uygulamayı döndürür. Cihaz üreticilerinin, Mainline OTA güncellemeleri aracılığıyla güncellenebileceği için TextClassifierService bu uygulamasını kullanmaları önerilir.

Android 11 ayrıca daha önce Android 8.1'de tanıtılan yerel metin sınıflandırıcının varsayılan uygulamasını da kaldırır. Sonuç olarak, getLocalTextClassifier() işlevi bir NO_OP metin sınıflandırıcısını döndürür. Yerel uygulama yerine getDefaultTextClassifierImplementation() yöntemini kullanmalısınız.

Kendi metin sınıflandırma algoritmalarını kullanmak isteyebilecek cihaz üreticileri, config.xml dosyasında config_defaultTextClassifierPackage belirterek özel bir metin sınıflandırıcı hizmetini uygulayabilirler. Bu yapılandırma belirtilmezse varsayılan sistem uygulaması kullanılır. Özel uygulamalar, TextClassifierService.getDefaultTextClassifierImplementation(Context) çağırarak varsayılan uygulamanın bir örneğini alabilir. Daha fazla bilgi için bkz. Özel bir metin sınıflandırma hizmeti uygulama .

Test yapmak

Metin sınıflandırma hizmeti uygulamanızı doğrulamak için platform/cts/tests/tests/textclassifier/ adresindeki Uyumluluk Test Paketi (CTS) testlerini kullanın.

Android 10 sürümü metin sınıflandırıcı geliştirmeleri

Android 10, TextClassifier API'sine iki yöntem sunar: suggestConversationActions ve detectLanguage . suggestConversationActions yöntemi belirli bir konuşmadan önerilen yanıtları ve eylemleri oluşturur ve detectLanguage yöntemi metnin dilini algılar.

Bu yöntemlerin model dosyaları aşağıda gösterilmiştir ve external/libtextclassifier/models/ içinde bulunabilir.

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

Fabrika görüntünüzde en son model dosyaları içeren bir cihazı serbest bırakmak için aşağıdakileri yapın:

  1. En son model dosyalarını getirin.

    external/libtextclassifier/models/update.sh
    
  2. İndirilen dosyaları mevcut dosyaların yerine geçecek şekilde yeniden adlandırın.
  3. Kurulumu doğrulayın.
    adb shell dumpsys textclassification
    

    Bu, söz konusu komutun çıktısının bir örneğidir.

    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 }
    

Android 9 sürümü metin sınıflandırıcı geliştirmeleri

Android 9 , Android 8.1'de sunulan metin sınıflandırma çerçevesini yeni metin sınıflandırma hizmetiyle genişletti. Metin sınıflandırıcı hizmeti, OEM'lerin metin sınıflandırma sistemi desteği sağlaması için önerilen yoldur. Metin sınıflandırma hizmeti herhangi bir sistem APK'sının parçası olabilir ve gerektiğinde güncellenebilir.

Android 9, özel bir metin sınıflandırıcı hizmet uygulamasıyla değiştirmediğiniz sürece kullanılan varsayılan bir metin sınıflandırıcı hizmet uygulamasını ( TextClassifierImpl ) içerir.

Özel bir metin sınıflandırma hizmeti uygulayın

Aşağıdaki bölümlerde geliştirdiğiniz özel bir metin sınıflandırıcı hizmetinin nasıl uygulanacağı açıklanmaktadır.

android.service.textclassifier.TextClassifierService'i genişletin

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

Hizmeti Android bildiriminde tanımlayın

[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>

Hizmetin android.permission.BIND_TEXTCLASSIFIER_SERVICE iznini gerektirmesi ve android.service.textclassifier.TextClassifierService niyet eylemini belirtmesi gerektiğini unutmayın.

Yapılandırma katmanında sistem varsayılan metin sınıflandırıcı hizmetini ayarlayın

[ yapılandırma.xml ]

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

Metin sınıflandırıcı hizmetini sistem görüntüsüne oluşturun

Özel metin sınıflandırma hizmetiniz, sistem görüntüsüne yerleşik bağımsız bir APK veya başka bir sistem APK'sının bir parçası olabilir. Sistem, hizmeti çözümlemek için PackageManager.MATCH_SYSTEM_ONLY kullanır.

Test yapmak

android.view.textclassifier.cts dosyasında testler çalıştırın.

Android 9'daki diğer metin sınıflandırma değişiklikleri

Kurulu dil modüllerinin incelenmesi konusuna bakın.

Android 9 model dosyaları, Android 8.x model dosyalarıyla uyumlu değildir.

Android 9 model dosyaları şu adlandırma düzenine sahiptir: Android 8.x'te textclassifier.smartselection.en.model yerine texclassifier.[language-code].model (örneğin, textclassifier.en.model ).

En son metin sınıflandırma modeli dosyalarını edinin

En güncel modelleri elde etmek için kaynak ağaçtaki TextClassifier modellerini güncelleyen aşağıdaki komut dosyası çalıştırılabilir:

external/libtextclassifier/native/models/update.sh

Android sürüm 8.1 metin sınıflandırıcı

Android 8.1, metin sınıflandırmasını uygulamak için TextClassfier API'sini tanıttı.

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

Geliştiriciler özel bir metin sınıflandırıcı ayarlayabilir:

tcm.setTextClassifier(customTextClassifier);

Ancak bir uygulama geliştiricisi metin sınıflandırıcısını null olarak ayarlarsa getTextClassifier() için sistem varsayılan metin sınıflandırıcısı döndürülür.

android.view.textclassifier.TextClassifierImpl bakın.

TextView ve WebView, akıllı seçim ve akıllı metin paylaşımı özellikleri için TextClassifier'ı kullanır.

Metin sınıflandırıcı kullanımı

Şekil 1. TextClassifier kullanımı

TextClassifier sinir ağı modelleri

Android Açık Kaynak Projesi (AOSP), metni sınıflandırmak için bir dizi sinir ağı modeline sahiptir. Her model dosyası tek bir dil için eğitilmiştir. Herhangi bir model kombinasyonunu kurabilirsiniz. Modeller şu şekilde tanımlanır:

external/libtextclassifier/Android.mk

Dil modellerini cihazlara önceden yükleyin

Bir dil modeli paketi belirtebilir ve bunları bir cihaza yükleyebilirsiniz:

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

Örneğin, device/google/marlin/device-common.mk içinde.

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

Kurulu dil modüllerini inceleyin

Dizindeki dosyaları listelemek için ADB'yi kullanın:

$ 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

Model güncellemeleri

Modeller, sistem görüntüsü güncellemesinin bir parçası olarak yeni bir modelin eklenmesiyle veya sistem API ACTION_UPDATE_SMART_SELECTION amacı aracılığıyla bir güncellemeyi tetikleyen bir sistem bileşeninin bulundurulmasıyla dinamik olarak güncellenebilir. Bu sistem API amacını yayınlayarak, çerçeve mevcut olarak ayarlanmış dilin dil modelini güncelleyebilir. Modellerin kendisi desteklenen dili ve sürüm numarasını içerir, böylece en son uygun model kullanılır.

Dolayısıyla tüm diller için modelleri önceden yüklemenize gerek yoktur çünkü bunlar daha sonra eklenebilmektedir. Belirtilen dil için model dosyası bulunamazsa, metin sınıflandırması işlem yapılmayan değerleri döndürür.

Uyumluluk Test Paketi testleri

İlgili Android Uyumluluk Test Paketi (CTS) testleri şurada bulunabilir:

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