Utilizando a plataforma Hugging Face para testar modelos de aprendizado de máquina.

Como testar modelos do Hugging Face em tarefas de Aprendizado de Máquinas

A plataforma Hugging Face é uma portal onde a comunidade de aprendizado de máquina colabora com modelos, conjunto de dados e aplicações.

Ao acessar o site e clicar no link Models é possível buscar por variados modelos voltados para várias tarefas de aprendizado de máquina visão computacional, processamento natural de linguagem, áudio, dados tabulares, aprendizado por reforço e outros tipos.

Neste post apresentaremos uma introdução de como utilizar estas bibliotecas em sua máquina (ou no Google Colab). Como exemplo é demostrado a realização de duas tarefas: o preenchimento de mascaras de texto (completar um espaço de um texto) e o resumo de um texto.

São dois modelos/exemplos simples, mas o objetivo é realmente despertar a curiosidade em conhecer mais sobre esta plataforma.

Algumas considerações:

  1. Ao baixar o modelo em sua maquina, alguns modelos são grandes, como o segundo modelo deste tutorial que possui mais do que 1,5 GB. Neste link é possível ver como gerenciar o cache destes modelos;
  2. Se atente ao modelo que você vai testar, pois já foram encontrados problemas de segurança;
  3. Se atente também nas licenças de conteúdo dos modelos e também possíveis dependências. Se atente a documentação presente em cada página dos modelos;
  4. Alguns modelos de aprendizados de máquinas exigem bastante recursos computacionais, ao escrever este post, várias vezes o Jupyter acabou resetando. Apenas para comparativo, este computador é um Core i5 de nona geração (Intel i5 - 9300H) e 8 GB de RAM. Infelizmente ainda não consegui ativar a GPU para tarefas de Machine Learning no Linux. No Google Colab é possível ativar o suporte ao GPU mesmo no tier grátis.

Alertas feitos, vamos aos modelos:

Primeiro é necessário a biblioteca Transformers para poder baixar e treinais os modelos pré treinados.

No momento da escrita deste post estão disponíveis 564772 modelos.

Aqui esta presente a documentação de como instalar esta biblioteca.

import transformers
from transformers import pipeline

#Apenas para suprimir erros, não nescessário. 
import logging
logging.getLogger("transformers").setLevel(logging.ERROR)

Tarefa 1 - preenchimento de mascaras

Para realizar a tarefa de preenchimento de mascaras, utilizaremos o modelo BERTimbau Base (aka “bert-base-portuguese-cased” [1]

Iremos utilizar neste caso a versão base.

A tarefa realizada será “fill-mask” e iremos pedir que ele devolva 5 respostas para a frase “Batatinha quando nasce, esparrama pelo [MASK]” onde [MASK] é o texto que será preenchido pelo token.

[1] SOUZA, Fábio e NOGUEIRA, Rodrigo e LOTUFO, Roberto. BERTimbau: pretrained BERT models for Brazilian Portuguese. 2020, [S.l: s.n.], 2020.

A primeira linha do código abaixo indicar a tarefa a ser executada e o modelo a ser utilizado e a segunda linha aplica o modelo para o texto escolhido.

mascarar = pipeline("fill-mask", model="neuralmind/bert-base-portuguese-cased")
texto = mascarar("Batatinha quando nasce, esparrama pelo [MASK]")
for x in range(len(texto)):
  print(texto[x])
{'score': 0.3925571143627167, 'token': 8105, 'token_str': 'chão', 'sequence': 'Batatinha quando nasce, esparrama pelo chão'}
{'score': 0.10256581008434296, 'token': 1831, 'token_str': 'corpo', 'sequence': 'Batatinha quando nasce, esparrama pelo corpo'}
{'score': 0.05736977979540825, 'token': 1147, 'token_str': 'mundo', 'sequence': 'Batatinha quando nasce, esparrama pelo mundo'}
{'score': 0.047487251460552216, 'token': 388, 'token_str': 'ar', 'sequence': 'Batatinha quando nasce, esparrama pelo ar'}
{'score': 0.023149045184254646, 'token': 9169, 'token_str': 'rosto', 'sequence': 'Batatinha quando nasce, esparrama pelo rosto'}

Observe nas resposta acima que o maior “score” foi para a frase que contém o token “chão”.

Tarefa 2 - Resumo de textos

Para realizar o processo de resumo de texto (“summarization”), iremos utilizar como exemplo o modelo facebook/bart-large-cnn [2]

Utilizaremos o texto que está presente na própria página do modelo.

[2] LEWIS, Mike e colab. BART: Denoising sequence-to-sequence pre-training for natural language generation, translation, and comprehension. CoRR, v. abs/1910.13461, 2019. Disponível em: http://arxiv.org/abs/1910.13461.

resumir = pipeline("summarization", model="facebook/bart-large-cnn")
texto = """The tower is 324 metres (1,063 ft) tall, about the same height as an 81-storey 
building, and the tallest structure in Paris. Its base is square, measuring 125 metres 
(410 ft) on each side. During its construction, the Eiffel Tower surpassed the Washington 
Monument to become the tallest man-made structure in the world, a title it held for 
41 years until the Chrysler Building in New York City was finished in 1930. 
It was the first structure to reach a height of 300 metres. Due to the addition of a 
broadcasting aerial at the top of the tower in 1957, it is now taller than the Chrysler 
Building by 5.2 metres (17 ft). Excluding transmitters, the Eiffel Tower is the 
second tallest free-standing structure in France after the Millau Viaduct."""
resumo = resumir(texto, max_length = 40, min_length = 10, do_sample=False )
print(resumo)
[{'summary_text': 'The tower is 324 metres (1,063 ft) tall, about the same height as an 81-storey building. Its base is square, measuring 125 metres (410 ft'}]

Conclusão

Este post apresentou como testar modelos de aprendizado de máquinas utilizando a biblioteca Transformers do Hugging Face.

Leonardo Grando
Leonardo Grando
Technology Ph.D. Candidate

My research interests include Agent-Based Simulation, Artificial Intelligence, Machine Learning.