Integrar embedders de texto.

Os embedders de texto permitem incorporar texto em um vetor de recurso de alta dimensão que representam seu significado semântico e que pode ser comparado com o atributo vetor de outros textos para avaliar sua semelhança semântica.

Em oposição a pesquisa de texto, o embedder de texto permite calcular a semelhança entre textos em tempo real em vez de pesquisar em um índice predefinido criado a partir de um corpus.

Use a API Task Library TextEmbedder para implantar o incorporador de texto personalizado no seus apps para dispositivos móveis.

Principais recursos da API TextEmbedder

Modelos de embedder de texto compatíveis

Os modelos a seguir têm a garantia de compatibilidade com o TextEmbedder API.

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 a código-fonte para mais opções de configuração do TextEmbedder.

Executar inferência em Python

Etapa 1: instalar o pacote Pypi de suporte do TensorFlow Lite

Instale o pacote TensorFlow Lite Support Pypi usando o seguinte: comando:

pip install tflite-support

Etapa 2: uso do 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 a código-fonte para mais opções de configuração do TextEmbedder.

Resultados de exemplo

A semelhança de cosseno entre vetores de atributo normalizados retorna uma pontuação entre -1 e 1. Quanto maior, melhor. Por exemplo, uma semelhança de cosseno de 1 significa que os dois vetores são idênticos.

Cosine similarity: 0.954312

Teste a funcionalidade Ferramenta de demonstração da CLI para TextEmbedder com seu próprio modelo e dados de teste.

Requisitos de compatibilidade do modelo

A API TextEmbedder espera um modelo TFLite com valores obrigatórios Metadados de modelo do TFLite.

Há três tipos principais de modelos compatíveis:

  • Modelos baseados em BERT (consulte código-fonte para mais detalhes):

    • Exatamente três tensores de entrada (kTfLiteString)

      • Tensor de IDs, com o nome de metadados "ids",
      • Mascarar o tensor, com o nome de metadados "mask".
      • Tensor de IDs de segmento, com o nome de metadados "segment_ids"
    • Exatamente um tensor de saída (kTfLiteUInt8/kTfLiteFloat32)

      • com componentes N correspondentes às dimensões N do vetor de atributo retornado para esta camada final.
      • Duas ou quatro dimensões, por exemplo, [1 x N] ou [1 x 1 x 1 x N].
    • Um token input_process_units para o tokenizador do Wordnote/Sentencenote

  • Modelos baseados no codificador universal de frases (consulte código-fonte para mais detalhes):

    • Exatamente três tensores de entrada (kTfLiteString)

      • Tensor de texto de consulta com o nome de metadados "inp_text".
      • Tensor de contexto de resposta, com o nome de metadados "res_context".
      • Tensor de texto de resposta, com o nome de metadados "res_text".
    • Exatamente dois tensores de saída (kTfLiteUInt8/kTfLiteFloat32)

      • Tensor de codificação de consulta, com o nome de metadados "query_encoding".
      • Tensor de codificação de resposta, com o nome de metadados "response_encoding".
      • Ambos têm componentes N correspondentes às dimensões N do vetor de atributo retornado para esta camada final.
      • Ambos têm 2 ou 4 dimensões, por exemplo, [1 x N] ou [1 x 1 x 1 x N].
  • Qualquer modelo de embedder de texto com:

    • Um tensor de texto de entrada (kTfLiteString)
    • Pelo menos um tensor de incorporação de saída (kTfLiteUInt8/kTfLiteFloat32)

      • com componentes N correspondentes às dimensões N do vetor de atributo retornado para esta camada final.
      • Duas ou quatro dimensões, por exemplo, [1 x N] ou [1 x 1 x 1 x N].