Integrar embedders de texto.

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

Ao contrário da pesquisa de texto, o incorporador de texto permite calcular a similaridade entre textos de maneira dinâmica, em vez de pesquisar em um índice predefinido criado com base em um corpus.

Use a API da biblioteca de tarefas TextEmbedder para implantar seu codificador de texto personalizado nos apps para dispositivos móveis.

Principais recursos da API TextEmbedder

Modelos de incorporação de texto compatíveis

Os modelos a seguir têm garantia de compatibilidade 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 mais opções de configuração do TextEmbedder.

Executar inferência em Python

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

Instale o pacote Pypi de suporte do TensorFlow Lite usando o seguinte comando:

pip install tflite-support

Etapa 2: usar 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 mais opções de configuração do TextEmbedder.

Resultados de exemplo

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

Cosine similarity: 0.954312

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

Requisitos de compatibilidade de modelo

A API TextEmbedder espera um modelo do TFLite com metadados do modelo do TFLite obrigatórios.

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

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

    • Exatamente três tensores de entrada (kTfLiteString)

    • Tensor de IDs, com o nome de metadados "ids".

    • Tensor de máscara, 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 recursos retornado para essa camada de saída.

    • Duas ou quatro dimensões, ou seja, [1 x N] ou [1 x 1 x 1 x N].

    • Um input_process_units para o tokenizador Wordpiece/Sentencepiece

  • Modelos baseados no Universal Sentence Encoder (confira o 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 da resposta, com o nome de metadados "res_context".

    • Tensor de texto da 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 com componentes N correspondentes às dimensões N do vetor de recursos retornado para essa 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 incorporador 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 recursos retornado para essa camada de saída.

    • Duas ou quatro dimensões, ou seja, [1 x N] ou [1 x 1 x 1 x N].