Hugging Face Hub: encontrar e usar modelos
1. Visão geral
Hugging Face Hub é o maior repositório de modelos, datasets e demonstrações disponível atualmente para machine learning. Este artigo ajuda você a descobrir como encontrar o modelo certo que precisa (em vez de adivinhar o nome), ler o model card para evitar usar a licença errada ou arquitetura, e chamar esse modelo de duas formas: executando localmente com Python e chamando via Inference API de uma aplicação Spring Boot. Após ler, você conseguirá integrar um modelo NLP em um serviço Java sem precisar fazer host próprio de GPU.
2. O que é Hugging Face Hub
O Hub armazena três tipos principais de recursos:
- Models: pesos já treinados, acompanhados de um model card que descreve como usar.
- Datasets: dados para treinar/fazer fine-tune ou fazer benchmark.
- Spaces: demonstrações que rodam diretamente no navegador (Gradio, Streamlit).
Cada modelo tem um model_id na forma organização/nome-modelo, por exemplo distilbert-base-uncased-finetuned-sst-2-english. Este model_id é o que você vai usar no código, não o nome exibido na interface.
3. Encontrar modelos no Hub
3.1. Através da interface web
A página inicial do Hub tem filtros por task (text-classification, translation, image-segmentation…), library (transformers, sentence-transformers, timm…), license e language. Ordenar por “Most downloads” ou “Trending” geralmente dá resultados mais estáveis do que escolher o modelo mais recente — modelos novos podem não ter sido verificados por usuários suficientes.
3.2. Via huggingface_hub (Python)
Quando você precisa encontrar modelos via script (por exemplo para escolher automaticamente o modelo menor que atenda aos requisitos), use HfApi:
pip install huggingface_hub
from huggingface_hub import HfApi
api = HfApi()
models = api.list_models(
search="sentiment",
library="transformers",
sort="downloads",
direction=-1,
limit=5,
)
for m in models:
print(m.id, m.downloads)
search filtra por palavras-chave no nome/tags, sort="downloads" junto com direction=-1 ordena os modelos mais populares primeiro, limit=5 limita os resultados. Saída similar:
distilbert-base-uncased-finetuned-sst-2-english 5123456
cardiffnlp/twitter-roberta-base-sentiment-latest 2876543
nlptown/bert-base-multilingual-uncased-sentiment 1987654
...
Nota: o número de downloads não significa a melhor qualidade para seu problema — apenas reflete o nível geral de popularidade. Sempre teste com dados reais antes de decidir.
4. Leia o model card antes de usar
Cada modelo tem um arquivo README.md exibido como um model card, que contém:
- Task: o modelo foi treinado para (classificação, tradução, geração de texto…).
- License:
apache-2.0,mit, oucc-by-nc(não-comercial — não pode ser usada para produtos comerciais). - Gated model: alguns modelos exigem que você faça login e seja aprovado pelo proprietário antes de baixar (geralmente modelos grandes ou sensíveis).
Verifique rapidamente a licença e o status gated via API:
from huggingface_hub import model_info
info = model_info("meta-llama/Llama-3.1-8B")
print(info.gated, info.tags)
True ['text-generation', 'license:llama3.1']
gated=True significa que você precisa de um token pessoal e foi aprovado para acessar; caso contrário, a requisição retornará um erro 401/403.
5. Execute modelo localmente com transformers
Para modelos pequenos, a forma mais rápida de experimentar é usar pipeline:
pip install transformers torch
from transformers import pipeline
classifier = pipeline(
"sentiment-analysis",
model="distilbert-base-uncased-finetuned-sst-2-english",
)
result = classifier("Hugging Face Hub makes finding models easy!")
print(result)
[{'label': 'POSITIVE', 'score': 0.9998}]
pipeline carrega automaticamente os pesos do Hub para o cache local (~/.cache/huggingface), carrega o tokenizer correspondente e retorna o resultado como uma lista de dicionários. A primeira execução será lenta porque precisa baixar o arquivo do modelo — verifique o tamanho do modelo na página do Hub antes de baixar se você está em um ambiente com largura de banda/disco limitado.
6. Chame modelo do Spring Boot via Inference API
Quando sua aplicação principal é escrita em Java, você não precisa fazer host próprio do modelo — Hugging Face fornece Inference API (HTTP) para muitos modelos populares. Basta fazer uma chamada REST com seu token pessoal.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
huggingface.api-token=${HF_API_TOKEN}
huggingface.model=distilbert-base-uncased-finetuned-sst-2-english
@Service
public class SentimentAnalysisService {
private final RestClient restClient;
private final String model;
public SentimentAnalysisService(RestClient.Builder builder,
@Value("${huggingface.api-token}") String token,
@Value("${huggingface.model}") String model) {
this.model = model;
this.restClient = builder
.baseUrl("https://api-inference.huggingface.co/models")
.defaultHeader("Authorization", "Bearer " + token)
.build();
}
public List<SentimentResult> analyze(String text) {
SentimentResult[][] response = restClient.post()
.uri("/{model}", model)
.body(Map.of("inputs", text))
.retrieve()
.body(SentimentResult[][].class);
return response == null ? List.of() : List.of(response[0]);
}
public record SentimentResult(String label, double score) {}
}
RestClient.Builderé configurada automaticamente pelo Spring Boot, apenas definabaseUrle o headerAuthorization.uri("/{model}", model)constrói uma URL no formato.../models/distilbert-base-uncased-finetuned-sst-2-english.- A resposta da Inference API para a tarefa
text-classificationé um array aninhado ([[{...}]]), então o tipo de retorno éSentimentResult[][].
Teste a chamada:
List<SentimentAnalysisService.SentimentResult> results =
sentimentAnalysisService.analyze("I love this library!");
[SentimentResult[label=POSITIVE, score=0.9997]]
Teste de parsing da resposta
Como a resposta real depende da rede, você deve separar a parte de parsing JSON para testar sem chamar a API de verdade:
import com.fasterxml.jackson.databind.ObjectMapper;
import static org.assertj.core.api.Assertions.assertThat;
class SentimentResultParsingTest {
@Test
void shouldParseInferenceApiResponse() throws Exception {
String json = """
[[{"label":"POSITIVE","score":0.9998}]]
""";
ObjectMapper mapper = new ObjectMapper();
SentimentAnalysisService.SentimentResult[][] result =
mapper.readValue(json, SentimentAnalysisService.SentimentResult[][].class);
assertThat(result[0][0].label()).isEqualTo("POSITIVE");
assertThat(result[0][0].score()).isGreaterThan(0.99);
}
}
Este teste garante que o record SentimentResult mapeia corretamente os campos label/score sem depender de conexão de rede ou token válido.
7. Erros comuns e quando não usar Inference API
- 503 Service Unavailable na primeira chamada: o modelo ainda não foi “aquecido” no servidor de tier gratuito. Hugging Face retorna o campo
estimated_time— você deve fazer retry após alguns segundos em vez de considerar isso um erro real. - 429 Too Many Requests: o tier gratuito tem limites de taxa bem rigorosos. Com tráfego de produção estável, considere Inference Endpoints (dedicado, pago) em vez da API gratuita.
- Modelo gated mas não aprovado: erro 403 mesmo com token válido — você precisa ir à página do modelo, clicar em “Request access” e esperar pela aprovação.
- Licença não adequada para fins comerciais: muitos modelos fine-tuned da Llama ou datasets não-comerciais vêm com termos especiais — leia cuidadosamente a seção de licença no model card antes de colocar em produção.
Nota: não use a Inference API gratuita para sistemas que exigem latência baixa consistente ou SLA — ela é adequada para experimentar, fazer demos ou tráfego baixo. Para grandes workloads, hospede o modelo localmente com
transformers/text-generation-inferenceou use Inference Endpoints pagos.
8. Conclusão
Hugging Face Hub oferece um processo claro: encontre o modelo através da interface ou huggingface_hub, leia o model card para verificar task/license/gated, e escolha a forma de uso apropriada — execute localmente com pipeline quando você precisa de controle total, ou chame a Inference API do Spring Boot quando quer integrar rápido em um sistema Java existente. O ponto crucial é sempre verificar a licença e os limites de taxa antes de colocar o modelo em produção.