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 o 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 você estiver atualizando um projeto existente, 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 um texto aberto. 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 o texto como entrada e tenta categorizar o texto de acordo com o conjunto de classes conhecidas que 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 sendo 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 o 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). O SST-2 contém 67.349 resenhas de filmes para treinamento e 872 resenhas de filmes para teste, com cada resenha classificada 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:
Average Word Vector (
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 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 do 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 uma versão mínima do SO do SDK 21 (Android 7.0 - Nougat) com o modo de desenvolvedor ativado ou um emulador do 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 do git para usar check-out esparso, para que você tenha apenas os arquivos para o aplicativo de exemplo de classificação de texto:
cd examples git sparse-checkout init --cone git sparse-checkout set lite/examples/text_classification/android
Importar e executar o projeto
Crie um projeto a partir do código de exemplo baixado, compile o projeto e execute-o.
Para importar e construir o projeto de código de exemplo:
- Inicie o Android Studio .
- No Android Studio, selecione File > New > Import Project .
- 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 um Gradle Sync, escolha OK.
- Certifique-se de que seu dispositivo Android esteja conectado ao seu computador e que o modo de desenvolvedor esteja ativado. Clique na seta verde
Run
.
Se você selecionar o diretório correto, o Android Studio cria um novo projeto e o compila. Esse processo pode levar alguns minutos, dependendo da velocidade do seu computador e se você já usou 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 no emulador de dispositivo.
Para usar o classificador de texto:
- Insira um trecho de texto na caixa de texto.
- Na lista suspensa 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 medirão a probabilidade de que o sentimento do texto de entrada seja 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 em funcionamento. 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 arquivos-chave do aplicativo de exemplo.
Modifique seu aplicativo - Instruções sobre como adicionar classificação de texto a um aplicativo existente.
Como o aplicativo de exemplo funciona
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 trata do modelo e da seleção de delegados.
- MainActivity.kt - Implementa o aplicativo, incluindo a chamada
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 do aplicativo de exemplo.
Abra ou crie um projeto Android
Você precisa de um projeto de desenvolvimento Android no Android Studio para seguir 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 aprendizado de máquina do TensorFlow Lite e acessar funções de utilitário que convertem dados, como strings, em um formato de dados de tensor que pode ser processado pelo modelo que você está usando.
As instruções a seguir explicam como adicionar as dependências necessárias do projeto e do módulo 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 na 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 aprendizado de máquina 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 previsão e normalmente inclui metadados sobre como interpretar os resultados da previsão, como nomes de classe de previsã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 em 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) } }
Ativar aceleração de hardware (opcional)
Ao inicializar um modelo do TensorFlow Lite em seu aplicativo, considere 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 unidade de processamento gráfico (GPUs) ou unidades de processamento de tensor (TPUs).
Para habilitar a aceleração de hardware em seu aplicativo:
Crie uma variável para definir o delegado que o aplicativo usará. No aplicativo de exemplo, essa 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 de 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 representantes para executar modelos do TensorFlow Lite é recomendado, mas não obrigatório. Para obter mais informações sobre como usar representantes com o TensorFlow Lite, consulte Delegados do TensorFlow Lite .
Preparar dados para o modelo
Em seu aplicativo Android, seu código fornece dados ao modelo para interpretação, transformando dados existentes, como texto bruto, em um formato de dados do Tensor que pode ser processado por 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 de dados usado 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 de idioma inglês. Caracteres especiais e palavras não inglesas são ignorados durante a inferência.
Para fornecer dados de texto ao modelo:
Certifique-se de que a função
initClassifier
contenha o código para o delegado e os modelos, conforme explicado nas seções Inicializar os modelos de ML e Ativar 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
Em 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 de
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 de
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 um Float, entre 0 e 1 para as categorias 'positivo' e 'negativo'.
Para obter os resultados de previsão do modelo:
Crie uma função
onResult
para o objeto listener para 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 lidar com 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 nessas 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 o TensorFlow Lite Model Maker .
- Explore mais ferramentas de processamento de texto para o TensorFlow .
- Baixe outros modelos de 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 .