NLTK, spaCy y Transformers: herramientas y modelos de PLN
Qué resuelve cada herramienta, qué debes instalar y cómo elegir según la tarea, con una misma frase en español.
En esta pieza
Una biblioteca de Python pone funciones a tu disposición; no necesariamente incluye los datos o el modelo que esas funciones necesitan. En PLN conviene separar tres piezas:
- la biblioteca, que aporta código para procesar o cargar modelos
- los recursos, como corpus, vocabularios o paquetes de modelos, que se instalan o descargan aparte
- la tarea y sus datos, que determinan qué significa la salida y para qué textos es razonable usarla
NLTK, spaCy y transformers viven en capas distintas. Se pueden combinar, pero no son tres versiones intercambiables de un mismo analizador. Para verlo, usaremos esta frase:
Para probar los ejemplos sin instalar Python: ábrelo en Google Colab · descarga el cuaderno · aprende a usar Colab.
La nueva ley de vivienda no convence a los inquilinos de Madrid.
1. Qué aporta cada herramienta
Compara
La misma frase en tres capas de PLN: «La nueva ley de vivienda no convence a los inquilinos de Madrid.»
La forma exacta de las salidas depende de los recursos y versiones instalados. La comparación muestra qué clase de resultado puede aportar cada herramienta.
Tokens:
La · nueva · ley · de · vivienda · no · convence · a · los · inquilinos · de · Madrid · .
Raíces del stemmer (recorta sufijos con reglas):
la · nuev · ley · de · viviend · no · convenc · a · los · inquilin · de · madr · .
Fíjate en «madr»: el recorte no sabe que «Madrid» es un nombre propio. Y «nuev» o «convenc» no son palabras del español.
| Forma | Lema | Categoría | Función | Depende de |
|---|---|---|---|---|
| La | el | DET | det | ley |
| nueva | nuevo | ADJ | amod | ley |
| ley | ley | NOUN | nsubj | convence |
| de | de | ADP | case | vivienda |
| vivienda | vivienda | NOUN | nmod | ley |
| no | no | ADV | advmod | convence |
| convence | convencer | VERB | ROOT | convence |
| a | a | ADP | case | inquilinos |
| los | el | DET | det | inquilinos |
| inquilinos | inquilino | NOUN | obj | convence |
| de | de | ADP | case | Madrid |
| Madrid | Madrid | PROPN | nmod | inquilinos |
Entidades: «Madrid» (LOC). El modelo propone un lema («convence» → «convencer»), una categoría y una función sintáctica para cada token.
La biblioteca carga un modelo concreto para una tarea. En este ejemplo, el modelo clasifica sentimiento en una escala de estrellas.
La salida tiene esta forma; la etiqueta y la puntuación dependen del texto y del modelo:
[{'label': 'N stars', 'score': 0.…}]
El modelo del ejemplo se ajustó con reseñas de productos. Aplicarlo a una noticia política no convierte sus estrellas en una medida validada de opinión política.
| Herramienta | Aporta | Recursos que suelen instalarse aparte | Ejemplo de uso |
|---|---|---|---|
| NLTK | Componentes de procesamiento, corpus e interfaces para explorar métodos | Datos del tokenizador u otros corpus, según la función elegida | Tokenizar, probar un stemmer o estudiar un corpus |
| spaCy | Una biblioteca de procesamiento y una arquitectura de pipelines | Un paquete de modelo de idioma, si necesitas lemas, etiquetas o entidades entrenadas | Procesar textos de forma consistente con un analizador de español |
transformers |
Clases para cargar y ejecutar modelos preentrenados y ajustarlos | Los archivos del modelo y sus dependencias de ejecución, como PyTorch en este ejemplo | Clasificar, resumir, traducir o generar texto con un modelo concreto |
El Hub de Hugging Face es un catálogo donde se publican modelos y otros recursos. transformers es una de las bibliotecas que permite cargarlos. El modelo determina la tarea, los idiomas y los datos con los que se entrenó; el nombre del ecosistema, por sí solo, no dice qué análisis hará.
2. Instala solo lo que vayas a usar
Crea un entorno virtual para el proyecto y activa ese entorno antes de instalar paquetes. Los comandos siguientes son alternativas por herramienta; no hace falta instalar las tres para seguir un ejemplo.
NLTK
python -m pip install nltk
spaCy y su paquete de español
python -m pip install spacy
python -m spacy download es_core_news_sm
es_core_news_sm es un paquete de modelo con su propia versión y dependencias compatibles con spaCy. Instalar spacy sin ese paquete no descarga automáticamente el analizador entrenado. Si solo necesitas tokenizar, un pipeline vacío de spaCy puede bastar; los componentes lingüísticos entrenados sí requieren el paquete correspondiente.
Transformers con PyTorch
python -m pip install transformers torch
Al cargar un modelo desde el Hub, Transformers descarga sus archivos la primera vez y normalmente los deja en la caché local. El tamaño y los requisitos de memoria dependen del modelo: no hay un tamaño común para todo el Hub. Una GPU puede acelerar algunos modelos, pero no es necesaria para todos los ejemplos.
3. NLTK: componentes y recursos
NLTK ofrece piezas que puedes combinar. Por ejemplo, permite separar palabras y aplicar un stemmer de Snowball en español. El tokenizador necesita sus datos; con las versiones actuales, punkt_tab es el recurso que requiere este ejemplo. Descárgalo una vez en una ubicación de datos accesible para NLTK:
import nltk
from nltk.stem.snowball import SnowballStemmer
nltk.download("punkt_tab")
texto = "La nueva ley de vivienda no convence a los inquilinos de Madrid."
tokens = nltk.word_tokenize(texto, language="spanish")
stemmer = SnowballStemmer("spanish")
print(tokens)
print([stemmer.stem(token) for token in tokens])
El stemmer aplica reglas de recorte; no busca la forma de diccionario. Por eso puede producir fragmentos como «madr» o «convenc». No son lemas ni un error de ejecución: son el resultado esperado de una técnica que puede servir para agrupar variantes de palabras en ciertas tareas.
NLTK también incluye WordNetLemmatizer, pero se basa en WordNet, un recurso léxico del inglés; no equivale a tener un lematizador general del español listo para usar. Tampoco es exacto decir que NLTK solo sirva para enseñar o que no pueda procesar corpus grandes: ofrece componentes de investigación y procesamiento, aunque tendrás que elegir y coordinar más piezas según el flujo que quieras construir.
4. spaCy: una tubería de procesamiento con un modelo aparte
spaCy puede aplicar varios componentes a un texto y devolver tokens, lemas, categorías gramaticales, dependencias y entidades. Para obtener ese análisis en español, hace falta cargar el paquete entrenado:
import spacy
nlp = spacy.load("es_core_news_sm")
doc = nlp("La nueva ley de vivienda no convence a los inquilinos de Madrid.")
for token in doc:
print(token.text, token.lemma_, token.pos_, token.dep_, sep="\t")
print([(ent.text, ent.label_) for ent in doc.ents])
La salida depende de las versiones de spaCy y del paquete de modelo. El modelo ofrece un análisis automático útil, no una verdad gramatical: puede equivocarse con ambigüedades, nombres y variedades del español. En esta oración, por ejemplo, las relaciones que propone el modelo son una hipótesis que conviene revisar, como explica el tutorial de análisis con spaCy.
El sufijo sm identifica un modelo pequeño, que ocupa menos que las variantes medianas o grandes a cambio de diferencias de rendimiento en ciertas tareas. La elección se hace según idioma, tarea, calidad necesaria, latencia y recursos disponibles; el modelo más grande no es automáticamente el más adecuado.
5. Transformers: la biblioteca no es el modelo
transformers carga arquitecturas y pesos de modelos. Una pipeline simplifica la ejecución de una tarea concreta. Este ejemplo pide clasificación de sentimiento con un modelo multilingüe que predice de una a cinco estrellas:
from transformers import pipeline
clasificador = pipeline(
"sentiment-analysis",
model="nlptown/bert-base-multilingual-uncased-sentiment",
)
print(clasificador(
"La nueva ley de vivienda no convence a los inquilinos de Madrid."
))
La forma de la salida incluye una etiqueta y una puntuación. No la fijamos aquí porque depende de la ejecución y de los archivos del modelo descargados. La ficha de este modelo indica que se ajustó con reseñas de productos en seis idiomas, entre ellos el español, y que predice estrellas. Que acepte español no implica que esté validado para clasificar noticias políticas: dominio, etiqueta y datos de entrenamiento importan.
Transformers también puede cargar modelos para otras tareas, incluida clasificación por token. Por tanto, no es correcto resumirlo como «solo analiza frases enteras» ni como «solo sirve para texto generativo». Hay que indicar siempre qué tarea y qué modelo se están usando.
6. Cómo elegir
Empieza por la operación que necesitas y el tipo de salida que esperas:
| Necesitas… | Una opción razonable | Comprueba también… |
|---|---|---|
| Probar cómo se tokeniza o se aplica un stemmer | NLTK | Qué recurso de datos necesita esa función |
| Obtener lemas, categorías, dependencias o entidades con un flujo integrado | spaCy con un paquete de modelo para español | Cobertura del idioma y errores del modelo en tus textos |
| Clasificar, resumir, traducir o generar texto | transformers con un modelo adecuado a la tarea |
Idiomas, datos, licencia, tamaño y memoria del modelo |
| Ajustar un modelo preentrenado a tus datos | transformers u otra herramienta de entrenamiento |
Calidad y permisos de los datos, evaluación y coste de ejecución |
También puedes combinar herramientas: por ejemplo, NLTK para preparar o explorar corpus y spaCy para anotar textos. spaCy puede integrarse con modelos de tipo Transformer mediante paquetes adicionales. Cada combinación añade dependencias y puntos que mantener; inclúyela cuando resuelva una necesidad concreta.
7. ¿Y los modelos de lenguaje grandes?
Un modelo como Claude, GPT o Gemini puede ejecutarse en un servicio remoto mediante la API de su proveedor. En ese caso, el acoplamiento principal es el cliente/API, las credenciales y el servicio elegido. Un modelo publicado para ejecución local puede cargarse con transformers si su arquitectura y formato son compatibles; el acoplamiento pasa a incluir los pesos, el tokenizer, el entorno de ejecución y los requisitos de memoria. La elección afecta a coste, latencia, privacidad, licencia y mantenimiento.
spaCy y NLTK siguen siendo útiles en esos flujos para segmentar, normalizar o analizar textos de forma reproducible. No hay que escoger una sola biblioteca para todo: cada componente debe corresponder a una tarea definida.
Para seguir
- Frameworks y librerías: la competencia profesional.
- Tu primer análisis lingüístico con spaCy: revisar una salida palabra por palabra.
- Escribir buenos prompts: preparar instrucciones para modelos generativos.
Referencias
- Documentación de NLTK, con el libro y la guía de datos.
- WordNetLemmatizer de NLTK, cuya lematización se basa en WordNet.
- Modelos y lenguas de spaCy, donde se explica que los pipelines entrenados se instalan como paquetes aparte.
- Guía de pipelines de Transformers.
- Ficha del modelo de sentimiento
nlptown/bert-base-multilingual-uncased-sentiment, con idiomas, tarea y datos de entrenamiento.