💬 Unidad 1. Fundamentos del Procesamiento de Lenguaje Natural
El Procesamiento de Lenguaje Natural (NLP) es una disciplina en la intersección de la lingüística, la informática y la inteligencia artificial. Su objetivo es permitir que las máquinas comprendan, interpreten y generen lenguaje humano de forma útil.
1.1. ¿Qué es el NLP?
El NLP abarca un amplio rango de tareas computacionales que involucran el lenguaje humano:
- Comprensión: Extraer significado del texto (clasificación, extracción de entidades, análisis de sentimientos).
- Generación: Crear texto coherente (chatbots, resúmenes, traducción).
- Transformación: Convertir texto de una forma a otra (corrección ortográfica, parafraseo).
¿Por qué es difícil?
El lenguaje humano presenta desafíos únicos para las máquinas:
- Ambigüedad: Una palabra puede tener múltiples significados ("banco" puede ser una institución financiera o un asiento).
- Contexto: El significado cambia según el contexto ("Hace frío" vs "Es un tipo frío").
- Variabilidad: Sinónimos, jerga, errores ortográficos, diferentes idiomas.
- Conocimiento implícito: Los humanos entienden ironía, sarcasmo y referencias culturales.
1.2. Pipeline Típico de NLP
Un proyecto de NLP generalmente sigue estos pasos:
- Adquisición de Datos: Obtener el corpus de texto (scraping, APIs, datasets públicos).
- Preprocesamiento: Limpiar y normalizar el texto.
- Representación: Convertir texto a números (vectores).
- Modelado: Aplicar algoritmos de ML o Deep Learning.
- Evaluación: Medir el rendimiento con métricas apropiadas.
- Despliegue: Poner el modelo en producción.
1.3. Preprocesamiento de Texto
El preprocesamiento es crucial para reducir el ruido y normalizar el texto.
Tokenización
Dividir el texto en unidades más pequeñas llamadas tokens (palabras, subpalabras o caracteres).
import nltk
nltk.download('punkt')
from nltk.tokenize import word_tokenize, sent_tokenize
texto = "El NLP es fascinante. Permite crear chatbots increíbles."
# Tokenización por oraciones
oraciones = sent_tokenize(texto, language='spanish')
print(oraciones)
# ['El NLP es fascinante.', 'Permite crear chatbots increíbles.']
# Tokenización por palabras
palabras = word_tokenize(texto, language='spanish')
print(palabras)
# ['El', 'NLP', 'es', 'fascinante', '.', 'Permite', 'crear', 'chatbots', 'increíbles', '.']
Normalización de Texto
- Lowercasing: Convertir todo a minúsculas para que "Casa" y "casa" sean iguales.
- Eliminación de puntuación y caracteres especiales.
- Eliminación de números (si no son relevantes).
- Eliminación de espacios extra.
import re
def normalizar_texto(texto):
# Minúsculas
texto = texto.lower()
# Eliminar caracteres especiales (mantener letras, números y espacios)
texto = re.sub(r'[^a-záéíóúüñ0-9\s]', '', texto)
# Eliminar espacios múltiples
texto = re.sub(r'\s+', ' ', texto).strip()
return texto
print(normalizar_texto("¡Hola! ¿Cómo estás??? Muy bien."))
# 'hola cómo estás muy bien'
Stop Words
Las stop words son palabras muy comunes que generalmente no aportan significado semántico (artículos, preposiciones, conjunciones).
from nltk.corpus import stopwords
nltk.download('stopwords')
stop_words = set(stopwords.words('spanish'))
print(list(stop_words)[:10])
# ['al', 'algo', 'algunas', 'algunos', 'ante', 'antes', 'como', 'con', 'contra', 'cual']
palabras_filtradas = [w for w in palabras if w.lower() not in stop_words]
print(palabras_filtradas)
Stemming vs Lematización
Ambas técnicas reducen las palabras a su forma base, pero de forma diferente:
- Stemming: Corta la palabra de forma heurística para obtener su raíz. Es rápido pero puede producir raíces que no son palabras reales ("correr", "corriendo" → "corr").
from nltk.stem import SnowballStemmer
stemmer = SnowballStemmer('spanish')
palabras = ["corriendo", "corrí", "correr", "corredores"]
stems = [stemmer.stem(p) for p in palabras]
print(stems)
# ['corr', 'corr', 'corr', 'corred']
- Lematización: Utiliza un diccionario para encontrar el lema (forma canónica) de la palabra. Es más preciso pero más lento ("corriendo" → "correr").
import spacy
nlp = spacy.load('es_core_news_sm')
doc = nlp("Los perros estaban corriendo por el parque")
lemmas = [token.lemma_ for token in doc]
print(lemmas)
# ['el', 'perro', 'estar', 'correr', 'por', 'el', 'parque']
1.4. Bibliotecas Fundamentales de NLP
| Biblioteca | Descripción | Fortalezas |
|---|---|---|
| NLTK | Natural Language Toolkit. La biblioteca clásica para aprender NLP. | Educativa, muchos recursos, corpus incluidos. |
| spaCy | Biblioteca industrial de NLP. | Rápida, pipelines preentrenados, NER, POS. |
| Transformers (Hugging Face) | Modelos de lenguaje preentrenados (BERT, GPT, etc.). | Estado del arte, fácil uso, muchos modelos. |
| Gensim | Especializada en modelado de tópicos y embeddings. | Word2Vec, Doc2Vec, LDA. |
| TextBlob | Interfaz simple para tareas comunes de NLP. | Fácil de usar, análisis de sentimientos. |
Ejemplo Completo con spaCy
import spacy
# Cargar modelo en español
nlp = spacy.load('es_core_news_sm')
texto = "Apple está buscando comprar una startup del Reino Unido por 1.000 millones de dólares."
doc = nlp(texto)
# Tokenización automática
print("Tokens:", [token.text for token in doc])
# Part-of-Speech Tagging (Etiquetado gramatical)
print("\nPOS Tagging:")
for token in doc:
print(f" {token.text}: {token.pos_} ({token.dep_})")
# Named Entity Recognition (NER)
print("\nEntidades:")
for ent in doc.ents:
print(f" {ent.text}: {ent.label_}")
# Apple: ORG, Reino Unido: LOC, 1.000 millones de dólares: MONEY
1.5. Tareas Comunes de NLP
El campo del NLP abarca muchas tareas específicas:
Clasificación de Texto
Asignar una categoría a un documento.
- Análisis de Sentimientos: Positivo / Negativo / Neutral.
- Detección de Spam: Spam / No Spam.
- Clasificación de Noticias: Deportes / Política / Tecnología.
Extracción de Información
- Named Entity Recognition (NER): Identificar personas, lugares, organizaciones, fechas.
- Extracción de Relaciones: Encontrar relaciones entre entidades ("Apple" - adquirió - "Startup").
Generación de Texto
- Resumen Automático: Crear versiones cortas de textos largos.
- Traducción Automática: Convertir texto entre idiomas.
- Chatbots: Generar respuestas conversacionales.
- Completado de Texto: GPT, modelos de lenguaje.
Similitud y Búsqueda
- Búsqueda Semántica: Encontrar documentos similares por significado.
- Question Answering (QA): Responder preguntas basándose en un contexto.
1.6. Datasets Populares en NLP
| Dataset | Descripción | Tarea |
|---|---|---|
| IMDB Reviews | 50,000 reseñas de películas | Análisis de sentimientos |
| AG News | 120,000 artículos de noticias | Clasificación de texto |
| SQuAD | Preguntas sobre artículos de Wikipedia | Question Answering |
| GLUE / SuperGLUE | Benchmark de múltiples tareas | Evaluación de modelos |
| CoNLL-2003 | Corpus anotado con entidades | NER |
1.7. Consideraciones Éticas en NLP
El NLP plantea importantes cuestiones éticas:
- Sesgo en los Datos: Los modelos pueden perpetuar sesgos de género, raza o cultura presentes en los datos de entrenamiento.
- Privacidad: Los modelos entrenados pueden memorizar información sensible.
- Desinformación: La generación de texto puede usarse para crear fake news.
- Interpretabilidad: Los modelos de Deep Learning son "cajas negras".
Es responsabilidad del profesional ser consciente de estos riesgos y tomar medidas para mitigarlos.
📅 Fecha de creación: Enero 2026
✍️ Autor: Fran García