Guía de clasificación de texto para iOS

La tarea Clasificador de texto te permite clasificar texto en un conjunto de categorías definidas, como opiniones positivas o negativas. Las categorías se determinan en función de cuál es el modelo que usas y cómo se entrenó. Estas instrucciones te muestran cómo usar el clasificador de texto en apps para iOS. El ejemplo de código que se describe en estas están disponibles en GitHub:

Puedes ver esta tarea en acción viendo este sitio web demo. Para más información sobre las capacidades, los modelos y las opciones de configuración de esta tarea, consulta la Descripción general.

Ejemplo de código

El código de ejemplo de MediaPipe Tasks es una implementación básica de un clasificador de texto para iOS.

Puedes usar la app como punto de partida para tu propia app para iOS o hacer referencia a ella. cuando se modifica una app existente. Puedes consultar el código de ejemplo del clasificador de texto activado GitHub:

Descarga el código

En las siguientes instrucciones, se muestra cómo crear una copia local del ejemplo con la herramienta de línea de comandos git.

Para descargar el código de ejemplo, haz lo siguiente:

  1. Clona el repositorio de Git con el siguiente comando:

    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. De forma opcional, configura tu instancia de Git para que use un método de confirmación de la compra disperso solo los archivos de la app de ejemplo del clasificador de texto:

    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/text_classification/ios/
    

Después de crear una versión local del código de ejemplo, puedes instalar el MediaPipe, abre el proyecto con Xcode y ejecuta la app. Para consulta la Guía de configuración para iOS.

Componentes clave

Los siguientes archivos contienen el código crucial para el ejemplo del clasificador de texto aplicación:

Configuración

En esta sección, se describen los pasos clave para configurar tu entorno de desarrollo y proyectos de código para usar Text Classifier. Para obtener información general sobre cómo configurar tu entorno de desarrollo para usar tareas de MediaPipe, incluida la versión de la plataforma consulta la Guía de configuración para iOS.

Dependencias

El clasificador de texto usa la biblioteca MediaPipeTasksText, que debe instalarse con CocoaPods. La biblioteca es compatible con apps de Swift y Objective-C y no requiere ninguna configuración adicional específica de idioma.

Si necesitas instrucciones para instalar CocoaPods en macOS, consulta los CocoaPods guía de instalación. Obtén instrucciones para crear un Podfile con los Pods necesarios para tu consulta Cómo usar CocoaPods.

Agrega el Pod MediaPipeTasksText en Podfile con el siguiente código:

target 'MyTextClassifierApp' do
  use_frameworks!
  pod 'MediaPipeTasksText'
end

Si tu app incluye objetivos de prueba de unidades, consulta la Guía de configuración de iOS para obtener más información sobre la configuración tu Podfile.

Modelo

La tarea del clasificador de texto MediaPipe requiere un modelo entrenado que sea compatible con esta tarea. Si deseas obtener más información sobre los modelos entrenados disponibles para Clasificador de texto, consulta la descripción general de la tarea Modelos .

Selecciona y descarga un modelo, y agrégalo al directorio de tu proyecto con Xcode. Para obtener instrucciones sobre cómo agregar archivos a tu proyecto de Xcode, consulta Administra archivos y carpetas en tu código proyecto.

Usa la propiedad BaseOptions.modelAssetPath para especificar la ruta al modelo. del paquete de aplicación. Para ver un ejemplo de código, consulta la siguiente sección.

Crea la tarea

Puedes crear la tarea del clasificador de texto llamando a uno de sus inicializadores. El El inicializador TextClassifier(options:) establece valores para la configuración opciones de estado.

Si no necesitas un clasificador de texto que se inicialice con una configuración personalizada puedes usar el inicializador TextClassifier(modelPath:) para crear un Clasificador de texto con las opciones predeterminadas. Para obtener más información sobre la configuración consulta Descripción general de la configuración.

En el siguiente código, se muestra cómo compilar y configurar esta tarea.

Swift

import MediaPipeTasksText

let modelPath = Bundle.main.path(forResource: "model",
                                      ofType: "tflite")

let options = TextClassifierOptions()
options.baseOptions.modelAssetPath = modelPath
options.scoreThreshold = 0.6

