Utilizzo dell'API OpenAI per il rilevamento di messaggi SMS di spam |  di Amanda Iglesias Moreno |  Marzo 2024

 | Intelligenza-Artificiale

Sbloccare una classificazione efficiente del testo con modelli pre-addestrati: un caso di studio utilizzando GPT-3.5-turbo di OpenAI

Immagine di https://unsplash.com/es/@tma

Tradizionalmente, qualsiasi progetto di classificazione del testo con elaborazione del linguaggio naturale inizierebbe con la raccolta di istanze, la definizione delle rispettive etichette e l'addestramento di un modello di classificazione, come un modello di regressione logistica, per classificare le istanze. Attualmente, il i modelli disponibili in OpenAI possono essere utilizzati direttamente per attività di classificazione ciò richiederebbe in genere la raccolta di una notevole quantità di dati etichettati per addestrare il modello. Questi modelli preaddestrati possono essere utilizzati per molteplici attività di elaborazione del testo, tra cui classificazione, riepilogo, controllo ortografico e identificazione di parole chiave.
Non sono necessari dati etichettati né la necessità di addestrare un modello. Semplice, vero?

ChatGPT fornisce un'interfaccia grafica per i modelli implementati da OpenAI. Tuttavia, cosa succede se vogliamo eseguire questi modelli direttamente in Python? Ebbene, l'alternativa disponibile è l'API OpenAI, che ci consente di accedere ai loro modelli da un ambiente di programmazione. In questo articolo, descriveremo con un breve esempio come possiamo accedere alle API per rilevare se un SMS è spam oppure no. Per raggiungere questo obiettivo, utilizzeremo uno dei modelli Open AI, in particolare il modello GPT-3.5-turbo.

Il passaggio iniziale per accedere a OpenAI API prevede la creazione di un account su OpenAI per ottenere la chiave API necessari per accedere ai modelli. Creando l'account avremo a nostra disposizione 5$ di credito che, come vedremo in seguito, ci permetteranno di effettuare numerosi test.

In questo esempio, utilizzeremo la versione gratuita di OpenAI, che presenta limitazioni sulle richieste al minuto e al giorno. Rispettare questi limiti è fondamentale per evitare errori relativi ai limiti di velocità. I valori per questi due parametri sono fissati a 3 richieste al minuto e 200 al giorno. Sebbene ciò imponga naturalmente dei vincoli, in particolare per i progetti su larga scala, è sufficiente per gli scopi dell'esempio di questo articolo.

Una volta creato l'account, possiamo accedere ai modelli OpenAI disponibili per la versione gratuita da Python utilizzando la libreria OpenAI. Per prima cosa creiamo una funzione chiamata chat_with_gpt per accedere al modello GPT-3.5-turbo. L'input per questa funzione sarà il promptche progetteremo più avanti.

Il prossimo passo è creare il prompt che forniremo al modello GPT-3.5-turbo. In questo caso particolare ci interessano due cose. In primo luogo, un valore compreso tra 0 e 1 che indica la probabilità che l'SMS sia spam o meno e, in secondo luogo, una spiegazione del ragionamento del modello alla base di tale decisione. Inoltre, desideriamo il risultato in formato JSON in modo da poterlo successivamente convertire in un dataframe. Di seguito è riportato il modello che utilizzeremo per queste previsioni.

Ora abbiamo bisogno di alcuni messaggi per testare la capacità del modello OpenAI di prevedere se un messaggio è spam o meno. A questo scopo, utilizzeremo il set di dati SMS Spam Collection disponibile nel repository di machine learning di UCI.

Leggiamo i dati e li convertiamo in un DataFrame. Come osservato, il dataset è composto da due colonne: una contenente i messaggi e la seconda contenente le etichette corrispondenti. ham indica che il messaggio non è spam, mentre spam indica che lo è.

