Adicionar classificação de texto no dispositivo ao app com o TensorFlow Lite e o Firebase: codelab para iOS

1. Visão geral

ranking_result_screen.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 um modelo 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
  • Acompanhe o feedback dos usuários para medir a precisão do modelo com o Firebase Analytics
  • Criar perfil do desempenho do modelo com o Monitoramento de desempenho do Firebase
  • Selecione qual dos vários modelos implantados é carregado pela Configuração remota
  • Teste modelos diferentes usando o Teste A/B do Firebase

Pré-requisitos

  • Xcode 11 (ou versão mais recente)
  • CocoaPods 1.9.1 (ou mais recente)

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. Criar projeto do Console do Firebase

Adicionar o Firebase ao projeto

  1. Acesse o Console do Firebase.
  2. Selecione Criar novo projeto e dê a ele o nome "Firebase ML iOS Codelab".

3. Acesse o projeto de amostra

Faça o download do código

Comece clonando o projeto de amostra e executando pod update no diretório do projeto:

git clone https://github.com/FirebaseExtended/codelab-textclassification-ios.git
cd codelab-textclassification-ios
pod install --repo-update

Se o git não estiver instalado, faça o download do projeto de exemplo na página do GitHub ou clique neste link. Depois de fazer o download do projeto, execute-o no Xcode e teste a classificação de texto para ter uma ideia de como ele funciona.

Configurar o Firebase

Siga a documentação para criar um novo projeto do Firebase. Quando tiver seu projeto, faça o download do arquivo GoogleService-Info.plist dele no Console do Firebase e arraste-o para a raiz do projeto Xcode.

9efb62a92f27e939.png

Adicione o Firebase ao seu Podfile e execute a instalação do pod.

pod 'FirebaseMLModelDownloader', '9.3.0-beta'

No método didFinishLaunchingWithOptions do AppDelegate, importe o Firebase na parte de cima do arquivo.

import FirebaseCore

E adicionar uma chamada para configurar o Firebase.

FirebaseApp.configure()

Execute o projeto novamente para garantir que o app esteja configurado corretamente e não falhe após a inicialização.

4. 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.

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.

5. 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

6. 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.

Na parte superior de ModelLoader.swift, importe o módulo do Firebase.

import FirebaseCore
import FirebaseMLModelDownloader

Em seguida, implemente os métodos a seguir.

static func downloadModel(named name: String,
                          completion: @escaping (CustomModel?, DownloadError?) -> Void) {
  guard FirebaseApp.app() != nil else {
    completion(nil, .firebaseNotInitialized)
    return
  }
  guard success == nil && failure == nil else {
    completion(nil, .downloadInProgress)
    return
  }
  let conditions = ModelDownloadConditions(allowsCellularAccess: false)
  ModelDownloader.modelDownloader().getModel(name: name, downloadType: .localModelUpdateInBackground, conditions: conditions) { result in
          switch (result) {
          case .success(let customModel):
                  // Download complete.
                  // The CustomModel object contains the local path of the model file,
                  // which you can use to instantiate a TensorFlow Lite classifier.
                  return completion(customModel, nil)
          case .failure(let error):
              // Download was unsuccessful. Notify error message.
            completion(nil, .downloadFailed(underlyingError: error))
          }
  }
}

No viewDidLoad do ViewController.swift, substitua a chamada para loadModel() pelo nosso novo método de download de modelo.

// Download the model from Firebase
print("Fetching model...")
ModelLoader.downloadModel(named: "sentiment_analysis") { (customModel, error) in
  guard let customModel = customModel else {
    if let error = error {
      print(error)
    }
    return
  }

  print("Model download complete")

  // TODO: Initialize an NLClassifier from the downloaded model
}

Execute o app novamente. Após alguns segundos, você verá um registro no Xcode indicando que o download do modelo remoto foi concluído. Tente digitar algum texto e confirme se o comportamento do aplicativo não mudou.

7. 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 TFLNLClassifier 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 Podfile do app e adicione a TensorFlow Lite Task Library (Text) às dependências do app. Adicione a dependência na declaração target 'TextClassification'.

pod 'TensorFlowLiteTaskText', '~> 0.2.0'

Execute pod install para instalar a nova dependência.

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.

ViewController.swift (em inglês)

Vamos declarar uma variável de instância TFLNLClassifier. Na parte de cima do arquivo, importe a nova dependência:

import TensorFlowLiteTaskText

Encontre este comentário acima do método que modificamos na última etapa:

// TODO: Add a TFLNLClassifier property.

Substitua o TODO pelo seguinte código:

private var classifier: TFLNLClassifier?

Inicialize a variável textClassifier com o modelo de análise de sentimento transferido por download do Firebase. Encontre este comentário que adicionamos na última etapa:

// TODO: Initialize an NLClassifier from the downloaded model

Substitua o TODO pelo seguinte código:

let options = TFLNLClassifierOptions()
self.classifier = TFLNLClassifier.nlClassifier(modelPath: customModel.path, options: options)

Classificar textos

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

ViewController.swift (em inglês)

No método classify(text:), encontre o comentário TODO:

// TODO: Run sentiment analysis on the input text

Substitua o comentário por este código:

guard let classifier = self.classifier else { return }

// Classify the text
let classifierResults = classifier.classify(text: text)

// Append the results to the list of results
let result = ClassificationResult(text: text, results: classifierResults)
results.append(result)

8. Executar o app final

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

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

ranking_result_screen.png

9. 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:

10. 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