let textClassifier = try TextClassifier(options: options)

Objective-C

@import MediaPipeTasksText;

NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"model"
                                                      ofType:@"tflite"];

MPPTextClassifierOptions *options = [[MPPTextClassifierOptions alloc] init];
options.baseOptions.modelAssetPath = modelPath;
options.scoreThreshold = 0.6;

MPPTextClassifier *textClassifier =
      [[MPPTextClassifier alloc] initWithOptions:options error:nil];

Opciones de configuración

Esta tarea tiene las siguientes opciones de configuración para las apps para iOS:

Nombre de la opción Descripción Rango de valores Valor predeterminado
displayNamesLocale Configura el idioma de las etiquetas que se usarán para los nombres visibles que se proporcionan en la metadatos del modelo de la tarea, si están disponibles. El valor predeterminado es en para Inglés. Puedes agregar etiquetas localizadas a los metadatos de un modelo personalizado con la API de Metadata Writer de TensorFlow Lite Código de configuración regional en
maxResults Establece el número máximo opcional de resultados de la clasificación con puntuación más alta en el resultado. Si < 0, se devolverán todos los resultados disponibles. Cualquier número positivo -1
scoreThreshold Establece el umbral de puntuación de predicción que anula el que se proporciona en los metadatos del modelo (si los hay). Se rechazarán los resultados por debajo de este valor. Cualquier número de punto flotante Sin establecer
categoryAllowlist Establece la lista opcional de nombres de categorías permitidas. Si no está vacío, los resultados de clasificación cuyo nombre de categoría no se encuentre en este conjunto serán filtrado. Se ignoran los nombres de categoría duplicados o desconocidos. Esta opción es mutuamente excluyente con categoryDenylist y usa ambos darán como resultado un error. Cualquier cadena Sin establecer
categoryDenylist Establece la lista opcional de nombres de categorías que no están permitidos. Si no vacío, los resultados de clasificación cuyo nombre de categoría se encuentre en este conjunto se filtrarán y sale de ella. Se ignoran los nombres de categoría duplicados o desconocidos. Esta opción es mutuamente excluyente con categoryAllowlist y usar ambos dará como resultado un error. Cualquier cadena Sin establecer

Preparar los datos

El clasificador de texto funciona con datos de texto. La tarea maneja la entrada de datos el procesamiento previo, incluida la asignación de token y el procesamiento previo del tensor.

Todo el procesamiento previo se controla dentro de la función classify(text:). No hay un procesamiento previo adicional del texto de entrada.

Swift

let text = "The input text to be classified."

Objective-C

NSString *text = @"The input text to be classified.";

Ejecuta la tarea

Para ejecutar el clasificador de texto, usa el método classify(text:). El clasificador de texto devuelve las posibles categorías para el texto de entrada.

Swift

let result = try textClassifier.classify(text: text)

Objective-C

MPPTextClassifierResult *result = [textClassifier classifyText:text
                                                          error:nil];

Nota: La tarea bloquea el subproceso actual hasta que termina de ejecutar la inferencia en el texto. Para evitar bloquear el subproceso actual, ejecuta el procesamiento en un subproceso en segundo plano con iOS Despachador o NSOperation de seguridad en la nube.

Cómo controlar y mostrar resultados

Después de ejecutar la inferencia, la tarea del clasificador de texto muestra un TextClassifierResult. que contiene la lista de categorías posibles para el texto de entrada. El las categorías se definen según el modelo que uses, así que si quieres que elegir un modelo diferente o volver a entrenar uno existente.

A continuación, se muestra un ejemplo de los datos de salida de esta tarea:

TextClassificationResult:
  Classification #0 (single classification head):
    ClassificationEntry #0:
      Category #0:
        category name: "positive"
        score: 0.8904
        index: 0
      Category #1:
        category name: "negative"
        score: 0.1096
        index: 1

Este resultado se obtuvo mediante la ejecución del clasificador de BERT en el texto de entrada: "an imperfect but overall entertaining mystery"

El ViewController.swift en el código de ejemplo demuestra cómo mostrar los resultados de la detección que se muestran en la tarea.