16. Introducción a librerías de NLP en Python

16.1 Introducción

Hasta ahora recorrimos muchos conceptos fundamentales del NLP: representación del texto, limpieza, tokenización, stopwords, normalización, Bag of Words, TF-IDF y embeddings clásicos. El paso natural a partir de aquí es empezar a trabajar con herramientas concretas.

En Python existe un ecosistema muy amplio de bibliotecas para Procesamiento de Lenguaje Natural. Algunas están orientadas al aprendizaje y al análisis lingüístico clásico, otras a pipelines eficientes para producción, y otras al entrenamiento de modelos neuronales y arquitecturas modernas.

En este tema no profundizaremos todavía en una biblioteca concreta, sino que construiremos una visión general del ecosistema para entender qué rol cumple cada herramienta y cuándo conviene usarla.

16.2 ¿Por qué necesitamos librerías especializadas?

En teoría podríamos procesar texto escribiendo todo desde cero: tokenizadores, contadores de palabras, reglas gramaticales, modelos vectoriales y arquitecturas neuronales. Pero en la práctica eso sería lento, propenso a errores y poco eficiente.

Las librerías de NLP resuelven problemas comunes y ofrecen implementaciones ya probadas de tareas como:

  • Tokenización.
  • Lematización.
  • Representación vectorial.
  • Entrenamiento de clasificadores.
  • Reconocimiento de entidades.
  • Modelos neuronales y Transformers.

Esto permite concentrarse más en el problema que queremos resolver y menos en reimplementar infraestructura básica.

16.3 No todas las librerías resuelven lo mismo

Una de las cosas más importantes al empezar es entender que no existe una única biblioteca que haga todo de la misma manera. Cada herramienta tiene fortalezas, filosofía y casos de uso distintos.

Por ejemplo:

  • Algunas son ideales para enseñar fundamentos.
  • Otras están optimizadas para procesamiento eficiente en producción.
  • Otras se enfocan en modelos estadísticos o de Machine Learning.
  • Otras sirven como base para Deep Learning y Transformers.

Elegir bien la biblioteca depende de la tarea, del nivel de profundidad buscado y del tipo de pipeline que queramos construir.

En NLP, elegir una biblioteca no es solo una decisión técnica. También es una decisión metodológica: define cómo vas a trabajar con el lenguaje y con qué tipo de herramientas.

16.4 NLTK: una biblioteca muy didáctica

NLTK es una de las bibliotecas más conocidas en la enseñanza de NLP. Su valor principal está en que ofrece muchas herramientas clásicas y recursos lingüísticos de forma muy accesible para aprender.

Suele usarse para:

  • Tokenización.
  • Stemming.
  • Lematización básica.
  • Trabajo con corpora.
  • Análisis léxico y frecuencia de términos.
  • Experimentación educativa con conceptos clásicos.

NLTK es especialmente útil cuando queremos entender fundamentos paso a paso.

16.5 Fortalezas y límites de NLTK

Las fortalezas de NLTK están en su claridad conceptual, su tradición educativa y la cantidad de recursos didácticos que existen alrededor de ella. Sin embargo, no siempre es la opción más cómoda o eficiente para pipelines modernos de producción.

En otras palabras, NLTK es excelente para aprender y experimentar, pero no siempre será la herramienta más natural para aplicaciones industriales grandes.

16.6 spaCy: foco en eficiencia y pipelines productivos

spaCy es una biblioteca muy popular cuando se necesita procesamiento lingüístico eficiente y relativamente listo para aplicaciones reales. Ofrece un diseño muy orientado a pipelines y rendimiento.

Suele usarse para:

  • Tokenización robusta.
  • Lematización.
  • Etiquetado gramatical.
  • Reconocimiento de entidades.
  • Análisis de dependencias.
  • Construcción de pipelines industriales.

Por eso spaCy suele verse como una herramienta especialmente fuerte para proyectos aplicados.

16.7 Fortalezas y límites de spaCy

La gran fortaleza de spaCy es que combina una interfaz relativamente limpia con buen rendimiento y componentes listos para uso práctico. Es muy útil cuando se quiere procesar texto de forma eficiente y estructurada.

Sin embargo, no cubre por sí sola todo el ecosistema moderno de modelos grandes o fine-tuning profundo. Para eso suelen entrar otras herramientas complementarias.

16.8 scikit-learn: Machine Learning clásico aplicado a texto

scikit-learn no es una biblioteca de NLP en sentido estricto, pero es fundamental en muchos pipelines clásicos de procesamiento de texto. Su valor está en la vectorización y en los modelos de Machine Learning tradicionales.

Se usa mucho para:

  • Bag of Words.
  • TF-IDF.
  • Clasificación de texto.
  • Clustering documental.
  • Evaluación y experimentación con modelos clásicos.

Por eso, en NLP clásico, scikit-learn ocupa un lugar muy importante aunque no sea una biblioteca lingüística como NLTK o spaCy.

16.9 Gensim: modelos semánticos y embeddings clásicos

