Integrar pesquisadores de texto

Com a pesquisa de texto, é possível pesquisar textos semanticamente semelhantes em um corpus. Funciona incorporando a consulta de pesquisa em um vetor de alta dimensão que representa semântico da consulta, seguido pela pesquisa por similaridade em uma pesquisa índice personalizado usando ScaNN Vizinhos mais próximos escalonáveis.

Ao contrário da classificação de texto (por exemplo, Classificador de linguagem natural Bert), para expandir o número de itens que podem ser reconhecidos não requer novo treinamento o modelo inteiro. Para adicionar novos itens, basta reconstruir o índice. Isso também permite trabalhar com corpus maiores (mais de 100 mil itens).

Use a API Task Library TextSearcher para implantar o pesquisador de texto personalizado em seus apps para dispositivos móveis.

Principais recursos da API TextSearcher

  • Usa uma única string como entrada, executa a extração de embeddings e de vizinho mais próximo no índice.

  • Processamento de texto de entrada, incluindo dentro ou fora do gráfico Palavra-chave ou Frase de destaque tokenizações no texto de entrada.

Pré-requisitos

Antes de usar a API TextSearcher, é necessário criar um índice com base no um corpus de texto personalizado para pesquisar. Para isso, usamos API Model Maker Searcher seguindo e adaptando tutorial.

Para isso, você vai precisar do seguinte:

  • um modelo de embedding de texto do TFLite, como o Universal Sentence Encoder. Para exemplo,
    • as um retreinado Colab, que é otimizado para inferência no dispositivo. Leva apenas 6 ms para consultar uma string de texto no Pixel 6.
    • as quantizado uma, que é menor que a mostrada acima, mas leva 38 ms para cada embedding.
  • seu corpus de texto.

Após essa etapa, você terá um modelo de pesquisa do TFLite autônomo (por exemplo, mobilenet_v3_searcher.tflite), que é o modelo original de embedding de texto com o índice anexado ao Metadados de modelo do TFLite.

Executar inferência em Java

Etapa 1: importar a dependência do Gradle e outras configurações

Copie o arquivo do modelo de pesquisa .tflite para o diretório de assets do Android módulo em que o modelo será executado. Especifique que o arquivo não deve ser compactado e adicionar a biblioteca do TensorFlow Lite ao arquivo build.gradle do módulo arquivo:

android {
    // Other settings

    // Specify tflite index file should not be compressed for the app apk
    aaptOptions {
        noCompress "tflite"
    }

}

dependencies {
    // Other dependencies

    // Import the Task Vision Library dependency
    implementation 'org.tensorflow:tensorflow-lite-task-vision:0.4.4'
    // Import the GPU delegate plugin Library for GPU inference
    implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin:0.4.4'
}

Etapa 2: uso do modelo

// Initialization
TextSearcherOptions options =
    TextSearcherOptions.builder()
        .setBaseOptions(BaseOptions.builder().useGpu().build())
        .setSearcherOptions(
            SearcherOptions.builder().setL2Normalize(true).build())
        .build();
TextSearcher textSearcher =
    textSearcher.createFromFileAndOptions(context, modelFile, options);

// Run inference
List<NearestNeighbor> results = textSearcher.search(text);

Consulte a código-fonte e o javadoc (em inglês) para mais opções de configuração do TextSearcher.

Executar inferência em C++

// Initialization
TextSearcherOptions options;
options.mutable_base_options()->mutable_model_file()->set_file_name(model_path);
options.mutable_embedding_options()->set_l2_normalize(true);
std::unique_ptr<TextSearcher> text_searcher = TextSearcher::CreateFromOptions(options).value();

// Run inference with your input, `input_text`.
const SearchResult result = text_searcher->Search(input_text).value();

Consulte a código-fonte para mais opções de configuração do TextSearcher.

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_searcher = text.TextSearcher.create_from_file(model_path)

# Run inference
result = text_searcher.search(text)

Consulte a código-fonte para mais opções de configuração do TextSearcher.

Resultados de exemplo

Results:
 Rank#0:
  metadata: The sun was shining on that day.
  distance: 0.04618
 Rank#1:
  metadata: It was a sunny day.
  distance: 0.10856
 Rank#2:
  metadata: The weather was excellent.
  distance: 0.15223
 Rank#3:
  metadata: The cat is chasing after the mouse.
  distance: 0.34271
 Rank#4:
  metadata: He was very happy with his newly bought car.
  distance: 0.37703

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