Explorando o ML Kit for Firebase
Parte 2 — Linguagem Natural e Identificação de Linguagem
Este artigo faz parte da série Explorando o ML Kit for Firebase:
- O novo serviço de Machine Learning do Firebase
- 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:
- Adicionar o Firebase ao projecto;
- 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:
- 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. 🙂