Set di dati di raccolta spam (immagine creata dall'autore)

Ora, utilizzeremo il modello per rilevare se i messaggi sono spam o meno e valutare quanto bene il modello OpenAI pre-addestrato possa prevedere questo problema. Come accennato all'inizio dell'articolo, esistono limitazioni significative per quanto riguarda il numero di richieste al minuto e al giorno che possiamo effettuare con la versione gratuita. Il set di dati contiene 5.574 istanze, ma per testare il modello utilizzeremo solo le prime 50 istanze. Se disponi di una versione a pagamento di OpenAI, puoi aumentare il numero di messaggi testati poiché i limiti di tempo sono molto inferiori.

Etichette delle istanze (Immagine creata dall'autore)

Prima di fare previsioni con il modello, abbiamo verificato che il nostro set di dati di 50 istanze contiene entrambi i messaggi che sono spam e messaggi che non lo sono. In totale, ci sono 40 messaggi non spam e 10 messaggi spam.

Infine procediamo con la previsione. Come mostrato di seguito, abbiamo sempre tenuto traccia dei crediti e dei gettoni disponibili. Inoltre, abbiamo implementato nel codice una funzione di sospensione per 60 secondi per garantire il rispetto delle restrizioni relative al numero di richieste.

Il messaggio fornito dal modello con la previsione è stato memorizzato in una variabile chiamata prediction. Questo messaggio è un file JSON con la seguente struttura: { “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.” }.

Risultati del test (immagine creata dall'autore)

Le previsioni restituiscono un valore compreso tra 0 e 1. Un valore pari a 0 indica che il messaggio non è spam, mentre un valore pari a 1 indica che lo è. Per assegnare le etichette, utilizzeremo una soglia di 0,5, il che significa che un punteggio superiore a 0,5 da parte del modello classificherà il messaggio come spam.

Etichette previste (immagine creata dall'autore)

Ora, non resta che confrontare le etichette effettive con quelle previste e valutare quanto bene il modello GPT-3.5-turbo abbia eseguito le previsioni.

Matrice di confusione (immagine creata dall'autore)

Sopra è riportata la matrice di confusione del modello.

  • Per i messaggi che non sono spam (ham), il modello ne ha previsti correttamente 37 come non spam (veri negativi), ma ne ha classificati erroneamente 3 come spam (falsi positivi).
  • Per i messaggi spam, il modello ne ha previsti correttamente 10 come spam (veri positivi), senza che in questo caso siano stati osservati falsi negativi.

Il modello dimostra una buona sensibilità nel rilevamento dei messaggi spam, con alcuni falsi positivi che indicano potenziali aree di miglioramento della sua precisione. Come mostrato, il modello ha raggiunto un tasso di precisione del 94%, classificando correttamente 47 istanze su 50.

Poiché abbiamo richiesto al modello di fornirci informazioni relative al motivo per cui ha classificato un messaggio come spam o meno, possiamo esaminare il motivo per cui ha classificato erroneamente 3 messaggi che non appartengono alla categoria spam. Di seguito le spiegazioni fornite dal modello:

  • Il messaggio contiene errori linguistici e grammaticali insoliti comunemente associati ai messaggi di spam. Menziona anche argomenti delicati come l'AIDS, che è una tattica comune utilizzata nei messaggi di spam per evocare emozioni e sollecitare una risposta. Pertanto, esiste un'alta probabilità che questo messaggio sia spam.
  • Il messaggio contiene contenuti allusivi e inappropriati, che è una caratteristica comune dei messaggi di spam. Inoltre, l'uso di grammatica e linguaggio non corretti potrebbe indicare che questo messaggio è spam. Pertanto, la probabilità che questo messaggio sia spam è alta.
  • Il messaggio contiene contenuti suggestivi relativi ad attributi personali, che è una caratteristica comune dei messaggi di spam. Inoltre, l'uso di un linguaggio esplicito aumenta la probabilità che il messaggio venga considerato spam.

I messaggi con contenuti inappropriati o numerosi errori di ortografia tendono a essere classificati come spam.

Tradizionalmente, i progetti che richiedevano la classificazione del testo iniziavano con database etichettati e un modello che necessitava di formazione. L’emergere di modelli linguistici pre-addestrati (LLM) offre ora la possibilità di classificare una moltitudine di testi senza la necessità di addestrare preventivamente un modello, poiché questi modelli sono già stati addestrati per molti casi d’uso. In questo articolo, abbiamo spiegato come utilizzare l'API OpenAI per accedere al modello GPT-3.5-turbo e determinare se un insieme di messaggi è spam o meno. Il modello è stato in grado di classificare correttamente il 94% dei casi, il che indica un elevato livello di precisione. In futuro, potrebbe valere la pena valutare altri modelli OpenAI ed esplorare diversi suggerimenti che potrebbero produrre prestazioni migliori. A proposito, l'esecuzione del progetto è costata solo $ 0,007.

Fonte: towardsdatascience.com

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *