Sbloccare il potere dei dati testuali con LLMs

Sveltire il potenziale dei dati testuali con LLMs

LABORATORIO DI DATA SCIENCE

Impara come gestire i dati testuali con LLM: una guida passo-passo per principianti

Immagine generata dall'autore usando Midjourney

Le recensioni dei clienti, i sondaggi dei dipendenti e i post sui social media possono essere incredibilmente potenti nel rivelare le opinioni delle persone su un determinato prodotto o servizio. Tuttavia, la maggior parte degli analisti di dati fa ben poco con questo tipo di dati. Perché, chiedi? Trovare approfondimenti dai dati testuali non è un compito facile e può lasciare perfino gli analisti di dati più esperti a grattarsi la testa per giorni.

Ecco dove entrano in gioco i Large Language Models (LLM). Possono aiutare a svolgere compiti come la traduzione, la sintesi, l’analisi del sentiment e molto altro ancora. Ma cosa sono esattamente gli LLM? Per semplificare le cose, puoi pensare a un LLM come un pappagallo. Proprio come un pappagallo ripete ciò che sente a casa, un LLM imita il linguaggio umano. La differenza principale è che gli LLM sono stati addestrati su un enorme volume di dati, ben oltre ciò che un pappagallo imparerebbe nella sua gabbia! Ecco perché gli LLM hanno la capacità di generare testo coerente e rilevante dal contesto senza le occasionali sciocchezze di un pappagallo. 🦜

In questo articolo, esploreremo come funzionano gli LLM e come rendono più facile che mai agli analisti di dati estrarre informazioni dai dati testuali. Ci sono molteplici LLM disponibili attraverso API, ognuno con diverse capacità e prezzi. Utilizzeremo GPT-3 tramite l’API di OpenAI. Al momento della scrittura, OpenAI addebita l’utilizzo dell’API in base al numero di richieste effettuate e al numero di token generati. Il costo totale per questo tutorial ammontava a $0.2.

È ora di iniziare!

Indice

Passo 1: Download dei datiPasso 2: Lettura dei datiPasso 3: Pre-elaborazione dei datiPasso 3a: Gestione dei valori NaNPasso 3b: Trasformazione del testo per GPT-3Passo 3c: Conteggio dei tokenPasso 4: Configurazione di un account OpenAIPasso 5: Lavorare con GPT-3Passo 6: Riassumere i risultati

Prerequisiti

Per seguire questo tutorial, avrai bisogno di quanto segue:

  • Conoscenza di base di Python
  • Ambiente Python 3
  • Chiave API di OpenAI (vedi passaggio 4)

Passo 1: Download dei dati

Il set di dati che utilizzeremo è un sondaggio su larga scala condotto da Kaggle nel 2017, con lo scopo di scoprire nuove tendenze nell’apprendimento automatico e nella data science. Per questo tutorial, utilizzeremo solo il file csv freeformResponses, che contiene risposte aperte alle domande di Kaggle.

Estratto del file csv freeformResponses

Passo 2: Lettura dei dati

Successivamente, leggeremo il file csv in un dataframe e ci concentreremo sulla colonna ” PersonalProjectsChallengeFreeForm“. Questa colonna contiene le sfide che le persone affrontano nell’utilizzo di dataset pubblici per i loro progetti personali. Kaggle, come piattaforma per la scienza dei dati e l’apprendimento automatico, può utilizzare queste informazioni per migliorare i suoi servizi (ad esempio, sviluppando contenuti rilevanti, tutorial e risorse che affrontano specificamente queste sfide).

# caricamento libreriaimport pandas as pd# leggere il file e creare un dfdf = pd.read_csv('freeformResponses.csv', usecols = ['PersonalProjectsChallengeFreeForm'])# controlla l'outputdf.head()
Output

Passo 3: Pre-elaborazione dei dati

La pre-elaborazione dei dati coinvolge una serie di passaggi per pulire e preparare i dati per l’analisi. GPT-3 può gestire dati di testo relativamente puliti e strutturati senza la necessità di una pre-elaborazione estesa. Tuttavia, per dati complessi o non standard, potrebbe essere necessaria una pre-elaborazione aggiuntiva per ottenere i migliori risultati nell’utilizzo di GPT-3. Questo è qualcosa da tenere presente se il testo contiene più lingue, errori di ortografia o termini specifici del dominio.

