A tarefa de incorporador de texto permite criar uma representação numérica de dados de texto para capturar o significado semântico deles. Estas instruções mostram como usar o Text Embedder em apps para iOS.
Confira esta demonstração na Web para ver essa tarefa em ação. Para mais informações sobre os recursos, modelos e opções de configuração desta tarefa, consulte a Visão geral.
Exemplo de código
O código de exemplo do Text Embedder fornece uma implementação básica de um app para iOS que integra essa tarefa. No exemplo, avaliamos as semelhanças semânticas entre dois textos e requer um dispositivo físico com iOS ou um simulador de iOS.
É possível usar o app como ponto de partida para seu próprio app iOS ou consultá-lo ao modificar um app atual. Consulte o exemplo de código do incorporador de texto no GitHub (link em inglês).
Fazer o download do código
As instruções a seguir mostram como criar uma cópia local do código de exemplo usando a ferramenta de linha de comando git.
Para fazer o download do código de exemplo:
Clone o repositório do Git usando o seguinte comando:
git clone https://github.com/google-ai-edge/mediapipe-samples
Opcionalmente, configure sua instância do git para usar o checkout esparso, para que você tenha apenas os arquivos do app de exemplo do Text Embedder:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/text_embedder/ios/
Depois de criar uma versão local do código de exemplo, é possível instalar a biblioteca de tarefas do MediaPipe, abrir o projeto usando o Xcode e executar o app. Para instruções, consulte o Guia de configuração para iOS.
Principais componentes
Os arquivos a seguir contêm o código essencial para o aplicativo de exemplo do incorporador de texto:
- TextEmbedderService.swift: inicializa o incorporador de texto e executa a inferência nos dados de entrada.
- ViewController.swift: implementa a IU e formata os resultados.
Configuração
Esta seção descreve as principais etapas para configurar seu ambiente de desenvolvimento e projetos de código para usar o Text Embedder. Para informações gerais sobre como configurar seu ambiente de desenvolvimento para usar tarefas do MediaPipe, incluindo requisitos de versão da plataforma, consulte o Guia de configuração para iOS.
Dependências
O Text Embedder usa a biblioteca MediaPipeTasksText
, que precisa ser instalada
usando o CocoaPods. A biblioteca é compatível com apps Swift e Objective-C
e não requer nenhuma configuração específica da linguagem.
Para instruções sobre como instalar o CocoaPods no macOS, consulte o Guia de instalação
do CocoaPods.
Para instruções sobre como criar um Podfile
com os pods necessários para seu
app, consulte Como usar
CocoaPods.
Adicione o pod MediaPipeTasksText
no Podfile
usando o seguinte código:
target 'MyTextEmbedderApp' do
use_frameworks!
pod 'MediaPipeTasksText'
end
Se o app incluir destinos de teste de unidade, consulte o guia de configuração para
iOS para mais informações sobre como configurar
o Podfile
.
Modelo
A tarefa MediaPipe Text Embedder requer um modelo treinado que seja compatível com essa tarefa. Para mais informações sobre os modelos treinados disponíveis para o Text Embedder, consulte a seção de modelos da visão geral da tarefa.
Selecione e faça o download de um modelo e adicione-o ao diretório do projeto usando o Xcode. Para instruções sobre como adicionar arquivos ao projeto do Xcode, consulte Como gerenciar arquivos e pastas no projeto do Xcode.
Use a propriedade BaseOptions.modelAssetPath
para especificar o caminho para o modelo
no app bundle. Para conferir um exemplo de código, consulte a próxima seção.
Criar a tarefa
É possível criar a tarefa de incorporação de texto chamando um dos inicializadores dela. O inicializador
TextEmbedder(options:)
aceita valores para as opções de
configuração.
Se você não precisar de um incorporador de texto inicializado com opções de configuração
personalizadas, use o inicializador TextEmbedder(modelPath:)
para criar um
incorporador de texto com as opções padrão. Para mais informações sobre as opções de configuração, consulte Visão geral da configuração.
O código a seguir demonstra como criar e configurar essa tarefa.
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];
Opções de configuração
Esta tarefa tem as seguintes opções de configuração para apps iOS:
Nome da opção | Descrição | Intervalo de valor | Valor padrão |
---|---|---|---|
l2_normalize |
Define se o vetor de atributo retornado deve ser normalizado com a norma L2. Use essa opção somente se o modelo ainda não tiver uma operação TFLite L2_NORMALIZATION nativa. Na maioria dos casos, isso já acontece e a normalização L2 é alcançada pela inferência do TFLite sem a necessidade dessa opção. | Boolean |
False |
quantize |
Indica se o embedding retornado precisa ser quantizado em bytes por meio de quantização escalar. As inclusões são implicitamente consideradas como unidade-norm e, portanto, qualquer dimensão tem garantia de ter um valor em [-1,0, 1,0]. Use a opção l2_normalize se não for esse o caso. | Boolean |
False |
Executar a tarefa
Para incorporar o texto de entrada e extrair os vetores de incorporação, use o
método embed(text:)
de TextEmbedder
.
Swift
let result = try textEmbedder.embed(text: text)
Objective-C
MPPTextEmbedderResult *result = [textEmbedder embedText:text
error:nil];
Observação: a tarefa bloqueia a linha de execução atual até que ela termine de executar a inferência no texto. Para evitar o bloqueio da linha de execução atual, execute o processamento em uma linha de execução em segundo plano usando as frameworks Dispatch ou NSOperation do iOS. Se o app for criado com o Swift, você também poderá usar a simultaneidade do Swift para execução de linhas de execução em segundo plano.
No código de exemplo, o método embed(text:)
é chamado no
arquivo
TextEmbedderService.swift.
Processar e mostrar resultados
Ao executar a inferência, a tarefa do incorporador de texto retorna um objeto TextEmbedderResult
que contém uma lista de embeddings (de ponto flutuante ou
quantificado por escalar) para o texto de entrada.
Confira a seguir um exemplo dos dados de saída desta tarefa:
TextEmbedderResult:
Embedding #0 (sole embedding head):
float_embedding: {0.2345f, 0.1234f, ..., 0.6789f}
head_index: 0
É possível comparar a semelhança semântica de dois embeddings usando o
método 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];
No código de exemplo, o método TextEmbedder.cosineSimilarity
é chamado no arquivo
TextEmbedderService.swift.