Adicionar classificação de texto no dispositivo ao app com o TensorFlow Lite e o Firebase – Android Codelab

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 atribuir tags ou categorias ao texto de acordo com seu conteúdo. Essa é uma das tarefas fundamentais do processamento de linguagem natural (PLN) e de aplicações amplas, como análise de sentimentos, rotulagem 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) em dados de texto usando técnicas de análise de texto. Com a análise de sentimento, as empresas podem identificar o sentimento do cliente em relação a produtos, marcas ou serviços por meio de conversas e feedback on-line.

Neste tutorial, mostramos como criar um modelo de machine learning para análise de sentimento, em particular, classificando textos como positivos ou negativos. Este é um exemplo de classificação binária (ou de duas classes), um tipo importante e amplamente aplicável de problema de machine learning.

Conteúdo

  • 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
  • Integre modelos de análise de sentimento do TF Lite ao seu 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 versões mais recentes 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ê vai usar este tutorial?

Apenas leitura Ler e fazer os 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 o git não estiver instalado, faça o download do projeto de exemplo na página do GitHub ou clique neste link.

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 está aberto no Android Studio.

4. Executar o app inicial

Agora que você importou o projeto para o Android Studio, está 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 vai ser aberto no dispositivo. Ela 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. Nesse momento, se você tentar prever sentimentos, o app vai 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 do projeto.
  4. Siga as demais etapas de configuração no Console do Firebase e clique em "Criar projeto" (ou "Adicionar Firebase", se você estiver usando um projeto 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 seu app

Depois de adicionar o nome do pacote e selecionar "Registrar", clique em "Fazer download de 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 app.

O plug-in google-services usa o arquivo google-services.json para configurar seu 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 seu projeto com os arquivos do Gradle nesse momento. Selecione File > 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, está pronto para 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 vai ser aberto no dispositivo. Nesse momento, o 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 Runtime > Run all para executar todo o notebook de uma só vez.

Abrir no Colab

Depois de concluir essa 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

A implantação de um modelo no Firebase ML é útil por dois motivos principais:

  1. Podemos manter o tamanho da 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 que todo o app

O modelo pode ser implantado por meio do console ou de forma programática com 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 esta página pela primeira vez. Depois navegue até "Personalizado" e clique no botão "Adicionar modelo".

Quando solicitado, dê ao modelo o nome sentiment_analysis e faça upload do arquivo que você salvou do Colab na etapa anterior.

3c3c50e6ef12b3b.png

10. Fazer o download do modelo do Firebase ML

Escolher quando fazer o download do modelo remoto do Firebase para seu aplicativo pode ser complicado, já que os modelos do TFLite podem crescer relativamente. 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 utilizar esse recurso, uma quantidade significativa de dados será baixada sem motivo. Também é possível definir opções de download, como buscar modelos apenas 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, é possível garantir que a inferência seja 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)

Localizar 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 projeto, selecione Sync Now.

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

MainActivity.java (link em inglês)

Localizar 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 (link em inglês)

Localizar este comentário:

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

Em seguida, adicione:

downloadModel("sentiment_analysis");

11. Integrar o modelo ao seu app

A biblioteca de tarefas do Tensorflow Lite ajuda você a integrar modelos do TensorFlow Lite ao seu app com apenas algumas linhas de código. Inicializaremos uma instância NLClassifier usando o modelo do TensorFlow Lite transferido por download do Firebase. Em seguida, vamos usá-la 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

Localizar 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 projeto, selecione Sync Now.

Inicializar um classificador de texto

Em seguida, vamos carregar o modelo de análise de sentimento transferido por download do Firebase usando o NLClassifier da biblioteca Task.

MainActivity.java (link em inglês)

Vamos declarar uma variável de instância NLClassifier. Localizar 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. Localizar este comentário:

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

Em seguida, adicione:

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

Classificar textos

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

MainActivity.java (link em inglês)

Localizar 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 (link em inglês)

Localizar 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

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

O app será capaz de prever corretamente o sentimento da avaliação do filme que você inserir.

img/text-classification-result.png

13. Melhore o app com mais recursos do Firebase

Além de hospedar seus modelos do 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 modelo em execução no dispositivo dos usuários.
  • o Firebase Analytics para medir a qualidade do desempenho do seu modelo na produção medindo a 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 do TFLite anteriormente? O teste A/B é uma boa maneira de descobrir qual versão tem o 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, veja outros exemplos do TFLite e os guias de Primeiros passos do Firebase.

O que aprendemos

  • TensorFlow Lite
  • Firebase ML

Próximas etapas

  • Meça a velocidade de inferência do modelo com o Monitoramento de desempenho do Firebase.
  • Implantar o modelo do Colab diretamente no Firebase com a API Firebase ML Model Management.
  • Adicione um mecanismo para permitir que os usuários façam comentários sobre o resultado da previsão e use o Firebase Analytics para rastrear o feedback dos usuários.
  • Faça testes A/B com o modelo "Average Word Vector" e o modelo MobileBERT com o Teste A/B do Firebase.

Saiba mais

Perguntas?

Informar problemas