Passo 3a: Gestione dei valori NaN

Inizieremo gestendo i valori NaN (Non un Numero). I valori NaN rappresentano valori mancanti o non definiti con proprietà molto distinte, rendendo importante rilevarli in anticipo utilizzando la funzione isna(). Una volta identificati, possiamo adottare misure appropriate per gestirli in modo efficace.

# conteggio dei valori NaN df.isna().sum()
Output

Ci sono 13.214 valori NaN (80% di tutte le risposte!), il che significa che queste persone non hanno fornito una risposta alla domanda. L’approccio più semplice è rimuovere tutte le voci che contengono valori NaN utilizzando la funzione dropna(). Tuttavia, a seconda del caso d’uso specifico, potrebbe essere preferibile gestire i valori NaN in modo diverso, ad esempio sostituendoli con valori specifici.

# eliminare i valori NaN df = df.dropna()# controlla l'output df.head()
Output

A scopo dimostrativo, lavoreremo solo con le prime 500 risposte (non nulle) del sondaggio.

# selezionare le prime 500 righe df = df.head(500)

Passo 3b: Trasformazione del testo per GPT-3

Successivamente, trasformeremo i dati di testo in un formato adatto a GPT-3. Estrarremo tutti i valori dalla colonna ” PersonalProjectsChallengeFreeForm” e li memorizzeremo nella lista ” challenges“. Questa trasformazione inizia con l’uso della funzione squeeze(), che converte il dataframe in una serie di pandas. Successivamente, la funzione tolist() converte questa serie in una lista.

# converte il df in una serie e poi in una listachallenges = df.squeeze().tolist()# controlla l'outputchallenges[:5]
Output

In questo esempio, “challenges” è una lista in cui ogni elemento rappresenta una risposta proveniente dal sondaggio originale. Forniremo questo testo come input a GPT-3.

Passaggio 3c: Contare i Token

Il nostro testo è quasi pronto per GPT-3. Prima di procedere, è importante capire come GPT-3 comprende e lavora con il testo. Inizialmente, esegue la tokenizzazione, che consiste nel dividere il testo in unità più piccole chiamate token. I token sono unità di testo, come frasi, parole, numeri o anche segni di punteggiatura. Ad esempio, la frase “ciao amico!” può essere divisa in tre token: “ciao”, “amico” e “!”.

Esempio di tokenizzazione

Dopo la tokenizzazione, GPT-3 procede con la codifica, che significa convertire questi token in numeri di token. Nel nostro esempio, i tre token “ciao”, “amico” e “!” possono essere convertiti in tre numeri di token: “15339”, “4333” e “0”.

Esempio di codifica

Determinando il numero di token nel nostro testo, sapremo se il testo è troppo lungo per il modello da elaborare, nonché quanto costerà una chiamata API di OpenAI (poiché le chiamate API vengono fatturate in base al numero di token inviati in input e al numero di token restituiti da GPT nell’output).

Per fare ciò, installeremo una libreria chiamata tiktoken e importeremo il modulo necessario encoding_for_model. Poiché LLM diversi utilizzano metodi diversi per codificare il testo, dovremo specificare il modello che utilizzeremo, che è “gpt-3.5-turbo-16k”. Per ogni frase, quindi tokenizeremo e codificheremo il testo.

# installa la liberia
pip install tiktoken
# importa la libreria
from tiktoken import encoding_for_model
# definisci il modello per la codifica del testo, in questo caso "gpt-3.5-turbo-16k"
enc = encoding_for_model("gpt-3.5-turbo-16k")
# crea una lista vuota per memorizzare i token
tokens = []
# itera attraverso ogni frase nella lista "challenges"
for sentence in challenges:
    # codifica la frase utilizzando il modello specificato e appendila alla lista "tokens"
    tokens.append(enc.encode(sentence))
# verifica l'output
pd.DataFrame(data={'challenges':challenges, 'tokens':tokens}).head(3)
Output

