Metin sınıflandırıcı 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ı

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

Android 11, daha önce Android 8.1'de kullanıma sunulan yerel metin sınıflandırıcının varsayılan uygulamasını da kaldırır. Sonuç olarak, getLocalTextClassifier() NO_OP metin sınıflandırıcısı döndürülür. Yerel uygulama yerine getDefaultTextClassifierImplementation() yöntemini kullanmalısınız.

Kendi metin sınıflandırma algoritmalarını kullanmak isteyen cihaz üreticileri, config.xml dosyasında config_defaultTextClassifierPackage değerini belirterek özel metin sınıflandırıcı hizmeti uygulayabilir. Bu yapılandırma belirtilmezse varsayılan sistem uygulaması kullanılır. Özel uygulamalar, TextClassifierService.getDefaultTextClassifierImplementation(Context) yöntemini çağırarak varsayılan uygulamanın bir örneğini alabilir. Daha fazla bilgi için Özel metin sınıflandırıcı hizmeti uygulama başlıklı makaleyi inceleyin.

Test

Metin sınıflandırıcı hizmetini uygulamanızı doğrulamak için platform/cts/tests/tests/textclassifier/'daki Compatibility Test Suite (CTS) testlerini kullanın.

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

Android 10, TextClassifier API'ye iki yöntem sunar: suggestConversationActions ve detectLanguage. suggestConversationActions yöntemi, belirli bir sohbetten önerilen yanıtlar ve işlemler oluşturur. detectLanguage yöntemi ise metnin dilini algılar.

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

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

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

  1. En son model dosyalarını alın.

    external/libtextclassifier/models/update.sh
    
  2. İndirilen dosyaları, mevcut dosyaları yenisiyle değiştirecek şekilde yeniden adlandırın.
  3. Kurulumu doğrulayın.
    adb shell dumpsys textclassification
    

    Bu, ilgili komutun çıkışı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ünde metin sınıflandırıcı iyileştirmeleri

Android 9, Android 8.1'de kullanıma sunulan metin sınıflandırma çerçevesini yeni metin sınıflandırıcı 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ırıcı 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ı hizmeti uygulamasıyla değiştirmediğiniz sürece kullanılan varsayılan bir metin sınıflandırıcı hizmeti uygulaması ( TextClassifierImpl) içerir.

Özel metin sınıflandırıcı hizmeti uygulama

Aşağıdaki bölümlerde, geliştirdiğiniz özel 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 manifest dosyasında tanımlama

[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 intent işlemini belirtmesi gerektiğini unutmayın.

Yapılandırma yer paylaşımında sistem varsayılan metin sınıflandırıcı hizmeti ayarlama

[config.xml]

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

Metin sınıflandırıcı hizmetini sistem resmine yerleştirme

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

Test

android.view.textclassifier.cts'te testler çalıştırın.

Android 9'da metin sınıflandırmayla ilgili diğer değişiklikler

Yüklü dil modüllerini inceleme bölümüne bakın.

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

Android 9 model dosyalarının adlandırma kalıbı, Android 8.x'teki textclassifier.smartselection.en.model yerine texclassifier.[language-code].model (örneğin, textclassifier.en.model) şeklindedir.

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

En güncel modelleri elde etmek için aşağıdaki komut dosyası çalıştırılabilir. Bu komut dosyası, kaynak ağacındaki TextClassifier modellerini günceller:

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ırmayı uygulamak için TextClassfier API'yi kullanıma sundu.

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ştirici metin sınıflandırıcıyı null olarak ayarlarsa getTextClassifier() için bir sistem varsayılan metin sınıflandırıcı 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 nöral ağ modelleri

Android Açık Kaynak Projesi (AOSP), metin sınıflandırmak için bir dizi nöral ağ modeline sahiptir. Her model dosyası tek bir dil için eğitilir. Herhangi bir model kombinasyonunu yükleyebilirsiniz. Modeller şu yerlerde tanımlanır:

external/libtextclassifier/Android.mk

Dil modellerini cihazlara önceden yükle

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.

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

Yüklü dil modüllerini inceleme

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 resmi güncellemesi kapsamında yeni bir model ekleyerek veya sistem API ACTION_UPDATE_SMART_SELECTIONintent'i aracılığıyla güncellemeyi tetikleyen bir sistem bileşeni ekleyerek dinamik olarak güncellenebilir. Çerçeve, bu sistem API amacını yayınlayarak şu anda ayarlanmış olan dilin dil modelini güncelleyebilir. Modeller, desteklenen dili ve bir sürüm numarasını içerir. Böylece, en uygun model kullanılır.

Bu nedenle, daha sonra eklenebilirler. Bu nedenle, tüm diller için modelleri önceden yüklemeniz gerekmez. Belirtilen dil için model dosyası bulunamazsa metin sınıflandırması işlem yapmaz.

Compatibility Test Suite testleri

İlgili Android Compatibility Test Suite (CTS) testlerini şu adreslerde bulabilirsiniz:

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