Adicionar a classificação de texto no dispositivo ao app com o TensorFlow Lite e o Firebase: codelab do Android

1. Visão geral

text-classification-result.png

Este é o codelab "Classificação de texto com o TensorFlow Lite e o Firebase". Neste codelab, você aprenderá a usar o TensorFlow Lite e o Firebase para treinar e implantar um modelo de classificação de texto no seu app. Este codelab é baseado neste exemplo do TensorFlow Lite.

A classificação de texto é o processo de atribuição de tags ou categorias ao texto de acordo com o conteúdo. Essa é uma das tarefas fundamentais do processamento de linguagem natural (PLN) com aplicações amplas, como análise de sentimento, identificação de tópicos, detecção de spam e detecção de intents.

A análise de sentimento é a interpretação e classificação de emoções (positivas, negativas e neutras) nos dados de texto usando técnicas de análise de texto. A análise de sentimento permite que as empresas identifiquem o sentimento dos clientes em relação a produtos, marcas ou serviços em conversas on-line e feedback.

Neste tutorial, mostramos como criar um modelo de machine learning para análise de sentimento, principalmente ao classificar um texto como positivo ou negativo. Esse é um exemplo de classificação binária (ou de duas classes), um tipo importante e amplamente aplicável de problema de machine learning.

O que você vai aprender

  • Treinar modelos de análise de sentimento do TF Lite com o TF Lite Model Maker
  • Implante modelos do TF Lite no Firebase ML e acesse-os pelo app
  • Integrar modelos de análise de sentimento do TF Lite ao app usando a Biblioteca de tarefas do TF Lite

O que é necessário

  • Versão mais recente do Android Studio.
  • Exemplo de código.
  • Um dispositivo de teste com o Android 5.0 ou mais recente e o Google Play Services 9.8 ou mais recente ou um emulador com o Google Play Services 9.8 ou mais recente
  • Se estiver usando um dispositivo, um cabo de conexão.

Como você usará este tutorial?

Apenas leitura Leitura e exercícios

Como você classificaria sua experiência com a criação de apps Android?

Iniciante Intermediário Proficiente

2. Acessar o exemplo de código

Clone o repositório do GitHub na linha de comando.

$ git clone https://github.com/FirebaseExtended/codelab-textclassification-android.git

Se você não tiver o git instalado, faça o download do projeto de exemplo na página do GitHub ou clique neste link (link em inglês).

3. Importar o app inicial

No Android Studio, selecione o diretório codelab-textclassification-android-master ( android_studio_folder.png) no download do exemplo de código (File > Open > .../codelab-textclassification-android-master/start).

O projeto inicial deve estar aberto no Android Studio.

4. Executar o app inicial

Agora que você importou o projeto para o Android Studio, está tudo pronto para executar o app pela primeira vez. Conecte o dispositivo Android e clique em Run ( executar.png) na barra de ferramentas do Android Studio.

O app será iniciado no dispositivo. Ele contém apenas uma interface simples que facilita a integração e o teste de modelos de classificação de texto nas próximas etapas. Neste ponto, se você tentar prever sentimentos, o app retornará apenas alguns resultados fictícios.

2fb4e69fafb2e3ed.png

5. Criar projeto do console do Firebase

Adicionar o Firebase ao projeto

  1. Acesse o Console do Firebase.
  2. Selecione Adicionar projeto.
  3. Selecione ou digite o nome de um projeto.
  4. Siga as demais etapas de configuração no Console do Firebase e clique em Criar projeto (ou Adicionar Firebase, se estiver usando um projeto atual do Google).

6. Adicionar o Firebase ao app

  1. Na tela de visão geral do novo projeto, clique no ícone do Android para iniciar o fluxo de trabalho de configuração.
  2. Insira o nome do pacote do codelab: org.tensorflow.lite.codelabs.textclassification

Adicionar o arquivo google-services.json ao app

Depois de adicionar o nome do pacote e selecionar "Registrar**, clique em Fazer download do google-services.json** para receber o arquivo de configuração do Firebase para Android e copie o arquivo google-services.json no diretório *app* do seu projeto.

Adicionar o plug-in google-services ao app

Siga as instruções no Console do Firebase atualizando os arquivos build.gradle.kts para adicionar o Firebase ao seu app.

O plug-in google-services usa o arquivo google-services.json para configurar o aplicativo para usar o Firebase.

Sincronizar seu projeto com arquivos do Gradle

Para garantir que todas as dependências estejam disponíveis para o app, sincronize o projeto com os arquivos do Gradle neste momento. Selecione Arquivo > Sync Project with Gradle Files na barra de ferramentas do Android Studio

