Explorando o ML Kit for Firebase

O artigo original pode ser encontrado no Medium

Parte 2 — Linguagem Natural e Identificação de Linguagem

Este artigo faz parte da série Explorando o ML Kit for Firebase:

  1. O novo serviço de Machine Learning do Firebase
  2. Linguagem Natural e Identificação de Linguagem

No ano passado, a equipa do Firebase anunciou um novo SDK que foi adicionado à plataforma — o ML Kit. O ML Kit é um SDK que permite que desenvolvedores utilizem Machine Learning em aplicativos Android e iOS. Se você ainda não conhece o ML Kit, leia o primeiro artigo desta série.

Quando foi anunciado, o ML Kit só tinha funcionalidades relacionadas com o ramo Visão Computacional (Computer Vision). Mas hoje foi adicionada a primeira funcionalidade do ramo Processamento de Linguagem Natural (Natural Language Processing) — a chamada identificação de linguagem (Language Identification).

Assim, o ML Kit conta agora com 2 pacotes: o ML Vision (sobre o qual falei no artigo anterior) e o Natural Language (o tema deste artigo).

Natural Language

Enquanto que o ML Vision aplica conceitos de Machine Learning em imagens, o pacote Natural Language usa ML no processamento de texto.
Atualmente a única funcionalidade inclusa neste pacote é a Identificação de Linguagem, só está disponível para Android ou iOS e só é possível utilizá-la on-device, pois ainda não tem uma versão cloud.

Para ter o Natural Language na sua app, você só tem de:

  1. Adicionar o Firebase ao projecto;
  2. Adicionar a dependência do Natural Language no ficheiro build.gradle:
implementation 'com.google.firebase:firebase-ml-natural-language:18.1.1'

Identificação de linguagem

Como o nome sugere, esta funcionalidade analisa um texto e identifica em que linguagem/idioma esse texto está escrito.

Para utilizar esta funcionalidade, você tem de adicionar a sua dependência no build.gradle:

implementation 'com.google.firebase:firebase-ml-natural-language-language-id-model:18.0.2'

E na sua Activity/Fragment crie um objecto do tipo FirebaseLanguageIdentification :

val identification = FirebaseNaturalLanguage.getInstance().languageIdentification

Esta funcionalidade pode ser usada de 2 maneiras:

  1. Identificar a linguagem mais provável
    É como clicar no botão “Estou com sorte” (I’m feeling lucky) do Google Search. Será mostrada a linguagem com maior probabilidade.
    Basta utilizar o método:
private fun identificarLinguagemMaisProvavel(texto: String) {
identification.identifyLanguage(texto)
.addOnSuccessListener { linguagem ->
if
(linguagem == "und") {
// Linguagem desconhecida
} else {
// Mostrar a linguagem na UI
}
}
.addOnFailureListener { e ->
// Ocorreu um erro
}
}

Por padrão, o SDK irá mostrar a linguagem mais provável que tenha confidência maior do que 0,5 . Mas se você quiser especificar o número mínimo de confidência, você pode criar um objecto FirebaseLanguageIdentificationOptions e passar para o identificador:

val options = FirebaseLanguageIdentificationOptions.Builder()
.setConfidenceThreshold(0.5f)
.build()

val identification = FirebaseNaturalLanguage.getInstance()
.getLanguageIdentification(options)

2. Identificar todas linguagens possíveis:
Para ver todas as possibilidades, é só utilizar o método:

private fun identificarLinguagensPossiveis(texto: String) {
identification.identifyPossibleLanguages(texto)
.addOnSuccessListener { linguagens ->
var
output = ""
for (linguagem in linguagens) {
output += linguagem.languageCode + " (${linguagem.confidence})\n"
}
// Mostrar o output na UI
}
.addOnFailureListener { e ->
// Ocorreu um erro
}
}

Por padrão, serão mostradas todas linguagens com confidência maior do que 0,01. Mas se você quiser especificar o número mínimo de confidência, crie um objeto FirebaseLanguageIdentificationOptions como mostrado no método 1 (linguagem mais provável).

Note que a String retornada pelo SDK é o código BCP-47 da linguagem. Você pode encontrar a lista de todas as linguagens suportadas aqui.

Veja o código completo da Activity aqui:

Identificar linguagens no Android com o Firebase é tão simples quanto isso. Esta funcionalidade pode não parecer útil, mas é sim em alguns casos de uso. Por exemplo: se você tiver criado uma aplicação que é uma espécie de um blog, você pode usar a identificação de linguagens para analisar os blog posts que cada utilizador lê. Se você souber que um certo utilizador lê muitos posts em chinês, talvez seja uma boa ideia recomendar-lhe mais posts em chinês.

Pude notar que diferentemente do pacote ML Vision, o SDK do Natural Language não ocupa tanto espaço assim. Quando testei o ML Vision pela primeira vez, o APK gerado tinha aproximadamente 15Mb. Enquanto usando o Natural Language, o APK tem aproximadamente 5Mb. Acho que é uma diferença compreensível, pois o SDK do ML Vision certamente usa modelos mais complexos e provavelmente leva consigo algumas imagens usadas para o treinamento destes modelos.

Vale lembrar que esta é só a primeira funcionalidade que o Firebase traz para o pacote Natural Language. É provável que ao longo do tempo sejam adicionadas mais funcionalidades para este pacote, afinal de contas vem aí o Cloud Next 19 e o Google I/O 2019 — dois eventos anuais onde a Google tradicionalmente anuncia novas funcionalidades do Firebase. Irei atualizar este artigo sempre que houverem novidades neste pacote, então continue me seguindo para não perdê-las.


Caso tenha alguma dúvida ou sugestão, deixe abaixo nos comentários. Se você estiver tentando usar o ML Kit e teve um problema, coloque ele no StackOverflow, explicando o que você fez e qual foi o erro que teve. De certeza que você obterá ajuda de mim ou de alguém da comunidade. 🙂