A tarefa MediaPipe Text Classifier permite classificar textos em um conjunto de categorias definidas. como sentimentos positivos ou negativos. As categorias são determinadas pelo modelo que você usa e como esse modelo foi treinado. Estas instruções mostram como usar o Text Classifier com apps Android.
Para saber como essa tarefa funciona, acesse o demonstração. Para mais informações sobre os recursos, modelos e de configuração dessa tarefa, consulte a Visão geral.
Exemplo de código
O código de exemplo para o classificador de texto fornece uma implementação simples deste tarefa para sua referência. Esse código ajuda a testar a tarefa e a começar criar seu próprio app de classificação de texto. Navegue pela Código de exemplo do classificador de texto no 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 de controle de versão 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 do Git para usar a finalização esparsa.
Portanto, você tem 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 instruções sobre como configurar e executar um exemplo com o Android Studio, consulte as instruções de configuração de código de exemplo na Guia de configuração para Android.
Principais componentes
Os arquivos a seguir contêm o código crucial para a classificação de texto aplicativo de exemplo:
- TextClassifierHelper.kt: Inicializa o classificador de texto e processa a seleção de modelos.
- MainActivity.kt (link em inglês):
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 especificamente para usar o classificador de texto. Para informações gerais a configuração do seu ambiente de desenvolvimento para usar o MediaPipe Tasks, incluindo requisitos de versão da plataforma, consulte Guia de configuração para Android.
Dependências
O classificador 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 do classificador de texto do MediaPipe requer um modelo treinado que seja compatível com essa tarefa. Para mais informações sobre modelos treinados disponíveis para o classificador de texto, consulte na seção de visão geral da tarefa Modelos.
Selecione e faça o download de um modelo e armazene-o no projeto assets
diretório:
<dev-project-root>/src/main/assets
Use o método BaseOptions.Builder.setModelAssetPath()
para especificar o caminho.
do modelo a ser usado. Para conferir um exemplo de código, consulte a 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 o createFromFile()
função com um caminho relativo ou absoluto para o arquivo de modelo treinado. O código
exemplo abaixo demonstra o uso do TextClassifier.createFromOptions()
função. Para mais informações sobre as opções de configuração disponíveis, consulte
Opções de configuração.
O código abaixo 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
}
}
É possível ver um exemplo de como criar uma tarefa no exemplo de código
TextClassifierHelper
função initClassifier()
da classe.
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 serem usados para nomes de exibição fornecidos no
metadados do modelo da tarefa, se disponíveis. O padrão é en para
inglês. É possível adicionar rótulos localizados aos metadados de um modelo personalizado
usando a API Metadata Writer do TensorFlow Lite;
| Código da localidade | en |
maxResults |
Define o número máximo opcional de resultados da classificação com maior pontuação como voltar. Se < 0, todos os resultados disponíveis serão retornados. | Qualquer número positivo | -1 |
scoreThreshold |
Define o limite de pontuação da previsão que substitui o fornecido no os metadados do modelo (se houver). Resultados abaixo desse valor são rejeitados. | Qualquer flutuação | Não definido |
categoryAllowlist |
Define a lista opcional de nomes de categorias permitidos. Se não estiver vazio,
resultados de classificação cujo nome de categoria não esteja neste conjunto serão
que foram filtradas. Nomes de categorias duplicados ou desconhecidos são ignorados.
Essa opção é mutuamente exclusiva com categoryDenylist e usando
os dois resultarão em erro. |
Qualquer string | Não definido |
categoryDenylist |
Define a lista opcional de nomes de categorias que não são permitidos. Se
não vazio, os resultados de classificação cujo nome de categoria estiver neste conjunto serão filtrados
para fora. Nomes de categorias duplicados ou desconhecidos são ignorados. Essa opção é mutuamente
exclusivo com categoryAllowlist e usar 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 a entrada de dados
incluindo a tokenização e o pré-processamento de tensores.
Todo o pré-processamento é feito na função classify()
. Não é necessário
para pré-processamento adicional do texto de entrada.
String inputText = "The input text to be classified.";
Executar a tarefa
O classificador de texto usa a função TextClassifier.classify()
para executar
ou inferências. Usar uma linha de execução separada para executar a classificação
para evitar o bloqueio da linha de execução da interface do usuário do Android com seu app.
O código a seguir demonstra como executar o processamento com a 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)
}
}
É possível ver um exemplo de como executar uma tarefa no exemplo de código
TextClassifierHelper
função classify()
da classe.
Gerenciar e exibir resultados
O classificador de texto gera uma TextClassifierResult
que contém a lista
de categorias possíveis para o texto de entrada. As categorias são definidas pelo
o modelo que você usa. Portanto, se quiser categorias diferentes, escolha um modelo diferente,
ou treinar novamente um que já existe.
Confira abaixo um exemplo dos dados de saída desta 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
Esse resultado foi gerado executando o classificador BERT no texto de entrada:
"an imperfect but overall entertaining mystery"
Confira um exemplo de como exibir resultados no exemplo de código
ResultsAdapter
classe interna ViewHolder
.