Integrar incorporadores de texto.

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 .

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 às N 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] .
    • 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 às N 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 às N 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] .