L'attività Incorporatore di testo consente di creare una rappresentazione numerica dei dati di testo per acquisirne il significato semantico. Queste istruzioni mostrano come utilizzare Text Embedder nelle app per iOS.
Puoi vedere questa attività in azione visualizzando questa demo web. Per ulteriori informazioni sulle funzionalità, sui modelli e sulle opzioni di configurazione di questa attività, consulta la Panoramica.
Esempio di codice
Il codice di esempio per Text Embedder fornisce un'implementazione di base di un'app per iOS che integra questa attività. L'esempio valuta le somiglianze semantiche tra due parti di testo e richiede un dispositivo iOS fisico o un simulatore iOS.
Puoi utilizzare l'app come punto di partenza per la tua app per iOS o farvi riferimento quando modifichi un'app esistente. Puoi consultare il codice di esempio di Text Embedder su GitHub.
Scarica il codice
Le istruzioni riportate di seguito mostrano come creare una copia locale del codice di esempio utilizzando lo strumento a riga di comando git.
Per scaricare il codice di esempio:
Clona il repository Git utilizzando il seguente comando:
git clone https://github.com/google-ai-edge/mediapipe-samples
Se vuoi, configura l'istanza Git in modo da utilizzare il controllo sparse, in modo da avere solo i file per l'app di esempio Text Embedder:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/text_embedder/ios/
Dopo aver creato una versione locale del codice di esempio, puoi installare la libreria di attività MediaPipe, aprire il progetto utilizzando Xcode ed eseguire l'app. Per le istruzioni, consulta la Guida alla configurazione per iOS.
Componenti chiave
I seguenti file contengono il codice fondamentale per l'applicazione di esempio Text Embedder:
- TextEmbedderService.swift: inizializza l'incorporamento di testo ed esegue l'inferenza sui dati di input.
- ViewController.swift: implementa l'interfaccia utente e formatta i risultati.
Configurazione
In questa sezione vengono descritti i passaggi chiave per la configurazione dell'ambiente di sviluppo e dei progetti di codice per l'utilizzo di Incorporatore di testo. Per informazioni generali sulla configurazione dell'ambiente di sviluppo per l'utilizzo delle attività MediaPipe, inclusi i requisiti della versione della piattaforma, consulta la Guida alla configurazione per iOS.
Dipendenze
Text Embedder utilizza la libreria MediaPipeTasksText
, che deve essere installata utilizzando CocoaPods. La libreria è compatibile con le app Swift e Objective-C
e non richiede alcuna configurazione aggiuntiva specifica per il linguaggio.
Per istruzioni su come installare CocoaPods su macOS, consulta la guida all'installazione di CocoaPods.
Per istruzioni su come creare un Podfile
con i pod necessari per la tua app, consulta Utilizzare CocoaPods.
Aggiungi il pod MediaPipeTasksText
in Podfile
utilizzando il seguente codice:
target 'MyTextEmbedderApp' do
use_frameworks!
pod 'MediaPipeTasksText'
end
Se la tua app include target dei test delle unità, consulta la Guida alla configurazione per iOS per ulteriori informazioni sulla configurazione di Podfile
.
Modello
L'attività MediaPipe Text Embedder richiede un modello addestrato compatibile con questa attività. Per saperne di più sui modelli addestrati disponibili per Text Embedder, consulta la sezione Modelli della panoramica delle attività.
Seleziona e scarica un modello e aggiungilo alla directory del progetto utilizzando Xcode. Per istruzioni su come aggiungere file al progetto Xcode, consulta la sezione Gestione di file e cartelle nel progetto Xcode.
Utilizza la proprietà BaseOptions.modelAssetPath
per specificare il percorso del modello
nell'app bundle. Per un esempio di codice, consulta la sezione successiva.
Crea l'attività
Puoi creare l'attività di incorporamento di testo chiamando uno dei relativi inizializzatori. L'inizializzatore TextEmbedder(options:)
accetta i valori per le opzioni di configurazione.
Se non hai bisogno di un inserzionista di testo inizializzato con opzioni di configurazione personalizzate, puoi utilizzare l'inizializzatore TextEmbedder(modelPath:)
per creare un inserzionista di testo con le opzioni predefinite. Per ulteriori informazioni sulle opzioni di configurazione, consulta Panoramica della configurazione.
Il codice seguente mostra come creare e configurare questa attività.
Swift
import MediaPipeTasksText
let modelPath = Bundle.main.path(forResource: "model",
ofType: "tflite")
let options = TextEmbedderOptions()
options.baseOptions.modelAssetPath = modelPath
options.quantize = true
let textEmbedder = try TextEmbedder(options: options)
Objective-C
@import MediaPipeTasksText;
NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"model"
ofType:@"tflite"];
MPPTextEmbedderOptions *options = [[MPPTextEmbedderOptions alloc] init];
options.baseOptions.modelAssetPath = modelPath;
options.quantize = YES;
MPPTextEmbedder *textEmbedder =
[[MPPTextEmbedder alloc] initWithOptions:options error:nil];
Opzioni di configurazione
Questa attività offre le seguenti opzioni di configurazione per le app per iOS:
Nome opzione | Descrizione | Intervallo di valori | Valore predefinito |
---|---|---|---|
l2_normalize |
Indica se normalizzare il vettore di caratteristiche restituito con la norma L2. Utilizza questa opzione solo se il modello non contiene già un'operazione L2_NORMALIZATION TFLite nativa. Nella maggior parte dei casi, è già così e la normalizzazione L2 viene quindi raggiunta tramite l'inferenza TFLite senza bisogno di questa opzione. | Boolean |
False |
quantize |
Indica se l'embedding restituito deve essere quantizzato in byte tramite la quantizzazione scalare. Si presume implicitamente che gli incorporamenti siano di norma unitaria e quindi qualsiasi dimensione abbia un valore garantito compreso tra -1,0 e 1,0. In caso contrario, utilizza l'opzione l2_normalize. | Boolean |
False |
Esegui l'attività
Per incorporare il testo di input e ottenere i relativi vettori di embedding, puoi utilizzare il metodo embed(text:)
di TextEmbedder
.
Swift
let result = try textEmbedder.embed(text: text)
Objective-C
MPPTextEmbedderResult *result = [textEmbedder embedText:text
error:nil];
Nota: l'attività blocca il thread corrente fino al completamento dell'esecuzione dell'inferenza sul testo. Per evitare di bloccare il thread attuale, esegui l'elaborazione in un thread in background utilizzando i framework Dispatch o NSOperation di iOS. Se l'app è stata creata utilizzando Swift, puoi anche utilizzare Swift Concurrency per l'esecuzione di thread in background.
Nel codice di esempio, il metodo embed(text:)
viene chiamato nel
file TextEmbedderService.swift.
Gestire e visualizzare i risultati
Dopo l'esecuzione dell'inferenza, l'attività di inserimento di testo restituisce un oggetto TextEmbedderResult
che contiene un elenco di embedding (a virgola mobile o quantizzati scalari) per il testo di input.
Di seguito è riportato un esempio dei dati di output di questa attività:
TextEmbedderResult:
Embedding #0 (sole embedding head):
float_embedding: {0.2345f, 0.1234f, ..., 0.6789f}
head_index: 0
Puoi confrontare la somiglianza semantica di due incorporamenti utilizzando il
metodo TextEmbedder.cosineSimilarity
.
Swift
let similarity = try TextEmbedder.cosineSimilarity( embedding1: result.embeddingResult.embeddings[0], embedding2: otherResult.embeddingResult.embeddings[0])
Objective-C
NSNumber *similarity = [MPPTextEmbedder cosineSimilarityBetweenEmbedding1:result.embeddingResult.embeddings[0] andEmbedding2:otherResult.embeddingResult.embeddings[0] error:nil];
Nel codice di esempio, il metodo TextEmbedder.cosineSimilarity
viene chiamato nel file
TextEmbedderService.swift.