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:
Clona el repositorio de Git con el siguiente comando:
git clone https://github.com/google-ai-edge/mediapipe-samples
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:
- TextClassifierHelper.swift: Inicializa el clasificador de texto y controla la selección del modelo.
- ViewController.swift: Implementa la IU y formatea los resultados.
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.