7. Executar o app com o Firebase

Agora que você configurou o plug-in google-services com o arquivo JSON, já pode executar o app com o Firebase. Conecte o dispositivo Android e clique em Run ( executar.png) na barra de ferramentas do Android Studio.

O app será iniciado no dispositivo. Neste ponto, seu app ainda será criado.

8. Treinar um modelo de análise de sentimento

Vamos usar o TensorFlow Lite Model Maker para treinar um modelo de classificação de texto e prever o sentimento de um determinado texto.

Esta etapa é apresentada como um notebook Python que pode ser aberto no Google Colab. Selecione Ambiente de execução > Executar todos para executar todos os notebooks de uma só vez.

Abrir no Colab

Depois de concluir esta etapa, você terá um modelo de análise de sentimento do TensorFlow Lite pronto para implantação em um app para dispositivos móveis.

9. Implantar um modelo no Firebase ML

Implantar um modelo no Firebase ML é útil por dois motivos principais:

  1. Podemos manter o tamanho de instalação do app pequeno e fazer o download do modelo apenas se necessário
  2. O modelo pode ser atualizado regularmente e com um ciclo de lançamento diferente do app inteiro.

O modelo pode ser implantado pelo console ou de maneira programática usando o SDK Admin do Firebase. Nesta etapa, vamos implantar pelo console.

Primeiro, abra o Console do Firebase e clique em "Machine Learning" no painel de navegação à esquerda. Clique em "Começar". se estiver abrindo pela primeira vez. Depois, acesse "Personalizado". e clique no botão "Adicionar modelo" .

Quando solicitado, nomeie o modelo como sentiment_analysis e faça upload do arquivo que você transferiu por download do Colab na etapa anterior.

3c3c50e6ef12b3b.png

10. Baixar o modelo do Firebase ML

Escolher quando fazer o download do modelo remoto do Firebase no seu app pode ser complicado, já que os modelos do TFLite podem ficar relativamente grandes. O ideal é evitar o carregamento do modelo imediatamente após a inicialização do app, já que se o modelo for usado para apenas um recurso e o usuário nunca usar esse recurso, uma quantidade significativa de dados será baixada sem motivo. Também podemos definir opções de download como buscar modelos somente quando conectado a uma rede Wi-Fi. Para garantir que o modelo esteja disponível mesmo sem uma conexão de rede, é importante agrupá-lo sem o app como backup.

Para simplificar, removeremos o modelo empacotado padrão e sempre faremos o download de um modelo do Firebase quando o app for iniciado pela primeira vez. Dessa forma, ao executar a análise de sentimento, você pode ter certeza de que a inferência está sendo executada com o modelo fornecido pelo Firebase.

No arquivo app/build.gradle.kts, adicione a dependência do Firebase Machine Learning.

app/build.gradle.kts (link em inglês)

Encontrar este comentário:

// TODO 1: Add Firebase ML dependency

Em seguida, adicione:

implementation(platform("com.google.firebase:firebase-bom:32.0.0"))
implementation("com.google.firebase:firebase-ml-modeldownloader:24.1.2")

Quando o Android Studio solicitar a sincronização do seu projeto, escolha Sync Now.

Depois, vamos adicionar código para fazer o download do modelo do Firebase.

MainActivity.java (em inglês)

Encontrar este comentário:

// TODO 2: Implement a method to download TFLite model from Firebase

Em seguida, adicione:

  /** Download model from Firebase ML. */
  private synchronized void downloadModel(String modelName) {
      CustomModelDownloadConditions conditions = new CustomModelDownloadConditions.Builder()
            .requireWifi()
            .build();
      FirebaseModelDownloader.getInstance()
              .getModel("sentiment_analysis", DownloadType.LOCAL_MODEL, conditions)
              .addOnSuccessListener(model -> {
                  try {
                      // TODO 6: Initialize a TextClassifier with the downloaded model

                      predictButton.setEnabled(true);
                  } catch (IOException e) {
                      Log.e(TAG, "Failed to initialize the model. ", e);
                      Toast.makeText(
                              MainActivity.this,
                              "Model initialization failed.",
                              Toast.LENGTH_LONG)
                              .show();
                      predictButton.setEnabled(false);
                  }
              })
              .addOnFailureListener(e -> {
                      Log.e(TAG, "Failed to download the model. ", e);
                      Toast.makeText(
                              MainActivity.this,
                              "Model download failed, please check your connection.",
                              Toast.LENGTH_LONG)
                              .show();

                      }
              );

}

Em seguida, chame o método downloadModel no método onCreate da atividade.

MainActivity.java (em inglês)

