Guia Prático da API Pipeline no Hugging Face Transformers

A API pipeline da biblioteca transformers atua como uma abstração de alto nível que orquestra todo o fluxo de trabalho de inferência de machine learning. Ela encapsula três etapas fundamantais: o pré-processamento dos dados de entrada, a execução do modelo neural e o pós-processamento dos tensores brutos para gerar resultados interpretáveis.

Dessa forma, é possível enviar texto ou imagens diretamente e receber previsões formatadas, sem a necessidade de gerenciar manualmente tokenizadores ou operações matemáticas complexas.

Criação e Execução de um Pipeline Básico

Para iniciar, basta importtar a função e especificar a tarefa desejada. Por padrão, a biblioteca baixa e utiliza modelos treinados no idioma inglês.

from transformers import pipeline

classificador_texto = pipeline(task="text-classification")
resultado = classificador_texto("This product is absolutely fantastic!")
print(resultado)

Especificando Modelos e Hardware

É possível substituir o modelo padrão por checkpoints personalizados disponíveis no Hugging Face Hub. Ao instanciar o pipeline dessa forma, o sistema carrega automaticamente tanto a arquitetura do modelo quanto o tokenizador correspondente.

from transformers import pipeline

# Pipeline customizado para análise de sentimentos em chinês
analisador = pipeline(
    task="text-classification",
    model="uer/roberta-base-finetuned-dianping-chinese"
)
print(analisador("A experiência foi excelente."))

Para acelerar a inferência em ambientes de produção ou com grandes volumes de dados, o processamento pode ser delegado à GPU. O parâmetro device aceita o índice numérico da placa de vídeo, começando em 0.

analisador_gpu = pipeline(
    task="text-classification",
    model="uer/roberta-base-finetuned-dianping-chinese",
    device=0  # Define a execução na primeira GPU disponível
)

Explorando Parâmetros de Tarefas Complexas

Dependendo da arquitetura, o pipeline aceita argumentos adicionais para configurar a inferência. Para tarefas de resposta a perguntas (Question Answering), é necessário fornecer tanto o contexto base quento a pergunta a ser respondida.

qa_system = pipeline(
    task="question-answering",
    model="uer/roberta-base-chinese-extractive-qa"
)

# Consultando a documentação interna do objeto para verificar assinaturas esperadas
help(qa_system)

resposta = qa_system(
    question="O que a API simplifica?",
    context="A API pipeline do Transformers abstrai o pré-processamento, a inferência e o pós-processamento."
)
print(resposta)

Aplicação em Visão Computacional

A ferramenta também suporta tarefas multimodais, como a detecção de objetos utilizando aprendizado zero-shot (zero-shot object detection).

import requests
from PIL import Image, ImageDraw

modelo_visao = "google/owlvit-base-patch32"
detector_objetos = pipeline(task="zero-shot-object-detection", model=modelo_visao)

# Carregando imagem a partir de uma URL externa
imagem_url = "https://unsplash.com/photos/oj0zeY2Ltk4/download?ixid=MnwxMjA3fDB8MXxzZWFyY2h8MTR8fHBpY25pY3xlbnwwfHx8fDE2Nzc0OTE1NDk&force=true&w=640"
imagem = Image.open(requests.get(imagem_url, stream=True).raw)

# Executando inferência com classes candidatas
deteccoes = detector_objetos(
    imagem,
    candidate_labels=["hat", "sunglasses", "book", "bag"]
)

# Desenhando as caixas delimitadoras (bounding boxes) e rótulos
editor = ImageDraw.Draw(imagem)
for item in deteccoes:
    caixa = item["box"]
    classe = item["label"]
    confianca = item["score"]

    x_min, y_min, x_max, y_max = caixa.values()
    editor.rectangle([(x_min, y_min), (x_max, y_max)], outline="blue", width=2)
    editor.text((x_min, y_min - 10), f"{classe}: {confianca:.2f}", fill="blue")

imagem.show()

Entendendo o Funcionamento Interno

Embora o pipeline oculte a complexidade do fluxo, as etapas subjacentes podem ser reproduzidas manualmente. Isso oferece maior controle sobre a manipulação de tensores e o consumo de memória.

1. Inicialização do Tokenizador e do Modelo

from transformers import AutoTokenizer, AutoModelForSequenceClassification

checkpoint = "uer/roberta-base-finetuned-dianping-chinese"
tokenizador = AutoTokenizer.from_pretrained(checkpoint)
modelo = AutoModelForSequenceClassification.from_pretrained(checkpoint)

2. Pré-processamento dos Dados

texto_entrada = "O atendimento foi muito ruim."
entradas = tokenizador(texto_entrada, return_tensors="pt")

3. Inferência

import torch

with torch.no_grad():
    saidas = modelo(**entradas)
    logits = saidas.logits

4. Pós-processamento

probabilidades = torch.softmax(logits, dim=-1)
indice_previsto = torch.argmax(probabilidades).item()

# Mapeando o índice numérico para o rótulo textual original
rotulo_final = modelo.config.id2label[indice_previsto]
print(f"Sentimento previsto: {rotulo_final}")

Tags: Transformers HuggingFace Python nlp Pytorch

Publicado em 6-18 07:09