Extracción de entidades nombradas (NER) paso a paso con spaCy

Extracción de entidades nombradas (NER) paso a paso con spaCy

En un mundo donde el volumen de datos textuales crece exponencialmente, contar con herramientas que permitan estructurar y extraer información clave es fundamental. La extracción de entidades nombradas (Named Entity Recognition o NER) es una de las técnicas más potentes del procesamiento del lenguaje natural (NLP), y la biblioteca spaCy es una de las más eficientes y fáciles de usar para implementarla. En este post aprenderás qué es NER, cómo funciona, sus aplicaciones prácticas y cómo implementarla paso a paso con spaCy, desde la instalación hasta el entrenamiento personalizado.

¿Qué es la extracción de entidades nombradas (NER)?

La extracción de entidades nombradas es una técnica de NLP que identifica y clasifica automáticamente fragmentos de texto en categorías predefinidas como personas, organizaciones, lugares, fechas, cantidades, entre otros.

🔹 “Apple adquirió Beats por 3.000 millones de dólares en 2014.”
🔹 PERSON: Apple
🔹 ORG: Beats
🔹 MONEY: 3.000 millones de dólares
🔹 DATE: 2014

Esta estructura permite transformar texto no estructurado en datos que pueden ser analizados, visualizados o utilizados para alimentar otros sistemas.

¿Por qué es importante NER en procesamiento de texto?

NER no solo permite entender el contenido de textos largos, sino que también ayuda a automatizar tareas y tomar decisiones basadas en datos.

🔹 Extraer nombres de clientes, empresas o productos de correos o reseñas
🔹 Analizar menciones de marcas o figuras públicas en redes sociales
🔹 Automatizar la lectura de contratos y documentos legales
🔹 Facilitar la búsqueda avanzada en bases de datos o sitios web

Gracias a su capacidad para organizar grandes volúmenes de texto, NER se ha convertido en una técnica imprescindible para analistas, periodistas, investigadores y empresas.

¿Qué es spaCy y por qué usarlo para NER?

spaCy es una biblioteca de Python para procesamiento del lenguaje natural orientada a aplicaciones prácticas, rápidas y robustas.

🔹 Es open source y tiene soporte para múltiples idiomas
🔹 Incluye modelos preentrenados de NER que funcionan “out of the box”
🔹 Ofrece integración con frameworks de machine learning como PyTorch y TensorFlow
🔹 Es ideal para producción: rápida, optimizada y fácil de escalar

spaCy también permite entrenar modelos propios si necesitas detectar entidades específicas no cubiertas por defecto.

Instalación de spaCy y modelos preentrenados

Paso 1 – Instalar spaCy

pip install spacy

Paso 2 – Descargar un modelo de idioma

python -m spacy download en_core_web_sm

Puedes elegir modelos pequeños (sm), medianos (md) o grandes (lg), según el nivel de precisión requerido.

Cómo aplicar NER con spaCy en cinco pasos

1. Cargar spaCy y el modelo de lenguaje

import spacy
nlp = spacy.load("en_core_web_sm")

2. Procesar un texto

doc = nlp("Barack Obama fue presidente de Estados Unidos entre 2009 y 2017.")

3. Extraer entidades

for ent in doc.ents:
print(ent.text, ent.label_)

Resultado:
🔹 Barack Obama → PERSON
🔹 Estados Unidos → GPE
🔹 2009 → DATE
🔹 2017 → DATE

4. Visualizar entidades con displacy

from spacy import displacy
displacy.render(doc, style="ent", jupyter=True)

Este visualizador permite ver las entidades resaltadas en el texto con colores diferenciados.

5. Acceder a los spans de las entidades

entities = [(ent.text, ent.start_char, ent.end_char, ent.label_) for ent in doc.ents]
print(entities)

Esto es útil si quieres extraer las entidades para almacenarlas en bases de datos o visualizarlas en dashboards.

Categorías de entidades que detecta spaCy

spaCy viene con una lista predefinida de entidades que incluye:

