Code icon

The App is Under a Quick Maintenance

We apologize for the inconvenience. Please come back later

Menu iconMenu iconNLP con Transformers: fundamentos y aplicaciones principales
NLP con Transformers: fundamentos y aplicaciones principales

Chapter 1: Introduction to NLP and Its Evolution

1.1 ¿Qué es la PNL?

El procesamiento del lenguaje natural (PNL) representa una intersección revolucionaria entre la comunicación humana y las capacidades computacionales. Esta tecnología impulsa todo, desde asistentes virtuales sofisticados como Siri y Alexa hasta las funciones de texto predictivo que utilizamos a diario. Lo que hace que la PNL sea particularmente fascinante es su capacidad para decodificar los matices del lenguaje humano, desde el contexto y la intención hasta las emociones y los patrones lingüísticos sutiles.

El campo ha sufrido una transformación notable, particularmente con la llegada de las redes neuronales y las arquitecturas de aprendizaje profundo. Los sistemas modernos de PNL ahora pueden procesar millones de documentos de texto en segundos, entender varios idiomas simultáneamente y generar respuestas similares a las humanas. La introducción de modelos transformadores, como BERT y GPT, ha ampliado aún más los límites, ya que ha permitido la comprensión del contexto y la generación de lenguaje natural a escalas sin precedentes.

Este capítulo lo guiará a través de la evolución de la PNL, desde los sistemas basados en reglas hasta los métodos estadísticos y, finalmente, hasta la era actual del aprendizaje profundo. Examinaremos cómo cada avance tecnológico ha contribuido a que las máquinas comprendan mejor la comunicación humana y exploraremos las implicaciones prácticas de estos avances en campos que van desde la atención médica hasta el análisis financiero.

Empecemos por lo básico: ¿Qué es la PNL?

El procesamiento del lenguaje natural (PNL) es un campo de la inteligencia artificial que cierra la brecha entre la comunicación humana y la comprensión de la computadora. En esencia, la PNL abarca un conjunto de algoritmos y modelos computacionales sofisticados que permiten a las máquinas comprender, analizar y generar el lenguaje humano en todas sus formas. Esta tecnología ha evolucionado desde una simple coincidencia de patrones hasta redes neuronales complejas capaces de comprender el contexto, los sentimientos e incluso los matices lingüísticos sutiles.

Para ilustrar esta complejidad, considere cómo la PNL gestiona una solicitud aparentemente simple, como «Necesito indicaciones para llegar a la cafetería más cercana». El sistema debe analizar varios niveles de significado: identificar la ubicación del usuario, entender que «el más cercano» requiere un análisis espacial, reconocer que «cafetería» puede incluir cafeterías y establecimientos similares, y determinar que se trata de una solicitud de navegación que requiere indicaciones. Este proceso implica que varios componentes de la PNL trabajen en armonía, desde el análisis sintáctico y el análisis semántico hasta la comprensión contextual y la generación de respuestas.

1.1.1 Componentes clave de la PNL

Para entender la PNL, es útil dividirla en sus componentes principales, que trabajan en conjunto para crear un sistema integral para procesar el lenguaje humano:

1. Comprensión del lenguaje natural (NLU)

su componente fundamental procesa e interpreta el significado del texto o el discurso. La NLU es el cerebro detrás de la capacidad de una máquina para comprender verdaderamente la comunicación humana. Emplea varias técnicas sofisticadas como:

  • Análisis semántico para comprender los significados y las relaciones de las palabras: esto implica mapear las palabras según sus definiciones, identificar sinónimos y comprender cómo se relacionan las palabras para crear significado. Por ejemplo, reconocer que «vehículo» y «automóvil» son conceptos relacionados.
  • Análisis sintáctico para analizar la estructura de las oraciones: divide las oraciones en sus componentes gramaticales (sustantivos, verbos, adjetivos, etc.) y comprende cómo funcionan juntas. Ayuda a las máquinas a diferenciar frases como «El gato persiguió al ratón» y «El ratón persiguió al gato».
  • Comprensión contextual para comprender el significado situacional: esto va más allá de la interpretación literal para comprender el significado en función del contexto circundante. Por ejemplo, reconocer que «hace frío» podría ser una declaración sobre la temperatura o una solicitud para cerrar una ventana, según la situación.
  • Detección de sentimientos para identificar los matices emocionales: esto implica analizar el contenido emocional del texto, a partir de expresiones obvias como «¡Me encanta esto!» hasta indicadores más sutiles del estado de ánimo, el tono y la actitud en comunicaciones complejas.

2. Generación de lenguaje natural (NLG)

Este componente es responsable de producir texto legible por humanos a partir de datos estructurados o información generada por computadora. Los sistemas de NLG actúan como escritores sofisticados, elaborando textos coherentes y apropiados para el contexto a través de varios procesos clave:

  • Planificación del contenido para determinar qué información transmitir: esto implica seleccionar los puntos de datos relevantes, organizarlos en una secuencia lógica y decidir cómo presentarlos de manera efectiva en función de la audiencia prevista y los objetivos de comunicación
  • Estructuración de oraciones para crear resultados gramaticalmente correctos: este proceso aplica reglas y patrones lingüísticos para construir oraciones bien formadas, teniendo en cuenta factores como la concordancia entre el sujeto y el verbo, el uso adecuado de los artículos y las preposiciones y el uso apropiado del tiempo verbal
  • Respuestas sensibles al contexto que coinciden con el flujo de la conversación: el sistema mantiene la coherencia al rastrear el historial de los diálogos, la intención del usuario y los intercambios anteriores para generar respuestas que parezcan naturales y relevantes para la conversación en curso
  • Síntesis del lenguaje natural que suena similar a la humana: los sistemas avanzados de NLG emplean algoritmos sofisticados para variar la estructura de las oraciones, incorporar las transiciones apropiadas y mantener un tono y un estilo consistentes que reflejen los patrones de comunicación humanos

3. Procesamiento de textos

Este componente constituye la base del análisis lingüístico al desglosar y analizar el texto a través de varios procesos críticos:

  • Tokenización para dividir el texto en unidades manejables: esto implica dividir el texto en palabras, oraciones o subpalabras, lo que permite al sistema procesar el idioma parte por parte. Por ejemplo, la oración «El gato se sentó» se convierte en ["El», «gato», «sat», «."]
  • Etiquetado de partes del discurso para identificar las funciones de las palabras: este proceso etiqueta las palabras según sus funciones gramaticales (sustantivo, verbo, adjetivo, etc.), lo cual es crucial para comprender la estructura y el significado de las oraciones. Por ejemplo, en «El zorro marrón rápido salta», «rápido» y «marrón» se identifican como adjetivos, mientras que «salta» se etiqueta como un verbo
  • Reconocimiento de entidades con nombre para identificar objetos, personas o lugares específicos: este sofisticado proceso detecta y clasifica los elementos clave del texto, como identificar «Apple» como una empresa frente a una fruta o «Washington» como una persona frente a una ubicación, según las pistas contextuales
  • Análisis de dependencias para comprender las relaciones entre palabras: analiza cómo se relacionan las palabras de una oración entre sí, creando una estructura en forma de árbol que muestra las conexiones gramaticales
  • Lematización y derivación para reducir las palabras a sus formas básicas: estas técnicas ayudan a estandarizar las palabras (por ejemplo, «correr» → «ejecutar») para mejorar la precisión del análisis

1.1.2 Aplicaciones de la PNL

La PNL ha revolucionado numerosos campos con sus diversas aplicaciones. He aquí un análisis detallado de sus principales casos de uso:

Análisis de sentimientos

Esta sofisticada aplicación analiza el texto para comprender el contenido emocional en múltiples niveles. Más allá de la clasificación básica positiva/negativa, el análisis de sentimientos moderno emplea el aprendizaje profundo para detectar estados emocionales matizados, actitudes implícitas y patrones lingüísticos complejos.

La tecnología puede identificar el sarcasmo a través de señales contextuales, reconocer los tonos pasivo-agresivos y comprender las expresiones culturales específicas. En el monitoreo de las redes sociales, puede rastrear el sentimiento de marca en tiempo real en diferentes plataformas, idiomas y datos demográficos. En el caso del servicio de atención al cliente, ayuda a priorizar los casos urgentes al detectar los niveles de frustración de los clientes y los posibles riesgos de escalamiento. Las empresas aprovechan esta tecnología para:

  • Supervise el estado de la marca en diferentes segmentos del mercado
  • Identifique las tendencias emergentes de satisfacción del cliente
  • Analice la percepción de la competencia en el mercado
  • Mida el impacto de las campañas de marketing
  • Detecte posibles crisis de relaciones públicas antes de que se agraven

Las implementaciones avanzadas pueden incluso rastrear la evolución del sentimiento a lo largo del tiempo, proporcionando información sobre los cambios en las actitudes de los consumidores y la dinámica del mercado.

Ejemplo

Construyamos un sistema de análisis de sentimientos más sofisticado que pueda gestionar múltiples aspectos del análisis de texto:

importar pandas como pdf
importar nltk
desde nltk.tokenize importar word_tokenize
desde nltk.corpus importar palabras clave
desde nltk.stem importar WordNetLemmatizer
desde textblob importar TextBlob
importar re

clase SentimentAnalyzer:
def __init__ (uno mismo):
self.lemmatizer = WordNetLemmatizer ()
self.stop_words = set (stopwords.words ('inglés'))
    
def clean_text (self, texto):
# Eliminar caracteres especiales y dígitos
text = re.sub (r' [^a-zA-z\ s] ', «, texto)
# Convertir a minúsculas
texto = text.lower ()
devolver texto
    
def process_text (self, texto):
# Limpiar el texto
cleaned_text = self.clean_text (texto)
        
# Tokenizar
tokens = word_tokenize (texto_limpio)
        
# Eliminar palabras clave y lematizar
tokens procesados = [
self.lemmatizer.lemmatize (token)
para token en tokens
si el token no está en self.stop_words
]
        
devolver processed_tokens
    
def analyze_sentiment (yo, texto):
# Obtenga un sentimiento básico
blob = textBlob (texto)
sentiment_score = blob.sentiment.polarity
        
# Determinar la categoría de sentimiento
si sentiment_score > 0:
category = 'Positivo'
elif sentiment_score < 0:
categoría = 'Negativo'
otra cosa:
categoría = 'Neutral'
        
# Procesar texto para un análisis adicional
processed_tokens = self.process_text (texto)
        
devolución {
'original_text': texto,
'processed_tokens': processed_tokens,
'sentiment_score': sentiment_score,
'sentiment_category': categoría,
'subjetividad': blob.sentiment.subjetividad
}

# Ejemplo de uso
analizador = SentimentAnalyzer ()

# Analiza varios ejemplos
ejemplos = [
«¡Este producto es absolutamente increíble! Me encanta todo lo relacionado con él. «,
«El servicio fue terrible y estoy muy decepcionado. «,
«La película estuvo bien, nada especial. «,
]

