Integrar buscadores de texto

La búsqueda de texto permite buscar texto semánticamente similar en un corpus. Funciona incorporando la consulta de búsqueda en un vector de alta dimensión que representa el significado semántico de la consulta, seguido de una búsqueda de similitud en un índice personalizado predefinido utilizando ScaNN (vecinos más cercanos escalables).

A diferencia de la clasificación de texto (por ejemplo, el clasificador de lenguaje natural Bert ), ampliar la cantidad de elementos que se pueden reconocer no requiere volver a entrenar todo el modelo. Se pueden agregar nuevos elementos simplemente reconstruyendo el índice. Esto también permite trabajar con corpus más grandes (más de 100.000 elementos).

Utilice la API TextSearcher de la biblioteca de tareas para implementar su buscador de texto personalizado en sus aplicaciones móviles.

Características clave de la API TextSearcher

  • Toma una sola cadena como entrada, realiza extracción de incrustación y búsqueda del vecino más cercano en el índice.

  • Procesamiento de texto de entrada, incluidas tokenizaciones de Wordpiece o Sentencepiece dentro o fuera del gráfico en el texto de entrada.

Requisitos previos

Antes de utilizar la API TextSearcher , es necesario crear un índice basado en el corpus de texto personalizado para buscar. Esto se puede lograr utilizando Model Maker Searcher API siguiendo y adaptando el tutorial .

Para esto necesitarás:

  • un modelo de incrustación de texto TFLite, como el Codificador de oraciones universal. Por ejemplo,
    • el que se volvió a entrenar en este Colab , que está optimizado para la inferencia en el dispositivo. Solo se necesitan 6 ms para consultar una cadena de texto en Pixel 6.
    • el cuantificado , que es más pequeño que el anterior pero tarda 38 ms en cada incorporación.
  • su corpus de texto.

Después de este paso, debería tener un modelo de búsqueda TFLite independiente (por ejemplo, mobilenet_v3_searcher.tflite ), que es el modelo de incrustación de texto original con el índice adjunto a los metadatos del modelo TFLite .

Ejecutar inferencia en Java

Paso 1: importar la dependencia de Gradle y otras configuraciones

Copie el archivo del modelo del buscador .tflite en el directorio de activos del módulo de Android donde se ejecutará el modelo. Especifique que el archivo no debe comprimirse y agregue la biblioteca 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 (NNAPI is included)
    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: 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);

Consulte el código fuente y javadoc para obtener más opciones para configurar TextSearcher .

Ejecutar 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();

Consulte el código fuente para obtener más opciones para configurar TextSearcher .

Ejecutar inferencia en Python

Paso 1: Instale el paquete Pypi de soporte de TensorFlow Lite.

Puede instalar el paquete Pypi de soporte de TensorFlow Lite usando el siguiente comando:

pip install tflite-support

Paso 2: 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)

Consulte 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

Pruebe la sencilla herramienta de demostración CLI para TextSearcher con su propio modelo y datos de prueba.