La búsqueda de texto permite buscar texto semánticamente similar en un corpus. Para ello, incorpora la búsqueda en un vector de alta dimensión que representa el significado semántico de la búsqueda y, luego, realiza una búsqueda de similitud en un índice personalizado predefinido con ScaNN (vecinos más cercanos escalables).
A diferencia de la clasificación de texto (p.ej., el clasificador de lenguaje natural de BERT), expandir la cantidad de elementos que se pueden reconocer no requiere volver a entrenar todo el modelo. Se pueden agregar elementos nuevos simplemente volviendo a compilar el índice. Esto también permite trabajar con corpus más grandes (más de 100,000 elementos).
Usa la API de la biblioteca de tareas TextSearcher para implementar tu buscador de texto personalizado en tus apps para dispositivos móviles.
Funciones clave de la API de TextSearcher
Toma una sola cadena como entrada, realiza la extracción de la incorporación y la búsqueda del vecino más cercano en el índice.
Procesamiento de texto de entrada, incluidas las tokenizaciones Wordpiece o Sentencepiece dentro o fuera del gráfico en el texto de entrada
Requisitos previos
Antes de usar la API de TextSearcher, se debe compilar un índice basado en el corpus de texto personalizado en el que se realizará la búsqueda. Esto se puede lograr con la API de Model Maker Searcher si sigues y adaptas el instructivo.
Para ello, necesitarás lo siguiente:
- Un modelo de incorporación de texto de TFLite, como el Universal Sentence Encoder Por ejemplo,
- El uno se volvió a entrenar en este Colab y está optimizado para la inferencia en el dispositivo. Solo se necesitan 6 ms para consultar una cadena de texto en el Pixel 6.
- la cuantificada, que es más pequeña que la anterior, pero tarda 38 ms para cada incorporación.
- tu corpus de texto.
Después de este paso, deberías tener un modelo de búsqueda de TFLite independiente (p.ej., mobilenet_v3_searcher.tflite), que es el modelo de incorporación de texto original con el índice adjunto en los metadatos del modelo de TFLite.
Ejecuta la inferencia en Java
Paso 1: Importa la dependencia de Gradle y otros parámetros de configuración
Copia el archivo del modelo de búsqueda .tflite en el directorio de recursos del módulo de Android en el que se ejecutará el modelo. Especifica que el archivo no se debe comprimir y agrega la biblioteca de TensorFlow Lite al archivo build.gradle del módulo:
android {
// Other settings
// Specify tflite index file should not be compressed for the app apk
aaptOptions {
noCompress "tflite"
}
}
dependencies {
// Other dependencies
// Import the Task Vision Library dependency
implementation 'org.tensorflow:tensorflow-lite-task-vision:0.4.4'
// Import the GPU delegate plugin Library for GPU inference
implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin:0.4.4'
}
Paso 2: Cómo usar el modelo
// Initialization
TextSearcherOptions options =
TextSearcherOptions.builder()
.setBaseOptions(BaseOptions.builder().useGpu().build())
.setSearcherOptions(
SearcherOptions.builder().setL2Normalize(true).build())
.build();
TextSearcher textSearcher =
textSearcher.createFromFileAndOptions(context, modelFile, options);
// Run inference
List<NearestNeighbor> results = textSearcher.search(text);
Consulta el código fuente y el Javadoc para obtener más opciones para configurar TextSearcher.
Ejecuta la inferencia en C++
// Initialization
TextSearcherOptions options;
options.mutable_base_options()->mutable_model_file()->set_file_name(model_path);
options.mutable_embedding_options()->set_l2_normalize(true);
std::unique_ptr<TextSearcher> text_searcher = TextSearcher::CreateFromOptions(options).value();
// Run inference with your input, `input_text`.
const SearchResult result = text_searcher->Search(input_text).value();
Consulta el código fuente para obtener más opciones para configurar TextSearcher.
Ejecuta la inferencia en Python
Paso 1: Instala el paquete Pypi de compatibilidad con TensorFlow Lite.
Puedes instalar el paquete de Pypi de TensorFlow Lite Support con el siguiente comando:
pip install tflite-support
Paso 2: Cómo usar el modelo
from tflite_support.task import text
# Initialization
text_searcher = text.TextSearcher.create_from_file(model_path)
# Run inference
result = text_searcher.search(text)
Consulta el código fuente para obtener más opciones para configurar TextSearcher.
Resultados de ejemplo
Results:
Rank#0:
metadata: The sun was shining on that day.
distance: 0.04618
Rank#1:
metadata: It was a sunny day.
distance: 0.10856
Rank#2:
metadata: The weather was excellent.
distance: 0.15223
Rank#3:
metadata: The cat is chasing after the mouse.
distance: 0.34271
Rank#4:
metadata: He was very happy with his newly bought car.
distance: 0.37703
Prueba la sencilla herramienta de demostración de la CLI para TextSearcher con tu propio modelo y datos de prueba.