Los incrustadores de texto permiten incrustar texto en un vector de características de alta dimensión que representa su significado semántico, que luego se puede comparar con el vector de características de otros textos para evaluar su similitud semántica.
A diferencia de la búsqueda de texto , el incrustador de texto permite calcular la similitud entre textos sobre la marcha en lugar de buscar a través de un índice predefinido creado a partir de un corpus.
Utilice la API TextEmbedder
de la biblioteca de tareas para implementar su incrustador de texto personalizado en sus aplicaciones móviles.
Características clave de la API TextEmbedder
Procesamiento de texto de entrada, incluidas tokenizaciones de Wordpiece o Sentencepiece dentro o fuera del gráfico en el texto de entrada.
Función de utilidad incorporada para calcular la similitud del coseno entre vectores de características.
Modelos de incrustación de texto compatibles
Se garantiza que los siguientes modelos serán compatibles con la API TextEmbedder
.
El modelo TFLite del codificador universal de oraciones de TensorFlow Hub
Modelos personalizados que cumplen con los requisitos de compatibilidad de modelos .
Ejecutar inferencia en C++
// Initialization.
TextEmbedderOptions options:
options.mutable_base_options()->mutable_model_file()->set_file_name(model_path);
std::unique_ptr<TextEmbedder> text_embedder = TextEmbedder::CreateFromOptions(options).value();
// Run inference with your two inputs, `input_text1` and `input_text2`.
const EmbeddingResult result_1 = text_embedder->Embed(input_text1);
const EmbeddingResult result_2 = text_embedder->Embed(input_text2);
// Compute cosine similarity.
double similarity = TextEmbedder::CosineSimilarity(
result_1.embeddings[0].feature_vector()
result_2.embeddings[0].feature_vector());
Consulte el código fuente para obtener más opciones para configurar TextEmbedder
.
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_embedder = text.TextEmbedder.create_from_file(model_path)
# Run inference on two texts.
result_1 = text_embedder.embed(text_1)
result_2 = text_embedder.embed(text_2)
# Compute cosine similarity.
feature_vector_1 = result_1.embeddings[0].feature_vector
feature_vector_2 = result_2.embeddings[0].feature_vector
similarity = text_embedder.cosine_similarity(
result_1.embeddings[0].feature_vector, result_2.embeddings[0].feature_vector)
Consulte el código fuente para obtener más opciones para configurar TextEmbedder
.
Resultados de ejemplo
La similitud de coseno entre vectores de características normalizados devuelve una puntuación entre -1 y 1. Cuanto más alto, mejor, es decir, una similitud de coseno de 1 significa que los dos vectores son idénticos.
Cosine similarity: 0.954312
Pruebe la sencilla herramienta de demostración CLI para TextEmbedder con su propio modelo y datos de prueba.
Requisitos de compatibilidad del modelo
La API TextEmbedder
espera un modelo TFLite con metadatos del modelo TFLite obligatorios.
Se admiten tres tipos principales de modelos:
Modelos basados en BERT (consulte el código fuente para más detalles):
Exactamente 3 tensores de entrada (kTfLiteString)
- Tensor de ID, con nombre de metadatos "ids",
- Tensor de máscara, con nombre de metadatos "máscara".
- Tensor de ID de segmento, con nombre de metadatos "segment_ids"
Exactamente un tensor de salida (kTfLiteUInt8/kTfLiteFloat32)
- con
N
componentes correspondientes a lasN
dimensiones del vector de características devuelto para esta capa de salida. - 2 o 4 dimensiones, es decir
[1 x N]
o[1 x 1 x 1 x N]
.
- con
Un input_process_units para Wordpiece/Sentencepiece Tokenizer
Modelos basados en Universal Sentence Encoder (consulte el código fuente para obtener más detalles):
Exactamente 3 tensores de entrada (kTfLiteString)
- Tensor de texto de consulta, con nombre de metadatos "inp_text".
- Tensor de contexto de respuesta, con nombre de metadatos "res_context".
- Tensor de texto de respuesta, con nombre de metadatos "res_text".
Exactamente 2 tensores de salida (kTfLiteUInt8/kTfLiteFloat32)
- Tensor de codificación de consulta, con nombre de metadatos "query_encoding".
- Tensor de codificación de respuesta, con nombre de metadatos "response_encoding".
- Ambos con
N
componentes correspondientes a lasN
dimensiones del vector de características devuelto para esta capa de salida. - Ambos con 2 o 4 dimensiones, es decir,
[1 x N]
o[1 x 1 x 1 x N]
.
Cualquier modelo de incrustación de texto con:
- Un tensor de texto de entrada (kTfLiteString)
Al menos un tensor de incrustación de salida (kTfLiteUInt8/kTfLiteFloat32)
- con
N
componentes correspondientes a lasN
dimensiones del vector de características devuelto para esta capa de salida. - 2 o 4 dimensiones, es decir
[1 x N]
o[1 x 1 x 1 x N]
.
- con