News
📅 Conoce a NeuralTrust en OWASP: Global AppSec - 29-30 mayo
Iniciar sesiónObtener demo
Volver

Detección de Temas con OpenAI: Una Guía Práctica para Implementarla

Detección de Temas con OpenAI: Una Guía Práctica para ImplementarlaAyoub El Qadi 17 de marzo de 2025
Contents

La detección de temas es una capacidad fundamental en el procesamiento del lenguaje natural que permite a los sistemas identificar automáticamente el asunto principal dentro de un texto. A medida que las organizaciones procesan volúmenes crecientes de datos textuales, la capacidad de categorizar contenido con precisión se vuelve esencial para la gestión de contenidos, los sistemas de recomendación y la recuperación de información.

En esta guía, exploraremos cómo implementar una detección de temas robusta utilizando los potentes modelos de lenguaje de OpenAI. Revisaremos una implementación práctica que alcanzó una precisión del 88.1% en nuestras pruebas comparativas (benchmarks), proporcionándote el código y los conocimientos necesarios para integrar esta capacidad en tus propias aplicaciones.

¿Por Qué Importa la Detección de Temas?

La detección de temas habilita varias capacidades críticas en las aplicaciones modernas:

  • Organización y recuperación de contenido más eficientes.
  • Experiencias de usuario mejoradas mediante mejores recomendaciones de contenido.
  • Funcionalidad de búsqueda mejorada en grandes colecciones de documentos.
  • Moderación y filtrado de contenido automatizados.
  • Información basada en datos sobre tendencias de contenido e intereses de los usuarios.

Para los sistemas impulsados por IA, detectar con precisión el tema de la solicitud de un usuario ayuda a dirigir las consultas a modelos especializados o bases de conocimiento, proporcionando respuestas contextualmente más relevantes. Esto es especialmente valioso para implementaciones empresariales donde comprender la intención del usuario en diversos dominios, desde soporte técnico hasta consultas sobre productos o preguntas sobre políticas, puede mejorar drásticamente la calidad de la respuesta y la satisfacción del usuario.

Incluso pequeñas mejoras en la precisión de la detección de temas pueden traducirse en beneficios operativos significativos para las empresas que procesan miles o millones de documentos de texto diariamente.

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áticaTexto de Muestra
Salud y MedicinaUn nuevo estudio vincula el ejercicio regular con una mejor salud mental.
TecnologíaEl último modelo de iPhone cuenta con un chip A17 Bionic.
PolíticaEl debate presidencial se centró en la atención médica y la economía.
Comida y CocinaCocinar con hierbas frescas realza el sabor de cualquier plato.
Psicología y AutodesarrolloLa inteligencia emocional es clave para relaciones saludables.
Medio Ambiente y ClimaLas prácticas ecológicas están ganando terreno entre las empresas.
EntretenimientoLa última película de Marvel batió récords de taquilla.
Negocios y EmprendimientoIniciar un negocio requiere una planificación e investigación cuidadosas.
Viajes y TurismoLas Maldivas son conocidas por sus impresionantes playas y resorts.
Ciencia y EspacioLa NASA planea enviar humanos a Marte en la próxima década.
DeportesLos Lakers ganaron el campeonato de la NBA tras un partido emocionante.
HistoriaEl descubrimiento de América cambió el curso de la historia.
Finanzas y EconomíaEl mercado de valores subió hoy mientras las empresas tecnológicas registraban ganancias.

Implementando la Detección de Temas con OpenAI

Vamos a sumergirnos en la implementación práctica de la detección de temas usando los modelos de OpenAI. Este enfoque alcanzó una impresionante precisión del 88.1% en nuestras pruebas comparativas.

Primeros Pasos con la API de OpenAI

Para implementar la detección de temas con OpenAI, necesitarás:

  1. Crear una cuenta de OpenAI y obtener una clave API desde la plataforma de OpenAI.
  2. Instalar las dependencias requeridas:
    Copied!
    1pip install openai pandas tqdm python-dotenv
  3. Configurar tus variables de entorno creando un archivo
    Copied!
    1.env
    con tu clave API:
    Copied!
    1   OPENAI_API_KEY=tu-clave-api-aqui

