La ricerca di testo consente di cercare testo semanticamente simile in un corpus. Funziona incorporando la query di ricerca in un vettore ad alta dimensione che rappresenta il significato semantico della query, seguito dalla ricerca per similarità in un indice personalizzato predefinito utilizzando ScanNN (Scalable Nearest Neighbors).
A differenza della classificazione testuale (ad es . Classificatore di linguaggio naturale Bert ), l'espansione del numero di elementi che possono essere riconosciuti non richiede la riqualificazione dell'intero modello. È possibile aggiungere nuovi elementi semplicemente ricostruendo l'indice. Ciò consente anche di lavorare con corpus più grandi (100.000 articoli).
Usa l'API TextSearcher
della libreria delle attività per distribuire il tuo ricercatore di testo personalizzato nelle tue app mobili.
Caratteristiche principali dell'API TextSearcher
Accetta una singola stringa come input, esegue l'estrazione dell'incorporamento e la ricerca del vicino più vicino nell'indice.
Elaborazione del testo di input, inclusa la tokenizzazione di Wordpiece o Sentencepiece nel grafico o fuori dal grafico sul testo di input.
Prerequisiti
Prima di utilizzare l'API TextSearcher
, è necessario creare un indice basato sul corpus di testo personalizzato in cui eseguire la ricerca. Ciò può essere ottenuto utilizzando l' API Model Maker Searcher seguendo e adattando il tutorial .
Per questo avrai bisogno di:
- un modello di incorporamento di testo TFLite, come l'Universal Sentence Encoder. Per esempio,
- quello riqualificato in questo Colab , che è ottimizzato per l'inferenza sul dispositivo. Ci vogliono solo 6 ms per interrogare una stringa di testo su Pixel 6.
- quello quantizzato , che è più piccolo del precedente ma impiega 38 ms per ogni incorporamento.
- il tuo corpus di testi
Dopo questo passaggio, dovresti avere un modello di ricerca TFLite autonomo (ad es. mobilenet_v3_searcher.tflite
), che è il modello di incorporamento di testo originale con l'indice allegato ai metadati del modello TFLite .
Esegui l'inferenza in Java
Passaggio 1: importa la dipendenza da Gradle e altre impostazioni
Copia il file del modello di ricerca .tflite
nella directory degli asset del modulo Android in cui verrà eseguito il modello. Specificare che il file non deve essere compresso e aggiungere la libreria TensorFlow Lite al file build.gradle
del modulo:
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.0'
// Import the GPU delegate plugin Library for GPU inference
implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin:0.4.0'
}
Passaggio 2: utilizzo del modello
// 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);
Vedere il codice sorgente e javadoc per ulteriori opzioni per configurare TextSearcher
.
Esegui l'inferenza in 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();
Vedere il codice sorgente per ulteriori opzioni per configurare TextSearcher
.
Esegui l'inferenza in Python
Passaggio 1: installare il pacchetto Pypi di supporto TensorFlow Lite.
È possibile installare il pacchetto TensorFlow Lite Support Pypi utilizzando il comando seguente:
pip install tflite-support
Passaggio 2: utilizzo del modello
from tflite_support.task import text
# Initialization
text_searcher = text.TextSearcher.create_from_file(model_path)
# Run inference
result = text_searcher.search(text)
Vedere il codice sorgente per ulteriori opzioni per configurare TextSearcher
.
Risultati di esempio
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
Prova il semplice strumento demo CLI per TextSearcher con il tuo modello e i tuoi dati di prova.