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

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

Android 11'de metin sınıflandırıcıyı kullanıma sunma

Android 11, ExtServices modülünde metin sınıflandırıcı hizmetinin güncellenebilir varsayılan uygulamasını sunar. Android 11 veya sonraki sürümlerin yüklü olduğu cihazlarda getTextClassifier() yöntemi, ExtServices modülünde bu varsayılan uygulamayı döndürür. Cihaz üreticilerinin, Mainline OTA güncellemeleri aracılığıyla güncellenebildiği için TextClassifierService'nın bu uygulamasını kullanmaları önerilir.

Android 11, Android 8.1'de daha önce kullanıma sunulan yerel metin sınıflandırıcı varsayılan uygulamasını da kaldırıyor. Sonuç olarak, getLocalTextClassifier() 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 isteyen cihaz üreticileri, config.xml dosyasında config_defaultTextClassifierPackage belirterek özel bir 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) çağrısı yaparak 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ı hizmetinin uygulamanızı doğrulamak için platform/cts/tests/tests/textclassifier/ bölümündeki Compatibility Test Suite (CTS) testlerini kullanın.

Android 10'da metin sınıflandırıcı geliştirmeleri

Android 10, TextClassifier API'ye iki yöntem ekler: suggestConversationActions ve detectLanguage. suggestConversationActions yöntemi, belirli bir görüşmeden ö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/ içinde bulunabilir.

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

Fabrika imajınızda en yeni model dosyalarını içeren bir cihaz yayınlamak için aşağıdakileri yapın:

  1. En yeni model dosyalarını getirin.

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

    Bu, söz konusu 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'da metin sınıflandırıcı geliş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ğlamak için kullanması önerilen yöntemdir. 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 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 manifest dosyasında 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 amaçlı işlemi belirtmesi gerektiğini unutmayın.

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

[config.xml]

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

Metin sınıflandırıcı hizmetini sistem görüntüsüne yerleştirme

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

Test

android.view.textclassifier.cts'da testler yapın.

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

Yüklü dil modüllerini inceleme başlıklı makaleyi inceleyin.

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

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

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

En güncel modelleri edinmek 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 8.1 metin sınıflandırıcısı

Android 8.1, metin sınıflandırması uygulamak için TextClassifier 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 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ı

1. şekil. TextClassifier kullanımı

TextClassifier nöral ağ modelleri

Android Açık Kaynak Projesi (AOSP), metinleri sınıflandırmak için çeşitli nöral ağ modelleri içerir. Her model dosyası tek bir dil için eğitilir. İstediğiniz model kombinasyonunu yükleyebilirsiniz. Modeller şu konumlarda tanımlanır:

external/libtextclassifier/Android.mk

Cihazlara önceden dil modelleri yükleme

Bir dil modeli paketi belirleyip bunları 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 görüntüsü güncellemesinin bir parçası olarak yeni bir model eklenerek veya sistem API ACTION_UPDATE_SMART_SELECTION niyeti aracılığıyla bir güncellemeyi tetikleyen bir sistem bileşeni kullanılarak dinamik olarak güncellenebilir. Bu sistem API amacını yayınlayarak çerçeve, şu anda ayarlanan dilin dil modelini güncelleyebilir. Modellerin kendileri, desteklenen dili ve sürüm numarasını içerir. Böylece, en uygun model kullanılır.

Bu nedenle, daha sonra eklenebilecekleri için tüm dillerdeki modelleri önceden yüklemeniz gerekmez. Belirtilen dil için model dosyası bulunamazsa metin sınıflandırma, no-op değerleri döndürür.

Compatibility Test Suite testleri

İlişkili Android Uyumluluk Test Paketi (CTS) testlerini şu kaynaklarda 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