La Implementación

Aquí está la implementación completa que utilizamos para alcanzar una precisión del 88.1% con el modelo GPT-4o Mini de OpenAI:

Copied!
1import os
2from tqdm import tqdm  # Para visualización de la barra de progreso
3from typing import Any
4import pandas as pd	# Para manipulación de datos
5import json
6from dotenv import load_dotenv  # Para gestión segura de la clave API
7import time  # Para medir el tiempo de ejecución
8from openai import OpenAI
9
10# Carga las variables de entorno del archivo .env para almacenamiento seguro de la clave API
11load_dotenv()
12OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
13client = OpenAI(api_key=OPENAI_API_KEY)
14
15# Carga el dataset que contiene las muestras de texto y sus etiquetas de tema
16df = pd.read_csv(filepath_or_buffer="data/topic_detection.csv")
17# Extrae las etiquetas de tema únicas para proporcionarlas al modelo
18labels = list(df["label"].unique())
19
20def openai_topic_detection(text: str) -> Any:
21	# Elabora un prompt de sistema detallado que instruye al modelo exactamente cómo realizar la clasificación
22	system_prompt = """
23	Eres un experto en clasificación de temas.
24	Recibirás un texto y necesitarás clasificar este texto dependiendo del tema que discuta.
25
26	La lista de temas a considerar es la siguiente:
27	{labels}
28
29	Necesitas elegir solo una de las etiquetas de la lista y usar exactamente la misma ortografía.
30	Proporciona la salida en un json con esta estructura:
31
32	{{
33		"class": "la etiqueta que elegiste con exactamente la misma ortografía que en la lista"
34	}}
35
36	Solo responde con la salida json. No proporciones ninguna otra salida.
37	ASEGÚRATE DE QUE LA ETIQUETA TENGA EXACTAMENTE LA MISMA ORTOGRAFÍA QUE EN LA LISTA DE POSIBLES ETIQUETAS
38	Ejemplo de salida correcta:
39
40	{{"class": "UNACLASE"}}
41
42	"""
43
44	# Llama a la API de OpenAI con nuestro prompt cuidadosamente elaborado
45	completions = client.chat.completions.create(
46		model="gpt-4o-mini",  # Usando GPT-4o Mini para un equilibrio óptimo de precisión/velocidad
47		messages=[
48			{
49				"role": "developer",  # Usando el rol 'developer' para instrucciones del sistema
50				"content": system_prompt.format(labels=labels),  # Inserta dinámicamente nuestras etiquetas de tema
51			},
52			{
53				"role": "user",  # El rol 'user' contiene el texto a clasificar
54				"content": text,
55			},
56		],
57	)
58	# Analiza la respuesta JSON usando eval() - en producción, considera usar json.loads() por seguridad
59	response = eval(completions.choices[0].message.content)
60	return response["class"]  # Extrae solo la etiqueta de clase de la respuesta
61
62def main(df: pd.DataFrame):
63	# Inicializa listas para almacenar resultados
64	execution = list()  # Almacenará tiempos de ejecución
65	topic_detected = list()  # Almacenará temas detectados
66
67	# Procesa cada muestra de texto con una barra de progreso
68	for _, row in tqdm(df.iterrows(), total=len(df), desc="Detección de Temas con OpenAI"):
69		text = row["text"]
70		# Mide el tiempo de ejecución para cada clasificación
71		start = time.time()
72		topic = openai_topic_detection(text=text)
73		end = time.time()
74		exec = end - start
75		 
76		# Almacena resultados
77		topic_detected.append(topic)
78		execution.append(exec)
79
80	# Añade resultados como nuevas columnas al dataframe
81	df["execution_time (s)"] = execution
82	df["topic_detected"] = topic_detected
83
84	# Guarda los resultados en un archivo CSV para análisis
85	df.to_csv(path_or_buf="data/openai_topic_detection.csv", index_label=False)
86
87if __name__ == "__main__":
88	main(df=df)  # Ejecuta la función principal cuando el script se corre directamente
89

Detalles Clave de la Implementación

Desglosemos los elementos clave que hacen exitosa esta implementación:

1. Ingeniería Precisa del Prompt de Sistema

