💻 MÓDULO 5: Da Teoria à Prática — Usando Transformers com Hugging Face

Duração estimada deste módulo: 1.5 - 2 horas
Objetivo: Capacitar o estudante a carregar independentemente qualquer modelo Transformer do Hugging Face, entender suas entradas e saídas e usá-lo para tarefas comuns como classificação, geração ou question answering — sem necessidade de fine-tuning.


Lição 5.1 — O Que É Hugging Face? A Biblioteca que Democratizou os Transformers

Hugging Face não é apenas uma biblioteca. É um ecossistema completo para modelos de linguagem.

🔹 O que oferece:

  • 🤗 transformers: a biblioteca principal para carregar, usar e treinar modelos.
  • 🧩 datasets: acesso a milhares de conjuntos de dados prontos para usar.
  • 🏷️ tokenizers: ferramentas para converter texto em tokens (a entrada que os modelos entendem).
  • 🧪 evaluate: métricas padronizadas para avaliar modelos.
  • 🌐 Model Hub: um repositório com centenas de milhares de modelos pré-treinados, prontos para download (BERT, GPT-2, T5, Llama, Mistral, etc.).

🔹 Analogia útil:

Hugging Face é como a "App Store para modelos de IA".
Precisa de um modelo para resumir textos? Há dezenas.
Um para detectar emoções? Centenas.
Um em português? Também disponível.
Um pequeno o suficiente para rodar no seu laptop? Absolutamente!
É só buscar, instalar e usar.


Lição 5.2 — Instalação e Configuração Inicial

Antes de começar, precisamos instalar as bibliotecas. Faremos isso em um ambiente limpo (recomendado: Google Colab ou um ambiente virtual local).

pip install torch transformers datasets

Nota: torch (PyTorch) é o framework de deep learning que o Hugging Face usa por padrão. Você também pode usar TensorFlow, mas PyTorch é mais comum na comunidade.


Lição 5.3 — Seu Primeiro Modelo: Carregando um Classificador de Sentimento

Vamos começar com algo simples: um modelo que lê texto e diz se é positivo ou negativo.

Usaremos distilbert-base-uncased-finetuned-sst-2-english, um modelo pequeno, rápido e pré-treinado para essa tarefa.

from transformers import pipeline

# Criar um pipeline de classificação de texto
classifier = pipeline("sentiment-analysis")

# Testar com uma frase
result = classifier("I love this course! It's amazing and very clear.")
print(result)
# Saída: [{'label': 'POSITIVE', 'score': 0.9998}]

É isso! Em 3 linhas, você tem um modelo de IA funcionando.

🔹 O que o pipeline fez?

  • Baixou automaticamente o modelo e o tokenizer do Hub.
  • Pré-processou o texto (tokenização, padding, etc.).
  • Executou o modelo (inferência).
  • Pós-processou a saída (converteu logits em rótulos e probabilidades).

Lição 5.4 — Entendendo "Pipelines": A Forma Mais Fácil de Começar

Hugging Face oferece pipelines para tarefas comuns:

  • "sentiment-analysis" → classificação de sentimento
  • "text-generation" → geração de texto (GPT-2, etc.)
  • "question-answering" → question answering (BERT, etc.)
  • "translation" → tradução
  • "summarization" → resumo
  • "ner" → reconhecimento de entidades (pessoas, lugares, etc.)

Exemplo: geração de texto com GPT-2

generator = pipeline("text-generation", model="gpt2")

text = "The future of artificial intelligence is"
result = generator(text, max_length=50, num_return_sequences=1)
print(result[0]['generated_text'])

Saída possível:

"The future of artificial intelligence is one of the most exciting areas of research today. It has the potential to revolutionize..."


Lição 5.5 — O Que Acontece Nos Bastidores? Tokenização, IDs e attention_mask

Pipelines são mágicos... mas para entender realmente o que está acontecendo, precisamos ver o processo manual.

Vamos pegar o mesmo classificador, passo a passo.

from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch

# 1. Carregar tokenizer e modelo
model_name = "distilbert-base-uncased-finetuned-sst-2-english"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)

# 2. Tokenizar o texto
text = "This movie is absolutely wonderful!"
inputs = tokenizer(text, return_tensors="pt")  # "pt" = tensores PyTorch
print(inputs)

Saída:

{
  'input_ids': tensor([[  101,  2023,  3042,  2003,  2675, 12712,  1029,   102]]),
  'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 1]])
}

🔹 Explicação:

  • input_ids: cada número é um token. 101 = [CLS], 102 = [SEP], o resto são palavras.
  • attention_mask: indica quais tokens são reais (1) e quais são padding (0). Aqui, todos são reais.

