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 di similarità in un indice personalizzato predefinito utilizzando ScaNN (Scalable Nearest Neighbors).
A differenza della classificazione del testo (ad es. il classificatore del linguaggio naturale BERT), l'espansione del numero di elementi che possono essere riconosciuti non richiede il riaddestramento dell'intero modello. È possibile aggiungere nuovi elementi semplicemente ricreando l'indice. Ciò consente anche di lavorare con corpus più grandi (oltre 100.000 elementi).
Utilizza l'API Task Library TextSearcher per eseguire il deployment del tuo strumento di ricerca di testo personalizzato nelle tue app mobile.
Funzionalità principali dell'API TextSearcher
Accetta una singola stringa come input, esegue l'estrazione dell'incorporamento e la ricerca del vicino più prossimo nell'indice.
Elaborazione del testo di input, inclusi i token Wordpiece o Sentencepiece in-graph o out-of-graph 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. Puoi farlo utilizzando l'API
Model Maker
Searcher
seguendo e adattando il tutorial.
Per farlo, ti serviranno:
- un modello di incorporamento di testo TFLite, come Universal Sentence Encoder. Ad
esempio,
- uno riaddestrato in questo Colab, ottimizzato per l'inferenza sul dispositivo. Bastano solo 6 ms per eseguire una query su una stringa di testo su Pixel 6.
- quello quantizzato, più piccolo di quello sopra, ma che richiede 38 ms per ogni incorporamento.
- il tuo corpus di testo.
Dopo questo passaggio, dovresti avere un modello di ricerca TFLite autonomo (ad es.
mobilenet_v3_searcher.tflite), ovvero 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 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. Specifica che il file non deve essere
compresso e aggiungi 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
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'
}
Passaggio 2: utilizza il 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);
Per altre opzioni di configurazione di TextSearcher, consulta il codice sorgente e
javadoc.
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();
Per altre opzioni di configurazione di TextSearcher, consulta il codice
sorgente.
Esegui l'inferenza in Python
Passaggio 1: installa il pacchetto Pypi di TensorFlow Lite Support.
Puoi installare il pacchetto Pypi di TensorFlow Lite Support utilizzando il seguente comando:
pip install tflite-support
Passaggio 2: utilizza il modello
from tflite_support.task import text
# Initialization
text_searcher = text.TextSearcher.create_from_file(model_path)
# Run inference
result = text_searcher.search(text)
Consulta il codice
sorgente
per altre opzioni di configurazione di 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 test.