🔹 PERSON: personas
🔹 ORG: organizaciones
🔹 GPE: ubicaciones geopolíticas
🔹 LOC: localizaciones
🔹 DATE: fechas
🔹 TIME: horas
🔹 MONEY: cantidades de dinero
🔹 PRODUCT: productos
🔹 EVENT: eventos históricos o deportivos
🔹 LAW: referencias legales
🔹 WORK_OF_ART: libros, películas, etc.

Puedes consultar todas las categorías en la documentación oficial o imprimirlas directamente desde tu entorno.

Aplicaciones prácticas de NER con spaCy

Análisis de medios y noticias

🔹 Extraer nombres de empresas mencionadas en artículos
🔹 Monitorizar eventos importantes por fecha y lugar
🔹 Detectar tendencias en coberturas periodísticas

CRM y atención al cliente

🔹 Detectar nombres, correos o ciudades en formularios
🔹 Automatizar el procesamiento de consultas por chat
🔹 Identificar temas frecuentes por entidad

Fintech y documentos legales

🔹 Extraer entidades legales de contratos automáticamente
🔹 Clasificar riesgos, partes y fechas clave
🔹 Digitalizar procesos de onboarding

Ciencia de datos y salud

🔹 Analizar estudios médicos extrayendo enfermedades, tratamientos y autores
🔹 Crear bases de datos estructuradas a partir de textos científicos

Entrenar tu propio modelo de NER con spaCy

Si necesitas detectar entidades personalizadas como nombres de productos, códigos internos o términos técnicos, puedes entrenar tu propio modelo.

H3: Paso 1 – Definir ejemplos de entrenamiento

TRAIN_DATA = [
("InspiraIA lanzó un nuevo modelo de NLP.", {"entities": [(0, 8, "ORG")]}),
("Juan compró el producto ZX-42.", {"entities": [(20, 25, "PRODUCT")]}),
]

H3: Paso 2 – Crear el modelo y añadir el componente de NER

import spacy
from spacy.training.example import Example

nlp = spacy.blank("es")
ner = nlp.add_pipe("ner")
ner.add_label("ORG")
ner.add_label("PRODUCT")

H3: Paso 3 – Entrenar el modelo

import random
nlp.begin_training()

for i in range(20):
random.shuffle(TRAIN_DATA)
for text, annotations in TRAIN_DATA:
doc = nlp.make_doc(text)
example = Example.from_dict(doc, annotations)
nlp.update([example])

Una vez entrenado, puedes guardar el modelo y aplicarlo a nuevos textos como lo harías con un modelo preentrenado.

Buenas prácticas en extracción de entidades con spaCy

🔹 Revisa las entidades manualmente para validar la precisión
🔹 Evita textos demasiado cortos que no proporcionen contexto
🔹 Usa modelos grandes para tareas complejas
🔹 Combina NER con reglas personalizadas para mejorar la cobertura
🔹 Entrena modelos solo cuando sea necesario: muchas veces los modelos por defecto son suficientes

Limitaciones y desafíos de NER

🔹 Ambigüedad: una palabra puede ser entidad en un contexto y no en otro
🔹 Idioma: los modelos por defecto pueden no tener soporte para todos los idiomas o dominios
🔹 Entidades complejas: algunas entidades son difíciles de extraer si no están bien formadas
🔹 Costo computacional: entrenar modelos personalizados requiere recursos y tiempo

Soluciones posibles incluyen el uso de transfer learning, anotación manual de más datos y ajuste de hiperparámetros.

La extracción de entidades nombradas (NER) es una herramienta poderosa para transformar texto sin estructura en datos valiosos. Con spaCy, puedes implementar NER de forma rápida, precisa y escalable, ya sea utilizando modelos preentrenados o desarrollando tus propios modelos para casos de uso específicos. Desde marketing y legaltech hasta ciencia de datos y análisis de medios, las posibilidades son enormes. Si estás trabajando con grandes volúmenes de texto, aprender a aplicar NER puede darte una ventaja competitiva significativa. Empieza hoy con spaCy y convierte tus textos en insights accionables.

Scroll al inicio