Encontrar este comentário:

// TODO 3: Call the method to download TFLite model

Em seguida, adicione:

downloadModel("sentiment_analysis");

11. Integrar o modelo ao app

A Tensorflow Lite Task Library ajuda você a integrar modelos do TensorFlow Lite ao app com apenas algumas linhas de código. Vamos inicializar uma instância do NLClassifier usando o modelo do TensorFlow Lite transferido por download do Firebase. Em seguida, vamos usá-lo para classificar a entrada de texto dos usuários do app e mostrar o resultado na interface.

Adicionar a dependência

Acesse o arquivo Gradle do app e adicione a TensorFlow Lite Task Library (Text) às dependências do app.

app/build.gradle

Encontrar este comentário:

// TODO 4: Add TFLite Task API (Text) dependency

Em seguida, adicione:

implementation("org.tensorflow:tensorflow-lite-task-text:0.3.0")

Quando o Android Studio solicitar a sincronização do seu projeto, escolha Sync Now.

Inicializar um classificador de texto

Em seguida, carregaremos o modelo de análise de sentimento transferido do Firebase usando o NLClassifier da Biblioteca de tarefas.

MainActivity.java (em inglês)

Vamos declarar uma variável de instância NLClassifier. Encontrar este comentário:

// TODO 5: Define a NLClassifier variable

Em seguida, adicione:

private NLClassifier textClassifier;

Inicialize a variável textClassifier com o modelo de análise de sentimento transferido por download do Firebase. Encontrar este comentário:

// TODO 6: Initialize a TextClassifier with the downloaded model

Em seguida, adicione:

textClassifier = NLClassifier.createFromFile(model.getFile());

Classificar texto

Depois que a instância textClassifier for configurada, será possível executar a análise de sentimento com uma única chamada de método.

MainActivity.java (em inglês)

Encontrar este comentário:

// TODO 7: Run sentiment analysis on the input text

Em seguida, adicione:

List<Category> results = textClassifier.classify(text);

Implementar o pós-processamento

Por fim, vamos converter a saída do modelo em um texto descritivo para mostrar na tela.

MainActivity.java (em inglês)

Encontrar este comentário:

// TODO 8: Convert the result to a human-readable text

Remova o código que gera o texto do resultado fictício:

String textToShow = "Dummy classification result.\n";

Em seguida, adicione:

String textToShow = "Input: " + text + "\nOutput:\n";
for (int i = 0; i < results.size(); i++) {
  Category result = results.get(i);
  textToShow += String.format("    %s: %s\n", result.getLabel(),
                              result.getScore());
}
textToShow += "---------\n";

12. Executar o app final

Você integrou o modelo de análise de sentimento ao aplicativo, então vamos testá-lo. Conecte o dispositivo Android e clique em Run ( executar.png) na barra de ferramentas do Android Studio.

O aplicativo deve ser capaz de prever corretamente o sentimento da crítica de filme que você inserir.

img/text-classification-result.png

13. Melhorar o app com mais recursos do Firebase

Além de hospedar seus modelos TFLite, o Firebase oferece vários outros recursos para potencializar seus casos de uso de machine learning:

  • O Monitoramento de desempenho do Firebase para medir a velocidade de inferência do seu modelo em execução nos dispositivo.
  • o Firebase Analytics para medir a qualidade do desempenho do seu modelo na produção por meio da avaliação da reação do usuário.
  • Teste A/B do Firebase para testar várias versões do seu modelo
  • Você se lembra que treinamos duas versões do nosso modelo TFLite anteriormente? O teste A/B é uma boa maneira de descobrir qual versão tem melhor desempenho na produção.

Para saber mais sobre como aproveitar esses recursos no seu app, confira os codelabs abaixo:

14. Parabéns!

Neste codelab, você aprendeu a treinar um modelo do TFLite de análise de sentimento e implantá-lo no seu app para dispositivos móveis usando o Firebase. Para saber mais sobre o TFLite e o Firebase, confira outros exemplos do TFLite e os guias de introdução do Firebase.

O que vimos

  • TensorFlow Lite
  • Firebase ML

Próximas etapas

  • Meça a velocidade de inferência do seu modelo com o Monitoramento de desempenho do Firebase.
  • Implante o modelo do Colab diretamente no Firebase pela API Firebase ML Model Management.
  • Adicione um mecanismo para permitir que os usuários enviem feedback sobre o resultado da previsão e use o Firebase Analytics para rastrear esse feedback.
  • Faça testes A/B com o modelo médio do vetor de palavras e o modelo MobileBERT com o Teste A/B do Firebase.

Saiba mais

Perguntas?

Informar problemas