Integre pesquisadores de texto

A pesquisa de texto permite pesquisar texto semanticamente semelhante em um corpus. Ele funciona incorporando a consulta de pesquisa em um vetor de alta dimensão que representa o significado semântico da consulta, seguido pela pesquisa de similaridade em um índice personalizado predefinido usando ScaNN (Scalable Nearest Neighbours).

Ao contrário da classificação de texto (por exemplo, classificador de linguagem natural Bert ), expandir o número de itens que podem ser reconhecidos não requer um novo treinamento de todo o modelo. Novos itens podem ser adicionados simplesmente reconstruindo o índice. Isso também permite trabalhar com corpus maiores (mais de 100 mil itens).

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

Principais recursos da API TextSearcher

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

  • Processamento de texto de entrada, incluindo tokenizações de Wordpiece ou Sentencepiece dentro ou fora do gráfico no texto de entrada.

Pré-requisitos

Antes de usar a API TextSearcher , um índice precisa ser construído com base no corpus personalizado de texto a ser pesquisado. Isso pode ser conseguido usando a API Model Maker Searcher seguindo e adaptando o tutorial .

Para isso você precisará de:

  • um modelo incorporador de texto TFLite, como o Universal Sentence Encoder. Por exemplo,
    • aquele treinado novamente neste Colab , que é otimizado para inferência no dispositivo. Leva apenas 6 ms para consultar uma string de texto no Pixel 6.
    • o quantizado , que é menor que o anterior, mas leva 38ms para cada incorporação.
  • seu corpus de texto.

Após esta etapa, você deverá ter um modelo de pesquisa TFLite independente (por exemplo, mobilenet_v3_searcher.tflite ), que é o modelo incorporador de texto original com o índice anexado aos metadados do modelo TFLite .

Execute inferência em Java

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

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

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 (NNAPI is included)
    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: usando o 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 o código-fonte e o javadoc para obter mais opções de configuração do TextSearcher .

Execute 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 o código-fonte para obter mais opções de configuração TextSearcher .

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

# Run inference
result = text_searcher.search(text)

Consulte o código-fonte para obter mais opções de configuração 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

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