El prompt de sistema es crucial para alcanzar alta precisión. Nuestra implementación:

  • Establece el modelo como un "experto en clasificación de temas".
  • Define claramente la tarea: clasificar texto según el tema.
  • Proporciona la lista exacta de temas posibles dinámicamente.
  • Impone un formato de salida estricto como JSON.
  • Enfatiza la importancia de la ortografía exacta en las etiquetas.
  • Incluye un ejemplo del formato de salida esperado.

Esta cuidadosa ingeniería del prompt asegura que el modelo entienda exactamente lo que se espera y produzca resultados consistentes y analizables.

2. Salida JSON Estructurada

Al solicitar una respuesta JSON estructurada con un esquema específico:

Copied!
1{
2	"class": "la etiqueta que elegiste"
3}
4

Aseguramos:

  • Respuestas consistentes y fácilmente analizables.
  • Sin explicaciones ni texto superfluos.
  • Extracción directa del resultado de la clasificación.

La función

Copied!
1eval()
convierte la cadena JSON en un diccionario de Python, permitiéndonos extraer la clasificación con
Copied!
1response["class"]
.

3. Mensajería Basada en Roles

Nuestra implementación usa dos roles distintos en la llamada a la API:

  • Copied!
    1"role": "developer"
    para el prompt de sistema que configura la tarea.
  • Copied!
    1"role": "user"
    para el texto a clasificar.

Esta separación ayuda al modelo a distinguir entre instrucciones y contenido a analizar.

4. Seguimiento del Rendimiento

La implementación incluye seguimiento del rendimiento integrado:

  • Medición del tiempo de ejecución para cada clasificación.
  • Monitorización del progreso con tqdm.
  • Almacenamiento de resultados para análisis posterior.

Esto nos permitió medir con precisión el tiempo promedio de procesamiento de 0.65 segundos reportado en nuestra prueba comparativa.

Adaptando la Implementación a Tus Necesidades

Para usar este código para tus propias necesidades de detección de temas:

  1. Prepara tu dataset: Asegúrate de que tus datos tengan una columna "text" con el contenido a clasificar y una columna "label" con la verdad fundamental (ground truth) (si evalúas el rendimiento).

  2. Personaliza la lista de temas: Si tienes un conjunto fijo de temas, puedes codificarlos directamente en lugar de extraerlos del dataset:

Copied!
1   labels = ["Tecnología", "Salud y Medicina", "Finanzas y Economía", "Política", ...]
2
  1. Ajusta el modelo: Aunque usamos "gpt-4o-mini" para nuestra prueba comparativa, puedes experimentar con otros modelos de OpenAI:
Copied!
1   model="gpt-4" # Para máxima precisión pero mayor coste
2   model="gpt-3.5-turbo" # Para menor coste con precisión razonable
3

Resultados de Rendimiento

En nuestras pruebas comparativas, esta implementación de OpenAI alcanzó:

  • Precisión del 88.1% en la clasificación de temas - identificando correctamente los temas en casi 9 de cada 10 muestras de texto.
  • Tiempo promedio de procesamiento de 0.650 segundos por muestra de texto.

Esto representa un excelente equilibrio entre precisión y velocidad para la mayoría de las aplicaciones prácticas.

Conclusión

Implementar la detección de temas con los modelos de OpenAI proporciona una forma poderosa de categorizar automáticamente contenido de texto con alta precisión. La implementación que hemos compartido alcanzó una precisión del 88.1% en un dataset diverso de temas, haciéndola adecuada para una amplia gama de aplicaciones, desde la gestión de contenido hasta la clasificación de la intención del usuario.

Siguiendo el enfoque descrito en esta guía, puedes integrar rápidamente capacidades sofisticadas de detección de temas en tus propias aplicaciones, aprovechando el poder de los modelos de lenguaje de OpenAI para comprender y categorizar contenido textual.

Ya sea que estés construyendo un sistema de recomendación de contenido, mejorando la funcionalidad de búsqueda o desarrollando un asistente de IA que necesite comprender las consultas de los usuarios, esta implementación proporciona una base sólida para una detección de temas precisa.


Posts relacionados

Ver todo