Embedders de texto permitem incorporar texto em um vetor de recursos de alta dimensão representando seu significado semântico, que pode ser comparado com o vetor de recursos de outros textos para avaliar sua semelhança semântica.
Ao contrário da pesquisa de texto , o text embedder permite calcular a semelhança entre os textos em tempo real, em vez de pesquisar através de um índice predefinido construído a partir de um corpus.
Use a API TextEmbedder
da Biblioteca de Tarefas para implantar seu embedder de texto personalizado em seus aplicativos móveis.
Principais recursos da API TextEmbedder
Processamento de texto de entrada, incluindo tokenizações do Wordpiece ou do Sentencepiece dentro ou fora do gráfico no texto de entrada.
Função de utilidade embutida para calcular a similaridade de cosseno entre vetores de recursos.
Modelos de incorporação de texto compatíveis
Os modelos a seguir são compatíveis com a API TextEmbedder
.
O modelo TFLite do Universal Sentence Encoder do TensorFlow Hub
Modelos personalizados que atendem aos requisitos de compatibilidade do modelo .
Executar inferência em 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 o código-fonte para obter mais opções para configurar o TextEmbedder
.
Executar inferência em Python
Etapa 1: instale o pacote Pypi de suporte do TensorFlow Lite.
Você pode instalar o pacote Pypi do TensorFlow Lite Support usando o seguinte comando:
pip install tflite-support
Etapa 2: usando o 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 o código-fonte para obter mais opções para configurar o TextEmbedder
.
Resultados de exemplo
A similaridade de cosseno entre vetores de características normalizados retorna uma pontuação entre -1 e 1. Quanto maior, melhor, ou seja, uma similaridade de cosseno de 1 significa que os dois vetores são idênticos.
Cosine similarity: 0.954312
Experimente a ferramenta de demonstração CLI simples para TextEmbedder com seu próprio modelo e dados de teste.
Requisitos de compatibilidade do modelo
A API TextEmbedder
espera um modelo TFLite com metadados de modelo TFLite obrigatórios.
Três tipos principais de modelos são suportados:
Modelos baseados em BERT (consulte o código-fonte para mais detalhes):
Exatamente 3 tensores de entrada (kTfLiteString)
- Tensor de IDs, com nome de metadados "ids",
- Tensor de máscara, com nome de metadados "mask".
- Tensor de IDs de segmento, com nome de metadados "segment_ids"
Exatamente um tensor de saída (kTfLiteUInt8/kTfLiteFloat32)
- com
N
componentes correspondentes àsN
dimensões do vetor de feição retornado para esta camada de saída. - 2 ou 4 dimensões, ou seja,
[1 x N]
ou[1 x 1 x 1 x N]
.
- com
Um input_process_units para Wordpiece/Sentencepiece Tokenizer
Modelos baseados no Universal Sentence Encoder (consulte o código-fonte para obter mais detalhes):
Exatamente 3 tensores de entrada (kTfLiteString)
- Tensor de texto de consulta, com nome de metadados "inp_text".
- Tensor de contexto de resposta, com nome de metadados "res_context".
- Tensor de texto de resposta, com nome de metadados "res_text".
Exatamente 2 tensores de saída (kTfLiteUInt8/kTfLiteFloat32)
- Tensor de codificação de consulta, com nome de metadados "query_encoding".
- Tensor de codificação de resposta, com nome de metadados "response_encoding".
- Ambos com
N
componentes correspondentes àsN
dimensões do vetor de feição retornado para esta camada de saída. - Ambos com 2 ou 4 dimensões, ou seja,
[1 x N]
ou[1 x 1 x 1 x N]
.
Qualquer modelo de incorporação de texto com:
- Um tensor de texto de entrada (kTfLiteString)
Pelo menos um tensor de incorporação de saída (kTfLiteUInt8/kTfLiteFloat32)
- com
N
componentes correspondentes àsN
dimensões do vetor de feição retornado para esta camada de saída. - 2 ou 4 dimensões, ou seja,
[1 x N]
ou[1 x 1 x 1 x N]
.
- com