La tarea de incorporador de texto te permite crear una representación numérica de los datos de texto para capturar su significado semántico. En estas instrucciones, se muestra cómo usar el Insertador de texto en apps para iOS.
Puedes ver esta tarea en acción en esta demo web. Para obtener más información sobre las funciones, 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 Text Embedder proporciona una implementación básica de una app para iOS que integra esta tarea. El ejemplo evalúa las similitudes semánticas entre dos textos y requiere un dispositivo iOS físico o un simulador de iOS.
Puedes usar la app como punto de partida para tu propia app para iOS o consultarla cuando modifiques una app existente. Puedes consultar el código de ejemplo de Text Embedder en GitHub.
Descarga el código
En las siguientes instrucciones, se muestra cómo crear una copia local del código de ejemplo con la herramienta de línea de comandos git.
Para descargar el código de ejemplo, sigue estos pasos:
Clona el repositorio de git con el siguiente comando:
git clone https://github.com/google-ai-edge/mediapipe-samples
De manera opcional, configura tu instancia de git para usar el control de revisión disperso, de modo que tengas solo los archivos de la app de ejemplo de Text Embedder:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/text_embedder/ios/
Después de crear una versión local del código de ejemplo, puedes instalar la biblioteca de tareas MediaPipe, abrir el proyecto con Xcode y ejecutar la app. Para obtener instrucciones, consulta la Guía de configuración para iOS.
Componentes clave
Los siguientes archivos contienen el código fundamental de la aplicación de ejemplo de Text Embedder:
- TextEmbedderService.swift: Inicializa la incorporación de texto y ejecuta inferencias en los datos de entrada.
- ViewController.swift: Implementa la IU y da formato a los resultados.
Configuración
En esta sección, se describen los pasos clave para configurar tu entorno de desarrollo y codificar proyectos para usar Text Embedder. Si deseas obtener información general sobre cómo configurar tu entorno de desarrollo para usar tareas de MediaPipe, incluidos los requisitos de la versión de la plataforma, consulta la Guía de configuración para iOS.
Dependencias
Text Embedder usa la biblioteca MediaPipeTasksText
, que se debe instalar con CocoaPods. La biblioteca es compatible con apps de Swift y Objective-C,
y no requiere ninguna configuración adicional específica del lenguaje.
Para obtener instrucciones para instalar CocoaPods en macOS, consulta la guía de instalación de CocoaPods.
Para obtener instrucciones sobre cómo crear un Podfile
con los pods necesarios para tu
app, consulta Cómo usar
CocoaPods.
Agrega el pod MediaPipeTasksText
en Podfile
con el siguiente código:
target 'MyTextEmbedderApp' do
use_frameworks!
pod 'MediaPipeTasksText'
end
Si tu app incluye destinos de pruebas de unidades, consulta la Guía de configuración para iOS para obtener información adicional sobre cómo configurar tu Podfile
.
Modelo
La tarea de incorporación de texto de MediaPipe requiere un modelo entrenado que sea compatible con esta tarea. Si deseas obtener más información sobre los modelos entrenados disponibles para la incorporación de texto, consulta la sección Modelos de descripción general de la tarea.
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 Cómo administrar archivos y carpetas en tu proyecto de Xcode.
Usa la propiedad BaseOptions.modelAssetPath
para especificar la ruta de acceso al modelo en tu paquete de aplicación. Para ver un ejemplo de código, consulta la siguiente sección.
Crea la tarea
Para crear la tarea de incorporación de texto, llama a uno de sus inicializadores. El inicializador TextEmbedder(options:)
acepta valores para las opciones de configuración.
Si no necesitas una incorporación de texto que se inicialice con opciones de configuración personalizadas, puedes usar el inicializador TextEmbedder(modelPath:)
para crear una incorporación de texto con las opciones predeterminadas. Para obtener más información sobre las opciones de 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 = TextEmbedderOptions()
options.baseOptions.modelAssetPath = modelPath
options.quantize = true
let textEmbedder = try TextEmbedder(options: options)
Objective-C
@import MediaPipeTasksText;
NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"model"
ofType:@"tflite"];
MPPTextEmbedderOptions *options = [[MPPTextEmbedderOptions alloc] init];
options.baseOptions.modelAssetPath = modelPath;
options.quantize = YES;
MPPTextEmbedder *textEmbedder =
[[MPPTextEmbedder alloc] initWithOptions:options error:nil];
Opciones de configuración
Esta tarea tiene las siguientes opciones de configuración para apps para iOS:
Nombre de la opción | Descripción | Rango de valores | Valor predeterminado |
---|---|---|---|
l2_normalize |
Indica si se debe normalizar el vector de características que se muestra con la norma L2. Usa esta opción solo si el modelo aún no contiene una operación nativa de TFLite L2_NORMALIZATION. En la mayoría de los casos, ya es así, y la normalización L2 se logra a través de la inferencia de TFLite sin necesidad de esta opción. | Boolean |
False |
quantize |
Indica si la incorporación que se muestra debe cuantizarse a bytes a través de la cuantización escalar. Se supone implícitamente que las incorporaciones tienen una norma de unidad y, por lo tanto, se garantiza que cualquier dimensión tenga un valor en [-1.0, 1.0]. Usa la opción l2_normalize si este no es el caso. | Boolean |
False |
Ejecuta la tarea
Para incorporar el texto de entrada y obtener sus vectores de incorporación, puedes usar el método embed(text:)
de TextEmbedder
.
Swift
let result = try textEmbedder.embed(text: text)
Objective-C
MPPTextEmbedderResult *result = [textEmbedder embedText: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 los frameworks Dispatch o NSOperation de iOS. Si tu app se creó con Swift, también puedes usar Swift Concurrency para la ejecución de subprocesos en segundo plano.
En el código de ejemplo, se llama al método embed(text:)
en el archivo TextEmbedderService.swift.
Cómo controlar y mostrar los resultados
Después de ejecutar la inferencia, la tarea de la incorporación de texto muestra un objeto TextEmbedderResult
que contiene una lista de incorporaciones (ya sea de punto flotante o cuantificadas por escalar) para el texto de entrada.
A continuación, se muestra un ejemplo de los datos de resultado de esta tarea:
TextEmbedderResult:
Embedding #0 (sole embedding head):
float_embedding: {0.2345f, 0.1234f, ..., 0.6789f}
head_index: 0
Puedes comparar la similitud semántica de dos incorporaciones con el método TextEmbedder.cosineSimilarity
.
Swift
let similarity = try TextEmbedder.cosineSimilarity( embedding1: result.embeddingResult.embeddings[0], embedding2: otherResult.embeddingResult.embeddings[0])
Objective-C
NSNumber *similarity = [MPPTextEmbedder cosineSimilarityBetweenEmbedding1:result.embeddingResult.embeddings[0] andEmbedding2:otherResult.embeddingResult.embeddings[0] error:nil];
En el código de ejemplo, se llama al método TextEmbedder.cosineSimilarity
en el archivo TextEmbedderService.swift.