Este tutorial mostra como criar um aplicativo Android usando o TensorFlow Lite para classificar texto em linguagem natural. Este aplicativo foi projetado para um dispositivo Android físico, mas também pode ser executado em um emulador de dispositivo.
O aplicativo de exemplo usa o TensorFlow Lite para classificar texto como positivo ou negativo, usando a biblioteca de tarefas para linguagem natural (NL) para permitir a execução dos modelos de aprendizado de máquina de classificação de texto.
Se estiver atualizando um projeto existente, você poderá usar o aplicativo de exemplo como referência ou modelo. Para obter instruções sobre como adicionar classificação de texto a um aplicativo existente, consulte Atualizando e modificando seu aplicativo .
Visão geral da classificação de texto
A classificação de texto é a tarefa de aprendizado de máquina de atribuir um conjunto de categorias predefinidas a textos abertos. Um modelo de classificação de texto é treinado em um corpus de texto em linguagem natural, onde palavras ou frases são classificadas manualmente.
O modelo treinado recebe texto como entrada e tenta categorizar o texto de acordo com o conjunto de classes conhecidas para o qual foi treinado para classificar. Por exemplo, os modelos neste exemplo aceitam um trecho de texto e determinam se o sentimento do texto é positivo ou negativo. Para cada trecho de texto, o modelo de classificação de texto gera uma pontuação que indica a confiança do texto ser classificado corretamente como positivo ou negativo.
Para obter mais informações sobre como os modelos neste tutorial são gerados, consulte o tutorial Classificação de texto com TensorFlow Lite Model Maker .
Modelos e conjunto de dados
Este tutorial usa modelos que foram treinados usando o conjunto de dados SST-2 (Stanford Sentiment Treebank). SST-2 contém 67.349 resenhas de filmes para treinamento e 872 resenhas de filmes para teste, com cada crítica categorizada como positiva ou negativa. Os modelos usados neste aplicativo foram treinados usando a ferramenta TensorFlow Lite Model Maker .
O aplicativo de exemplo usa os seguintes modelos pré-treinados:
Vetor médio de palavras (
NLClassifier
) - ONLClassifier
da Biblioteca de Tarefas classifica o texto de entrada em diferentes categorias e pode lidar com a maioria dos modelos de classificação de texto.MobileBERT (
BertNLClassifier
) - OBertNLClassifier
da Biblioteca de Tarefas é semelhante ao NLClassifier, mas é adaptado para casos que exigem tokenizações de Wordpiece e Sentencepiece fora do gráfico.
Configure e execute o aplicativo de exemplo
Para configurar o aplicativo de classificação de texto, baixe o aplicativo de exemplo no GitHub e execute-o usando o Android Studio .
requisitos de sistema
- Android Studio versão 2021.1.1 (Bumblebee) ou superior.
- Android SDK versão 31 ou superior
- Dispositivo Android com versão mínima do sistema operacional SDK 21 (Android 7.0 - Nougat) com modo de desenvolvedor ativado ou um emulador Android.
Obtenha o código de exemplo
Crie uma cópia local do código de exemplo. Você usará esse código para criar um projeto no Android Studio e executar o aplicativo de exemplo.
Para clonar e configurar o código de exemplo:
- Clone o repositório git
git clone https://github.com/tensorflow/examples.git
- Opcionalmente, configure sua instância git para usar checkout esparso, para que você tenha apenas os arquivos do aplicativo de exemplo de classificação de texto:
cd examples git sparse-checkout init --cone git sparse-checkout set lite/examples/text_classification/android
Importe e execute o projeto
Crie um projeto a partir do código de exemplo baixado, compile o projeto e execute-o.
Para importar e criar o projeto de código de exemplo:
- Inicie o Android Studio .
- No Android Studio, selecione Arquivo > Novo > Importar Projeto .
- Navegue até o diretório de código de exemplo que contém o arquivo build.gradle (
.../examples/lite/examples/text_classification/android/build.gradle
) e selecione esse diretório. - Se o Android Studio solicitar uma sincronização do Gradle, escolha OK.
- Certifique-se de que seu dispositivo Android esteja conectado ao computador e que o modo de desenvolvedor esteja ativado. Clique na seta verde
Run
.
Se você selecionar o diretório correto, o Android Studio criará um novo projeto e o compilará. Este processo pode demorar alguns minutos, dependendo da velocidade do seu computador e se você utilizou o Android Studio para outros projetos. Quando a compilação for concluída, o Android Studio exibirá uma mensagem BUILD SUCCESSFUL
no painel de status Build Output .
Para executar o projeto:
- No Android Studio, execute o projeto selecionando Run > Run… .
- Selecione um dispositivo Android conectado (ou emulador) para testar o aplicativo.
Usando o aplicativo
Após executar o projeto no Android Studio, o aplicativo será aberto automaticamente no dispositivo conectado ou emulador de dispositivo.
Para usar o classificador de texto:
- Insira um trecho de texto na caixa de texto.
- No menu suspenso Delegado , escolha
CPU
ouNNAPI
. - Especifique um modelo escolhendo
AverageWordVec
ouMobileBERT
. - Escolha Classificar .
O aplicativo gera uma pontuação positiva e uma pontuação negativa . Essas duas pontuações somarão 1 e medem a probabilidade de o sentimento do texto de entrada ser positivo ou negativo. Um número mais alto denota um nível mais alto de confiança.
Agora você tem um aplicativo de classificação de texto funcional. Use as seções a seguir para entender melhor como o aplicativo de exemplo funciona e como implementar recursos de classificação de texto em seus aplicativos de produção:
Como o aplicativo funciona – Um passo a passo da estrutura e dos arquivos principais do aplicativo de exemplo.
Modifique seu aplicativo – Instruções sobre como adicionar classificação de texto a um aplicativo existente.
Como funciona o aplicativo de exemplo
O aplicativo usa o pacote Biblioteca de tarefas para linguagem natural (NL) para implementar os modelos de classificação de texto. Os dois modelos, Average Word Vector e MobileBERT, foram treinados usando o TensorFlow Lite Model Maker . O aplicativo é executado na CPU por padrão, com a opção de aceleração de hardware usando o delegado NNAPI.
Os seguintes arquivos e diretórios contêm o código crucial para este aplicativo de classificação de texto:
- TextClassificationHelper.kt – Inicializa o classificador de texto e manipula a seleção de modelo e delegado.
- MainActivity.kt – Implementa o aplicativo, incluindo a chamada de
TextClassificationHelper
eResultsAdapter
. - ResultsAdapter.kt – Manipula e formata os resultados.
Modifique seu aplicativo
As seções a seguir explicam as principais etapas para modificar seu próprio aplicativo Android para executar o modelo mostrado no aplicativo de exemplo. Estas instruções usam o aplicativo de exemplo como ponto de referência. As alterações específicas necessárias para seu próprio aplicativo podem variar em relação ao aplicativo de exemplo.
Abra ou crie um projeto Android
Você precisa de um projeto de desenvolvimento Android no Android Studio para acompanhar o restante destas instruções. Siga as instruções abaixo para abrir um projeto existente ou criar um novo.
Para abrir um projeto de desenvolvimento Android existente:
- No Android Studio, selecione Arquivo > Abrir e selecione um projeto existente.
Para criar um projeto básico de desenvolvimento Android:
- Siga as instruções no Android Studio para criar um projeto básico .
Para obter mais informações sobre como usar o Android Studio, consulte a documentação do Android Studio .
Adicionar dependências do projeto
Em seu próprio aplicativo, você deve adicionar dependências de projeto específicas para executar modelos de machine learning do TensorFlow Lite e acessar funções utilitárias que convertem dados como strings em um formato de dados tensor que pode ser processado pelo modelo que você está usando.
As instruções a seguir explicam como adicionar as dependências de projeto e módulo necessárias ao seu próprio projeto de aplicativo Android.
Para adicionar dependências de módulo:
No módulo que usa o TensorFlow Lite, atualize o arquivo
build.gradle
do módulo para incluir as dependências a seguir.No aplicativo de exemplo, as dependências estão localizadas em app/build.gradle :
dependencies { ... implementation 'org.tensorflow:tensorflow-lite-task-text:0.4.0' }
O projeto deve incluir a biblioteca de tarefas Text (
tensorflow-lite-task-text
).Se você deseja modificar este aplicativo para ser executado em uma unidade de processamento gráfico (GPU), a biblioteca GPU (
tensorflow-lite-gpu-delegate-plugin
) fornece a infraestrutura para executar o aplicativo em GPU e Delegate (tensorflow-lite-gpu
) fornece a lista de compatibilidade. A execução deste aplicativo na GPU está fora do escopo deste tutorial.No Android Studio, sincronize as dependências do projeto selecionando: File > Sync Project with Gradle Files .
Inicialize os modelos de ML
No seu aplicativo Android, você deve inicializar o modelo de machine learning do TensorFlow Lite com parâmetros antes de executar previsões com o modelo.
Um modelo do TensorFlow Lite é armazenado como um arquivo *.tflite
. O arquivo de modelo contém a lógica de predição e normalmente inclui metadados sobre como interpretar os resultados da predição, como nomes de classes de predição. Normalmente, os arquivos de modelo são armazenados no diretório src/main/assets
do seu projeto de desenvolvimento, como no exemplo de código:
-
<project>/src/main/assets/mobilebert.tflite
-
<project>/src/main/assets/wordvec.tflite
Por conveniência e legibilidade do código, o exemplo declara um objeto complementar que define as configurações do modelo.
Para inicializar o modelo no seu aplicativo:
Crie um objeto complementar para definir as configurações do modelo. No aplicativo de exemplo, este objeto está localizado em TextClassificationHelper.kt :
companion object { const val DELEGATE_CPU = 0 const val DELEGATE_NNAPI = 1 const val WORD_VEC = "wordvec.tflite" const val MOBILEBERT = "mobilebert.tflite" }
Crie as configurações para o modelo criando um objeto classificador e construa um objeto TensorFlow Lite usando
BertNLClassifier
ouNLClassifier
.No aplicativo de exemplo, isso está localizado na função
initClassifier
em TextClassificationHelper.kt :fun initClassifier() { ... if( currentModel == MOBILEBERT ) { ... bertClassifier = BertNLClassifier.createFromFileAndOptions( context, MOBILEBERT, options) } else if (currentModel == WORD_VEC) { ... nlClassifier = NLClassifier.createFromFileAndOptions( context, WORD_VEC, options) } }
Habilite aceleração de hardware (opcional)
Ao inicializar um modelo do TensorFlow Lite em seu aplicativo, você deve considerar o uso de recursos de aceleração de hardware para acelerar os cálculos de previsão do modelo. Os delegados do TensorFlow Lite são módulos de software que aceleram a execução de modelos de aprendizado de máquina usando hardware de processamento especializado em um dispositivo móvel, como unidades de processamento gráfico (GPUs) ou unidades de processamento de tensores (TPUs).
Para ativar a aceleração de hardware no seu aplicativo:
Crie uma variável para definir o delegado que a aplicação utilizará. No aplicativo de exemplo, esta variável está localizada no início de TextClassificationHelper.kt :
var currentDelegate: Int = 0
Crie um seletor de delegado. No aplicativo de exemplo, o seletor delegado está localizado na função
initClassifier
em TextClassificationHelper.kt :val baseOptionsBuilder = BaseOptions.builder() when (currentDelegate) { DELEGATE_CPU -> { // Default } DELEGATE_NNAPI -> { baseOptionsBuilder.useNnapi() } }
O uso de delegados para executar modelos do TensorFlow Lite é recomendado, mas não obrigatório. Para obter mais informações sobre como usar delegados com o TensorFlow Lite, consulte Delegados do TensorFlow Lite .
Preparar dados para o modelo
No seu aplicativo Android, seu código fornece dados ao modelo para interpretação, transformando dados existentes, como texto bruto, em um formato de dados Tensor que pode ser processado pelo seu modelo. Os dados em um Tensor que você passa para um modelo devem ter dimensões ou formas específicas que correspondam ao formato dos dados usados para treinar o modelo.
Este aplicativo de classificação de texto aceita uma string como entrada e os modelos são treinados exclusivamente em um corpus em inglês. Caracteres especiais e palavras que não sejam do inglês são ignorados durante a inferência.
Para fornecer dados de texto ao modelo:
Certifique-se de que a função
initClassifier
contém o código para o delegado e os modelos, conforme explicado nas seções Inicializar os modelos de ML e Habilitar aceleração de hardware .Use o bloco
init
para chamar a funçãoinitClassifier
. No aplicativo de exemplo, oinit
está localizado em TextClassificationHelper.kt :init { initClassifier() }
Executar previsões
No seu aplicativo Android, depois de inicializar um objeto BertNLClassifier ou NLClassifier , você pode começar a alimentar o texto de entrada para o modelo categorizar como "positivo" ou "negativo".
Para executar previsões:
Crie uma função
classify
, que usa o classificador selecionado (currentModel
) e mede o tempo necessário para classificar o texto de entrada (inferenceTime
). No aplicativo de exemplo, a funçãoclassify
está localizada em TextClassificationHelper.kt :fun classify(text: String) { executor = ScheduledThreadPoolExecutor(1) executor.execute { val results: List<Category> // inferenceTime is the amount of time, in milliseconds, that it takes to // classify the input text. var inferenceTime = SystemClock.uptimeMillis() // Use the appropriate classifier based on the selected model if(currentModel == MOBILEBERT) { results = bertClassifier.classify(text) } else { results = nlClassifier.classify(text) } inferenceTime = SystemClock.uptimeMillis() - inferenceTime listener.onResult(results, inferenceTime) } }
Passe os resultados da
classify
para o objeto ouvinte.fun classify(text: String) { ... listener.onResult(results, inferenceTime) }
Lidar com a saída do modelo
Depois de inserir uma linha de texto, o modelo produz uma pontuação de previsão, expressa como Float, entre 0 e 1 para as categorias “positiva” e “negativa”.
Para obter os resultados da previsão do modelo:
Crie uma função
onResult
para o objeto ouvinte manipular a saída. No aplicativo de exemplo, o objeto ouvinte está localizado em MainActivity.ktprivate val listener = object : TextClassificationHelper.TextResultsListener { override fun onResult(results: List<Category>, inferenceTime: Long) { runOnUiThread { activityMainBinding.bottomSheetLayout.inferenceTimeVal.text = String.format("%d ms", inferenceTime) adapter.resultsList = results.sortedByDescending { it.score } adapter.notifyDataSetChanged() } } ... }
Adicione uma função
onError
ao objeto listener para tratar erros:private val listener = object : TextClassificationHelper.TextResultsListener { ... override fun onError(error: String) { Toast.makeText(this@MainActivity, error, Toast.LENGTH_SHORT).show() } }
Depois que o modelo retornar um conjunto de resultados de previsão, seu aplicativo poderá agir de acordo com essas previsões, apresentando o resultado ao usuário ou executando lógica adicional. O aplicativo de exemplo lista as pontuações de previsão na interface do usuário.
Próximos passos
- Treine e implemente os modelos do zero com o tutorial Classificação de texto com TensorFlow Lite Model Maker .
- Explore mais ferramentas de processamento de texto para o TensorFlow .
- Baixe outros modelos BERT no TensorFlow Hub .
- Explore vários usos do TensorFlow Lite nos exemplos .
- Saiba mais sobre como usar modelos de machine learning com o TensorFlow Lite na seção Modelos .
- Saiba mais sobre como implementar o aprendizado de máquina em seu aplicativo móvel no Guia do desenvolvedor do TensorFlow Lite .