Utilización de la API OpenAI para la detección de mensajes SMS no deseados |  de Amanda Iglesias Moreno |  marzo de 2024

Desbloquear una clasificación de texto eficiente con modelos previamente entrenados: un estudio de caso utilizando GPT-3.5-turbo de OpenAI

Imagen por https://unsplash.com/es/@tma

Tradicionalmente, cualquier proyecto de clasificación de textos con procesamiento de lenguaje natural comenzaría recopilando instancias, definiendo sus respectivas etiquetas y entrenando un modelo de clasificación, como un modelo de regresión logística, para clasificar las instancias. Actualmente, el Los modelos disponibles en OpenAI se pueden utilizar directamente para tareas de clasificación. eso normalmente requeriría recopilar una cantidad sustancial de datos etiquetados para entrenar el modelo. Estos modelos previamente entrenados se pueden utilizar para múltiples tareas de procesamiento de texto, incluidas clasificación, resumen, revisión ortográfica e identificación de palabras clave.
No requerimos ningún dato etiquetado ni la necesidad de entrenar un modelo. Sencillo, ¿verdad?

ChatGPT proporciona una interfaz gráfica para los modelos implementados por OpenAI. Sin embargo, ¿qué pasa si queremos ejecutar esos modelos directamente en Python? Pues la alternativa disponible es la API OpenAI, que nos permite acceder a sus modelos desde un entorno de programación. En este articulo, Describiremos con un breve ejemplo cómo podemos acceder a la API para detectar si un SMS es spam o no.. Para lograr esto, utilizaremos uno de los modelos Open AI, específicamente el modelo GPT-3.5-turbo.

El paso inicial para acceder al OpenAI API implica crear una cuenta en OpenAI para obtener la clave API necesarios para acceder a los modelos. Al crear la cuenta tendremos a nuestra disposición 5$ de crédito que, como veremos más adelante, nos permitirán realizar numerosas pruebas.

En este ejemplo, Utilizaremos la versión gratuita de OpenAI, que viene con limitaciones en las solicitudes por minuto y por día.. Cumplir con estos límites es crucial para evitar errores de límite de tarifa. Los valores de estos dos parámetros se establecen en 3 solicitudes por minuto y 200 por día. Si bien esto naturalmente impone restricciones, particularmente para proyectos de gran escala, es suficiente para los propósitos del ejemplo de este artículo.

Una vez que hayamos creado la cuenta, Podemos acceder a los modelos OpenAI disponibles para la versión gratuita desde Python usando la biblioteca OpenAI.. Primero, creamos una función llamada chat_with_gpt para acceder al modelo GPT-3.5-turbo. La entrada a esta función será la promptque diseñaremos más adelante.

El siguiente paso es crear el mensaje que le proporcionaremos al modelo GPT-3.5-turbo. En este caso particular, nos interesan dos cosas. En primer lugar, un valor entre 0 y 1 que indica la probabilidad de que el SMS sea spam o no, y en segundo lugar, una explicación del razonamiento del modelo detrás de esa decisión. Además, deseamos el resultado en formato JSON para luego poder convertirlo en un marco de datos. A continuación se muestra la plantilla que usaremos para estas predicciones.

Ahora, necesitamos algunos mensajes para probar qué tan bien predice el modelo OpenAI si un mensaje es spam o no. Para ello, utilizaremos el conjunto de datos de recopilación de spam de SMS disponible en el repositorio de aprendizaje automático de UCI.

Leemos los datos y los convertimos en un DataFrame. Como se observa, el conjunto de datos consta de dos columnas: una que contiene los mensajes y la segunda que contiene las etiquetas correspondientes. ham indica que el mensaje no es spam, mientras que spam indica que así es.

Conjunto de datos de recopilación de spam (imagen creada por el autor)

Ahora, Usaremos el modelo para detectar si los mensajes son spam o no y evaluaremos qué tan bien el modelo OpenAI previamente entrenado puede predecir este problema.. Como se comenta al principio del artículo, existen importantes limitaciones en cuanto al número de solicitudes por minuto y por día que podemos realizar con la versión gratuita. El conjunto de datos contiene 5574 instancias, pero para probar el modelo, solo usaremos las primeras 50 instancias. Si tiene una versión paga de OpenAI, puede aumentar la cantidad de mensajes probados ya que las limitaciones de tiempo son mucho menores.

