
LABORATORIO DI SCIENZA DEI DATI
Le recensioni dei clienti, i sondaggi tra i dipendenti e i post sui social media possono essere incredibilmente efficaci rivelare gli atteggiamenti delle persone verso uno specifico prodotto o servizio. Tuttavia, la maggior parte degli analisti di dati fa ben poco con questo tipo di dati. Perchè lo chiedi? Generare approfondimenti dai dati di testo lo è non è un compito facile e può lasciare a grattarsi la testa per giorni anche gli analisti di dati più esperti.
È qui che i Large Language Models (LLM) vengono in soccorso. Possono aiutare a svolgere attività come traduzione, riepilogo, analisi del sentiment e molto altro. Ma cos’è esattamente un LLM? Per semplificare le cose, puoi pensare a un LLM come a pappagallo. Proprio come un pappagallo ripete ciò che sente a casa, un LLM imita il linguaggio umano. Una differenza fondamentale è che i LLM sono stati formati su un enorme volume di dati, ben oltre ciò che un pappagallo imparerebbe nella sua gabbia! Questo è il motivo per cui gli LLM hanno la capacità di generare testi coerenti e contestualmente rilevanti senza le sciocchezze occasionali di un pappagallo. 🦜
In questo articolo, esploreremo come funzionano gli LLM e come lo realizzano più facile che mai per gli analisti di dati per estrarre approfondimenti dai dati di testo. Sono ora disponibili più LLM tramite API, ciascuno con funzionalità e prezzi diversi. Utilizzeremo GPT-3 tramite API OpenAI. Al momento in cui scrivo, 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 è stato di $ 0,2.
È ora di approfondire!
▹ Passaggio 1: download dei dati
▹ Passaggio 2: lettura dei dati
▹ Passaggio 3: pre-elaborazione dei dati
▹ Passaggio 3a: gestire i valori NaN
▹ Passaggio 3b: trasformazione del testo per GPT-3
▹ Passaggio 3c: conteggio dei token
▹ Passaggio 4: configurazione di un account OpenAI
▹ Passaggio 5: lavorare con GPT-3
▹ Passaggio 6: riepilogo dei risultati
Per seguire questo tutorial, avrai bisogno di quanto segue:
- Conoscenza operativa di Python
- Ambiente Python3
- Chiave API OpenAI (vedere il passaggio 4)
Il set di dati che utilizzeremo è un sondaggio a livello di settore condotto da Kaggle nel 2017 mirava a scoprire nuove tendenze nel machine learning e nella scienza dei dati. Per questo tutorial utilizzeremo solo il file Risposte a forma libera csv, che contiene risposte aperte alle domande di Kaggle.
Successivamente, leggeremo il file CSV in un dataframe e ci concentreremo sulla colonna “ProgettipersonaliSfidaFreeForm”. Questa colonna contiene le sfide che le persone devono affrontare quando utilizzano set di dati pubblici per i propri progetti personali. Kaggle, in quanto piattaforma per la scienza dei dati e l’apprendimento automatico, può utilizzare queste informazioni per migliorare i propri servizi (ad esempio, sviluppando contenuti pertinenti, tutorial e risorse che affrontano specificamente queste sfide).
# load library
import pandas as pd# read file and create df
df = pd.read_csv('freeformResponses.csv', usecols = ('PersonalProjectsChallengeFreeForm'))
# check output
df.head()
La pre-elaborazione dei dati prevede una serie di passaggi per pulire e preparare i dati per l’analisi. GPT-3 è in grado di gestire dati di testo relativamente puliti e strutturati senza la necessità di un’approfondita pre-elaborazione. Tuttavia, per dati complessi o non standard, potrebbe essere necessaria una pre-elaborazione aggiuntiva per garantire i migliori risultati quando si sfrutta GPT-3. Questo è qualcosa da tenere a mente se il tuo testo contiene più lingue, errori di ortografia o termini specifici del dominio.
Passaggio 3a: gestire i valori NaN
Inizieremo occupandoci dei valori NaN (Not A Number). I valori NaN rappresentano valori mancanti o non definiti con proprietà molto distinte, per cui è importante rilevarli tempestivamente utilizzando il file isna()
funzione. Una volta identificati, possiamo adottare misure adeguate per gestirli in modo efficace.
# count NaN values
df.isna().sum()
Esistono 13.214 valori NaN (l’80% di tutte le risposte!), il che significa che queste persone non hanno fornito una risposta alla domanda. L’approccio più semplice consiste nel rimuovere tutte le voci che contengono valori NaN utilizzando il metodo dropna()
funzione. Tuttavia, a seconda del caso d’uso specifico, potresti preferire gestire i valori NaN in modo diverso, ad esempio sostituendoli con valori specifici.
# drop NaN values
df = df.dropna()# check output
df.head()
A scopo dimostrativo, lavoreremo solo con le prime 500 risposte (non nulle) del sondaggio.
# select first 500 rows
df = df.head(500)
Passaggio 3b: trasformazione del testo per GPT-3
Successivamente, trasformeremo i dati di testo in un formato adatto a GPT-3. Estrarremo tutti i valori da “ProgettipersonaliSfidaFreeForm” e memorizzarli nella colonna “sfide” elenco. Questa trasformazione inizia con l’uso del file squeeze()
funzione, che converte il dataframe in una serie di panda. Successivamente, il tolist()
la funzione converte questa serie in un elenco.
# convert df into a series and then into a list
challenges = df.squeeze().tolist()# check output
challenges(:5)
In questo esempio, “sfide” è un elenco in cui ciascun elemento rappresenta una risposta del sondaggio originale. Forniremo questo testo come input per GPT-3.
Passaggio 3c: conteggio dei token
Il nostro testo è quasi pronto per GPT-3. Prima di procedere, è importante comprendere come GPT-3 comprende e funziona con il testo. Inizialmente, funziona tokenizzazioneche comporta la suddivisione del testo in unità più piccole note come gettoni. I token sono unità di testo, come frasi, parole, numeri o anche segni di punteggiatura. Ad esempio, la frase “Ciao amico!” può essere suddiviso in tre token: “Ciao”, “ amico” E “!”.
Dopo la tokenizzazione, GPT-3 procede a codificail che significa che converte questi token in numeri token. Nel nostro esempio, i tre token “ciao”, “amico” e “!” può essere convertito in tre numeri token: “15339”, “ 4333” E “0”.
Determinando il numero di token nel nostro testo, sapremo se il testo è troppo lungo per essere elaborato dal modello e quanto costerà una chiamata API OpenAI (poiché le chiamate API vengono fatturate in base al numero di token inviati in il tuo input più il numero di token che GPT restituisce nell’output).
Per fare ciò, installeremo una libreria chiamata tiktoken
e importare il modulo necessario encoding_for_model
. Poiché diversi LLM utilizzano metodi diversi per la codifica del testo, dovremo specificare il modello che utilizzeremo, ovvero “gpt-3.5-turbo-16k”. Per ogni frase, tokenizzeremo e codificheremo il testo.
# install library
pip install tiktoken# import library
from tiktoken import encoding_for_model
# define the model for encoding text, in this case, "gpt-3.5-turbo-16k"
enc = encoding_for_model("gpt-3.5-turbo-16k")
# create an empty list to store tokens
tokens = ()
# loop through each sentence in the 'challenges' list
for sentence in challenges:
# encode the sentence using the specified model and append it to the 'tokens' list
tokens.append(enc.encode(sentence))
# check output
pd.DataFrame(data={'challenges':challenges, 'tokens':tokens}).head(3)
L’ultimo passaggio è contare i token, cosa che può essere effettuata determinando la lunghezza della lista”num_token”.
# create an empty list to store the number of tokens
num_tokens = ()# iterate through the 'tokens' list, which is a list of lists
for item in tokens:
# nested loop to iterate through sublists within 'tokens'
for subitem in item:
# append the subitem (token) to the 'num_tokens' list
num_tokens.append(subitem)
# check output
len(num_tokens)
Per stimare il costo totale in base al nostro input, possiamo fare riferimento a la documentazione sui prezzi. Nel nostro caso, 4629 token si tradurrebbero in un costo di $ 0,01.
Il nostro testo è finalmente pronto per GPT-3 (ci stiamo avvicinando al meglio!). Per lavorare con GPT-3, utilizzeremo l’API OpenAI. Assicurati di avere un account OpenAI configurato per accedere all’API OpenAI. Se non hai già un account, segui i passaggi seguenti per crearne uno.
Per dare il via alle cose, vai al OpenAI sito web e fare clic su “Iscrizione” nell’angolo in alto a destra della pagina. Compila il modulo con il tuo indirizzo email, crea una password e fornisci tutte le altre informazioni necessarie. Quindi, premi il pulsante “Creare un accountpulsante “. Tieni d’occhio la tua casella di posta perché riceverai un’e-mail di conferma. Fai clic sul collegamento nell’e-mail per verificare il tuo account. Fatto ciò, sei pronto per accedere.
Una volta creato il tuo account, il passo successivo è finanziarlo. Ricorda che quando utilizzi l’API ti verrà addebitato un costo per l’utilizzo. Basta andare su “Gestisci profilo” e trova il “Fatturazione“scheda. Lì puoi aggiungere i dettagli della tua carta di pagamento e specificare l’importo iniziale che desideri inserire nel tuo account.
L’ultimo passaggio importante è generare la chiave API, che funge da chiave di accesso privata all’API. Puoi crearlo nel “Chiavi API“scheda. Conserva questa chiave al sicuro perché non potrà essere recuperata in caso di smarrimento. Tuttavia, se scivola attraverso le fessure, hai la possibilità di crearne uno nuovo.
Ora che abbiamo accesso a GPT-3 tramite l’API OpenAI, possiamo inviare una richiesta contenente l’input e la chiave API. In cambio, riceveremo una risposta contenente l’output GPT-3.
Per prima cosa installeremo una libreria chiamata openai
. Quindi, configureremo la chiave API per autenticare le nostre richieste.
# install library
pip install openai# import library
import openai as ai
# replace 'your_api_key' with your actual API key
ai.api_key = 'your_api_key'
Invieremo il nostro testo a GPT-3 e gli chiederemo di riassumere gli argomenti principali, che verranno poi archiviati nel “risposta“variabile.
💡 Nota: Questo codice è un esempio semplificato e puoi adattarlo a varie attività modificando il messaggio utente e il messaggio di sistema in base alle tue esigenze specifiche.
# get GPT-3 response
response = ai.ChatCompletion.create(
model = 'gpt-3.5-turbo-16k',
messages = (
{"role": "system", "content": "You're a helpful assistant. Your task is to analyze a set of reviews."},
{"role": "user", "content": f'''
Below is a set of reviews. Please, identify the main topics mentioned in these comments.
Return a list of 5 topics with description. Reviews:
{challenges}
'''
}
),
temperature = 0,
max_tokens = 6000
)
Esaminiamo il codice passo dopo passo:
response = ai.ChatCompletion.create(
: questa riga avvia una richiesta a GPT-3 e assegna la risposta alla variabile “risposta”.model = 'gpt-3.5-turbo-16k'
: questo parametro specifica quale modello GPT-3 utilizzare.messages = ( ... )
: questa sezione definisce un elenco 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 di sistema aiuta a impostare il comportamento di GPT-3. Ad esempio, possiamo dire: “Sei un assistente utile. Il tuo compito è analizzare una serie di recensioni”. Il messaggio utente, d’altra parte, fornisce Istruzioni per il compito. Ad esempio, possiamo dire: “Di seguito è riportata una serie di recensioni. Per favore, identifica gli argomenti principali menzionati in questi commenti”.temperature = 0
: Questo parametro influenza la casualità delle risposte. Puoi considerarlo come un modo per controllare quanto siano creative e imprevedibili le risposte. Impostarlo su 0 significa che otterrai lo stesso risultato ogni volta che lo chiedi, quasi come un disco rotto. D’altra parte, impostarlo su un valore più alto (ad esempio, 0,8) significa che otterrai un nuovo output.max_tokens = 6000
: questo parametro specifica il numero massimo di token che la risposta può contenere. Impostandolo su 6000 si garantisce che la risposta non superi questa lunghezza. Se la risposta supera questo limite, verrà troncata.
Dopo aver ricevuto una risposta da GPT-3, restituiremo il contenuto (escluse eventuali metainformazioni aggiuntive).
# show response
response('choices')(0)('message')('content')
GPT-3 ha restituito cinque argomenti:
“1. Pulizia e preparazione dei dati: Molte recensioni menzionano la difficoltà di pulire e preparare i dati per l’analisi. Ciò include la gestione di valori mancanti, problemi di formattazione, dati non strutturati e la necessità di gestire i dati.
2. Qualità dei dati e documentazione: Numerose revisioni evidenziano la scarsa qualità dei dati, inclusa la mancanza di documentazione, documentazione errata e dati inaffidabili. Vengono menzionati anche i problemi relativi alla completezza, all’accuratezza e all’affidabilità dei dati.
3. Trovare e accedere a set di dati rilevanti: Molti revisori esprimono difficoltà nel trovare i set di dati giusti per i loro progetti. Ciò include difficoltà nel trovare set di dati che soddisfino requisiti specifici, mancanza di disponibilità, dimensioni limitate o pertinenza dei set di dati pubblici e la necessità di raccogliere dati personali.
4. Connettività e fusione dei dati: alcune revisioni menzionano le sfide legate alla connettività e alla fusione dei dati, come l’integrazione di dati provenienti da fonti diverse, la gestione di formati incoerenti e l’unione di set di dati.
5. Potenza di calcolo e scalabilità: Alcune revisioni menzionano le sfide legate alla potenza di calcolo e alla scalabilità, in particolare quando si lavora con set di dati di grandi dimensioni o quando si elaborano dati su una singola macchina.’,
“Questi argomenti riflettono le sfide comuni affrontate dalle persone quando lavorano con i dati, comprese le questioni relative alla qualità dei dati, alla preparazione dei dati, alla disponibilità dei set di dati e alle limitazioni tecniche.”
💡 Nota: Sebbene GPT-3 sia potente così com’è, spesso puoi ottenere risultati migliori ottimizzando il modello con i dati di addestramento.
Questi argomenti riflettono le sfide comuni affrontate dalle persone quando lavorano con i dati, comprese le questioni relative alla preparazione dei dati, alla qualità dei dati, all’affidabilità e alla scalabilità. Un’azienda come Kaggle può sfruttare queste intuizioni per sviluppare materiale educativo che affronti specificamente queste sfide, fornendo così un prezioso supporto alla propria comunità.
In questo articolo, abbiamo esplorato il potenziale significativo degli LLM nell’estrazione di approfondimenti dai dati di testo. Abbiamo discusso di come funzionano i LLM e di come possono rappresentare un punto di svolta per gli analisti di dati che si occupano di dati di testo. Ora hai le conoscenze per applicare questi concetti alle tue attività di analisi del testo.
Spero che tu abbia trovato utile questo articolo. Se hai domande o pensieri, sarò felice di leggerli nei commenti!
Fonte: towardsdatascience.com