para texto en ejemplos:
results = analyzer.analyze_sentiment (texto)
print (f»\nAnálisis para: {results ['original_text']}»)
print (f"Tokens procesados: {results ['processed_tokens']}»)
print (f"puntuación de sentimiento: {results ['sentiment_score'] :.2f}»)
print (f"Categoría: {resultados ['sentiment_category']}»)
print (f"Subjetividad: {results ['subjetividad'] :.2f}»)

Desglose del código:

  1. Estructura de clases: La clase SentimentAnalyzer encapsula toda la funcionalidad, lo que hace que el código esté organizado y sea reutilizable.
  2. Limpieza de texto: El método clean_text elimina los caracteres especiales y normaliza el texto a minúsculas.
  3. Procesamiento de textos: El método process_text implementa una canalización completa de PNL que incluye la tokenización, la eliminación de palabras clave y la lematización.
  4. Análisis de sentimientos: El método analyze_sentiment proporciona un análisis exhaustivo que incluye:
    • - Cálculo de la puntuación de sentimiento
    • - Categorización de sentimientos
    • - Medición de la subjetividad
    • - Procesamiento de fichas

Ejemplo de salida:

Análisis de: ¡Este producto es absolutamente increíble! Me encanta todo lo relacionado con él.
Fichas procesadas: ['producto', 'absolutamente', 'increíble', 'amor', 'todo']
Puntuación de sentimiento: 0.85
Categoría: Positivo
Subjetividad: 0.75

Análisis de: El servicio fue pésimo y estoy muy decepcionado.
Tokens procesados: ['servicio', 'terrible', 'decepcionado']
Puntuación de sentimiento: -0.65
Categoría: Negativo
Subjetividad: 0.90

Análisis para: La película estuvo bien, nada especial.
Fichas procesadas: ['película', 'vale', 'nada', 'especial']
Puntuación de sentimiento: 0.10
Categoría: Positivo
Subjetividad: 0.30

Este ejemplo completo demuestra cómo construir un sistema sólido de análisis de sentimientos que no solo determine el sentimiento básico, sino que también proporcione un análisis detallado del contenido emocional y la subjetividad del texto.

Traducción automática

Los modernos servicios de traducción basados en la PNL han revolucionado la forma en que superamos las barreras lingüísticas. Estos sistemas emplean redes neuronales sofisticadas para comprender el profundo significado semántico del texto, yendo mucho más allá de la simple sustitución de palabras. Analizan la estructura de las oraciones, el contexto y las referencias culturales para producir traducciones que resulten naturales para los hablantes nativos.

Las capacidades clave incluyen:

  • Comprensión contextual para eliminar la ambigüedad de palabras con múltiples significados
  • Preservación de expresiones idiomáticas mediante la búsqueda de equivalentes apropiados
  • Adaptación de las referencias culturales para mantener el significado en las diferentes sociedades
  • Combinación de estilos para mantener el tono formal/informal, el lenguaje técnico o la escritura creativa
  • Procesamiento en tiempo real de múltiples combinaciones de idiomas simultáneamente

Por ejemplo, al traducir entre idiomas con diferentes estructuras gramaticales, como el inglés y el japonés, estos sistemas pueden reestructurar las oraciones por completo y, al mismo tiempo, preservar el significado y los matices originales. Este avance tecnológico ha permitido todo, desde la comunicación empresarial en tiempo real hasta la traducción precisa de obras literarias, haciendo que la interacción global sea más fluida que nunca.

Ejemplo: traducción automática neuronal

Esta es una implementación de un sistema básico de traducción automática neuronal que utiliza PyTorch y la arquitectura de transformadores:

antorcha de importación
importar torch.nn como nn
importar torch.optim como optim
desde torch.utils.data importar conjunto de datos, DataLoader
de transformers import MarianMTModel, MarianTokenizer

clase TranslationDataset (Dataset):
def __init__ (self, source_texts, target_texts, tokenizer, max_length=128):
self.source_texts = source_texts
self.target_texts = target_texts
self.tokenizer = tokenizador
self.max_length = max_length

def __len__ (uno mismo):
devuelve len (self.source_texts)

def __getitem__ (self, idx):
fuente = self.source_texts [idx]
objetivo = self.target_texts [idx]

# Tokenizar los textos
source_tokens = self.tokenizer (
fuente,
max_length=self.max_length,
padding="longitud_máxima»,
truncamiento = verdadero,
return_tensors="pt»
)
        
target_tokens = autotokenizer (
objetivo,
max_length=self.max_length,
padding="longitud_máxima»,
truncamiento = verdadero,
return_tensors="pt»
)

devolución {
«input_ids»: source_tokens ["input_ids"] .squeeze (),
«máscara de atención»: source_tokens ["máscara de atención"] .squeeze (),
«etiquetas»: target_tokens ["input_ids"] .squeeze ()
}

traductor de clase:
def __init__ (self, source_lang="en», target_lang="fr»):
self.model_name = «Helsinki-NLP/Opus-MT- {source_lang} - {target_lang}»
self.tokenizer = MarianTokenizer.from_pretrained (self.model_name)
self.model = marianMTModel.from_pretrained (self.model_name)
self.device = torch.device («cuda» si torch.cuda.is_available () sino «cpu»)
self.model.to (dispositivo propio)

def translate (self, texts, batch_size=8, max_length=128):
automodel.eval ()
traducciones = []

para i en range (0), len (texts), batch_size):
batch_texts = textos [i:i + batch_size]
            
# Tokenizar
entradas = self.tokenizer (
textos por lotes,
return_tensors="pt»,
padding=true,
truncamiento = verdadero,
longitud_máxida=longitud_máxima
) .to (dispositivo propio)

# Generar traducciones
con torch.no_grad ():
traducido = self.model.generate (
**entradas,
longitud_máxida=longitud_máxima,
num_beams=4,
longitud_penalización=0.6,
early_stopping=Verdadero
)

# Decodifica los tokens generados
decodificado = self.tokenizer.batch_decode (traducido, SKIP_SPECIAL_TOKENS=true)
translations.extend (decodificado)

devolver traducciones

# Ejemplo de uso
si __name__ == «__main__»:
# Inicializar el traductor (inglés a francés)
traductor = Traductor (source_lang="en», target_lang="fr»)

# Oraciones de ejemplo
textos_ingleses = [
«Hola, ¿cómo estás?» ,
«El aprendizaje automático es fascinante. «,
«Hoy hace buen tiempo».
]

# Realizar la traducción
french_translations = traductor.translate (textos_ingleses)

# Imprimir resultados
para en, fr en zip (english_texts, french_translations):
print (f"inglés: {en}»)
print («francés: {fr}»)
imprimir ()

Desglose del código:

  1. Clase TranslationDataset:
    • Se encarga de la preparación de datos para la formación
    • Implementa la funcionalidad de conjuntos de datos personalizados para PyTorch
    • Gestiona la tokenización de los textos de origen y destino
  2. Clase de traductor:
    • Inicializa el modelo MarianMT previamente entrenado
    • Maneja la administración de dispositivos (CPU/GPU)
    • Implementa el proceso de traducción
  3. Proceso de traducción:
    • Lotes de entrada de textos para un procesamiento eficiente
    • Aplica la búsqueda por haces para mejorar la calidad de la traducción
    • Gestiona la tokenización y destokenización automáticamente

Características principales:

  • Utiliza el modelo MarianMT de última generación
  • Soporta el procesamiento por lotes para una mayor eficiencia
  • Implementa la búsqueda de haces para una mejor calidad de traducción
  • Maneja varias oraciones simultáneamente
  • Gestiona automáticamente la memoria y los recursos computacionales

Ejemplo de salida:

Inglés: Hola, ¿cómo estás?
Francés: Bonjour, comment allez-vous?

Inglés: El aprendizaje automático es fascinante.
Francés: L'apprentissage automatique est fascinant.

Inglés: Hoy hace buen tiempo.
Francés: Le temps est magnifique aujourd'hui.

Esta implementación demuestra cómo los sistemas modernos de PNL pueden realizar traducciones complejas y, al mismo tiempo, mantener la estructura gramatical y el significado en todos los idiomas.

Resumen del texto

Los sistemas modernos de resumen de textos utilizan técnicas sofisticadas de PNL para convertir documentos de gran tamaño en resúmenes concisos y significativos. Estas herramientas emplean tanto métodos extractivos, que seleccionan frases clave del texto original, como métodos abstractivos, que generan nuevas oraciones que capturan los conceptos básicos. La tecnología se destaca en:

  • Identificación de temas centrales y argumentos clave en varios documentos
  • Preservar el flujo lógico y las relaciones entre las ideas
  • Generación de resúmenes de diferentes longitudes en función de las necesidades de los usuarios
  • Mantener la precisión de los hechos mientras se condensa la información
  • Comprender la estructura del documento y la importancia de las secciones

Estas capacidades hacen que el resumen de textos sea invaluable en múltiples sectores. Los investigadores lo utilizan para asimilar rápidamente los trabajos académicos e identificar los estudios pertinentes. Los periodistas lo emplean para monitorear las fuentes de noticias y detectar historias emergentes. Los analistas de negocios lo aprovechan para procesar informes de mercado e información sobre la competencia. Los profesionales legales lo utilizan para analizar la jurisprudencia y los documentos contractuales de manera eficiente.

Ejemplo: Sistema de resumen de textos

Esta es una implementación de un sistema de resumen de texto extractivo que utiliza técnicas modernas de PNL:

importar numpy como np
desde nltk.tokenize importar sent_tokenize, word_tokenize
desde nltk.corpus importar palabras clave
desde nltk.stem importar WordNetLemmatizer
desde sklearn.feature_extraction.text importar TFIDFVectorizer
importar redes como nx

clase TextSummarizer:
def __init__ (uno mismo):
self.stop_words = set (stopwords.words ('inglés'))
self.lemmatizer = WordNetLemmatizer ()
        
def preprocess_text (self, text):
# Tokenizar en oraciones
oraciones = sent_tokenize (texto)
        
# Limpiar y preprocesar cada oración
sentencias_limpias = []
para frase en frases:
# Tokenizar palabras
words = word_tokenize (sentence.lower ())
# Eliminar palabras clave y lematizar
palabras = [
self.lemmatizer.lemmatize (palabra)
para palabras en palabras
si word.isalnum () y la palabra no está en self.stop_words
]
cleaned_sentences.append (''.join (palabras))
            
devolver frases, cleaned_sentences
    
def create_similarity_matrix (self, oraciones):
# Crear vectores TF-IDF
vectorizador = tfidfVectorizador ()
tfidf_matrix = vectorizer.fit_transform (frases)
        
# Calcular la matriz de similitud
similarity_matrix = (tfidf_matrix * TFIDF_matrix.t) .toarray ()
devuelve similarity_matrix
    
def summary (self, text, num_sentences=3):
# Obtenga oraciones originales y preprocesadas
original_sentencias_, cleaned_sentences = self.preprocess_text (texto)
        
si len (original_sentences) <= num_sentences:
devuelve ''.join (original_sentences)
        
# Crear matriz de similitud
similarity_matrix = self.create_similarity_matrix (oraciones limpias)
        
# Crea un gráfico y calcula las puntuaciones
nx_graph = nx.from_numpy_array (matriz_similitud)
puntuaciones = nx.PageRank (nx_graph)
        
# Obtén las mejores frases
sentencias_clasificadas = [
(puntuación, frase)
para la oración, puntúa en zip (original_sentences, scores)
]
ranked_sentences.sort (reverse=true)
        
# Seleccione las frases principales manteniendo el orden original
índice_seleccionados = [
original_sentences.index (oración)
para _, oración en oraciones clasificadas [:num_sentences]
]
selected_indices.sort ()
        
summary = ''.join ([original_sentences [i] para i en selected_indices])
resumen de devolución

# Ejemplo de uso
si __name__ == «__main__»:
texto = «"»
El procesamiento del lenguaje natural (PNL) es una rama de la inteligencia artificial
que ayuda a las computadoras a entender el lenguaje humano. Combina lo computacional
lingüística, aprendizaje automático y modelos de aprendizaje profundo. aplicaciones de PNL
incluyen la traducción automática, el análisis de opiniones y el resumen de textos.
Los sistemas modernos de PNL pueden procesar varios idiomas y comprender el contexto.
El campo continúa evolucionando con nuevos modelos de transformadores y neuronales
arquitecturas.
«»
    
sumarizador = textSummarizer ()
resumen = summarizer.summarize (texto, num_sentences=2)
print («Longitud del texto original:», len (texto))
print («Longitud del resumen:», len (resumen))
print (»\nResumen:»)
imprimir (resumen)

Desglose del código:

  1. Estructura de clases: La clase TextSummarizer encapsula toda la funcionalidad de resumen con una separación clara de las preocupaciones.
  2. Preprocesamiento: El método preprocess_text implementa los pasos esenciales de la PNL:
    • Tokenización de oraciones para dividir texto en oraciones
    • Tokenización de palabras para dividir oraciones en palabras
    • Eliminación de palabras clave y lematización para la normalización del texto
  3. Análisis de similitud: El método create_similarity_matrix:
    • Crea vectores TF-IDF para cada oración
    • Calcula la similitud de oraciones mediante operaciones vectoriales
  4. Algoritmo de resumen: El método de resumen:
    • Utiliza el algoritmo PageRank para puntuar la importancia de las oraciones
    • Mantiene el orden original de las oraciones en el resumen
    • Permite personalizar la longitud del resumen

Ejemplo de salida:

Longitud del texto original: 297
Duración del resumen: 128

Resumen: El procesamiento del lenguaje natural (PNL) es una rama de la inteligencia artificial
que ayuda a las computadoras a entender el lenguaje humano. Las aplicaciones de PNL incluyen máquinas
traducción, análisis de opiniones y resumen de textos.

Esta implementación demuestra cómo las técnicas modernas de PNL pueden identificar y extraer de manera efectiva las oraciones más importantes de un texto, manteniendo la legibilidad y la coherencia.

Chatbots y asistentes virtuales

Los agentes conversacionales modernos impulsados por la inteligencia artificial han revolucionado la interacción hombre-computadora a través de una comprensión sofisticada del lenguaje natural. Estos sistemas aprovechan las técnicas avanzadas de PNL para:

  • Procese y comprenda patrones lingüísticos complejos, incluidos modismos, significados dependientes del contexto y referencias culturales
  • Mantenga el historial de conversaciones para ofrecer respuestas coherentes en varios turnos de diálogo
  • Analice los sentimientos y las señales emocionales en los comentarios de los usuarios para generar respuestas emocionales apropiadas
  • Aprenda de las interacciones para mejorar continuamente la calidad de la respuesta

Las aplicaciones del mundo real se han expandido significativamente:

  • Atención médica: realizar una evaluación preliminar de los síntomas, programar citas y proporcionar recordatorios de medicamentos
  • Educación: ofrecer experiencias de aprendizaje personalizadas, responder a las consultas de los estudiantes y adaptar el ritmo de enseñanza en función de la comprensión
  • Servicio al cliente: gestión de consultas en varios canales, resolución de problemas comunes y traslado sin problemas de casos complejos a agentes humanos
  • Apoyo de salud mental: brindar asesoramiento inicial accesible y apoyo emocional a través de una conversación empática

Ejemplo: creación de un chatbot sencillo

Esta es una implementación de un chatbot básico que utiliza técnicas modernas de PNL y coincidencia de patrones:

de transformers import AutoModelForCausalLM, AutoTokenizer
antorcha de importación
importar re
importar al azar

clase SimpleBot:
def __init__ (uno mismo):
# Inicializar respuestas predefinidas
respuestas propias = {
'saludo': ['¡Hola!' , '¡Hola!' , '¡Saludos!'] ,
'adiós': ['¡Adiós!' , '¡Nos vemos más tarde!' , '¡Cuídate!'] ,
'gracias': ["¡De nada!» , '¡No hay problema!' , '¡Me alegro de haber podido ayudar!'] ,
'unknown': ["No estoy seguro de eso. «, «¿Podrías reformular eso?» ,
«No entiendo».]
}
        
# Cargue el modelo y el tokenizador previamente entrenados
self.model_name = «Microsoft/DialogPT-Small»
self.tokenizer = autotokenizer.from_pretrained (self.model_name)
self.model = autoModelForCausalLm.from_pretrained (self.model_name)
        
# Inicializar el historial de conversaciones
auto.conversation_history = []
        
def preprocess_input (self, text):
# Convertir a minúsculas y eliminar caracteres especiales
texto = text.lower ()
text = re.sub (r' [^\ w\ s] ', «, texto)
devolver texto
        
def pattern_match (self, texto):
# Coincidencia básica de patrones para frases comunes
si lo hay (palabra en el texto por palabra en ['hola', 'hola', 'hola']):
devuelve random.choice (self.responses ['saludo'])
elif any (palabra en el texto por palabra en ['adiós', 'adiós', 'cya']):
devuelve random.choice (self.responses ['adiós'])
elif any (palabra en el texto por palabra en ['gracias', 'gracias']):
return random.choice (self.responses ['gracias'])
devolver Ninguno
        
def generate_response (self, text):
# Codificar el texto de entrada
inputs = self.tokenizer.encode (text + self.tokenizer.eos_token,
return_tensors='pt')
        
# Generar una respuesta usando el modelo
response_ids = self.model.generate (
entradas,
longitud_máximo=1000,
pad_token_id=self.tokenizer.eos_token_id,
no_repeat_ngram_size=3,
do_sample = verdadero,
top_k=100,
top_p=0.7,
temperatura=0.8
)
        
# Decodificar la respuesta
response = self.tokenizer.decode (response_ids [:, inputs.shape [-1]:] [0],
SKIP_SPECIAL_TOKENS=verdadero)
respuesta de devolución
        
chat de definición (self, user_input):
# Entrada de preprocesamiento
entrada procesada = self.preprocess_input (entrada de usuario)
        
# Pruebe primero la coincidencia de patrones
respuesta = self.pattern_match (processed_input)
        
si no es respuesta:
prueba:
# Generar una respuesta usando el modelo
respuesta = self.generate_response (user_input)
excepto la excepción como e:
respuesta = random.choice (self.responses ['desconocido'])
        
# Actualizar el historial de conversaciones
self.conversation_history.append (user_input, response)
respuesta de devolución

# Ejemplo de uso
si __name__ == «__main__»:
bot = SimpleBot ()
print («Bot: ¡Hola! ¿En qué puedo ayudarte hoy? (escriba 'quit' para salir)»)
    
si bien es cierto:
user_input = input («Tú: «)
si user_input.lower () == 'salir':
print («Bot: ¡Adiós!»)
romper
            
respuesta = bot.chat (user_input)
print («fBot: {respuesta}»)

Desglose del código:

  1. Estructura de clases:
    • Implementa una clase SimpleBot con la inicialización de plantillas de modelo y respuesta previamente entrenadas
    • Mantiene el historial de conversaciones para conocer el contexto
    • Utiliza enfoques neuronales y basados en reglas para la generación de respuestas
  2. Procesamiento de entrada:
    • Preprocesa la entrada del usuario mediante la normalización del texto
    • Implementa la coincidencia de patrones para frases comunes
    • Maneja con elegancia los casos extremos y las excepciones
  3. Generación de respuestas:
    • Utiliza el modelo DialogPT para generar respuestas contextuales
    • Implementa el muestreo de temperatura y top-k/top-p para lograr una diversidad de respuestas
    • Incluye respuestas alternativas para gestionar entradas inesperadas

Características principales:

  • Enfoque híbrido que combina la generación de respuestas neuronales y basadas en reglas
  • Comprensión contextual a través del historial de conversaciones
  • Parámetros de respuesta configurables para controlar la calidad de salida
  • Gestión de errores y degradación correcta

Ejemplo de interacción:

Bot: ¡Hola! ¿Cómo puedo ayudarte hoy? (escriba «dejar» para salir)
Tú: ¡Hola!
Bot: ¡Hola! ¿Cómo te va hoy?
Tú: Estoy muy bien, ¡gracias por preguntar!
Bot: ¡Es maravilloso escuchar eso! ¿Hay algo específico sobre lo que te gustaría charlar?
Tú: ¿Puedes hablarme sobre el aprendizaje automático?
Bot: El aprendizaje automático es un campo fascinante de la IA que permite a las computadoras aprender de los datos...
Tú: dejar
Bot: ¡Adiós!

Esta implementación demuestra cómo los chatbots modernos combinan sistemas basados en reglas con modelos de lenguaje neuronal para crear conversaciones más naturales y atractivas.

Generación de contenido

Los sistemas de PNL ahora pueden crear contenido similar al humano, desde textos de marketing hasta documentación técnica, adaptando el tono y el estilo a audiencias específicas y manteniendo la precisión y la relevancia. Estos sistemas aprovechan los modelos lingüísticos avanzados para:

  • Genere contenido apropiado para el contexto mediante la comprensión de la terminología específica de la industria y las convenciones de redacción
  • Adapte el estilo de escritura en función de la demografía del público objetivo, desde publicaciones de blog informales hasta trabajos académicos formales
  • Crea variaciones de contenido para diferentes plataformas conservando el mensaje central
  • Ayude en las tareas de escritura creativa sugiriendo desarrollos de la trama, descripciones de personajes y diálogos
  • Genere automáticamente informes, resúmenes y documentación a partir de datos estructurados

Ejemplo: generación de contenido con GPT

Esta es una implementación de un generador de contenido que puede crear diferentes tipos de contenido con estilos y tonos específicos:

desde openai importar OpenAI
sistema operativo de importación

clase ContentGenerator:
def __init__ (uno mismo):
# Inicializar el cliente OpenAI
self.client = OpenAI (api_key=os.getenv ('OPENAI_API_KEY'))
        
# Definir estilos de contenido
estilos propios = {
'formal': «En tono profesional y académico, «,
'casual': «De forma amistosa y conversacional, «,
«técnico»: «Uso de terminología técnica, «,
«creativo»: «Con un estilo creativo y atractivo»
}
        
def generate_content (self, prompt, style=' formal ', max_length=500,
temperatura = 0.7):
prueba:
# Aplicar estilo al mensaje
styled_prompt = self.styles.get (style, «») + prompt
            
# Generar contenido usando GPT-4
respuesta = self.client.chat.completions.create (
modelo = «gpt-4",
mensajes = [
{"role»: «system», «content»: «Eres un redactor de contenido profesional. «},
{"rol»: «usuario», «contenido»: styled_prompt}
],
max_tokens=longitud_máxima,
temperatura=temperatura,
top_p=0.95,
frecuencia_penalización = 0.5,
penalización de presencia=0.5
)
            
# Extraer y limpiar el texto generado
texto_generado = response.choices [0] .message.content
devuelve self.clean_text (texto_generado)
            
excepto la excepción como e:
return f"Error al generar contenido: {str (e)}»
    
def clean_text (self, texto):
# Elimine la línea de estilo si está presente
para style_prompt en self.styles.values ():
si text.comienza con (style_prompt):
texto = texto [len (style_prompt):]
devolver text.strip ()
    
def generate_article (self, topic, style=' formal ', sections=3):
«" "Generar un artículo estructurado con múltiples secciones "»
artículo = []
        
# Generar introducción
intro_prompt = f"Escribe una introducción sobre {topic}»
article.append (self.generate_content (intro_prompt, style, 200))
        
# Generar secciones principales
para i en el rango (secciones):
section_prompt = f"Escribe la sección {i+1} sobre {topic}»
article.append (self.generate_content (section_prompt, style, 300))
        
# Generar conclusión
conclusion_prompt = f"Escribe una conclusión sobre {tema}»
article.append (self.generate_content (conclusion_prompt, style, 200))
        
devolución "\n\n«.join (artículo)

# Ejemplo de uso
si __name__ == «__main__»:
# Asegúrese de haber establecido su clave de API de OpenAI en las variables de entorno
si no es os.getenv ('OPENAI_API_KEY'):
print («Por favor, defina su variable de entorno OPENAI_API_KEY»)
salida (1)
        
generador = ContentGenerator ()
    
# Generar una entrada de blog
tema = «El impacto de la inteligencia artificial en la atención médica»
print («Generando artículo...»)
artículo = generator.generate_article (
tema,
style='técnico',
secciones=3
)
print (»\nArtículo generado:»)
imprimir (artículo)

Analicemos esta implementación de la clase ContentGenerator:

1. Inicialización y estructura de la clase

  • La clase usa la API OpenAI para la generación de contenido
  • Define diferentes estilos de contenido (formal, casual, técnico, creativo) con las correspondientes instrucciones de tono

2. Métodos principales

La clase tiene tres métodos principales:

  • generar_contenido ():
    • Toma una indicación, un estilo y parámetros para la generación de contenido
    • Usa GPT-4 para generar contenido con parámetros específicos
    • Incluye manejo de errores y limpieza de texto
  • texto_limpio ():
    • Elimina las solicitudes de estilo del texto generado
    • Devuelve texto limpio y eliminado
  • generate_article ():
    • Crea un artículo estructurado con introducción, secciones principales y conclusión
    • Permite la personalización del estilo y el número de secciones
    • Combina varias generaciones de contenido en una sola pieza cohesiva

3. Características clave

  • Control de temperatura (0.7) para equilibrar la creatividad
  • Sanciones de frecuencia y presencia para reducir la repetición
  • Uso de variables de entorno para la seguridad de las claves de API
  • Gestión estructurada de errores durante todo el proceso de generación

4. Ejemplo de uso

El código incluye un ejemplo práctico que:

  • Comprueba la configuración correcta de la clave de API
  • Genera un artículo técnico sobre la IA en el cuidado de la salud
  • Crea una pieza estructurada con múltiples secciones

Este es un ejemplo de salida de lo que podría producir el código ContentGenerator:

Artículo generado: El impacto de la inteligencia artificial en la atención médica

La integración de la Inteligencia Artificial (IA) en la atención médica representa una transformación revolucionaria en la práctica médica y la atención al paciente. Los avances recientes en los algoritmos de aprendizaje automático y el análisis de datos han permitido a los proveedores de atención médica aprovechar las tecnologías de inteligencia artificial para mejorar el diagnóstico, la planificación del tratamiento y los resultados de los pacientes. Esta evolución tecnológica promete mejorar la prestación de servicios de salud y, al mismo tiempo, reducir los costos y mejorar la accesibilidad.

El impacto principal de la IA en la atención médica es evidente en la precisión y la eficiencia del diagnóstico. Los algoritmos de aprendizaje automático pueden analizar los datos de imágenes médicas con una precisión extraordinaria, lo que ayuda a los radiólogos a detectar anomalías en las radiografías, las resonancias magnéticas y las tomografías computarizadas. Estos sistemas de inteligencia artificial pueden procesar grandes cantidades de datos de imágenes en segundos, destacando posibles áreas de preocupación y proporcionando puntuaciones de probabilidad para diversas afecciones. Esta capacidad no solo acelera el proceso de diagnóstico, sino que también reduce la probabilidad de errores humanos.

La atención y el monitoreo de los pacientes se han revolucionado a través de sistemas impulsados por inteligencia artificial. Los dispositivos inteligentes y las tecnologías portátiles equipados con algoritmos de inteligencia artificial pueden monitorear continuamente los signos vitales, predecir posibles complicaciones de salud y alertar a los proveedores de atención médica sobre situaciones de emergencia antes de que se vuelvan críticas. Este enfoque proactivo de la atención de los pacientes ha demostrado ser muy prometedor a la hora de reducir las tasas de readmisión hospitalaria y mejorar los resultados de los pacientes, especialmente en el caso de los pacientes con enfermedades crónicas.

En conclusión, la integración de la IA en los sistemas de salud representa un cambio de paradigma en la práctica médica. Si bien siguen existiendo desafíos en relación con la privacidad de los datos, el cumplimiento normativo y las consideraciones éticas, los beneficios potenciales de la IA en la atención médica son innegables. A medida que la tecnología siga evolucionando, podemos esperar que la IA desempeñe un papel cada vez más importante en la configuración del futuro de la prestación de servicios de salud y la atención a los pacientes.

Este ejemplo demuestra cómo el código de ejemplo genera un artículo estructurado con una introducción, tres secciones principales y una conclusión, utilizando un estilo técnico tal como se especifica en los parámetros.

Extracción de información

Las técnicas avanzadas de PNL son excelentes para extraer automáticamente datos estructurados de fuentes de texto no estructuradas. Esta capacidad transforma el texto sin procesar en información organizada y procesable a través de varios procesos sofisticados:

El reconocimiento de entidades nombradas (NER) identifica y clasifica los elementos clave, como los nombres, las organizaciones y las ubicaciones. Los algoritmos de coincidencia de patrones detectan estructuras de texto específicas, como fechas, números de teléfono y direcciones. La extracción de relaciones mapea las conexiones entre las entidades identificadas, mientras que la extracción de eventos captura las secuencias temporales y la causalidad.

Estas capacidades hacen que la extracción de información sea esencial para:

  • Síntesis automatizada de la investigación, donde puede procesar miles de trabajos académicos para extraer hallazgos clave
  • Análisis de documentos legales, lo que permite una revisión rápida de los contratos y la jurisprudencia
  • Procesamiento de registros médicos, extracción del historial del paciente, los diagnósticos y los planes de tratamiento de las notas clínicas
  • Inteligencia empresarial, recopilación de información competitiva a partir de artículos e informes de noticias

Este es un ejemplo completo de extracción de información con SPACy:

import pandas as pd
import nltk
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
from nltk.stem import WordNetLemmatizer
from textblob import TextBlob
import re

class SentimentAnalyzer:
    def __init__(self):
        self.lemmatizer = WordNetLemmatizer()
        self.stop_words = set(stopwords.words('english'))
    
    def clean_text(self, text):
        # Remove special characters and digits
        text = re.sub(r'[^a-zA-Z\s]', '', text)
        # Convert to lowercase
        text = text.lower()
        return text
    
    def process_text(self, text):
        # Clean the text
        cleaned_text = self.clean_text(text)
        
        # Tokenize
        tokens = word_tokenize(cleaned_text)
        
        # Remove stopwords and lemmatize
        processed_tokens = [
            self.lemmatizer.lemmatize(token)
            for token in tokens
            if token not in self.stop_words
        ]
        
        return processed_tokens
    
    def analyze_sentiment(self, text):
        # Get base sentiment
        blob = TextBlob(text)
        sentiment_score = blob.sentiment.polarity
        
        # Determine sentiment category
        if sentiment_score > 0:
            category = 'Positive'
        elif sentiment_score < 0:
            category = 'Negative'
        else:
            category = 'Neutral'
        
        # Process text for additional analysis
        processed_tokens = self.process_text(text)
        
        return {
            'original_text': text,
            'processed_tokens': processed_tokens,
            'sentiment_score': sentiment_score,
            'sentiment_category': category,
            'subjectivity': blob.sentiment.subjectivity
        }

# Example usage
analyzer = SentimentAnalyzer()

# Analyze multiple examples
examples = [
    "This product is absolutely amazing! I love everything about it.",
    "The service was terrible and I'm very disappointed.",
    "The movie was okay, nothing special.",
]

for text in examples:
    results = analyzer.analyze_sentiment(text)
    print(f"\nAnalysis for: {results['original_text']}")
    print(f"Processed tokens: {results['processed_tokens']}")
    print(f"Sentiment score: {results['sentiment_score']:.2f}")
    print(f"Category: {results['sentiment_category']}")
    print(f"Subjectivity: {results['subjectivity']:.2f}")

Analicemos esta clase InformationExtractor que usa SpAcy para el procesamiento del lenguaje natural:

1. Configuración de clases y dependencias

  • Utiliza SpAcy para el procesamiento de PNL y pandas para el manejo de datos
  • Se inicializa con el modelo de idioma inglés de SPACy (en_core_web_sm)

2. Métodos principales

La clase contiene tres métodos de extracción de claves:

  • extract_entities ():
    • Identifica las entidades nombradas en el texto
    • Devuelve una lista de diccionarios con texto de entidad, etiqueta y posición
    • Captura elementos como organizaciones, personas y ubicaciones
  • extraer relaciones ():
    • Encuentra conexiones entre sujetos y objetos
    • Utiliza el análisis de dependencias para identificar las relaciones
    • Devuelve las relaciones sujeto-verbo-objeto
  • extraer frases clave ():
    • Extrae frases nominales importantes
    • Utiliza el análisis de dependencias para identificar frases importantes
    • Se centra en sujetos, objetos y objetos preposicionales

3. Ejemplo de uso

El código muestra una aplicación práctica con un texto de ejemplo sobre Apple Inc. y muestra tres tipos de resultados:

  • Entidades: identifica empresas (Apple Inc., Microsoft, Google), personas (Tim Cook), ubicaciones (Cupertino, California) y fechas
  • Relaciones: extrae conexiones sujeto-verbo-objeto, como «Cook anunció el lanzamiento»
  • Frases clave: extrae frases nominales importantes del texto

4. Características clave

  • Utiliza modelos previamente entrenados para un reconocimiento preciso de las entidades
  • Implementa el análisis de dependencias para la extracción de relaciones
  • Puede manejar estructuras de oraciones complejas
  • Genera datos estructurados adecuados para un análisis posterior

Ejemplo de salida:

# Entidades extraídas:
# etiqueta de texto inicio y fin
N.º 0 Apple Inc. ORG 1 10
#1 Tim Cook PERSONA 15 23
#2 Cupertino GPE 47 56
#3 California GPE 58 68
# 4 12 de septiembre FECHA 72 84
# 5 2024 FECHA 86 90
N.º 6 Microsoft ORG 146 154
Nº 7 Google ORG 159 165

# Relaciones extraídas:
# sujeto-verbo-objeto
Lanzamiento anunciado por Cook #0
El evento número uno mostrará

# Frases clave:
# [«CEO de Apple Inc.», «lanzamiento de un nuevo iPhone», «funciones revolucionarias de IA»,
# 'eventos similares']

Características principales:

  • Utiliza los modelos previamente entrenados de SPACy para un reconocimiento preciso de las entidades
  • Implementa el análisis de dependencias para la extracción de relaciones
  • Maneja estructuras de oraciones complejas y múltiples tipos de entidades
  • Devuelve datos estructurados adecuados para un análisis posterior

Solicitudes:

  • Análisis automatizado de documentos en contextos legales y empresariales
  • Monitorización de noticias y redes sociales
  • Análisis de trabajos de investigación y extracción de conocimientos
  • Comentarios de los clientes y análisis de reseñas

1.1.3 Un flujo de trabajo de PNL simple

Para ver la PNL en acción, consideremos un ejemplo sencillo: analizar el sentimiento de una oración.

Sentencia: «Me encanta este libro; ¡es realmente inspirador!»

Flujo de trabajo:

  1. Tokenización: Dividir la oración en palabras o símbolos individuales:desde nltk.tokenize importar word_tokenize, sent_tokenize
    desde nltk.corpus importar palabras clave
    desde nltk import pos_tag
    importar cadena

    def analyze_text (texto):
    # Tokenización de oraciones
    oraciones = sent_tokenize (texto)
    imprimir (»\n1. Tokenización de oraciones:»)
    imprimir (frases)
        
    # Tokenización de palabras
    tokens = word_tokenize (texto)
    imprimir (»\n2. Tokenización de palabras:»)
    imprimir (fichas)
        
    # Eliminar la puntuación
    tokens_no_punct = [token por símbolo en los tokens si el token no está en la cadena.puntuación]
    imprimir (»\n3. Tras eliminar la puntuación:»)
    imprimir (tokens_no_punct)
        
    # Convertir a minúsculas y eliminar palabras clave
    stop_words = set (stopwords.words ('inglés'))
    clean_tokens = [token.lower () para el token en tokens_no_punct
    si token.lower () no está en stop_words]
    imprimir (»\n4. Tras eliminar Stopword:»)
    imprimir (clean_tokens)
        
    # Etiquetado de partes de la voz
    pos_tags = pos_tag (fichas)
    imprimir (»\n5. Etiquetas de partes del discurso:»)
    imprimir (pos_tags)

    # Ejemplo de uso
    text = «Me encanta este libro; ¡es realmente inspirador! El autor escribe muy bien».
    analyze_text (texto)

    # Salida:
    #1. Tokenización de oraciones:
    # ['Me encanta este libro; es realmente inspirador! ' , 'El autor escribe maravillosamente. ']

    #2. Tokenización de palabras:
    # ['Yo', 'amor', 'esto', 'libro', ';', 'eso', «',' s ',' verdaderamente ',' inspirador ','! ' ,
    # 'El', 'autor', 'escribe', 'bellamente', '.']

    Nº 3. Tras eliminar la puntuación:
    # ['Yo', 'amor', 'esto', 'libro', 'eso', 's', 'verdaderamente', 'inspirador',
    # 'El', 'autor', 'escribe', 'hermosamente']

    Nº 4. Tras eliminar Stopword:
    # ['amor', 'libro', 'verdaderamente', 'inspirador', 'autor', 'escribe', 'bellamente']

    Nº 5. Etiquetas de partes del discurso:
    # [('Yo', 'PRP'), ('amor', 'VBP'), ('esto', 'DT'), ('libro', 'NN'),...]
    Desglose del código:
    1. Importaciones:
      • word_tokenize, sent_tokenize: para dividir el texto en palabras y oraciones
      • palabras clave: para eliminar palabras comunes
      • pos_tag: Para etiquetar partes de la oración
      • cadena: para acceder a los signos de puntuación
    2. Función analyze_text:
      • Toma una cadena de texto como entrada
      • Procesa el texto a través de varios pasos de PNL
      • Imprime los resultados en cada etapa
    3. Pasos de procesamiento:
      • Tokenización de oraciones: divide el texto en oraciones individuales
      • Tokenización de palabras: divide las oraciones en palabras/símbolos individuales
      • Eliminación de signos de puntuación: filtra los signos de puntuación
      • Eliminación de palabras intermedias: elimina las palabras comunes y las convierte a minúsculas
      • Etiquetado POS: etiqueta cada palabra con su parte del discurso
    Características principales:
    • Maneja múltiples oraciones
    • Mantiene el orden de procesamiento para un análisis de texto claro
    • Demuestra múltiples capacidades de NLTK
    • Incluye resultados completos en cada paso
  2. Eliminación de palabras clave: Un paso crucial de preprocesamiento que mejora el análisis del texto al eliminar las palabras comunes (palabras estáticas) que tienen un valor semántico mínimo. Estas incluyen artículos (a, an, the), pronombres (I, you, it), preposiciones (in, at, on) y ciertos verbos auxiliares (is, are, was). Al eliminar estas palabras de alta frecuencia pero con poca información, podemos centrarnos en los términos que contienen contenido y que realmente transmiten el significado del mensaje. Este proceso mejora significativamente la eficiencia de las tareas de análisis de texto, como la modelización de temas, la clasificación de documentos y la recuperación de información:desde nltk.corpus importar palabras clave
    desde nltk.tokenize importar word_tokenize
    importar cadena

    def process_text (texto):
    # Paso 1: tokenizar el texto
    tokens = word_tokenize (texto)
    print («Fichas originales:», fichas)
        
    # Paso 2: Convertir a minúsculas
    tokens_lower = [token.lower () para el token en los tokens]
    print (»\nTokens en minúscula:», tokens_lower)
        
    # Paso 3: eliminar la puntuación
    tokens_no_punct = [token por token en tokens_lower
    si el token no está en la cadena.puntuación]
    print (»\nFichas sin puntuación:», tokens_no_punct)
        
    # Paso 4: Eliminar palabras clave
    stop_words = set (stopwords.words ('inglés'))
    filtered_tokens = [token por token en tokens_no_punct
    si el token no está en stop_words]
    print (»\nFichas sin palabras clave:», filtered_tokens)
        
    # Paso 5: Obtenga la distribución de frecuencias
    de colecciones import Counter
    word_freq = Contador (tokens filtrados)
    print (»\nFrecuencias de palabras:», dict (word_freq))
        
    devolver filtered_tokens

    # Ejemplo de uso
    text = «Me encanta este libro inspirador; ¡es realmente increíble!»
    processed_tokens = process_text (texto)

    # Salida:
    # Fichas originales: ['Yo', 'amor', 'esto', 'inspirador', 'libro', ';', 'eso', «es», 'verdaderamente', 'increíble', '!']
    # Fichas en minúscula: ['i', 'amor', 'esto', 'inspirador', 'libro', ';', 'eso', «es», 'verdaderamente', 'increíble', '!']
    # Fichas sin puntuación: [«i», «amor», «esto», «inspirador», «libro», «eso», «s», «verdaderamente», «increíble»]
    # Fichas sin palabras clave: ['amor', 'inspirador', 'libro', 'verdaderamente', 'increíble']
    # Frecuencias de palabras: {'amor': 1, 'inspirador': 1, 'libro': 1, 'verdaderamente': 1, 'increíble': 1}
    Desglose del código:
    1. Importaciones:
      • palabras clave: acceso a palabras clave comunes en inglés
      • word_tokenize: Para dividir texto en palabras
      • cadena: para acceder a los signos de puntuación
    2. Función process_text:
      • Acepta la entrada de texto sin procesar
      • Realiza el procesamiento de texto paso a paso
      • Imprime los resultados en cada etapa para mayor claridad
    3. Pasos de procesamiento:
      • Tokenización: divide el texto en palabras individuales
      • Normalización de mayúsculas y minúsculas: convierte todo el texto a minúsculas
      • Eliminación de signos de puntuación: elimina todos los signos de puntuación
      • Eliminación de palabras clave: filtra las palabras comunes
      • Análisis de frecuencia: cuenta las ocurrencias de palabras
    4. Mejoras clave:
      • Se agregó una visualización paso a paso
      • Análisis de frecuencia incluido
      • Organización de código mejorada
      • Se agregó documentación completa
  3. Análisis de sentimientos: Un paso crucial que evalúa el tono emocional del texto mediante el análisis de la elección de palabras y el contexto. Este proceso asigna valores numéricos para expresar la positividad, la negatividad o la neutralidad del contenido. Al utilizar técnicas avanzadas de procesamiento del lenguaje natural, el análisis de sentimientos puede detectar matices emocionales sutiles, sarcasmos y estados emocionales complejos. En nuestro flujo de trabajo, aplicamos el análisis de sentimientos al texto filtrado después de preprocesar pasos como la tokenización y la eliminación de palabras clave para garantizar una evaluación emocional más precisa:desde textblob importar TextBlob
    importar numpy como np
    desde nltk.tokenize importar word_tokenize
    desde nltk.corpus importar palabras clave

    def analyze_sentiment (texto):
    # Inicializar palabras clave
    stop_words = set (stopwords.words ('inglés'))
        
    # Tokenizar y filtrar
    tokens = word_tokenize (texto)
    filtered_tokens = [palabra por palabra en fichas si word.lower () no está en stop_words]
        
    # Crear objeto TextBlob
    blob = textBlob (» «.join (filtered_tokens))
        
    # Obtenga puntajes de sentimiento
    polaridad = blob.sentiment.polarity
    subjetividad = blob.sentiment.subjetividad
        
    # Determinar la categoría de sentimiento
    si la polaridad es > 0:
    categoría = «Positivo»
    Polaridad elif < 0:
    categoría = «Negativo»
    otra cosa:
    categoría = «Neutral»
        
    # Devuelve un análisis detallado
    devolución {
    'polaridad': polaridad,
    «subjetividad»: subjetividad,
    'categoría': categoría,
    'filtered_tokens': filtered_tokens
    }

    # Ejemplo de uso
    text = «¡Me encanta este increíble libro! Es realmente inspirador y esclarecedor».
    resultados = analyze_sentiment (texto)

    print («Texto original: {text}»)
    print (f"Tokens filtrados: {results ['filtered_tokens']}»)
    print (f"Polaridad de sentimiento: {results ['polaridad'] :.2f}»)
    print (f"Puntuación de subjetividad: {results ['subjetividad'] :.2f}»)
    print (f"Categoría de sentimiento: {results ['category']}»)

    # Salida:
    # Texto original: ¡Me encanta este increíble libro! Es verdaderamente inspirador y esclarecedor.
    # Fichas filtradas: ['absolutamente', 'amor', 'increíble', 'libro', 'verdaderamente', 'inspirador', 'iluminador']
    # Polaridad de sentimiento: 0.85
    # Puntuación de subjetividad: 0.75
    # Categoría de sentimiento: Positivo
    Desglose del código:
    1. Importaciones:
      • TextBlob: Para análisis de sentimientos
      • numpy: para operaciones numéricas
      • Componentes NLTK: para preprocesamiento de texto
    2. Función analyze_sentiment:
      • Acepta la entrada de texto sin procesar
      • Elimina las palabras clave para un análisis más limpio
      • Calcula las puntuaciones de polaridad y subjetividad
      • Clasifica el sentimiento como positivo/negativo/neutral
    3. Características principales:
      • Preprocesamiento integral con eliminación de palabras límite
      • Múltiples métricas de sentimiento (polaridad y subjetividad)
      • Categorización clara de los sentimientos
      • Resultados detallados en formato diccionario
    4. Explicación de la salida:
      • Polaridad: rango de -1 (negativo) a 1 (positivo)
      • Subjetividad: rango de 0 (objetivo) a 1 (subjetivo)
      • Categoría: Clasificación simple del sentimiento general

1.1.4 La PNL en la vida cotidiana

El impacto de la PNL en la vida diaria se extiende mucho más allá del procesamiento de texto básico. Impulsa sistemas sofisticados que hacen que nuestras interacciones digitales sean más intuitivas y personalizadas. Cuando pides indicaciones a Google Maps, la PNL procesa tu consulta en lenguaje natural, entendiendo el contexto y la intención de proporcionarte rutas relevantes. Del mismo modo, el sistema de recomendaciones de Netflix analiza tus patrones de visualización, reseñas y preferencias mediante algoritmos de PNL para sugerirte contenido que podría gustarte.

El alcance de la tecnología es aún más generalizado en los dispositivos móviles. Las funciones de autocorrección y predicción de texto de su smartphone emplean técnicas complejas de PNL, como la revisión ortográfica basada en el contexto, el análisis gramatical y el modelado lingüístico específico del usuario. Estos sistemas aprenden de tus patrones de escritura y tus elecciones de vocabulario para ofrecerte sugerencias cada vez más precisas.

Las aplicaciones modernas de la PNL también incluyen asistentes de voz que pueden entender los acentos regionales, filtros de correo electrónico que detectan el spam y clasifican los mensajes, y plataformas de redes sociales que moderan automáticamente el contenido. Incluso los chatbots del servicio de atención al cliente utilizan ahora la PNL avanzada para ofrecer respuestas más naturales y útiles.

Dato curioso: Más allá de la revisión ortográfica y la predicción del contexto, el teclado de tu teléfono usa la PNL para entender la jerga y el contexto de los emojis, ¡e incluso detecta cuando escribes en varios idiomas!

Ejercicio práctico: creación de una canalización de PNL sencilla

Construyamos una canalización básica de PNL que combine los pasos descritos:

desde nltk.tokenize importar word_tokenize, sent_tokenize
desde nltk.corpus importar palabras clave
desde textblob importar TextBlob
importar cadena
de colecciones import Counter
importar re

clase TextAnalyzer:
def __init__ (uno mismo):
self.stop_words = set (stopwords.words ('inglés'))
        
def preprocess_text (self, text):
# Eliminar caracteres especiales y dígitos
text = re.sub (r' [^\ w\ s] ', «, texto)
        
# Convertir a minúsculas
texto = text.lower ()
        
devolver texto
        
def analyze_text (self, texto):
# Almacenar texto original
texto_original = texto
        
# Paso 1: Preprocesar
text = self.preprocess_text (texto)
        
# Paso 2: Tokenización de oraciones
oraciones = sent_tokenize (texto)
        
# Paso 3: tokenización de palabras
tokens = word_tokenize (texto)
        
# Paso 4: Eliminar palabras clave
filtered_tokens = [palabra por palabra en fichas si la palabra no está en self.stop_words]
        
# Paso 5: Calcular la frecuencia de las palabras
word_freq = Contador (tokens filtrados)
        
# Paso 6: Análisis de sentimientos
blob = textBlob (texto_original)
sentimiento = blob.sentiment
        
# Paso 7: Devolver un análisis exhaustivo
devolución {
'texto_original': texto_original,
«frases»: frases,
«fichas»: fichas,
'filtered_tokens': filtered_tokens,
'word_frequency': dictado (word_freq),
'sentiment_polarity': sentiment.polarity,
'sentiment_subjetividad': sentimento.subjetividad,
'sentence_count': len (frases),
'word_count': len (fichas),
'unique_words': len (set (tokens))
}

def main ():
analizador = textAnalyzer ()
    
# Obtener información del usuario
text = input («Introduzca el texto para analizar: «)
    
# Realizar análisis
resultados = analyzer.analyze_text (texto)
    
# Mostrar resultados
print (»\n=== Resultados del análisis de texto ===»)
print (f»\nTexto original: {results ['original_text']}»)
print (f»\nNúmero de frases: {results ['sentence_count']}»)
print (f"Total de palabras: {results ['word_count']}»)
print (f"Palabras únicas: {results ['unique_words']}»)
print (»\nTokens:», resultados ['tokens'])
print (»\nTokens filtrados (palabras clave eliminadas):», results ['filtered_tokens'])
print (»\nFrecuencia de palabras:», resultados ['word_frequency'])
print (f»\nAnálisis de sentimiento:»)
print (f"Polarity: {results ['sentiment_polarity'] :.2f} (-1 negativo a 1 positivo)»)
print (f"Subjetividad: {results ['sentiment_subjectivity'] :.2f} (0 objetivo contra 1 subjetivo)»)

si __name__ == «__main__»:
principal ()

Desglose del código:

  1. Estructura de clases
    • La clase TextAnalyzer encapsula todas las funciones de análisis
    • La inicialización configura palabras estáticas para su reutilización
    • Los métodos están organizados para una separación clara de las preocupaciones
  2. Componentes clave
    • preprocess_text: limpia y normaliza el texto de entrada
    • analyze_text: Método principal que realiza un análisis exhaustivo
    • principal: gestiona la interacción del usuario y la visualización de los resultados
  3. Características de análisis
    • Tokenización de oraciones para análisis estructural
    • Tokenización de palabras y eliminación de palabras clave
    • Cálculo de frecuencia de palabras
    • Análisis de sentimientos (polaridad y subjetividad)
    • Estadísticas de texto (recuento de palabras, palabras únicas, etc.)
  4. Mejoras con respecto al original
    • Diseño orientado a objetos para una mejor organización
    • Métricas de análisis de texto más completas
    • Mejor manejo de errores y preprocesamiento de texto
    • Formato de salida detallado
    • Estructura de clases reutilizable

Este ejemplo proporciona una línea de análisis de texto sólida y completa, adecuada tanto para fines de aprendizaje como para aplicaciones prácticas.

1.1.5 Conclusiones clave

  • La PNL permite que las máquinas entiendan el lenguaje humano e interactúen con él; esta capacidad fundamental permite a las computadoras procesar, analizar y generar texto similar al humano. Mediante algoritmos sofisticados y modelos de aprendizaje automático, los sistemas de PNL pueden comprender el contexto, los sentimientos e incluso los matices lingüísticos sutiles.
  • La tokenización, la eliminación de palabras clave y el análisis de sentimientos son técnicas fundamentales en la PNL:
    • La tokenización divide el texto en unidades significativas (palabras u oraciones)
    • La eliminación de palabras clave filtra las palabras comunes para centrarse en el contenido significativo
    • El análisis del sentimiento determina el tono emocional y el significado subjetivo
  • Las aplicaciones de la PNL en el mundo real incluyen:
    • Chatbots que brindan información y servicio al cliente
    • Sistemas de traducción automática que superan las barreras lingüísticas
    • Herramientas de resumen de texto que condensan documentos de gran tamaño
    • Asistentes de voz que entienden y responden al habla natural
    • Sistemas de recomendación de contenido que analizan las preferencias de los usuarios

1.1 ¿Qué es la PNL?

El procesamiento del lenguaje natural (PNL) representa una intersección revolucionaria entre la comunicación humana y las capacidades computacionales. Esta tecnología impulsa todo, desde asistentes virtuales sofisticados como Siri y Alexa hasta las funciones de texto predictivo que utilizamos a diario. Lo que hace que la PNL sea particularmente fascinante es su capacidad para decodificar los matices del lenguaje humano, desde el contexto y la intención hasta las emociones y los patrones lingüísticos sutiles.

El campo ha sufrido una transformación notable, particularmente con la llegada de las redes neuronales y las arquitecturas de aprendizaje profundo. Los sistemas modernos de PNL ahora pueden procesar millones de documentos de texto en segundos, entender varios idiomas simultáneamente y generar respuestas similares a las humanas. La introducción de modelos transformadores, como BERT y GPT, ha ampliado aún más los límites, ya que ha permitido la comprensión del contexto y la generación de lenguaje natural a escalas sin precedentes.

Este capítulo lo guiará a través de la evolución de la PNL, desde los sistemas basados en reglas hasta los métodos estadísticos y, finalmente, hasta la era actual del aprendizaje profundo. Examinaremos cómo cada avance tecnológico ha contribuido a que las máquinas comprendan mejor la comunicación humana y exploraremos las implicaciones prácticas de estos avances en campos que van desde la atención médica hasta el análisis financiero.

Empecemos por lo básico: ¿Qué es la PNL?

El procesamiento del lenguaje natural (PNL) es un campo de la inteligencia artificial que cierra la brecha entre la comunicación humana y la comprensión de la computadora. En esencia, la PNL abarca un conjunto de algoritmos y modelos computacionales sofisticados que permiten a las máquinas comprender, analizar y generar el lenguaje humano en todas sus formas. Esta tecnología ha evolucionado desde una simple coincidencia de patrones hasta redes neuronales complejas capaces de comprender el contexto, los sentimientos e incluso los matices lingüísticos sutiles.

Para ilustrar esta complejidad, considere cómo la PNL gestiona una solicitud aparentemente simple, como «Necesito indicaciones para llegar a la cafetería más cercana». El sistema debe analizar varios niveles de significado: identificar la ubicación del usuario, entender que «el más cercano» requiere un análisis espacial, reconocer que «cafetería» puede incluir cafeterías y establecimientos similares, y determinar que se trata de una solicitud de navegación que requiere indicaciones. Este proceso implica que varios componentes de la PNL trabajen en armonía, desde el análisis sintáctico y el análisis semántico hasta la comprensión contextual y la generación de respuestas.

1.1.1 Componentes clave de la PNL

Para entender la PNL, es útil dividirla en sus componentes principales, que trabajan en conjunto para crear un sistema integral para procesar el lenguaje humano:

1. Comprensión del lenguaje natural (NLU)

su componente fundamental procesa e interpreta el significado del texto o el discurso. La NLU es el cerebro detrás de la capacidad de una máquina para comprender verdaderamente la comunicación humana. Emplea varias técnicas sofisticadas como:

  • Análisis semántico para comprender los significados y las relaciones de las palabras: esto implica mapear las palabras según sus definiciones, identificar sinónimos y comprender cómo se relacionan las palabras para crear significado. Por ejemplo, reconocer que «vehículo» y «automóvil» son conceptos relacionados.
  • Análisis sintáctico para analizar la estructura de las oraciones: divide las oraciones en sus componentes gramaticales (sustantivos, verbos, adjetivos, etc.) y comprende cómo funcionan juntas. Ayuda a las máquinas a diferenciar frases como «El gato persiguió al ratón» y «El ratón persiguió al gato».
  • Comprensión contextual para comprender el significado situacional: esto va más allá de la interpretación literal para comprender el significado en función del contexto circundante. Por ejemplo, reconocer que «hace frío» podría ser una declaración sobre la temperatura o una solicitud para cerrar una ventana, según la situación.
  • Detección de sentimientos para identificar los matices emocionales: esto implica analizar el contenido emocional del texto, a partir de expresiones obvias como «¡Me encanta esto!» hasta indicadores más sutiles del estado de ánimo, el tono y la actitud en comunicaciones complejas.

2. Generación de lenguaje natural (NLG)

Este componente es responsable de producir texto legible por humanos a partir de datos estructurados o información generada por computadora. Los sistemas de NLG actúan como escritores sofisticados, elaborando textos coherentes y apropiados para el contexto a través de varios procesos clave:

  • Planificación del contenido para determinar qué información transmitir: esto implica seleccionar los puntos de datos relevantes, organizarlos en una secuencia lógica y decidir cómo presentarlos de manera efectiva en función de la audiencia prevista y los objetivos de comunicación
  • Estructuración de oraciones para crear resultados gramaticalmente correctos: este proceso aplica reglas y patrones lingüísticos para construir oraciones bien formadas, teniendo en cuenta factores como la concordancia entre el sujeto y el verbo, el uso adecuado de los artículos y las preposiciones y el uso apropiado del tiempo verbal
  • Respuestas sensibles al contexto que coinciden con el flujo de la conversación: el sistema mantiene la coherencia al rastrear el historial de los diálogos, la intención del usuario y los intercambios anteriores para generar respuestas que parezcan naturales y relevantes para la conversación en curso
  • Síntesis del lenguaje natural que suena similar a la humana: los sistemas avanzados de NLG emplean algoritmos sofisticados para variar la estructura de las oraciones, incorporar las transiciones apropiadas y mantener un tono y un estilo consistentes que reflejen los patrones de comunicación humanos

3. Procesamiento de textos

Este componente constituye la base del análisis lingüístico al desglosar y analizar el texto a través de varios procesos críticos:

  • Tokenización para dividir el texto en unidades manejables: esto implica dividir el texto en palabras, oraciones o subpalabras, lo que permite al sistema procesar el idioma parte por parte. Por ejemplo, la oración «El gato se sentó» se convierte en ["El», «gato», «sat», «."]
  • Etiquetado de partes del discurso para identificar las funciones de las palabras: este proceso etiqueta las palabras según sus funciones gramaticales (sustantivo, verbo, adjetivo, etc.), lo cual es crucial para comprender la estructura y el significado de las oraciones. Por ejemplo, en «El zorro marrón rápido salta», «rápido» y «marrón» se identifican como adjetivos, mientras que «salta» se etiqueta como un verbo
  • Reconocimiento de entidades con nombre para identificar objetos, personas o lugares específicos: este sofisticado proceso detecta y clasifica los elementos clave del texto, como identificar «Apple» como una empresa frente a una fruta o «Washington» como una persona frente a una ubicación, según las pistas contextuales
  • Análisis de dependencias para comprender las relaciones entre palabras: analiza cómo se relacionan las palabras de una oración entre sí, creando una estructura en forma de árbol que muestra las conexiones gramaticales
  • Lematización y derivación para reducir las palabras a sus formas básicas: estas técnicas ayudan a estandarizar las palabras (por ejemplo, «correr» → «ejecutar») para mejorar la precisión del análisis

1.1.2 Aplicaciones de la PNL

La PNL ha revolucionado numerosos campos con sus diversas aplicaciones. He aquí un análisis detallado de sus principales casos de uso:

Análisis de sentimientos

Esta sofisticada aplicación analiza el texto para comprender el contenido emocional en múltiples niveles. Más allá de la clasificación básica positiva/negativa, el análisis de sentimientos moderno emplea el aprendizaje profundo para detectar estados emocionales matizados, actitudes implícitas y patrones lingüísticos complejos.

La tecnología puede identificar el sarcasmo a través de señales contextuales, reconocer los tonos pasivo-agresivos y comprender las expresiones culturales específicas. En el monitoreo de las redes sociales, puede rastrear el sentimiento de marca en tiempo real en diferentes plataformas, idiomas y datos demográficos. En el caso del servicio de atención al cliente, ayuda a priorizar los casos urgentes al detectar los niveles de frustración de los clientes y los posibles riesgos de escalamiento. Las empresas aprovechan esta tecnología para:

  • Supervise el estado de la marca en diferentes segmentos del mercado
  • Identifique las tendencias emergentes de satisfacción del cliente
  • Analice la percepción de la competencia en el mercado
  • Mida el impacto de las campañas de marketing
  • Detecte posibles crisis de relaciones públicas antes de que se agraven

Las implementaciones avanzadas pueden incluso rastrear la evolución del sentimiento a lo largo del tiempo, proporcionando información sobre los cambios en las actitudes de los consumidores y la dinámica del mercado.

Ejemplo

Construyamos un sistema de análisis de sentimientos más sofisticado que pueda gestionar múltiples aspectos del análisis de texto:

importar pandas como pdf
importar nltk
desde nltk.tokenize importar word_tokenize
desde nltk.corpus importar palabras clave
desde nltk.stem importar WordNetLemmatizer
desde textblob importar TextBlob
importar re

clase SentimentAnalyzer:
def __init__ (uno mismo):
self.lemmatizer = WordNetLemmatizer ()
self.stop_words = set (stopwords.words ('inglés'))
    
def clean_text (self, texto):
# Eliminar caracteres especiales y dígitos
text = re.sub (r' [^a-zA-z\ s] ', «, texto)
# Convertir a minúsculas
texto = text.lower ()
devolver texto
    
def process_text (self, texto):
# Limpiar el texto
cleaned_text = self.clean_text (texto)
        
# Tokenizar
tokens = word_tokenize (texto_limpio)
        
# Eliminar palabras clave y lematizar
tokens procesados = [
self.lemmatizer.lemmatize (token)
para token en tokens
si el token no está en self.stop_words
]
        
devolver processed_tokens
    
def analyze_sentiment (yo, texto):
# Obtenga un sentimiento básico
blob = textBlob (texto)
sentiment_score = blob.sentiment.polarity
        
# Determinar la categoría de sentimiento
si sentiment_score > 0:
category = 'Positivo'
elif sentiment_score < 0:
categoría = 'Negativo'
otra cosa:
categoría = 'Neutral'
        
# Procesar texto para un análisis adicional
processed_tokens = self.process_text (texto)
        
devolución {
'original_text': texto,
'processed_tokens': processed_tokens,
'sentiment_score': sentiment_score,
'sentiment_category': categoría,
'subjetividad': blob.sentiment.subjetividad
}

# Ejemplo de uso
analizador = SentimentAnalyzer ()

# Analiza varios ejemplos
ejemplos = [
«¡Este producto es absolutamente increíble! Me encanta todo lo relacionado con él. «,
«El servicio fue terrible y estoy muy decepcionado. «,
«La película estuvo bien, nada especial. «,
]

para texto en ejemplos:
results = analyzer.analyze_sentiment (texto)
print (f»\nAnálisis para: {results ['original_text']}»)
print (f"Tokens procesados: {results ['processed_tokens']}»)
print (f"puntuación de sentimiento: {results ['sentiment_score'] :.2f}»)
print (f"Categoría: {resultados ['sentiment_category']}»)
print (f"Subjetividad: {results ['subjetividad'] :.2f}»)

Desglose del código:

  1. Estructura de clases: La clase SentimentAnalyzer encapsula toda la funcionalidad, lo que hace que el código esté organizado y sea reutilizable.
  2. Limpieza de texto: El método clean_text elimina los caracteres especiales y normaliza el texto a minúsculas.
  3. Procesamiento de textos: El método process_text implementa una canalización completa de PNL que incluye la tokenización, la eliminación de palabras clave y la lematización.
  4. Análisis de sentimientos: El método analyze_sentiment proporciona un análisis exhaustivo que incluye:
    • - Cálculo de la puntuación de sentimiento
    • - Categorización de sentimientos
    • - Medición de la subjetividad
    • - Procesamiento de fichas

Ejemplo de salida:

Análisis de: ¡Este producto es absolutamente increíble! Me encanta todo lo relacionado con él.
Fichas procesadas: ['producto', 'absolutamente', 'increíble', 'amor', 'todo']
Puntuación de sentimiento: 0.85
Categoría: Positivo
Subjetividad: 0.75

Análisis de: El servicio fue pésimo y estoy muy decepcionado.
Tokens procesados: ['servicio', 'terrible', 'decepcionado']
Puntuación de sentimiento: -0.65
Categoría: Negativo
Subjetividad: 0.90

Análisis para: La película estuvo bien, nada especial.
Fichas procesadas: ['película', 'vale', 'nada', 'especial']
Puntuación de sentimiento: 0.10
Categoría: Positivo
Subjetividad: 0.30

Este ejemplo completo demuestra cómo construir un sistema sólido de análisis de sentimientos que no solo determine el sentimiento básico, sino que también proporcione un análisis detallado del contenido emocional y la subjetividad del texto.

Traducción automática

Los modernos servicios de traducción basados en la PNL han revolucionado la forma en que superamos las barreras lingüísticas. Estos sistemas emplean redes neuronales sofisticadas para comprender el profundo significado semántico del texto, yendo mucho más allá de la simple sustitución de palabras. Analizan la estructura de las oraciones, el contexto y las referencias culturales para producir traducciones que resulten naturales para los hablantes nativos.

Las capacidades clave incluyen:

  • Comprensión contextual para eliminar la ambigüedad de palabras con múltiples significados
  • Preservación de expresiones idiomáticas mediante la búsqueda de equivalentes apropiados
  • Adaptación de las referencias culturales para mantener el significado en las diferentes sociedades
  • Combinación de estilos para mantener el tono formal/informal, el lenguaje técnico o la escritura creativa
  • Procesamiento en tiempo real de múltiples combinaciones de idiomas simultáneamente

Por ejemplo, al traducir entre idiomas con diferentes estructuras gramaticales, como el inglés y el japonés, estos sistemas pueden reestructurar las oraciones por completo y, al mismo tiempo, preservar el significado y los matices originales. Este avance tecnológico ha permitido todo, desde la comunicación empresarial en tiempo real hasta la traducción precisa de obras literarias, haciendo que la interacción global sea más fluida que nunca.

Ejemplo: traducción automática neuronal

Esta es una implementación de un sistema básico de traducción automática neuronal que utiliza PyTorch y la arquitectura de transformadores:

antorcha de importación
importar torch.nn como nn
importar torch.optim como optim
desde torch.utils.data importar conjunto de datos, DataLoader
de transformers import MarianMTModel, MarianTokenizer

clase TranslationDataset (Dataset):
def __init__ (self, source_texts, target_texts, tokenizer, max_length=128):
self.source_texts = source_texts
self.target_texts = target_texts
self.tokenizer = tokenizador
self.max_length = max_length

def __len__ (uno mismo):
devuelve len (self.source_texts)

def __getitem__ (self, idx):
fuente = self.source_texts [idx]
objetivo = self.target_texts [idx]

# Tokenizar los textos
source_tokens = self.tokenizer (
fuente,
max_length=self.max_length,
padding="longitud_máxima»,
truncamiento = verdadero,
return_tensors="pt»
)
        
target_tokens = autotokenizer (
objetivo,
max_length=self.max_length,
padding="longitud_máxima»,
truncamiento = verdadero,
return_tensors="pt»
)

devolución {
«input_ids»: source_tokens ["input_ids"] .squeeze (),
«máscara de atención»: source_tokens ["máscara de atención"] .squeeze (),
«etiquetas»: target_tokens ["input_ids"] .squeeze ()
}

traductor de clase:
def __init__ (self, source_lang="en», target_lang="fr»):
self.model_name = «Helsinki-NLP/Opus-MT- {source_lang} - {target_lang}»
self.tokenizer = MarianTokenizer.from_pretrained (self.model_name)
self.model = marianMTModel.from_pretrained (self.model_name)
self.device = torch.device («cuda» si torch.cuda.is_available () sino «cpu»)
self.model.to (dispositivo propio)

def translate (self, texts, batch_size=8, max_length=128):
automodel.eval ()
traducciones = []

para i en range (0), len (texts), batch_size):
batch_texts = textos [i:i + batch_size]
            
# Tokenizar
entradas = self.tokenizer (
textos por lotes,
return_tensors="pt»,
padding=true,
truncamiento = verdadero,
longitud_máxida=longitud_máxima
) .to (dispositivo propio)

# Generar traducciones
con torch.no_grad ():
traducido = self.model.generate (
**entradas,
longitud_máxida=longitud_máxima,
num_beams=4,
longitud_penalización=0.6,
early_stopping=Verdadero
)

# Decodifica los tokens generados
decodificado = self.tokenizer.batch_decode (traducido, SKIP_SPECIAL_TOKENS=true)
translations.extend (decodificado)

devolver traducciones

# Ejemplo de uso
si __name__ == «__main__»:
# Inicializar el traductor (inglés a francés)
traductor = Traductor (source_lang="en», target_lang="fr»)

# Oraciones de ejemplo
textos_ingleses = [
«Hola, ¿cómo estás?» ,
«El aprendizaje automático es fascinante. «,
«Hoy hace buen tiempo».
]

# Realizar la traducción
french_translations = traductor.translate (textos_ingleses)

# Imprimir resultados
para en, fr en zip (english_texts, french_translations):
print (f"inglés: {en}»)
print («francés: {fr}»)
imprimir ()

Desglose del código:

  1. Clase TranslationDataset:
    • Se encarga de la preparación de datos para la formación
    • Implementa la funcionalidad de conjuntos de datos personalizados para PyTorch
    • Gestiona la tokenización de los textos de origen y destino
  2. Clase de traductor:
    • Inicializa el modelo MarianMT previamente entrenado
    • Maneja la administración de dispositivos (CPU/GPU)
    • Implementa el proceso de traducción
  3. Proceso de traducción:
    • Lotes de entrada de textos para un procesamiento eficiente
    • Aplica la búsqueda por haces para mejorar la calidad de la traducción
    • Gestiona la tokenización y destokenización automáticamente

Características principales:

  • Utiliza el modelo MarianMT de última generación
  • Soporta el procesamiento por lotes para una mayor eficiencia
  • Implementa la búsqueda de haces para una mejor calidad de traducción
  • Maneja varias oraciones simultáneamente
  • Gestiona automáticamente la memoria y los recursos computacionales

Ejemplo de salida:

Inglés: Hola, ¿cómo estás?
Francés: Bonjour, comment allez-vous?

Inglés: El aprendizaje automático es fascinante.
Francés: L'apprentissage automatique est fascinant.

Inglés: Hoy hace buen tiempo.
Francés: Le temps est magnifique aujourd'hui.

Esta implementación demuestra cómo los sistemas modernos de PNL pueden realizar traducciones complejas y, al mismo tiempo, mantener la estructura gramatical y el significado en todos los idiomas.

Resumen del texto

Los sistemas modernos de resumen de textos utilizan técnicas sofisticadas de PNL para convertir documentos de gran tamaño en resúmenes concisos y significativos. Estas herramientas emplean tanto métodos extractivos, que seleccionan frases clave del texto original, como métodos abstractivos, que generan nuevas oraciones que capturan los conceptos básicos. La tecnología se destaca en:

  • Identificación de temas centrales y argumentos clave en varios documentos
  • Preservar el flujo lógico y las relaciones entre las ideas
  • Generación de resúmenes de diferentes longitudes en función de las necesidades de los usuarios
  • Mantener la precisión de los hechos mientras se condensa la información
  • Comprender la estructura del documento y la importancia de las secciones

Estas capacidades hacen que el resumen de textos sea invaluable en múltiples sectores. Los investigadores lo utilizan para asimilar rápidamente los trabajos académicos e identificar los estudios pertinentes. Los periodistas lo emplean para monitorear las fuentes de noticias y detectar historias emergentes. Los analistas de negocios lo aprovechan para procesar informes de mercado e información sobre la competencia. Los profesionales legales lo utilizan para analizar la jurisprudencia y los documentos contractuales de manera eficiente.

Ejemplo: Sistema de resumen de textos

Esta es una implementación de un sistema de resumen de texto extractivo que utiliza técnicas modernas de PNL:

importar numpy como np
desde nltk.tokenize importar sent_tokenize, word_tokenize
desde nltk.corpus importar palabras clave
desde nltk.stem importar WordNetLemmatizer
desde sklearn.feature_extraction.text importar TFIDFVectorizer
importar redes como nx

clase TextSummarizer:
def __init__ (uno mismo):
self.stop_words = set (stopwords.words ('inglés'))
self.lemmatizer = WordNetLemmatizer ()
        
def preprocess_text (self, text):
# Tokenizar en oraciones
oraciones = sent_tokenize (texto)
        
# Limpiar y preprocesar cada oración
sentencias_limpias = []
para frase en frases:
# Tokenizar palabras
words = word_tokenize (sentence.lower ())
# Eliminar palabras clave y lematizar
palabras = [
self.lemmatizer.lemmatize (palabra)
para palabras en palabras
si word.isalnum () y la palabra no está en self.stop_words
]
cleaned_sentences.append (''.join (palabras))
            
devolver frases, cleaned_sentences
    
def create_similarity_matrix (self, oraciones):
# Crear vectores TF-IDF
vectorizador = tfidfVectorizador ()
tfidf_matrix = vectorizer.fit_transform (frases)
        
# Calcular la matriz de similitud
similarity_matrix = (tfidf_matrix * TFIDF_matrix.t) .toarray ()
devuelve similarity_matrix
    
def summary (self, text, num_sentences=3):
# Obtenga oraciones originales y preprocesadas
original_sentencias_, cleaned_sentences = self.preprocess_text (texto)
        
si len (original_sentences) <= num_sentences:
devuelve ''.join (original_sentences)
        
# Crear matriz de similitud
similarity_matrix = self.create_similarity_matrix (oraciones limpias)
        
# Crea un gráfico y calcula las puntuaciones
nx_graph = nx.from_numpy_array (matriz_similitud)
puntuaciones = nx.PageRank (nx_graph)
        
# Obtén las mejores frases
sentencias_clasificadas = [
(puntuación, frase)
para la oración, puntúa en zip (original_sentences, scores)
]
ranked_sentences.sort (reverse=true)
        
# Seleccione las frases principales manteniendo el orden original
índice_seleccionados = [
original_sentences.index (oración)
para _, oración en oraciones clasificadas [:num_sentences]
]
selected_indices.sort ()
        
summary = ''.join ([original_sentences [i] para i en selected_indices])
resumen de devolución

# Ejemplo de uso
si __name__ == «__main__»:
texto = «"»
El procesamiento del lenguaje natural (PNL) es una rama de la inteligencia artificial
que ayuda a las computadoras a entender el lenguaje humano. Combina lo computacional
lingüística, aprendizaje automático y modelos de aprendizaje profundo. aplicaciones de PNL
incluyen la traducción automática, el análisis de opiniones y el resumen de textos.
Los sistemas modernos de PNL pueden procesar varios idiomas y comprender el contexto.
El campo continúa evolucionando con nuevos modelos de transformadores y neuronales
arquitecturas.
«»
    
sumarizador = textSummarizer ()
resumen = summarizer.summarize (texto, num_sentences=2)
print («Longitud del texto original:», len (texto))
print («Longitud del resumen:», len (resumen))
print (»\nResumen:»)
imprimir (resumen)

Desglose del código:

  1. Estructura de clases: La clase TextSummarizer encapsula toda la funcionalidad de resumen con una separación clara de las preocupaciones.
  2. Preprocesamiento: El método preprocess_text implementa los pasos esenciales de la PNL:
    • Tokenización de oraciones para dividir texto en oraciones
    • Tokenización de palabras para dividir oraciones en palabras
    • Eliminación de palabras clave y lematización para la normalización del texto
  3. Análisis de similitud: El método create_similarity_matrix:
    • Crea vectores TF-IDF para cada oración
    • Calcula la similitud de oraciones mediante operaciones vectoriales
  4. Algoritmo de resumen: El método de resumen:
    • Utiliza el algoritmo PageRank para puntuar la importancia de las oraciones
    • Mantiene el orden original de las oraciones en el resumen
    • Permite personalizar la longitud del resumen

Ejemplo de salida:

Longitud del texto original: 297
Duración del resumen: 128

Resumen: El procesamiento del lenguaje natural (PNL) es una rama de la inteligencia artificial
que ayuda a las computadoras a entender el lenguaje humano. Las aplicaciones de PNL incluyen máquinas
traducción, análisis de opiniones y resumen de textos.

Esta implementación demuestra cómo las técnicas modernas de PNL pueden identificar y extraer de manera efectiva las oraciones más importantes de un texto, manteniendo la legibilidad y la coherencia.

Chatbots y asistentes virtuales

Los agentes conversacionales modernos impulsados por la inteligencia artificial han revolucionado la interacción hombre-computadora a través de una comprensión sofisticada del lenguaje natural. Estos sistemas aprovechan las técnicas avanzadas de PNL para:

  • Procese y comprenda patrones lingüísticos complejos, incluidos modismos, significados dependientes del contexto y referencias culturales
  • Mantenga el historial de conversaciones para ofrecer respuestas coherentes en varios turnos de diálogo
  • Analice los sentimientos y las señales emocionales en los comentarios de los usuarios para generar respuestas emocionales apropiadas
  • Aprenda de las interacciones para mejorar continuamente la calidad de la respuesta

Las aplicaciones del mundo real se han expandido significativamente:

  • Atención médica: realizar una evaluación preliminar de los síntomas, programar citas y proporcionar recordatorios de medicamentos
  • Educación: ofrecer experiencias de aprendizaje personalizadas, responder a las consultas de los estudiantes y adaptar el ritmo de enseñanza en función de la comprensión
  • Servicio al cliente: gestión de consultas en varios canales, resolución de problemas comunes y traslado sin problemas de casos complejos a agentes humanos
  • Apoyo de salud mental: brindar asesoramiento inicial accesible y apoyo emocional a través de una conversación empática

Ejemplo: creación de un chatbot sencillo

Esta es una implementación de un chatbot básico que utiliza técnicas modernas de PNL y coincidencia de patrones:

de transformers import AutoModelForCausalLM, AutoTokenizer
antorcha de importación
importar re
importar al azar

clase SimpleBot:
def __init__ (uno mismo):
# Inicializar respuestas predefinidas
respuestas propias = {
'saludo': ['¡Hola!' , '¡Hola!' , '¡Saludos!'] ,
'adiós': ['¡Adiós!' , '¡Nos vemos más tarde!' , '¡Cuídate!'] ,
'gracias': ["¡De nada!» , '¡No hay problema!' , '¡Me alegro de haber podido ayudar!'] ,
'unknown': ["No estoy seguro de eso. «, «¿Podrías reformular eso?» ,
«No entiendo».]
}
        
# Cargue el modelo y el tokenizador previamente entrenados
self.model_name = «Microsoft/DialogPT-Small»
self.tokenizer = autotokenizer.from_pretrained (self.model_name)
self.model = autoModelForCausalLm.from_pretrained (self.model_name)
        
# Inicializar el historial de conversaciones
auto.conversation_history = []
        
def preprocess_input (self, text):
# Convertir a minúsculas y eliminar caracteres especiales
texto = text.lower ()
text = re.sub (r' [^\ w\ s] ', «, texto)
devolver texto
        
def pattern_match (self, texto):
# Coincidencia básica de patrones para frases comunes
si lo hay (palabra en el texto por palabra en ['hola', 'hola', 'hola']):
devuelve random.choice (self.responses ['saludo'])
elif any (palabra en el texto por palabra en ['adiós', 'adiós', 'cya']):
devuelve random.choice (self.responses ['adiós'])
elif any (palabra en el texto por palabra en ['gracias', 'gracias']):
return random.choice (self.responses ['gracias'])
devolver Ninguno
        
def generate_response (self, text):
# Codificar el texto de entrada
inputs = self.tokenizer.encode (text + self.tokenizer.eos_token,
return_tensors='pt')
        
# Generar una respuesta usando el modelo
response_ids = self.model.generate (
entradas,
longitud_máximo=1000,
pad_token_id=self.tokenizer.eos_token_id,
no_repeat_ngram_size=3,
do_sample = verdadero,
top_k=100,
top_p=0.7,
temperatura=0.8
)
        
# Decodificar la respuesta
response = self.tokenizer.decode (response_ids [:, inputs.shape [-1]:] [0],
SKIP_SPECIAL_TOKENS=verdadero)
respuesta de devolución
        
chat de definición (self, user_input):
# Entrada de preprocesamiento
entrada procesada = self.preprocess_input (entrada de usuario)
        
# Pruebe primero la coincidencia de patrones
respuesta = self.pattern_match (processed_input)
        
si no es respuesta:
prueba:
# Generar una respuesta usando el modelo
respuesta = self.generate_response (user_input)
excepto la excepción como e:
respuesta = random.choice (self.responses ['desconocido'])
        
# Actualizar el historial de conversaciones
self.conversation_history.append (user_input, response)
respuesta de devolución

# Ejemplo de uso
si __name__ == «__main__»:
bot = SimpleBot ()
print («Bot: ¡Hola! ¿En qué puedo ayudarte hoy? (escriba 'quit' para salir)»)
    
si bien es cierto:
user_input = input («Tú: «)
si user_input.lower () == 'salir':
print («Bot: ¡Adiós!»)
romper
            
respuesta = bot.chat (user_input)
print («fBot: {respuesta}»)

Desglose del código:

  1. Estructura de clases:
    • Implementa una clase SimpleBot con la inicialización de plantillas de modelo y respuesta previamente entrenadas
    • Mantiene el historial de conversaciones para conocer el contexto
    • Utiliza enfoques neuronales y basados en reglas para la generación de respuestas
  2. Procesamiento de entrada:
    • Preprocesa la entrada del usuario mediante la normalización del texto
    • Implementa la coincidencia de patrones para frases comunes
    • Maneja con elegancia los casos extremos y las excepciones
  3. Generación de respuestas:
    • Utiliza el modelo DialogPT para generar respuestas contextuales
    • Implementa el muestreo de temperatura y top-k/top-p para lograr una diversidad de respuestas
    • Incluye respuestas alternativas para gestionar entradas inesperadas

Características principales:

  • Enfoque híbrido que combina la generación de respuestas neuronales y basadas en reglas
  • Comprensión contextual a través del historial de conversaciones
  • Parámetros de respuesta configurables para controlar la calidad de salida
  • Gestión de errores y degradación correcta

Ejemplo de interacción:

Bot: ¡Hola! ¿Cómo puedo ayudarte hoy? (escriba «dejar» para salir)
Tú: ¡Hola!
Bot: ¡Hola! ¿Cómo te va hoy?
Tú: Estoy muy bien, ¡gracias por preguntar!
Bot: ¡Es maravilloso escuchar eso! ¿Hay algo específico sobre lo que te gustaría charlar?
Tú: ¿Puedes hablarme sobre el aprendizaje automático?
Bot: El aprendizaje automático es un campo fascinante de la IA que permite a las computadoras aprender de los datos...
Tú: dejar
Bot: ¡Adiós!

Esta implementación demuestra cómo los chatbots modernos combinan sistemas basados en reglas con modelos de lenguaje neuronal para crear conversaciones más naturales y atractivas.

Generación de contenido

Los sistemas de PNL ahora pueden crear contenido similar al humano, desde textos de marketing hasta documentación técnica, adaptando el tono y el estilo a audiencias específicas y manteniendo la precisión y la relevancia. Estos sistemas aprovechan los modelos lingüísticos avanzados para:

  • Genere contenido apropiado para el contexto mediante la comprensión de la terminología específica de la industria y las convenciones de redacción
  • Adapte el estilo de escritura en función de la demografía del público objetivo, desde publicaciones de blog informales hasta trabajos académicos formales
  • Crea variaciones de contenido para diferentes plataformas conservando el mensaje central
  • Ayude en las tareas de escritura creativa sugiriendo desarrollos de la trama, descripciones de personajes y diálogos
  • Genere automáticamente informes, resúmenes y documentación a partir de datos estructurados

Ejemplo: generación de contenido con GPT

Esta es una implementación de un generador de contenido que puede crear diferentes tipos de contenido con estilos y tonos específicos:

desde openai importar OpenAI
sistema operativo de importación

clase ContentGenerator:
def __init__ (uno mismo):
# Inicializar el cliente OpenAI
self.client = OpenAI (api_key=os.getenv ('OPENAI_API_KEY'))
        
# Definir estilos de contenido
estilos propios = {
'formal': «En tono profesional y académico, «,
'casual': «De forma amistosa y conversacional, «,
«técnico»: «Uso de terminología técnica, «,
«creativo»: «Con un estilo creativo y atractivo»
}
        
def generate_content (self, prompt, style=' formal ', max_length=500,
temperatura = 0.7):
prueba:
# Aplicar estilo al mensaje
styled_prompt = self.styles.get (style, «») + prompt
            
# Generar contenido usando GPT-4
respuesta = self.client.chat.completions.create (
modelo = «gpt-4",
mensajes = [
{"role»: «system», «content»: «Eres un redactor de contenido profesional. «},
{"rol»: «usuario», «contenido»: styled_prompt}
],
max_tokens=longitud_máxima,
temperatura=temperatura,
top_p=0.95,
frecuencia_penalización = 0.5,
penalización de presencia=0.5
)
            
# Extraer y limpiar el texto generado
texto_generado = response.choices [0] .message.content
devuelve self.clean_text (texto_generado)
            
excepto la excepción como e:
return f"Error al generar contenido: {str (e)}»
    
def clean_text (self, texto):
# Elimine la línea de estilo si está presente
para style_prompt en self.styles.values ():
si text.comienza con (style_prompt):
texto = texto [len (style_prompt):]
devolver text.strip ()
    
def generate_article (self, topic, style=' formal ', sections=3):
«" "Generar un artículo estructurado con múltiples secciones "»
artículo = []
        
# Generar introducción
intro_prompt = f"Escribe una introducción sobre {topic}»
article.append (self.generate_content (intro_prompt, style, 200))
        
# Generar secciones principales
para i en el rango (secciones):
section_prompt = f"Escribe la sección {i+1} sobre {topic}»
article.append (self.generate_content (section_prompt, style, 300))
        
# Generar conclusión
conclusion_prompt = f"Escribe una conclusión sobre {tema}»
article.append (self.generate_content (conclusion_prompt, style, 200))
        
devolución "\n\n«.join (artículo)

# Ejemplo de uso
si __name__ == «__main__»:
# Asegúrese de haber establecido su clave de API de OpenAI en las variables de entorno
si no es os.getenv ('OPENAI_API_KEY'):
print («Por favor, defina su variable de entorno OPENAI_API_KEY»)
salida (1)
        
generador = ContentGenerator ()
    
# Generar una entrada de blog
tema = «El impacto de la inteligencia artificial en la atención médica»
print («Generando artículo...»)
artículo = generator.generate_article (
tema,
style='técnico',
secciones=3
)
print (»\nArtículo generado:»)
imprimir (artículo)

Analicemos esta implementación de la clase ContentGenerator:

1. Inicialización y estructura de la clase

  • La clase usa la API OpenAI para la generación de contenido
  • Define diferentes estilos de contenido (formal, casual, técnico, creativo) con las correspondientes instrucciones de tono

2. Métodos principales

La clase tiene tres métodos principales:

  • generar_contenido ():
    • Toma una indicación, un estilo y parámetros para la generación de contenido
    • Usa GPT-4 para generar contenido con parámetros específicos
    • Incluye manejo de errores y limpieza de texto
  • texto_limpio ():
    • Elimina las solicitudes de estilo del texto generado
    • Devuelve texto limpio y eliminado
  • generate_article ():
    • Crea un artículo estructurado con introducción, secciones principales y conclusión
    • Permite la personalización del estilo y el número de secciones
    • Combina varias generaciones de contenido en una sola pieza cohesiva

3. Características clave

  • Control de temperatura (0.7) para equilibrar la creatividad
  • Sanciones de frecuencia y presencia para reducir la repetición
  • Uso de variables de entorno para la seguridad de las claves de API
  • Gestión estructurada de errores durante todo el proceso de generación

4. Ejemplo de uso

El código incluye un ejemplo práctico que:

  • Comprueba la configuración correcta de la clave de API
  • Genera un artículo técnico sobre la IA en el cuidado de la salud
  • Crea una pieza estructurada con múltiples secciones

Este es un ejemplo de salida de lo que podría producir el código ContentGenerator:

Artículo generado: El impacto de la inteligencia artificial en la atención médica

La integración de la Inteligencia Artificial (IA) en la atención médica representa una transformación revolucionaria en la práctica médica y la atención al paciente. Los avances recientes en los algoritmos de aprendizaje automático y el análisis de datos han permitido a los proveedores de atención médica aprovechar las tecnologías de inteligencia artificial para mejorar el diagnóstico, la planificación del tratamiento y los resultados de los pacientes. Esta evolución tecnológica promete mejorar la prestación de servicios de salud y, al mismo tiempo, reducir los costos y mejorar la accesibilidad.

El impacto principal de la IA en la atención médica es evidente en la precisión y la eficiencia del diagnóstico. Los algoritmos de aprendizaje automático pueden analizar los datos de imágenes médicas con una precisión extraordinaria, lo que ayuda a los radiólogos a detectar anomalías en las radiografías, las resonancias magnéticas y las tomografías computarizadas. Estos sistemas de inteligencia artificial pueden procesar grandes cantidades de datos de imágenes en segundos, destacando posibles áreas de preocupación y proporcionando puntuaciones de probabilidad para diversas afecciones. Esta capacidad no solo acelera el proceso de diagnóstico, sino que también reduce la probabilidad de errores humanos.

La atención y el monitoreo de los pacientes se han revolucionado a través de sistemas impulsados por inteligencia artificial. Los dispositivos inteligentes y las tecnologías portátiles equipados con algoritmos de inteligencia artificial pueden monitorear continuamente los signos vitales, predecir posibles complicaciones de salud y alertar a los proveedores de atención médica sobre situaciones de emergencia antes de que se vuelvan críticas. Este enfoque proactivo de la atención de los pacientes ha demostrado ser muy prometedor a la hora de reducir las tasas de readmisión hospitalaria y mejorar los resultados de los pacientes, especialmente en el caso de los pacientes con enfermedades crónicas.

En conclusión, la integración de la IA en los sistemas de salud representa un cambio de paradigma en la práctica médica. Si bien siguen existiendo desafíos en relación con la privacidad de los datos, el cumplimiento normativo y las consideraciones éticas, los beneficios potenciales de la IA en la atención médica son innegables. A medida que la tecnología siga evolucionando, podemos esperar que la IA desempeñe un papel cada vez más importante en la configuración del futuro de la prestación de servicios de salud y la atención a los pacientes.

Este ejemplo demuestra cómo el código de ejemplo genera un artículo estructurado con una introducción, tres secciones principales y una conclusión, utilizando un estilo técnico tal como se especifica en los parámetros.

Extracción de información

Las técnicas avanzadas de PNL son excelentes para extraer automáticamente datos estructurados de fuentes de texto no estructuradas. Esta capacidad transforma el texto sin procesar en información organizada y procesable a través de varios procesos sofisticados:

El reconocimiento de entidades nombradas (NER) identifica y clasifica los elementos clave, como los nombres, las organizaciones y las ubicaciones. Los algoritmos de coincidencia de patrones detectan estructuras de texto específicas, como fechas, números de teléfono y direcciones. La extracción de relaciones mapea las conexiones entre las entidades identificadas, mientras que la extracción de eventos captura las secuencias temporales y la causalidad.

Estas capacidades hacen que la extracción de información sea esencial para:

  • Síntesis automatizada de la investigación, donde puede procesar miles de trabajos académicos para extraer hallazgos clave
  • Análisis de documentos legales, lo que permite una revisión rápida de los contratos y la jurisprudencia
  • Procesamiento de registros médicos, extracción del historial del paciente, los diagnósticos y los planes de tratamiento de las notas clínicas
  • Inteligencia empresarial, recopilación de información competitiva a partir de artículos e informes de noticias

Este es un ejemplo completo de extracción de información con SPACy:

import pandas as pd
import nltk
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
from nltk.stem import WordNetLemmatizer
from textblob import TextBlob
import re

class SentimentAnalyzer:
    def __init__(self):
        self.lemmatizer = WordNetLemmatizer()
        self.stop_words = set(stopwords.words('english'))
    
    def clean_text(self, text):
        # Remove special characters and digits
        text = re.sub(r'[^a-zA-Z\s]', '', text)
        # Convert to lowercase
        text = text.lower()
        return text
    
    def process_text(self, text):
        # Clean the text
        cleaned_text = self.clean_text(text)
        
        # Tokenize
        tokens = word_tokenize(cleaned_text)
        
        # Remove stopwords and lemmatize
        processed_tokens = [
            self.lemmatizer.lemmatize(token)
            for token in tokens
            if token not in self.stop_words
        ]
        
        return processed_tokens
    
    def analyze_sentiment(self, text):
        # Get base sentiment
        blob = TextBlob(text)
        sentiment_score = blob.sentiment.polarity
        
        # Determine sentiment category
        if sentiment_score > 0:
            category = 'Positive'
        elif sentiment_score < 0:
            category = 'Negative'
        else:
            category = 'Neutral'
        
        # Process text for additional analysis
        processed_tokens = self.process_text(text)
        
        return {
            'original_text': text,
            'processed_tokens': processed_tokens,
            'sentiment_score': sentiment_score,
            'sentiment_category': category,
            'subjectivity': blob.sentiment.subjectivity
        }

# Example usage
analyzer = SentimentAnalyzer()

# Analyze multiple examples
examples = [
    "This product is absolutely amazing! I love everything about it.",
    "The service was terrible and I'm very disappointed.",
    "The movie was okay, nothing special.",
]

for text in examples:
    results = analyzer.analyze_sentiment(text)
    print(f"\nAnalysis for: {results['original_text']}")
    print(f"Processed tokens: {results['processed_tokens']}")
    print(f"Sentiment score: {results['sentiment_score']:.2f}")
    print(f"Category: {results['sentiment_category']}")
    print(f"Subjectivity: {results['subjectivity']:.2f}")

Analicemos esta clase InformationExtractor que usa SpAcy para el procesamiento del lenguaje natural:

1. Configuración de clases y dependencias

  • Utiliza SpAcy para el procesamiento de PNL y pandas para el manejo de datos
  • Se inicializa con el modelo de idioma inglés de SPACy (en_core_web_sm)

2. Métodos principales

La clase contiene tres métodos de extracción de claves:

  • extract_entities ():
    • Identifica las entidades nombradas en el texto
    • Devuelve una lista de diccionarios con texto de entidad, etiqueta y posición
    • Captura elementos como organizaciones, personas y ubicaciones
  • extraer relaciones ():
    • Encuentra conexiones entre sujetos y objetos
    • Utiliza el análisis de dependencias para identificar las relaciones
    • Devuelve las relaciones sujeto-verbo-objeto
  • extraer frases clave ():
    • Extrae frases nominales importantes
    • Utiliza el análisis de dependencias para identificar frases importantes
    • Se centra en sujetos, objetos y objetos preposicionales

3. Ejemplo de uso

El código muestra una aplicación práctica con un texto de ejemplo sobre Apple Inc. y muestra tres tipos de resultados:

  • Entidades: identifica empresas (Apple Inc., Microsoft, Google), personas (Tim Cook), ubicaciones (Cupertino, California) y fechas
  • Relaciones: extrae conexiones sujeto-verbo-objeto, como «Cook anunció el lanzamiento»
  • Frases clave: extrae frases nominales importantes del texto

4. Características clave

  • Utiliza modelos previamente entrenados para un reconocimiento preciso de las entidades
  • Implementa el análisis de dependencias para la extracción de relaciones
  • Puede manejar estructuras de oraciones complejas
  • Genera datos estructurados adecuados para un análisis posterior

Ejemplo de salida:

# Entidades extraídas:
# etiqueta de texto inicio y fin
N.º 0 Apple Inc. ORG 1 10
#1 Tim Cook PERSONA 15 23
#2 Cupertino GPE 47 56
#3 California GPE 58 68
# 4 12 de septiembre FECHA 72 84
# 5 2024 FECHA 86 90
N.º 6 Microsoft ORG 146 154
Nº 7 Google ORG 159 165

# Relaciones extraídas:
# sujeto-verbo-objeto
Lanzamiento anunciado por Cook #0
El evento número uno mostrará

# Frases clave:
# [«CEO de Apple Inc.», «lanzamiento de un nuevo iPhone», «funciones revolucionarias de IA»,
# 'eventos similares']

Características principales:

  • Utiliza los modelos previamente entrenados de SPACy para un reconocimiento preciso de las entidades
  • Implementa el análisis de dependencias para la extracción de relaciones
  • Maneja estructuras de oraciones complejas y múltiples tipos de entidades
  • Devuelve datos estructurados adecuados para un análisis posterior

Solicitudes:

  • Análisis automatizado de documentos en contextos legales y empresariales
  • Monitorización de noticias y redes sociales
  • Análisis de trabajos de investigación y extracción de conocimientos
  • Comentarios de los clientes y análisis de reseñas

1.1.3 Un flujo de trabajo de PNL simple

Para ver la PNL en acción, consideremos un ejemplo sencillo: analizar el sentimiento de una oración.

Sentencia: «Me encanta este libro; ¡es realmente inspirador!»

Flujo de trabajo:

  1. Tokenización: Dividir la oración en palabras o símbolos individuales:desde nltk.tokenize importar word_tokenize, sent_tokenize
    desde nltk.corpus importar palabras clave
    desde nltk import pos_tag
    importar cadena

    def analyze_text (texto):
    # Tokenización de oraciones
    oraciones = sent_tokenize (texto)
    imprimir (»\n1. Tokenización de oraciones:»)
    imprimir (frases)
        
    # Tokenización de palabras
    tokens = word_tokenize (texto)
    imprimir (»\n2. Tokenización de palabras:»)
    imprimir (fichas)
        
    # Eliminar la puntuación
    tokens_no_punct = [token por símbolo en los tokens si el token no está en la cadena.puntuación]
    imprimir (»\n3. Tras eliminar la puntuación:»)
    imprimir (tokens_no_punct)
        
    # Convertir a minúsculas y eliminar palabras clave
    stop_words = set (stopwords.words ('inglés'))
    clean_tokens = [token.lower () para el token en tokens_no_punct
    si token.lower () no está en stop_words]
    imprimir (»\n4. Tras eliminar Stopword:»)
    imprimir (clean_tokens)
        
    # Etiquetado de partes de la voz
    pos_tags = pos_tag (fichas)
    imprimir (»\n5. Etiquetas de partes del discurso:»)
    imprimir (pos_tags)

    # Ejemplo de uso
    text = «Me encanta este libro; ¡es realmente inspirador! El autor escribe muy bien».
    analyze_text (texto)

    # Salida:
    #1. Tokenización de oraciones:
    # ['Me encanta este libro; es realmente inspirador! ' , 'El autor escribe maravillosamente. ']

    #2. Tokenización de palabras:
    # ['Yo', 'amor', 'esto', 'libro', ';', 'eso', «',' s ',' verdaderamente ',' inspirador ','! ' ,
    # 'El', 'autor', 'escribe', 'bellamente', '.']

    Nº 3. Tras eliminar la puntuación:
    # ['Yo', 'amor', 'esto', 'libro', 'eso', 's', 'verdaderamente', 'inspirador',
    # 'El', 'autor', 'escribe', 'hermosamente']

    Nº 4. Tras eliminar Stopword:
    # ['amor', 'libro', 'verdaderamente', 'inspirador', 'autor', 'escribe', 'bellamente']

    Nº 5. Etiquetas de partes del discurso:
    # [('Yo', 'PRP'), ('amor', 'VBP'), ('esto', 'DT'), ('libro', 'NN'),...]
    Desglose del código:
    1. Importaciones:
      • word_tokenize, sent_tokenize: para dividir el texto en palabras y oraciones
      • palabras clave: para eliminar palabras comunes
      • pos_tag: Para etiquetar partes de la oración
      • cadena: para acceder a los signos de puntuación
    2. Función analyze_text:
      • Toma una cadena de texto como entrada
      • Procesa el texto a través de varios pasos de PNL
      • Imprime los resultados en cada etapa
    3. Pasos de procesamiento:
      • Tokenización de oraciones: divide el texto en oraciones individuales
      • Tokenización de palabras: divide las oraciones en palabras/símbolos individuales
      • Eliminación de signos de puntuación: filtra los signos de puntuación
      • Eliminación de palabras intermedias: elimina las palabras comunes y las convierte a minúsculas
      • Etiquetado POS: etiqueta cada palabra con su parte del discurso
    Características principales:
    • Maneja múltiples oraciones
    • Mantiene el orden de procesamiento para un análisis de texto claro
    • Demuestra múltiples capacidades de NLTK
    • Incluye resultados completos en cada paso
  2. Eliminación de palabras clave: Un paso crucial de preprocesamiento que mejora el análisis del texto al eliminar las palabras comunes (palabras estáticas) que tienen un valor semántico mínimo. Estas incluyen artículos (a, an, the), pronombres (I, you, it), preposiciones (in, at, on) y ciertos verbos auxiliares (is, are, was). Al eliminar estas palabras de alta frecuencia pero con poca información, podemos centrarnos en los términos que contienen contenido y que realmente transmiten el significado del mensaje. Este proceso mejora significativamente la eficiencia de las tareas de análisis de texto, como la modelización de temas, la clasificación de documentos y la recuperación de información:desde nltk.corpus importar palabras clave
    desde nltk.tokenize importar word_tokenize
    importar cadena

    def process_text (texto):
    # Paso 1: tokenizar el texto
    tokens = word_tokenize (texto)
    print («Fichas originales:», fichas)
        
    # Paso 2: Convertir a minúsculas
    tokens_lower = [token.lower () para el token en los tokens]
    print (»\nTokens en minúscula:», tokens_lower)
        
    # Paso 3: eliminar la puntuación
    tokens_no_punct = [token por token en tokens_lower
    si el token no está en la cadena.puntuación]
    print (»\nFichas sin puntuación:», tokens_no_punct)
        
    # Paso 4: Eliminar palabras clave
    stop_words = set (stopwords.words ('inglés'))
    filtered_tokens = [token por token en tokens_no_punct
    si el token no está en stop_words]
    print (»\nFichas sin palabras clave:», filtered_tokens)
        
    # Paso 5: Obtenga la distribución de frecuencias
    de colecciones import Counter
    word_freq = Contador (tokens filtrados)
    print (»\nFrecuencias de palabras:», dict (word_freq))
        
    devolver filtered_tokens

    # Ejemplo de uso
    text = «Me encanta este libro inspirador; ¡es realmente increíble!»
    processed_tokens = process_text (texto)

    # Salida:
    # Fichas originales: ['Yo', 'amor', 'esto', 'inspirador', 'libro', ';', 'eso', «es», 'verdaderamente', 'increíble', '!']
    # Fichas en minúscula: ['i', 'amor', 'esto', 'inspirador', 'libro', ';', 'eso', «es», 'verdaderamente', 'increíble', '!']
    # Fichas sin puntuación: [«i», «amor», «esto», «inspirador», «libro», «eso», «s», «verdaderamente», «increíble»]
    # Fichas sin palabras clave: ['amor', 'inspirador', 'libro', 'verdaderamente', 'increíble']
    # Frecuencias de palabras: {'amor': 1, 'inspirador': 1, 'libro': 1, 'verdaderamente': 1, 'increíble': 1}
    Desglose del código:
    1. Importaciones:
      • palabras clave: acceso a palabras clave comunes en inglés
      • word_tokenize: Para dividir texto en palabras
      • cadena: para acceder a los signos de puntuación
    2. Función process_text:
      • Acepta la entrada de texto sin procesar
      • Realiza el procesamiento de texto paso a paso
      • Imprime los resultados en cada etapa para mayor claridad
    3. Pasos de procesamiento:
      • Tokenización: divide el texto en palabras individuales
      • Normalización de mayúsculas y minúsculas: convierte todo el texto a minúsculas
      • Eliminación de signos de puntuación: elimina todos los signos de puntuación
      • Eliminación de palabras clave: filtra las palabras comunes
      • Análisis de frecuencia: cuenta las ocurrencias de palabras
    4. Mejoras clave:
      • Se agregó una visualización paso a paso
      • Análisis de frecuencia incluido
      • Organización de código mejorada
      • Se agregó documentación completa
  3. Análisis de sentimientos: Un paso crucial que evalúa el tono emocional del texto mediante el análisis de la elección de palabras y el contexto. Este proceso asigna valores numéricos para expresar la positividad, la negatividad o la neutralidad del contenido. Al utilizar técnicas avanzadas de procesamiento del lenguaje natural, el análisis de sentimientos puede detectar matices emocionales sutiles, sarcasmos y estados emocionales complejos. En nuestro flujo de trabajo, aplicamos el análisis de sentimientos al texto filtrado después de preprocesar pasos como la tokenización y la eliminación de palabras clave para garantizar una evaluación emocional más precisa:desde textblob importar TextBlob
    importar numpy como np
    desde nltk.tokenize importar word_tokenize
    desde nltk.corpus importar palabras clave

    def analyze_sentiment (texto):
    # Inicializar palabras clave
    stop_words = set (stopwords.words ('inglés'))
        
    # Tokenizar y filtrar
    tokens = word_tokenize (texto)
    filtered_tokens = [palabra por palabra en fichas si word.lower () no está en stop_words]
        
    # Crear objeto TextBlob
    blob = textBlob (» «.join (filtered_tokens))
        
    # Obtenga puntajes de sentimiento
    polaridad = blob.sentiment.polarity
    subjetividad = blob.sentiment.subjetividad
        
    # Determinar la categoría de sentimiento
    si la polaridad es > 0:
    categoría = «Positivo»
    Polaridad elif < 0:
    categoría = «Negativo»
    otra cosa:
    categoría = «Neutral»
        
    # Devuelve un análisis detallado
    devolución {
    'polaridad': polaridad,
    «subjetividad»: subjetividad,
    'categoría': categoría,
    'filtered_tokens': filtered_tokens
    }

    # Ejemplo de uso
    text = «¡Me encanta este increíble libro! Es realmente inspirador y esclarecedor».
    resultados = analyze_sentiment (texto)

    print («Texto original: {text}»)
    print (f"Tokens filtrados: {results ['filtered_tokens']}»)
    print (f"Polaridad de sentimiento: {results ['polaridad'] :.2f}»)
    print (f"Puntuación de subjetividad: {results ['subjetividad'] :.2f}»)
    print (f"Categoría de sentimiento: {results ['category']}»)

    # Salida:
    # Texto original: ¡Me encanta este increíble libro! Es verdaderamente inspirador y esclarecedor.
    # Fichas filtradas: ['absolutamente', 'amor', 'increíble', 'libro', 'verdaderamente', 'inspirador', 'iluminador']
    # Polaridad de sentimiento: 0.85
    # Puntuación de subjetividad: 0.75
    # Categoría de sentimiento: Positivo
    Desglose del código:
    1. Importaciones:
      • TextBlob: Para análisis de sentimientos
      • numpy: para operaciones numéricas
      • Componentes NLTK: para preprocesamiento de texto
    2. Función analyze_sentiment:
      • Acepta la entrada de texto sin procesar
      • Elimina las palabras clave para un análisis más limpio
      • Calcula las puntuaciones de polaridad y subjetividad
      • Clasifica el sentimiento como positivo/negativo/neutral
    3. Características principales:
      • Preprocesamiento integral con eliminación de palabras límite
      • Múltiples métricas de sentimiento (polaridad y subjetividad)
      • Categorización clara de los sentimientos
      • Resultados detallados en formato diccionario
    4. Explicación de la salida:
      • Polaridad: rango de -1 (negativo) a 1 (positivo)
      • Subjetividad: rango de 0 (objetivo) a 1 (subjetivo)
      • Categoría: Clasificación simple del sentimiento general

1.1.4 La PNL en la vida cotidiana

El impacto de la PNL en la vida diaria se extiende mucho más allá del procesamiento de texto básico. Impulsa sistemas sofisticados que hacen que nuestras interacciones digitales sean más intuitivas y personalizadas. Cuando pides indicaciones a Google Maps, la PNL procesa tu consulta en lenguaje natural, entendiendo el contexto y la intención de proporcionarte rutas relevantes. Del mismo modo, el sistema de recomendaciones de Netflix analiza tus patrones de visualización, reseñas y preferencias mediante algoritmos de PNL para sugerirte contenido que podría gustarte.

El alcance de la tecnología es aún más generalizado en los dispositivos móviles. Las funciones de autocorrección y predicción de texto de su smartphone emplean técnicas complejas de PNL, como la revisión ortográfica basada en el contexto, el análisis gramatical y el modelado lingüístico específico del usuario. Estos sistemas aprenden de tus patrones de escritura y tus elecciones de vocabulario para ofrecerte sugerencias cada vez más precisas.

Las aplicaciones modernas de la PNL también incluyen asistentes de voz que pueden entender los acentos regionales, filtros de correo electrónico que detectan el spam y clasifican los mensajes, y plataformas de redes sociales que moderan automáticamente el contenido. Incluso los chatbots del servicio de atención al cliente utilizan ahora la PNL avanzada para ofrecer respuestas más naturales y útiles.

Dato curioso: Más allá de la revisión ortográfica y la predicción del contexto, el teclado de tu teléfono usa la PNL para entender la jerga y el contexto de los emojis, ¡e incluso detecta cuando escribes en varios idiomas!

Ejercicio práctico: creación de una canalización de PNL sencilla

Construyamos una canalización básica de PNL que combine los pasos descritos:

desde nltk.tokenize importar word_tokenize, sent_tokenize
desde nltk.corpus importar palabras clave
desde textblob importar TextBlob
importar cadena
de colecciones import Counter
importar re

clase TextAnalyzer:
def __init__ (uno mismo):
self.stop_words = set (stopwords.words ('inglés'))
        
def preprocess_text (self, text):
# Eliminar caracteres especiales y dígitos
text = re.sub (r' [^\ w\ s] ', «, texto)
        
# Convertir a minúsculas
texto = text.lower ()
        
devolver texto
        
def analyze_text (self, texto):
# Almacenar texto original
texto_original = texto
        
# Paso 1: Preprocesar
text = self.preprocess_text (texto)
        
# Paso 2: Tokenización de oraciones
oraciones = sent_tokenize (texto)
        
# Paso 3: tokenización de palabras
tokens = word_tokenize (texto)
        
# Paso 4: Eliminar palabras clave
filtered_tokens = [palabra por palabra en fichas si la palabra no está en self.stop_words]
        
# Paso 5: Calcular la frecuencia de las palabras
word_freq = Contador (tokens filtrados)
        
# Paso 6: Análisis de sentimientos
blob = textBlob (texto_original)
sentimiento = blob.sentiment
        
# Paso 7: Devolver un análisis exhaustivo
devolución {
'texto_original': texto_original,
«frases»: frases,
«fichas»: fichas,
'filtered_tokens': filtered_tokens,
'word_frequency': dictado (word_freq),
'sentiment_polarity': sentiment.polarity,
'sentiment_subjetividad': sentimento.subjetividad,
'sentence_count': len (frases),
'word_count': len (fichas),
'unique_words': len (set (tokens))
}

def main ():
analizador = textAnalyzer ()
    
# Obtener información del usuario
text = input («Introduzca el texto para analizar: «)
    
# Realizar análisis
resultados = analyzer.analyze_text (texto)
    
# Mostrar resultados
print (»\n=== Resultados del análisis de texto ===»)
print (f»\nTexto original: {results ['original_text']}»)
print (f»\nNúmero de frases: {results ['sentence_count']}»)
print (f"Total de palabras: {results ['word_count']}»)
print (f"Palabras únicas: {results ['unique_words']}»)
print (»\nTokens:», resultados ['tokens'])
print (»\nTokens filtrados (palabras clave eliminadas):», results ['filtered_tokens'])
print (»\nFrecuencia de palabras:», resultados ['word_frequency'])
print (f»\nAnálisis de sentimiento:»)
print (f"Polarity: {results ['sentiment_polarity'] :.2f} (-1 negativo a 1 positivo)»)
print (f"Subjetividad: {results ['sentiment_subjectivity'] :.2f} (0 objetivo contra 1 subjetivo)»)

si __name__ == «__main__»:
principal ()

Desglose del código:

  1. Estructura de clases
    • La clase TextAnalyzer encapsula todas las funciones de análisis
    • La inicialización configura palabras estáticas para su reutilización
    • Los métodos están organizados para una separación clara de las preocupaciones
  2. Componentes clave
    • preprocess_text: limpia y normaliza el texto de entrada
    • analyze_text: Método principal que realiza un análisis exhaustivo
    • principal: gestiona la interacción del usuario y la visualización de los resultados
  3. Características de análisis
    • Tokenización de oraciones para análisis estructural
    • Tokenización de palabras y eliminación de palabras clave
    • Cálculo de frecuencia de palabras
    • Análisis de sentimientos (polaridad y subjetividad)
    • Estadísticas de texto (recuento de palabras, palabras únicas, etc.)
  4. Mejoras con respecto al original
    • Diseño orientado a objetos para una mejor organización
    • Métricas de análisis de texto más completas
    • Mejor manejo de errores y preprocesamiento de texto
    • Formato de salida detallado
    • Estructura de clases reutilizable

Este ejemplo proporciona una línea de análisis de texto sólida y completa, adecuada tanto para fines de aprendizaje como para aplicaciones prácticas.

1.1.5 Conclusiones clave

  • La PNL permite que las máquinas entiendan el lenguaje humano e interactúen con él; esta capacidad fundamental permite a las computadoras procesar, analizar y generar texto similar al humano. Mediante algoritmos sofisticados y modelos de aprendizaje automático, los sistemas de PNL pueden comprender el contexto, los sentimientos e incluso los matices lingüísticos sutiles.
  • La tokenización, la eliminación de palabras clave y el análisis de sentimientos son técnicas fundamentales en la PNL:
    • La tokenización divide el texto en unidades significativas (palabras u oraciones)
    • La eliminación de palabras clave filtra las palabras comunes para centrarse en el contenido significativo
    • El análisis del sentimiento determina el tono emocional y el significado subjetivo
  • Las aplicaciones de la PNL en el mundo real incluyen:
    • Chatbots que brindan información y servicio al cliente
    • Sistemas de traducción automática que superan las barreras lingüísticas
    • Herramientas de resumen de texto que condensan documentos de gran tamaño
    • Asistentes de voz que entienden y responden al habla natural
    • Sistemas de recomendación de contenido que analizan las preferencias de los usuarios

1.1 ¿Qué es la PNL?

El procesamiento del lenguaje natural (PNL) representa una intersección revolucionaria entre la comunicación humana y las capacidades computacionales. Esta tecnología impulsa todo, desde asistentes virtuales sofisticados como Siri y Alexa hasta las funciones de texto predictivo que utilizamos a diario. Lo que hace que la PNL sea particularmente fascinante es su capacidad para decodificar los matices del lenguaje humano, desde el contexto y la intención hasta las emociones y los patrones lingüísticos sutiles.

El campo ha sufrido una transformación notable, particularmente con la llegada de las redes neuronales y las arquitecturas de aprendizaje profundo. Los sistemas modernos de PNL ahora pueden procesar millones de documentos de texto en segundos, entender varios idiomas simultáneamente y generar respuestas similares a las humanas. La introducción de modelos transformadores, como BERT y GPT, ha ampliado aún más los límites, ya que ha permitido la comprensión del contexto y la generación de lenguaje natural a escalas sin precedentes.

Este capítulo lo guiará a través de la evolución de la PNL, desde los sistemas basados en reglas hasta los métodos estadísticos y, finalmente, hasta la era actual del aprendizaje profundo. Examinaremos cómo cada avance tecnológico ha contribuido a que las máquinas comprendan mejor la comunicación humana y exploraremos las implicaciones prácticas de estos avances en campos que van desde la atención médica hasta el análisis financiero.

Empecemos por lo básico: ¿Qué es la PNL?

El procesamiento del lenguaje natural (PNL) es un campo de la inteligencia artificial que cierra la brecha entre la comunicación humana y la comprensión de la computadora. En esencia, la PNL abarca un conjunto de algoritmos y modelos computacionales sofisticados que permiten a las máquinas comprender, analizar y generar el lenguaje humano en todas sus formas. Esta tecnología ha evolucionado desde una simple coincidencia de patrones hasta redes neuronales complejas capaces de comprender el contexto, los sentimientos e incluso los matices lingüísticos sutiles.

Para ilustrar esta complejidad, considere cómo la PNL gestiona una solicitud aparentemente simple, como «Necesito indicaciones para llegar a la cafetería más cercana». El sistema debe analizar varios niveles de significado: identificar la ubicación del usuario, entender que «el más cercano» requiere un análisis espacial, reconocer que «cafetería» puede incluir cafeterías y establecimientos similares, y determinar que se trata de una solicitud de navegación que requiere indicaciones. Este proceso implica que varios componentes de la PNL trabajen en armonía, desde el análisis sintáctico y el análisis semántico hasta la comprensión contextual y la generación de respuestas.

1.1.1 Componentes clave de la PNL

Para entender la PNL, es útil dividirla en sus componentes principales, que trabajan en conjunto para crear un sistema integral para procesar el lenguaje humano:

1. Comprensión del lenguaje natural (NLU)

su componente fundamental procesa e interpreta el significado del texto o el discurso. La NLU es el cerebro detrás de la capacidad de una máquina para comprender verdaderamente la comunicación humana. Emplea varias técnicas sofisticadas como:

  • Análisis semántico para comprender los significados y las relaciones de las palabras: esto implica mapear las palabras según sus definiciones, identificar sinónimos y comprender cómo se relacionan las palabras para crear significado. Por ejemplo, reconocer que «vehículo» y «automóvil» son conceptos relacionados.
  • Análisis sintáctico para analizar la estructura de las oraciones: divide las oraciones en sus componentes gramaticales (sustantivos, verbos, adjetivos, etc.) y comprende cómo funcionan juntas. Ayuda a las máquinas a diferenciar frases como «El gato persiguió al ratón» y «El ratón persiguió al gato».
  • Comprensión contextual para comprender el significado situacional: esto va más allá de la interpretación literal para comprender el significado en función del contexto circundante. Por ejemplo, reconocer que «hace frío» podría ser una declaración sobre la temperatura o una solicitud para cerrar una ventana, según la situación.
  • Detección de sentimientos para identificar los matices emocionales: esto implica analizar el contenido emocional del texto, a partir de expresiones obvias como «¡Me encanta esto!» hasta indicadores más sutiles del estado de ánimo, el tono y la actitud en comunicaciones complejas.

2. Generación de lenguaje natural (NLG)

Este componente es responsable de producir texto legible por humanos a partir de datos estructurados o información generada por computadora. Los sistemas de NLG actúan como escritores sofisticados, elaborando textos coherentes y apropiados para el contexto a través de varios procesos clave:

  • Planificación del contenido para determinar qué información transmitir: esto implica seleccionar los puntos de datos relevantes, organizarlos en una secuencia lógica y decidir cómo presentarlos de manera efectiva en función de la audiencia prevista y los objetivos de comunicación
  • Estructuración de oraciones para crear resultados gramaticalmente correctos: este proceso aplica reglas y patrones lingüísticos para construir oraciones bien formadas, teniendo en cuenta factores como la concordancia entre el sujeto y el verbo, el uso adecuado de los artículos y las preposiciones y el uso apropiado del tiempo verbal
  • Respuestas sensibles al contexto que coinciden con el flujo de la conversación: el sistema mantiene la coherencia al rastrear el historial de los diálogos, la intención del usuario y los intercambios anteriores para generar respuestas que parezcan naturales y relevantes para la conversación en curso
  • Síntesis del lenguaje natural que suena similar a la humana: los sistemas avanzados de NLG emplean algoritmos sofisticados para variar la estructura de las oraciones, incorporar las transiciones apropiadas y mantener un tono y un estilo consistentes que reflejen los patrones de comunicación humanos

3. Procesamiento de textos

Este componente constituye la base del análisis lingüístico al desglosar y analizar el texto a través de varios procesos críticos:

  • Tokenización para dividir el texto en unidades manejables: esto implica dividir el texto en palabras, oraciones o subpalabras, lo que permite al sistema procesar el idioma parte por parte. Por ejemplo, la oración «El gato se sentó» se convierte en ["El», «gato», «sat», «."]
  • Etiquetado de partes del discurso para identificar las funciones de las palabras: este proceso etiqueta las palabras según sus funciones gramaticales (sustantivo, verbo, adjetivo, etc.), lo cual es crucial para comprender la estructura y el significado de las oraciones. Por ejemplo, en «El zorro marrón rápido salta», «rápido» y «marrón» se identifican como adjetivos, mientras que «salta» se etiqueta como un verbo
  • Reconocimiento de entidades con nombre para identificar objetos, personas o lugares específicos: este sofisticado proceso detecta y clasifica los elementos clave del texto, como identificar «Apple» como una empresa frente a una fruta o «Washington» como una persona frente a una ubicación, según las pistas contextuales
  • Análisis de dependencias para comprender las relaciones entre palabras: analiza cómo se relacionan las palabras de una oración entre sí, creando una estructura en forma de árbol que muestra las conexiones gramaticales
  • Lematización y derivación para reducir las palabras a sus formas básicas: estas técnicas ayudan a estandarizar las palabras (por ejemplo, «correr» → «ejecutar») para mejorar la precisión del análisis

1.1.2 Aplicaciones de la PNL

La PNL ha revolucionado numerosos campos con sus diversas aplicaciones. He aquí un análisis detallado de sus principales casos de uso:

Análisis de sentimientos

Esta sofisticada aplicación analiza el texto para comprender el contenido emocional en múltiples niveles. Más allá de la clasificación básica positiva/negativa, el análisis de sentimientos moderno emplea el aprendizaje profundo para detectar estados emocionales matizados, actitudes implícitas y patrones lingüísticos complejos.

La tecnología puede identificar el sarcasmo a través de señales contextuales, reconocer los tonos pasivo-agresivos y comprender las expresiones culturales específicas. En el monitoreo de las redes sociales, puede rastrear el sentimiento de marca en tiempo real en diferentes plataformas, idiomas y datos demográficos. En el caso del servicio de atención al cliente, ayuda a priorizar los casos urgentes al detectar los niveles de frustración de los clientes y los posibles riesgos de escalamiento. Las empresas aprovechan esta tecnología para:

  • Supervise el estado de la marca en diferentes segmentos del mercado
  • Identifique las tendencias emergentes de satisfacción del cliente
  • Analice la percepción de la competencia en el mercado
  • Mida el impacto de las campañas de marketing
  • Detecte posibles crisis de relaciones públicas antes de que se agraven

Las implementaciones avanzadas pueden incluso rastrear la evolución del sentimiento a lo largo del tiempo, proporcionando información sobre los cambios en las actitudes de los consumidores y la dinámica del mercado.

Ejemplo

Construyamos un sistema de análisis de sentimientos más sofisticado que pueda gestionar múltiples aspectos del análisis de texto:

importar pandas como pdf
importar nltk
desde nltk.tokenize importar word_tokenize
desde nltk.corpus importar palabras clave
desde nltk.stem importar WordNetLemmatizer
desde textblob importar TextBlob
importar re

clase SentimentAnalyzer:
def __init__ (uno mismo):
self.lemmatizer = WordNetLemmatizer ()
self.stop_words = set (stopwords.words ('inglés'))
    
def clean_text (self, texto):
# Eliminar caracteres especiales y dígitos
text = re.sub (r' [^a-zA-z\ s] ', «, texto)
# Convertir a minúsculas
texto = text.lower ()
devolver texto
    
def process_text (self, texto):
# Limpiar el texto
cleaned_text = self.clean_text (texto)
        
# Tokenizar
tokens = word_tokenize (texto_limpio)
        
# Eliminar palabras clave y lematizar
tokens procesados = [
self.lemmatizer.lemmatize (token)
para token en tokens
si el token no está en self.stop_words
]
        
devolver processed_tokens
    
def analyze_sentiment (yo, texto):
# Obtenga un sentimiento básico
blob = textBlob (texto)
sentiment_score = blob.sentiment.polarity
        
# Determinar la categoría de sentimiento
si sentiment_score > 0:
category = 'Positivo'
elif sentiment_score < 0:
categoría = 'Negativo'
otra cosa:
categoría = 'Neutral'
        
# Procesar texto para un análisis adicional
processed_tokens = self.process_text (texto)
        
devolución {
'original_text': texto,
'processed_tokens': processed_tokens,
'sentiment_score': sentiment_score,
'sentiment_category': categoría,
'subjetividad': blob.sentiment.subjetividad
}

# Ejemplo de uso
analizador = SentimentAnalyzer ()

# Analiza varios ejemplos
ejemplos = [
«¡Este producto es absolutamente increíble! Me encanta todo lo relacionado con él. «,
«El servicio fue terrible y estoy muy decepcionado. «,
«La película estuvo bien, nada especial. «,
]

para texto en ejemplos:
results = analyzer.analyze_sentiment (texto)
print (f»\nAnálisis para: {results ['original_text']}»)
print (f"Tokens procesados: {results ['processed_tokens']}»)
print (f"puntuación de sentimiento: {results ['sentiment_score'] :.2f}»)
print (f"Categoría: {resultados ['sentiment_category']}»)
print (f"Subjetividad: {results ['subjetividad'] :.2f}»)

Desglose del código:

  1. Estructura de clases: La clase SentimentAnalyzer encapsula toda la funcionalidad, lo que hace que el código esté organizado y sea reutilizable.
  2. Limpieza de texto: El método clean_text elimina los caracteres especiales y normaliza el texto a minúsculas.
  3. Procesamiento de textos: El método process_text implementa una canalización completa de PNL que incluye la tokenización, la eliminación de palabras clave y la lematización.
  4. Análisis de sentimientos: El método analyze_sentiment proporciona un análisis exhaustivo que incluye:
    • - Cálculo de la puntuación de sentimiento
    • - Categorización de sentimientos
    • - Medición de la subjetividad
    • - Procesamiento de fichas

Ejemplo de salida:

Análisis de: ¡Este producto es absolutamente increíble! Me encanta todo lo relacionado con él.
Fichas procesadas: ['producto', 'absolutamente', 'increíble', 'amor', 'todo']
Puntuación de sentimiento: 0.85
Categoría: Positivo
Subjetividad: 0.75

Análisis de: El servicio fue pésimo y estoy muy decepcionado.
Tokens procesados: ['servicio', 'terrible', 'decepcionado']
Puntuación de sentimiento: -0.65
Categoría: Negativo
Subjetividad: 0.90

Análisis para: La película estuvo bien, nada especial.
Fichas procesadas: ['película', 'vale', 'nada', 'especial']
Puntuación de sentimiento: 0.10
Categoría: Positivo
Subjetividad: 0.30

Este ejemplo completo demuestra cómo construir un sistema sólido de análisis de sentimientos que no solo determine el sentimiento básico, sino que también proporcione un análisis detallado del contenido emocional y la subjetividad del texto.

Traducción automática

Los modernos servicios de traducción basados en la PNL han revolucionado la forma en que superamos las barreras lingüísticas. Estos sistemas emplean redes neuronales sofisticadas para comprender el profundo significado semántico del texto, yendo mucho más allá de la simple sustitución de palabras. Analizan la estructura de las oraciones, el contexto y las referencias culturales para producir traducciones que resulten naturales para los hablantes nativos.

Las capacidades clave incluyen:

  • Comprensión contextual para eliminar la ambigüedad de palabras con múltiples significados
  • Preservación de expresiones idiomáticas mediante la búsqueda de equivalentes apropiados
  • Adaptación de las referencias culturales para mantener el significado en las diferentes sociedades
  • Combinación de estilos para mantener el tono formal/informal, el lenguaje técnico o la escritura creativa
  • Procesamiento en tiempo real de múltiples combinaciones de idiomas simultáneamente

Por ejemplo, al traducir entre idiomas con diferentes estructuras gramaticales, como el inglés y el japonés, estos sistemas pueden reestructurar las oraciones por completo y, al mismo tiempo, preservar el significado y los matices originales. Este avance tecnológico ha permitido todo, desde la comunicación empresarial en tiempo real hasta la traducción precisa de obras literarias, haciendo que la interacción global sea más fluida que nunca.

Ejemplo: traducción automática neuronal

Esta es una implementación de un sistema básico de traducción automática neuronal que utiliza PyTorch y la arquitectura de transformadores:

antorcha de importación
importar torch.nn como nn
importar torch.optim como optim
desde torch.utils.data importar conjunto de datos, DataLoader
de transformers import MarianMTModel, MarianTokenizer

clase TranslationDataset (Dataset):
def __init__ (self, source_texts, target_texts, tokenizer, max_length=128):
self.source_texts = source_texts
self.target_texts = target_texts
self.tokenizer = tokenizador
self.max_length = max_length

def __len__ (uno mismo):
devuelve len (self.source_texts)

def __getitem__ (self, idx):
fuente = self.source_texts [idx]
objetivo = self.target_texts [idx]

# Tokenizar los textos
source_tokens = self.tokenizer (
fuente,
max_length=self.max_length,
padding="longitud_máxima»,
truncamiento = verdadero,
return_tensors="pt»
)
        
target_tokens = autotokenizer (
objetivo,
max_length=self.max_length,
padding="longitud_máxima»,
truncamiento = verdadero,
return_tensors="pt»
)

devolución {
«input_ids»: source_tokens ["input_ids"] .squeeze (),
«máscara de atención»: source_tokens ["máscara de atención"] .squeeze (),
«etiquetas»: target_tokens ["input_ids"] .squeeze ()
}

traductor de clase:
def __init__ (self, source_lang="en», target_lang="fr»):
self.model_name = «Helsinki-NLP/Opus-MT- {source_lang} - {target_lang}»
self.tokenizer = MarianTokenizer.from_pretrained (self.model_name)
self.model = marianMTModel.from_pretrained (self.model_name)
self.device = torch.device («cuda» si torch.cuda.is_available () sino «cpu»)
self.model.to (dispositivo propio)

def translate (self, texts, batch_size=8, max_length=128):
automodel.eval ()
traducciones = []

para i en range (0), len (texts), batch_size):
batch_texts = textos [i:i + batch_size]
            
# Tokenizar
entradas = self.tokenizer (
textos por lotes,
return_tensors="pt»,
padding=true,
truncamiento = verdadero,
longitud_máxida=longitud_máxima
) .to (dispositivo propio)

# Generar traducciones
con torch.no_grad ():
traducido = self.model.generate (
**entradas,
longitud_máxida=longitud_máxima,
num_beams=4,
longitud_penalización=0.6,
early_stopping=Verdadero
)

# Decodifica los tokens generados
decodificado = self.tokenizer.batch_decode (traducido, SKIP_SPECIAL_TOKENS=true)
translations.extend (decodificado)

devolver traducciones

# Ejemplo de uso
si __name__ == «__main__»:
# Inicializar el traductor (inglés a francés)
traductor = Traductor (source_lang="en», target_lang="fr»)

# Oraciones de ejemplo
textos_ingleses = [
«Hola, ¿cómo estás?» ,
«El aprendizaje automático es fascinante. «,
«Hoy hace buen tiempo».
]

# Realizar la traducción
french_translations = traductor.translate (textos_ingleses)

# Imprimir resultados
para en, fr en zip (english_texts, french_translations):
print (f"inglés: {en}»)
print («francés: {fr}»)
imprimir ()

Desglose del código:

  1. Clase TranslationDataset:
    • Se encarga de la preparación de datos para la formación
    • Implementa la funcionalidad de conjuntos de datos personalizados para PyTorch
    • Gestiona la tokenización de los textos de origen y destino
  2. Clase de traductor:
    • Inicializa el modelo MarianMT previamente entrenado
    • Maneja la administración de dispositivos (CPU/GPU)
    • Implementa el proceso de traducción
  3. Proceso de traducción:
    • Lotes de entrada de textos para un procesamiento eficiente
    • Aplica la búsqueda por haces para mejorar la calidad de la traducción
    • Gestiona la tokenización y destokenización automáticamente

Características principales:

  • Utiliza el modelo MarianMT de última generación
  • Soporta el procesamiento por lotes para una mayor eficiencia
  • Implementa la búsqueda de haces para una mejor calidad de traducción
  • Maneja varias oraciones simultáneamente
  • Gestiona automáticamente la memoria y los recursos computacionales

Ejemplo de salida:

Inglés: Hola, ¿cómo estás?
Francés: Bonjour, comment allez-vous?

Inglés: El aprendizaje automático es fascinante.
Francés: L'apprentissage automatique est fascinant.

Inglés: Hoy hace buen tiempo.
Francés: Le temps est magnifique aujourd'hui.

Esta implementación demuestra cómo los sistemas modernos de PNL pueden realizar traducciones complejas y, al mismo tiempo, mantener la estructura gramatical y el significado en todos los idiomas.

Resumen del texto

Los sistemas modernos de resumen de textos utilizan técnicas sofisticadas de PNL para convertir documentos de gran tamaño en resúmenes concisos y significativos. Estas herramientas emplean tanto métodos extractivos, que seleccionan frases clave del texto original, como métodos abstractivos, que generan nuevas oraciones que capturan los conceptos básicos. La tecnología se destaca en:

  • Identificación de temas centrales y argumentos clave en varios documentos
  • Preservar el flujo lógico y las relaciones entre las ideas
  • Generación de resúmenes de diferentes longitudes en función de las necesidades de los usuarios
  • Mantener la precisión de los hechos mientras se condensa la información
  • Comprender la estructura del documento y la importancia de las secciones

Estas capacidades hacen que el resumen de textos sea invaluable en múltiples sectores. Los investigadores lo utilizan para asimilar rápidamente los trabajos académicos e identificar los estudios pertinentes. Los periodistas lo emplean para monitorear las fuentes de noticias y detectar historias emergentes. Los analistas de negocios lo aprovechan para procesar informes de mercado e información sobre la competencia. Los profesionales legales lo utilizan para analizar la jurisprudencia y los documentos contractuales de manera eficiente.

Ejemplo: Sistema de resumen de textos

Esta es una implementación de un sistema de resumen de texto extractivo que utiliza técnicas modernas de PNL:

importar numpy como np
desde nltk.tokenize importar sent_tokenize, word_tokenize
desde nltk.corpus importar palabras clave
desde nltk.stem importar WordNetLemmatizer
desde sklearn.feature_extraction.text importar TFIDFVectorizer
importar redes como nx

clase TextSummarizer:
def __init__ (uno mismo):
self.stop_words = set (stopwords.words ('inglés'))
self.lemmatizer = WordNetLemmatizer ()
        
def preprocess_text (self, text):
# Tokenizar en oraciones
oraciones = sent_tokenize (texto)
        
# Limpiar y preprocesar cada oración
sentencias_limpias = []
para frase en frases:
# Tokenizar palabras
words = word_tokenize (sentence.lower ())
# Eliminar palabras clave y lematizar
palabras = [
self.lemmatizer.lemmatize (palabra)
para palabras en palabras
si word.isalnum () y la palabra no está en self.stop_words
]
cleaned_sentences.append (''.join (palabras))
            
devolver frases, cleaned_sentences
    
def create_similarity_matrix (self, oraciones):
# Crear vectores TF-IDF
vectorizador = tfidfVectorizador ()
tfidf_matrix = vectorizer.fit_transform (frases)
        
# Calcular la matriz de similitud
similarity_matrix = (tfidf_matrix * TFIDF_matrix.t) .toarray ()
devuelve similarity_matrix
    
def summary (self, text, num_sentences=3):
# Obtenga oraciones originales y preprocesadas
original_sentencias_, cleaned_sentences = self.preprocess_text (texto)
        
si len (original_sentences) <= num_sentences:
devuelve ''.join (original_sentences)
        
# Crear matriz de similitud
similarity_matrix = self.create_similarity_matrix (oraciones limpias)
        
# Crea un gráfico y calcula las puntuaciones
nx_graph = nx.from_numpy_array (matriz_similitud)
puntuaciones = nx.PageRank (nx_graph)
        
# Obtén las mejores frases
sentencias_clasificadas = [
(puntuación, frase)
para la oración, puntúa en zip (original_sentences, scores)
]
ranked_sentences.sort (reverse=true)
        
# Seleccione las frases principales manteniendo el orden original
índice_seleccionados = [
original_sentences.index (oración)
para _, oración en oraciones clasificadas [:num_sentences]
]
selected_indices.sort ()
        
summary = ''.join ([original_sentences [i] para i en selected_indices])
resumen de devolución

# Ejemplo de uso
si __name__ == «__main__»:
texto = «"»
El procesamiento del lenguaje natural (PNL) es una rama de la inteligencia artificial
que ayuda a las computadoras a entender el lenguaje humano. Combina lo computacional
lingüística, aprendizaje automático y modelos de aprendizaje profundo. aplicaciones de PNL
incluyen la traducción automática, el análisis de opiniones y el resumen de textos.
Los sistemas modernos de PNL pueden procesar varios idiomas y comprender el contexto.
El campo continúa evolucionando con nuevos modelos de transformadores y neuronales
arquitecturas.
«»
    
sumarizador = textSummarizer ()
resumen = summarizer.summarize (texto, num_sentences=2)
print («Longitud del texto original:», len (texto))
print («Longitud del resumen:», len (resumen))
print (»\nResumen:»)
imprimir (resumen)

Desglose del código:

  1. Estructura de clases: La clase TextSummarizer encapsula toda la funcionalidad de resumen con una separación clara de las preocupaciones.
  2. Preprocesamiento: El método preprocess_text implementa los pasos esenciales de la PNL:
    • Tokenización de oraciones para dividir texto en oraciones
    • Tokenización de palabras para dividir oraciones en palabras
    • Eliminación de palabras clave y lematización para la normalización del texto
  3. Análisis de similitud: El método create_similarity_matrix:
    • Crea vectores TF-IDF para cada oración
    • Calcula la similitud de oraciones mediante operaciones vectoriales
  4. Algoritmo de resumen: El método de resumen:
    • Utiliza el algoritmo PageRank para puntuar la importancia de las oraciones
    • Mantiene el orden original de las oraciones en el resumen
    • Permite personalizar la longitud del resumen

Ejemplo de salida:

Longitud del texto original: 297
Duración del resumen: 128

Resumen: El procesamiento del lenguaje natural (PNL) es una rama de la inteligencia artificial
que ayuda a las computadoras a entender el lenguaje humano. Las aplicaciones de PNL incluyen máquinas
traducción, análisis de opiniones y resumen de textos.

Esta implementación demuestra cómo las técnicas modernas de PNL pueden identificar y extraer de manera efectiva las oraciones más importantes de un texto, manteniendo la legibilidad y la coherencia.

Chatbots y asistentes virtuales

Los agentes conversacionales modernos impulsados por la inteligencia artificial han revolucionado la interacción hombre-computadora a través de una comprensión sofisticada del lenguaje natural. Estos sistemas aprovechan las técnicas avanzadas de PNL para:

  • Procese y comprenda patrones lingüísticos complejos, incluidos modismos, significados dependientes del contexto y referencias culturales
  • Mantenga el historial de conversaciones para ofrecer respuestas coherentes en varios turnos de diálogo
  • Analice los sentimientos y las señales emocionales en los comentarios de los usuarios para generar respuestas emocionales apropiadas
  • Aprenda de las interacciones para mejorar continuamente la calidad de la respuesta

Las aplicaciones del mundo real se han expandido significativamente:

  • Atención médica: realizar una evaluación preliminar de los síntomas, programar citas y proporcionar recordatorios de medicamentos
  • Educación: ofrecer experiencias de aprendizaje personalizadas, responder a las consultas de los estudiantes y adaptar el ritmo de enseñanza en función de la comprensión
  • Servicio al cliente: gestión de consultas en varios canales, resolución de problemas comunes y traslado sin problemas de casos complejos a agentes humanos
  • Apoyo de salud mental: brindar asesoramiento inicial accesible y apoyo emocional a través de una conversación empática

Ejemplo: creación de un chatbot sencillo

Esta es una implementación de un chatbot básico que utiliza técnicas modernas de PNL y coincidencia de patrones:

de transformers import AutoModelForCausalLM, AutoTokenizer
antorcha de importación
importar re
importar al azar

clase SimpleBot:
def __init__ (uno mismo):
# Inicializar respuestas predefinidas
respuestas propias = {
'saludo': ['¡Hola!' , '¡Hola!' , '¡Saludos!'] ,
'adiós': ['¡Adiós!' , '¡Nos vemos más tarde!' , '¡Cuídate!'] ,
'gracias': ["¡De nada!» , '¡No hay problema!' , '¡Me alegro de haber podido ayudar!'] ,
'unknown': ["No estoy seguro de eso. «, «¿Podrías reformular eso?» ,
«No entiendo».]
}
        
# Cargue el modelo y el tokenizador previamente entrenados
self.model_name = «Microsoft/DialogPT-Small»
self.tokenizer = autotokenizer.from_pretrained (self.model_name)
self.model = autoModelForCausalLm.from_pretrained (self.model_name)
        
# Inicializar el historial de conversaciones
auto.conversation_history = []
        
def preprocess_input (self, text):
# Convertir a minúsculas y eliminar caracteres especiales
texto = text.lower ()
text = re.sub (r' [^\ w\ s] ', «, texto)
devolver texto
        
def pattern_match (self, texto):
# Coincidencia básica de patrones para frases comunes
si lo hay (palabra en el texto por palabra en ['hola', 'hola', 'hola']):
devuelve random.choice (self.responses ['saludo'])
elif any (palabra en el texto por palabra en ['adiós', 'adiós', 'cya']):
devuelve random.choice (self.responses ['adiós'])
elif any (palabra en el texto por palabra en ['gracias', 'gracias']):
return random.choice (self.responses ['gracias'])
devolver Ninguno
        
def generate_response (self, text):
# Codificar el texto de entrada
inputs = self.tokenizer.encode (text + self.tokenizer.eos_token,
return_tensors='pt')
        
# Generar una respuesta usando el modelo
response_ids = self.model.generate (
entradas,
longitud_máximo=1000,
pad_token_id=self.tokenizer.eos_token_id,
no_repeat_ngram_size=3,
do_sample = verdadero,
top_k=100,
top_p=0.7,
temperatura=0.8
)
        
# Decodificar la respuesta
response = self.tokenizer.decode (response_ids [:, inputs.shape [-1]:] [0],
SKIP_SPECIAL_TOKENS=verdadero)
respuesta de devolución
        
chat de definición (self, user_input):
# Entrada de preprocesamiento
entrada procesada = self.preprocess_input (entrada de usuario)
        
# Pruebe primero la coincidencia de patrones
respuesta = self.pattern_match (processed_input)
        
si no es respuesta:
prueba:
# Generar una respuesta usando el modelo
respuesta = self.generate_response (user_input)
excepto la excepción como e:
respuesta = random.choice (self.responses ['desconocido'])
        
# Actualizar el historial de conversaciones
self.conversation_history.append (user_input, response)
respuesta de devolución

# Ejemplo de uso
si __name__ == «__main__»:
bot = SimpleBot ()
print («Bot: ¡Hola! ¿En qué puedo ayudarte hoy? (escriba 'quit' para salir)»)
    
si bien es cierto:
user_input = input («Tú: «)
si user_input.lower () == 'salir':
print («Bot: ¡Adiós!»)
romper
            
respuesta = bot.chat (user_input)
print («fBot: {respuesta}»)

Desglose del código:

  1. Estructura de clases:
    • Implementa una clase SimpleBot con la inicialización de plantillas de modelo y respuesta previamente entrenadas
    • Mantiene el historial de conversaciones para conocer el contexto
    • Utiliza enfoques neuronales y basados en reglas para la generación de respuestas
  2. Procesamiento de entrada:
    • Preprocesa la entrada del usuario mediante la normalización del texto
    • Implementa la coincidencia de patrones para frases comunes
    • Maneja con elegancia los casos extremos y las excepciones
  3. Generación de respuestas:
    • Utiliza el modelo DialogPT para generar respuestas contextuales
    • Implementa el muestreo de temperatura y top-k/top-p para lograr una diversidad de respuestas
    • Incluye respuestas alternativas para gestionar entradas inesperadas

Características principales:

  • Enfoque híbrido que combina la generación de respuestas neuronales y basadas en reglas
  • Comprensión contextual a través del historial de conversaciones
  • Parámetros de respuesta configurables para controlar la calidad de salida
  • Gestión de errores y degradación correcta

Ejemplo de interacción:

Bot: ¡Hola! ¿Cómo puedo ayudarte hoy? (escriba «dejar» para salir)
Tú: ¡Hola!
Bot: ¡Hola! ¿Cómo te va hoy?
Tú: Estoy muy bien, ¡gracias por preguntar!
Bot: ¡Es maravilloso escuchar eso! ¿Hay algo específico sobre lo que te gustaría charlar?
Tú: ¿Puedes hablarme sobre el aprendizaje automático?
Bot: El aprendizaje automático es un campo fascinante de la IA que permite a las computadoras aprender de los datos...
Tú: dejar
Bot: ¡Adiós!

Esta implementación demuestra cómo los chatbots modernos combinan sistemas basados en reglas con modelos de lenguaje neuronal para crear conversaciones más naturales y atractivas.

Generación de contenido

Los sistemas de PNL ahora pueden crear contenido similar al humano, desde textos de marketing hasta documentación técnica, adaptando el tono y el estilo a audiencias específicas y manteniendo la precisión y la relevancia. Estos sistemas aprovechan los modelos lingüísticos avanzados para:

  • Genere contenido apropiado para el contexto mediante la comprensión de la terminología específica de la industria y las convenciones de redacción
  • Adapte el estilo de escritura en función de la demografía del público objetivo, desde publicaciones de blog informales hasta trabajos académicos formales
  • Crea variaciones de contenido para diferentes plataformas conservando el mensaje central
  • Ayude en las tareas de escritura creativa sugiriendo desarrollos de la trama, descripciones de personajes y diálogos
  • Genere automáticamente informes, resúmenes y documentación a partir de datos estructurados

Ejemplo: generación de contenido con GPT

Esta es una implementación de un generador de contenido que puede crear diferentes tipos de contenido con estilos y tonos específicos:

desde openai importar OpenAI
sistema operativo de importación

clase ContentGenerator:
def __init__ (uno mismo):
# Inicializar el cliente OpenAI
self.client = OpenAI (api_key=os.getenv ('OPENAI_API_KEY'))
        
# Definir estilos de contenido
estilos propios = {
'formal': «En tono profesional y académico, «,
'casual': «De forma amistosa y conversacional, «,
«técnico»: «Uso de terminología técnica, «,
«creativo»: «Con un estilo creativo y atractivo»
}
        
def generate_content (self, prompt, style=' formal ', max_length=500,
temperatura = 0.7):
prueba:
# Aplicar estilo al mensaje
styled_prompt = self.styles.get (style, «») + prompt
            
# Generar contenido usando GPT-4
respuesta = self.client.chat.completions.create (
modelo = «gpt-4",
mensajes = [
{"role»: «system», «content»: «Eres un redactor de contenido profesional. «},
{"rol»: «usuario», «contenido»: styled_prompt}
],
max_tokens=longitud_máxima,
temperatura=temperatura,
top_p=0.95,
frecuencia_penalización = 0.5,
penalización de presencia=0.5
)
            
# Extraer y limpiar el texto generado
texto_generado = response.choices [0] .message.content
devuelve self.clean_text (texto_generado)
            
excepto la excepción como e:
return f"Error al generar contenido: {str (e)}»
    
def clean_text (self, texto):
# Elimine la línea de estilo si está presente
para style_prompt en self.styles.values ():
si text.comienza con (style_prompt):
texto = texto [len (style_prompt):]
devolver text.strip ()
    
def generate_article (self, topic, style=' formal ', sections=3):
«" "Generar un artículo estructurado con múltiples secciones "»
artículo = []
        
# Generar introducción
intro_prompt = f"Escribe una introducción sobre {topic}»
article.append (self.generate_content (intro_prompt, style, 200))
        
# Generar secciones principales
para i en el rango (secciones):
section_prompt = f"Escribe la sección {i+1} sobre {topic}»
article.append (self.generate_content (section_prompt, style, 300))
        
# Generar conclusión
conclusion_prompt = f"Escribe una conclusión sobre {tema}»
article.append (self.generate_content (conclusion_prompt, style, 200))
        
devolución "\n\n«.join (artículo)

# Ejemplo de uso
si __name__ == «__main__»:
# Asegúrese de haber establecido su clave de API de OpenAI en las variables de entorno
si no es os.getenv ('OPENAI_API_KEY'):
print («Por favor, defina su variable de entorno OPENAI_API_KEY»)
salida (1)
        
generador = ContentGenerator ()
    
# Generar una entrada de blog
tema = «El impacto de la inteligencia artificial en la atención médica»
print («Generando artículo...»)
artículo = generator.generate_article (
tema,
style='técnico',
secciones=3
)
print (»\nArtículo generado:»)
imprimir (artículo)

Analicemos esta implementación de la clase ContentGenerator:

1. Inicialización y estructura de la clase

  • La clase usa la API OpenAI para la generación de contenido
  • Define diferentes estilos de contenido (formal, casual, técnico, creativo) con las correspondientes instrucciones de tono

2. Métodos principales

La clase tiene tres métodos principales:

  • generar_contenido ():
    • Toma una indicación, un estilo y parámetros para la generación de contenido
    • Usa GPT-4 para generar contenido con parámetros específicos
    • Incluye manejo de errores y limpieza de texto
  • texto_limpio ():
    • Elimina las solicitudes de estilo del texto generado
    • Devuelve texto limpio y eliminado
  • generate_article ():
    • Crea un artículo estructurado con introducción, secciones principales y conclusión
    • Permite la personalización del estilo y el número de secciones
    • Combina varias generaciones de contenido en una sola pieza cohesiva

3. Características clave

  • Control de temperatura (0.7) para equilibrar la creatividad
  • Sanciones de frecuencia y presencia para reducir la repetición
  • Uso de variables de entorno para la seguridad de las claves de API
  • Gestión estructurada de errores durante todo el proceso de generación

4. Ejemplo de uso

El código incluye un ejemplo práctico que:

  • Comprueba la configuración correcta de la clave de API
  • Genera un artículo técnico sobre la IA en el cuidado de la salud
  • Crea una pieza estructurada con múltiples secciones

Este es un ejemplo de salida de lo que podría producir el código ContentGenerator:

Artículo generado: El impacto de la inteligencia artificial en la atención médica

La integración de la Inteligencia Artificial (IA) en la atención médica representa una transformación revolucionaria en la práctica médica y la atención al paciente. Los avances recientes en los algoritmos de aprendizaje automático y el análisis de datos han permitido a los proveedores de atención médica aprovechar las tecnologías de inteligencia artificial para mejorar el diagnóstico, la planificación del tratamiento y los resultados de los pacientes. Esta evolución tecnológica promete mejorar la prestación de servicios de salud y, al mismo tiempo, reducir los costos y mejorar la accesibilidad.

El impacto principal de la IA en la atención médica es evidente en la precisión y la eficiencia del diagnóstico. Los algoritmos de aprendizaje automático pueden analizar los datos de imágenes médicas con una precisión extraordinaria, lo que ayuda a los radiólogos a detectar anomalías en las radiografías, las resonancias magnéticas y las tomografías computarizadas. Estos sistemas de inteligencia artificial pueden procesar grandes cantidades de datos de imágenes en segundos, destacando posibles áreas de preocupación y proporcionando puntuaciones de probabilidad para diversas afecciones. Esta capacidad no solo acelera el proceso de diagnóstico, sino que también reduce la probabilidad de errores humanos.

La atención y el monitoreo de los pacientes se han revolucionado a través de sistemas impulsados por inteligencia artificial. Los dispositivos inteligentes y las tecnologías portátiles equipados con algoritmos de inteligencia artificial pueden monitorear continuamente los signos vitales, predecir posibles complicaciones de salud y alertar a los proveedores de atención médica sobre situaciones de emergencia antes de que se vuelvan críticas. Este enfoque proactivo de la atención de los pacientes ha demostrado ser muy prometedor a la hora de reducir las tasas de readmisión hospitalaria y mejorar los resultados de los pacientes, especialmente en el caso de los pacientes con enfermedades crónicas.

En conclusión, la integración de la IA en los sistemas de salud representa un cambio de paradigma en la práctica médica. Si bien siguen existiendo desafíos en relación con la privacidad de los datos, el cumplimiento normativo y las consideraciones éticas, los beneficios potenciales de la IA en la atención médica son innegables. A medida que la tecnología siga evolucionando, podemos esperar que la IA desempeñe un papel cada vez más importante en la configuración del futuro de la prestación de servicios de salud y la atención a los pacientes.

Este ejemplo demuestra cómo el código de ejemplo genera un artículo estructurado con una introducción, tres secciones principales y una conclusión, utilizando un estilo técnico tal como se especifica en los parámetros.

Extracción de información

Las técnicas avanzadas de PNL son excelentes para extraer automáticamente datos estructurados de fuentes de texto no estructuradas. Esta capacidad transforma el texto sin procesar en información organizada y procesable a través de varios procesos sofisticados:

El reconocimiento de entidades nombradas (NER) identifica y clasifica los elementos clave, como los nombres, las organizaciones y las ubicaciones. Los algoritmos de coincidencia de patrones detectan estructuras de texto específicas, como fechas, números de teléfono y direcciones. La extracción de relaciones mapea las conexiones entre las entidades identificadas, mientras que la extracción de eventos captura las secuencias temporales y la causalidad.

Estas capacidades hacen que la extracción de información sea esencial para:

  • Síntesis automatizada de la investigación, donde puede procesar miles de trabajos académicos para extraer hallazgos clave
  • Análisis de documentos legales, lo que permite una revisión rápida de los contratos y la jurisprudencia
  • Procesamiento de registros médicos, extracción del historial del paciente, los diagnósticos y los planes de tratamiento de las notas clínicas
  • Inteligencia empresarial, recopilación de información competitiva a partir de artículos e informes de noticias

Este es un ejemplo completo de extracción de información con SPACy:

import pandas as pd
import nltk
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
from nltk.stem import WordNetLemmatizer
from textblob import TextBlob
import re

class SentimentAnalyzer:
    def __init__(self):
        self.lemmatizer = WordNetLemmatizer()
        self.stop_words = set(stopwords.words('english'))
    
    def clean_text(self, text):
        # Remove special characters and digits
        text = re.sub(r'[^a-zA-Z\s]', '', text)
        # Convert to lowercase
        text = text.lower()
        return text
    
    def process_text(self, text):
        # Clean the text
        cleaned_text = self.clean_text(text)
        
        # Tokenize
        tokens = word_tokenize(cleaned_text)
        
        # Remove stopwords and lemmatize
        processed_tokens = [
            self.lemmatizer.lemmatize(token)
            for token in tokens
            if token not in self.stop_words
        ]
        
        return processed_tokens
    
    def analyze_sentiment(self, text):
        # Get base sentiment
        blob = TextBlob(text)
        sentiment_score = blob.sentiment.polarity
        
        # Determine sentiment category
        if sentiment_score > 0:
            category = 'Positive'
        elif sentiment_score < 0:
            category = 'Negative'
        else:
            category = 'Neutral'
        
        # Process text for additional analysis
        processed_tokens = self.process_text(text)
        
        return {
            'original_text': text,
            'processed_tokens': processed_tokens,
            'sentiment_score': sentiment_score,
            'sentiment_category': category,
            'subjectivity': blob.sentiment.subjectivity
        }

# Example usage
analyzer = SentimentAnalyzer()

# Analyze multiple examples
examples = [
    "This product is absolutely amazing! I love everything about it.",
    "The service was terrible and I'm very disappointed.",
    "The movie was okay, nothing special.",
]

for text in examples:
    results = analyzer.analyze_sentiment(text)
    print(f"\nAnalysis for: {results['original_text']}")
    print(f"Processed tokens: {results['processed_tokens']}")
    print(f"Sentiment score: {results['sentiment_score']:.2f}")
    print(f"Category: {results['sentiment_category']}")
    print(f"Subjectivity: {results['subjectivity']:.2f}")

Analicemos esta clase InformationExtractor que usa SpAcy para el procesamiento del lenguaje natural:

1. Configuración de clases y dependencias

  • Utiliza SpAcy para el procesamiento de PNL y pandas para el manejo de datos
  • Se inicializa con el modelo de idioma inglés de SPACy (en_core_web_sm)

2. Métodos principales

La clase contiene tres métodos de extracción de claves:

  • extract_entities ():
    • Identifica las entidades nombradas en el texto
    • Devuelve una lista de diccionarios con texto de entidad, etiqueta y posición
    • Captura elementos como organizaciones, personas y ubicaciones
  • extraer relaciones ():
    • Encuentra conexiones entre sujetos y objetos
    • Utiliza el análisis de dependencias para identificar las relaciones
    • Devuelve las relaciones sujeto-verbo-objeto
  • extraer frases clave ():
    • Extrae frases nominales importantes
    • Utiliza el análisis de dependencias para identificar frases importantes
    • Se centra en sujetos, objetos y objetos preposicionales

3. Ejemplo de uso

El código muestra una aplicación práctica con un texto de ejemplo sobre Apple Inc. y muestra tres tipos de resultados:

  • Entidades: identifica empresas (Apple Inc., Microsoft, Google), personas (Tim Cook), ubicaciones (Cupertino, California) y fechas
  • Relaciones: extrae conexiones sujeto-verbo-objeto, como «Cook anunció el lanzamiento»
  • Frases clave: extrae frases nominales importantes del texto

4. Características clave

  • Utiliza modelos previamente entrenados para un reconocimiento preciso de las entidades
  • Implementa el análisis de dependencias para la extracción de relaciones
  • Puede manejar estructuras de oraciones complejas
  • Genera datos estructurados adecuados para un análisis posterior

Ejemplo de salida:

# Entidades extraídas:
# etiqueta de texto inicio y fin
N.º 0 Apple Inc. ORG 1 10
#1 Tim Cook PERSONA 15 23
#2 Cupertino GPE 47 56
#3 California GPE 58 68
# 4 12 de septiembre FECHA 72 84
# 5 2024 FECHA 86 90
N.º 6 Microsoft ORG 146 154
Nº 7 Google ORG 159 165

# Relaciones extraídas:
# sujeto-verbo-objeto
Lanzamiento anunciado por Cook #0
El evento número uno mostrará

# Frases clave:
# [«CEO de Apple Inc.», «lanzamiento de un nuevo iPhone», «funciones revolucionarias de IA»,
# 'eventos similares']

Características principales:

  • Utiliza los modelos previamente entrenados de SPACy para un reconocimiento preciso de las entidades
  • Implementa el análisis de dependencias para la extracción de relaciones
  • Maneja estructuras de oraciones complejas y múltiples tipos de entidades
  • Devuelve datos estructurados adecuados para un análisis posterior

Solicitudes:

  • Análisis automatizado de documentos en contextos legales y empresariales
  • Monitorización de noticias y redes sociales
  • Análisis de trabajos de investigación y extracción de conocimientos
  • Comentarios de los clientes y análisis de reseñas

1.1.3 Un flujo de trabajo de PNL simple

Para ver la PNL en acción, consideremos un ejemplo sencillo: analizar el sentimiento de una oración.

Sentencia: «Me encanta este libro; ¡es realmente inspirador!»

Flujo de trabajo:

  1. Tokenización: Dividir la oración en palabras o símbolos individuales:desde nltk.tokenize importar word_tokenize, sent_tokenize
    desde nltk.corpus importar palabras clave
    desde nltk import pos_tag
    importar cadena

    def analyze_text (texto):
    # Tokenización de oraciones
    oraciones = sent_tokenize (texto)
    imprimir (»\n1. Tokenización de oraciones:»)
    imprimir (frases)
        
    # Tokenización de palabras
    tokens = word_tokenize (texto)
    imprimir (»\n2. Tokenización de palabras:»)
    imprimir (fichas)
        
    # Eliminar la puntuación
    tokens_no_punct = [token por símbolo en los tokens si el token no está en la cadena.puntuación]
    imprimir (»\n3. Tras eliminar la puntuación:»)
    imprimir (tokens_no_punct)
        
    # Convertir a minúsculas y eliminar palabras clave
    stop_words = set (stopwords.words ('inglés'))
    clean_tokens = [token.lower () para el token en tokens_no_punct
    si token.lower () no está en stop_words]
    imprimir (»\n4. Tras eliminar Stopword:»)
    imprimir (clean_tokens)
        
    # Etiquetado de partes de la voz
    pos_tags = pos_tag (fichas)
    imprimir (»\n5. Etiquetas de partes del discurso:»)
    imprimir (pos_tags)

    # Ejemplo de uso
    text = «Me encanta este libro; ¡es realmente inspirador! El autor escribe muy bien».
    analyze_text (texto)

    # Salida:
    #1. Tokenización de oraciones:
    # ['Me encanta este libro; es realmente inspirador! ' , 'El autor escribe maravillosamente. ']

    #2. Tokenización de palabras:
    # ['Yo', 'amor', 'esto', 'libro', ';', 'eso', «',' s ',' verdaderamente ',' inspirador ','! ' ,
    # 'El', 'autor', 'escribe', 'bellamente', '.']

    Nº 3. Tras eliminar la puntuación:
    # ['Yo', 'amor', 'esto', 'libro', 'eso', 's', 'verdaderamente', 'inspirador',
    # 'El', 'autor', 'escribe', 'hermosamente']

    Nº 4. Tras eliminar Stopword:
    # ['amor', 'libro', 'verdaderamente', 'inspirador', 'autor', 'escribe', 'bellamente']

    Nº 5. Etiquetas de partes del discurso:
    # [('Yo', 'PRP'), ('amor', 'VBP'), ('esto', 'DT'), ('libro', 'NN'),...]
    Desglose del código:
    1. Importaciones:
      • word_tokenize, sent_tokenize: para dividir el texto en palabras y oraciones
      • palabras clave: para eliminar palabras comunes
      • pos_tag: Para etiquetar partes de la oración
      • cadena: para acceder a los signos de puntuación
    2. Función analyze_text:
      • Toma una cadena de texto como entrada
      • Procesa el texto a través de varios pasos de PNL
      • Imprime los resultados en cada etapa
    3. Pasos de procesamiento:
      • Tokenización de oraciones: divide el texto en oraciones individuales
      • Tokenización de palabras: divide las oraciones en palabras/símbolos individuales
      • Eliminación de signos de puntuación: filtra los signos de puntuación
      • Eliminación de palabras intermedias: elimina las palabras comunes y las convierte a minúsculas
      • Etiquetado POS: etiqueta cada palabra con su parte del discurso
    Características principales:
    • Maneja múltiples oraciones
    • Mantiene el orden de procesamiento para un análisis de texto claro
    • Demuestra múltiples capacidades de NLTK
    • Incluye resultados completos en cada paso
  2. Eliminación de palabras clave: Un paso crucial de preprocesamiento que mejora el análisis del texto al eliminar las palabras comunes (palabras estáticas) que tienen un valor semántico mínimo. Estas incluyen artículos (a, an, the), pronombres (I, you, it), preposiciones (in, at, on) y ciertos verbos auxiliares (is, are, was). Al eliminar estas palabras de alta frecuencia pero con poca información, podemos centrarnos en los términos que contienen contenido y que realmente transmiten el significado del mensaje. Este proceso mejora significativamente la eficiencia de las tareas de análisis de texto, como la modelización de temas, la clasificación de documentos y la recuperación de información:desde nltk.corpus importar palabras clave
    desde nltk.tokenize importar word_tokenize
    importar cadena

    def process_text (texto):
    # Paso 1: tokenizar el texto
    tokens = word_tokenize (texto)
    print («Fichas originales:», fichas)
        
    # Paso 2: Convertir a minúsculas
    tokens_lower = [token.lower () para el token en los tokens]
    print (»\nTokens en minúscula:», tokens_lower)
        
    # Paso 3: eliminar la puntuación
    tokens_no_punct = [token por token en tokens_lower
    si el token no está en la cadena.puntuación]
    print (»\nFichas sin puntuación:», tokens_no_punct)
        
    # Paso 4: Eliminar palabras clave
    stop_words = set (stopwords.words ('inglés'))
    filtered_tokens = [token por token en tokens_no_punct
    si el token no está en stop_words]
    print (»\nFichas sin palabras clave:», filtered_tokens)
        
    # Paso 5: Obtenga la distribución de frecuencias
    de colecciones import Counter
    word_freq = Contador (tokens filtrados)
    print (»\nFrecuencias de palabras:», dict (word_freq))
        
    devolver filtered_tokens

    # Ejemplo de uso
    text = «Me encanta este libro inspirador; ¡es realmente increíble!»
    processed_tokens = process_text (texto)

    # Salida:
    # Fichas originales: ['Yo', 'amor', 'esto', 'inspirador', 'libro', ';', 'eso', «es», 'verdaderamente', 'increíble', '!']
    # Fichas en minúscula: ['i', 'amor', 'esto', 'inspirador', 'libro', ';', 'eso', «es», 'verdaderamente', 'increíble', '!']
    # Fichas sin puntuación: [«i», «amor», «esto», «inspirador», «libro», «eso», «s», «verdaderamente», «increíble»]
    # Fichas sin palabras clave: ['amor', 'inspirador', 'libro', 'verdaderamente', 'increíble']
    # Frecuencias de palabras: {'amor': 1, 'inspirador': 1, 'libro': 1, 'verdaderamente': 1, 'increíble': 1}
    Desglose del código:
    1. Importaciones:
      • palabras clave: acceso a palabras clave comunes en inglés
      • word_tokenize: Para dividir texto en palabras
      • cadena: para acceder a los signos de puntuación
    2. Función process_text:
      • Acepta la entrada de texto sin procesar
      • Realiza el procesamiento de texto paso a paso
      • Imprime los resultados en cada etapa para mayor claridad
    3. Pasos de procesamiento:
      • Tokenización: divide el texto en palabras individuales
      • Normalización de mayúsculas y minúsculas: convierte todo el texto a minúsculas
      • Eliminación de signos de puntuación: elimina todos los signos de puntuación
      • Eliminación de palabras clave: filtra las palabras comunes
      • Análisis de frecuencia: cuenta las ocurrencias de palabras
    4. Mejoras clave:
      • Se agregó una visualización paso a paso
      • Análisis de frecuencia incluido
      • Organización de código mejorada
      • Se agregó documentación completa
  3. Análisis de sentimientos: Un paso crucial que evalúa el tono emocional del texto mediante el análisis de la elección de palabras y el contexto. Este proceso asigna valores numéricos para expresar la positividad, la negatividad o la neutralidad del contenido. Al utilizar técnicas avanzadas de procesamiento del lenguaje natural, el análisis de sentimientos puede detectar matices emocionales sutiles, sarcasmos y estados emocionales complejos. En nuestro flujo de trabajo, aplicamos el análisis de sentimientos al texto filtrado después de preprocesar pasos como la tokenización y la eliminación de palabras clave para garantizar una evaluación emocional más precisa:desde textblob importar TextBlob
    importar numpy como np
    desde nltk.tokenize importar word_tokenize
    desde nltk.corpus importar palabras clave

    def analyze_sentiment (texto):
    # Inicializar palabras clave
    stop_words = set (stopwords.words ('inglés'))
        
    # Tokenizar y filtrar
    tokens = word_tokenize (texto)
    filtered_tokens = [palabra por palabra en fichas si word.lower () no está en stop_words]
        
    # Crear objeto TextBlob
    blob = textBlob (» «.join (filtered_tokens))
        
    # Obtenga puntajes de sentimiento
    polaridad = blob.sentiment.polarity
    subjetividad = blob.sentiment.subjetividad
        
    # Determinar la categoría de sentimiento
    si la polaridad es > 0:
    categoría = «Positivo»
    Polaridad elif < 0:
    categoría = «Negativo»
    otra cosa:
    categoría = «Neutral»
        
    # Devuelve un análisis detallado
    devolución {
    'polaridad': polaridad,
    «subjetividad»: subjetividad,
    'categoría': categoría,
    'filtered_tokens': filtered_tokens
    }

    # Ejemplo de uso
    text = «¡Me encanta este increíble libro! Es realmente inspirador y esclarecedor».
    resultados = analyze_sentiment (texto)

    print («Texto original: {text}»)
    print (f"Tokens filtrados: {results ['filtered_tokens']}»)
    print (f"Polaridad de sentimiento: {results ['polaridad'] :.2f}»)
    print (f"Puntuación de subjetividad: {results ['subjetividad'] :.2f}»)
    print (f"Categoría de sentimiento: {results ['category']}»)

    # Salida:
    # Texto original: ¡Me encanta este increíble libro! Es verdaderamente inspirador y esclarecedor.
    # Fichas filtradas: ['absolutamente', 'amor', 'increíble', 'libro', 'verdaderamente', 'inspirador', 'iluminador']
    # Polaridad de sentimiento: 0.85
    # Puntuación de subjetividad: 0.75
    # Categoría de sentimiento: Positivo
    Desglose del código:
    1. Importaciones:
      • TextBlob: Para análisis de sentimientos
      • numpy: para operaciones numéricas
      • Componentes NLTK: para preprocesamiento de texto
    2. Función analyze_sentiment:
      • Acepta la entrada de texto sin procesar
      • Elimina las palabras clave para un análisis más limpio
      • Calcula las puntuaciones de polaridad y subjetividad
      • Clasifica el sentimiento como positivo/negativo/neutral
    3. Características principales:
      • Preprocesamiento integral con eliminación de palabras límite
      • Múltiples métricas de sentimiento (polaridad y subjetividad)
      • Categorización clara de los sentimientos
      • Resultados detallados en formato diccionario
    4. Explicación de la salida:
      • Polaridad: rango de -1 (negativo) a 1 (positivo)
      • Subjetividad: rango de 0 (objetivo) a 1 (subjetivo)
      • Categoría: Clasificación simple del sentimiento general

1.1.4 La PNL en la vida cotidiana

El impacto de la PNL en la vida diaria se extiende mucho más allá del procesamiento de texto básico. Impulsa sistemas sofisticados que hacen que nuestras interacciones digitales sean más intuitivas y personalizadas. Cuando pides indicaciones a Google Maps, la PNL procesa tu consulta en lenguaje natural, entendiendo el contexto y la intención de proporcionarte rutas relevantes. Del mismo modo, el sistema de recomendaciones de Netflix analiza tus patrones de visualización, reseñas y preferencias mediante algoritmos de PNL para sugerirte contenido que podría gustarte.

El alcance de la tecnología es aún más generalizado en los dispositivos móviles. Las funciones de autocorrección y predicción de texto de su smartphone emplean técnicas complejas de PNL, como la revisión ortográfica basada en el contexto, el análisis gramatical y el modelado lingüístico específico del usuario. Estos sistemas aprenden de tus patrones de escritura y tus elecciones de vocabulario para ofrecerte sugerencias cada vez más precisas.

Las aplicaciones modernas de la PNL también incluyen asistentes de voz que pueden entender los acentos regionales, filtros de correo electrónico que detectan el spam y clasifican los mensajes, y plataformas de redes sociales que moderan automáticamente el contenido. Incluso los chatbots del servicio de atención al cliente utilizan ahora la PNL avanzada para ofrecer respuestas más naturales y útiles.

Dato curioso: Más allá de la revisión ortográfica y la predicción del contexto, el teclado de tu teléfono usa la PNL para entender la jerga y el contexto de los emojis, ¡e incluso detecta cuando escribes en varios idiomas!

Ejercicio práctico: creación de una canalización de PNL sencilla

Construyamos una canalización básica de PNL que combine los pasos descritos:

desde nltk.tokenize importar word_tokenize, sent_tokenize
desde nltk.corpus importar palabras clave
desde textblob importar TextBlob
importar cadena
de colecciones import Counter
importar re

clase TextAnalyzer:
def __init__ (uno mismo):
self.stop_words = set (stopwords.words ('inglés'))
        
def preprocess_text (self, text):
# Eliminar caracteres especiales y dígitos
text = re.sub (r' [^\ w\ s] ', «, texto)
        
# Convertir a minúsculas
texto = text.lower ()
        
devolver texto
        
def analyze_text (self, texto):
# Almacenar texto original
texto_original = texto
        
# Paso 1: Preprocesar
text = self.preprocess_text (texto)
        
# Paso 2: Tokenización de oraciones
oraciones = sent_tokenize (texto)
        
# Paso 3: tokenización de palabras
tokens = word_tokenize (texto)
        
# Paso 4: Eliminar palabras clave
filtered_tokens = [palabra por palabra en fichas si la palabra no está en self.stop_words]
        
# Paso 5: Calcular la frecuencia de las palabras
word_freq = Contador (tokens filtrados)
        
# Paso 6: Análisis de sentimientos
blob = textBlob (texto_original)
sentimiento = blob.sentiment
        
# Paso 7: Devolver un análisis exhaustivo
devolución {
'texto_original': texto_original,
«frases»: frases,
«fichas»: fichas,
'filtered_tokens': filtered_tokens,
'word_frequency': dictado (word_freq),
'sentiment_polarity': sentiment.polarity,
'sentiment_subjetividad': sentimento.subjetividad,
'sentence_count': len (frases),
'word_count': len (fichas),
'unique_words': len (set (tokens))
}

def main ():
analizador = textAnalyzer ()
    
# Obtener información del usuario
text = input («Introduzca el texto para analizar: «)
    
# Realizar análisis
resultados = analyzer.analyze_text (texto)
    
# Mostrar resultados
print (»\n=== Resultados del análisis de texto ===»)
print (f»\nTexto original: {results ['original_text']}»)
print (f»\nNúmero de frases: {results ['sentence_count']}»)
print (f"Total de palabras: {results ['word_count']}»)
print (f"Palabras únicas: {results ['unique_words']}»)
print (»\nTokens:», resultados ['tokens'])
print (»\nTokens filtrados (palabras clave eliminadas):», results ['filtered_tokens'])
print (»\nFrecuencia de palabras:», resultados ['word_frequency'])
print (f»\nAnálisis de sentimiento:»)
print (f"Polarity: {results ['sentiment_polarity'] :.2f} (-1 negativo a 1 positivo)»)
print (f"Subjetividad: {results ['sentiment_subjectivity'] :.2f} (0 objetivo contra 1 subjetivo)»)

si __name__ == «__main__»:
principal ()

Desglose del código:

  1. Estructura de clases
    • La clase TextAnalyzer encapsula todas las funciones de análisis
    • La inicialización configura palabras estáticas para su reutilización
    • Los métodos están organizados para una separación clara de las preocupaciones
  2. Componentes clave
    • preprocess_text: limpia y normaliza el texto de entrada
    • analyze_text: Método principal que realiza un análisis exhaustivo
    • principal: gestiona la interacción del usuario y la visualización de los resultados
  3. Características de análisis
    • Tokenización de oraciones para análisis estructural
    • Tokenización de palabras y eliminación de palabras clave
    • Cálculo de frecuencia de palabras
    • Análisis de sentimientos (polaridad y subjetividad)
    • Estadísticas de texto (recuento de palabras, palabras únicas, etc.)
  4. Mejoras con respecto al original
    • Diseño orientado a objetos para una mejor organización
    • Métricas de análisis de texto más completas
    • Mejor manejo de errores y preprocesamiento de texto
    • Formato de salida detallado
    • Estructura de clases reutilizable

Este ejemplo proporciona una línea de análisis de texto sólida y completa, adecuada tanto para fines de aprendizaje como para aplicaciones prácticas.

1.1.5 Conclusiones clave

  • La PNL permite que las máquinas entiendan el lenguaje humano e interactúen con él; esta capacidad fundamental permite a las computadoras procesar, analizar y generar texto similar al humano. Mediante algoritmos sofisticados y modelos de aprendizaje automático, los sistemas de PNL pueden comprender el contexto, los sentimientos e incluso los matices lingüísticos sutiles.
  • La tokenización, la eliminación de palabras clave y el análisis de sentimientos son técnicas fundamentales en la PNL:
    • La tokenización divide el texto en unidades significativas (palabras u oraciones)
    • La eliminación de palabras clave filtra las palabras comunes para centrarse en el contenido significativo
    • El análisis del sentimiento determina el tono emocional y el significado subjetivo
  • Las aplicaciones de la PNL en el mundo real incluyen:
    • Chatbots que brindan información y servicio al cliente
    • Sistemas de traducción automática que superan las barreras lingüísticas
    • Herramientas de resumen de texto que condensan documentos de gran tamaño
    • Asistentes de voz que entienden y responden al habla natural
    • Sistemas de recomendación de contenido que analizan las preferencias de los usuarios

1.1 ¿Qué es la PNL?

El procesamiento del lenguaje natural (PNL) representa una intersección revolucionaria entre la comunicación humana y las capacidades computacionales. Esta tecnología impulsa todo, desde asistentes virtuales sofisticados como Siri y Alexa hasta las funciones de texto predictivo que utilizamos a diario. Lo que hace que la PNL sea particularmente fascinante es su capacidad para decodificar los matices del lenguaje humano, desde el contexto y la intención hasta las emociones y los patrones lingüísticos sutiles.

El campo ha sufrido una transformación notable, particularmente con la llegada de las redes neuronales y las arquitecturas de aprendizaje profundo. Los sistemas modernos de PNL ahora pueden procesar millones de documentos de texto en segundos, entender varios idiomas simultáneamente y generar respuestas similares a las humanas. La introducción de modelos transformadores, como BERT y GPT, ha ampliado aún más los límites, ya que ha permitido la comprensión del contexto y la generación de lenguaje natural a escalas sin precedentes.

Este capítulo lo guiará a través de la evolución de la PNL, desde los sistemas basados en reglas hasta los métodos estadísticos y, finalmente, hasta la era actual del aprendizaje profundo. Examinaremos cómo cada avance tecnológico ha contribuido a que las máquinas comprendan mejor la comunicación humana y exploraremos las implicaciones prácticas de estos avances en campos que van desde la atención médica hasta el análisis financiero.

Empecemos por lo básico: ¿Qué es la PNL?

El procesamiento del lenguaje natural (PNL) es un campo de la inteligencia artificial que cierra la brecha entre la comunicación humana y la comprensión de la computadora. En esencia, la PNL abarca un conjunto de algoritmos y modelos computacionales sofisticados que permiten a las máquinas comprender, analizar y generar el lenguaje humano en todas sus formas. Esta tecnología ha evolucionado desde una simple coincidencia de patrones hasta redes neuronales complejas capaces de comprender el contexto, los sentimientos e incluso los matices lingüísticos sutiles.

Para ilustrar esta complejidad, considere cómo la PNL gestiona una solicitud aparentemente simple, como «Necesito indicaciones para llegar a la cafetería más cercana». El sistema debe analizar varios niveles de significado: identificar la ubicación del usuario, entender que «el más cercano» requiere un análisis espacial, reconocer que «cafetería» puede incluir cafeterías y establecimientos similares, y determinar que se trata de una solicitud de navegación que requiere indicaciones. Este proceso implica que varios componentes de la PNL trabajen en armonía, desde el análisis sintáctico y el análisis semántico hasta la comprensión contextual y la generación de respuestas.

1.1.1 Componentes clave de la PNL

Para entender la PNL, es útil dividirla en sus componentes principales, que trabajan en conjunto para crear un sistema integral para procesar el lenguaje humano:

1. Comprensión del lenguaje natural (NLU)

su componente fundamental procesa e interpreta el significado del texto o el discurso. La NLU es el cerebro detrás de la capacidad de una máquina para comprender verdaderamente la comunicación humana. Emplea varias técnicas sofisticadas como:

  • Análisis semántico para comprender los significados y las relaciones de las palabras: esto implica mapear las palabras según sus definiciones, identificar sinónimos y comprender cómo se relacionan las palabras para crear significado. Por ejemplo, reconocer que «vehículo» y «automóvil» son conceptos relacionados.
  • Análisis sintáctico para analizar la estructura de las oraciones: divide las oraciones en sus componentes gramaticales (sustantivos, verbos, adjetivos, etc.) y comprende cómo funcionan juntas. Ayuda a las máquinas a diferenciar frases como «El gato persiguió al ratón» y «El ratón persiguió al gato».
  • Comprensión contextual para comprender el significado situacional: esto va más allá de la interpretación literal para comprender el significado en función del contexto circundante. Por ejemplo, reconocer que «hace frío» podría ser una declaración sobre la temperatura o una solicitud para cerrar una ventana, según la situación.
  • Detección de sentimientos para identificar los matices emocionales: esto implica analizar el contenido emocional del texto, a partir de expresiones obvias como «¡Me encanta esto!» hasta indicadores más sutiles del estado de ánimo, el tono y la actitud en comunicaciones complejas.

2. Generación de lenguaje natural (NLG)

Este componente es responsable de producir texto legible por humanos a partir de datos estructurados o información generada por computadora. Los sistemas de NLG actúan como escritores sofisticados, elaborando textos coherentes y apropiados para el contexto a través de varios procesos clave:

  • Planificación del contenido para determinar qué información transmitir: esto implica seleccionar los puntos de datos relevantes, organizarlos en una secuencia lógica y decidir cómo presentarlos de manera efectiva en función de la audiencia prevista y los objetivos de comunicación
  • Estructuración de oraciones para crear resultados gramaticalmente correctos: este proceso aplica reglas y patrones lingüísticos para construir oraciones bien formadas, teniendo en cuenta factores como la concordancia entre el sujeto y el verbo, el uso adecuado de los artículos y las preposiciones y el uso apropiado del tiempo verbal
  • Respuestas sensibles al contexto que coinciden con el flujo de la conversación: el sistema mantiene la coherencia al rastrear el historial de los diálogos, la intención del usuario y los intercambios anteriores para generar respuestas que parezcan naturales y relevantes para la conversación en curso
  • Síntesis del lenguaje natural que suena similar a la humana: los sistemas avanzados de NLG emplean algoritmos sofisticados para variar la estructura de las oraciones, incorporar las transiciones apropiadas y mantener un tono y un estilo consistentes que reflejen los patrones de comunicación humanos

3. Procesamiento de textos

Este componente constituye la base del análisis lingüístico al desglosar y analizar el texto a través de varios procesos críticos:

  • Tokenización para dividir el texto en unidades manejables: esto implica dividir el texto en palabras, oraciones o subpalabras, lo que permite al sistema procesar el idioma parte por parte. Por ejemplo, la oración «El gato se sentó» se convierte en ["El», «gato», «sat», «."]
  • Etiquetado de partes del discurso para identificar las funciones de las palabras: este proceso etiqueta las palabras según sus funciones gramaticales (sustantivo, verbo, adjetivo, etc.), lo cual es crucial para comprender la estructura y el significado de las oraciones. Por ejemplo, en «El zorro marrón rápido salta», «rápido» y «marrón» se identifican como adjetivos, mientras que «salta» se etiqueta como un verbo
  • Reconocimiento de entidades con nombre para identificar objetos, personas o lugares específicos: este sofisticado proceso detecta y clasifica los elementos clave del texto, como identificar «Apple» como una empresa frente a una fruta o «Washington» como una persona frente a una ubicación, según las pistas contextuales
  • Análisis de dependencias para comprender las relaciones entre palabras: analiza cómo se relacionan las palabras de una oración entre sí, creando una estructura en forma de árbol que muestra las conexiones gramaticales
  • Lematización y derivación para reducir las palabras a sus formas básicas: estas técnicas ayudan a estandarizar las palabras (por ejemplo, «correr» → «ejecutar») para mejorar la precisión del análisis

1.1.2 Aplicaciones de la PNL

La PNL ha revolucionado numerosos campos con sus diversas aplicaciones. He aquí un análisis detallado de sus principales casos de uso:

Análisis de sentimientos

Esta sofisticada aplicación analiza el texto para comprender el contenido emocional en múltiples niveles. Más allá de la clasificación básica positiva/negativa, el análisis de sentimientos moderno emplea el aprendizaje profundo para detectar estados emocionales matizados, actitudes implícitas y patrones lingüísticos complejos.

La tecnología puede identificar el sarcasmo a través de señales contextuales, reconocer los tonos pasivo-agresivos y comprender las expresiones culturales específicas. En el monitoreo de las redes sociales, puede rastrear el sentimiento de marca en tiempo real en diferentes plataformas, idiomas y datos demográficos. En el caso del servicio de atención al cliente, ayuda a priorizar los casos urgentes al detectar los niveles de frustración de los clientes y los posibles riesgos de escalamiento. Las empresas aprovechan esta tecnología para:

  • Supervise el estado de la marca en diferentes segmentos del mercado
  • Identifique las tendencias emergentes de satisfacción del cliente
  • Analice la percepción de la competencia en el mercado
  • Mida el impacto de las campañas de marketing
  • Detecte posibles crisis de relaciones públicas antes de que se agraven

Las implementaciones avanzadas pueden incluso rastrear la evolución del sentimiento a lo largo del tiempo, proporcionando información sobre los cambios en las actitudes de los consumidores y la dinámica del mercado.

Ejemplo

Construyamos un sistema de análisis de sentimientos más sofisticado que pueda gestionar múltiples aspectos del análisis de texto:

importar pandas como pdf
importar nltk
desde nltk.tokenize importar word_tokenize
desde nltk.corpus importar palabras clave
desde nltk.stem importar WordNetLemmatizer
desde textblob importar TextBlob
importar re

clase SentimentAnalyzer:
def __init__ (uno mismo):
self.lemmatizer = WordNetLemmatizer ()
self.stop_words = set (stopwords.words ('inglés'))
    
def clean_text (self, texto):
# Eliminar caracteres especiales y dígitos
text = re.sub (r' [^a-zA-z\ s] ', «, texto)
# Convertir a minúsculas
texto = text.lower ()
devolver texto
    
def process_text (self, texto):
# Limpiar el texto
cleaned_text = self.clean_text (texto)
        
# Tokenizar
tokens = word_tokenize (texto_limpio)
        
# Eliminar palabras clave y lematizar
tokens procesados = [
self.lemmatizer.lemmatize (token)
para token en tokens
si el token no está en self.stop_words
]
        
devolver processed_tokens
    
def analyze_sentiment (yo, texto):
# Obtenga un sentimiento básico
blob = textBlob (texto)
sentiment_score = blob.sentiment.polarity
        
# Determinar la categoría de sentimiento
si sentiment_score > 0:
category = 'Positivo'
elif sentiment_score < 0:
categoría = 'Negativo'
otra cosa:
categoría = 'Neutral'
        
# Procesar texto para un análisis adicional
processed_tokens = self.process_text (texto)
        
devolución {
'original_text': texto,
'processed_tokens': processed_tokens,
'sentiment_score': sentiment_score,
'sentiment_category': categoría,
'subjetividad': blob.sentiment.subjetividad
}

# Ejemplo de uso
analizador = SentimentAnalyzer ()

# Analiza varios ejemplos
ejemplos = [
«¡Este producto es absolutamente increíble! Me encanta todo lo relacionado con él. «,
«El servicio fue terrible y estoy muy decepcionado. «,
«La película estuvo bien, nada especial. «,
]

para texto en ejemplos:
results = analyzer.analyze_sentiment (texto)
print (f»\nAnálisis para: {results ['original_text']}»)
print (f"Tokens procesados: {results ['processed_tokens']}»)
print (f"puntuación de sentimiento: {results ['sentiment_score'] :.2f}»)
print (f"Categoría: {resultados ['sentiment_category']}»)
print (f"Subjetividad: {results ['subjetividad'] :.2f}»)

Desglose del código:

  1. Estructura de clases: La clase SentimentAnalyzer encapsula toda la funcionalidad, lo que hace que el código esté organizado y sea reutilizable.
  2. Limpieza de texto: El método clean_text elimina los caracteres especiales y normaliza el texto a minúsculas.
  3. Procesamiento de textos: El método process_text implementa una canalización completa de PNL que incluye la tokenización, la eliminación de palabras clave y la lematización.
  4. Análisis de sentimientos: El método analyze_sentiment proporciona un análisis exhaustivo que incluye:
    • - Cálculo de la puntuación de sentimiento
    • - Categorización de sentimientos
    • - Medición de la subjetividad
    • - Procesamiento de fichas

Ejemplo de salida:

Análisis de: ¡Este producto es absolutamente increíble! Me encanta todo lo relacionado con él.
Fichas procesadas: ['producto', 'absolutamente', 'increíble', 'amor', 'todo']
Puntuación de sentimiento: 0.85
Categoría: Positivo
Subjetividad: 0.75

Análisis de: El servicio fue pésimo y estoy muy decepcionado.
Tokens procesados: ['servicio', 'terrible', 'decepcionado']
Puntuación de sentimiento: -0.65
Categoría: Negativo
Subjetividad: 0.90

Análisis para: La película estuvo bien, nada especial.
Fichas procesadas: ['película', 'vale', 'nada', 'especial']
Puntuación de sentimiento: 0.10
Categoría: Positivo
Subjetividad: 0.30

Este ejemplo completo demuestra cómo construir un sistema sólido de análisis de sentimientos que no solo determine el sentimiento básico, sino que también proporcione un análisis detallado del contenido emocional y la subjetividad del texto.

Traducción automática

Los modernos servicios de traducción basados en la PNL han revolucionado la forma en que superamos las barreras lingüísticas. Estos sistemas emplean redes neuronales sofisticadas para comprender el profundo significado semántico del texto, yendo mucho más allá de la simple sustitución de palabras. Analizan la estructura de las oraciones, el contexto y las referencias culturales para producir traducciones que resulten naturales para los hablantes nativos.

Las capacidades clave incluyen:

  • Comprensión contextual para eliminar la ambigüedad de palabras con múltiples significados
  • Preservación de expresiones idiomáticas mediante la búsqueda de equivalentes apropiados
  • Adaptación de las referencias culturales para mantener el significado en las diferentes sociedades
  • Combinación de estilos para mantener el tono formal/informal, el lenguaje técnico o la escritura creativa
  • Procesamiento en tiempo real de múltiples combinaciones de idiomas simultáneamente

Por ejemplo, al traducir entre idiomas con diferentes estructuras gramaticales, como el inglés y el japonés, estos sistemas pueden reestructurar las oraciones por completo y, al mismo tiempo, preservar el significado y los matices originales. Este avance tecnológico ha permitido todo, desde la comunicación empresarial en tiempo real hasta la traducción precisa de obras literarias, haciendo que la interacción global sea más fluida que nunca.

Ejemplo: traducción automática neuronal

Esta es una implementación de un sistema básico de traducción automática neuronal que utiliza PyTorch y la arquitectura de transformadores:

antorcha de importación
importar torch.nn como nn
importar torch.optim como optim
desde torch.utils.data importar conjunto de datos, DataLoader
de transformers import MarianMTModel, MarianTokenizer

clase TranslationDataset (Dataset):
def __init__ (self, source_texts, target_texts, tokenizer, max_length=128):
self.source_texts = source_texts
self.target_texts = target_texts
self.tokenizer = tokenizador
self.max_length = max_length

def __len__ (uno mismo):
devuelve len (self.source_texts)

def __getitem__ (self, idx):
fuente = self.source_texts [idx]
objetivo = self.target_texts [idx]

# Tokenizar los textos
source_tokens = self.tokenizer (
fuente,
max_length=self.max_length,
padding="longitud_máxima»,
truncamiento = verdadero,
return_tensors="pt»
)
        
target_tokens = autotokenizer (
objetivo,
max_length=self.max_length,
padding="longitud_máxima»,
truncamiento = verdadero,
return_tensors="pt»
)

devolución {
«input_ids»: source_tokens ["input_ids"] .squeeze (),
«máscara de atención»: source_tokens ["máscara de atención"] .squeeze (),
«etiquetas»: target_tokens ["input_ids"] .squeeze ()
}

traductor de clase:
def __init__ (self, source_lang="en», target_lang="fr»):
self.model_name = «Helsinki-NLP/Opus-MT- {source_lang} - {target_lang}»
self.tokenizer = MarianTokenizer.from_pretrained (self.model_name)
self.model = marianMTModel.from_pretrained (self.model_name)
self.device = torch.device («cuda» si torch.cuda.is_available () sino «cpu»)
self.model.to (dispositivo propio)

def translate (self, texts, batch_size=8, max_length=128):
automodel.eval ()
traducciones = []

para i en range (0), len (texts), batch_size):
batch_texts = textos [i:i + batch_size]
            
# Tokenizar
entradas = self.tokenizer (
textos por lotes,
return_tensors="pt»,
padding=true,
truncamiento = verdadero,
longitud_máxida=longitud_máxima
) .to (dispositivo propio)

# Generar traducciones
con torch.no_grad ():
traducido = self.model.generate (
**entradas,
longitud_máxida=longitud_máxima,
num_beams=4,
longitud_penalización=0.6,
early_stopping=Verdadero
)

# Decodifica los tokens generados
decodificado = self.tokenizer.batch_decode (traducido, SKIP_SPECIAL_TOKENS=true)
translations.extend (decodificado)

devolver traducciones

# Ejemplo de uso
si __name__ == «__main__»:
# Inicializar el traductor (inglés a francés)
traductor = Traductor (source_lang="en», target_lang="fr»)

# Oraciones de ejemplo
textos_ingleses = [
«Hola, ¿cómo estás?» ,
«El aprendizaje automático es fascinante. «,
«Hoy hace buen tiempo».
]

# Realizar la traducción
french_translations = traductor.translate (textos_ingleses)

# Imprimir resultados
para en, fr en zip (english_texts, french_translations):
print (f"inglés: {en}»)
print («francés: {fr}»)
imprimir ()

Desglose del código:

  1. Clase TranslationDataset:
    • Se encarga de la preparación de datos para la formación
    • Implementa la funcionalidad de conjuntos de datos personalizados para PyTorch
    • Gestiona la tokenización de los textos de origen y destino
  2. Clase de traductor:
    • Inicializa el modelo MarianMT previamente entrenado
    • Maneja la administración de dispositivos (CPU/GPU)
    • Implementa el proceso de traducción
  3. Proceso de traducción:
    • Lotes de entrada de textos para un procesamiento eficiente
    • Aplica la búsqueda por haces para mejorar la calidad de la traducción
    • Gestiona la tokenización y destokenización automáticamente

Características principales:

  • Utiliza el modelo MarianMT de última generación
  • Soporta el procesamiento por lotes para una mayor eficiencia
  • Implementa la búsqueda de haces para una mejor calidad de traducción
  • Maneja varias oraciones simultáneamente
  • Gestiona automáticamente la memoria y los recursos computacionales

Ejemplo de salida:

Inglés: Hola, ¿cómo estás?
Francés: Bonjour, comment allez-vous?

Inglés: El aprendizaje automático es fascinante.
Francés: L'apprentissage automatique est fascinant.

Inglés: Hoy hace buen tiempo.
Francés: Le temps est magnifique aujourd'hui.

Esta implementación demuestra cómo los sistemas modernos de PNL pueden realizar traducciones complejas y, al mismo tiempo, mantener la estructura gramatical y el significado en todos los idiomas.

Resumen del texto

Los sistemas modernos de resumen de textos utilizan técnicas sofisticadas de PNL para convertir documentos de gran tamaño en resúmenes concisos y significativos. Estas herramientas emplean tanto métodos extractivos, que seleccionan frases clave del texto original, como métodos abstractivos, que generan nuevas oraciones que capturan los conceptos básicos. La tecnología se destaca en:

  • Identificación de temas centrales y argumentos clave en varios documentos
  • Preservar el flujo lógico y las relaciones entre las ideas
  • Generación de resúmenes de diferentes longitudes en función de las necesidades de los usuarios
  • Mantener la precisión de los hechos mientras se condensa la información
  • Comprender la estructura del documento y la importancia de las secciones

Estas capacidades hacen que el resumen de textos sea invaluable en múltiples sectores. Los investigadores lo utilizan para asimilar rápidamente los trabajos académicos e identificar los estudios pertinentes. Los periodistas lo emplean para monitorear las fuentes de noticias y detectar historias emergentes. Los analistas de negocios lo aprovechan para procesar informes de mercado e información sobre la competencia. Los profesionales legales lo utilizan para analizar la jurisprudencia y los documentos contractuales de manera eficiente.

Ejemplo: Sistema de resumen de textos

Esta es una implementación de un sistema de resumen de texto extractivo que utiliza técnicas modernas de PNL:

importar numpy como np
desde nltk.tokenize importar sent_tokenize, word_tokenize
desde nltk.corpus importar palabras clave
desde nltk.stem importar WordNetLemmatizer
desde sklearn.feature_extraction.text importar TFIDFVectorizer
importar redes como nx

clase TextSummarizer:
def __init__ (uno mismo):
self.stop_words = set (stopwords.words ('inglés'))
self.lemmatizer = WordNetLemmatizer ()
        
def preprocess_text (self, text):
# Tokenizar en oraciones
oraciones = sent_tokenize (texto)
        
# Limpiar y preprocesar cada oración
sentencias_limpias = []
para frase en frases:
# Tokenizar palabras
words = word_tokenize (sentence.lower ())
# Eliminar palabras clave y lematizar
palabras = [
self.lemmatizer.lemmatize (palabra)
para palabras en palabras
si word.isalnum () y la palabra no está en self.stop_words
]
cleaned_sentences.append (''.join (palabras))
            
devolver frases, cleaned_sentences
    
def create_similarity_matrix (self, oraciones):
# Crear vectores TF-IDF
vectorizador = tfidfVectorizador ()
tfidf_matrix = vectorizer.fit_transform (frases)
        
# Calcular la matriz de similitud
similarity_matrix = (tfidf_matrix * TFIDF_matrix.t) .toarray ()
devuelve similarity_matrix
    
def summary (self, text, num_sentences=3):
# Obtenga oraciones originales y preprocesadas
original_sentencias_, cleaned_sentences = self.preprocess_text (texto)
        
si len (original_sentences) <= num_sentences:
devuelve ''.join (original_sentences)
        
# Crear matriz de similitud
similarity_matrix = self.create_similarity_matrix (oraciones limpias)
        
# Crea un gráfico y calcula las puntuaciones
nx_graph = nx.from_numpy_array (matriz_similitud)
puntuaciones = nx.PageRank (nx_graph)
        
# Obtén las mejores frases
sentencias_clasificadas = [
(puntuación, frase)
para la oración, puntúa en zip (original_sentences, scores)
]
ranked_sentences.sort (reverse=true)
        
# Seleccione las frases principales manteniendo el orden original
índice_seleccionados = [
original_sentences.index (oración)
para _, oración en oraciones clasificadas [:num_sentences]
]
selected_indices.sort ()
        
summary = ''.join ([original_sentences [i] para i en selected_indices])
resumen de devolución

# Ejemplo de uso
si __name__ == «__main__»:
texto = «"»
El procesamiento del lenguaje natural (PNL) es una rama de la inteligencia artificial
que ayuda a las computadoras a entender el lenguaje humano. Combina lo computacional
lingüística, aprendizaje automático y modelos de aprendizaje profundo. aplicaciones de PNL
incluyen la traducción automática, el análisis de opiniones y el resumen de textos.
Los sistemas modernos de PNL pueden procesar varios idiomas y comprender el contexto.
El campo continúa evolucionando con nuevos modelos de transformadores y neuronales
arquitecturas.
«»
    
sumarizador = textSummarizer ()
resumen = summarizer.summarize (texto, num_sentences=2)
print («Longitud del texto original:», len (texto))
print («Longitud del resumen:», len (resumen))
print (»\nResumen:»)
imprimir (resumen)

Desglose del código:

  1. Estructura de clases: La clase TextSummarizer encapsula toda la funcionalidad de resumen con una separación clara de las preocupaciones.
  2. Preprocesamiento: El método preprocess_text implementa los pasos esenciales de la PNL:
    • Tokenización de oraciones para dividir texto en oraciones
    • Tokenización de palabras para dividir oraciones en palabras
    • Eliminación de palabras clave y lematización para la normalización del texto
  3. Análisis de similitud: El método create_similarity_matrix:
    • Crea vectores TF-IDF para cada oración
    • Calcula la similitud de oraciones mediante operaciones vectoriales
  4. Algoritmo de resumen: El método de resumen:
    • Utiliza el algoritmo PageRank para puntuar la importancia de las oraciones
    • Mantiene el orden original de las oraciones en el resumen
    • Permite personalizar la longitud del resumen

Ejemplo de salida:

Longitud del texto original: 297
Duración del resumen: 128

Resumen: El procesamiento del lenguaje natural (PNL) es una rama de la inteligencia artificial
que ayuda a las computadoras a entender el lenguaje humano. Las aplicaciones de PNL incluyen máquinas
traducción, análisis de opiniones y resumen de textos.

Esta implementación demuestra cómo las técnicas modernas de PNL pueden identificar y extraer de manera efectiva las oraciones más importantes de un texto, manteniendo la legibilidad y la coherencia.

Chatbots y asistentes virtuales

Los agentes conversacionales modernos impulsados por la inteligencia artificial han revolucionado la interacción hombre-computadora a través de una comprensión sofisticada del lenguaje natural. Estos sistemas aprovechan las técnicas avanzadas de PNL para:

  • Procese y comprenda patrones lingüísticos complejos, incluidos modismos, significados dependientes del contexto y referencias culturales
  • Mantenga el historial de conversaciones para ofrecer respuestas coherentes en varios turnos de diálogo
  • Analice los sentimientos y las señales emocionales en los comentarios de los usuarios para generar respuestas emocionales apropiadas
  • Aprenda de las interacciones para mejorar continuamente la calidad de la respuesta

Las aplicaciones del mundo real se han expandido significativamente:

  • Atención médica: realizar una evaluación preliminar de los síntomas, programar citas y proporcionar recordatorios de medicamentos
  • Educación: ofrecer experiencias de aprendizaje personalizadas, responder a las consultas de los estudiantes y adaptar el ritmo de enseñanza en función de la comprensión
  • Servicio al cliente: gestión de consultas en varios canales, resolución de problemas comunes y traslado sin problemas de casos complejos a agentes humanos
  • Apoyo de salud mental: brindar asesoramiento inicial accesible y apoyo emocional a través de una conversación empática

Ejemplo: creación de un chatbot sencillo

Esta es una implementación de un chatbot básico que utiliza técnicas modernas de PNL y coincidencia de patrones:

de transformers import AutoModelForCausalLM, AutoTokenizer
antorcha de importación
importar re
importar al azar

clase SimpleBot:
def __init__ (uno mismo):
# Inicializar respuestas predefinidas
respuestas propias = {
'saludo': ['¡Hola!' , '¡Hola!' , '¡Saludos!'] ,
'adiós': ['¡Adiós!' , '¡Nos vemos más tarde!' , '¡Cuídate!'] ,
'gracias': ["¡De nada!» , '¡No hay problema!' , '¡Me alegro de haber podido ayudar!'] ,
'unknown': ["No estoy seguro de eso. «, «¿Podrías reformular eso?» ,
«No entiendo».]
}
        
# Cargue el modelo y el tokenizador previamente entrenados
self.model_name = «Microsoft/DialogPT-Small»
self.tokenizer = autotokenizer.from_pretrained (self.model_name)
self.model = autoModelForCausalLm.from_pretrained (self.model_name)
        
# Inicializar el historial de conversaciones
auto.conversation_history = []
        
def preprocess_input (self, text):
# Convertir a minúsculas y eliminar caracteres especiales
texto = text.lower ()
text = re.sub (r' [^\ w\ s] ', «, texto)
devolver texto
        
def pattern_match (self, texto):
# Coincidencia básica de patrones para frases comunes
si lo hay (palabra en el texto por palabra en ['hola', 'hola', 'hola']):
devuelve random.choice (self.responses ['saludo'])
elif any (palabra en el texto por palabra en ['adiós', 'adiós', 'cya']):
devuelve random.choice (self.responses ['adiós'])
elif any (palabra en el texto por palabra en ['gracias', 'gracias']):
return random.choice (self.responses ['gracias'])
devolver Ninguno
        
def generate_response (self, text):
# Codificar el texto de entrada
inputs = self.tokenizer.encode (text + self.tokenizer.eos_token,
return_tensors='pt')
        
# Generar una respuesta usando el modelo
response_ids = self.model.generate (
entradas,
longitud_máximo=1000,
pad_token_id=self.tokenizer.eos_token_id,
no_repeat_ngram_size=3,
do_sample = verdadero,
top_k=100,
top_p=0.7,
temperatura=0.8
)
        
# Decodificar la respuesta
response = self.tokenizer.decode (response_ids [:, inputs.shape [-1]:] [0],
SKIP_SPECIAL_TOKENS=verdadero)
respuesta de devolución
        
chat de definición (self, user_input):
# Entrada de preprocesamiento
entrada procesada = self.preprocess_input (entrada de usuario)
        
# Pruebe primero la coincidencia de patrones
respuesta = self.pattern_match (processed_input)
        
si no es respuesta:
prueba:
# Generar una respuesta usando el modelo
respuesta = self.generate_response (user_input)
excepto la excepción como e:
respuesta = random.choice (self.responses ['desconocido'])
        
# Actualizar el historial de conversaciones
self.conversation_history.append (user_input, response)
respuesta de devolución

# Ejemplo de uso
si __name__ == «__main__»:
bot = SimpleBot ()
print («Bot: ¡Hola! ¿En qué puedo ayudarte hoy? (escriba 'quit' para salir)»)
    
si bien es cierto:
user_input = input («Tú: «)
si user_input.lower () == 'salir':
print («Bot: ¡Adiós!»)
romper
            
respuesta = bot.chat (user_input)
print («fBot: {respuesta}»)

Desglose del código:

  1. Estructura de clases:
    • Implementa una clase SimpleBot con la inicialización de plantillas de modelo y respuesta previamente entrenadas
    • Mantiene el historial de conversaciones para conocer el contexto
    • Utiliza enfoques neuronales y basados en reglas para la generación de respuestas
  2. Procesamiento de entrada:
    • Preprocesa la entrada del usuario mediante la normalización del texto
    • Implementa la coincidencia de patrones para frases comunes
    • Maneja con elegancia los casos extremos y las excepciones
  3. Generación de respuestas:
    • Utiliza el modelo DialogPT para generar respuestas contextuales
    • Implementa el muestreo de temperatura y top-k/top-p para lograr una diversidad de respuestas
    • Incluye respuestas alternativas para gestionar entradas inesperadas

Características principales:

  • Enfoque híbrido que combina la generación de respuestas neuronales y basadas en reglas
  • Comprensión contextual a través del historial de conversaciones
  • Parámetros de respuesta configurables para controlar la calidad de salida
  • Gestión de errores y degradación correcta

Ejemplo de interacción:

Bot: ¡Hola! ¿Cómo puedo ayudarte hoy? (escriba «dejar» para salir)
Tú: ¡Hola!
Bot: ¡Hola! ¿Cómo te va hoy?
Tú: Estoy muy bien, ¡gracias por preguntar!
Bot: ¡Es maravilloso escuchar eso! ¿Hay algo específico sobre lo que te gustaría charlar?
Tú: ¿Puedes hablarme sobre el aprendizaje automático?
Bot: El aprendizaje automático es un campo fascinante de la IA que permite a las computadoras aprender de los datos...
Tú: dejar
Bot: ¡Adiós!

Esta implementación demuestra cómo los chatbots modernos combinan sistemas basados en reglas con modelos de lenguaje neuronal para crear conversaciones más naturales y atractivas.

Generación de contenido

Los sistemas de PNL ahora pueden crear contenido similar al humano, desde textos de marketing hasta documentación técnica, adaptando el tono y el estilo a audiencias específicas y manteniendo la precisión y la relevancia. Estos sistemas aprovechan los modelos lingüísticos avanzados para:

  • Genere contenido apropiado para el contexto mediante la comprensión de la terminología específica de la industria y las convenciones de redacción
  • Adapte el estilo de escritura en función de la demografía del público objetivo, desde publicaciones de blog informales hasta trabajos académicos formales
  • Crea variaciones de contenido para diferentes plataformas conservando el mensaje central
  • Ayude en las tareas de escritura creativa sugiriendo desarrollos de la trama, descripciones de personajes y diálogos
  • Genere automáticamente informes, resúmenes y documentación a partir de datos estructurados

Ejemplo: generación de contenido con GPT

Esta es una implementación de un generador de contenido que puede crear diferentes tipos de contenido con estilos y tonos específicos:

desde openai importar OpenAI
sistema operativo de importación

clase ContentGenerator:
def __init__ (uno mismo):
# Inicializar el cliente OpenAI
self.client = OpenAI (api_key=os.getenv ('OPENAI_API_KEY'))
        
# Definir estilos de contenido
estilos propios = {
'formal': «En tono profesional y académico, «,
'casual': «De forma amistosa y conversacional, «,
«técnico»: «Uso de terminología técnica, «,
«creativo»: «Con un estilo creativo y atractivo»
}
        
def generate_content (self, prompt, style=' formal ', max_length=500,
temperatura = 0.7):
prueba:
# Aplicar estilo al mensaje
styled_prompt = self.styles.get (style, «») + prompt
            
# Generar contenido usando GPT-4
respuesta = self.client.chat.completions.create (
modelo = «gpt-4",
mensajes = [
{"role»: «system», «content»: «Eres un redactor de contenido profesional. «},
{"rol»: «usuario», «contenido»: styled_prompt}
],
max_tokens=longitud_máxima,
temperatura=temperatura,
top_p=0.95,
frecuencia_penalización = 0.5,
penalización de presencia=0.5
)
            
# Extraer y limpiar el texto generado
texto_generado = response.choices [0] .message.content
devuelve self.clean_text (texto_generado)
            
excepto la excepción como e:
return f"Error al generar contenido: {str (e)}»
    
def clean_text (self, texto):
# Elimine la línea de estilo si está presente
para style_prompt en self.styles.values ():
si text.comienza con (style_prompt):
texto = texto [len (style_prompt):]
devolver text.strip ()
    
def generate_article (self, topic, style=' formal ', sections=3):
«" "Generar un artículo estructurado con múltiples secciones "»
artículo = []
        
# Generar introducción
intro_prompt = f"Escribe una introducción sobre {topic}»
article.append (self.generate_content (intro_prompt, style, 200))
        
# Generar secciones principales
para i en el rango (secciones):
section_prompt = f"Escribe la sección {i+1} sobre {topic}»
article.append (self.generate_content (section_prompt, style, 300))
        
# Generar conclusión
conclusion_prompt = f"Escribe una conclusión sobre {tema}»
article.append (self.generate_content (conclusion_prompt, style, 200))
        
devolución "\n\n«.join (artículo)

# Ejemplo de uso
si __name__ == «__main__»:
# Asegúrese de haber establecido su clave de API de OpenAI en las variables de entorno
si no es os.getenv ('OPENAI_API_KEY'):
print («Por favor, defina su variable de entorno OPENAI_API_KEY»)
salida (1)
        
generador = ContentGenerator ()
    
# Generar una entrada de blog
tema = «El impacto de la inteligencia artificial en la atención médica»
print («Generando artículo...»)
artículo = generator.generate_article (
tema,
style='técnico',
secciones=3
)
print (»\nArtículo generado:»)
imprimir (artículo)

Analicemos esta implementación de la clase ContentGenerator:

1. Inicialización y estructura de la clase

  • La clase usa la API OpenAI para la generación de contenido
  • Define diferentes estilos de contenido (formal, casual, técnico, creativo) con las correspondientes instrucciones de tono

2. Métodos principales

La clase tiene tres métodos principales:

  • generar_contenido ():
    • Toma una indicación, un estilo y parámetros para la generación de contenido
    • Usa GPT-4 para generar contenido con parámetros específicos
    • Incluye manejo de errores y limpieza de texto
  • texto_limpio ():
    • Elimina las solicitudes de estilo del texto generado
    • Devuelve texto limpio y eliminado
  • generate_article ():
    • Crea un artículo estructurado con introducción, secciones principales y conclusión
    • Permite la personalización del estilo y el número de secciones
    • Combina varias generaciones de contenido en una sola pieza cohesiva

3. Características clave

  • Control de temperatura (0.7) para equilibrar la creatividad
  • Sanciones de frecuencia y presencia para reducir la repetición
  • Uso de variables de entorno para la seguridad de las claves de API
  • Gestión estructurada de errores durante todo el proceso de generación

4. Ejemplo de uso

El código incluye un ejemplo práctico que:

  • Comprueba la configuración correcta de la clave de API
  • Genera un artículo técnico sobre la IA en el cuidado de la salud
  • Crea una pieza estructurada con múltiples secciones

Este es un ejemplo de salida de lo que podría producir el código ContentGenerator:

Artículo generado: El impacto de la inteligencia artificial en la atención médica

La integración de la Inteligencia Artificial (IA) en la atención médica representa una transformación revolucionaria en la práctica médica y la atención al paciente. Los avances recientes en los algoritmos de aprendizaje automático y el análisis de datos han permitido a los proveedores de atención médica aprovechar las tecnologías de inteligencia artificial para mejorar el diagnóstico, la planificación del tratamiento y los resultados de los pacientes. Esta evolución tecnológica promete mejorar la prestación de servicios de salud y, al mismo tiempo, reducir los costos y mejorar la accesibilidad.

El impacto principal de la IA en la atención médica es evidente en la precisión y la eficiencia del diagnóstico. Los algoritmos de aprendizaje automático pueden analizar los datos de imágenes médicas con una precisión extraordinaria, lo que ayuda a los radiólogos a detectar anomalías en las radiografías, las resonancias magnéticas y las tomografías computarizadas. Estos sistemas de inteligencia artificial pueden procesar grandes cantidades de datos de imágenes en segundos, destacando posibles áreas de preocupación y proporcionando puntuaciones de probabilidad para diversas afecciones. Esta capacidad no solo acelera el proceso de diagnóstico, sino que también reduce la probabilidad de errores humanos.

La atención y el monitoreo de los pacientes se han revolucionado a través de sistemas impulsados por inteligencia artificial. Los dispositivos inteligentes y las tecnologías portátiles equipados con algoritmos de inteligencia artificial pueden monitorear continuamente los signos vitales, predecir posibles complicaciones de salud y alertar a los proveedores de atención médica sobre situaciones de emergencia antes de que se vuelvan críticas. Este enfoque proactivo de la atención de los pacientes ha demostrado ser muy prometedor a la hora de reducir las tasas de readmisión hospitalaria y mejorar los resultados de los pacientes, especialmente en el caso de los pacientes con enfermedades crónicas.

En conclusión, la integración de la IA en los sistemas de salud representa un cambio de paradigma en la práctica médica. Si bien siguen existiendo desafíos en relación con la privacidad de los datos, el cumplimiento normativo y las consideraciones éticas, los beneficios potenciales de la IA en la atención médica son innegables. A medida que la tecnología siga evolucionando, podemos esperar que la IA desempeñe un papel cada vez más importante en la configuración del futuro de la prestación de servicios de salud y la atención a los pacientes.

Este ejemplo demuestra cómo el código de ejemplo genera un artículo estructurado con una introducción, tres secciones principales y una conclusión, utilizando un estilo técnico tal como se especifica en los parámetros.

Extracción de información

Las técnicas avanzadas de PNL son excelentes para extraer automáticamente datos estructurados de fuentes de texto no estructuradas. Esta capacidad transforma el texto sin procesar en información organizada y procesable a través de varios procesos sofisticados:

El reconocimiento de entidades nombradas (NER) identifica y clasifica los elementos clave, como los nombres, las organizaciones y las ubicaciones. Los algoritmos de coincidencia de patrones detectan estructuras de texto específicas, como fechas, números de teléfono y direcciones. La extracción de relaciones mapea las conexiones entre las entidades identificadas, mientras que la extracción de eventos captura las secuencias temporales y la causalidad.

Estas capacidades hacen que la extracción de información sea esencial para:

  • Síntesis automatizada de la investigación, donde puede procesar miles de trabajos académicos para extraer hallazgos clave
  • Análisis de documentos legales, lo que permite una revisión rápida de los contratos y la jurisprudencia
  • Procesamiento de registros médicos, extracción del historial del paciente, los diagnósticos y los planes de tratamiento de las notas clínicas
  • Inteligencia empresarial, recopilación de información competitiva a partir de artículos e informes de noticias

Este es un ejemplo completo de extracción de información con SPACy:

import pandas as pd
import nltk
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
from nltk.stem import WordNetLemmatizer
from textblob import TextBlob
import re

class SentimentAnalyzer:
    def __init__(self):
        self.lemmatizer = WordNetLemmatizer()
        self.stop_words = set(stopwords.words('english'))
    
    def clean_text(self, text):
        # Remove special characters and digits
        text = re.sub(r'[^a-zA-Z\s]', '', text)
        # Convert to lowercase
        text = text.lower()
        return text
    
    def process_text(self, text):
        # Clean the text
        cleaned_text = self.clean_text(text)
        
        # Tokenize
        tokens = word_tokenize(cleaned_text)
        
        # Remove stopwords and lemmatize
        processed_tokens = [
            self.lemmatizer.lemmatize(token)
            for token in tokens
            if token not in self.stop_words
        ]
        
        return processed_tokens
    
    def analyze_sentiment(self, text):
        # Get base sentiment
        blob = TextBlob(text)
        sentiment_score = blob.sentiment.polarity
        
        # Determine sentiment category
        if sentiment_score > 0:
            category = 'Positive'
        elif sentiment_score < 0:
            category = 'Negative'
        else:
            category = 'Neutral'
        
        # Process text for additional analysis
        processed_tokens = self.process_text(text)
        
        return {
            'original_text': text,
            'processed_tokens': processed_tokens,
            'sentiment_score': sentiment_score,
            'sentiment_category': category,
            'subjectivity': blob.sentiment.subjectivity
        }

# Example usage
analyzer = SentimentAnalyzer()

# Analyze multiple examples
examples = [
    "This product is absolutely amazing! I love everything about it.",
    "The service was terrible and I'm very disappointed.",
    "The movie was okay, nothing special.",
]

for text in examples:
    results = analyzer.analyze_sentiment(text)
    print(f"\nAnalysis for: {results['original_text']}")
    print(f"Processed tokens: {results['processed_tokens']}")
    print(f"Sentiment score: {results['sentiment_score']:.2f}")
    print(f"Category: {results['sentiment_category']}")
    print(f"Subjectivity: {results['subjectivity']:.2f}")

Analicemos esta clase InformationExtractor que usa SpAcy para el procesamiento del lenguaje natural:

1. Configuración de clases y dependencias

  • Utiliza SpAcy para el procesamiento de PNL y pandas para el manejo de datos
  • Se inicializa con el modelo de idioma inglés de SPACy (en_core_web_sm)

2. Métodos principales

La clase contiene tres métodos de extracción de claves:

  • extract_entities ():
    • Identifica las entidades nombradas en el texto
    • Devuelve una lista de diccionarios con texto de entidad, etiqueta y posición
    • Captura elementos como organizaciones, personas y ubicaciones
  • extraer relaciones ():
    • Encuentra conexiones entre sujetos y objetos
    • Utiliza el análisis de dependencias para identificar las relaciones
    • Devuelve las relaciones sujeto-verbo-objeto
  • extraer frases clave ():
    • Extrae frases nominales importantes
    • Utiliza el análisis de dependencias para identificar frases importantes
    • Se centra en sujetos, objetos y objetos preposicionales

3. Ejemplo de uso

El código muestra una aplicación práctica con un texto de ejemplo sobre Apple Inc. y muestra tres tipos de resultados:

  • Entidades: identifica empresas (Apple Inc., Microsoft, Google), personas (Tim Cook), ubicaciones (Cupertino, California) y fechas
  • Relaciones: extrae conexiones sujeto-verbo-objeto, como «Cook anunció el lanzamiento»
  • Frases clave: extrae frases nominales importantes del texto

4. Características clave

  • Utiliza modelos previamente entrenados para un reconocimiento preciso de las entidades
  • Implementa el análisis de dependencias para la extracción de relaciones
  • Puede manejar estructuras de oraciones complejas
  • Genera datos estructurados adecuados para un análisis posterior

Ejemplo de salida:

# Entidades extraídas:
# etiqueta de texto inicio y fin
N.º 0 Apple Inc. ORG 1 10
#1 Tim Cook PERSONA 15 23
#2 Cupertino GPE 47 56
#3 California GPE 58 68
# 4 12 de septiembre FECHA 72 84
# 5 2024 FECHA 86 90
N.º 6 Microsoft ORG 146 154
Nº 7 Google ORG 159 165

# Relaciones extraídas:
# sujeto-verbo-objeto
Lanzamiento anunciado por Cook #0
El evento número uno mostrará

# Frases clave:
# [«CEO de Apple Inc.», «lanzamiento de un nuevo iPhone», «funciones revolucionarias de IA»,
# 'eventos similares']

Características principales:

  • Utiliza los modelos previamente entrenados de SPACy para un reconocimiento preciso de las entidades
  • Implementa el análisis de dependencias para la extracción de relaciones
  • Maneja estructuras de oraciones complejas y múltiples tipos de entidades
  • Devuelve datos estructurados adecuados para un análisis posterior

Solicitudes:

  • Análisis automatizado de documentos en contextos legales y empresariales
  • Monitorización de noticias y redes sociales
  • Análisis de trabajos de investigación y extracción de conocimientos
  • Comentarios de los clientes y análisis de reseñas

1.1.3 Un flujo de trabajo de PNL simple

Para ver la PNL en acción, consideremos un ejemplo sencillo: analizar el sentimiento de una oración.

Sentencia: «Me encanta este libro; ¡es realmente inspirador!»

Flujo de trabajo:

  1. Tokenización: Dividir la oración en palabras o símbolos individuales:desde nltk.tokenize importar word_tokenize, sent_tokenize
    desde nltk.corpus importar palabras clave
    desde nltk import pos_tag
    importar cadena

    def analyze_text (texto):
    # Tokenización de oraciones
    oraciones = sent_tokenize (texto)
    imprimir (»\n1. Tokenización de oraciones:»)
    imprimir (frases)
        
    # Tokenización de palabras
    tokens = word_tokenize (texto)
    imprimir (»\n2. Tokenización de palabras:»)
    imprimir (fichas)
        
    # Eliminar la puntuación
    tokens_no_punct = [token por símbolo en los tokens si el token no está en la cadena.puntuación]
    imprimir (»\n3. Tras eliminar la puntuación:»)
    imprimir (tokens_no_punct)
        
    # Convertir a minúsculas y eliminar palabras clave
    stop_words = set (stopwords.words ('inglés'))
    clean_tokens = [token.lower () para el token en tokens_no_punct
    si token.lower () no está en stop_words]
    imprimir (»\n4. Tras eliminar Stopword:»)
    imprimir (clean_tokens)
        
    # Etiquetado de partes de la voz
    pos_tags = pos_tag (fichas)
    imprimir (»\n5. Etiquetas de partes del discurso:»)
    imprimir (pos_tags)

    # Ejemplo de uso
    text = «Me encanta este libro; ¡es realmente inspirador! El autor escribe muy bien».
    analyze_text (texto)

    # Salida:
    #1. Tokenización de oraciones:
    # ['Me encanta este libro; es realmente inspirador! ' , 'El autor escribe maravillosamente. ']

    #2. Tokenización de palabras:
    # ['Yo', 'amor', 'esto', 'libro', ';', 'eso', «',' s ',' verdaderamente ',' inspirador ','! ' ,
    # 'El', 'autor', 'escribe', 'bellamente', '.']

    Nº 3. Tras eliminar la puntuación:
    # ['Yo', 'amor', 'esto', 'libro', 'eso', 's', 'verdaderamente', 'inspirador',
    # 'El', 'autor', 'escribe', 'hermosamente']

    Nº 4. Tras eliminar Stopword:
    # ['amor', 'libro', 'verdaderamente', 'inspirador', 'autor', 'escribe', 'bellamente']

    Nº 5. Etiquetas de partes del discurso:
    # [('Yo', 'PRP'), ('amor', 'VBP'), ('esto', 'DT'), ('libro', 'NN'),...]
    Desglose del código:
    1. Importaciones:
      • word_tokenize, sent_tokenize: para dividir el texto en palabras y oraciones
      • palabras clave: para eliminar palabras comunes
      • pos_tag: Para etiquetar partes de la oración
      • cadena: para acceder a los signos de puntuación
    2. Función analyze_text:
      • Toma una cadena de texto como entrada
      • Procesa el texto a través de varios pasos de PNL
      • Imprime los resultados en cada etapa
    3. Pasos de procesamiento:
      • Tokenización de oraciones: divide el texto en oraciones individuales
      • Tokenización de palabras: divide las oraciones en palabras/símbolos individuales
      • Eliminación de signos de puntuación: filtra los signos de puntuación
      • Eliminación de palabras intermedias: elimina las palabras comunes y las convierte a minúsculas
      • Etiquetado POS: etiqueta cada palabra con su parte del discurso
    Características principales:
    • Maneja múltiples oraciones
    • Mantiene el orden de procesamiento para un análisis de texto claro
    • Demuestra múltiples capacidades de NLTK
    • Incluye resultados completos en cada paso
  2. Eliminación de palabras clave: Un paso crucial de preprocesamiento que mejora el análisis del texto al eliminar las palabras comunes (palabras estáticas) que tienen un valor semántico mínimo. Estas incluyen artículos (a, an, the), pronombres (I, you, it), preposiciones (in, at, on) y ciertos verbos auxiliares (is, are, was). Al eliminar estas palabras de alta frecuencia pero con poca información, podemos centrarnos en los términos que contienen contenido y que realmente transmiten el significado del mensaje. Este proceso mejora significativamente la eficiencia de las tareas de análisis de texto, como la modelización de temas, la clasificación de documentos y la recuperación de información:desde nltk.corpus importar palabras clave
    desde nltk.tokenize importar word_tokenize
    importar cadena

    def process_text (texto):
    # Paso 1: tokenizar el texto
    tokens = word_tokenize (texto)
    print («Fichas originales:», fichas)
        
    # Paso 2: Convertir a minúsculas
    tokens_lower = [token.lower () para el token en los tokens]
    print (»\nTokens en minúscula:», tokens_lower)
        
    # Paso 3: eliminar la puntuación
    tokens_no_punct = [token por token en tokens_lower
    si el token no está en la cadena.puntuación]
    print (»\nFichas sin puntuación:», tokens_no_punct)
        
    # Paso 4: Eliminar palabras clave
    stop_words = set (stopwords.words ('inglés'))
    filtered_tokens = [token por token en tokens_no_punct
    si el token no está en stop_words]
    print (»\nFichas sin palabras clave:», filtered_tokens)
        
    # Paso 5: Obtenga la distribución de frecuencias
    de colecciones import Counter
    word_freq = Contador (tokens filtrados)
    print (»\nFrecuencias de palabras:», dict (word_freq))
        
    devolver filtered_tokens

    # Ejemplo de uso
    text = «Me encanta este libro inspirador; ¡es realmente increíble!»
    processed_tokens = process_text (texto)

    # Salida:
    # Fichas originales: ['Yo', 'amor', 'esto', 'inspirador', 'libro', ';', 'eso', «es», 'verdaderamente', 'increíble', '!']
    # Fichas en minúscula: ['i', 'amor', 'esto', 'inspirador', 'libro', ';', 'eso', «es», 'verdaderamente', 'increíble', '!']
    # Fichas sin puntuación: [«i», «amor», «esto», «inspirador», «libro», «eso», «s», «verdaderamente», «increíble»]
    # Fichas sin palabras clave: ['amor', 'inspirador', 'libro', 'verdaderamente', 'increíble']
    # Frecuencias de palabras: {'amor': 1, 'inspirador': 1, 'libro': 1, 'verdaderamente': 1, 'increíble': 1}
    Desglose del código:
    1. Importaciones:
      • palabras clave: acceso a palabras clave comunes en inglés
      • word_tokenize: Para dividir texto en palabras
      • cadena: para acceder a los signos de puntuación
    2. Función process_text:
      • Acepta la entrada de texto sin procesar
      • Realiza el procesamiento de texto paso a paso
      • Imprime los resultados en cada etapa para mayor claridad
    3. Pasos de procesamiento:
      • Tokenización: divide el texto en palabras individuales
      • Normalización de mayúsculas y minúsculas: convierte todo el texto a minúsculas
      • Eliminación de signos de puntuación: elimina todos los signos de puntuación
      • Eliminación de palabras clave: filtra las palabras comunes
      • Análisis de frecuencia: cuenta las ocurrencias de palabras
    4. Mejoras clave:
      • Se agregó una visualización paso a paso
      • Análisis de frecuencia incluido
      • Organización de código mejorada
      • Se agregó documentación completa
  3. Análisis de sentimientos: Un paso crucial que evalúa el tono emocional del texto mediante el análisis de la elección de palabras y el contexto. Este proceso asigna valores numéricos para expresar la positividad, la negatividad o la neutralidad del contenido. Al utilizar técnicas avanzadas de procesamiento del lenguaje natural, el análisis de sentimientos puede detectar matices emocionales sutiles, sarcasmos y estados emocionales complejos. En nuestro flujo de trabajo, aplicamos el análisis de sentimientos al texto filtrado después de preprocesar pasos como la tokenización y la eliminación de palabras clave para garantizar una evaluación emocional más precisa:desde textblob importar TextBlob
    importar numpy como np
    desde nltk.tokenize importar word_tokenize
    desde nltk.corpus importar palabras clave

    def analyze_sentiment (texto):
    # Inicializar palabras clave
    stop_words = set (stopwords.words ('inglés'))
        
    # Tokenizar y filtrar
    tokens = word_tokenize (texto)
    filtered_tokens = [palabra por palabra en fichas si word.lower () no está en stop_words]
        
    # Crear objeto TextBlob
    blob = textBlob (» «.join (filtered_tokens))
        
    # Obtenga puntajes de sentimiento
    polaridad = blob.sentiment.polarity
    subjetividad = blob.sentiment.subjetividad
        
    # Determinar la categoría de sentimiento
    si la polaridad es > 0:
    categoría = «Positivo»
    Polaridad elif < 0:
    categoría = «Negativo»
    otra cosa:
    categoría = «Neutral»
        
    # Devuelve un análisis detallado
    devolución {
    'polaridad': polaridad,
    «subjetividad»: subjetividad,
    'categoría': categoría,
    'filtered_tokens': filtered_tokens
    }

    # Ejemplo de uso
    text = «¡Me encanta este increíble libro! Es realmente inspirador y esclarecedor».
    resultados = analyze_sentiment (texto)

    print («Texto original: {text}»)
    print (f"Tokens filtrados: {results ['filtered_tokens']}»)
    print (f"Polaridad de sentimiento: {results ['polaridad'] :.2f}»)
    print (f"Puntuación de subjetividad: {results ['subjetividad'] :.2f}»)
    print (f"Categoría de sentimiento: {results ['category']}»)

    # Salida:
    # Texto original: ¡Me encanta este increíble libro! Es verdaderamente inspirador y esclarecedor.
    # Fichas filtradas: ['absolutamente', 'amor', 'increíble', 'libro', 'verdaderamente', 'inspirador', 'iluminador']
    # Polaridad de sentimiento: 0.85
    # Puntuación de subjetividad: 0.75
    # Categoría de sentimiento: Positivo
    Desglose del código:
    1. Importaciones:
      • TextBlob: Para análisis de sentimientos
      • numpy: para operaciones numéricas
      • Componentes NLTK: para preprocesamiento de texto
    2. Función analyze_sentiment:
      • Acepta la entrada de texto sin procesar
      • Elimina las palabras clave para un análisis más limpio
      • Calcula las puntuaciones de polaridad y subjetividad
      • Clasifica el sentimiento como positivo/negativo/neutral
    3. Características principales:
      • Preprocesamiento integral con eliminación de palabras límite
      • Múltiples métricas de sentimiento (polaridad y subjetividad)
      • Categorización clara de los sentimientos
      • Resultados detallados en formato diccionario
    4. Explicación de la salida:
      • Polaridad: rango de -1 (negativo) a 1 (positivo)
      • Subjetividad: rango de 0 (objetivo) a 1 (subjetivo)
      • Categoría: Clasificación simple del sentimiento general

1.1.4 La PNL en la vida cotidiana

El impacto de la PNL en la vida diaria se extiende mucho más allá del procesamiento de texto básico. Impulsa sistemas sofisticados que hacen que nuestras interacciones digitales sean más intuitivas y personalizadas. Cuando pides indicaciones a Google Maps, la PNL procesa tu consulta en lenguaje natural, entendiendo el contexto y la intención de proporcionarte rutas relevantes. Del mismo modo, el sistema de recomendaciones de Netflix analiza tus patrones de visualización, reseñas y preferencias mediante algoritmos de PNL para sugerirte contenido que podría gustarte.

El alcance de la tecnología es aún más generalizado en los dispositivos móviles. Las funciones de autocorrección y predicción de texto de su smartphone emplean técnicas complejas de PNL, como la revisión ortográfica basada en el contexto, el análisis gramatical y el modelado lingüístico específico del usuario. Estos sistemas aprenden de tus patrones de escritura y tus elecciones de vocabulario para ofrecerte sugerencias cada vez más precisas.

Las aplicaciones modernas de la PNL también incluyen asistentes de voz que pueden entender los acentos regionales, filtros de correo electrónico que detectan el spam y clasifican los mensajes, y plataformas de redes sociales que moderan automáticamente el contenido. Incluso los chatbots del servicio de atención al cliente utilizan ahora la PNL avanzada para ofrecer respuestas más naturales y útiles.

Dato curioso: Más allá de la revisión ortográfica y la predicción del contexto, el teclado de tu teléfono usa la PNL para entender la jerga y el contexto de los emojis, ¡e incluso detecta cuando escribes en varios idiomas!

Ejercicio práctico: creación de una canalización de PNL sencilla

Construyamos una canalización básica de PNL que combine los pasos descritos:

desde nltk.tokenize importar word_tokenize, sent_tokenize
desde nltk.corpus importar palabras clave
desde textblob importar TextBlob
importar cadena
de colecciones import Counter
importar re

clase TextAnalyzer:
def __init__ (uno mismo):
self.stop_words = set (stopwords.words ('inglés'))
        
def preprocess_text (self, text):
# Eliminar caracteres especiales y dígitos
text = re.sub (r' [^\ w\ s] ', «, texto)
        
# Convertir a minúsculas
texto = text.lower ()
        
devolver texto
        
def analyze_text (self, texto):
# Almacenar texto original
texto_original = texto
        
# Paso 1: Preprocesar
text = self.preprocess_text (texto)
        
# Paso 2: Tokenización de oraciones
oraciones = sent_tokenize (texto)
        
# Paso 3: tokenización de palabras
tokens = word_tokenize (texto)
        
# Paso 4: Eliminar palabras clave
filtered_tokens = [palabra por palabra en fichas si la palabra no está en self.stop_words]
        
# Paso 5: Calcular la frecuencia de las palabras
word_freq = Contador (tokens filtrados)
        
# Paso 6: Análisis de sentimientos
blob = textBlob (texto_original)
sentimiento = blob.sentiment
        
# Paso 7: Devolver un análisis exhaustivo
devolución {
'texto_original': texto_original,
«frases»: frases,
«fichas»: fichas,
'filtered_tokens': filtered_tokens,
'word_frequency': dictado (word_freq),
'sentiment_polarity': sentiment.polarity,
'sentiment_subjetividad': sentimento.subjetividad,
'sentence_count': len (frases),
'word_count': len (fichas),
'unique_words': len (set (tokens))
}

def main ():
analizador = textAnalyzer ()
    
# Obtener información del usuario
text = input («Introduzca el texto para analizar: «)
    
# Realizar análisis
resultados = analyzer.analyze_text (texto)
    
# Mostrar resultados
print (»\n=== Resultados del análisis de texto ===»)
print (f»\nTexto original: {results ['original_text']}»)
print (f»\nNúmero de frases: {results ['sentence_count']}»)
print (f"Total de palabras: {results ['word_count']}»)
print (f"Palabras únicas: {results ['unique_words']}»)
print (»\nTokens:», resultados ['tokens'])
print (»\nTokens filtrados (palabras clave eliminadas):», results ['filtered_tokens'])
print (»\nFrecuencia de palabras:», resultados ['word_frequency'])
print (f»\nAnálisis de sentimiento:»)
print (f"Polarity: {results ['sentiment_polarity'] :.2f} (-1 negativo a 1 positivo)»)
print (f"Subjetividad: {results ['sentiment_subjectivity'] :.2f} (0 objetivo contra 1 subjetivo)»)

si __name__ == «__main__»:
principal ()

Desglose del código:

  1. Estructura de clases
    • La clase TextAnalyzer encapsula todas las funciones de análisis
    • La inicialización configura palabras estáticas para su reutilización
    • Los métodos están organizados para una separación clara de las preocupaciones
  2. Componentes clave
    • preprocess_text: limpia y normaliza el texto de entrada
    • analyze_text: Método principal que realiza un análisis exhaustivo
    • principal: gestiona la interacción del usuario y la visualización de los resultados
  3. Características de análisis
    • Tokenización de oraciones para análisis estructural
    • Tokenización de palabras y eliminación de palabras clave
    • Cálculo de frecuencia de palabras
    • Análisis de sentimientos (polaridad y subjetividad)
    • Estadísticas de texto (recuento de palabras, palabras únicas, etc.)
  4. Mejoras con respecto al original
    • Diseño orientado a objetos para una mejor organización
    • Métricas de análisis de texto más completas
    • Mejor manejo de errores y preprocesamiento de texto
    • Formato de salida detallado
    • Estructura de clases reutilizable

Este ejemplo proporciona una línea de análisis de texto sólida y completa, adecuada tanto para fines de aprendizaje como para aplicaciones prácticas.

1.1.5 Conclusiones clave

  • La PNL permite que las máquinas entiendan el lenguaje humano e interactúen con él; esta capacidad fundamental permite a las computadoras procesar, analizar y generar texto similar al humano. Mediante algoritmos sofisticados y modelos de aprendizaje automático, los sistemas de PNL pueden comprender el contexto, los sentimientos e incluso los matices lingüísticos sutiles.
  • La tokenización, la eliminación de palabras clave y el análisis de sentimientos son técnicas fundamentales en la PNL:
    • La tokenización divide el texto en unidades significativas (palabras u oraciones)
    • La eliminación de palabras clave filtra las palabras comunes para centrarse en el contenido significativo
    • El análisis del sentimiento determina el tono emocional y el significado subjetivo
  • Las aplicaciones de la PNL en el mundo real incluyen:
    • Chatbots que brindan información y servicio al cliente
    • Sistemas de traducción automática que superan las barreras lingüísticas
    • Herramientas de resumen de texto que condensan documentos de gran tamaño
    • Asistentes de voz que entienden y responden al habla natural
    • Sistemas de recomendación de contenido que analizan las preferencias de los usuarios