Gensim es otra biblioteca muy relevante dentro del ecosistema clásico. Se hizo especialmente conocida por facilitar el trabajo con modelos como Word2Vec, Doc2Vec y otras técnicas de representación semántica.

Su foco está más en modelado vectorial, tópicos y embeddings clásicos que en análisis lingüístico fino.

16.10 PyTorch: base para Deep Learning

PyTorch tampoco es una biblioteca exclusiva de NLP, pero es una de las bases más importantes para construir modelos neuronales modernos. Cuando el problema requiere redes profundas, embeddings entrenables, RNN, atención o Transformers, PyTorch entra en escena.

Su papel en NLP incluye:

  • Construcción de modelos neuronales.
  • Entrenamiento y evaluación de arquitecturas profundas.
  • Manejo de tensores y GPU.
  • Base para muchas bibliotecas modernas de modelos de lenguaje.

En este sentido, PyTorch funciona más como plataforma de modelado que como conjunto de herramientas lingüísticas listas para usar.

16.11 Transformers y bibliotecas modernas del ecosistema

En NLP moderno también se usan bibliotecas especializadas para modelos preentrenados y Transformers. Estas herramientas permiten cargar modelos existentes, ajustarlos a tareas concretas y trabajar con arquitecturas de última generación sin construir todo desde cero.

En muchos flujos de trabajo actuales, estas bibliotecas se apoyan a su vez sobre PyTorch como backend principal.

Más adelante en el curso veremos estos modelos en detalle. Por ahora lo importante es entender que el ecosistema moderno suele construirse sobre capas: una biblioteca de Deep Learning general y, arriba de ella, herramientas específicas para modelos de lenguaje.

16.12 Bibliotecas lingüísticas versus bibliotecas de modelado

Una distinción muy útil es separar:

  • Bibliotecas lingüísticas: orientadas a tokenización, lematización, entidades, parsing y análisis estructural del texto.
  • Bibliotecas de modelado: orientadas a entrenar modelos clásicos o neuronales sobre representaciones textuales.

Por ejemplo:

  • NLTK y spaCy están más cerca del primer grupo.
  • scikit-learn, Gensim y PyTorch están más cerca del segundo.

En proyectos reales, ambas capas suelen combinarse.

16.13 Un pipeline real suele mezclar herramientas

Es bastante habitual que un mismo proyecto use varias bibliotecas a la vez. Por ejemplo:

  • spaCy para tokenización y entidades.
  • scikit-learn para TF-IDF y clasificación clásica.
  • PyTorch para un modelo neuronal más avanzado.

Esto muestra que el ecosistema de NLP en Python no funciona como un menú de exclusión mutua. Muchas veces las herramientas se complementan.

16.14 Criterios para elegir una biblioteca

La elección de una biblioteca depende de varios factores:

  • Si queremos aprender conceptos o construir una aplicación real.
  • Si necesitamos procesamiento lingüístico clásico o Deep Learning.
  • Si priorizamos facilidad didáctica, rendimiento o flexibilidad.
  • Si el problema se resuelve con modelos clásicos o con modelos preentrenados modernos.

No existe una única respuesta correcta. La biblioteca adecuada depende del tipo de problema y del momento del proyecto.

16.15 NLTK y spaCy no compiten necesariamente

Es común preguntarse si conviene aprender NLTK o spaCy. La respuesta más útil suele ser que cumplen roles algo distintos.

  • NLTK: excelente para fundamentos y técnicas clásicas.
  • spaCy: excelente para pipelines eficientes y análisis lingüístico moderno en producción.

Por eso, tiene sentido estudiar ambas en un curso como este: una ayuda a entender, la otra ayuda a aplicar.

16.16 scikit-learn y el NLP clásico

Si pensamos en problemas como clasificación de documentos con Bag of Words o TF-IDF, scikit-learn sigue siendo una herramienta extremadamente útil. Proporciona vectorizadores, clasificadores y utilidades de evaluación que permiten construir pipelines clásicos con bastante rapidez.

Por eso, incluso aunque el curso avance hacia modelos modernos, conviene no perder de vista esta biblioteca.

16.17 PyTorch y el salto a modelos modernos

Cuando el NLP pasa del conteo de palabras al aprendizaje profundo, PyTorch se vuelve central. Permite representar texto como tensores, entrenar embeddings, construir redes recurrentes y más adelante trabajar con mecanismos de atención y Transformers.

En ese sentido, PyTorch es una puerta de entrada al bloque más moderno del curso.

16.18 Ejemplo de progresión natural en el aprendizaje

Una forma razonable de aprender NLP en Python suele seguir esta secuencia:

  1. Entender conceptos con herramientas simples como NLTK.
  2. Pasar a pipelines más eficientes con spaCy.
  3. Resolver tareas clásicas con scikit-learn.
  4. Explorar embeddings clásicos con herramientas apropiadas.
  5. Avanzar hacia Deep Learning con PyTorch y bibliotecas modernas.

No es la única ruta posible, pero conceptualmente tiene bastante sentido.

16.19 Resumen comparativo

