Esta clase va desde la comprensión del texto no estructurado (Semana 1) hacia la transformación procedimental del lenguaje natural en una forma computable. En ciberseguridad, los correos, tickets y logs narrativos contienen ruido (firmas, HTML, URLs, cadenas reenviadas) y variaciones lingüísticas que, si no se gestionan, degradan la calidad del análisis y generan errores aguas abajo (por ejemplo, patrones falsos o vocabularios inflados). Por ello, esta semana consolida un flujo de trabajo básico de PLN aplicado: tokenización, normalización y limpieza, como precondición para cualquier extracción de patrones o entrenamiento de modelos.
En paralelo, la semana introduce el análisis exploratorio del texto para identificar distribuciones léxicas, frecuencias y regularidades lingüísticas vinculadas a amenazas, y presenta el principio de representación del lenguaje: la idea de que el texto debe mapearse a representaciones (p. ej., listas de tokens, n-gramas, vectores) que preserven señal útil para tareas posteriores. Este puente entre limpieza y exploración permite comenzar a conectar patrones lingüísticos con ataques, dejando listo el dataset del Reto 1 para etapas subsiguientes (etiquetado y clasificación en Reto 2).
Tokenización
La tokenización es el primer paso en cualquier pipeline de PLN. Tokenizar es descomponer datos no estructurados y texto en lenguaje natural en fragmentos de información que pueden considerarse elementos discretos. Las ocurrencias de tokens en un documento pueden usarse directamente como un vector que representa dicho documento.
Lematización
Etimológicamente, la lematización indica el proceso de determinar la forma de una palabra que se constituye en el lema. En PLN, la lematización es una técnica de preprocesamiento de texto que reduce las formas flexionadas de las palabras en un conjunto de datos de texto a una palabra raíz común o forma de diccionario (o lema).
La y la normalización son importantes en ciberseguridad porque: reducen ruido, disminuyen dimensionalidad, mejoran el análisis exploratorio, preparan el corpus para representación vectorial (Tema 2.5).
2.1.1. La tokenización consiste en dividir el texto en fragmentos manejables (tokens), generalmente palabras.
Esto permite que el sistema deje de “ver” oraciones completas y comience a operar sobre listas de unidades lingüísticas. Hay varios tipos de tokenización:
Tokenización básica por espacios: Divide por espacios. Es simple pero no siempre precisa.
Tokenización basada en expresiones regulares: Permite eliminar puntuación y separar correctamente palabras.
Tokenización avanzada (bibliotecas NLP): Herramientas como spaCy o NLTK consideran reglas lingüísticas más complejas.
2.1.2. La normalización busca reducir variaciones innecesarias que no aportan significado. Incluye:
Conversión a minúsculas
Eliminación de caracteres especiales
Eliminación o reemplazo de URLs
Eliminación de espacios múltiples.
2.1.3. Ejemplo con Python
Figura 1
Ilustración señala el código Python paso a paso.
Código Python para tokenización y normalización (Creación del autor: Rafael Melgarejo)
Ilustración señala el código Python paso a paso
Es recomendable mantener el token “[URL]” para conservar la información estructural, evitar sobreajuste del texto, proteger privacidad y reducir la dimensionalidad. Los Grandes Modelos de Lenguaje realizan tokenización para procesar el texto (prompt) que introduce el usuario.
Aprende más
Para conocer más sobre (La tokenización en LLM), se recomienda el video “¿Qué son los TOKENS? ¡Accede aquí!
Este contenido introduce variabilidad artificial en el corpus y dificulta el aprendizaje automático. El objetivo no es borrar información, sino eliminar redundancia no lingüística.
2.2.2. Principio clave en ciberseguridad
No todo lo repetitivo es ruido (Jurafsky,2023). Una URL, un dominio externo, palabras urgentes NO constituyen ruido. El ruido es información que no cambia la intención comunicativa. Una limpieza excesiva destruye patrones discursivos del ataque, por eso no es recomendable: eliminar mayúsculas urgentes, borrar imperativos, eliminar enlaces.
2.2.3. Ejemplo de eliminación de ruido con Python
Supongamos el siguiente texto:
Figura 2
Texto para análisis de Ruido
Nota. Texto para análisis de Ruido (creación de autor Rafael Melgarejo)
Problemas detectados:
Tabla
Fragmento
Tipo de ruido
Saludos cordiales
firma
mensaje confidencial
disclaimer
formato email
estructura repetitiva
Nota. Ejemplos de fragmentos comunes que suelen considerarse ruido textual durante el preprocesamiento de textos en análisis de lenguaje natural.
Saludos cordiales
Tipo de ruido:
firma
mensaje confidencial
Tipo de ruido:
disclaimer
formato email
Tipo de ruido:
estructura repetitiva
Eliminación de ruido paso a paso (código Python)
Figura 3
Ejemplo Python eliminación de ruido
Ejemplo Python eliminación de ruido (creación de autor Rafael Melgarejo)
Después de tokenizar, normalizar y eliminar ruido, el texto aún contiene palabras que no aportan información semántica relevante para detectar amezanas. Por ejemplo en: “confirme su cuenta inmediatamente para evitar suspensión”, hay palabras que aparecen usualmente: “su” y “para”. Estas palabras aumentan el tamaño del vocabulario sin mejorar la detección. Entonces es necesario eliminar los stopwords y realizar una reducción lingüística.
2.3.1. Stopwords
Las stopwords son palabras funcionales muy frecuentes cuyo valor discriminativo es bajo, en español por ejemplo: el, la, los, las, de, en, para, su, sus, y, o. Sin embargo, en ciberseguridad no deben eliminarse todas las stopwords (e.g. “su cuenta”, “su contraseña”) porque pueden indicar personalización del ataque (Eisenstein,2019). Usualmente se usan listas de stopwords adaptadas al dominio.
2.3.2. Implementación en Python de stopwords.
NLTK es un kit de herramientas de Python que trabajan con datos de lenguaje natural. Proporciona interfaces para más de 50 corpus y recursos léxicos como WordNet, además de un conjunto de bibliotecas de procesamiento de texto para clasificación, tokenización, , etiquetado, análisis sintáctico y razonamiento semántico, contenedores para bibliotecas de PLN. Posee corpus de varios idiomas.
En las siguientes líneas de código se observa la importación de stopwords desde un corpus de español. Luego, coteja con los stopwords los tokens del texto original para eliminarlos si coinciden.
Figura 4
Ejemplo Python stopwords
Nota. Ejemplo Python stopwords (creación de autor Rafael Melgarejo)
2.3.3. Lematización
La lematización (o lemmatization en inglés) es un proceso lingüístico y computacional que consiste en reducir una palabra en su forma flexionada (es decir, conjugada, en plural, en femenino, con género, tiempo verbal, etc.) a su forma base o canónica, llamada lema. El lema es la forma que aparece en un diccionario, normalmente el infinitivo en verbos, el singular masculino en adjetivos/sustantivos, etc.. Prácticas comunes incluyen transformar los verbos conjugados a su forma regular. Ejemplo: de “confirmó” a “confirmar”, de “verificando” a “verificar”.
La lematización se usa en PLN para:
Simplificar textos antes de análisis (búsquedas, clasificación de textos, chatbots, análisis de sentimientos, etc.).
Que el ordenador trate como la misma palabra todas sus variantes (mejora la precisión en motores de búsqueda, recomendadores, etc.).
Reducir el vocabulario y el ruido en modelos de machine learning.
2.3.4. Lematización en Python con spaCy.
spaCy es una biblioteca para el procesamiento avanzado del lenguaje natural en Python y Cython. Incluye pipelines preentrenados. Admite la tokenización y el entrenamiento en +70 idiomas. Tiene modelos de velocidad y redes neuronales de vanguardia para etiquetado, análisis sintáctico, reconocimiento de entidades con nombre, clasificación de texto y más, aprendizaje multitarea con transformadores preentrenados como BERT, así como un sistema de entrenamiento listo para producción y un empaquetado de modelos, implementación y gestión de flujos de trabajo sencillos. spaCy es un software comercial de código abierto, publicado bajo la licencia MIT.
Para usar spaCy con Python es necesario instalarlo primero, y para manejar vocabulario, sintaxis, entidades en español es común utilizar el modelo de procesamiento “es_core_news_sm”. La ilustración 5 muestra alternativas de instalación de modelos. Advertencia: si utiliza el código en ambiente de Google Colab añada el signo de admiración de la siguiente manera: “!pip install -U spacy”.
Figura 5
Instalación de spaCy y modelo de procesamiento
Instalación de spaCy y modelo de procesamiento (creación de autor Rafael Melgarejo)
Instalación de spaCy y modelo de procesamiento
La Ilustración 6 es código para lematizar palabras / frases con spaCy y el modelo pequeño “es_core_news_sm”. Se incluye un texto demostrativo.
Figura 6
Lematización de un texto con spyCy
Lematización de un texto con spyCy (creación de autor Rafael Melgarejo)
Lematización de un texto con spyCy
El resultado de la ejecución del código se presenta a continuación( Token, Lema y la categoría gramatical de los elementos del texto:
Tabla
Token
Lema
POS
Los
el
DET
niños
niño
NOUN
corrían
correr
VERB
rápidamente
rápidamente
ADV
por
por
ADP
el
el
DET
parque
parque
NOUN
mientras
mientras
SCONJ
jugaban
jugar
VERB
y
y
CCONJ
reían
reir
VERB
.
.
PUNCT
Nota. Ejemplo de análisis lingüístico en procesamiento de lenguaje natural que muestra la relación entre token, lema y categoría gramatical (POS).
Los
Lema: el POS: DET
niños
Lema: niño POS: NOUN
corrían
Lema: correr POS: VERB
rápidamente
Lema: rápidamente POS: ADV
por
Lema: por POS: ADP
el
Lema: el POS: DET
parque
Lema: parque POS: NOUN
mientras
Lema: mientras POS: SCONJ
jugaban
Lema: jugar POS: VERB
y
Lema: y POS: CCONJ
reían
Lema: reir POS: VERB
.
Lema: . POS: PUNCT
Cuando el texto tiene verbos irregulares y formas muy flexionadas hay que tomar en cuenta las formas del lenguaje. En inglés el resultado de la lematización puede no sorprender al usuario final, pero en español es variado. El código de Ilustración 7 toma varias frases y las lematiza.
Figura 7
Lematización verbos irregulares
Lematización verbos irregulares (creación de autor Rafael Melgarejo)
Lematización verbos irregulares
El resultado resulta curioso para quien no está acostumbrado:
Original: Fui al médico porque me dolía mucho la cabeza.
Lemas: ir al médico porque yo doler mucho el cabeza .
Original: Estuvimos estudiando toda la noche y nos quedamos dormidos.
Lemas: estuvir estudiar todo el noche y yo quedar dormido .
Original: Las mejores casas están siendo construidas ahora mismo.
Lemas: el mejor casa estar ser construir ahora mismo .
Original: ¡Corre, corrió, corriendo, correremos!
Como se puede observar, con el código proporcionado, el lema de “correremos” es “correremo”, que no es del todo correcto. spaCy utiliza el modo “rule”, y para corregir se lo trata explícitamente. En Ilustración 8 está el código inicial y en la parte inferior el resultado.
Figura 8
Lematización explícita
Lematización explícita (creación de autor Rafael Melgarejo)
Lematización explícita
Aprende más
Para conocer más Se recomienda el video tutorial (“NLP - 3 – Lematización”), para revisar casos prácticos mediante Jupyter. El video está en ¡Accede aquí!
Con los pasos realizados hasta aquí, el texto ya no es solo lenguaje, son datos analizables, es decir se ha construido el pipeline de PLN:
TEXTO CRUDO➔Tokenización➔Normalización➔Eliminación de ruido ➔ Stopwords➔Lematización➔CORPUS LIMPIO.
Con el objetivo de detectar regularidades discursivas, la distribución léxica describe:
qué palabras aparecen, cuántas veces aparecen, y cómo se distribuyen en el corpus.
En ciberseguridad, un corpus de phishing (por ejemplo), suele mostrar: verbos imperativos frecuentes, referencias a cuentas o accesos, marcadores de urgencia. Mientras que un corpus legítimo presenta: descripciones técnicas, mensajes de error, y lenguaje colaborativo.
2.4.1. Ley de Zipf
En lenguaje natural pocas palabras aparecen muchas veces, y muchas palabras aparecen pocas veces, esto es distribución de Zipf. En otras palabras, el vocabulario crece, pero solo un subconjunto concentra la información útil.
2.4.2. Implementación de distribución léxica y frecuencia en Python
La Ilustración 9 presenta el código Python para lematizar el texto, calcular las frecuencias usando “collections” y las visualiza con “matplotlib”.
Figura 9
Cálculo y Visualización de frecuencias con Python
Cálculo y Visualización de frecuencias con Python (creación de autor Rafael Melgarejo)
Representación del lenguaje es la manera de convertir el lenguaje humano en números sin perder significado. Las computadoras no entienden palabras, así un modelo de parendizaje automático solamente puede operar con: números, vectores y matrices. En consecuencia, cada documento se transforma en un vector numérico que describe su contenido lingüístico. Un texto, por ejemplo “confirme su cuenta inmediatamente” se convierte en: “[0,1,0,3,0,2…]. Este vector representa: las palabras que aparecen, con qué frecuencia, y su importancia dentro del texto. A continuación dos modelos de representación del lenguaje: Bag of Words, N-grams, y TF-IDF (Jurafsky,2023) .
2.5.1. BoW: Bag of Words
BoW permite detectar patrones como presencia de palabras críticas, vocabulario típico de phishing, y diferencias entre textos legítimos y maliciosos. BoW ignora el orden lenguaje, solo registra presencia y frecuencia de palabras clave. Aunque BoW trata igual palabras muy comunes y palabras importantes; ejemplo: cuenta (muy frecuente)y urgente (más discriminativa). Aunque BoW es simple, interpretable e ideal para enseñanza inicial, no entiende significado ni contexto.
En Python es útil la librería “sklearn”, una herramienta predictiva con Machine Learning para el análisis de datos, especialmente textos, a los cuales transforma en un vector con las veces que aparece cada palabra de un documento.
2.5.2. N-grams (extension de BoW)
Mientras BoW ignora orden, n-grams recupera fragmentos lingüísticos. Esto es importante en ciberseguridad, porque los ataques vienen en combinaciones, no en palabran aisladas. En PLN es posible construir los n-gramas sobre la base de distintos tipos de elementos como por ejemplo fonemas, sílabas, letras, palabras.
Es una medida estadística que evalúa la importancia de una palabra dentro de un documento en relación con una colección (corpus). Combina la frecuencia del término (TF) con su rareza (IDF) para resaltar palabras clave significativas, reduciendo el peso de palabras comunes (ej. "el", "que"). La idea central es que no todas las palabras pesan igual, TF-IDF aumenta el peso de las palabras frecuentes en un documento y a su vez raras en el corpus.
En Python con sklearn el vector resultante representa importancia semántica, más que conteo.
Un patrón lingüístico es una regularidad observable en el lenguaje que aparece repetidamente en textos maliciosos. Por ejemplo, en este conjunto de señales “urgente + verificar + cuenta + [URL]” rara vez aparece en comunicaciones técnicas legítimas.
2.6.1. Dimensión discursiva del ataque
Los ataques de ingeniería social operan en tres niveles, como consta a continuación:
Tabla
Nivel
Manifestación
Cognitivo
activar miedo, obediencia o urgencia
Discursivo
uso estratégico del lenguaje
Computacional
patrones detectables por PLN
Nota. Relación entre los niveles cognitivo, discursivo y computacional en el análisis de intención dentro de textos analizados mediante procesamiento de lenguaje natural (PLN).
Cognitivo
Manifestación:
activar miedo, obediencia o urgencia
Discursivo
Manifestación:
uso estratégico del lenguaje
Computacional
Manifestación:
patrones detectables por PLN
El modelo aprende el tercer nivel a partir de los dos primeros (cognitivo y discursivo).
2.6.2. Ejemplos comparativos
En el texto: “URGENTE: confirme su cuenta inmediatamente para evitar suspensión”, los patrones detectables son:
Imperativo ➔ confirme
Urgencia ➔ URGENTE, inmediatamente
Amenaza ➔ suspensión
Acción ➔ [URL]
En el texto: “No puedo acceder a la VPN desde ayer. Aparece error de autenticación”, los patrones detectables son:
Descripción técnica
Narrativa explicativa
Ausencia de coerción.
Como se puede concluir la diferencia central está en la intención comunicativa.
2.6.3. Patrones básicos
El objetivo de un sistema de PLN en ciberseguridad es detectar patrones discursivos asociados a ataques, no es detectar hackers. La ciberseguridad también es análisis del lenguaje. Los patrones que se identifican usualmente son:
Análisis de sentimiento, n-gramas, estilometría,
embeddings (BERT)
BEC (Business Email Compromise)
Imitación del estilo del jefe (longitud de frases,
vocabulario, uso de mayúsculas, puntuación)
Estilometría (estudio cuantitativo del estilo de escritura)
Ingeniería social en chats
Lenguaje persuasivo, preguntas excesivas,
cambios bruscos de tono
Clasificación de texto + detección de anomalías
Notas de ransomware
Frases típicas (“tus archivos están encriptados”),
amenazas en mal inglés
Reconocimiento de entidades + topic modeling
Amenazas generadas por IA (2025–2026)
Texto “demasiado perfecto”, falta de huellas humanas
(repetición sutil de patrones, distribución de palabras función)
Modelos estilométricos específicos para distinguir
humano vs LLM
Nota. Relación entre tipos de ataques de ingeniería social y los patrones lingüísticos que pueden ser detectados mediante técnicas de procesamiento de lenguaje natural (PLN).
Detección PLN:
Análisis de sentimiento, n-gramas, estilometría,
embeddings (BERT)
BEC (Business Email Compromise)
Patrones lingüísticos:
Imitación del estilo del jefe (longitud de frases,
vocabulario, uso de mayúsculas, puntuación)
Detección PLN:
Estilometría (estudio cuantitativo del estilo de escritura)
Ingeniería social en chats
Patrones lingüísticos:
Lenguaje persuasivo, preguntas excesivas,
cambios bruscos de tono
Detección PLN:
Clasificación de texto + detección de anomalías
Notas de ransomware
Patrones lingüísticos:
Frases típicas (“tus archivos están encriptados”),
amenazas en mal inglés
Detección PLN:
Reconocimiento de entidades + topic modeling
Amenazas generadas por IA (2025–2026)
Patrones lingüísticos:
Texto “demasiado perfecto”, falta de huellas humanas
(repetición sutil de patrones, distribución de palabras función)
Detección PLN:
Modelos estilométricos específicos para distinguir
humano vs LLM
El código en Ilustración 14 extrae features (características) lingüísticas útiles para detectar phishing. Usa “textstat” para métricas de legibilidad y el modelo mediano de procesamiento de lenguaje “es_core_news_md” para mayor precisión.
Figura 11
Extracción de features lingüísticas
Extracción de features lingüísticas (contenido de autor Rafael
Los patrones en el modelo ya no son frases, sino vectores de la forma: [urgente=1, verificar=1, cuenta=1, error=0, vpn=0]. El lenguaje deja de ser texto y pasa a ser geometría matemática. En este caso, el aprendizaje automático descubre: combinaciones frecuentes, correlaciones lingüísticas, y señales predictivas.
Profundiza más
Este recurso te ayudará a enfatizar sobre (la teoría revisada se ha preparado el notebook de Google Colab “w2_PLN_Profundizacion.ipynb” con todos los pasos. Súba el notebook a ambiente Colab y ejecútelo, contiene la resolución en código de todo el contenido. Se recomienda revisar las diferentes secciones del código.) ¡Accede aquí!