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 Neighbors).
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 o retreinamento 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 TextSearcher
da Biblioteca de Tarefas para implantar seu buscador de texto personalizado em seus aplicativos móveis.
Principais recursos da API TextSearcher
Recebe uma única string como entrada, executa extração de incorporação e pesquisa do vizinho mais próximo no índice.
Processamento de texto de entrada, incluindo tokenizações do Wordpiece ou do Sentencepiece dentro ou fora do gráfico no texto de entrada.
Pré-requisitos
Antes de usar a API TextSearcher
, um índice precisa ser criado com base no corpus de texto personalizado a ser pesquisado. Isso pode ser feito usando a API Model Maker Searcher seguindo e adaptando o tutorial .
Para isso você vai precisar de:
- um modelo de incorporação de texto TFLite, como o Universal Sentence Encoder. Por exemplo,
- aquele retreinado 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 acima, mas leva 38ms para cada incorporação.
- seu corpus de texto.
Após esta etapa, você deve ter um modelo de buscador TFLite autônomo (por exemplo, mobilenet_v3_searcher.tflite
), que é o modelo de incorporação de texto original com o índice anexado aos metadados do modelo TFLite .
Executar inferência em Java
Etapa 1: importar a dependência do Gradle e outras configurações
Copie o arquivo de modelo .tflite
searcher para o diretório assets do módulo Android onde o modelo será executado. Especifique que o arquivo não deve ser compactado e adicione a biblioteca do 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);
Veja o código fonte e o javadoc 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 o código-fonte para obter mais opções para configurar o TextSearcher
.
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_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 para configurar 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.