Integre incorporadores de texto.

Os incorporadores de texto permitem incorporar o texto em um vetor de características de alta dimensão que representa seu significado semântico, que pode então ser comparado com o vetor de características de outros textos para avaliar sua similaridade semântica.

Ao contrário da pesquisa de texto , o incorporador de texto permite calcular a semelhança entre textos dinamicamente, em vez de pesquisar através de um índice predefinido construído a partir de um corpus.

Use a API Task Library TextEmbedder para implantar seu incorporador de texto personalizado em seus aplicativos móveis.

Principais recursos da API TextEmbedder

Modelos de incorporação de texto suportados

Os modelos a seguir são compatíveis com a API TextEmbedder .

Execute 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 de configuração TextEmbedder .

Execute inferência em Python

Etapa 1: Instale o pacote Pypi de suporte do TensorFlow Lite.

Você pode instalar o pacote Pypi de suporte do TensorFlow Lite 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 de configuraçã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 de 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 (veja 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 "máscara".
      • Tensor de IDs de segmento, com nome de metadados "segment_ids"
    • Exatamente um tensor de saída (kTfLiteUInt8/kTfLiteFloat32)

      • com N componentes correspondentes às N dimensões do vetor de recursos 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] .
    • Um input_process_units para tokenizador de Wordpiece/Sentencepiece

  • Modelos baseados no Universal Sentence Encoder (consulte o código-fonte para obter mais detalhes):

    • Exatamente 3 tensores de entrada (kTfLiteString)

      • Consulta o tensor de texto, 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 às N dimensões do vetor de recursos 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 às N dimensões do vetor de recursos 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] .