Il passaggio finale è conteggiare i token, il che può essere realizzato determinando la lunghezza della lista “num_tokens”.

# crea una lista vuota per memorizzare il numero di token
num_tokens = []
# itera attraverso la lista "tokens", che è una lista di liste
for item in tokens:
    # ciclo annidato per iterare attraverso le sottoliste all'interno di "tokens"
    for subitem in item:
        # aggiungi il subitem (token) alla lista "num_tokens"
        num_tokens.append(subitem)
# verifica l'output
len(num_tokens)
Output

Per stimare il costo totale in base al nostro input, possiamo fare riferimento alla documentazione sui prezzi. Nel nostro caso, 4629 token corrisponderebbero a un costo di $0.01.

Step 4: Impostazione di un account OpenAI

Il nostro testo è finalmente pronto per GPT-3 (stiamo arrivando alle cose interessanti!). Per lavorare con GPT-3, utilizzeremo l’API di OpenAI. Assicurati di avere un account OpenAI configurato per accedere all’API OpenAI. Se non hai ancora un account, segui i passaggi di seguito per crearne uno.

Per iniziare, vai al sito web di OpenAI e clicca sul pulsante “Iscriviti” nell’angolo in alto a destra della pagina. Compila il modulo con il tuo indirizzo email, crea una password e fornisci qualsiasi altra informazione necessaria. Quindi, clicca sul pulsante “Crea account“. Tieni d’occhio la tua casella di posta perché riceverai una email di conferma. Clicca sul link nella email per verificare il tuo account. Una volta fatto, sei pronto per effettuare l’accesso.

Con il tuo account creato, il passo successivo è finanziarlo. Ricorda, quando utilizzi l’API, verranno addebitati i costi in base all’utilizzo. Vai semplicemente a “Gestisci account” e cerca la scheda “Fatturazione”. Lì potrai aggiungere i dettagli della tua carta di pagamento e specificare l’importo iniziale che desideri inserire nel tuo account.

Il passo finale importante è generare la tua chiave di API, che funge da chiave di accesso privata all’API. Puoi crearla nella scheda “Chiavi API”. Tieni al sicuro questa chiave perché non può essere recuperata se persa. Tuttavia, se dovesse sfuggire, hai la possibilità di crearne una nuova.

Step 5: Lavorare con GPT-3

Ora che abbiamo accesso a GPT-3 tramite l’API di OpenAI, possiamo inviare una richiesta contenente l’input e la chiave API. In cambio, otterremo una risposta contenente l’output di GPT-3.

Utilizzo di GPT-3 tramite l'API di OpenAI

Per prima cosa, installeremo una libreria chiamata openai. Quindi, configureremo la chiave API per autenticare le nostre richieste.

# installa la libreria pip install openai# importa la libreriaimport openai as ai# sostituisci 'la_tua_chiave_api' con la tua chiave API effettivaai.api_key = 'la_tua_chiave_api'

Inviaremo il nostro testo a GPT-3 e gli chiederemo di riassumere gli argomenti principali, che saranno quindi memorizzati nella variabile “response“.

💡 Nota: Questo codice è un esempio semplificato e puoi adattarlo per varie attività modificando il messaggio dell’utente e il messaggio di sistema in base alle tue esigenze specifiche.

# ottieni la risposta di GPT-3response = ai.ChatCompletion.create(    model = 'gpt-3.5-turbo-16k',    messages = [        {"role": "system", "content": "Sei un assistente utile. Il tuo compito è analizzare un insieme di recensioni."},        {"role": "user", "content": f'''            Di seguito è riportato un insieme di recensioni. Per favore, identifica gli argomenti principali menzionati in questi commenti.             Restituisci una lista di 5 argomenti con descrizione. Recensioni:            {challenges}            '''        }    ],    temperature = 0,    max_tokens = 6000)

