A tarefa MediaPipe Text Classifier permite que você classifique o texto em um conjunto de categorias definidas, como sentimento positivo ou negativo. As categorias são determinadas pelo modelo que você usa e como esse modelo foi treinado. Estas instruções mostram como usar o classificador de texto com apps Android.
Para conferir essa tarefa em ação, confira a demonstração. Para mais informações sobre os recursos, modelos e opções de configuração dessa tarefa, consulte a Visão geral.
Exemplo de código
O código de exemplo do Classificador de texto fornece uma implementação simples dessa tarefa para sua referência. Esse código ajuda você a testar essa tarefa e começar a criar seu próprio app de classificação de texto. Procure o código de exemplo do classificador de texto (link em inglês) no GitHub.
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 de controle de versões 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
- Como opção, configure sua instância git para usar a finalização da compra esparsa
para que você tenha apenas os arquivos do app de exemplo do Classificador de texto:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/text_classification/android
Para saber como configurar e executar um exemplo com o Android Studio, consulte as instruções de configuração do código de exemplo no Guia de configuração para Android.
Principais componentes
Os arquivos a seguir contêm o código essencial para o app de exemplo de classificação de texto:
- TextClassifierHelper.kt: inicializa o classificador de texto e processa a seleção do modelo.
- MainActivity.kt:
implementa o aplicativo, incluindo a chamada de
TextClassifierHelper
eResultsAdapter
. - ResultsAdapter.kt: processa 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 Classificador de texto. Para informações gerais sobre a configuração do ambiente de desenvolvimento para uso do MediaPipe Tasks, incluindo requisitos de versão da plataforma, consulte o Guia de configuração para Android.
Dependências
O classificador de texto usa as bibliotecas com.google.mediapipe:tasks-text
. Adicione essa
dependência ao arquivo build.gradle
do projeto de desenvolvimento do app Android.
Importe as dependências necessárias com o seguinte código:
dependencies {
implementation 'com.google.mediapipe:tasks-text:latest.release'
}
Modelo
A tarefa do Classificador de texto do MediaPipe requer um modelo treinado compatível com essa tarefa. Para mais informações sobre os modelos treinados disponíveis para o Classificador de texto, consulte a seção Modelos de visão geral da tarefa.
Selecione e faça o download de um modelo e armazene-o no diretório assets
do projeto:
<dev-project-root>/src/main/assets
Use o método BaseOptions.Builder.setModelAssetPath()
para especificar o caminho
do modelo a ser usado. Confira um exemplo de código na próxima seção.
Criar a tarefa
Use uma das funções TextClassifier.createFrom...()
do Classificador de texto para
preparar a tarefa para executar inferências. Você pode usar a função createFromFile()
com um caminho relativo ou absoluto para o arquivo de modelo treinado. O exemplo de código abaixo demonstra o uso da função TextClassifier.createFromOptions()
. Para mais informações sobre as opções de configuração disponíveis, consulte
Opções de configuração.
O código a seguir demonstra como criar e configurar essa tarefa.
// no directory path required if model file is in src/main/assets:
String currentModel = "text_classifier_model.tflite";
fun initClassifier() {
val baseOptionsBuilder = BaseOptions.builder()
.setModelAssetPath(currentModel)
try {
val baseOptions = baseOptionsBuilder.build()
val optionsBuilder = TextClassifier.TextClassifierOptions.builder()
.setBaseOptions(baseOptions)
val options = optionsBuilder.build()
textClassifier = TextClassifier.createFromOptions(context, options)
} catch (e: IllegalStateException) { // exception handling
}
}
Você pode ver um exemplo de como criar uma tarefa na função initClassifier()
da classe
TextClassifierHelper
de exemplo.
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 |
---|---|---|---|
displayNamesLocale |
Define o idioma dos rótulos a ser usado para nomes de exibição fornecidos nos
metadados do modelo da tarefa, se disponível. O padrão é en para
inglês. É possível adicionar rótulos localizados aos metadados de um modelo personalizado
usando a API TensorFlow Lite Metadata Writer
| Código da localidade | en |
maxResults |
Define o número máximo opcional de resultados de classificação com a melhor pontuação a ser retornado. Se < 0, todos os resultados disponíveis serão retornados. | Qualquer número positivo | -1 |
scoreThreshold |
Define o limite de pontuação de previsão que substitui o fornecido nos metadados do modelo (se houver). Os resultados abaixo desse valor são rejeitados. | Qualquer ponto flutuante | Não definido |
categoryAllowlist |
Define a lista opcional de nomes de categorias permitidas. Se não estiver em branco, os resultados de classificação com nome de categoria que não estiver nesse conjunto serão filtrados. Nomes de categoria duplicados ou desconhecidos são ignorados.
Essa opção é mutuamente exclusiva com categoryDenylist , e o uso
de ambos resulta em um erro. |
Qualquer string | Não definido |
categoryDenylist |
Define a lista opcional de nomes de categorias que não são permitidos. Se não estiver em branco, os resultados de classificação com o nome de categoria nesse conjunto serão filtrados. Nomes de categoria duplicados ou desconhecidos são ignorados. Essa opção é mutuamente
exclusiva com categoryAllowlist , e o uso de ambos resulta em um erro. |
Qualquer string | Não definido |
preparar dados
O classificador de texto funciona com dados de texto (String
). A tarefa lida com o pré-processamento de entrada de dados, incluindo a tokenização e o pré-processamento de tensor.
Todo o pré-processamento é processado na função classify()
. Não é necessário
fazer mais um pré-processamento do texto de entrada com antecedência.
String inputText = "The input text to be classified.";
Executar a tarefa
O classificador de texto usa a função TextClassifier.classify()
para executar
inferências. Use uma linha de execução separada para executar a classificação
e evitar o bloqueio da linha de execução de interface do usuário do Android no seu app.
O código a seguir demonstra como executar o processamento com o modelo de tarefa usando uma linha de execução separada.
fun classify(text: String) {
executor = ScheduledThreadPoolExecutor(1)
executor.execute {
val results = textClassifier.classify(text)
listener.onResult(results)
}
}
Você pode ver um exemplo de como executar uma tarefa na função classify()
da classe
TextClassifierHelper de exemplo de código.
Gerenciar e mostrar resultados
O classificador de texto gera um TextClassifierResult
que contém a lista
de categorias possíveis para o texto de entrada. As categorias são definidas pelo
modelo que você usa. Portanto, se você quiser categorias diferentes, escolha um modelo diferente
ou treine novamente um existente.
Veja a seguir um exemplo dos dados de saída dessa tarefa:
TextClassificationResult:
Classification #0 (single classification head):
ClassificationEntry #0:
Category #0:
category name: "positive"
score: 0.8904
index: 0
Category #1:
category name: "negative"
score: 0.1096
index: 1
Este resultado foi obtido ao executar o classificador BERT no texto de entrada:
"an imperfect but overall entertaining mystery"
.
Confira um exemplo de como exibir os resultados no exemplo de código da classe
ResultsAdapter
e da classe interna ViewHolder
.