Etiquetas de instancias (Imagen creada por el autor)

Antes de hacer predicciones con el modelo, Hemos verificado que nuestro conjunto de datos de 50 instancias contiene ambos mensajes. que son spam y mensajes que no lo son. En total, hay 40 mensajes que no son spam y 10 mensajes spam.

Finalmente, procedemos a realizar la predicción. Como se muestra abajo, Hemos realizado un seguimiento de los créditos y tokens disponibles en todo momento.. Además, hemos implementado una función de suspensión en el código durante 60 segundos para garantizar el cumplimiento de las restricciones en cuanto al número de solicitudes.

El mensaje proporcionado por el modelo con la predicción se ha almacenado en una variable llamada prediction. Este mensaje es un archivo JSON con la siguiente estructura: { “spam”: “0.1”, “reasoning”: “The message seems to be a typical promotional message about a buffet offer and does not contain any typical spam keywords or characteristics. The probability of this message being spam is low.” }.

Resultado de la prueba (Imagen creada por el autor)

Las predicciones arrojan un valor entre 0 y 1. Un valor de 0 indica que el mensaje no es spam, mientras que un valor de 1 indica que sí lo es. Para asignar las etiquetas usaremos un umbral de 0,5, lo que significa que una puntuación superior a 0,5 por parte del modelo categorizará el mensaje como spam.

Etiquetas previstas (Imagen creada por el autor)

Ahora, todo lo que queda es comparar las etiquetas reales con las etiquetas predichas y evaluar qué tan bien el modelo turbo GPT-3.5 ha realizado las predicciones.

Matriz de confusión (Imagen creada por el autor)

Arriba está la matriz de confusión del modelo.

  • Para los mensajes que no son spam (ham), el modelo predijo correctamente 37 de ellos como no spam (verdaderos negativos), pero clasificó erróneamente 3 de ellos como spam (falsos positivos).
  • Para los mensajes que son spam, el modelo predijo correctamente 10 de ellos como spam (verdaderos positivos), y en este caso no se observaron falsos negativos.

El modelo demuestra una buena sensibilidad en la detección de mensajes de spam, con algunos falsos positivos que indican áreas potenciales de mejora en su precisión. Como se muestra, el modelo logró una tasa de precisión del 94% y clasificó correctamente 47 de 50 casos.

Dado que le solicitamos al modelo que nos brinde información sobre su razonamiento para clasificar un mensaje como spam o no, podemos examinar por qué clasificó erróneamente 3 mensajes que no pertenecen a la categoría de spam. A continuación se muestran las explicaciones proporcionadas por el modelo:

  • El mensaje contiene errores gramaticales y de lenguaje inusuales comúnmente asociados con mensajes de spam. También menciona temas delicados como el SIDA, que es una táctica común utilizada en mensajes de spam para evocar emociones y provocar una respuesta. Por tanto, existe una alta probabilidad de que este mensaje sea spam.
  • El mensaje contiene contenido sugerente e inapropiado, que es una característica común de los mensajes de spam. Además, el uso de gramática y lenguaje inadecuados puede indicar que este mensaje es spam. Por tanto, la probabilidad de que este mensaje sea spam es alta.
  • El mensaje contiene contenido sugerente relacionado con atributos personales, que es una característica común de los mensajes de spam. Además, el uso de lenguaje explícito aumenta la probabilidad de que este mensaje se considere spam.

Los mensajes con contenido inapropiado o numerosos errores ortográficos suelen clasificarse como spam.

Tradicionalmente, los proyectos que requerían clasificación de texto comenzaban con bases de datos etiquetadas y un modelo que necesitaba capacitación. La aparición de modelos de lenguaje preentrenados (LLM) ofrece ahora la posibilidad de clasificar multitud de textos sin necesidad de entrenar un modelo de antemano, ya que estos modelos ya han sido entrenados para muchos casos de uso. En este artículo, explicamos cómo utilizar la API OpenAI para acceder al modelo GPT-3.5-turbo y determinar si un conjunto de mensajes es spam o no. El modelo pudo clasificar correctamente el 94% de los casos, lo que indica un alto nivel de precisión. En el futuro, podría valer la pena evaluar otros modelos de OpenAI y explorar diferentes indicaciones que puedan generar un mejor rendimiento. Por cierto, la ejecución del proyecto sólo costó 0,007 dólares.