Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Implementación de clasificador de texto

El clasificador de texto utiliza técnicas de aprendizaje automático para ayudar a los desarrolladores a clasificar el texto.

Clasificador de texto de lanzamiento de Android 11

Android 11 introduce una implementación por defecto actualizable del servicio de texto clasificador en el módulo de ExtServices . En dispositivos con Android 11 o superior, los getTextClassifier() método devuelve esta implementación por defecto en el módulo ExtServices. Se recomiendan los fabricantes de dispositivos para utilizar esta aplicación de TextClassifierService ya que se puede actualizar a través de actualizaciones OTA línea principal.

Android 11 elimina también la implementación por defecto de texto clasificador locales previamente introducida en Android 8.1 . Como resultado, getLocalTextClassifier() devuelve un NO_OP clasificador de texto. En lugar de la aplicación a nivel local, se debe utilizar el getDefaultTextClassifierImplementation() método.

Para los fabricantes de dispositivos que podrían querer utilizar sus propios algoritmos de clasificación de texto, que pueden poner en práctica un servicio de clasificador de texto personalizado especificando config_defaultTextClassifierPackage en el config.xml archivo. Si no se especifica esta configuración, se utiliza la implementación del sistema predeterminada. Implementaciones personalizadas pueden obtener una instancia de la aplicación por defecto llamando TextClassifierService.getDefaultTextClassifierImplementation(Context) . Para obtener más información, vea Implementación de un servicio de texto personalizado clasificador .

Pruebas

Para validar la implementación del servicio clasificador de texto, utilizar las pruebas del conjunto de pruebas de compatibilidad (CTS) en platform/cts/tests/tests/textclassifier/ .

Mejoras en el clasificador de texto de lanzamiento de Android 10

Android 10 introduce dos métodos para la API TextClassifier: suggestConversationActions y detectLanguage . El suggestConversationActions método genera respuestas y acciones sugeridas a partir de una conversación dada y la detectLanguage método detecta el idioma del texto.

Los archivos de modelo para estos métodos se muestran a continuación y se pueden encontrar en external/libtextclassifier/models/ .

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

Para lanzar un dispositivo con los archivos de modelo más recientes en su imagen de fábrica, haga lo siguiente:

  1. Obtenga los archivos del último modelo.

    external/libtextclassifier/models/update.sh
    
  2. Cambie el nombre de los archivos descargados para reemplazar los existentes.
  3. Verifique la configuración.
    adb shell dumpsys textclassification
    

    Esta es una muestra del resultado de ese comando.

    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 }
    

Mejoras en el clasificador de texto de la versión de Android 9

Android 9 amplió el marco de clasificación de texto introducida en Android 8.1 con el nuevo servicio de texto clasificador. El servicio de clasificador de texto es la forma recomendada para que los fabricantes de equipos originales proporcionen compatibilidad con el sistema de clasificación de texto. El servicio de clasificador de texto puede formar parte de cualquier APK del sistema y puede actualizarse cuando sea necesario.

Android 9 incluye una implementación de servicio clasificador de texto predeterminado ( TextClassifierImpl ) que se utiliza a menos que se sustituya por una implementación de servicio clasificador de texto personalizado.

Implementar un servicio de clasificador de texto personalizado

Las siguientes secciones describen cómo implementar un servicio de clasificador de texto personalizado que desarrolle.

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

Definir el servicio en el manifiesto de 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>

Tenga en cuenta que el servicio debe requerir la android.permission.BIND_TEXTCLASSIFIER_SERVICE permiso y debe especificar el android.service.textclassifier.TextClassifierService acción intención.

Establecer un servicio de clasificador de texto predeterminado del sistema en la superposición de configuración

[Config.xml]

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

Construya el servicio de clasificador de texto en la imagen del sistema

Su servicio de clasificador de texto personalizado puede ser un APK independiente integrado en la imagen del sistema o como parte de otro APK del sistema. El sistema utiliza PackageManager.MATCH_SYSTEM_ONLY para resolver el servicio.

Pruebas

Ejecutar pruebas en android.view.textclassifier.cts .

Otros cambios de clasificación de texto en Android 9

Consulte la Inspección de módulos de idiomas instalados .

Los archivos de modelo de Android 9 son incompatibles con los archivos de modelo de Android 8.x.

Android 9 archivos de modelo tienen el patrón de nomenclatura: texclassifier.[language-code].model (por ejemplo, textclassifier.en.model ) en lugar de textclassifier.smartselection.en.model en 8.x Android

Obtener los archivos de modelo de clasificación de texto más recientes

Para obtener los modelos más actualizados, se puede ejecutar el siguiente script, que actualiza los modelos TextClassifier en el árbol de origen:

external/libtextclassifier/native/models/update.sh

Clasificador de texto de la versión 8.1 de Android

Android 8.1 introdujo la API TextClassfier para implementar la clasificación de texto.

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

Los desarrolladores pueden establecer un clasificador de texto personalizado:

tcm.setTextClassifier(customTextClassifier);

Pero si un desarrollador de aplicaciones establece el clasificador de texto a null , un texto por defecto del sistema clasificador se devuelve para getTextClassifier() .

Ver android.view.textclassifier.TextClassifierImpl .

TextView y WebView utilizan TextClassifier para la selección inteligente y las funciones de compartir texto inteligente.

Uso del clasificador de texto

El uso de la Figura 1. TextClassifier

Modelos de red neuronal TextClassifier

El Proyecto de código abierto de Android (AOSP) presenta una serie de modelos de redes neuronales para clasificar texto. Cada archivo de modelo está entrenado para un solo idioma. Puede instalar cualquier combinación de modelos. Los modelos se definen en:

external/libtextclassifier/Android.mk

Preinstalación de modelos de idiomas en dispositivos

Puede especificar un paquete de modelos de idiomas e instalarlos en un dispositivo:

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

Por ejemplo, en device/google/marlin/device-common.mk .

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

Inspeccionar los módulos de idioma instalados

Use ADB para listar los archivos en el directorio:

$ 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

Actualizaciones de modelos

Los modelos pueden ser actualizados, ya sea por tener un nuevo modelo incluido como parte de una actualización de la imagen del sistema, o dinámicamente por tener un componente del sistema que activa una actualización a través del sistema API ACTION_UPDATE_SMART_SELECTION intención. Al transmitir la intención de la API de este sistema, el marco puede actualizar el modelo de idioma del idioma establecido actualmente. Los modelos en sí contienen el idioma admitido y un número de versión, por lo que se utiliza el último modelo apropiado.

Por lo tanto, no necesita precargar modelos para todos los idiomas porque se pueden agregar más tarde. Si no se encuentra ningún archivo de modelo para el idioma especificado, la clasificación de texto devuelve valores no operativos.

Pruebas de Compatibility Test Suite

Las pruebas de Android Compatibility Test Suite (CTS) asociadas se pueden encontrar en:

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