pipeline de una líneapipeline("sentiment-analysis") no es una función de análisis de sentimiento:
es un resolutor. Elige un modelo, descarga sus pesos, monta el tokenizador
que le corresponde, ejecuta el forward y decodifica la salida a etiquetas legibles. Las
cinco líneas que ves esconden cuatro decisiones, y la primera —qué modelo— la
toma HuggingFace por ti si no la tomas tú.
from transformers import pipeline
clasificador = pipeline("sentiment-analysis")
resultado = clasificador("El servicio fue terrible, no lo recomiendo")
# [{'label': 'NEGATIVE', 'score': 0.9994}]
Antes de la primera flecha hay una etapa más, la que no se dibuja:
resolver la tarea a un modelo concreto.
"sentiment-analysis" es un nombre de tarea, no un modelo. Alguien tiene que
decidir cuál.
Las tres siguientes van en bloque por una razón: el tokenizador convierte texto a enteros
con el vocabulario de ese modelo, y el post-proceso traduce índices a etiquetas
con el config.json de ese modelo. Mezclar piezas de dos modelos
distintos no da error: da números sin significado.
Si llamas a pipeline sin model=, la librería te avisa:
No model was supplied, defaulted to <algún modelo> and revision <algún hash>
Eso no es ruido. Es la librería diciéndote que ha elegido por ti. En un prototipo da igual; en cuanto alguien más ejecute tu código, o cambie la versión de la librería, ese defecto puede moverse y tus resultados con él, sin que tú hayas tocado nada.
La forma con dueño es explícita:
clasificador = pipeline(
"sentiment-analysis",
model="distilbert/distilbert-base-uncased-finetuned-sst-2-english",
)
// model= fija qué red. revision="<commit sha>" fija además qué versión de sus pesos: es el lockfile del modelo.
| Para qué sirve | Cuándo hace falta | |
|---|---|---|
Token hf_... |
Autenticarte contra el Hub | Modelos privados, modelos gated (con licencia que hay que aceptar) y subir cosas |
| Caché local | Guardar los pesos ya descargados | Siempre. Sin ella, descargas en cada ejecución |
El token va en .env, nunca en el código, y .env va en
.gitignore. No es higiene estética: hay bots escaneando repositorios
públicos en busca de credenciales.
import os
from dotenv import load_dotenv
load_dotenv()
HF_TOKEN = os.getenv("HUGGING_FACE_TOKEN")
La caché vive bajo el directorio de HuggingFace en tu HOME y se mueve con la
variable de entorno HF_HOME. Si el modelo se descarga en cada ejecución, no
es que «no se guarde»: o la carpeta no tiene permisos de escritura, o
HF_HOME apunta a otro sitio.
pipeline() | AutoTokenizer + AutoModel… | |
|---|---|---|
| Líneas de código | 2 | 8-10 |
| Control de batching y padding | Ninguno | Total |
| Acceso a los logits crudos | No | Sí |
| Reutilizar el tokenizador | Implícito | Explícito |
| Bueno para | Prototipo, demo, exploración | Producción, evaluación, cualquier cosa que mida |
No es una escalera de principiante a experto: son dos herramientas.
pipeline para saber si la tarea es viable; las clases Auto en
cuanto necesites medir algo.
La guía usa pipeline('sentiment-analysis') sin modelo en
su ejemplo principal, y en su propia tabla de troubleshooting clasifica la advertencia
resultante como «Normal en este ejercicio». Es la misma guía diciendo dos cosas: el
código enseña una práctica y la tabla la disculpa.
Da además tres cifras sin fecha ni fuente: «más de 500.000 modelos», «primera vez: ~268 MB» y «$0.002-0.03 por 1K tokens» en APIs comerciales. Envejecen a velocidades distintas y ninguna se puede verificar desde el PDF. Antes de repetirlas: ¿cuántos modelos hay hoy en el Hub, cuánto pesa de verdad el que has fijado, y de qué proveedor y qué modelo salió ese precio?
Y una que no es una cifra. La guía dice «gratis». Gratis de descargar no es gratis de ejecutar: ¿quién paga la CPU o la GPU donde corre?
Coge el ejemplo de sentimiento y fija el modelo con model=. Ejecútalo dos
veces seguidas midiendo el total de cada una con time python script.py. La
diferencia entre la primera y la segunda es exactamente el coste de la descarga, y ya no
tienes que creerte ninguna cifra sobre ello.
Después mira cuánto ocupa tu caché de HuggingFace en disco y compáralo con los ~268 MB que promete la guía. Apunta el número real: lo vas a necesitar en cuanto decidas cuántos modelos puedes permitirte tener a mano.