La detección de temas es una capacidad fundamental en el procesamiento del lenguaje natural con aplicaciones de gran alcance en la gestión de contenidos, sistemas de recomendación y funcionalidad de búsqueda. Amazon Bedrock Guardrail ofrece una solución potente para implementar la detección de temas con una velocidad de procesamiento impresionante, lo que la hace ideal para aplicaciones que requieren un análisis eficiente de texto a escala.
Esta guía te guiará a través del proceso de configuración e implementación de la detección de temas utilizando Amazon Bedrock Guardrail. Asegúrate también de consultar nuestra guía sobre Implementación de Detección de Temas con OpenAI.
El Dataset
Nuestra implementación fue probada en un dataset diverso que comprende 2,926 muestras de texto distribuidas en 14 categorías temáticas distintas:
- Salud y Medicina (235 muestras)
- Educación (216 muestras)
- Tecnología (209 muestras)
- Política (207 muestras)
- Comida y Cocina (207 muestras)
- Psicología y Autodesarrollo (206 muestras)
- Medio Ambiente y Clima (206 muestras)
- Entretenimiento (204 muestras)
- Negocios y Emprendimiento (204 muestras)
- Viajes y Turismo (203 muestras)
- Ciencia y Espacio (202 muestras)
- Deportes (201 muestras)
- Historia (200 muestras)
- Finanzas y Economía (185 muestras)
Textos de Muestra del Dataset
La tabla a continuación proporciona un ejemplo representativo de cada categoría temática:
Categoría Temática | Texto de Muestra |
---|---|
Salud y Medicina | Un nuevo estudio vincula el ejercicio regular con una mejor salud mental. |
Tecnología | El último modelo de iPhone cuenta con un chip A17 Bionic. |
Política | El debate presidencial se centró en la atención médica y la economía. |
Comida y Cocina | Cocinar con hierbas frescas realza el sabor de cualquier plato. |
Psicología y Autodesarrollo | La inteligencia emocional es clave para relaciones saludables. |
Medio Ambiente y Clima | Las prácticas ecológicas están ganando terreno entre las empresas. |
Entretenimiento | La última película de Marvel batió récords de taquilla. |
Negocios y Emprendimiento | Iniciar un negocio requiere una planificación e investigación cuidadosas. |
Viajes y Turismo | Las Maldivas son conocidas por sus impresionantes playas y resorts. |
Ciencia y Espacio | La NASA planea enviar humanos a Marte en la próxima década. |
Deportes | Los Lakers ganaron el campeonato de la NBA tras un partido emocionante. |
Historia | El descubrimiento de América cambió el curso de la historia. |
Finanzas y Economía | El mercado de valores subió hoy mientras las empresas tecnológicas registraban ganancias. |
Configurando Amazon Bedrock Guardrail
Puedes configurar Amazon Bedrock Guardrail para la detección de temas utilizando la interfaz web de AWS o programáticamente a través del AWS SDK. Exploraremos ambos enfoques.
Enfoque 1: Usando la Interfaz Web de AWS
La interfaz web de AWS proporciona una forma amigable para crear y configurar guardrails sin escribir código.
Paso 1: Crear un Nuevo Guardrail
Comienza navegando a la consola de Amazon Bedrock y seleccionando "Guardrails" en el menú. Haz clic en "Crear guardrail" para iniciar el proceso de configuración.
En la pantalla de configuración inicial, proporciona un nombre para tu guardrail (ej., "Topic-Detection") y una descripción opcional. Esta será la base de tu sistema de detección de temas.
Paso 2: Configurar Temas Denegados (Denied Topics)
Después de crear el guardrail, navega a la sección "Añadir temas denegados". Aquí definirás los temas que quieres que el sistema detecte.
Para cada tema que quieras detectar:
- Ingresa el nombre del tema (ej., "Deportes")
- Proporciona una definición clara que ayude al sistema a entender qué contenido pertenece a este tema
- Añade frases de ejemplo que representen este tema (ej., "Los Lakers ganaron el campeonato de la NBA tras un partido emocionante.")
Repite este proceso para cada uno de tus temas objetivo. En nuestra prueba comparativa, configuramos las 14 categorías temáticas como "temas denegados" para aprovechar las capacidades de detección de temas de Bedrock.
Paso 3: Configurar el Anclaje Contextual (Contextual Grounding)
El último paso crítico es configurar la verificación de anclaje contextual, que determina cuán estrictamente el sistema evalúa la relevancia del tema.
- Navega a "Añadir verificación de anclaje contextual"
- Habilita la verificación de relevancia
- Establece el umbral de puntuación de relevancia; esto es crucial para equilibrar precisión y recall (exhaustividad)
- En nuestra prueba comparativa, usamos un umbral de 0.7
- Valores más bajos (cercanos a 0) detectarán menos temas
- Valores más altos (cercanos a 0.99) serán más severos pero podrían omitir algún contenido relevante
Esta configuración del umbral impacta directamente en la tasa de precisión de tu sistema de detección de temas. Ajustar este valor te permite encontrar el equilibrio óptimo entre precisión y recall para tu caso de uso específico.
Enfoque 2: Usando el AWS SDK (Creación Programática)
Para la creación automatizada o programática de guardrails, especialmente al manejar múltiples temas, puedes usar el AWS SDK. Este enfoque es particularmente útil para:
- Crear guardrails como parte de pipelines CI/CD
- Mantener configuraciones de guardrail consistentes entre entornos
- Manejar grandes cantidades de temas eficientemente
Aquí te mostramos cómo crear un guardrail programáticamente usando Python y el AWS SDK:
Paso 1: Configura Tu Entorno
Primero, instala las dependencias requeridas:
Copied!1pip install boto3 pandas python-dotenv 2
Crea un archivo .env para almacenar de forma segura tus credenciales de AWS:
Copied!1AWS_REGION=tu-region-aws 2AWS_ACCESS_KEY=tu-clave-de-acceso 3AWS_SECRET_KEY=tu-clave-secreta 4
Paso 2: Prepara Tus Datos de Temas
Necesitarás un dataset con etiquetas y descripciones de temas. En nuestro ejemplo, usamos dos archivos CSV:
- topic_detection.csv: Contiene muestras de texto con sus etiquetas de tema
- topics_descriptions.csv: Contiene nombres de temas y sus descripciones
El archivo de descripciones de temas debe tener columnas para "Topic" y "Description", donde las descripciones están limitadas a 200 caracteres.
Paso 3: Crea el Guardrail Usando el AWS SDK
Aquí está el código Python para crear un guardrail programáticamente, con comentarios detallados explicando cada paso:
El primer paso es conectarse al Servicio Amazon Bedrock:
Copied!1import boto3 2import pandas as pd 3from dotenv import load_dotenv 4import os 5 6# Carga variables de entorno desde el archivo .env para gestión segura de credenciales 7load_dotenv() 8 9# Recupera credenciales AWS y región desde variables de entorno 10AWS_REGION = os.getenv("AWS_REGION") 11AWS_SECRET_KEY = os.getenv("AWS_SECRET_KEY") 12AWS_ACCESS_KEY = os.getenv("AWS_ACCESS_KEY") 13 14# Inicializa el cliente Bedrock con tus credenciales AWS 15# Nota: Esto es diferente del cliente bedrock-runtime usado para inferencia 16client = boto3.client( 17 service_name="bedrock", # Usa el servicio bedrock para crear guardrails 18 region_name=AWS_REGION, 19 aws_secret_access_key=AWS_SECRET_KEY, 20 aws_access_key_id=AWS_ACCESS_KEY, 21) 22 23
Luego cargamos el dataset que contiene las muestras de texto y sus etiquetas de tema. Este dataset se usará para extraer temas únicos y textos de muestra que se usarán más tarde para definir los temas a bloquear.
Copied!1df = pd.read_csv(filepath_or_buffer="./data/topic_detection.csv") 2topics = list(df["label"].unique()) # Extrae todas las etiquetas de tema únicas 3 4# Carga el dataset que contiene descripciones de temas 5# Este archivo debe tener una columna "Topic" y una columna "Description" 6df_desc = pd.read_csv( 7 filepath_or_buffer="./data/topics_descriptions.csv", delimiter=";" 8) 9 10# Obtiene los nombres de tema formateados desde el archivo de descripciones 11# Estos deben estar formateados correctamente para el guardrail (sin espacios, caracteres especiales) 12formatted_topics = list(df_desc["Topic"].unique()) 13topics_config = list() # Inicializa lista vacía para almacenar configuraciones de temas 14 15# Crea un diccionario de configuración para cada tema 16# Esto mapea cada etiqueta de tema original a su nombre formateado y descripción 17for topic, form_topic in zip(topics, formatted_topics): 18 # Crea el diccionario de configuración para este tema 19 config = { 20 "name": form_topic, # El nombre del tema formateado (ej., "SaludYMedicina") 21 "definition": df_desc[df_desc["Topic"] == form_topic]["Description"].values[0], # Obtiene la descripción del tema 22 "examples": [ 23 # Incluye un texto de muestra para este tema - ayuda al guardrail a entender el tema 24 df[df["label"] == topic].sample(n=1, random_state=27)["text"].values[0] 25 ], 26 "type": "DENY", # Establece el tipo a "DENY" para propósitos de detección de temas 27 } 28 topics_config.append(config) # Añade la configuración de este tema a nuestra lista 29 30
Después de crear la configuración del guardrail, vamos a crear el guardrail usando el siguiente código:
Copied!1# Crea el guardrail con todos los temas configurados 2create_response = client.create_guardrail( 3 name="Topic-Detection", # Nombre del guardrail 4 description="Detectando Temas", # Descripción del propósito del guardrail 5 6 # Configura la política de temas con nuestra lista de configuraciones de temas 7 topicPolicyConfig={"topicsConfig": topics_config}, 8 9 # Configura los ajustes de anclaje contextual 10 contextualGroundingPolicyConfig={ 11 "filtersConfig": [ 12 # Establece el umbral de GROUNDING a 0.7 - controla cuán estrictamente se emparejan los temas 13 {"type": "GROUNDING", "threshold": 0.7}, 14 # Establece el umbral de RELEVANCE a 0.7 - controla cuán relevante debe ser el contenido 15 {"type": "RELEVANCE", "threshold": 0.7}, 16 ] 17 }, 18 19 # Mensajes a mostrar cuando se detectan temas 20 blockedInputMessaging="Tema Detectado", # Mensaje para temas detectados en la entrada 21 blockedOutputsMessaging="Tema Detectado", # Mensaje para temas detectados en la salida 22) 23 24
Componentes Clave del Enfoque SDK
1. Configuración de Temas:
- Cada tema requiere un nombre, definición, ejemplos y tipo ("DENY" para detección de temas).
2. Configuración de Anclaje Contextual:
- Establecemos los umbrales de GROUNDING y RELEVANCE a 0.7, lo que coincide con nuestra configuración de la interfaz web.
3. Mensajería de Bloqueo:
- Definimos mensajes simples para mostrar cuando se detectan temas.
Ventajas del Enfoque SDK:
- Automatización: Crea guardrails como parte de flujos de trabajo automatizados.
- Control de Versiones: Almacena configuraciones de guardrail en tu repositorio de código.
- Configuración Masiva: Configura eficientemente múltiples temas a la vez.
- Reproducibilidad: Recrea fácilmente el mismo guardrail en diferentes entornos.
Después de crear el guardrail usando cualquiera de los enfoques, recibirás un ID de guardrail que necesitarás para la fase de implementación.
Implementando la API Bedrock Guardrail
Una vez que tu guardrail está configurado, puedes implementarlo en tu aplicación Python. Aquí tienes una guía paso a paso:
Paso 1: Configura Tu Entorno
Primero, instala las dependencias requeridas:
Copied!1pip install boto3 pandas tqdm python-dotenv 2
Crea un archivo .env para almacenar de forma segura tus credenciales AWS y la configuración del guardrail:
Copied!1GUARDRAIL_ID=tu-id-de-guardrail 2GUARDRAIL_VERSION=tu-version-de-guardrail 3AWS_REGION=tu-region-aws 4AWS_ACCESS_KEY_ID=tu-clave-de-acceso 5AWS_SECRET_ACCESS_KEY=tu-clave-secreta 6
Paso 2: Implementa la Función de Detección de Temas
Aquí está el código Python para implementar la detección de temas usando Amazon Bedrock Guardrail:
Copied!1from tqdm import tqdm 2import time 3from typing import Any 4import os 5import boto3 6import pandas as pd 7from dotenv import load_dotenv 8 9# Carga variables de entorno desde el archivo .env 10load_dotenv() 11 12# Parámetros de configuración para AWS Bedrock 13GUARDRAIL_ID = os.getenv("GUARDRAIL_ID") # El ID de tu guardrail configurado 14GUARDRAIL_VERSION = os.getenv("GUARDRAIL_VERSION") # La versión de tu guardrail 15AWS_REGION = os.getenv("AWS_REGION") # Tu región AWS 16AWS_ACCESS_KEY_ID = os.getenv("AWS_ACCESS_KEY_ID") # Tu clave de acceso AWS 17AWS_SECRET_ACCESS_KEY = os.getenv("AWS_SECRET_ACCESS_KEY") # Tu clave secreta AWS 18 19# Inicializa el cliente de runtime de Bedrock 20bedrock_runtime = boto3.client("bedrock-runtime", region_name=AWS_REGION) 21 22def topic_detection_bedrock(text: str) -> Any: 23 # Formatea el texto de entrada para la API del guardrail 24 content = [{"text": {"text": text}}] 25 26 # Mide el tiempo de ejecución 27 start = time.time() 28 29 # Llama a la API de Bedrock Guardrail 30 response = bedrock_runtime.apply_guardrail( 31 guardrailIdentifier=GUARDRAIL_ID, 32 guardrailVersion=GUARDRAIL_VERSION, 33 source="INPUT", # Analiza el texto de entrada 34 content=content, 35 ) 36 37 end = time.time() 38 execution_time = end - start 39 40 # Procesa la respuesta basado en la acción del guardrail 41 if response["action"] == "GUARDRAIL_INTERVENED": 42 # Extrae los temas detectados de la respuesta 43 topics = list() 44 for topic in response["assessments"][0]["topicPolicy"]["topics"]: 45 topics.append(topic["name"]) 46 print(topic["name"], execution_time) 47 48 # Devuelve una lista de temas o un solo tema 49 if len(topics) > 1: 50 return topics, execution_time 51 else: 52 return topics[0], execution_time 53 else: 54 # Si no se detectaron temas 55 print(response["action"], execution_time) 56 return response["action"], execution_time 57 58
Entendiendo la Respuesta de la API
La respuesta de la API de Bedrock Guardrail contiene información valiosa sobre los temas detectados. Así es como interpretarla:
Cuando se detecta un tema, la respuesta tendrá:
- action establecido en "GUARDRAIL_INTERVENED"
- assessments conteniendo un objeto topicPolicy con los topics detectados
Cada tema en la respuesta incluye:
- name: El nombre del tema detectado
- confidence: Una puntuación de confianza para la detección
Si no se detectan temas, la action será diferente (típicamente "ALLOW").
Paso 3: Procesa Múltiples Muestras de Texto
Para procesar un dataset de muestras de texto, puedes usar el siguiente código:
Copied!1def main(): 2 # Inicializa listas para almacenar resultados 3 topic_detected = list() 4 execution_time = list() 5 6 # Carga el dataset 7 df = pd.read_csv(filepath_or_buffer="data/topic_detection.csv") 8 9 # Procesa cada muestra de texto con una barra de progreso 10 for _, row in tqdm( 11 df.iterrows(), total=len(df), desc="Analizando temas con bedrock guardrail" 12 ): 13 text = row["text"] 14 topic, exec_time = topic_detection_bedrock(text=text) 15 topic_detected.append(topic) 16 execution_time.append(exec_time) 17 18 # Añade resultados como nuevas columnas al dataframe 19 df["execution_time"] = execution_time 20 df["topic_detected"] = topic_detected 21 22 # Guarda los resultados en un archivo CSV 23 df.to_csv(path_or_buf="data/bedrock_topic_detection.csv", index_label=False) 24 25if __name__ == "__main__": 26 main() 27 28
Rendimiento de Amazon Bedrock Guardrail para Detección de Temas
Ahora que hemos cubierto la implementación, examinemos las características de rendimiento de Amazon Bedrock Guardrail para la detección de temas basándonos en nuestro estudio comparativo.
Velocidad y Eficiencia
Amazon Bedrock Guardrail demuestra una eficiencia de procesamiento impresionante para tareas de detección de temas:
- Tiempo Promedio de Procesamiento: 0.357 segundos por muestra de texto
- Rendimiento Consistente: Varianza mínima en el tiempo de procesamiento entre diferentes categorías temáticas
Esta velocidad hace que Bedrock Guardrail sea particularmente adecuado para aplicaciones que necesitan procesar grandes volúmenes de texto en escenarios en tiempo real o casi en tiempo real.
Precisión y Capacidades de Detección
Nuestras pruebas revelaron que con el valor de umbral predeterminado de 0.7, Bedrock Guardrail alcanza una precisión aproximada del 58% con una tasa moderada de falsos positivos. Esta configuración procesa muestras de texto en un promedio de 0.357 segundos, logrando un equilibrio razonable entre precisión y velocidad.
Utilización de Recursos
Bedrock Guardrail está diseñado para ser eficiente con los recursos computacionales:
- Uso de Memoria: Mínimo en comparación con ejecutar grandes modelos de lenguaje localmente
- Escalabilidad: Maneja el aumento de carga con gracia a través de la infraestructura de AWS
- Eficiencia de Costos: Modelo de precios de pago por uso basado en llamadas a la API
Observaciones Clave
Nuestra prueba comparativa reveló varias características importantes de la detección de temas de Bedrock Guardrail:
1. Impacto de la Definición del Tema: La calidad y especificidad de las definiciones de los temas influyen significativamente en la precisión de la detección.
2. Diversidad de Muestras: Incluir ejemplos diversos para cada tema mejora la detección en diferentes estilos de escritura.
3. Ajuste del Umbral: Encontrar el valor óptimo del umbral es crucial para equilibrar precisión y falsos positivos.
4. Consistencia del Procesamiento: El rendimiento se mantiene estable incluso con muestras de texto más largas.
Estas observaciones destacan la importancia de una configuración y ajuste adecuados al implementar Bedrock Guardrail para la detección de temas.
Optimizando Tu Sistema de Detección de Temas
Para mejorar la precisión de tu sistema de detección de temas con Bedrock Guardrail, considera estas estrategias de optimización:
1. Refina las Definiciones de Temas
Proporciona definiciones completas para cada tema que lo distingan claramente de otros temas. Incluye conceptos clave, terminología y características que definan el tema.
2. Añade Frases de Muestra Diversas
Incluye una variedad de frases de muestra que representen diferentes aspectos de cada tema. Cuanto más diversas y representativas sean tus muestras, mejor entenderá el sistema el alcance del tema.
3. Experimenta con los Umbrales de Relevancia
El umbral de relevancia en la verificación de anclaje contextual impacta significativamente en la precisión de la detección. Experimenta con diferentes valores para encontrar el equilibrio óptimo:
- Umbral más bajo (ej., 0.5): Detecta menos temas.
- Umbral más alto (ej., 0.8): El Guardrail es severo, bloqueando casi todos los prompts.
4. Combina con Pre-procesamiento
Considera implementar pasos de pre-procesamiento de texto antes de enviar contenido a Bedrock:
- Normalización de texto (minúsculas, eliminar caracteres especiales)
- Extracción de palabras clave para resaltar términos importantes
- Reconocimiento de entidades para identificar sujetos clave
Casos de Uso para la Detección de Temas con Amazon Bedrock Guardrail
La detección de temas de Amazon Bedrock Guardrail es particularmente adecuada para:
1. Procesamiento de Contenido de Alto Volumen: Aplicaciones que necesitan procesar grandes volúmenes de texto rápidamente.
2. Moderación de Contenido en Tiempo Real: Sistemas que filtran contenido basado en el tema.
3. Categorización de Contenido: Organizar automáticamente documentos, artículos o publicaciones.
4. Clasificación de Consultas de Usuario: Dirigir solicitudes de usuario a bases de conocimiento o sistemas de respuesta apropiados.
5. Sistemas de Recomendación de Contenido: Identificar temas de contenido para que coincidan con los intereses del usuario.
Conclusión
Amazon Bedrock Guardrail ofrece una solución potente, configurable y eficiente para implementar la detección de temas en tus aplicaciones. Con un tiempo promedio de procesamiento de solo 0.357 segundos por muestra de texto y la capacidad de procesar aproximadamente 10,000 muestras por hora, es una excelente opción para aplicaciones donde la velocidad y la escalabilidad son requisitos críticos.
La precisión del 58% alcanzada con la configuración predeterminada (umbral de 0.7) proporciona una base sólida, que puede mejorarse aún más mediante un ajuste cuidadoso de las definiciones de temas, la diversidad de muestras y la configuración del umbral. La naturaleza configurable de Bedrock Guardrail te permite ajustar el equilibrio entre precisión y recall según los requisitos específicos de tu caso de uso.
Configurando cuidadosamente tu guardrail con temas bien definidos, frases de muestra representativas y umbrales de relevancia optimizados, puedes construir un sistema de detección de temas que equilibre precisión y rendimiento para satisfacer tus requisitos específicos. La integración perfecta con el ecosistema de AWS lo hace particularmente atractivo para organizaciones que ya utilizan los servicios de AWS.
A medida que implementas y refinas tu sistema de detección de temas, recuerda que la configuración óptima dependerá de tu caso de uso único, tipos de contenido y prioridades de rendimiento. Experimenta con diferentes configuraciones para encontrar el enfoque que funcione mejor para tu aplicación.