Este proyecto implementa un pipeline de NLP reproducible que puede ejecutarse en:
- AWS: Amazon Comprehend (sentiment, key phrases, entities) y Amazon Translate (opcional).
- Localmente: VADER (sentiment), TF‑IDF (key phrases) y candidatos heurísticos de entidades vía regex.
- Traducción local opcional: HuggingFace MarianMT (descarga el modelo la primera vez).
El notebook incluye logs exportables, control de costo/tiempo y outputs en CSV/JSON.
Dado un dataset en CSV con una columna de texto, el pipeline:
- Extrae y normaliza textos (limpieza mínima + truncado).
- Genera features TF‑IDF (para modo local).
- Calcula sentiment (AWS o VADER local).
- Extrae key phrases (AWS o TF‑IDF local).
- Extrae entidades:
- AWS: NER real con Comprehend
- Local: entity candidates por regex
- (Opcional) Traduce INGLES --> ESPAÑOL (AWS Translate o HuggingFace local).
nlp_pipeline_aws_local.ipynb
Se generan en outputs/:
pipeline_results.csv/pipeline_results.json— dataset final consolidado (1 fila por documento)keyphrases_entities.csv— key phrases y entidades/candidatos por documentotranslations_en_es.csv— traducciones INGLES --> ESPAÑOL (si se activa)pipeline_logs.json— logs del pipeline (eventos + metadata)
- Python 3.10+
- JupyterLab / Jupyter Notebook
- (Opcional) Credenciales AWS con permisos para Comprehend/Translate
Instalación local:
python -m venv .venv
# Windows (PowerShell)
.\.venv\Scripts\Activate.ps1
# Mac/Linux
source .venv/bin/activate
pip install -r requirements.txt
jupyter labEste proyecto puede ejecutarse en modo local o en AWS.
Si lo ejecutas en AWS, algunos servicios pueden generar costos reales (especialmente si procesas muchos documentos o dejas recursos encendidos).
- Amazon Comprehend: cobra por análisis de texto.
- Amazon Translate: cobra por caracteres traducidos.
- SageMaker / EC2: instancias de notebook/compute si se quedan ejecutándose.
- (Opcional) otros recursos del entorno AWS.
Recomendación: corre en AWS solo si necesitas demostrar integración con servicios administrados.
Para pruebas rápidas o demos, usa el modo local.
- Mantén la traducción desactivada (default):
ENABLE_TRANSLATE=0
- Procesa menos documentos en pruebas:
MAX_DOCS=500(o menos)CSV_NROWS=5000MAX_TRANSLATE_DOCS=50si activas traducción
- Forzar modo local (costo 0):
NLP_PROVIDER=local
- Si usas SageMaker/Studio: apaga el kernel/instancia cuando termines.
- Activa alertas:
- AWS Budgets / Cost Explorer / Cost Anomaly Detection (si tu cuenta lo permite).
PowerShell
$env:NLP_PROVIDER="local"
jupyter labMac/Linux
export NLP_PROVIDER=local
jupyter labAbre el notebook y ejecuta Run All.
Requiere credenciales configuradas y permisos IAM para:
comprehend:BatchDetectSentimentcomprehend:BatchDetectKeyPhrasescomprehend:BatchDetectEntitiestranslate:TranslateText(si activas traducción)
Config:
export NLP_PROVIDER=aws
export AWS_REGION=us-east-1Si estás en SageMaker/Studio, el rol de ejecución debe tener permisos explícitos (si no, usa
NLP_PROVIDER=localen celda 2, por defecto en 'auto').
El pipeline funciona con cualquier CSV que tenga una columna con texto. Puedes probar a usar el que esta por defecto o usar otro
Por defecto:
DATA_PATH="data/AMAZON-REVIEW-DATA-CLASSIFICATION.csv"TEXT_COLUMN="reviewText"
Para usar otro dataset:
PowerShell
$env:DATA_PATH="data/mi_dataset.csv"
$env:TEXT_COLUMN="text"Mac/Linux
export DATA_PATH="data/mi_dataset.csv"
export TEXT_COLUMN="text"Notebook - Celda 2
# Cambia directamente en el notebook de esta forma
DATA_PATH = Path(os.getenv("DATA_PATH", "data/EJEMPLO_DE_DATASET.csv"))
TEXT_COLUMN = os.getenv("TEXT_COLUMN", "NOMBRE_DE_COLUMNA_CON_TEXTO")Notas:
- Si tu CSV usa
;como separador, ajusta la lectura en la CELDA 4 (sep=";"). - Si tu CSV no es UTF‑8, cambia
encodingen CELDA 4 (por ejemplolatin-1/cp1252). - Algunos datasets públicos traen filas corruptas; si aparece
ParserError/unexpected end of data, usaengine="python"+on_bad_lines="skip"en la carga.
Estos valores controlan costo/tiempo sin tocar el código:
-
Provider
NLP_PROVIDER=auto|aws|localAWS_REGION(default:us-east-1)
-
Tamaño de ejecución
MAX_DOCS(default:5000) — documentos a procesarCSV_NROWS(default:100000) — filas máximas a leer del CSVRAW_TEXT_MAX_CHARS(default:1000) — truncado por documento
-
TF‑IDF
TFIDF_MAX_FEATURES(default:5000) — vocabulario máximo
-
NER en AWS
AWS_COMPREHEND_BATCH(default:25)AWS_ENTITY_MIN_SCORE(default:0.80)
-
Traducción (opcional)
ENABLE_TRANSLATE(default:0) — 0/1 para activarMAX_TRANSLATE_DOCS(default:200) — documentos a traducirHF_TRANSLATE_MODEL(default:Helsinki-NLP/opus-mt-en-es)HF_HOME(default:.hf_cache)HF_BATCH_SIZE(default:16)HF_MAX_LENGTH(default:128)
Por defecto esta opción viene desactivada.
PowerShell
$env:ENABLE_TRANSLATE="1"
$env:MAX_TRANSLATE_DOCS="200"Mac/Linux
export ENABLE_TRANSLATE=1
export MAX_TRANSLATE_DOCS=200Notebook - Celda 2
ENABLE_TRANSLATE = os.getenv("ENABLE_TRANSLATE", "0") == "1" # Cambia el valor en ("ENABLE_TRANSLATE", "0"), por defecto esta en 0
MAX_TRANSLATE_DOCS = int(os.getenv("MAX_TRANSLATE_DOCS", "200")) # Cambia este valor para controlar la cantidad de documentos a traducir- Si el servicio de AMAZON Translate esta disponible --> usa AWS (puede generar costos).
- Si el servicio de AMAZON Translate no esta disponible --> usa HuggingFace local (consume CPU/RAM).
- En modo local,
conf_pos/conf_negvienen de VADER (compound) y son proxies, no probabilidades como AWS Comprehend. - En modo local,
entity_candidates_localson candidatos heurísticos (regex), no NER real.
- NLTK LookupError (punkt/stopwords): ejecuta las celdas iniciales de descarga NLTK o reinstala
nltk. - CSV ParserError / unexpected end of data: usa
engine="python"+on_bad_lines="skip"o revisa el archivo (a veces está truncado). - AccessDeniedException (Comprehend/Translate): el rol no tiene permisos → usa
NLP_PROVIDER=localo solicita policy IAM. - HuggingFace tarda mucho la primera vez: está descargando el modelo; luego queda cacheado en
.hf_cache/.
├─ nlp_pipeline_aws_local.ipynb
├─ README.md
├─ requirements.txt
└─ data/
└─ AMAZON-REVIEW-DATA-CLASSIFICATION.zip
Este proyecto fue inspirado/estructurado a partir de contenidos de:
- AWS Academy — Machine Learning for Natural Language Processing (curso base).
- AWS Academy Graduate — Machine Learning for Natural Language Processing (Credly): https://www.credly.com/badges/d008f061-908e-48bb-ae79-257d03fe53ce
Servicios y documentación utilizados:
- Amazon Comprehend (NLP managed service en AWS).
- Amazon Translate (traducción neural EN→ES opcional).
Baselines y librerías en modo local:
- NLTK VADER (sentiment baseline).
- scikit-learn TF-IDF (features + key phrases aproximadas).
- HuggingFace / MarianMT (traducción local fallback con Helsinki-NLP/opus-mt-en-es).