Lição 5.6 — Executando o Modelo Manualmente

# 3. Passar entradas para o modelo
outputs = model(**inputs)

# 4. Obter logits (saídas não normalizadas)
logits = outputs.logits
print("Logits:", logits)  # Ex: tensor([[-4.5, 3.2]])

# 5. Aplicar softmax para obter probabilidades
probabilities = torch.softmax(logits, dim=-1)
print("Probabilities:", probabilities)  # Ex: tensor([[0.001, 0.999]])

# 6. Obter rótulo predito
predicted_class = torch.argmax(probabilities, dim=-1).item()
labels = ["NEGATIVE", "POSITIVE"]
print("Predicted label:", labels[predicted_class])  # → POSITIVE

🔹 Por que fazer manualmente? Para entender como funciona, depurar erros ou personalizar o processo (ex: mudar o limiar de decisão).


Lição 5.7 — Como Escolher o Modelo Adequado para Sua Tarefa

Nem todos os modelos servem para tudo. Aqui está um guia rápido:

Tarefa Tipo de modelo Exemplos de modelos no Hugging Face
Classificação de texto Encoder-only (BERT-style) bert-base-uncased, distilbert-base-uncased, nlptown/bert-base-multilingual-uncased-sentiment
Geração de texto Decoder-only (GPT-style) gpt2, facebook/opt-350m, mistralai/Mistral-7B-v0.1 (requer mais RAM)
Question Answering (extrativo) Encoder-only bert-large-uncased-whole-word-masking-finetuned-squad, deepset/roberta-base-squad2
Tradução / Resumo Encoder-Decoder t5-small, facebook/bart-large-cnn, Helsinki-NLP/opus-mt-en-es
Reconhecimento de Entidades (NER) Encoder-only dslim/bert-base-NER, Jean-Baptiste/roberta-large-ner-english

🔍 Dica: No Hugging Face Model Hub, você pode filtrar por:

  • Tarefa
  • Idioma
  • Tamanho do modelo
  • Licença
  • Framework (PyTorch, TensorFlow)

Lição 5.8 — Trabalhando com Modelos em Português

Sim, há muitos modelos em português!

Exemplo: classificação de sentimento em tweets em português.

classifier_pt = pipeline(
    "sentiment-analysis",
    model="nlptown/bert-base-multilingual-uncased-sentiment"
)

result = classifier_pt("Este curso é incrível, recomendo muito!")
print(result)
# Saída: [{'label': '5 stars', 'score': 0.8742}]

Outro modelo mais específico: punctat/saiber-bertimbau-sentiment-analysis (para português brasileiro).


Lição 5.9 — Tratamento de Erros Comuns e Soluções

Erro 1: "CUDA out of memory"

Solução: Use um modelo menor (distilbert em vez de bert-large) ou execute na CPU (mais lento, mas funciona).

model = AutoModelForSequenceClassification.from_pretrained(model_name).to("cpu")

Erro 2: Texto muito longo

Solução: Trunque o texto.

inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=512)

Erro 3: Modelo não encontrado

Solução: Verifique o nome exato no Model Hub. Use autocompletar no site.


✍️ Exercício de Reflexão 5.1

Escolha uma tarefa que te interesse (ex: resumir notícias, detectar spam, traduzir frases).
Vá ao Hugging Face Model Hub e encontre 2-3 modelos candidatos.
Compare suas métricas, tamanho, idioma e licença.
Qual escolheria? Por quê?


📊 Diagrama Conceitual 5.1 — Fluxo de Inferência com Hugging Face (descrito)

Texto → Tokenizer → input_ids + attention_mask → Modelo → logits → softmax → rótulo + probabilidade
          ↑               ↑                          ↑            ↑
      Converte     Indica tokens           Rede neural     Converte para
      em números   reais vs padding       pré-treinada    probabilidade

🧠 Conclusão do Módulo 5

Hugging Face removeu a barreira de entrada para usar modelos Transformer.
Você não precisa mais de semanas de configuração, GPUs caras ou conhecimento profundo de deep learning para começar.
Com algumas linhas de código, você pode ter um modelo de IA gerando texto, classificando emoções ou respondendo perguntas.

Mas... isso é apenas o começo! No próximo módulo, aplicaremos tudo aprendido em um projeto guiado: construiremos um sistema de question answering que responde consultas sobre um dado texto — usando um modelo pré-treinado, sem fine-tuning.


Course Info

Course: AI-course2

Language: PT

Lesson: Module5