A tarefa Text Classifier permite que você classifique o texto em um conjunto de categorias definidas, como sentimento positivo ou negativo. As categorias são determinadas com base no modelo que você usa e em como esse modelo foi treinado. Estas instruções mostram como usar o classificador de texto em apps iOS. O exemplo de código descrito nestas instruções está disponível no GitHub.
Confira esta tarefa em ação nesta demonstração na Web. 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 MediaPipe Tasks é uma implementação básica de um app Classificador de texto para iOS.
Use o app como ponto de partida para seu próprio app iOS ou consulte-o ao modificar um app existente. Consulte o código de exemplo do Classificador de texto no GitHub (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 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 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/ios/
Depois de criar uma versão local do código de exemplo, instale a biblioteca de tarefas do MediaPipe, abra o projeto usando o Xcode e execute o app. Para instruções, consulte o Guia de configuração para iOS.
Principais componentes
Os arquivos abaixo contêm o código essencial para o aplicativo de exemplo do Text Classifier:
- TextClassifierHelper.swift: inicializa o classificador de texto e processa a seleção do modelo.
- 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 classificador de texto. Para informações gerais sobre a configuração do 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 classificador de texto usa a biblioteca MediaPipeTasksText
, que precisa ser instalada
usando 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 o aplicativo, consulte Como usar o CocoaPods.
Adicione o pod MediaPipeTasksText no Podfile
usando o seguinte código:
target 'MyTextClassifierApp' 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 do Classificador de texto do MediaPipe requer um modelo treinado compatível com ela. 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 adicione-o ao diretório do projeto usando o Xcode. Para instruções sobre como adicionar arquivos ao projeto do Xcode, consulte Gerenciar arquivos e pastas no projeto do Xcode.
Use a propriedade BaseOptions.modelAssetPath
para especificar o caminho para o modelo
no seu pacote de apps. Confira um exemplo de código na próxima seção.
Criar a tarefa
É possível criar a tarefa Text Classifier chamando um dos inicializadores dele. O inicializador TextClassifier(options:)
define valores para as opções de configuração.
Se você não precisa de um classificador de texto inicializado com opções de configuração
personalizadas, é possível usar o inicializador TextClassifier(modelPath:)
para criar um
classificador 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 = TextClassifierOptions()
options.baseOptions.modelAssetPath = modelPath
options.scoreThreshold = 0.6
let textClassifier = try TextClassifier(options: options)
Objective-C
@import MediaPipeTasksText;
NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"model"
ofType:@"tflite"];
MPPTextClassifierOptions *options = [[MPPTextClassifierOptions alloc] init];
options.baseOptions.modelAssetPath = modelPath;
options.scoreThreshold = 0.6;
MPPTextClassifier *textClassifier =
[[MPPTextClassifier 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 |
---|---|---|---|
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. 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(text:)
. Não é
necessário pré-processar o texto de entrada com antecedência.
Swift
let text = "The input text to be classified."
Objective-C
NSString *text = @"The input text to be classified.";
Executar a tarefa
Para executar o classificador de texto, use o método classify(text:)
. O Classificador de texto
retorna as categorias possíveis para o texto de entrada.
Swift
let result = try textClassifier.classify(text: text)
Objective-C
MPPTextClassifierResult *result = [textClassifier classifyText:text
error:nil];
Observação: a tarefa bloqueia a linha de execução atual até concluir 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 os frameworks Dispatch ou NSOperation do iOS.
Gerenciar e mostrar resultados
Ao executar a inferência, a tarefa do classificador de texto retorna um objeto TextClassifierResult
que contém a lista de categorias possíveis para o texto de entrada. As categorias são definidas pelo modelo usado. 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"
.
O arquivo ViewController.swift no código de exemplo demonstra como exibir os resultados de detecção retornados da tarefa.