A tarefa MediaPipe Text Embedder permite criar uma representação numérica dos dados de texto para capturar seu significado semântico. Estas instruções mostram como usar o Incorporador de texto com apps Android.
Para mais informações sobre 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 MediaPipe Tasks é uma implementação simples de um incorporador de texto para Android. O exemplo avalia as semelhanças semânticas entre dois partes de texto e requer um dispositivo Android físico ou um emulador.
Você pode usar o app como ponto de partida para seu próprio app Android ou consultá-lo ao modificar um aplicativo existente. O exemplo de código do incorporador de texto está hospedado GitHub.
Fazer o download do código
As instruções a seguir mostram como criar uma cópia local do exemplo. usando a ferramenta de linha de comando git.
Para fazer o download do código de exemplo:
- Clone o repositório git usando o seguinte comando:
git clone https://github.com/google-ai-edge/mediapipe-samples
- Opcionalmente, configure sua instância git para usar a finalização esparsa. Assim, você terá
apenas os arquivos do aplicativo de exemplo do incorporador de texto:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/text_embedder/android
Depois de criar uma versão local do código de exemplo, você pode importar o projeto no Android Studio e executar o app. Para obter instruções, consulte o Guia de configuração do Android.
Principais componentes
Os arquivos a seguir contêm o código crucial para este exemplo de incorporador de texto aplicativo:
- TextEmbedderHelper.kt (em inglês): Inicializa o incorporador de texto e processa a seleção do modelo e do delegado.
- MainActivity.kt (link em inglês): Implementa o aplicativo e monta os componentes da interface do usuário.
Configuração
Esta seção descreve as principais etapas para configurar seu ambiente de desenvolvimento e projetos de código especificamente para usar o incorporador de texto. Para informações gerais a configuração do seu ambiente de desenvolvimento para usar tarefas do MediaPipe, incluindo requisitos de versão da plataforma, consulte o Guia de configuração do Android.
Dependências
O incorporador de texto usa as bibliotecas com.google.mediapipe:tasks-text
. Adicionar
dependência do arquivo build.gradle
do projeto de desenvolvimento de apps Android.
É possível importar as dependências necessárias com o seguinte código:
dependencies {
implementation 'com.google.mediapipe:tasks-text:latest.release'
}
Modelo
A tarefa MediaPipe Text Embedder requer um modelo treinado que seja compatível com esse tarefa. Para mais informações sobre modelos treinados disponíveis para o incorporador de texto, consulte na seção de visão geral da tarefa Modelos.
Selecione e faça o download do modelo e armazene-o no diretório do projeto:
<dev-project-root>/src/main/assets
Especifique o caminho do modelo no parâmetro ModelAssetPath
. Na
código de exemplo, o modelo é definido na função setupTextEmbedder()
na
TextEmbedderHelper.kt
arquivo:
Usar a função BaseOptions.Builder.setModelAssetPath()
para especificar o caminho
usados pelo modelo. Esse método é mencionado no exemplo de código nos próximos
nesta seção.
Criar a tarefa
É possível usar uma das funções createFrom...()
para criar a tarefa. A
A função createFromOptions()
aceita opções de configuração para definir o incorporador
. Também é possível inicializar a tarefa usando a fábrica createFromFile()
.
função. A função createFromFile()
aceita um caminho relativo ou absoluto para
o arquivo do modelo treinado. Para mais informações sobre as opções de configuração, consulte
Opções de configuração.
O código abaixo demonstra como criar e configurar essa tarefa.
val baseOptions = baseOptionsBuilder.build()
val optionsBuilder =
TextEmbedderOptions.builder().setBaseOptions(baseOptions)
val options = optionsBuilder.build()
textEmbedder = TextEmbedder.createFromOptions(context, options)
O exemplo de implementação de código define as opções do incorporador de texto no
função setupTextEmbedder()
na
TextEmbedderHelper.kt
.
Opções de configuração
Esta tarefa tem as seguintes opções de configuração para apps Android:
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 um L2_NORMALIZATION Op. do TFLite. Na maioria dos casos, esse já é o caso e Assim, a normalização L2 é alcançada por meio da inferência do TFLite sem a necessidade para essa opção. | Boolean |
False |
quantize |
Se o embedding retornado deve ser quantizado em bytes por meio de com a quantização escalar. Os embeddings são implicitamente definidos como unidade-norma e portanto, qualquer dimensão terá um valor em [-1.0, 1.0]. Usar a opção l2_normalize, se este não for o caso. | Boolean |
False |
Preparar dados
O incorporador de texto funciona com dados de texto (String
). A tarefa lida com a entrada de dados
incluindo a tokenização e o pré-processamento de tensores. Todos
o pré-processamento é feito na função embed()
. Não é necessário
um pré-processamento adicional
do texto de entrada.
val inputText = "The input text to be embedded."
Executar a tarefa
O incorporador de texto usa a função embed
para acionar inferências. Para texto
embedding, isso significa retornar os vetores de embedding para o texto de entrada.
O código a seguir demonstra como executar o processamento com o modelo de tarefa.
textEmbedder?.let {
val firstEmbed =
it.embed(firstText).embeddingResult().embeddings().first()
val secondEmbed =
it.embed(secondText).embeddingResult().embeddings().first()
...
}
No código de exemplo, a função embed
é chamada na
TextEmbedderHelper.kt
.
Gerenciar e exibir resultados
Ao executar a inferência, a tarefa do incorporador de texto retorna um TextEmbedderResult
.
objeto que contém uma lista de embeddings (ponto flutuante ou
quantificado por escalar) para o texto de entrada.
Confira abaixo 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
função TextEmbedder.cosineSimilarity
. Confira o código abaixo para conferir um exemplo.
val similarity = TextEmbedder.cosineSimilarity(firstEmbed, secondEmbed)
No código de exemplo, a função TextEmbedder.cosineSimilarity()
é chamada na
TextEmbedderHelper.kt
.