Andiamo attraverso il codice passo passo:

  • response = ai.ChatCompletion.create(: Questa riga inizia una richiesta a GPT-3 e assegna la risposta alla variabile “response“.
  • model = 'gpt-3.5-turbo-16k': Questo parametro specifica quale modello di GPT-3 utilizzare.
  • messages = [ ... ]: Questa sezione definisce una lista di messaggi per i quali GPT-3 creerà una risposta. Ogni messaggio ha un ruolo (ad esempio, sistema o utente) e un contenuto. Il messaggio del sistema aiuta a impostare il comportamento di GPT-3. Ad esempio, possiamo dire: “Sei un assistente utile. Il tuo compito è analizzare un insieme di recensioni”. Il messaggio dell’utente, d’altra parte, fornisce istruzioni per il compito. Ad esempio, possiamo dire: “Di seguito è riportato un insieme di recensioni. Per favore, identifica gli argomenti principali menzionati in questi commenti”.
  • temperature = 0: Questo parametro influenza la casualità delle risposte. Puoi pensarlo come un modo per controllare la creatività e l’imprevedibilità delle risposte. Impostarlo su 0 significa ottenere lo stesso output ogni volta che lo chiedi, quasi come un disco rotto. D’altra parte, impostarlo su un valore più alto (ad esempio, 0,8) significa ottenere un output fresco.
  • max_tokens = 6000: Questo parametro specifica il numero massimo di token che la risposta può contenere. Impostarlo su 6000 garantisce che la risposta non supererà questa lunghezza. Se la risposta supera questo limite, verrà troncata.

Dopo aver ricevuto una risposta da GPT-3, restituiremo il contenuto (escludendo eventuali metadati aggiuntivi).

# mostrare rispostarisposta['choices'][0]['message']['content']

GPT-3 ha restituito cinque argomenti:

1. Pulizia e preparazione dei dati: Molte recensioni menzionano la sfida della pulizia e preparazione dei dati per l’analisi. Questo include il trattamento dei valori mancanti, i problemi di formattazione, i dati non strutturati e la necessità di manipolazione dei dati.

2. Qualità e documentazione dei dati: Diverse recensioni evidenziano la scarsa qualità dei dati, inclusa la mancanza di documentazione, documentazione errata e dati non affidabili. Vengono anche menzionati problemi legati alla completezza, precisione e affidabilità dei dati.

3. Trovare ed accedere a dataset pertinenti: Molti revisori esprimono difficoltà nel trovare i dataset giusti per i loro progetti. Questo include sfide nel trovare dataset che corrispondano a requisiti specifici, la mancanza di disponibilità, dimensioni limitate o rilevanza dei dataset pubblici e la necessità di raccogliere dati personali.

4. Connessione e fusione dei dati: Alcune recensioni menzionano sfide legate alla connessione e fusione dei dati, come l’integrazione di dati provenienti da diverse fonti, la gestione di formati incoerenti e la fusione di dataset.

5. Potenza di calcolo e scalabilità: Alcune recensioni menzionano sfide legate alla potenza di calcolo e scalabilità, soprattutto quando si lavora con grandi dataset o si elaborano dati su una singola macchina.’, ‘Questi argomenti riflettono le sfide comuni affrontate dalle persone che lavorano con i dati, inclusi problemi legati alla qualità dei dati, preparazione dei dati, disponibilità dei dataset e limitazioni tecniche.”

💡 Nota: Anche se GPT-3 è potente di per sé, è spesso possibile ottenere risultati migliori affinando il modello con i propri dati di addestramento.

Passaggio 6: Riassumere i risultati

Questi argomenti riflettono le sfide comuni affrontate dalle persone che lavorano con i dati, inclusi problemi legati alla preparazione dei dati, qualità dei dati, affidabilità e scalabilità. Un’azienda come Kaggle può sfruttare queste intuizioni per sviluppare materiale educativo che affronti specificamente queste sfide, fornendo così un supporto prezioso alla propria comunità.

Conclusioni

In questo articolo, abbiamo esplorato il significativo potenziale degli LLM nel estrarre informazioni dai dati testuali. Abbiamo discusso il funzionamento degli LLM e come possano rappresentare una svolta per gli analisti dei dati che devono gestire dati testuali. Ora avete le conoscenze per applicare questi concetti alle vostre stesse attività di analisi testuale.

Spero che abbiate trovato utile questo articolo. Se avete domande o pensieri, sarò felice di leggerli nei commenti!