Biblioteca Fortaleza principal Uso típico
NLTK Didáctica y fundamentos clásicos. Aprendizaje, corpora, tokenización, stemming.
spaCy Eficiencia y pipelines productivos. Tokenización, entidades, lematización, parsing.
scikit-learn Machine Learning clásico. Bag of Words, TF-IDF, clasificación.
Gensim Embeddings y modelado semántico clásico. Word2Vec, Doc2Vec, tópicos.
PyTorch Deep Learning. RNN, atención, Transformers, entrenamiento en GPU.

16.20 Ejemplo en Python: mini flujo con varias librerías

Este ejemplo combina bibliotecas distintas en un flujo pequeño pero realista: tokenización con NLTK, entidades con spaCy y vectorización con scikit-learn. Es una buena muestra de cómo el ecosistema suele combinarse en proyectos concretos.

Antes de ejecutar el ejemplo conviene instalar las bibliotecas necesarias con pip install nltk spacy scikit-learn.

Como el ejemplo usa el modelo en español de spaCy, también debes descargarlo una vez con python -m spacy download es_core_news_sm.

import nltk
import spacy
from sklearn.feature_extraction.text import TfidfVectorizer

nltk.download("punkt")
nltk.download("punkt_tab")

texto = "OpenAI presento un nuevo modelo en San Francisco y luego lo llevo a Buenos Aires."

tokens = nltk.word_tokenize(texto, language="spanish")
print("Tokens NLTK:", tokens)

nlp = spacy.load("es_core_news_sm")
doc = nlp(texto)
print("Entidades spaCy:", [(ent.text, ent.label_) for ent in doc.ents])

vectorizador = TfidfVectorizer()
X = vectorizador.fit_transform([texto, "Buenos Aires es una ciudad con mucho talento tecnologico"])
print("TF-IDF shape:", X.shape)

Este programa tiene varias partes, y cada una cumple un objetivo distinto dentro del flujo:

  • import nltk importa NLTK para trabajar con tokenización, es decir, para separar el texto en palabras y signos.
  • import spacy incorpora spaCy, que en este caso se usa para analizar el texto y detectar entidades nombradas.
  • from sklearn.feature_extraction.text import TfidfVectorizer importa la clase que permite convertir textos en vectores numéricos con TF-IDF.
  • nltk.download("punkt") y nltk.download("punkt_tab") descargan los recursos que NLTK necesita para poder tokenizar correctamente el texto en español.
  • texto = ... define la oración de ejemplo sobre la que se aplicarán las distintas herramientas.
  • nltk.word_tokenize(texto, language="spanish") divide la oración en tokens. El objetivo aquí es mostrar cómo NLTK separa palabras y signos de puntuación.
  • print("Tokens NLTK:", tokens) muestra en pantalla el resultado de la tokenización para que se vea concretamente cómo quedó fragmentado el texto.
  • spacy.load("es_core_news_sm") carga un modelo de spaCy entrenado para español. Sin este modelo, spaCy no puede realizar su análisis lingüístico.
  • doc = nlp(texto) procesa la oración con spaCy y genera un objeto que contiene tokens, entidades, información gramatical y otros análisis posibles.
  • [(ent.text, ent.label_) for ent in doc.ents] recorre las entidades detectadas por spaCy y muestra tanto el texto encontrado como su categoría.
  • TfidfVectorizer() crea el vectorizador que transformará documentos de texto en representaciones numéricas basadas en frecuencia e importancia relativa de términos.
  • fit_transform([...]) aprende el vocabulario a partir de las dos frases y genera la matriz TF-IDF correspondiente.
  • print("TF-IDF shape:", X.shape) muestra el tamaño de la matriz obtenida. Eso permite ver cuántos documentos se procesaron y cuántos términos distintos fueron representados.

Lo interesante del ejemplo es que ilustra tres objetivos diferentes dentro de NLP clásico: segmentar texto, extraer información lingüística y convertir documentos en vectores numéricos para usarlos en modelos posteriores.

16.21 Qué debes recordar de este tema

  • El ecosistema de NLP en Python está compuesto por bibliotecas con roles distintos.
  • NLTK es muy valiosa para aprender fundamentos y técnicas clásicas.
  • spaCy destaca en procesamiento eficiente y pipelines productivos.
  • scikit-learn sigue siendo muy importante en NLP clásico.
  • PyTorch es clave para Deep Learning y modelos modernos.
  • En proyectos reales, varias de estas herramientas suelen combinarse.

16.22 Conclusión

Comprender el panorama de librerías de NLP en Python es importante porque permite ubicar cada herramienta en su contexto correcto. No todas hacen lo mismo ni están pensadas para el mismo tipo de problema, pero juntas forman un ecosistema muy potente para trabajar con lenguaje natural.

Con esta visión general ya podemos pasar a un terreno más concreto y empezar a trabajar con bibliotecas específicas.

En el próximo tema estudiaremos el procesamiento de texto con NLTK, una excelente puerta de entrada práctica para aplicar muchos de los conceptos que vimos hasta ahora.